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