From e1dee4efcbffc72260025078bf8297a3b732509c Mon Sep 17 00:00:00 2001 From: Silvan Mosberger Date: Fri, 6 Apr 2018 18:51:10 +0200 Subject: [PATCH] lib: make extensible This allows the lib fixed point to be extended with myLib = lib.extend (self: super: { foo = "foo"; }) With this it's possible to have the new modified lib attrset available to all modules when using evalModules myLib.evalModules { modules = [ ({ lib, ... }: { options.bar = lib.mkOption { default = lib.foo; }; }) ]; } => { config = { bar = "foo"; ... }; options = ...; } --- lib/default.nix | 8 +++++--- lib/modules.nix | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/default.nix b/lib/default.nix index cbe0a0ba21b..59b3d2159da 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -5,9 +5,11 @@ */ let - callLibs = file: import file { inherit lib; }; + inherit (import ./fixed-points.nix {}) makeExtensible; - lib = rec { + lib = makeExtensible (self: let + callLibs = file: import file { lib = self; }; + in with self; { # often used, or depending on very little trivial = callLibs ./trivial.nix; @@ -128,5 +130,5 @@ let mergeAttrsNoOverride mergeAttrByFunc mergeAttrsByFuncDefaults mergeAttrsByFuncDefaultsClean mergeAttrBy prepareDerivationArgs nixType imap overridableDelayableArgs; - }; + }); in lib diff --git a/lib/modules.nix b/lib/modules.nix index acd07f732bd..4ef982c7ec9 100644 --- a/lib/modules.nix +++ b/lib/modules.nix @@ -59,7 +59,7 @@ rec { }; }; - closed = closeModules (modules ++ [ internalModule ]) ({ inherit config options; lib = import ./.; } // specialArgs); + closed = closeModules (modules ++ [ internalModule ]) ({ inherit config options lib; } // specialArgs); options = mergeModules prefix (reverseList (filterModules (specialArgs.modulesPath or "") closed));