From 9b58c9c37a7939871fa477467742b64a100aed43 Mon Sep 17 00:00:00 2001 From: Artem Leshchev Date: Wed, 25 Feb 2026 16:58:49 -0600 Subject: [PATCH 1/2] gemini-cli: build bundle This decreases output path size 15 times and makes package layout a lot closer to gemini-cli-bin, while saving all the features of the native installation. --- pkgs/by-name/ge/gemini-cli/package.nix | 37 ++++++++++---------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/pkgs/by-name/ge/gemini-cli/package.nix b/pkgs/by-name/ge/gemini-cli/package.nix index cdb9d1926a2bf..9e656b0b6afbb 100644 --- a/pkgs/by-name/ge/gemini-cli/package.nix +++ b/pkgs/by-name/ge/gemini-cli/package.nix @@ -73,39 +73,30 @@ buildNpmPackage (finalAttrs: { nodejs_22.python ]; + npmBuildScript = "bundle"; + installPhase = '' runHook preInstall - mkdir -p $out/{bin,share/gemini-cli} + mkdir -p $out/{bin,share} + cp -r bundle $out/share/gemini-cli + + # We only want to keep optionalDependencies (like @lydell/node-pty) to keep the closure size small, + # as regular dependencies are already bundled via esbuild into gemini.js. + jq '.dependencies = {} | del(.devDependencies) | del(.workspaces)' package.json > package.json.tmp && mv package.json.tmp package.json npm prune --omit=dev + rm -rf node_modules/.bin - # Remove python files to prevent python from getting into the closure - find node_modules -name "*.py" -delete # keytar/build has gyp-mac-tool with a Python shebang that gets patched, # creating a python3 reference in the closure - rm -rf node_modules/keytar/build + find node_modules -path "*/build/*" -type f -not -name "*.node" -delete + find node_modules -type d -empty -delete cp -r node_modules $out/share/gemini-cli/ - rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli - rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli-core - rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli-a2a-server - rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli-sdk - rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli-test-utils - rm -f $out/share/gemini-cli/node_modules/gemini-cli-vscode-ide-companion - 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 - cp -r packages/a2a-server $out/share/gemini-cli/node_modules/@google/gemini-cli-a2a-server - - rm -f $out/share/gemini-cli/node_modules/@google/gemini-cli-core/dist/docs/CONTRIBUTING.md - - ln -s $out/share/gemini-cli/node_modules/@google/gemini-cli/dist/index.js $out/bin/gemini - chmod +x "$out/bin/gemini" - - # Clean up any remaining references to npmDeps in node_modules metadata - find $out/share/gemini-cli/node_modules -name "package-lock.json" -delete - find $out/share/gemini-cli/node_modules -name ".package-lock.json" -delete - find $out/share/gemini-cli/node_modules -name "config.gypi" -delete + rm -f $out/share/gemini-cli/docs/CONTRIBUTING.md + + ln -s $out/share/gemini-cli/gemini.js $out/bin/gemini runHook postInstall ''; From d5725f96cf8f30d7589a9264ffd56eea820514ff Mon Sep 17 00:00:00 2001 From: Artem Leshchev Date: Tue, 3 Mar 2026 11:41:52 -0600 Subject: [PATCH 2/2] gemini-cli: 0.30.0 -> 0.31.0 --- pkgs/by-name/ge/gemini-cli/package.nix | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/ge/gemini-cli/package.nix b/pkgs/by-name/ge/gemini-cli/package.nix index 9e656b0b6afbb..78fbe6a684ea0 100644 --- a/pkgs/by-name/ge/gemini-cli/package.nix +++ b/pkgs/by-name/ge/gemini-cli/package.nix @@ -5,6 +5,7 @@ fetchFromGitHub, jq, pkg-config, + makeWrapper, clang_20, libsecret, ripgrep, @@ -14,24 +15,25 @@ buildNpmPackage (finalAttrs: { pname = "gemini-cli"; - version = "0.30.0"; + version = "0.31.0"; src = fetchFromGitHub { owner = "google-gemini"; repo = "gemini-cli"; tag = "v${finalAttrs.version}"; - hash = "sha256-+w4w1cftPSj0gJ23Slw8Oexljmu0N/PZWH4IDjw75rs="; + hash = "sha256-huPd4W7Jf4/dZshWElicYpcHhktE83wPs/z5jVYwynM="; }; nodejs = nodejs_22; - npmDepsHash = "sha256-Nkd5Q2ugRqsTqaFbCSniC3Obl++uEjVUmoa8MVT5++8="; + npmDepsHash = "sha256-iRlwCSGigRi/ilfXi8rI68vlfkeec3vB5nZWPmTLnK8="; dontPatchElf = stdenv.isDarwin; nativeBuildInputs = [ jq pkg-config + makeWrapper ] ++ lib.optionals stdenv.isDarwin [ clang_20 ]; # clang_21 breaks @vscode/vsce's optionalDependencies keytar @@ -70,7 +72,7 @@ buildNpmPackage (finalAttrs: { # Prevent npmDeps and python from getting into the closure disallowedReferences = [ finalAttrs.npmDeps - nodejs_22.python + finalAttrs.nodejs.python ]; npmBuildScript = "bundle"; @@ -96,7 +98,9 @@ buildNpmPackage (finalAttrs: { rm -f $out/share/gemini-cli/docs/CONTRIBUTING.md - ln -s $out/share/gemini-cli/gemini.js $out/bin/gemini + makeWrapper "${lib.getExe finalAttrs.nodejs}" "$out/bin/gemini" \ + --add-flags "--no-warnings=DEP0040" \ + --add-flags "$out/share/gemini-cli/gemini.js" runHook postInstall '';