Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 22 additions & 27 deletions pkgs/by-name/ge/gemini-cli/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
fetchFromGitHub,
jq,
pkg-config,
makeWrapper,
clang_20,
libsecret,
ripgrep,
Expand All @@ -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

Expand Down Expand Up @@ -70,42 +72,35 @@ buildNpmPackage (finalAttrs: {
# Prevent npmDeps and python from getting into the closure
disallowedReferences = [
finalAttrs.npmDeps
nodejs_22.python
finalAttrs.nodejs.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

makeWrapper "${lib.getExe finalAttrs.nodejs}" "$out/bin/gemini" \
--add-flags "--no-warnings=DEP0040" \
--add-flags "$out/share/gemini-cli/gemini.js"

runHook postInstall
'';
Expand Down
Loading