aboutsummaryrefslogtreecommitdiff
path: root/nixpkgs/nixos/lib/make-squashfs.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/nixos/lib/make-squashfs.nix')
-rw-r--r--nixpkgs/nixos/lib/make-squashfs.nix28
1 files changed, 28 insertions, 0 deletions
diff --git a/nixpkgs/nixos/lib/make-squashfs.nix b/nixpkgs/nixos/lib/make-squashfs.nix
new file mode 100644
index 00000000000..ee76c9c5bf2
--- /dev/null
+++ b/nixpkgs/nixos/lib/make-squashfs.nix
@@ -0,0 +1,28 @@
+{ stdenv, squashfsTools, closureInfo
+
+, # The root directory of the squashfs filesystem is filled with the
+ # closures of the Nix store paths listed here.
+ storeContents ? []
+, # Compression parameters.
+ # For zstd compression you can use "zstd -Xcompression-level 6".
+ comp ? "xz -Xdict-size 100%"
+}:
+
+stdenv.mkDerivation {
+ name = "squashfs.img";
+
+ nativeBuildInputs = [ squashfsTools ];
+
+ buildCommand =
+ ''
+ closureInfo=${closureInfo { rootPaths = storeContents; }}
+
+ # Also include a manifest of the closures in a format suitable
+ # for nix-store --load-db.
+ cp $closureInfo/registration nix-path-registration
+
+ # Generate the squashfs image.
+ mksquashfs nix-path-registration $(cat $closureInfo/store-paths) $out \
+ -keep-as-directory -all-root -b 1048576 -comp ${comp}
+ '';
+}