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