disko/install-cli.nix

44 lines
1.3 KiB
Nix

{ flake
, flakeAttr
, diskMappings
, writeEfiBootEntries ? false
, rootMountPoint ? "/mnt"
}:
let
originalSystem = (builtins.getFlake "${flake}").nixosConfigurations."${flakeAttr}";
diskoSystem =
let
lib = originalSystem.lib;
modifiedDisks = builtins.mapAttrs
(name: value: let
dev = if diskMappings ? ${name} then
diskMappings.${name}
else
throw "No device passed for disk '${name}'. Pass `--disk ${name} /dev/name` via commandline";
in value // {
device = dev;
content = value.content // { device = dev; };
})
originalSystem.config.disko.devices.disk;
cleanedDisks = lib.filterAttrsRecursive (n: _: !lib.hasPrefix "_" n) modifiedDisks;
in
originalSystem.extendModules {
modules = [{
disko.rootMountPoint = rootMountPoint;
disko.devices.disk = lib.mkVMOverride cleanedDisks;
}];
};
installSystem = originalSystem.extendModules {
modules = [({ lib, ... }: {
boot.loader.efi.canTouchEfiVariables = lib.mkVMOverride writeEfiBootEntries;
boot.loader.grub.devices = lib.mkVMOverride diskoSystem.config.boot.loader.grub.devices;
})];
};
in
{
installToplevel = installSystem.config.system.build.toplevel;
inherit (diskoSystem.config.system.build) formatScript mountScript diskoScript;
}