Stop carrying the 32-bit GL stack and half of git
nixGL's flake turns `enable32bits` on for every x86_64 host, which puts a second i686 mesa — and its own LLVM, intel-media-driver and Python — beside the 64-bit one. Both halves of frq are 64-bit, so the wrapper's 32-bit paths name drivers nothing here can open. Building nixGL from its default.nix is the only way to say otherwise; the flake takes no argument. And jolt shells out to git for `jolt.deps`, which wants clone, fetch and rev-parse — none of the subcommands that are Perl or Python programs, and those interpreters are most of what the full package weighs. Dev shell 2.7 GiB -> 1.7 GiB (374 -> 267 paths); .#frq the same way. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
040f2c1 parent: 36f6c77 modified
flake.nix +16 -3 | @@ -94,7 +94,17 @@ | ||
| 94 | 94 | # Mesa, despite the name: it covers Intel and AMD alike. The NVIDIA |
| 95 | 95 | # wrappers are the ones that need --impure (they read the host kernel |
| 96 | 96 | # module's version), which is why this only ever reaches for Intel. |
| 97 | - nixGLFor = pkgs: nixgl.packages.${pkgs.stdenv.hostPlatform.system}.nixGLIntel; | |
| 97 | + # | |
| 98 | + # Built from nixGL's default.nix rather than taken from its flake | |
| 99 | + # outputs, for the one argument the flake hardcodes on: `enable32bits`, | |
| 100 | + # which on x86_64 puts a second, i686 copy of mesa, its LLVM, and | |
| 101 | + # intel-media-driver into the wrapper. frq is 64-bit on both halves — | |
| 102 | + # the Rust cdylibs and the Chez runtime — so nothing here ever opens the | |
| 103 | + # 32-bit driver, and carrying it is most of the dev shell's closure. | |
| 104 | + nixGLFor = pkgs: (import nixgl { | |
| 105 | + inherit pkgs; | |
| 106 | + enable32bits = false; | |
| 107 | + }).nixGLIntel; | |
| 98 | 108 | |
| 99 | 109 | # egui reaches for these with dlopen rather than linking them, so being |
| 100 | 110 | # in the cdylib's buildInputs is not enough — whatever starts frq has to |
| @@ -205,7 +215,10 @@ | ||
| 205 | 215 | ''; |
| 206 | 216 | |
| 207 | 217 | # jolt.deps shells out to git and unzip, and jolt.mvn-http dlopens |
| 208 | - # OpenSSL through the JOLT_OPENSSL_LIBDIR seam. | |
| 218 | + # OpenSSL through the JOLT_OPENSSL_LIBDIR seam. gitMinimal rather | |
| 219 | + # than git: all jolt.deps asks for is clone/fetch/rev-parse, and | |
| 220 | + # the full package carries Perl and Python for the subcommands | |
| 221 | + # written in them — a quarter of a gigabyte for git-send-email. | |
| 209 | 222 | # |
| 210 | 223 | # TZDIR so a zone *name* resolves wherever this runs: frq.clock |
| 211 | 224 | # hands one to tzset, and glibc then looks for the tzfile under |
| @@ -214,7 +227,7 @@ | ||
| 214 | 227 | # machine. --set-default, so a TZDIR the user set still wins. |
| 215 | 228 | postFixup = '' |
| 216 | 229 | wrapProgram "$out/bin/jolt" \ |
| 217 | - --prefix PATH : "${pkgs.lib.makeBinPath [ pkgs.git pkgs.unzip ]}" \ | |
| 230 | + --prefix PATH : "${pkgs.lib.makeBinPath [ pkgs.gitMinimal pkgs.unzip ]}" \ | |
| 218 | 231 | --set-default JOLT_OPENSSL_LIBDIR "${pkgs.lib.makeLibraryPath [ pkgs.openssl ]}" \ |
| 219 | 232 | --set-default TZDIR "${pkgs.tzdata}/share/zoneinfo" \ |
| 220 | 233 | --set-default SSL_CERT_FILE "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" |
| @@ -94,7 +94,17 @@ | |||
| 94 | # Mesa, despite the name: it covers Intel and AMD alike. The NVIDIA | 94 | # Mesa, despite the name: it covers Intel and AMD alike. The NVIDIA |
| 95 | # wrappers are the ones that need --impure (they read the host kernel | 95 | # wrappers are the ones that need --impure (they read the host kernel |
| 96 | # module's version), which is why this only ever reaches for Intel. | 96 | # module's version), which is why this only ever reaches for Intel. |
| 97 | - nixGLFor = pkgs: nixgl.packages.${pkgs.stdenv.hostPlatform.system}.nixGLIntel; | 97 | + # |
| 98 | + # Built from nixGL's default.nix rather than taken from its flake | ||
| 99 | + # outputs, for the one argument the flake hardcodes on: `enable32bits`, | ||
| 100 | + # which on x86_64 puts a second, i686 copy of mesa, its LLVM, and | ||
| 101 | + # intel-media-driver into the wrapper. frq is 64-bit on both halves — | ||
| 102 | + # the Rust cdylibs and the Chez runtime — so nothing here ever opens the | ||
| 103 | + # 32-bit driver, and carrying it is most of the dev shell's closure. | ||
| 104 | + nixGLFor = pkgs: (import nixgl { | ||
| 105 | + inherit pkgs; | ||
| 106 | + enable32bits = false; | ||
| 107 | + }).nixGLIntel; | ||
| 98 | 108 | ||
| 99 | # egui reaches for these with dlopen rather than linking them, so being | 109 | # egui reaches for these with dlopen rather than linking them, so being |
| 100 | # in the cdylib's buildInputs is not enough — whatever starts frq has to | 110 | # in the cdylib's buildInputs is not enough — whatever starts frq has to |
| @@ -205,7 +215,10 @@ | |||
| 205 | ''; | 215 | ''; |
| 206 | 216 | ||
| 207 | # jolt.deps shells out to git and unzip, and jolt.mvn-http dlopens | 217 | # jolt.deps shells out to git and unzip, and jolt.mvn-http dlopens |
| 208 | - # OpenSSL through the JOLT_OPENSSL_LIBDIR seam. | 218 | + # OpenSSL through the JOLT_OPENSSL_LIBDIR seam. gitMinimal rather |
| 219 | + # than git: all jolt.deps asks for is clone/fetch/rev-parse, and | ||
| 220 | + # the full package carries Perl and Python for the subcommands | ||
| 221 | + # written in them — a quarter of a gigabyte for git-send-email. | ||
| 209 | # | 222 | # |
| 210 | # TZDIR so a zone *name* resolves wherever this runs: frq.clock | 223 | # TZDIR so a zone *name* resolves wherever this runs: frq.clock |
| 211 | # hands one to tzset, and glibc then looks for the tzfile under | 224 | # hands one to tzset, and glibc then looks for the tzfile under |
| @@ -214,7 +227,7 @@ | |||
| 214 | # machine. --set-default, so a TZDIR the user set still wins. | 227 | # machine. --set-default, so a TZDIR the user set still wins. |
| 215 | postFixup = '' | 228 | postFixup = '' |
| 216 | wrapProgram "$out/bin/jolt" \ | 229 | wrapProgram "$out/bin/jolt" \ |
| 217 | - --prefix PATH : "${pkgs.lib.makeBinPath [ pkgs.git pkgs.unzip ]}" \ | 230 | + --prefix PATH : "${pkgs.lib.makeBinPath [ pkgs.gitMinimal pkgs.unzip ]}" \ |
| 218 | --set-default JOLT_OPENSSL_LIBDIR "${pkgs.lib.makeLibraryPath [ pkgs.openssl ]}" \ | 231 | --set-default JOLT_OPENSSL_LIBDIR "${pkgs.lib.makeLibraryPath [ pkgs.openssl ]}" \ |
| 219 | --set-default TZDIR "${pkgs.tzdata}/share/zoneinfo" \ | 232 | --set-default TZDIR "${pkgs.tzdata}/share/zoneinfo" \ |
| 220 | --set-default SSL_CERT_FILE "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" | 233 | --set-default SSL_CERT_FILE "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" |