2024-06-29 21:59:27 +00:00
|
|
|
{ buildPackages
|
2022-09-26 15:19:14 +00:00
|
|
|
, callPackage
|
2022-09-26 19:45:00 +00:00
|
|
|
, pseudofile
|
2022-09-26 15:19:14 +00:00
|
|
|
, runCommand
|
|
|
|
, writeText
|
2022-09-27 21:06:36 +00:00
|
|
|
} : filesystem :
|
2022-09-19 22:51:38 +00:00
|
|
|
let
|
2022-09-27 21:06:36 +00:00
|
|
|
pseudofiles = pseudofile.write "files.pf" filesystem;
|
2022-09-26 19:45:00 +00:00
|
|
|
|
2022-09-21 22:01:21 +00:00
|
|
|
storefs = callPackage <nixpkgs/nixos/lib/make-squashfs.nix> {
|
2022-09-27 15:17:55 +00:00
|
|
|
# 1) Every required package is referenced from somewhere
|
|
|
|
# outside /nix/store. 2) Every file outside the store is
|
2022-09-27 15:33:58 +00:00
|
|
|
# specified by config.filesystem. 3) Therefore, closing over
|
2022-09-27 15:17:55 +00:00
|
|
|
# the pseudofile will give us all the needed packages
|
|
|
|
storeContents = [ pseudofiles ];
|
2022-09-21 22:01:21 +00:00
|
|
|
};
|
|
|
|
in runCommand "frob-squashfs" {
|
2022-09-26 15:19:14 +00:00
|
|
|
nativeBuildInputs = with buildPackages; [ squashfsTools qprint ];
|
2022-09-27 13:06:07 +00:00
|
|
|
} ''
|
2022-09-21 22:01:21 +00:00
|
|
|
cp ${storefs} ./store.img
|
|
|
|
chmod +w store.img
|
2022-09-27 16:36:25 +00:00
|
|
|
mksquashfs - store.img -exit-on-error -no-recovery -quiet -no-progress -root-becomes store -p "/ d 0755 0 0"
|
|
|
|
mksquashfs - store.img -exit-on-error -no-recovery -quiet -no-progress -root-becomes nix -p "/ d 0755 0 0" -pf ${pseudofiles}
|
2022-09-21 22:01:21 +00:00
|
|
|
cp store.img $out
|
2022-09-27 13:06:07 +00:00
|
|
|
''
|