1{crane}: {2 fleetLib,3 lib,4 config,5 inputs,6 self,7 ...8}: let9 inherit (lib.options) mkOption mkEnableOption;10 inherit (lib.attrsets) mapAttrs;11 inherit (lib.types) lazyAttrsOf deferredModule unspecified str;12 inherit (lib.strings) isPath;13 inherit (lib.modules) mkIf;14in {15 options.fleetModules = mkOption {16 type = lazyAttrsOf unspecified;17 default = {};18 };19 options.fleetNixosConfigurationsCompat = {20 enable = mkEnableOption "Create nixosConfiguration output based on fleetConfiguration";21 configuration = mkOption {22 type = str;23 description = "Which fleetConfiguration to use for compatibility";24 default = "default";25 };26 data = mkOption {27 type = unspecified;28 description = "Imported fleet.nix file for fleet";29 };30 };31 options.fleetConfigurations = mkOption {32 type = lazyAttrsOf deferredModule;33 apply = nameToModule:34 mapAttrs (35 name: module: data: let36 37 38 bootstrapEval = lib.evalModules {39 modules = [40 module41 {42 options.nixpkgs.buildUsing = mkOption {43 description = ''44 Nixpkgs to use for fleetConfiguration evaluation.45 '';46 };47 config._module.check = false;48 }49 ];50 };51 bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;52 normalEval = bootstrapNixpkgs.lib.evalModules {53 modules =54 (import ../modules/module-list.nix)55 ++ [56 module57 {58 config = {59 data =60 if isPath data61 then import data62 else data;63 nixpkgs.overlays = [64 (final: prev:65 import ../pkgs {66 inherit (prev) callPackage;67 craneLib = crane.mkLib prev;68 })69 ];70 };71 }72 ];73 specialArgs = {74 inherit inputs self;75 fleetLib = import ../lib {76 inherit (bootstrapNixpkgs) lib;77 };78 _fleetFlakeRootConfig = config;79 };80 };81 in82 normalEval83 )84 nameToModule;85 };86 config = {87 _module.args.fleetLib = import ../lib {inherit lib;};88 flake.fleetConfigurations = config.fleetConfigurations;89 flake.nixosConfigurations = let90 cfg = config.fleetNixosConfigurationsCompat;91 in92 mkIf cfg.enable93 (94 mapAttrs95 (name: host: host.nixos)96 (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts97 );98 flake.fleetModules = config.fleetModules;99 };100101 _file = ./flakePart.nix;102}