# It has a design constraint of requiring no flake inputs as we're already
# using npins.
{
  description =
    "Specialized set of Nix modules for generating and applying themes.";

  outputs = { ... }:
    let
      sources = import ./npins;
      systems = [ "x86_64-linux" "aarch64-linux" ];
      eachSystem = systems: f:
        let
          # Merge together the outputs for all systems.
          op = attrs: system:
            let
              ret = f system;
              op = attrs: key:
                attrs // {
                  ${key} = (attrs.${key} or { }) // { ${system} = ret.${key}; };
                };
            in builtins.foldl' op attrs (builtins.attrNames ret);
        in builtins.foldl' op { } (systems
          # add the current system if --impure is used
          ++ (if builtins ? currentSystem then
            if builtins.elem builtins.currentSystem systems then
              [ ]
            else
              [ builtins.currentSystem ]
          else
            [ ]));
    in eachSystem systems (system:
      let tests = branch: import ./tests { inherit branch system; };
      in {
        devShells.default = import ./shell.nix {
          pkgs = import sources.nixos-stable { inherit system; };
        };

        checks = {
          bahaghariLibStable = (tests "stable").libTestPkg;
          bahaghariLibUnstable = (tests "unstable").libTestPkg;
        };
      }) // import ./default.nix { };
}
