make-disk-image: use nix path-info to automatically set the imageSize

This commit is contained in:
matthewcroughan 2023-12-12 17:53:56 +00:00
parent 1144887c6f
commit 91f1f59969
2 changed files with 13 additions and 6 deletions

View file

@ -24,7 +24,14 @@ let
util-linux util-linux
]; ];
preVM = '' preVM = ''
${lib.concatMapStringsSep "\n" (disk: "truncate -s ${disk.imageSize} ${disk.name}.raw") (lib.attrValues nixosConfig.config.disko.devices.disk)} export PATH=$PATH:${lib.makeBinPath (with pkgs; [ nix jq ])}
export NIX_STATE_DIR=$TMPDIR/state
export NIX_CONFIG="experimental-features = nix-command"
nix-store --load-db < ${pkgs.closureInfo {
rootPaths = [ systemToInstall.config.system.build.toplevel ];
}}/registration
${lib.concatMapStringsSep "\n" (disk: "truncate -s $(($(set -x; nix path-info --json ${systemToInstall.config.system.build.toplevel} | jq .[].closureSize) + ${toString disk.imageSizeExtraBytes})) ${disk.name}.raw") (lib.attrValues nixosConfig.config.disko.devices.disk)}
''; '';
postVM = '' postVM = ''
# shellcheck disable=SC2154 # shellcheck disable=SC2154

View file

@ -16,13 +16,13 @@
type = diskoLib.optionTypes.absolute-pathname; # TODO check if subpath of /dev ? - No! eg: /.swapfile type = diskoLib.optionTypes.absolute-pathname; # TODO check if subpath of /dev ? - No! eg: /.swapfile
description = "Device path"; description = "Device path";
}; };
imageSize = lib.mkOption { imageSizeExtraBytes = lib.mkOption {
type = lib.types.strMatching "[0-9]+[KMGTP]?"; type = lib.types.int;
description = '' description = ''
size of the image if the makeDiskImages function from diksoLib is used. extra size in bytes to add to the end of the disk image if the makeDiskImages function from diksoLib is used.
is used as an argument to truncate -s This is used as an argument to truncate -s
''; '';
default = "2G"; default = 2000000000;
}; };
content = diskoLib.deviceType { parent = config; device = config.device; }; content = diskoLib.deviceType { parent = config; device = config.device; };
_meta = lib.mkOption { _meta = lib.mkOption {