From b7254760ccedc8fc81a21b4e707c628556df1f6c Mon Sep 17 00:00:00 2001 From: seth Date: Tue, 7 Nov 2023 21:39:13 -0500 Subject: initial commit --- lib.nix | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 lib.nix (limited to 'lib.nix') 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); +} -- cgit v1.2.3