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

difftreelog

source

lib/flakePart.nix2.1 KiBsourcehistory
1{crane}: {2  fleetLib,3  lib,4  config,5  ...6}: let7  inherit (lib.options) mkOption;8  inherit (lib.attrsets) mapAttrs;9  inherit (lib.types) lazyAttrsOf deferredModule unspecified;10  inherit (fleetLib.options) mkHostsOption;11in {12  options.fleetModules = mkOption {13    type = lazyAttrsOf unspecified;14    default = {};15  };16  options.fleetConfigurations = mkOption {17    type = lazyAttrsOf deferredModule;18    apply = nameToModule:19      mapAttrs (20        name: module: data: let21          # To use user-provided nixpkgs, we first need to extract wanted nixpkgs attribute,22          # to do that, evaluate all the modules with only needed option declared.23          bootstrapEval = lib.evalModules {24            modules = [25              module26              {27                options.nixpkgs.buildUsing = mkOption {28                  description = ''29                    Nixpkgs to use for fleetConfiguration evaluation.30                  '';31                };32                config._module.check = false;33              }34            ];35          };36          bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;37          normalEval = bootstrapNixpkgs.lib.evalModules {38            modules =39              (import ../modules/fleet/_modules.nix)40              ++ [41                data42                module43                {44                  options.hosts = mkHostsOption {45                    nixos.nixpkgs.overlays = [46                      (final: prev: {47                        # FIXME: make this name not conflicting48                        craneLib = crane.mkLib prev;49                      })50                    ];51                  };52                }53              ];54            specialArgs.fleetLib = import ../lib {55              inherit (bootstrapNixpkgs) lib;56            };57          };58        in59          normalEval60      )61      nameToModule;62  };63  config = {64    _module.args.fleetLib = import ../lib {inherit lib;};65    flake.fleetConfigurations = config.fleetConfigurations;66    flake.fleetModules = config.fleetModules;67  };6869  _file = ./flakePart.nix;70}