1{2 lib,3 fleetLib,4 config,5 nixpkgs,6 ...7}:8with lib;9with fleetLib; let10 hostModule = with types;11 {...} @ hostConfig: let12 hostName = hostConfig.config._module.args.name;13 in {14 options = {15 nixosModules = mkOption {16 type = listOf (mkOptionType {17 name = "submodule";18 inherit (submodule {}) check;19 merge = lib.options.mergeOneOption;20 description = "Nixos module";21 });22 description = "List of nixos modules";23 default = [];24 };25 system = mkOption {26 type = str;27 description = "Type of system";28 };29 encryptionKey = mkOption {30 type = str;31 description = "Encryption key";32 };33 nixosSystem = mkOption {34 type = unspecified;35 description = "Nixos configuration";36 };37 nixpkgs = mkOption {38 type = unspecified;39 description = "Nixpkgs override";40 default = nixpkgs;41 };42 };43 config = {44 nixosSystem = hostConfig.config.nixpkgs.lib.nixosSystem {45 inherit (hostConfig.config) system;46 modules = hostConfig.config.nixosModules;47 specialArgs = {48 inherit fleetLib;49 fleet = hostsToAttrs (host: config.hosts.${host}.nixosSystem.config);50 };51 };52 nixosModules = [53 ({...}: {54 networking.hostName = mkFleetGeneratorDefault hostName;55 })56 ];57 };58 };59 overlayType = mkOptionType {60 name = "nixpkgs-overlay";61 description = "nixpkgs overlay";62 check = lib.isFunction;63 merge = lib.mergeOneOption;64 };65in {66 options = with types; {67 hosts = mkOption {68 type = attrsOf (submodule hostModule);69 default = {};70 description = "Configurations of individual hosts";71 };72 nixosModules = mkOption {73 type = listOf (mkOptionType {74 name = "submodule";75 inherit (submodule {}) check;76 merge = lib.options.mergeOneOption;77 description = "Nixos modules";78 });79 description = "Modules, which should be added to every system";80 default = [];81 };82 overlays = mkOption {83 default = [];84 type = listOf overlayType;85 };86 };87 config = {88 hosts = hostsToAttrs (host: {89 nixosModules =90 config.nixosModules91 ++ [92 ({...}: {93 nixpkgs.overlays = config.overlays;94 })95 ];96 });97 nixosModules = import ../../nixos/modules/module-list.nix;98 };99}