{ nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; lib = pkgs.lib; machineOpts = {config, ...}: { options = { arch = lib.mkOption { default = null; type = with lib.types; nullOr str; description = '' CPU architecture of this machine. ''; }; facterReportPath = lib.mkOption { default = null; type = with lib.types; nullOr path; description = '' Path to the nixos-facter report JSON for this machine. ''; }; isRaspberryPi = lib.mkOption { default = false; type = lib.types.bool; }; nixosModule = lib.mkOption { default = {...}: {}; type = lib.types.anything; description = '' Customized configuration for this machine in the form of a NixOS module. ''; }; kubernetesNodeLabels = lib.mkOption { default = null; type = with lib.types; nullOr attrs; description = '' Any labels to add to the Kubernetes node. ''; }; }; }; allOpts = { options = { machines = lib.mkOption { type = with lib.types; attrsOf (submodule machineOpts); }; }; }; in { machines = (lib.modules.evalModules { modules = [ allOpts ./warwick ./atlas ./jefke ./lewis # ./talos.nix ]; }) .config .machines; })