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 mkOptionDefault;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 = {48 _module.check = false;49 nixpkgs.buildUsing = mkOptionDefault inputs.nixpkgs;50 };51 }52 ];53 };54 bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;55 normalEval = bootstrapNixpkgs.lib.evalModules {56 modules =57 (import ../modules/module-list.nix)58 ++ [59 module60 {61 config = {62 data =63 if isPath data64 then import data65 else data;66 nixpkgs.buildUsing = mkOptionDefault bootstrapNixpkgs;67 nixpkgs.overlays = [68 (final: prev: {69 inherit (import ../pkgs {70 inherit (prev) callPackage;71 craneLib = crane.mkLib prev;72 }) fleet-install-secrets;73 })74 ];75 };76 }77 ];78 specialArgs = {79 inherit inputs self;80 fleetLib = import ../lib {81 inherit (bootstrapNixpkgs) lib;82 };83 _fleetFlakeRootConfig = config;84 };85 };86 in87 normalEval88 )89 nameToModule;90 };91 config = {92 _module.args.fleetLib = import ../lib {inherit lib;};93 flake.fleetConfigurations = config.fleetConfigurations;94 flake.nixosConfigurations = let95 cfg = config.fleetNixosConfigurationsCompat;96 in97 mkIf cfg.enable98 (99 mapAttrs100 (name: host: host.nixos)101 (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts102 );103 flake.fleetModules = config.fleetModules;104 };105106 _file = ./flakePart.nix;107}