programs.claude-code: avoid watching the Nix store

This commit is contained in:
Dimaniojk
2026-07-21 00:19:38 +02:00
committed by Robert Helgesson
parent a02190edf9
commit 56ccab8918
2 changed files with 35 additions and 13 deletions
+21 -13
View File
@@ -233,20 +233,28 @@ in
file = lib.mkMerge [
(lib.mkIf (cfg.settings != { } || cfg.marketplaces != { } || disabledMcpServerNames != [ ]) {
"${cfg.configDir}/settings.json".source = jsonFormat.generate "claude-code-settings.json" (
cfg.settings
// {
"$schema" = "https://json.schemastore.org/claude-code-settings.json";
}
// lib.optionalAttrs (cfg.marketplaces != { }) {
extraKnownMarketplaces = lib.mapAttrs mkMarketplaceEntry cfg.marketplaces;
}
// lib.optionalAttrs (disabledMcpServerNames != [ ]) {
disabledMcpjsonServers = lib.unique (
(cfg.settings.disabledMcpjsonServers or [ ]) ++ disabledMcpServerNames
"${cfg.configDir}/settings.json".source =
let
settingsFile = jsonFormat.generate "claude-code-settings.json" (
cfg.settings
// {
"$schema" = "https://json.schemastore.org/claude-code-settings.json";
}
// lib.optionalAttrs (cfg.marketplaces != { }) {
extraKnownMarketplaces = lib.mapAttrs mkMarketplaceEntry cfg.marketplaces;
}
// lib.optionalAttrs (disabledMcpServerNames != [ ]) {
disabledMcpjsonServers = lib.unique (
(cfg.settings.disabledMcpjsonServers or [ ]) ++ disabledMcpServerNames
);
}
);
}
);
settingsDirectory = pkgs.runCommand "claude-code-settings-directory" { } ''
install -Dm444 ${settingsFile} "$out/settings.json"
'';
in
"${settingsDirectory}/settings.json";
})
(
if lib.isPath cfg.context then
@@ -1,3 +1,4 @@
{ config, ... }:
{
programs.claude-code = {
enable = true;
@@ -117,6 +118,19 @@
};
};
assertions = [
{
assertion =
let
settingsSource =
toString
config.home.file."${config.programs.claude-code.configDir}/settings.json".source;
in
dirOf settingsSource != builtins.storeDir && baseNameOf settingsSource == "settings.json";
message = "Claude Code settings source must be inside a dedicated store directory";
}
];
nmt.script = ''
assertFileExists home-files/.claude/settings.json
assertFileContent home-files/.claude/settings.json ${./expected-settings.json}