git.delta.rocks / jrsonnet / refs/commits / 76e09f985e80

difftreelog

source

lib/flakePart.nix2.4 KiBsourcehistory
1{crane}: {2  fleetLib,3  lib,4  config,5  inputs ? {},6  ...7}: let8  inherit (lib.options) mkOption;9  inherit (lib.attrsets) mapAttrs;10  inherit (lib.types) lazyAttrsOf deferredModule unspecified;11  inherit (lib.strings) isPath;12  inherit (fleetLib.options) mkHostsOption;13in {14  options.fleetModules = mkOption {15    type = lazyAttrsOf unspecified;16    default = {};17  };18  options.fleetConfigurations = mkOption {19    type = lazyAttrsOf deferredModule;20    apply = nameToModule:21      mapAttrs (22        name: module: data: let23          # To use user-provided nixpkgs, we first need to extract wanted nixpkgs attribute,24          # to do that, evaluate all the modules with only needed option declared.25          bootstrapEval = lib.evalModules {26            modules = [27              module28              {29                options.nixpkgs.buildUsing = mkOption {30                  description = ''31                    Nixpkgs to use for fleetConfiguration evaluation.32                  '';33                };34                config._module.check = false;35              }36            ];37          };38          bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;39          normalEval = bootstrapNixpkgs.lib.evalModules {40            modules =41              (import ../modules/module-list.nix)42              ++ [43                module44                {45                  options.hosts = mkHostsOption {46                    nixos.nixpkgs.overlays = [47                      (final: prev:48                        import ../pkgs {49                          inherit (prev) callPackage;50                          craneLib = crane.mkLib prev;51                        })52                    ];53                  };54                  config = {55                    data =56                      if isPath data57                      then import data58                      else data;59                  };60                }61              ];62            specialArgs = {63              fleetLib = import ../lib {64                inherit (bootstrapNixpkgs) lib;65              };66              inputs = inputs;67            };68          };69        in70          normalEval71      )72      nameToModule;73  };74  config = {75    _module.args.fleetLib = import ../lib {inherit lib;};76    flake.fleetConfigurations = config.fleetConfigurations;77    flake.fleetModules = config.fleetModules;78  };7980  _file = ./flakePart.nix;81}