at master 3.2 kB view raw
1{ 2 config, 3 lib, 4 pkgs, 5 extendModules, 6 ... 7}: 8let 9 inherit (lib) types; 10 11 imageModules = { 12 amazon = ../../maintainers/scripts/ec2/amazon-image.nix; 13 azure = ../virtualisation/azure-image.nix; 14 cloudstack = ../../maintainers/scripts/cloudstack/cloudstack-image.nix; 15 digital-ocean = ../virtualisation/digital-ocean-image.nix; 16 google-compute = ../virtualisation/google-compute-image.nix; 17 hyperv = ../virtualisation/hyperv-image.nix; 18 linode = ../virtualisation/linode-image.nix; 19 lxc = ../virtualisation/lxc-container.nix; 20 lxc-metadata = ../virtualisation/lxc-image-metadata.nix; 21 oci = ../virtualisation/oci-image.nix; 22 openstack = ../../maintainers/scripts/openstack/openstack-image.nix; 23 openstack-zfs = ../../maintainers/scripts/openstack/openstack-image-zfs.nix; 24 proxmox = ../virtualisation/proxmox-image.nix; 25 proxmox-lxc = ../virtualisation/proxmox-lxc.nix; 26 qemu-efi = ../virtualisation/disk-image.nix; 27 qemu = { 28 imports = [ ../virtualisation/disk-image.nix ]; 29 image.efiSupport = false; 30 }; 31 raw-efi = { 32 imports = [ ../virtualisation/disk-image.nix ]; 33 image.format = "raw"; 34 }; 35 raw = { 36 imports = [ ../virtualisation/disk-image.nix ]; 37 image.format = "raw"; 38 image.efiSupport = false; 39 }; 40 kubevirt = ../virtualisation/kubevirt.nix; 41 vagrant-virtualbox = ../virtualisation/vagrant-virtualbox-image.nix; 42 virtualbox = ../virtualisation/virtualbox-image.nix; 43 vmware = ../virtualisation/vmware-image.nix; 44 iso = ../installer/cd-dvd/iso-image.nix; 45 iso-installer = ../installer/cd-dvd/installation-cd-base.nix; 46 sd-card = { 47 imports = 48 let 49 module = ../. + "/installer/sd-card/sd-image-${pkgs.targetPlatform.qemuArch}.nix"; 50 in 51 if builtins.pathExists module then 52 [ module ] 53 else 54 throw "The module ${toString module} does not exist."; 55 }; 56 kexec = ../installer/netboot/netboot-minimal.nix; 57 }; 58 imageConfigs = lib.mapAttrs ( 59 name: module: 60 extendModules { 61 modules = [ module ]; 62 } 63 ) config.image.modules; 64in 65{ 66 options = { 67 system.build = { 68 images = lib.mkOption { 69 type = types.lazyAttrsOf types.raw; 70 readOnly = true; 71 description = '' 72 Different target images generated for this NixOS configuration. 73 ''; 74 }; 75 }; 76 image.modules = lib.mkOption { 77 type = types.attrsOf types.deferredModule; 78 description = '' 79 image-specific NixOS Modules used for `system.build.images`. 80 ''; 81 }; 82 }; 83 84 config.image.modules = lib.mkIf (!config.system.build ? image) imageModules; 85 config.system.build.images = lib.mkIf (!config.system.build ? image) ( 86 lib.mapAttrs ( 87 name: nixos: 88 let 89 inherit (nixos) config; 90 inherit (config.image) filePath; 91 builder = 92 config.system.build.image 93 or (throw "Module for `system.build.images.${name}` misses required `system.build.image` option."); 94 in 95 lib.recursiveUpdate builder { 96 passthru = { 97 inherit config filePath; 98 }; 99 } 100 ) imageConfigs 101 ); 102}