summaryrefslogtreecommitdiff
path: root/lib.nix
diff options
context:
space:
mode:
Diffstat (limited to 'lib.nix')
-rw-r--r--lib.nix80
1 files changed, 80 insertions, 0 deletions
diff --git a/lib.nix b/lib.nix
new file mode 100644
index 0000000..f7f07f3
--- /dev/null
+++ b/lib.nix
@@ -0,0 +1,80 @@
+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
+ platforms' =
+ platforms
+ // {
+ fallback = lib.warn "an output in the job matrix is not supported!" {
+ os = null;
+ arch = null;
+ };
+ };
+
+ mkMatrixMulti = systems: output:
+ lib.flatten (
+ lib.mapAttrsToList (
+ system:
+ lib.mapAttrsToList (
+ attr: _: {
+ inherit (platforms'.${system} or platforms'.fallback) arch os;
+ attr = "${output}.${system}.${attr}";
+ }
+ )
+ )
+ (lib.getAttrs systems self.${output})
+ );
+
+ mkMatrixFlat = {
+ output,
+ suffix ? "",
+ }:
+ 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);
+}