From 31a558c5f0962c90cb551db4b68f38de033bab0a Mon Sep 17 00:00:00 2001 From: ljxfstorm Date: Mon, 11 Aug 2025 18:26:38 +0800 Subject: [PATCH] gemini-cli-bin: init at 0.3.4 --- pkgs/by-name/ge/gemini-cli-bin/package.nix | 55 +++++++++++++++++++ .../by-name/ge/gemini-cli-bin/update-asset.sh | 34 ++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 pkgs/by-name/ge/gemini-cli-bin/package.nix create mode 100755 pkgs/by-name/ge/gemini-cli-bin/update-asset.sh diff --git a/pkgs/by-name/ge/gemini-cli-bin/package.nix b/pkgs/by-name/ge/gemini-cli-bin/package.nix new file mode 100644 index 000000000000..829fc704aed5 --- /dev/null +++ b/pkgs/by-name/ge/gemini-cli-bin/package.nix @@ -0,0 +1,55 @@ +{ + lib, + stdenvNoCC, + fetchurl, + nodejs, + gitUpdater, +}: +let + owner = "google-gemini"; + repo = "gemini-cli"; + asset = "gemini.js"; +in +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "gemini-cli-bin"; + version = "0.3.4"; + + src = fetchurl { + url = "https://github.com/${owner}/${repo}/releases/download/v${finalAttrs.version}/${asset}"; + hash = "sha256-aVcizpbzV1hPsuMSGRxgMGXTyF+0yBqGk7EwPnKFDyQ="; + }; + + phases = [ + "installPhase" + "fixupPhase" + ]; + + strictDeps = true; + + buildInputs = [ nodejs ]; + + installPhase = '' + runHook preInstall + + install -D "$src" "$out/bin/gemini" + + runHook postInstall + ''; + + passthru.updateScript = [ + ./update-asset.sh + "${owner}/${repo}" + "${asset}" + ]; + + 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; [ ljxfstorm ]; + mainProgram = "gemini"; + platforms = lib.platforms.linux ++ lib.platforms.darwin; + sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; + priority = 10; + }; +}) diff --git a/pkgs/by-name/ge/gemini-cli-bin/update-asset.sh b/pkgs/by-name/ge/gemini-cli-bin/update-asset.sh new file mode 100755 index 000000000000..5ab5814ba951 --- /dev/null +++ b/pkgs/by-name/ge/gemini-cli-bin/update-asset.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p gnugrep curl jq gnused + +set -euo pipefail + +cd "$(dirname "${BASH_SOURCE[0]}")" + +NIX_FILE="package.nix" +RELEASE_ID="latest" + +GITHUB_REPO="$1" +ASSET_NAME="$2" +REV_PREFIX="${3:-v}" + +CURRENT_VER="$(grep -oP 'version = "\K[^"]+' "${NIX_FILE}")" +CURRENT_HASH="$(grep -oP 'hash = "\K[^"]+' "${NIX_FILE}")" +{ + read -r LATEST_VER + read -r ASSET_DIGEST +} < <(curl --fail -s ${GITHUB_TOKEN:+-u ":${GITHUB_TOKEN}"} "https://api.github.com/repos/${GITHUB_REPO}/releases/${RELEASE_ID}" | jq -r ".tag_name, (.assets[] | select(.name == \"${ASSET_NAME}\") | .digest)") + +LATEST_VER="${LATEST_VER#"${REV_PREFIX}"}" + +if [[ "${LATEST_VER}" == "${CURRENT_VER}" ]]; then + echo "Up to date." + exit 0 +fi + +LATEST_HASH="$(nix-hash --to-sri "${ASSET_DIGEST}")" + +sed -i "s#hash = \"${CURRENT_HASH}\";#hash = \"${LATEST_HASH}\";#g" "${NIX_FILE}" +sed -i "s#version = \"${CURRENT_VER}\";#version = \"${LATEST_VER}\";#g" "${NIX_FILE}" + +echo "Successfully updated from ${CURRENT_VER} to version ${LATEST_VER}."