git.delta.rocks / jrsonnet / refs/commits / 8fb243b6f0b6

difftreelog

source

lib/flakePart.nix3.0 KiBsourcehistory
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;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          # To use user-provided nixpkgs, we first need to extract wanted nixpkgs attribute,37          # to do that, evaluate all the modules with only needed option declared.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._module.check = false;48              }49            ];50          };51          bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;52          normalEval = bootstrapNixpkgs.lib.evalModules {53            modules =54              (import ../modules/module-list.nix)55              ++ [56                module57                {58                  config = {59                    data =60                      if isPath data61                      then import data62                      else data;63                    nixpkgs.overlays = [64                      (final: prev:65                        import ../pkgs {66                          inherit (prev) callPackage;67                          craneLib = crane.mkLib prev;68                        })69                    ];70                  };71                }72              ];73            specialArgs = {74              inherit inputs self;75              fleetLib = import ../lib {76                inherit (bootstrapNixpkgs) lib;77              };78              _fleetFlakeRootConfig = config;79            };80          };81        in82          normalEval83      )84      nameToModule;85  };86  config = {87    _module.args.fleetLib = import ../lib {inherit lib;};88    flake.fleetConfigurations = config.fleetConfigurations;89    flake.nixosConfigurations = let90      cfg = config.fleetNixosConfigurationsCompat;91    in92      mkIf cfg.enable93      (94        mapAttrs95        (name: host: host.nixos)96        (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts97      );98    flake.fleetModules = config.fleetModules;99  };100101  _file = ./flakePart.nix;102}