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

difftreelog

feat nixosConfigurations output compat

Yaroslav Bolyukin2024-11-03parent: #13f8ec8.patch.diff
in: trunk

1 file changed

modifiedlib/flakePart.nixdiffbeforeafterboth
before · lib/flakePart.nix
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;12in {13  options.fleetModules = mkOption {14    type = lazyAttrsOf unspecified;15    default = {};16  };17  options.fleetConfigurations = mkOption {18    type = lazyAttrsOf deferredModule;19    apply = nameToModule:20      mapAttrs (21        name: module: data: let22          # To use user-provided nixpkgs, we first need to extract wanted nixpkgs attribute,23          # to do that, evaluate all the modules with only needed option declared.24          bootstrapEval = lib.evalModules {25            modules = [26              module27              {28                options.nixpkgs.buildUsing = mkOption {29                  description = ''30                    Nixpkgs to use for fleetConfiguration evaluation.31                  '';32                };33                config._module.check = false;34              }35            ];36          };37          bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;38          normalEval = bootstrapNixpkgs.lib.evalModules {39            modules =40              (import ../modules/module-list.nix)41              ++ [42                module43                {44                  config = {45                    data =46                      if isPath data47                      then import data48                      else data;49                    nixpkgs.overlays = [50                      (final: prev:51                        import ../pkgs {52                          inherit (prev) callPackage;53                          craneLib = crane.mkLib prev;54                        })55                    ];56                  };57                }58              ];59            specialArgs = {60              inherit inputs;61              fleetLib = import ../lib {62                inherit (bootstrapNixpkgs) lib;63              };64            };65          };66        in67          normalEval68      )69      nameToModule;70  };71  config = {72    _module.args.fleetLib = import ../lib {inherit lib;};73    flake.fleetConfigurations = config.fleetConfigurations;74    flake.fleetModules = config.fleetModules;75  };7677  _file = ./flakePart.nix;78}
after · lib/flakePart.nix
1{crane}: {2  fleetLib,3  lib,4  config,5  inputs ? {},6  ...7}: let8  inherit (lib.options) mkOption mkEnableOption;9  inherit (lib.attrsets) mapAttrs;10  inherit (lib.types) lazyAttrsOf deferredModule unspecified str;11  inherit (lib.strings) isPath;12  inherit (lib.modules) mkIf;13in {14  options.fleetModules = mkOption {15    type = lazyAttrsOf unspecified;16    default = {};17  };18  options.fleetNixosConfigurationsCompat = {19    enable = mkEnableOption "Create nixosConfiguration output based on fleetConfiguration";20    configuration = mkOption {21      type = str;22      description = "Which fleetConfiguration to use for compatibility";23      default = "default";24    };25    data = mkOption {26      type = unspecified;27      description = "Imported fleet.nix file for fleet";28    };29  };30  options.fleetConfigurations = mkOption {31    type = lazyAttrsOf deferredModule;32    apply = nameToModule:33      mapAttrs (34        name: module: data: let35          # To use user-provided nixpkgs, we first need to extract wanted nixpkgs attribute,36          # to do that, evaluate all the modules with only needed option declared.37          bootstrapEval = lib.evalModules {38            modules = [39              module40              {41                options.nixpkgs.buildUsing = mkOption {42                  description = ''43                    Nixpkgs to use for fleetConfiguration evaluation.44                  '';45                };46                config._module.check = false;47              }48            ];49          };50          bootstrapNixpkgs = bootstrapEval.config.nixpkgs.buildUsing;51          normalEval = bootstrapNixpkgs.lib.evalModules {52            modules =53              (import ../modules/module-list.nix)54              ++ [55                module56                {57                  config = {58                    data =59                      if isPath data60                      then import data61                      else data;62                    nixpkgs.overlays = [63                      (final: prev:64                        import ../pkgs {65                          inherit (prev) callPackage;66                          craneLib = crane.mkLib prev;67                        })68                    ];69                  };70                }71              ];72            specialArgs = {73              inherit inputs;74              fleetLib = import ../lib {75                inherit (bootstrapNixpkgs) lib;76              };77            };78          };79        in80          normalEval81      )82      nameToModule;83  };84  config = {85    _module.args.fleetLib = import ../lib {inherit lib;};86    flake.fleetConfigurations = config.fleetConfigurations;87    flake.nixosConfigurations = let88      cfg = config.fleetNixosConfigurationsCompat;89    in90      mkIf cfg.enable91      (92        mapAttrs93        (name: host: host.nixos)94        (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts95      );96    flake.fleetModules = config.fleetModules;97  };9899  _file = ./flakePart.nix;100}