Skip to content

Commit 6ced6ad

Browse files
authored
feat(lib.evalProgram): helper for evaling programs that already have modules (#190)
like wlib.wrapProgram but doesn't import wlib.modules.default for you. Or like wlib.evalModule but grabs `.config.wrapper` from the result
1 parent b18f79f commit 6ced6ad

File tree

1 file changed

+42
-6
lines changed

1 file changed

+42
-6
lines changed

lib/lib.nix

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ in
5454
5555
Evaluates the module along with the core options, using `lib.evalModules`
5656
57-
Takes a module as its argument. Returns the result from `lib.evalModules` directly.
57+
Takes a module (or list of modules) as its argument.
58+
Returns the result from `lib.evalModules` directly.
5859
5960
To submit a module to this repo, this function must be able to evaluate it.
6061
@@ -66,6 +67,41 @@ in
6667
*/
6768
evalModule = module: wlib.evalModules { modules = toList module; };
6869

70+
/**
71+
```nix
72+
evalProgram = module: (wlib.evalModules { modules = lib.toList module; }).config.wrapper;
73+
```
74+
75+
Evaluates the module along with the core options, using `lib.evalModules`
76+
77+
Takes a module (or list of modules) as its argument.
78+
79+
Returns the final wrapped package from `eval_result.config.wrapper` directly.
80+
81+
Requires a `pkgs` to be set.
82+
83+
```nix
84+
home.packages = [
85+
(wlib.evalProgram [
86+
{ inherit pkgs; }
87+
({ pkgs, wlib, lib, ... }: {
88+
imports = [ wlib.modules.default ];
89+
package = pkgs.yourpackage;
90+
flags."--config" = ./idk;
91+
})
92+
])
93+
(wlib.evalProgram [
94+
{ inherit pkgs; }
95+
({ pkgs, wlib, lib, ... }: {
96+
imports = [ wlib.wrapperModules.tmux ];
97+
plugins = [ pkgs.tmuxPlugins.onedark-theme ];
98+
})
99+
])
100+
];
101+
```
102+
*/
103+
evalProgram = module: (wlib.evalModules { modules = toList module; }).config.wrapper;
104+
69105
/**
70106
Creates a reusable wrapper module.
71107
@@ -106,17 +142,17 @@ in
106142
/**
107143
Imports `wlib.modules.default` then evaluates the module. It then returns the wrapped package.
108144
109-
Use this when you want to quickly create a wrapped package directly. Requires a `pkgs` to be set.
145+
Use this when you want to quickly create a wrapped package directly, which does not have an existing module already.
146+
147+
Requires a `pkgs` to be set.
110148
111149
Equivalent to:
112150
113151
```nix
114-
wrapModule = (wlib.evalModule wlib.modules.default).config.wrap;
152+
wrapPackage = module: wlib.evalProgram ([ wlib.modules.default ] ++ toList module);
115153
```
116154
*/
117-
wrapPackage =
118-
module:
119-
(wlib.evalModules { modules = [ wlib.modules.default ] ++ (toList module); }).config.wrapper;
155+
wrapPackage = module: wlib.evalProgram ([ wlib.modules.default ] ++ toList module);
120156

121157
/**
122158
mkOutOfStoreSymlink :: pkgs -> path -> { out = ...; ... }

0 commit comments

Comments
 (0)