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

difftreelog

source

lib/flakePart.nix3.4 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                { 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}