diff options
Diffstat (limited to 'modules/flake/workflowLib.nix')
| -rw-r--r-- | modules/flake/workflowLib.nix | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/modules/flake/workflowLib.nix b/modules/flake/workflowLib.nix new file mode 100644 index 0000000..d8cc4c4 --- /dev/null +++ b/modules/flake/workflowLib.nix @@ -0,0 +1,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); +} |
