From 1aff5d6e7ee4d833cea31763f0297fca2b53e1f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fausto=20N=C3=BA=C3=B1ez=20Alberro?= Date: Sat, 28 Jun 2025 11:25:26 +0200 Subject: [PATCH] gemini-cli: fix file collisions Multiple Node.js packages in nixpkgs create file collisions when installed together in home-manager or system profiles. Specifically: - `gemini-cli` vs `eslint`: collision on `lib/node_modules/eslint/conf/default-cli-options.js` - `gemini-cli` vs `angular-language-server`: collision on `lib/node_modules/semver/README.md` (with permission differences: 0555 vs 0444) This occurs because these packages install their bundled dependencies directly to `$out/lib/node_modules/`, causing path conflicts when multiple packages provide the same transitive dependencies. The issue stems from packages copying their entire `node_modules` directory to a shared location (`$out/lib/node_modules/`) rather than isolating their dependencies in package-specific directories. Before: ```nix cp -r node_modules "$out/lib/" ``` After: ```nix cp -r node_modules "$out/share/gemini-cli/" ``` This is probably counterproductive in some ways (would ideally share deps?) but at least this fix allows these packages to coexist. --- pkgs/by-name/ge/gemini-cli/package.nix | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/pkgs/by-name/ge/gemini-cli/package.nix b/pkgs/by-name/ge/gemini-cli/package.nix index ddaa7f42355c..5a61442fc3dc 100644 --- a/pkgs/by-name/ge/gemini-cli/package.nix +++ b/pkgs/by-name/ge/gemini-cli/package.nix @@ -36,20 +36,16 @@ buildNpmPackage (finalAttrs: { installPhase = '' runHook preInstall + mkdir -p $out/{bin,share/gemini-cli} - mkdir -p "$out/lib" + cp -r node_modules $out/share/gemini-cli/ - cp -r node_modules "$out/lib/" - - rm -f "$out/lib/node_modules/@google/gemini-cli" - rm -f "$out/lib/node_modules/@google/gemini-cli-core" - - cp -r packages/cli "$out/lib/node_modules/@google/gemini-cli" - cp -r packages/core "$out/lib/node_modules/@google/gemini-cli-core" - - mkdir -p "$out/bin" - ln -s ../lib/node_modules/@google/gemini-cli/dist/index.js "$out/bin/gemini" + rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli + rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli-core + cp -r packages/cli $out/share/gemini-cli/node_modules/@google/gemini-cli + cp -r packages/core $out/share/gemini-cli/node_modules/@google/gemini-cli-core + ln -s $out/share/gemini-cli/node_modules/@google/gemini-cli/dist/index.js $out/bin/gemini runHook postInstall '';