nandi/frqpublic Fork 0
b4172e9
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.

Two outputs and an input that were all one library

`appimage` and `flutter-appimage` squashed their closures into one runnable
file for a host without Nix, and nothing builds them any more — the desktop
bundle comes out of tools/build-desktop.sh, and the Flutter one was never
wired to anything that shipped.

They were also the only thing evaluating nix-appimage, so the input goes with
them, and with it the three transitive nodes it locked. A flake input that
nothing reads is still an input: locked, re-resolved on every update, and
fetched by anyone evaluating this flake for any reason at all.

What is left behind is a comment where they were, because the interesting
part is not that they are gone but why they can be. The heaviest thing in
those closures was a Mesa, carried so that nixGL had a store driver to put
the host's in front of. Nothing fetched from a tarball carries one, so the
host's driver is just the driver, and there is no closure left to squash.

`nix flake check` passes and the remaining twelve packages evaluate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
nandi committed 2026-09-18T17:15:28-07:00 Browse files
b4172e9 parent: 9db383c
modified flake.lock +1 -73
@@ -15,22 +15,6 @@
1515 "type": "github"
1616 }
1717 },
18- "flake-compat": {
19- "flake": false,
20- "locked": {
21- "lastModified": 1733328505,
22- "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
23- "owner": "edolstra",
24- "repo": "flake-compat",
25- "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
26- "type": "github"
27- },
28- "original": {
29- "owner": "edolstra",
30- "repo": "flake-compat",
31- "type": "github"
32- }
33- },
3418 "flake-utils": {
3519 "inputs": {
3620 "systems": "systems"
@@ -67,24 +51,6 @@
6751 "type": "github"
6852 }
6953 },
70- "flake-utils_3": {
71- "inputs": {
72- "systems": "systems_3"
73- },
74- "locked": {
75- "lastModified": 1731533236,
76- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
77- "owner": "numtide",
78- "repo": "flake-utils",
79- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
80- "type": "github"
81- },
82- "original": {
83- "owner": "numtide",
84- "repo": "flake-utils",
85- "type": "github"
86- }
87- },
8854 "glimmer": {
8955 "flake": false,
9056 "locked": {
@@ -172,31 +138,9 @@
172138 "type": "github"
173139 }
174140 },
175- "nix-appimage": {
176- "inputs": {
177- "flake-compat": "flake-compat",
178- "flake-utils": "flake-utils_2",
179- "nixpkgs": [
180- "nixpkgs"
181- ]
182- },
183- "locked": {
184- "lastModified": 1757920913,
185- "narHash": "sha256-jd0QwCVz4O1sHHkeaZILD/7D6oyalceEJ4EFnWCgm0k=",
186- "owner": "ralismark",
187- "repo": "nix-appimage",
188- "rev": "7946addbc0d97e358a6d7aefe5e82310f0fe6b18",
189- "type": "github"
190- },
191- "original": {
192- "owner": "ralismark",
193- "repo": "nix-appimage",
194- "type": "github"
195- }
196- },
197141 "nixgl": {
198142 "inputs": {
199- "flake-utils": "flake-utils_3",
143+ "flake-utils": "flake-utils_2",
200144 "nixpkgs": [
201145 "nixpkgs"
202146 ]
@@ -236,7 +180,6 @@
236180 "glimmer": "glimmer",
237181 "jolt-native": "jolt-native",
238182 "jolt-src": "jolt-src",
239- "nix-appimage": "nix-appimage",
240183 "nixgl": "nixgl",
241184 "nixpkgs": "nixpkgs"
242185 }
@@ -292,21 +235,6 @@
292235 "type": "github"
293236 }
294237 },
295- "systems_3": {
296- "locked": {
297- "lastModified": 1681028828,
298- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
299- "owner": "nix-systems",
300- "repo": "default",
301- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
302- "type": "github"
303- },
304- "original": {
305- "owner": "nix-systems",
306- "repo": "default",
307- "type": "github"
308- }
309- },
310238 "vendor-clojure-test-suite": {
311239 "flake": false,
312240 "locked": {
@@ -15,22 +15,6 @@
15 "type": "github"15 "type": "github"
16 }16 }
17 },17 },
18- "flake-compat": {
19- "flake": false,
20- "locked": {
21- "lastModified": 1733328505,
22- "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
23- "owner": "edolstra",
24- "repo": "flake-compat",
25- "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
26- "type": "github"
27- },
28- "original": {
29- "owner": "edolstra",
30- "repo": "flake-compat",
31- "type": "github"
32- }
33- },
34 "flake-utils": {18 "flake-utils": {
35 "inputs": {19 "inputs": {
36 "systems": "systems"20 "systems": "systems"
@@ -67,24 +51,6 @@
67 "type": "github"51 "type": "github"
68 }52 }
69 },53 },
70- "flake-utils_3": {
71- "inputs": {
72- "systems": "systems_3"
73- },
74- "locked": {
75- "lastModified": 1731533236,
76- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
77- "owner": "numtide",
78- "repo": "flake-utils",
79- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
80- "type": "github"
81- },
82- "original": {
83- "owner": "numtide",
84- "repo": "flake-utils",
85- "type": "github"
86- }
87- },
88 "glimmer": {54 "glimmer": {
89 "flake": false,55 "flake": false,
90 "locked": {56 "locked": {
@@ -172,31 +138,9 @@
172 "type": "github"138 "type": "github"
173 }139 }
174 },140 },
175- "nix-appimage": {
176- "inputs": {
177- "flake-compat": "flake-compat",
178- "flake-utils": "flake-utils_2",
179- "nixpkgs": [
180- "nixpkgs"
181- ]
182- },
183- "locked": {
184- "lastModified": 1757920913,
185- "narHash": "sha256-jd0QwCVz4O1sHHkeaZILD/7D6oyalceEJ4EFnWCgm0k=",
186- "owner": "ralismark",
187- "repo": "nix-appimage",
188- "rev": "7946addbc0d97e358a6d7aefe5e82310f0fe6b18",
189- "type": "github"
190- },
191- "original": {
192- "owner": "ralismark",
193- "repo": "nix-appimage",
194- "type": "github"
195- }
196- },
197 "nixgl": {141 "nixgl": {
198 "inputs": {142 "inputs": {
199- "flake-utils": "flake-utils_3",143+ "flake-utils": "flake-utils_2",
200 "nixpkgs": [144 "nixpkgs": [
201 "nixpkgs"145 "nixpkgs"
202 ]146 ]
@@ -236,7 +180,6 @@
236 "glimmer": "glimmer",180 "glimmer": "glimmer",
237 "jolt-native": "jolt-native",181 "jolt-native": "jolt-native",
238 "jolt-src": "jolt-src",182 "jolt-src": "jolt-src",
239- "nix-appimage": "nix-appimage",
240 "nixgl": "nixgl",183 "nixgl": "nixgl",
241 "nixpkgs": "nixpkgs"184 "nixpkgs": "nixpkgs"
242 }185 }
@@ -292,21 +235,6 @@
292 "type": "github"235 "type": "github"
293 }236 }
294 },237 },
295- "systems_3": {
296- "locked": {
297- "lastModified": 1681028828,
298- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
299- "owner": "nix-systems",
300- "repo": "default",
301- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
302- "type": "github"
303- },
304- "original": {
305- "owner": "nix-systems",
306- "repo": "default",
307- "type": "github"
308- }
309- },
310 "vendor-clojure-test-suite": {238 "vendor-clojure-test-suite": {
311 "flake": false,239 "flake": false,
312 "locked": {240 "locked": {
modified flake.nix +12 -25
@@ -71,16 +71,9 @@
7171 url = "github:nix-community/nixGL";
7272 inputs.nixpkgs.follows = "nixpkgs";
7373 };
74-
75- # Wraps a closure into a single self-extracting file. Only the `appimage`
76- # output evaluates it.
77- nix-appimage = {
78- url = "github:ralismark/nix-appimage";
79- inputs.nixpkgs.follows = "nixpkgs";
80- };
8174 };
8275
83- outputs = { self, nixpkgs, jolt-src, jolt-native, glimmer, nixgl, nix-appimage }:
76+ outputs = { self, nixpkgs, jolt-src, jolt-native, glimmer, nixgl }:
8477 let
8578 systems = [ "x86_64-linux" "aarch64-linux" ];
8679 forEachSystem = f:
@@ -458,24 +451,18 @@
458451 # show` admits it exists.
459452 android-sdk = androidSdkFor pkgs.stdenv.hostPlatform.system;
460453
461- # frq and everything it loads, squashed into one runnable file for
462- # hosts without Nix. The whole closure rides along — Mesa included,
463- # which is not waste: off NixOS the launcher goes through nixGL, and
464- # nixGL needs a store Mesa to put the host's driver in front of.
465- appimage =
466- nix-appimage.bundlers.${pkgs.stdenv.hostPlatform.system}.default frq;
467-
468- # The other desktop GUI, squashed the same way. `flutter-desktop` is
469- # already the nixGL-wrapped launcher rather than the raw Flutter
470- # bundle, so this carries the same store Mesa for the same reason —
471- # and it is the whole point here, since a host with Flutter's
472- # runtime deps but no Nix is exactly who wants one file.
454+ # There were two `appimage` outputs here — this GUI's and Flutter's —
455+ # and what they were for was a host without Nix. They squashed the
456+ # whole closure into one runnable file, Mesa included, and the Mesa
457+ # was not waste: off NixOS the launcher goes through nixGL, which
458+ # needs a store Mesa to put the host's driver in front of.
473459 #
474- # Named by its backend, the way the outputs it wraps are: `appimage`
475- # is libcosmic's and this is Flutter's, and neither is the default.
476- flutter-appimage =
477- nix-appimage.bundlers.${pkgs.stdenv.hostPlatform.system}.default
478- self.packages.${pkgs.stdenv.hostPlatform.system}.flutter-desktop;
460+ # `tools/build-desktop.sh` answers that now, and answers it without
461+ # a closure to carry: jolt ships as one static binary, the backends
462+ # as jolt-native's `portable` tarball, and the GL driver is simply
463+ # the host's. No Mesa to get in front of, so no nixGL, so nothing to
464+ # squash. These outputs were the last thing evaluating nix-appimage,
465+ # which is why that input is gone too.
479466
480467 # Everything `clojure -M:cljd compile` would otherwise reach the
481468 # network for, fetched once and hashed.
@@ -71,16 +71,9 @@
71 url = "github:nix-community/nixGL";71 url = "github:nix-community/nixGL";
72 inputs.nixpkgs.follows = "nixpkgs";72 inputs.nixpkgs.follows = "nixpkgs";
73 };73 };
74-
75- # Wraps a closure into a single self-extracting file. Only the `appimage`
76- # output evaluates it.
77- nix-appimage = {
78- url = "github:ralismark/nix-appimage";
79- inputs.nixpkgs.follows = "nixpkgs";
80- };
81 };74 };
82 75
83- outputs = { self, nixpkgs, jolt-src, jolt-native, glimmer, nixgl, nix-appimage }:76+ outputs = { self, nixpkgs, jolt-src, jolt-native, glimmer, nixgl }:
84 let77 let
85 systems = [ "x86_64-linux" "aarch64-linux" ];78 systems = [ "x86_64-linux" "aarch64-linux" ];
86 forEachSystem = f:79 forEachSystem = f:
@@ -458,24 +451,18 @@
458 # show` admits it exists.451 # show` admits it exists.
459 android-sdk = androidSdkFor pkgs.stdenv.hostPlatform.system;452 android-sdk = androidSdkFor pkgs.stdenv.hostPlatform.system;
460 453
461- # frq and everything it loads, squashed into one runnable file for454+ # There were two `appimage` outputs here — this GUI's and Flutter's —
462- # hosts without Nix. The whole closure rides along — Mesa included,455+ # and what they were for was a host without Nix. They squashed the
463- # which is not waste: off NixOS the launcher goes through nixGL, and456+ # whole closure into one runnable file, Mesa included, and the Mesa
464- # nixGL needs a store Mesa to put the host's driver in front of.457+ # was not waste: off NixOS the launcher goes through nixGL, which
465- appimage =458+ # needs a store Mesa to put the host's driver in front of.
466- nix-appimage.bundlers.${pkgs.stdenv.hostPlatform.system}.default frq;
467-
468- # The other desktop GUI, squashed the same way. `flutter-desktop` is
469- # already the nixGL-wrapped launcher rather than the raw Flutter
470- # bundle, so this carries the same store Mesa for the same reason —
471- # and it is the whole point here, since a host with Flutter's
472- # runtime deps but no Nix is exactly who wants one file.
473 #459 #
474- # Named by its backend, the way the outputs it wraps are: `appimage`460+ # `tools/build-desktop.sh` answers that now, and answers it without
475- # is libcosmic's and this is Flutter's, and neither is the default.461+ # a closure to carry: jolt ships as one static binary, the backends
476- flutter-appimage =462+ # as jolt-native's `portable` tarball, and the GL driver is simply
477- nix-appimage.bundlers.${pkgs.stdenv.hostPlatform.system}.default463+ # the host's. No Mesa to get in front of, so no nixGL, so nothing to
478- self.packages.${pkgs.stdenv.hostPlatform.system}.flutter-desktop;464+ # squash. These outputs were the last thing evaluating nix-appimage,
465+ # which is why that input is gone too.
479 466
480 # Everything `clojure -M:cljd compile` would otherwise reach the467 # Everything `clojure -M:cljd compile` would otherwise reach the
481 # network for, fetched once and hashed.468 # network for, fetched once and hashed.