From 4067970d24c57c0d28971475f3620adab1a758c5 Mon Sep 17 00:00:00 2001 From: guangtao Date: Sun, 21 Apr 2024 23:34:17 -0700 Subject: [PATCH] refactor(haumea.nixosModules): add nixosModuleImporter allows users can use custom loader --- src/haumea/importModule.nix | 11 +++++------ src/haumea/nixosModules.nix | 2 +- src/haumea/pops.nix | 5 ++++- src/haumea/structAttrs.nix | 1 + 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/haumea/importModule.nix b/src/haumea/importModule.nix index 3d3dd41..a72facb 100644 --- a/src/haumea/importModule.nix +++ b/src/haumea/importModule.nix @@ -8,6 +8,7 @@ let l = lib // builtins; inherit (builtins) mapAttrs; inherit (lib) functionArgs pipe toFunction; + # inherit (lib.modules) applyModuleArgsIfFunction; isModule = l.elem cfg.type [ "nixosModules" @@ -24,8 +25,6 @@ let f ]; - importModule = importer; - removeFileSuffix = l.removeSuffix ".nix"; removeDefault = l.removeSuffix "/default"; relModulePathWithoutDefault = relModulePathWithoutDefault' removeDefault; @@ -55,7 +54,7 @@ in let module = if (isTopLevel path) && cfg.type == "nixosProfilesOmnibus" then - importModule inputs path + importer inputs path else { config ? { }, @@ -81,7 +80,7 @@ in ); moduleArgs = baseModuleArgs // { - loadSubmodule = path: (mkExtender (importModule baseModuleArgs path) path); + loadSubmodule = path: (mkExtender (importer baseModuleArgs path) path); }; mkExtender = @@ -105,7 +104,7 @@ in if (l.isFunction v) then lazyArgsPerParameter v (moduleArgs // extraArgs) else if (l.isPath v) then - importModule (moduleArgs // extraArgs) v + importer (moduleArgs // extraArgs) v else v; @@ -144,7 +143,7 @@ in options = fun module.options or { }; }; - callDefaultModule = importModule moduleArgs path; + callDefaultModule = importer moduleArgs path; # => { config = { }; imports = [... ]; _file } finalModule = let diff --git a/src/haumea/nixosModules.nix b/src/haumea/nixosModules.nix index f745c44..da7fcf3 100644 --- a/src/haumea/nixosModules.nix +++ b/src/haumea/nixosModules.nix @@ -17,7 +17,7 @@ let loader = with haumea.lib; (lib.optionals (initLoad.loader != haumea.lib.loaders.default) [ - (matchers.nix (super.importModule cfg extender haumea.lib.loaders.scoped)) + (matchers.nix (super.importModule cfg extender cfg.nixosModuleImporter)) ]) ++ (lib.optionals (lib.isList cfg.loader)) cfg.loader; transformer = diff --git a/src/haumea/pops.nix b/src/haumea/pops.nix index b945a40..14804e1 100644 --- a/src/haumea/pops.nix +++ b/src/haumea/pops.nix @@ -18,13 +18,14 @@ let loadExtender = pop { defaults = { - initLoad = { + initLoad = rec { src = ./.; loader = haumea.lib.loaders.default; inputs = { }; inputsTransformer = [ ]; transformer = [ ]; type = "default"; + nixosModuleImporter = haumea.lib.loaders.scoped; }; load = { }; }; @@ -65,6 +66,7 @@ let transformer type inputsTransformer + nixosModuleImporter ; src = if l.isString load.src then l.unsafeDiscardStringContext load.src else load.src; @@ -209,6 +211,7 @@ let l.removeAttrs cfg [ "type" "inputsTransformer" + "nixosModuleImporter" ] ); }; diff --git a/src/haumea/structAttrs.nix b/src/haumea/structAttrs.nix index ddc10b0..a6b9704 100644 --- a/src/haumea/structAttrs.nix +++ b/src/haumea/structAttrs.nix @@ -71,6 +71,7 @@ let "evalModules" "nixosProfilesOmnibus" ] "type"; + nixosModuleImporter = function; }; haumeaLoadExtender = {