]> git.scottworley.com Git - nixos-qemu-vm-isolation/commitdiff
Put squashfs-label patch overlays in a separate file
authorScott Worley <scottworley@scottworley.com>
Fri, 5 Jun 2026 18:29:27 +0000 (11:29 -0700)
committerScott Worley <scottworley@scottworley.com>
Fri, 5 Jun 2026 18:56:08 +0000 (11:56 -0700)
The util-linux patch in particular causes a lot of rebuilds / cache
misses (linux kernel, llvm and hence clang, rustc, & ghc, etc.) in the
guest.

If the host is also building large stuff like the kernel locally for
other reasons, this can result in two sets of large, local builds. :(

Users sensitive to this may wish to harmonize the host and guest config
to get back down to one set of large local builds.  So we make the
squashfs-label patches easy to also apply to the host, for those that
wish to do so.

modules/qemu-vm-isolation.nix
overlays/squashfs-labels/default.nix [new file with mode: 0644]
overlays/squashfs-labels/squashfs-tools-label.patch [moved from modules/squashfs-tools-label.patch with 100% similarity]
overlays/squashfs-labels/util-linux-squashfs-label.patch [moved from modules/util-linux-squashfs-label.patch with 100% similarity]

index 5467f29a366de753f2714a6001762d2ae821999b..ed6800ef9281aeff3bb62460d78939fb4c768716 100644 (file)
@@ -49,17 +49,15 @@ let
       }/nix-store.img";
     squashfs =
       "${hostPkgs.callPackage (modulesPath + "/../lib/make-squashfs.nix") {
-        squashfsTools = hostPkgs.squashfsTools.overrideAttrs (old: {
-          # We patch in support for squashfs labels because
-          # https://github.com/NixOS/nixpkgs/pull/236656 requires filesystems to have labels and
-          # https://github.com/plougher/squashfs-tools/issues/59 squashfs doesn't support labels
-          patches = (old.patches or []) ++ [ ./squashfs-tools-label.patch ];
-          buildInputs = (old.buildInputs or []) ++ [ hostPkgs.makeWrapper ];
-          postInstall = (old.postInstall or "") + ''
-            wrapProgram "$out/bin/mksquashfs" \
-              --append-flags "-label nix-store"
-          '';
-        });
+        squashfsTools =
+          (hostPkgs.extend (import ../overlays/squashfs-labels)).squashfsTools.overrideAttrs
+            (old: {
+              buildInputs = (old.buildInputs or [ ]) ++ [ hostPkgs.makeWrapper ];
+              postInstall = (old.postInstall or "") + ''
+                wrapProgram "$out/bin/mksquashfs" \
+                  --append-flags "-label nix-store"
+              '';
+            });
         storeContents = config.virtualisation.additionalPaths;
       }}";
   };
@@ -84,14 +82,7 @@ in {
         optional (cfg.nixStoreFilesystemType == "erofs") "erofs";
 
       nixpkgs.overlays = optional (cfg.nixStoreFilesystemType == "squashfs")
-        (final: prev: {
-          util-linux = prev.util-linux.overrideAttrs (old: {
-            # We patch in support for squashfs labels because
-            # https://github.com/NixOS/nixpkgs/pull/236656 requires filesystems to have labels and
-            # https://github.com/plougher/squashfs-tools/issues/59 squashfs doesn't support labels
-            patches = (old.patches or [ ]) ++ [ ./util-linux-squashfs-label.patch ];
-          });
-        });
+        (import ../overlays/squashfs-labels);
 
       fileSystems = mkVMOverride {
         "${storeMountPath}" = {
diff --git a/overlays/squashfs-labels/default.nix b/overlays/squashfs-labels/default.nix
new file mode 100644 (file)
index 0000000..8a482d3
--- /dev/null
@@ -0,0 +1,12 @@
+# We patch in support for squashfs labels because
+# https://github.com/NixOS/nixpkgs/pull/236656 requires filesystems to have labels and
+# https://github.com/plougher/squashfs-tools/issues/59 squashfs doesn't support labels
+final: prev: {
+  squashfsTools = prev.squashfsTools.overrideAttrs (old: {
+    patches = (old.patches or [ ]) ++ [ ./squashfs-tools-label.patch ];
+  });
+
+  util-linux = prev.util-linux.overrideAttrs (old: {
+    patches = (old.patches or [ ]) ++ [ ./util-linux-squashfs-label.patch ];
+  });
+}