diff options
Diffstat (limited to 'lib.nix')
| -rw-r--r-- | lib.nix | 98 |
1 files changed, 45 insertions, 53 deletions
@@ -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} + ) + ); } |
