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>
b4172e9 parent: 9db383c modified
flake.lock +1 -73 | @@ -15,22 +15,6 @@ | ||
| 15 | 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 | 18 | "flake-utils": { |
| 35 | 19 | "inputs": { |
| 36 | 20 | "systems": "systems" |
| @@ -67,24 +51,6 @@ | ||
| 67 | 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 | 54 | "glimmer": { |
| 89 | 55 | "flake": false, |
| 90 | 56 | "locked": { |
| @@ -172,31 +138,9 @@ | ||
| 172 | 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 | 141 | "nixgl": { |
| 198 | 142 | "inputs": { |
| 199 | - "flake-utils": "flake-utils_3", | |
| 143 | + "flake-utils": "flake-utils_2", | |
| 200 | 144 | "nixpkgs": [ |
| 201 | 145 | "nixpkgs" |
| 202 | 146 | ] |
| @@ -236,7 +180,6 @@ | ||
| 236 | 180 | "glimmer": "glimmer", |
| 237 | 181 | "jolt-native": "jolt-native", |
| 238 | 182 | "jolt-src": "jolt-src", |
| 239 | - "nix-appimage": "nix-appimage", | |
| 240 | 183 | "nixgl": "nixgl", |
| 241 | 184 | "nixpkgs": "nixpkgs" |
| 242 | 185 | } |
| @@ -292,21 +235,6 @@ | ||
| 292 | 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 | 238 | "vendor-clojure-test-suite": { |
| 311 | 239 | "flake": false, |
| 312 | 240 | "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 @@ | ||
| 71 | 71 | url = "github:nix-community/nixGL"; |
| 72 | 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 | 77 | let |
| 85 | 78 | systems = [ "x86_64-linux" "aarch64-linux" ]; |
| 86 | 79 | forEachSystem = f: |
| @@ -458,24 +451,18 @@ | ||
| 458 | 451 | # show` admits it exists. |
| 459 | 452 | android-sdk = androidSdkFor pkgs.stdenv.hostPlatform.system; |
| 460 | 453 | |
| 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. | |
| 473 | 459 | # |
| 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. | |
| 479 | 466 | |
| 480 | 467 | # Everything `clojure -M:cljd compile` would otherwise reach the |
| 481 | 468 | # 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 | let | 77 | 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 for | 454 | + # 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, and | 456 | + # 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}.default | 463 | + # 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 the | 467 | # Everything `clojure -M:cljd compile` would otherwise reach the |
| 481 | # network for, fetched once and hashed. | 468 | # network for, fetched once and hashed. |