nixos/image.modules: siplify type for better UX

Usage before:

```
image.modules.my-format = [
  (
    { config, pkgs, ... }:
    {
      imports = [ ./my-other-module.nix ];
      foo = "bar";
    };
  )
]
```

Usage after:

```
image.modules.my-format = { config, pkgs, ... }: {
  imports = [ ./my-other-module.nix ];
  foo = "bar";
};
```

If the user wants to pass a list of modules only:
```
image.modules.my-format.imports = [
  ./module1.nix
  ./module2.nix
]
```

cc @phaer @zimbatm
This commit is contained in:
DavHau 2025-01-07 12:39:46 +07:00
parent 66ca9869c7
commit 6e6be76601

View file

@ -9,59 +9,52 @@ let
inherit (lib) types; inherit (lib) types;
imageModules = { imageModules = {
amazon = [ ../../maintainers/scripts/ec2/amazon-image.nix ]; amazon = ../../maintainers/scripts/ec2/amazon-image.nix;
azure = [ ../virtualisation/azure-image.nix ]; azure = ../virtualisation/azure-image.nix;
digital-ocean = [ ../virtualisation/digital-ocean-image.nix ]; digital-ocean = ../virtualisation/digital-ocean-image.nix;
google-compute = [ ../virtualisation/google-compute-image.nix ]; google-compute = ../virtualisation/google-compute-image.nix;
hyperv = [ ../virtualisation/hyperv-image.nix ]; hyperv = ../virtualisation/hyperv-image.nix;
linode = [ ../virtualisation/linode-image.nix ]; linode = ../virtualisation/linode-image.nix;
lxc = [ ../virtualisation/lxc-container.nix ]; lxc = ../virtualisation/lxc-container.nix;
lxc-metadata = [ ../virtualisation/lxc-image-metadata.nix ]; lxc-metadata = ../virtualisation/lxc-image-metadata.nix;
oci = [ ../virtualisation/oci-image.nix ]; oci = ../virtualisation/oci-image.nix;
openstack = [ ../../maintainers/scripts/openstack/openstack-image.nix ]; openstack = ../../maintainers/scripts/openstack/openstack-image.nix;
openstack-zfs = [ ../../maintainers/scripts/openstack/openstack-image-zfs.nix ]; openstack-zfs = ../../maintainers/scripts/openstack/openstack-image-zfs.nix;
proxmox = [ ../virtualisation/proxmox-image.nix ]; proxmox = ../virtualisation/proxmox-image.nix;
proxmox-lxc = [ ../virtualisation/proxmox-lxc.nix ]; proxmox-lxc = ../virtualisation/proxmox-lxc.nix;
qemu-efi = [ ../virtualisation/disk-image.nix ]; qemu-efi = ../virtualisation/disk-image.nix;
qemu = [ qemu = {
../virtualisation/disk-image.nix imports = [ ../virtualisation/disk-image.nix ];
{ image.efiSupport = false;
image.efiSupport = false; };
} raw-efi = {
]; imports = [ ../virtualisation/disk-image.nix ];
raw-efi = [ image.format = "raw";
../virtualisation/disk-image.nix };
{ raw = {
image.format = "raw"; imports = [ ../virtualisation/disk-image.nix ];
} image.format = "raw";
]; image.efiSupport = false;
raw = [ };
../virtualisation/disk-image.nix kubevirt = ../virtualisation/kubevirt.nix;
{ vagrant-virtualbox = ../virtualisation/vagrant-virtualbox-image.nix;
image.format = "raw"; virtualbox = ../virtualisation/virtualbox-image.nix;
image.efiSupport = false; vmware = ../virtualisation/vmware-image.nix;
} iso = ../installer/cd-dvd/iso-image.nix;
]; iso-installer = ../installer/cd-dvd/installation-cd-base.nix;
kubevirt = [ ../virtualisation/kubevirt.nix ]; sd-card = {
vagrant-virtualbox = [ ../virtualisation/vagrant-virtualbox-image.nix ]; imports =
virtualbox = [ ../virtualisation/virtualbox-image.nix ];
vmware = [ ../virtualisation/vmware-image.nix ];
iso = [ ../installer/cd-dvd/iso-image.nix ];
iso-installer = [ ../installer/cd-dvd/installation-cd-base.nix ];
sd-card = [
(
let let
module = ../. + "/installer/sd-card/sd-image-${pkgs.targetPlatform.linuxArch}.nix"; module = ../. + "/installer/sd-card/sd-image-${pkgs.targetPlatform.linuxArch}.nix";
in in
if builtins.pathExists module then module else throw "The module ${module} does not exist." if builtins.pathExists module then [ module ] else throw "The module ${module} does not exist.";
) };
]; kexec = ../installer/netboot/netboot-minimal.nix;
kexec = [ ../installer/netboot/netboot-minimal.nix ];
}; };
imageConfigs = lib.mapAttrs ( imageConfigs = lib.mapAttrs (
name: modules: name: module:
extendModules { extendModules {
inherit modules; modules = [ module ];
} }
) config.image.modules; ) config.image.modules;
in in
@ -77,7 +70,7 @@ in
}; };
}; };
image.modules = lib.mkOption { image.modules = lib.mkOption {
type = types.attrsOf (types.listOf types.deferredModule); type = types.attrsOf types.deferredModule;
description = '' description = ''
image-specific NixOS Modules used for `system.build.images`. image-specific NixOS Modules used for `system.build.images`.
''; '';