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

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              ({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}