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