summaryrefslogtreecommitdiff
path: root/lib.nix
diff options
context:
space:
mode:
Diffstat (limited to 'lib.nix')
-rw-r--r--lib.nix98
1 files changed, 45 insertions, 53 deletions
diff --git a/lib.nix b/lib.nix
index f7f07f3..7d0c0ab 100644
--- a/lib.nix
+++ b/lib.nix
@@ -1,80 +1,72 @@
-lib: {
- self,
- platforms ? {
- "x86_64-linux" = {
+lib: {platforms ? null}: let
+ defaultPlatforms = {
+ x86_64-linux = {
os = "ubuntu-latest";
arch = "x64";
};
- "aarch64-linux" = {
+ aarch64-linux = {
os = "ubuntu-latest";
arch = "aarch64";
};
- "x86_64-darwin" = {
+ x86_64-darwin = {
os = "macos-latest";
arch = "x64";
};
- },
- ...
-}: let
+ };
+
platforms' =
- platforms
- // {
- fallback = lib.warn "an output in the job matrix is not supported!" {
- os = null;
- arch = null;
- };
- };
+ if platforms != null
+ then platforms
+ else defaultPlatforms;
+
+ fallback = lib.warn "an output in the job matrix is not supported!" {
+ os = null;
+ arch = null;
+ };
- mkMatrixMulti = systems: output:
+ platformNames = lib.attrNames platforms';
+
+ findSystem = deriv: deriv.system or deriv.pkgs.system or deriv.activationPackage.system;
+in {
+ mkMatrix = {
+ root,
+ output,
+ systems ? platformNames,
+ }:
lib.flatten (
lib.mapAttrsToList (
system:
lib.mapAttrsToList (
attr: _: {
- inherit (platforms'.${system} or platforms'.fallback) arch os;
+ inherit (platforms'.${system} or fallback) arch os;
attr = "${output}.${system}.${attr}";
}
)
)
- (lib.getAttrs systems self.${output})
+ (lib.filterAttrs (system: _: lib.elem system systems) root.${output})
);
- mkMatrixFlat = {
+ mkMatrix' = {
+ root,
output,
- suffix ? "",
+ systems ? platformNames,
}:
- lib.mapAttrsToList (
- attr: deriv: {
- inherit (platforms'.${deriv.pkgs.system} or platforms'.fallback) os arch;
- attr = "${output}.${attr}${suffix}";
- }
- )
- self.${output};
-in {
- inherit
- mkMatrixMulti
- mkMatrixFlat
- ;
-
- mkMatrix = {
- output,
- systems ? (builtins.attrNames platforms),
- }: let
- systemMatrix = mkMatrixFlat {
- inherit output;
- suffix = ".config.system.build.toplevel";
- };
- in
- {
- "nixosConfigurations" = systemMatrix;
- "darwinConfigurations" = systemMatrix;
- "homeConfigurations" = mkMatrixFlat {
- inherit output;
- suffix = ".activationPackage";
- };
- }
- .${output}
- or (mkMatrixMulti systems output);
+ lib.flatten (
+ lib.mapAttrsToList (
+ attr: deriv: let
+ system = findSystem deriv;
+ in {
+ inherit (platforms'.${system} or fallback) arch os;
+ attr = "${output}.${attr}";
+ }
+ )
+ (
+ lib.filterAttrs (
+ _: deriv: builtins.elem (findSystem deriv) systems
+ )
+ root.${output}
+ )
+ );
}