1{2 lib,3 fleetLib,4 inputs,5 self,6 config,7 _fleetFlakeRootConfig,8 ...9}:10let11 inherit (lib.attrsets) mapAttrs;12 inherit (lib.options) mkOption;13 inherit (lib.types) deferredModule unspecified;14 inherit (lib.modules) mkRemovedOptionModule;15 inherit (lib.strings) escapeNixIdentifier;16 inherit (fleetLib.options) mkHostsOption;1718 _file = ./nixos.nix;19in20{21 options = {22 nixos = mkOption {23 description = ''24 Shared nixos configuration module for all hosts.25 '';26 type = deferredModule;27 };28 hosts = mkHostsOption (hostArgs: {29 inherit _file;30 options = {31 nixos = mkOption {32 description = ''33 Nixos configuration for the current host.34 '';35 type = deferredModule;36 apply =37 module:38 let39 inherit (hostArgs.config) system;40 in41 config.nixpkgs.buildUsing.lib.evalModules {42 modules = (import "${config.nixpkgs.buildUsing}/nixos/modules/module-list.nix") ++ [43 (module // { key = "attr<host.nixos>"; })44 (config.nixos // { key = "attr<fleet.nixos>"; })45 ];46 specialArgs = {47 inherit fleetLib inputs self;48 inputs' = mapAttrs (49 inputName: input:50 builtins.addErrorContext51 "while retrieving system-dependent attributes for input ${escapeNixIdentifier inputName}"52 (53 if input._type or null == "flake" then54 _fleetFlakeRootConfig.perInput system input55 else56 "input is not a flake, perhaps flake = false was added to te input declaration?"57 )58 ) inputs;59 };60 };61 };62 nixos_unchecked = mkOption {63 type = unspecified;64 };65 };66 config = {67 68 69 70 nixos = {71 config._module.args = {72 nixosHosts = mapAttrs (_: value: value.nixos_unchecked.config) config.hosts;73 hosts = config.hosts;74 host = hostArgs.config;75 fleetConfiguration = config;76 };77 };78 nixos_unchecked = hostArgs.config.nixos.extendModules {79 modules = [80 {81 _module.check = false;82 }83 ];84 };85 };86 });87 };88 imports = [89 (mkRemovedOptionModule [ "nixosModules" ] "replaced with nixos.imports.")90 ];91 config.nixos.imports = import ./nixos/module-list.nix;92}