Skip to content

Commit d84b002

Browse files
authored
lib/modules: export class inside specialArgs (NixOS#395141)
2 parents 5997b99 + 6de9039 commit d84b002

File tree

7 files changed

+105
-1
lines changed

7 files changed

+105
-1
lines changed

lib/modules.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ let
257257
config
258258
specialArgs
259259
;
260+
_class = class;
260261
}
261262
// specialArgs
262263
);

lib/tests/modules.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -681,6 +681,18 @@ checkConfigOutput '^true$' config.viaConfig ./mkDefinition.nix
681681
checkConfigOutput '^true$' config.mkMerge ./mkDefinition.nix
682682
checkConfigOutput '^true$' config.mkForce ./mkDefinition.nix
683683

684+
# specialArgs._class
685+
checkConfigOutput '"nixos"' config.nixos.config.foo ./specialArgs-class.nix
686+
checkConfigOutput '"bar"' config.conditionalImportAsNixos.config.foo ./specialArgs-class.nix
687+
checkConfigError 'attribute .*bar.* not found' config.conditionalImportAsNixos.config.bar ./specialArgs-class.nix
688+
checkConfigError 'attribute .*foo.* not found' config.conditionalImportAsDarwin.config.foo ./specialArgs-class.nix
689+
checkConfigOutput '"foo"' config.conditionalImportAsDarwin.config.bar ./specialArgs-class.nix
690+
checkConfigOutput '"nixos"' config.sub.nixos.foo ./specialArgs-class.nix
691+
checkConfigOutput '"bar"' config.sub.conditionalImportAsNixos.foo ./specialArgs-class.nix
692+
checkConfigError 'attribute .*bar.* not found' config.sub.conditionalImportAsNixos.bar ./specialArgs-class.nix
693+
checkConfigError 'attribute .*foo.* not found' config.sub.conditionalImportAsDarwin.foo ./specialArgs-class.nix
694+
checkConfigOutput '"foo"' config.sub.conditionalImportAsDarwin.bar ./specialArgs-class.nix
695+
684696
cat <<EOF
685697
====== module tests ======
686698
$pass Pass
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{ _class, ... }:
2+
assert _class == "nixos";
3+
{ }

lib/tests/modules/class-check.nix

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
nixosOk = lib.mkOption {
66
type = lib.types.submoduleWith {
77
class = "nixos";
8-
modules = [ ];
8+
modules = [
9+
./assert-module-class-is-nixos.nix
10+
];
911
};
1012
};
1113
# Same but will have bad definition
@@ -45,6 +47,7 @@
4547
class = "nixos";
4648
modules = [
4749
./module-class-is-nixos.nix
50+
./assert-module-class-is-nixos.nix
4851
];
4952
};
5053

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{ _class, lib, ... }:
2+
{
3+
options = {
4+
foo = lib.mkOption {
5+
default = _class;
6+
};
7+
};
8+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{ _class, lib, ... }:
2+
let
3+
nixosModule =
4+
{ ... }:
5+
{
6+
options.foo = lib.mkOption {
7+
default = "bar";
8+
};
9+
};
10+
darwinModule =
11+
{ ... }:
12+
{
13+
options.bar = lib.mkOption {
14+
default = "foo";
15+
};
16+
};
17+
in
18+
{
19+
imports = [
20+
(lib.optionalAttrs (_class == "nixos") nixosModule)
21+
(lib.optionalAttrs (_class == "darwin") darwinModule)
22+
];
23+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
{ lib, ... }:
2+
{
3+
options = {
4+
sub = {
5+
nixos = lib.mkOption {
6+
type = lib.types.submoduleWith {
7+
class = "nixos";
8+
modules = [
9+
./expose-module-class.nix
10+
];
11+
};
12+
default = { };
13+
};
14+
15+
conditionalImportAsNixos = lib.mkOption {
16+
type = lib.types.submoduleWith {
17+
class = "nixos";
18+
modules = [
19+
./polymorphic-module.nix
20+
];
21+
};
22+
default = { };
23+
};
24+
25+
conditionalImportAsDarwin = lib.mkOption {
26+
type = lib.types.submoduleWith {
27+
class = "darwin";
28+
modules = [
29+
./polymorphic-module.nix
30+
];
31+
};
32+
default = { };
33+
};
34+
};
35+
};
36+
config = {
37+
_module.freeformType = lib.types.anything;
38+
39+
nixos = lib.evalModules {
40+
class = "nixos";
41+
modules = [ ./expose-module-class.nix ];
42+
};
43+
44+
conditionalImportAsNixos = lib.evalModules {
45+
class = "nixos";
46+
modules = [ ./polymorphic-module.nix ];
47+
};
48+
49+
conditionalImportAsDarwin = lib.evalModules {
50+
class = "darwin";
51+
modules = [ ./polymorphic-module.nix ];
52+
};
53+
};
54+
}

0 commit comments

Comments
 (0)