diff options
Diffstat (limited to 'gemini.nix')
-rw-r--r-- | gemini.nix | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/gemini.nix b/gemini.nix new file mode 100644 index 0000000..a94cac6 --- /dev/null +++ b/gemini.nix @@ -0,0 +1,95 @@ +{ + lib, + buildNpmPackage, + fetchFromGitHub, + fetchNpmDeps, + writeShellApplication, + cacert, + curl, + gnused, + jq, + nix-prefetch-github, + prefetch-npm-deps, +}: +buildNpmPackage (finalAttrs: { + pname = "gemini-cli"; + version = "0.1.5"; + + src = fetchFromGitHub { + owner = "google-gemini"; + repo = "gemini-cli"; + # Currently there's no release tag + rev = "bf873a1d85d4400fd22c175db0f3b80a47bc27fb"; + sha256 = "QllEB3FAhp9lVOBkAE09Sw8IqOjRpaIMXAcY8dGbgw0="; + }; + + npmDeps = fetchNpmDeps { + inherit (finalAttrs) src; + hash = "sha256-qimhi2S8fnUbIq2MPU1tlvj5k9ZChY7kzxLrYqy9FXI="; + }; + + preConfigure = '' + mkdir -p packages/generated + echo "export const GIT_COMMIT_INFO = { commitHash: '${finalAttrs.src.rev}' };" > packages/generated/git-commit.ts + ''; + + installPhase = '' + runHook preInstall + + mkdir -p "$out/lib" + + 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" + + runHook postInstall + ''; + + postInstall = '' + chmod +x "$out/bin/gemini" + ''; + + passthru.updateScript = lib.getExe (writeShellApplication { + name = "gemini-cli-update-script"; + runtimeInputs = [ + cacert + curl + gnused + jq + nix-prefetch-github + prefetch-npm-deps + ]; + text = '' + latest_version=$(curl -s "https://raw.githubusercontent.com/google-gemini/gemini-cli/main/package-lock.json" | jq -r '.version') + latest_rev=$(curl -s "https://api.github.com/repos/google-gemini/gemini-cli/commits/main" | jq -r '.sha') + + src_hash=$(nix-prefetch-github google-gemini gemini-cli --rev "$latest_rev" | jq -r '.hash') + + temp_dir=$(mktemp -d) + curl -s "https://raw.githubusercontent.com/google-gemini/gemini-cli/$latest_rev/package-lock.json" > "$temp_dir/package-lock.json" + npm_deps_hash=$(prefetch-npm-deps "$temp_dir/package-lock.json") + rm -rf "$temp_dir" + + sed -i "s|version = \".*\";|version = \"$latest_version\";|" "pkgs/by-name/ge/gemini-cli/package.nix" + sed -i "s|rev = \".*\";|rev = \"$latest_rev\";|" "pkgs/by-name/ge/gemini-cli/package.nix" + sed -i "/src = fetchFromGitHub/,/};/s|hash = \".*\";|hash = \"$src_hash\";|" "pkgs/by-name/ge/gemini-cli/package.nix" + sed -i "/npmDeps = fetchNpmDeps/,/};/s|hash = \".*\";|hash = \"$npm_deps_hash\";|" "pkgs/by-name/ge/gemini-cli/package.nix" + ''; + }); + + meta = { + description = "AI agent that brings the power of Gemini directly into your terminal"; + homepage = "https://github.com/google-gemini/gemini-cli"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [donteatoreo]; + platforms = lib.platforms.all; + mainProgram = "gemini"; + }; +}) |