summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-06-27 08:46:50 +0700
committerpolwex <polwex@sortug.com>2025-06-27 08:46:50 +0700
commit8be9a806a93b02eada372f3993c34bc6b2f26fea (patch)
tree28e576a39ad50aede8f849860f4f4192fd3b7402
parentf0ada28815f35f160f0e85101728d215c0f7d7f9 (diff)
lets see geminis chops...
-rw-r--r--flake.nix27
-rw-r--r--gemini.nix95
2 files changed, 122 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
index 3b14a24..94c1c5a 100644
--- a/flake.nix
+++ b/flake.nix
@@ -66,8 +66,35 @@
# reason-native.refmett
];
};
+ # lib = pkgs.lib if unavailable
+ gemini-cli = pkgs.callPackage ./gemini.nix {
+ inherit
+ (pkgs)
+ buildNpmPackage
+ fetchFromGitHub
+ fetchNpmDeps
+ cacert
+ curl
+ gnused
+ jq
+ nix-prefetch-github
+ prefetch-npm-deps
+ writeShellApplication
+ ;
+ };
+ # gemini-cli = pkgs.buildNpmPackage {
+ # name = "gemini-cli";
+ # src = pkgs.fetchFromGitHub {
+ # owner = "google-gemini";
+ # repo = "gemini-cli";
+ # rev = "bf873a1d85d4400fd22c175db0f3b80a47bc27fb";
+ # sha256 = "QllEB3FAhp9lVOBkAE09Sw8IqOjRpaIMXAcY8dGbgw0=";
+ # };
+ # npmDepsHash = "qimhi2S8fnUbIq2MPU1tlvj5k9ZChY7kzxLrYqy9FXI=";
+ # };
in {
devShells.default = pkgs.mkShell rec {
+ packages = [gemini-cli];
buildInputs =
nativeBuildInputs
++ (with pkgs.ocamlPackages; [utop]);
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";
+ };
+})