{ description = "niss's silly extra packages"; outputs = all@{ self, nixpkgs }: let inherit (nixpkgs.lib) genAttrs optionalAttrs systems defaultTo; forAllSystems = genAttrs systems.flakeExposed; packagesInDir = dir: names: pkgs: let inherit (pkgs) callPackage; in genAttrs names (pkg: callPackage ./${dir}/${pkg}.nix {}); linuxPackages = packagesInDir "apps" [ "multi-ghc" "basilisk" "isabelle" "firefox-esr-alias" "inkscape-xwayland" ]; crossPlatformPackages = packagesInDir "scripts" [ "niss-misc" ]; fonts = packagesInDir "fonts" [ "constructium" "fairfax-hd" "kreative-square" "muller" "pragmatapro" "teranoptia" ]; haskellExes = pkgs: builtins.mapAttrs (name: pkg: pkgs.haskell.lib.justStaticExecutables pkg) (packagesInDir "haskell" [ "ips" ] pkgs.haskellPackages); makeApp = pkgs: name: exe: { inherit name; value = { type = "app"; program = "${pkgs.${name}}/bin/${defaultTo name exe}"; }; }; linuxApps = pkgs: builtins.listToAttrs [ (makeApp pkgs "basilisk" null) (makeApp pkgs "isabelle" null) (makeApp pkgs "firefox-esr-alias" "firefox-esr") (makeApp pkgs "inkscape-xwayland" "inkscape") ]; ifLinux64 = sys: optionalAttrs (sys == "x86_64-linux"); mkPackages = sys: pkgs: ifLinux64 sys (linuxPackages pkgs) // crossPlatformPackages pkgs // fonts pkgs // haskellExes pkgs; mkApps = sys: pkgs: ifLinux64 sys (linuxApps pkgs); in { packages = forAllSystems (sys: mkPackages sys nixpkgs.legacyPackages.${sys}); apps = forAllSystems (sys: mkApps sys nixpkgs.legacyPackages.${sys}); overlays = forAllSystems (sys: final: prev: mkPackages sys final); }; }