nandi/frqpublic Fork 0
7095bb6
Commits
Clone
git clone https://git.rickub.com/nandi/frq.git
git clone ssh://git@rickub.com/nandi/frq.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Hash the media plane's git deps rather than cloning them per eval

allowBuiltinFetchGit fetched jolt-native's seven git dependencies with
builtins.fetchGit, which runs at evaluation: every `nix run .#tui` cloned
them in full, all refs, even with the built library already in a cache,
and the clones are not derivations so no cache could hold them. Hashed,
they are ordinary fixed-output derivations — one entry per repo, since
nixpkgs keys these by commit and covers the workspace siblings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nandi committed 2026-09-03T11:11:51-07:00 Browse files
7095bb6 parent: 6ba34b9
modified flake.nix +24 -1
@@ -146,9 +146,32 @@
146146 version = "0.1.0";
147147 src = jolt-native;
148148
149+ # The media plane's deps are seven git repos rather than crates.io
150+ # releases. `allowBuiltinFetchGit` would fetch them with
151+ # builtins.fetchGit, which happens at *eval* time — so every
152+ # evaluation clones them in full (all refs), even when the built
153+ # library is already in a cache, and the clones themselves are not
154+ # derivations and can never be substituted. Hashed, they are plain
155+ # fixed-output derivations: one entry per repo (nixpkgs keys these
156+ # by commit, so the sibling crates out of the same workspace are
157+ # covered), substitutable, fetched once. The cost is that these
158+ # move whenever jolt-native's Cargo.lock does.
149159 cargoLock = {
150160 lockFile = "${jolt-native}/Cargo.lock";
151- allowBuiltinFetchGit = true;
161+ outputHashes = {
162+ # github.com/Frando/moq @ 53fe78d8 — moq-lite, moq-native, hang, conducer
163+ "moq-lite-0.15.5" = "sha256-wh8telcXK4Zqaefs42n6LJitye8cc0rAmXd8RtJZJ+Q=";
164+ # github.com/n0-computer/iroh-live @ edd9bcc5 — iroh-moq, moq-media, rusty-{capture,codecs}
165+ "iroh-live-0.1.0" = "sha256-+bOIMXU4F/9toLZ25MFRA0Kd3Cr4iyP4icOfBkObtfU=";
166+ # github.com/n0-computer/iroh @ 8af8370b — iroh, iroh-base, iroh-relay
167+ "iroh-0.97.0" = "sha256-tCEzLwu+bcAiH0dMmQoKRB24N5eiNG6BNixod8Y6igo=";
168+ # github.com/Frando/web-transport @ f7a523f1 — the four web-transport-* crates
169+ "web-transport-proto-0.6.0" = "sha256-5WP98+nTI6FR23AM7DNf0nnsolqr7M0RHxY09NNdDzs=";
170+ # github.com/n0-computer/noq @ ab042ea7 — noq, noq-proto, noq-udp
171+ "noq-0.17.0" = "sha256-aur6ekfwr3PsnR8RrBKLgCvujQRi4tccyK9nJo6O+Tg=";
172+ "iroh-gossip-0.97.0" = "sha256-DEIq1BCsCZL+1q9yiEZAXzv7wxvIXgsW044Y8uHW7PU=";
173+ "iroh-smol-kv-0.3.1" = "sha256-oXGdnJVyQfiomzyZhj5r7ez4Uxh73imGt6V9+vHTQZQ=";
174+ };
152175 };
153176
154177 nativeBuildInputs = with pkgs; [
@@ -146,9 +146,32 @@
146 version = "0.1.0";146 version = "0.1.0";
147 src = jolt-native;147 src = jolt-native;
148 148
149+ # The media plane's deps are seven git repos rather than crates.io
150+ # releases. `allowBuiltinFetchGit` would fetch them with
151+ # builtins.fetchGit, which happens at *eval* time — so every
152+ # evaluation clones them in full (all refs), even when the built
153+ # library is already in a cache, and the clones themselves are not
154+ # derivations and can never be substituted. Hashed, they are plain
155+ # fixed-output derivations: one entry per repo (nixpkgs keys these
156+ # by commit, so the sibling crates out of the same workspace are
157+ # covered), substitutable, fetched once. The cost is that these
158+ # move whenever jolt-native's Cargo.lock does.
149 cargoLock = {159 cargoLock = {
150 lockFile = "${jolt-native}/Cargo.lock";160 lockFile = "${jolt-native}/Cargo.lock";
151- allowBuiltinFetchGit = true;161+ outputHashes = {
162+ # github.com/Frando/moq @ 53fe78d8 — moq-lite, moq-native, hang, conducer
163+ "moq-lite-0.15.5" = "sha256-wh8telcXK4Zqaefs42n6LJitye8cc0rAmXd8RtJZJ+Q=";
164+ # github.com/n0-computer/iroh-live @ edd9bcc5 — iroh-moq, moq-media, rusty-{capture,codecs}
165+ "iroh-live-0.1.0" = "sha256-+bOIMXU4F/9toLZ25MFRA0Kd3Cr4iyP4icOfBkObtfU=";
166+ # github.com/n0-computer/iroh @ 8af8370b — iroh, iroh-base, iroh-relay
167+ "iroh-0.97.0" = "sha256-tCEzLwu+bcAiH0dMmQoKRB24N5eiNG6BNixod8Y6igo=";
168+ # github.com/Frando/web-transport @ f7a523f1 — the four web-transport-* crates
169+ "web-transport-proto-0.6.0" = "sha256-5WP98+nTI6FR23AM7DNf0nnsolqr7M0RHxY09NNdDzs=";
170+ # github.com/n0-computer/noq @ ab042ea7 — noq, noq-proto, noq-udp
171+ "noq-0.17.0" = "sha256-aur6ekfwr3PsnR8RrBKLgCvujQRi4tccyK9nJo6O+Tg=";
172+ "iroh-gossip-0.97.0" = "sha256-DEIq1BCsCZL+1q9yiEZAXzv7wxvIXgsW044Y8uHW7PU=";
173+ "iroh-smol-kv-0.3.1" = "sha256-oXGdnJVyQfiomzyZhj5r7ez4Uxh73imGt6V9+vHTQZQ=";
174+ };
152 };175 };
153 176
154 nativeBuildInputs = with pkgs; [177 nativeBuildInputs = with pkgs; [