git.delta.rocks / jrsonnet / refs/heads / trunk

difftreelog

source

lib/flakePart.nix2.9 KiBsourcehistory
1{ crane }:2{3  fleetLib,4  lib,5  config,6  inputs,7  self,8  ...9}:10let11  inherit (lib.options) mkOption;12  inherit (lib.attrsets) mapAttrs;13  inherit (lib.types)14    lazyAttrsOf15    deferredModule16    unspecified17    ;18  inherit (lib.strings) isPath;19  inherit (lib.modules) mkOptionDefault;20in21{22  options.fleetModules = mkOption {23    type = lazyAttrsOf unspecified;24    default = { };25  };26  options.fleetConfigurations = mkOption {27    type = lazyAttrsOf deferredModule;28    apply =29      nameToModule:30      mapAttrs (31        name: module: data:32        let33          # To use user-provided nixpkgs, we first need to extract wanted nixpkgs attribute,34          # to do that, evaluate all the modules with only needed option declared.35          bootstrapEval = lib.evalModules {36            class = "fleet";37            prefix = [ "fleetConfiguration" ];38            modules = [39              module40              {41                options.nixpkgs.buildUsing = mkOption {42                  description = ''43                    Nixpkgs to use for fleetConfiguration evaluation.44                  '';45                };46                config = {47                  _module.check = false;48                  nixpkgs.buildUsing = mkOptionDefault inputs.nixpkgs;49                };50              }51            ];52          };53          bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;54          normalEval = bootstrapNixpkgs.lib.evalModules {55            class = "fleet";56            prefix = [ "fleetConfiguration" ];57            modules = (import ../modules/module-list.nix) ++ [58              module59              (60                { inputs', ... }:61                {62                  config = {63                    data = if isPath data then import data else data;64                    nixpkgs.buildUsing = mkOptionDefault bootstrapNixpkgs;65                    nixpkgs.overlays = [66                      (final: prev: {67                        inherit68                          (import ../pkgs {69                            inherit (prev) callPackage;70                            inherit inputs';71                            craneLib = crane.mkLib prev;72                          })73                          fleet-install-secrets74                          fleet-generator-helper75                          ;76                      })77                    ];78                  };79                }80              )81            ];82            specialArgs = {83              inherit inputs self;84              fleetLib = import ../lib {85                inherit (bootstrapNixpkgs) lib;86              };87              _fleetFlakeRootConfig = config;88            };89          };90        in91        normalEval92      ) nameToModule;93  };94  config = {95    _module.args.fleetLib = import ../lib { inherit lib; };96    flake.fleetConfigurations = config.fleetConfigurations;97    flake.fleetModules = config.fleetModules;98  };99100  _file = ./flakePart.nix;101}