tangled
alpha
login
or
join now
oeiuwq.com
/
den
Modular, context-aware and aspect-oriented dendritic Nix configurations. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/
den.oeiuwq.com
configurations
den
dendritic
nix
aspect
oriented
7
fork
atom
overview
issues
4
pulls
pipelines
Compare changes
Choose any two refs to compare.
base:
theirs
noflake
main
cross
v0.7.0
v0.6.0
v0.5.0
v0.4.0
v0.3.0
v0.2.0
v0.1.0
compare:
theirs
noflake
main
cross
v0.7.0
v0.6.0
v0.5.0
v0.4.0
v0.3.0
v0.2.0
v0.1.0
go
+146
5 changed files
expand all
collapse all
unified
split
templates
examples
flake.lock
flake.nix
modules
_example
ci
cross-flake-parametric.nix
provider
flake.nix
modules
den.nix
+29
templates/examples/flake.lock
···
234
234
"type": "github"
235
235
}
236
236
},
237
237
+
"provider": {
238
238
+
"inputs": {
239
239
+
"den": [
240
240
+
"den"
241
241
+
],
242
242
+
"flake-aspects": [
243
243
+
"flake-aspects"
244
244
+
],
245
245
+
"flake-parts": [
246
246
+
"flake-parts"
247
247
+
],
248
248
+
"import-tree": [
249
249
+
"import-tree"
250
250
+
],
251
251
+
"nixpkgs": [
252
252
+
"nixpkgs"
253
253
+
]
254
254
+
},
255
255
+
"locked": {
256
256
+
"path": "./provider",
257
257
+
"type": "path"
258
258
+
},
259
259
+
"original": {
260
260
+
"path": "./provider",
261
261
+
"type": "path"
262
262
+
},
263
263
+
"parent": []
264
264
+
},
237
265
"root": {
238
266
"inputs": {
239
267
"darwin": "darwin",
···
251
279
"nixpkgs"
252
280
],
253
281
"nixpkgs-stable": "nixpkgs-stable",
282
282
+
"provider": "provider",
254
283
"systems": "systems"
255
284
}
256
285
},
+10
templates/examples/flake.nix
···
42
42
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
43
43
nixpkgs-lib.follows = "nixpkgs";
44
44
nixpkgs-stable.url = "github:nixos/nixpkgs/release-25.05";
45
45
+
provider = {
46
46
+
inputs = {
47
47
+
den.follows = "den";
48
48
+
flake-aspects.follows = "flake-aspects";
49
49
+
flake-parts.follows = "flake-parts";
50
50
+
import-tree.follows = "import-tree";
51
51
+
nixpkgs.follows = "nixpkgs";
52
52
+
};
53
53
+
url = "path:./provider";
54
54
+
};
45
55
systems.url = "github:nix-systems/default";
46
56
};
47
57
+67
templates/examples/modules/_example/ci/cross-flake-parametric.nix
···
1
1
+
{
2
2
+
inputs,
3
3
+
lib,
4
4
+
provider,
5
5
+
...
6
6
+
}:
7
7
+
let
8
8
+
providerModule.nixos.options.providerVars = lib.mkOption {
9
9
+
type = lib.types.attrsOf lib.types.str;
10
10
+
default = { };
11
11
+
};
12
12
+
in
13
13
+
{
14
14
+
flake-file.inputs.provider = {
15
15
+
url = "path:./provider";
16
16
+
inputs.den.follows = "den";
17
17
+
inputs.flake-aspects.follows = "flake-aspects";
18
18
+
inputs.flake-parts.follows = "flake-parts";
19
19
+
inputs.import-tree.follows = "import-tree";
20
20
+
inputs.nixpkgs.follows = "nixpkgs";
21
21
+
};
22
22
+
23
23
+
imports = [
24
24
+
(inputs.den.namespace "provider" [
25
25
+
true
26
26
+
inputs.provider
27
27
+
])
28
28
+
];
29
29
+
30
30
+
provider.tools._.dev._.editors = {
31
31
+
nixos.providerVars.LOCAL_EDITOR = "emacs";
32
32
+
};
33
33
+
34
34
+
den.aspects.rockhopper.includes = [
35
35
+
providerModule
36
36
+
provider.tools._.dev._.editors
37
37
+
provider.tools._.dev._.shells
38
38
+
];
39
39
+
40
40
+
perSystem =
41
41
+
{ checkCond, rockhopper, ... }:
42
42
+
let
43
43
+
vars = rockhopper.config.providerVars;
44
44
+
env = rockhopper.config.environment.variables;
45
45
+
in
46
46
+
{
47
47
+
checks.cross-flake-provider-editor = checkCond "provider editor var set" (
48
48
+
env.PROVIDER_EDITOR == "vim"
49
49
+
);
50
50
+
51
51
+
checks.cross-flake-provider-shell = checkCond "provider shell var set" (
52
52
+
env.PROVIDER_SHELL == "fish"
53
53
+
);
54
54
+
55
55
+
checks.cross-flake-local-editor = checkCond "local editor var set" (vars.LOCAL_EDITOR == "emacs");
56
56
+
57
57
+
checks.cross-flake-namespace-merged = checkCond "namespace merged from provider input" (
58
58
+
provider.tools._.dev._.editors == inputs.self.denful.provider.tools._.dev._.editors
59
59
+
&& provider.tools._.dev._.shells == inputs.self.denful.provider.tools._.dev._.shells
60
60
+
);
61
61
+
62
62
+
checks.cross-flake-input-denful = checkCond "input provider denful accessible" (
63
63
+
inputs.provider.denful.provider.tools._.dev._.editors.description
64
64
+
== "Editor configurations from provider flake"
65
65
+
);
66
66
+
};
67
67
+
}
+12
templates/examples/provider/flake.nix
···
1
1
+
{
2
2
+
outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules);
3
3
+
4
4
+
inputs = {
5
5
+
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
6
6
+
flake-parts.url = "github:hercules-ci/flake-parts";
7
7
+
flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs";
8
8
+
flake-aspects.url = "github:vic/flake-aspects";
9
9
+
import-tree.url = "github:vic/import-tree";
10
10
+
den.url = "github:vic/den";
11
11
+
};
12
12
+
}
+28
templates/examples/provider/modules/den.nix
···
1
1
+
{ inputs, ... }:
2
2
+
{
3
3
+
systems = [
4
4
+
"x86_64-linux"
5
5
+
"aarch64-darwin"
6
6
+
];
7
7
+
8
8
+
imports = [
9
9
+
inputs.den.flakeModule
10
10
+
(inputs.den.namespace "provider" true)
11
11
+
];
12
12
+
13
13
+
provider.tools._.dev._.editors = {
14
14
+
description = "Editor configurations from provider flake";
15
15
+
nixos.environment.variables.PROVIDER_EDITOR = "vim";
16
16
+
homeManager =
17
17
+
{ pkgs, ... }:
18
18
+
{
19
19
+
home.packages = [ pkgs.vim ];
20
20
+
};
21
21
+
};
22
22
+
23
23
+
provider.tools._.dev._.shells = {
24
24
+
description = "Shell configurations from provider flake";
25
25
+
nixos.environment.variables.PROVIDER_SHELL = "fish";
26
26
+
nixos.environment.systemPackages = [ ];
27
27
+
};
28
28
+
}