2022-02-11 16:36:02 +00:00
|
|
|
{ lib, extendModules, modulesPath, baseModules, options, config, ... }:
|
2022-02-13 13:10:21 +00:00
|
|
|
let
|
2022-02-13 18:36:57 +00:00
|
|
|
inherit (lib) recursiveUpdate mkOption mkDefault;
|
|
|
|
inherit (lib.my) mkBoolOpt' dummyOption;
|
2022-02-11 01:15:24 +00:00
|
|
|
|
2022-02-13 13:10:21 +00:00
|
|
|
cfg = config.my.build;
|
2022-02-11 01:15:24 +00:00
|
|
|
|
2022-02-13 13:10:21 +00:00
|
|
|
asDevVM = extendModules {
|
|
|
|
# TODO: Hack because this is kinda broken on 21.11 (https://github.com/NixOS/nixpkgs/issues/148343)
|
|
|
|
specialArgs = { inherit baseModules; };
|
|
|
|
modules = [
|
|
|
|
"${modulesPath}/virtualisation/qemu-vm.nix"
|
|
|
|
({ ... }: {
|
|
|
|
my.boot.isDevVM = true;
|
|
|
|
})
|
|
|
|
];
|
|
|
|
};
|
|
|
|
in
|
|
|
|
{
|
2022-02-13 18:36:57 +00:00
|
|
|
options = with lib.types; {
|
|
|
|
my = {
|
|
|
|
boot.isDevVM = mkBoolOpt' false "Whether the system is a development VM.";
|
|
|
|
build = options.system.build;
|
|
|
|
asDevVM = mkOption {
|
|
|
|
inherit (asDevVM) type;
|
|
|
|
default = { };
|
|
|
|
visible = "shallow";
|
|
|
|
description = "Configuration as a development VM";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
# Forward declare options that won't exist until the VM module is actually imported
|
|
|
|
virtualisation = {
|
|
|
|
diskImage = dummyOption;
|
2022-02-11 01:15:24 +00:00
|
|
|
};
|
2022-02-13 13:10:21 +00:00
|
|
|
};
|
2022-02-11 01:15:24 +00:00
|
|
|
|
2022-02-13 18:36:57 +00:00
|
|
|
config = {
|
|
|
|
virtualisation = {
|
|
|
|
diskImage = mkDefault "./.vms/${config.system.name}.qcow2";
|
|
|
|
};
|
|
|
|
my.build = {
|
|
|
|
# The meta.mainProgram should probably be set upstream but oh well...
|
|
|
|
devVM = recursiveUpdate config.my.asDevVM.system.build.vm { meta.mainProgram = "run-${config.system.name}-vm"; };
|
|
|
|
};
|
2022-02-13 13:10:21 +00:00
|
|
|
};
|
2022-02-15 20:50:27 +00:00
|
|
|
|
|
|
|
meta.buildDocsInSandbox = false;
|
2022-02-13 13:10:21 +00:00
|
|
|
}
|