1{ crane }:2{3 fleetLib,4 lib,5 config,6 inputs,7 self,8 ...9}:10let11 inherit (lib.options) mkOption mkEnableOption;12 inherit (lib.attrsets) mapAttrs;13 inherit (lib.types)14 lazyAttrsOf15 deferredModule16 unspecified17 str18 ;19 inherit (lib.strings) isPath;20 inherit (lib.modules) mkIf mkOptionDefault;21in22{23 options.fleetModules = mkOption {24 type = lazyAttrsOf unspecified;25 default = { };26 };27 options.fleetNixosConfigurationsCompat = {28 enable = mkEnableOption "Create nixosConfiguration output based on fleetConfiguration";29 configuration = mkOption {30 type = str;31 description = "Which fleetConfiguration to use for compatibility";32 default = "default";33 };34 data = mkOption {35 type = unspecified;36 description = "Imported fleet.nix file for fleet";37 };38 };39 options.fleetConfigurations = mkOption {40 type = lazyAttrsOf deferredModule;41 apply =42 nameToModule:43 mapAttrs (44 name: module: data:45 let46 47 48 bootstrapEval = lib.evalModules {49 modules = [50 module51 {52 options.nixpkgs.buildUsing = mkOption {53 description = ''54 Nixpkgs to use for fleetConfiguration evaluation.55 '';56 };57 config = {58 _module.check = false;59 nixpkgs.buildUsing = mkOptionDefault inputs.nixpkgs;60 };61 }62 ];63 };64 bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;65 normalEval = bootstrapNixpkgs.lib.evalModules {66 modules = (import ../modules/module-list.nix) ++ [67 module68 {69 config = {70 data = if isPath data then import data else data;71 nixpkgs.buildUsing = mkOptionDefault bootstrapNixpkgs;72 nixpkgs.overlays = [73 (final: prev: {74 inherit75 (import ../pkgs {76 inherit (prev) callPackage;77 craneLib = crane.mkLib prev;78 })79 fleet-install-secrets80 fleet-generator-helper81 ;82 })83 ];84 };85 }86 ];87 specialArgs = {88 inherit inputs self;89 fleetLib = import ../lib {90 inherit (bootstrapNixpkgs) lib;91 };92 _fleetFlakeRootConfig = config;93 };94 };95 in96 normalEval97 ) nameToModule;98 };99 config = {100 _module.args.fleetLib = import ../lib { inherit lib; };101 flake.fleetConfigurations = config.fleetConfigurations;102 flake.nixosConfigurations =103 let104 cfg = config.fleetNixosConfigurationsCompat;105 in106 mkIf cfg.enable (107 mapAttrs (name: host: host.nixos)108 (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts109 );110 flake.fleetModules = config.fleetModules;111 };112113 _file = ./flakePart.nix;114}