From d9612069489a532dc532756c983077495f08e9b0 Mon Sep 17 00:00:00 2001 From: TomaSajt <62384384+TomaSajt@users.noreply.github.com> Date: Mon, 25 May 2026 15:15:24 +0200 Subject: [PATCH] repath-studio: also fetch git dependencies in FOD --- .../re/repath-studio/hardcode-git-paths.patch | 14 ----- pkgs/by-name/re/repath-studio/package.nix | 61 ++++++++++++------- pkgs/by-name/re/repath-studio/update.sh | 42 +++---------- 3 files changed, 46 insertions(+), 71 deletions(-) delete mode 100644 pkgs/by-name/re/repath-studio/hardcode-git-paths.patch diff --git a/pkgs/by-name/re/repath-studio/hardcode-git-paths.patch b/pkgs/by-name/re/repath-studio/hardcode-git-paths.patch deleted file mode 100644 index 9e486ed36f2b..000000000000 --- a/pkgs/by-name/re/repath-studio/hardcode-git-paths.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/deps.edn b/deps.edn -index 158801e..9456964 100644 ---- a/deps.edn -+++ b/deps.edn -@@ -1,8 +1,7 @@ - {:paths ["src"] - :deps {binaryage/devtools {:mvn/version "1.0.7"} - camel-snake-kebab/camel-snake-kebab {:mvn/version "0.4.3"} -- clj-kdtree/clj-kdtree {:git/url "https://github.com/abscondment/clj-kdtree.git" -- :sha "5ec321c5e8006db00fa8b45a8ed9eb0b8f3dd56d" -+ clj-kdtree/clj-kdtree {:local/root "@clj-kdtree_src@" - :deps/manifest :deps} - com.taoensso/tempura {:mvn/version "1.5.4"} - day8.re-frame/test {:mvn/version "0.1.7"} diff --git a/pkgs/by-name/re/repath-studio/package.nix b/pkgs/by-name/re/repath-studio/package.nix index 4502ba2dc6c9..6b4c09217ba5 100644 --- a/pkgs/by-name/re/repath-studio/package.nix +++ b/pkgs/by-name/re/repath-studio/package.nix @@ -7,14 +7,15 @@ pkg-config, electron, chromium, + cacert, clojure, + git, vips, writeShellScriptBin, copyDesktopItems, makeDesktopItem, makeWrapper, - replaceVars, nixosTests, }: @@ -30,15 +31,7 @@ buildNpmPackage (finalAttrs: { }; patches = [ - (replaceVars ./hardcode-git-paths.patch { - clj-kdtree_src = fetchFromGitHub { - owner = "abscondment"; - repo = "clj-kdtree"; - rev = "5ec321c5e8006db00fa8b45a8ed9eb0b8f3dd56d"; - hash = "sha256-ZOv+9TxBsOnSSbfM7kJLP3cQH9FpgA15aETszg7YSes="; - }; - }) - # outputHash of manvenDeps changes each time `clojure` is updated + # outputHash of clojureHome changes each time `clojure` is updated # https://github.com/ngi-nix/ngipkgs/pull/1727#discussion_r2470180998 ./pin-clojure.patch ]; @@ -48,7 +41,7 @@ buildNpmPackage (finalAttrs: { npmDepsHash = "sha256-gOk/hHWGLwAxPIBqasoUzfszPv911afb/VLn7w7g5KE="; nativeBuildInputs = [ - finalAttrs.passthru.clojureWithCache + finalAttrs.passthru.clojureWithHome makeWrapper copyDesktopItems pkg-config # sharp @@ -138,48 +131,72 @@ buildNpmPackage (finalAttrs: { passthru = { # this was taken and adapted from "logseq" package's nixpkgs derivation - mavenRepo = stdenv.mkDerivation { - name = "repath-studio-${finalAttrs.version}-maven-deps"; + clojureHome = stdenv.mkDerivation { + name = "repath-studio-${finalAttrs.version}-clojure-home"; inherit (finalAttrs) src patches; - nativeBuildInputs = [ clojure ]; + nativeBuildInputs = [ + cacert + clojure + git + ]; buildPhase = '' runHook preBuild - export HOME="$(mktemp -d)" mkdir -p "$out" + export HOME="$out" + export JAVA_TOOL_OPTIONS="-Duser.home=$out" # -P -> resolve all normal deps # -M:alias -> resolve extra-deps of the listed aliases - clj -Sdeps "{:mvn/local-repo \"$out\"}" -P -M:dev:cljs + clojure -P -M:dev:cljs runHook postBuild ''; - # copied from buildMavenPackage - # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside installPhase = '' runHook preInstall - find $out -type f \( \ + # copied from buildMavenPackage + # keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside + find "$out/.m2/repository" -type f \( \ -name \*.lastUpdated \ -o -name resolver-status.properties \ -o -name _remote.repositories \) \ -delete + # remove .git pointers to the bare repos in _repos + find "$out/.gitlibs/libs" -type f -name .git -delete + + # keep only the bare repo config files so the clojure CLI doesn't want to fetch the repos again + # but make them be empty for reproducibility + find "$out/.gitlibs/_repos" -type f -name "config" -print0 | while read -d "" f; do + rm -rf "$(dirname "$f")" + mkdir "$(dirname "$f")" + touch "$f" + done + + # recreate .clojure with empty settings + rm -r "$out/.clojure" + mkdir -p "$out/.clojure/tools" + echo "{}" > "$out/.clojure/deps.edn" + echo "{}" > "$out/.clojure/tools/tools.edn" + runHook postInstall ''; dontFixup = true; - outputHash = "sha256-fwKeKfOIAWj9HQdXpEafZuJz5jwXNKpkS0JmuP3FXo0="; + outputHash = "sha256-wpE6MAWXxrDq3Y8a+rr9PhBz9Qnj23HB+a+eselUf4Y="; outputHashMode = "recursive"; outputHashAlgo = "sha256"; }; - clojureWithCache = writeShellScriptBin "clojure" '' - exec ${lib.getExe' clojure "clojure"} -Sdeps '{:mvn/local-repo "${finalAttrs.passthru.mavenRepo}"}' "$@" + clojureWithHome = writeShellScriptBin "clojure" '' + export HOME="${finalAttrs.passthru.clojureHome}" + export JAVA_TOOL_OPTIONS="-Duser.home=${finalAttrs.passthru.clojureHome}" + exec ${lib.getExe' clojure "clojure"} "$@" ''; updateScript = ./update.sh; diff --git a/pkgs/by-name/re/repath-studio/update.sh b/pkgs/by-name/re/repath-studio/update.sh index 52a9d297137e..b0f2ef820ce4 100755 --- a/pkgs/by-name/re/repath-studio/update.sh +++ b/pkgs/by-name/re/repath-studio/update.sh @@ -24,7 +24,6 @@ NIXPKGS_PATH="$(git rev-parse --show-toplevel)" PACKAGE_DIR="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" PACKAGE_FILE="$PACKAGE_DIR/package.nix" -PATCH_GIT_FILE="$PACKAGE_DIR/hardcode-git-paths.patch" PATCH_CLJ_FILE="$PACKAGE_DIR/pin-clojure.patch" pushd $NIXPKGS_PATH @@ -58,55 +57,28 @@ cp deps.edn b/deps.edn # insert clojure dep at start of :deps map sed -i "0,/:deps {/s|:deps {|:deps {org.clojure/clojure {:mvn/version \"$clj_version\"}\n |" b/deps.edn -git diff --no-index --no-prefix a/deps.edn b/deps.edn >"$PATCH_CLJ_FILE" || true +git --no-pager diff --no-index --no-prefix a/deps.edn b/deps.edn >"$PATCH_CLJ_FILE" || true rm -rf a b -# patches a dependency to be prefetched by nix -# clojure otherwise tries to fetch it at buildtime - -# extract sha from clean deps.edn -clj_sha=$(grep -A 2 "clj-kdtree/clj-kdtree" deps.edn | grep -oP ':sha "\K[^"]+') - -if [[ -z "$clj_sha" ]]; then - echo "Error: Could not extract clj-kdtree SHA from deps.edn" >&2 - exit 1 -fi - -clj_hash=$(nix-prefetch-url --unpack "https://github.com/abscondment/clj-kdtree/archive/$clj_sha.tar.gz" --type sha256) -clj_hash=$(nix hash convert --hash-algo sha256 --from nix32 "$clj_hash") - -sed -i "/owner = \"abscondment\"/,/hash =/ s/rev = \".*\"/rev = \"$clj_sha\"/" "$PACKAGE_FILE" -sed -i "/owner = \"abscondment\"/,/hash =/ s|hash = \".*\"|hash = \"$clj_hash\"|" "$PACKAGE_FILE" - -mkdir -p a b -cp deps.edn a/deps.edn -cp deps.edn b/deps.edn - -sed -i '/clj-kdtree\/clj-kdtree/,/:sha/c\ clj-kdtree/clj-kdtree {:local/root "@clj-kdtree_src@"' b/deps.edn -git diff --no-index --no-prefix a/deps.edn b/deps.edn >"$PATCH_GIT_FILE" || true - -rm -rf a b -popd - -# maven deps +# clojure home dummy_hash="sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" sed -i "s|outputHash = \".*\";|outputHash = \"$dummy_hash\";|" "$PACKAGE_FILE" # expect failure to get new hash set +e -new_mvn_hash="$( - nix-build --no-link -A repath-studio.passthru.mavenRepo "$NIXPKGS_PATH" 2>&1 >/dev/null | +new_clj_home_hash="$( + nix-build --no-link -A repath-studio.passthru.clojureHome "$NIXPKGS_PATH" 2>&1 >/dev/null | grep "got:" | cut -d':' -f2 | sed 's| ||g' )" set -e -if [[ -z "$new_mvn_hash" ]]; then - echo "Failed to get new maven hash." >&2 +if [[ -z "$new_clj_home_hash" ]]; then + echo "Failed to get new clojure home hash." >&2 exit 1 fi -sed -i "s|\"$dummy_hash\"|\"$new_mvn_hash\"|g" "$PACKAGE_FILE" +sed -i "s|\"$dummy_hash\"|\"$new_clj_home_hash\"|g" "$PACKAGE_FILE" echo "Update to $version complete."