fake.modules transposition for aspect-oriented Dendritic Nix. with cross-aspect dependencies. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/
dendrix.oeiuwq.com/Dendritic.html
dendritic
nix
aspect
oriented
1{
2 lib,
3 mkFlake,
4 evalMod,
5 fooOpt,
6 ...
7}:
8{
9
10 flake.tests."test resolve aspect-chain" =
11 let
12 flake = mkFlake {
13 flake.aspects =
14 { aspects, ... }:
15 {
16 aspectOne = {
17 name = "one";
18 includes = [ aspects.aspectOne.provides.dos ];
19 classOne.bar = [ "zzz" ];
20 provides.dos =
21 { aspect-chain, ... }:
22 {
23 name = "dos";
24 includes = [ aspects.aspectOne.provides.tres ];
25 classOne.bar = map (x: x.name) aspect-chain;
26 };
27
28 provides.tres =
29 { aspect-chain, ... }:
30 {
31 name = "tres";
32 classOne.bar = [ (lib.last aspect-chain).name ];
33 };
34 };
35 };
36 };
37 mod = {
38 imports = [
39 fooOpt
40 (flake.aspects.aspectOne.resolve { class = "classOne"; })
41 ];
42 };
43 expr = lib.sort (a: b: a < b) (evalMod "classOne" mod).bar;
44 expected = [
45 "dos"
46 "one"
47 "zzz"
48 ];
49 in
50 {
51 inherit expr expected;
52 };
53}