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 { inputs', ... }:70 {71 config = {72 data = if isPath data then import data else data;73 nixpkgs.buildUsing = mkOptionDefault bootstrapNixpkgs;74 nixpkgs.overlays = [75 (final: prev: {76 inherit77 (import ../pkgs {78 inherit (prev) callPackage;79 inherit inputs';80 craneLib = crane.mkLib prev;81 })82 fleet-install-secrets83 fleet-generator-helper84 ;85 })86 ];87 };88 }89 )90 ];91 specialArgs = {92 inherit inputs self;93 fleetLib = import ../lib {94 inherit (bootstrapNixpkgs) lib;95 };96 _fleetFlakeRootConfig = config;97 };98 };99 in100 normalEval101 ) nameToModule;102 };103 config = {104 _module.args.fleetLib = import ../lib { inherit lib; };105 flake.fleetConfigurations = config.fleetConfigurations;106 flake.nixosConfigurations =107 let108 cfg = config.fleetNixosConfigurationsCompat;109 in110 mkIf cfg.enable (111 mapAttrs (name: host: host.nixos)112 (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts113 );114 flake.fleetModules = config.fleetModules;115 };116117 _file = ./flakePart.nix;118}