1{crane}: {2 fleetLib,3 lib,4 config,5 ...6}: let7 inherit (lib.options) mkOption;8 inherit (lib.attrsets) mapAttrs;9 inherit (lib.types) lazyAttrsOf deferredModule unspecified;10 inherit (lib.strings) isPath;11 inherit (fleetLib.options) mkHostsOption;12in {13 options.fleetModules = mkOption {14 type = lazyAttrsOf unspecified;15 default = {};16 };17 options.fleetConfigurations = mkOption {18 type = lazyAttrsOf deferredModule;19 apply = nameToModule:20 mapAttrs (21 name: module: data: let22 23 24 bootstrapEval = lib.evalModules {25 modules = [26 module27 {28 options.nixpkgs.buildUsing = mkOption {29 description = ''30 Nixpkgs to use for fleetConfiguration evaluation.31 '';32 };33 config._module.check = false;34 }35 ];36 };37 bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;38 normalEval = bootstrapNixpkgs.lib.evalModules {39 modules =40 (import ../modules/module-list.nix)41 ++ [42 module43 {44 options.hosts = mkHostsOption {45 nixos.nixpkgs.overlays = [46 (final: prev:47 import ../pkgs {48 inherit (prev) callPackage;49 craneLib = crane.mkLib prev;50 })51 ];52 };53 config = {54 data =55 if isPath data56 then import data57 else data;58 };59 }60 ];61 specialArgs.fleetLib = import ../lib {62 inherit (bootstrapNixpkgs) lib;63 };64 };65 in66 normalEval67 )68 nameToModule;69 };70 config = {71 _module.args.fleetLib = import ../lib {inherit lib;};72 flake.fleetConfigurations = config.fleetConfigurations;73 flake.fleetModules = config.fleetModules;74 };7576 _file = ./flakePart.nix;77}