diff --git a/modules/programs/claude-code.nix b/modules/programs/claude-code.nix index f4ac43069..f1ef03fc4 100644 --- a/modules/programs/claude-code.nix +++ b/modules/programs/claude-code.nix @@ -345,23 +345,24 @@ in programs.claude-code.finalPackage = let - mcpConfigFile = jsonFormat.generate "claude-code-mcp-config.json" { - inherit (cfg) mcpServers; - }; + makeWrapperArgs = lib.flatten ( + lib.filter (x: x != [ ]) [ + (lib.optional (cfg.mcpServers != { }) [ + "--append-flags" + "--mcp-config ${jsonFormat.generate "claude-code-mcp-config.json" { inherit (cfg) mcpServers; }}" + ]) + ] + ); - needsWrapper = cfg.mcpServers != { }; - - wrapperScript = pkgs.writeShellScriptBin "claude" '' - exec "${lib.getExe cfg.package}" "$@" --mcp-config "${mcpConfigFile}" - ''; + hasWrapperArgs = makeWrapperArgs != [ ]; in - if needsWrapper then + if hasWrapperArgs then pkgs.symlinkJoin { name = "claude-code"; paths = [ cfg.package ]; + nativeBuildInputs = [ pkgs.makeWrapper ]; postBuild = '' - rm $out/bin/claude - ln -s ${wrapperScript}/bin/claude $out/bin/claude + wrapProgram $out/bin/claude ${lib.escapeShellArgs makeWrapperArgs} ''; inherit (cfg.package) meta; } diff --git a/tests/modules/programs/claude-code/expected-mcp-wrapper b/tests/modules/programs/claude-code/expected-mcp-wrapper index 312d51ef2..7a5821733 100644 --- a/tests/modules/programs/claude-code/expected-mcp-wrapper +++ b/tests/modules/programs/claude-code/expected-mcp-wrapper @@ -1,3 +1,2 @@ -#!/nix/store/00000000000000000000000000000000-bash/bin/bash -exec "/nix/store/00000000000000000000000000000000-claude-code/bin/claude-code" "$@" --mcp-config "/nix/store/00000000000000000000000000000000-claude-code-mcp-config.json" - +#! /nix/store/00000000000000000000000000000000-bash/bin/bash -e +exec -a "$0" "/nix/store/00000000000000000000000000000000-claude-code/bin/.claude-wrapped" "$@" --mcp-config /nix/store/00000000000000000000000000000000-claude-code-mcp-config.json