git.delta.rocks / jrsonnet / refs/commits / 05eaddea6c83

difftreelog

feat make inputs' available in nixos config

Yaroslav Bolyukin2024-11-10parent: #c05c232.patch.diff
in: trunk

3 files changed

modifiedlib/flakePart.nixdiffbeforeafterboth
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              _fleetFlakeRootConfig = config;78            };79          };80        in81          normalEval82      )83      nameToModule;84  };85  config = {86    _module.args.fleetLib = import ../lib {inherit lib;};87    flake.fleetConfigurations = config.fleetConfigurations;88    flake.nixosConfigurations = let89      cfg = config.fleetNixosConfigurationsCompat;90    in91      mkIf cfg.enable92      (93        mapAttrs94        (name: host: host.nixos)95        (config.fleetConfigurations.${cfg.configuration} cfg.data).config.hosts96      );97    flake.fleetModules = config.fleetModules;98  };99100  _file = ./flakePart.nix;101}
modifiedmodules/fleetLib.nixdiffbeforeafterboth
--- a/modules/fleetLib.nix
+++ b/modules/fleetLib.nix
@@ -1,8 +1,4 @@
-{
-  lib,
-  config,
-  ...
-}: {
+{lib, ...}: {
   _module.args.fleetLib = import ../../lib {
     inherit lib;
   };
modifiedmodules/nixos.nixdiffbeforeafterboth
--- a/modules/nixos.nix
+++ b/modules/nixos.nix
@@ -3,12 +3,14 @@
   fleetLib,
   inputs,
   config,
+  _fleetFlakeRootConfig,
   ...
 }: let
   inherit (lib.attrsets) mapAttrs;
   inherit (lib.options) mkOption;
   inherit (lib.types) deferredModule;
   inherit (lib.modules) mkRemovedOptionModule;
+  inherit (lib.strings) escapeNixIdentifier;
   inherit (fleetLib.options) mkHostsOption;
 
   _file = ./nixos.nix;
@@ -28,15 +30,25 @@
             Nixos configuration for the current host.
           '';
           type = deferredModule;
-          apply = module:
+          apply = module: let
+            inherit (hostArgs.config) system;
+          in
             config.nixpkgs.buildUsing.lib.nixosSystem {
-              inherit (hostArgs.config) system;
+              inherit system;
               modules = [
                 (module // {key = "attr<host.nixos>";})
                 (config.nixos // {key = "attr<fleet.nixos>";})
               ];
               specialArgs = {
                 inherit fleetLib inputs;
+                inputs' = mapAttrs (inputName: input:
+                  builtins.addErrorContext "while retrieving system-dependent attributes for input ${escapeNixIdentifier inputName}"
+                  (
+                    if input._type or null == "flake"
+                    then _fleetFlakeRootConfig.perInput system input
+                    else "input is not a flake, perhaps flake = false was added to te input declaration?"
+                  ))
+                inputs;
               };
             };
         };