From 519828bf1c97f8bc2ed2d3b79214067047d3c67d Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Fri, 5 Dec 2025 10:35:50 -0600 Subject: [PATCH] claude-code: refactor wrapper to use append-flags Alternative approach suggested in https://github.com/nix-community/home-manager/pull/8290#discussion_r2593114782 Signed-off-by: Austin Horstman --- modules/programs/claude-code.nix | 23 ++++++++++--------- .../programs/claude-code/expected-mcp-wrapper | 5 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) 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