git.delta.rocks / jrsonnet / refs/commits / a5650649afd2

difftreelog

source

lib/flakePart.nix3.3 KiBsourcehistory
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          # To use user-provided nixpkgs, we first need to extract wanted nixpkgs attribute,47          # to do that, evaluate all the modules with only needed option declared.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}