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 ({inputs', ...}: {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 inherit inputs';78 craneLib = crane.mkLib prev;79 })80 fleet-install-secrets81 fleet-generator-helper82 ;83 })84 ];85 };86 })87 ];88 specialArgs = {89 inherit inputs self;90 fleetLib = import ../lib {91 inherit (bootstrapNixpkgs) lib;92 };93 _fleetFlakeRootConfig = config;94 };95 };96 in97 normalEval98 ) nameToModule;99 };100 config = {101 _module.args.fleetLib = import ../lib { inherit lib; };102 flake.fleetConfigurations = config.fleetConfigurations;103 flake.nixosConfigurations =104 let105 cfg = config.fleetNixosConfigurationsCompat;106 in107 mkIf cfg.enable (108 mapAttrs (name: host: host.nixos)109 (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts110 );111 flake.fleetModules = config.fleetModules;112 };113114 _file = ./flakePart.nix;115}