blob: d8cc4c429f55bd9bf9587b154fdda36eb78e0b37 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
lib: {
self,
platforms ? {
"x86_64-linux" = {
os = "ubuntu-latest";
arch = "x64";
};
"aarch64-linux" = {
os = "ubuntu-latest";
arch = "aarch64";
};
"x86_64-darwin" = {
os = "macos-latest";
arch = "x64";
};
},
...
}: let
inherit
(lib)
flatten
getAttrs
mapAttrsToList
warn
;
platforms' =
platforms
// {
fallback = warn "an output in the job matrix is not supported!" {
os = null;
arch = null;
};
};
mkMatrixMulti = systems: output:
flatten (
mapAttrsToList (
system:
mapAttrsToList (
attr: _: {
inherit (platforms'.${system} or platforms'.fallback) arch os;
attr = "${output}.${system}.${attr}";
}
)
)
(getAttrs systems self.${output})
);
mkMatrixFlat = {
output,
suffix ? "",
}:
mapAttrsToList (
attr: deriv: {
inherit (platforms'.${deriv.pkgs.system} or platforms'.fallback) os arch;
attr = "${output}.${attr}${suffix}";
}
)
self.${output};
mkMatrixSystem = output:
mkMatrixFlat {
inherit output;
suffix = ".config.system.build.toplevel";
};
mkMatrixUser = mkMatrixFlat {
output = "homeConfigurations";
suffix = ".activationPackage";
};
in {
inherit
mkMatrixMulti
mkMatrixFlat
mkMatrixSystem
mkMatrixUser
;
platforms = platforms';
mkMatrix = {
output,
systems ? (builtins.attrNames platforms),
}:
{
"nixosConfigurations" = mkMatrixSystem output;
"darwinConfigurations" = mkMatrixSystem output;
"homeConfigurations" = mkMatrixUser;
}
.${output}
or (mkMatrixMulti systems output);
}
|