difftreelog
feat make inputs' available in nixos config
in: trunk
3 files changed
lib/flakePart.nixdiffbeforeafterboth1{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}modules/fleetLib.nixdiffbeforeafterboth--- a/modules/fleetLib.nix
+++ b/modules/fleetLib.nix
@@ -1,8 +1,4 @@
-{
- lib,
- config,
- ...
-}: {
+{lib, ...}: {
_module.args.fleetLib = import ../../lib {
inherit lib;
};
modules/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;
};
};
};