{ 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" ]; makeApp = name: exe: { type = "app"; program = "${pkgs.${name}}/bin/${defaultTo name exe}"; }; linuxApps = pkgs: [ (makeApp "basilisk" null) (makeApp "isabelle" null) (makeApp "firefox-esr-alias" "firefox-esr") (makeApp "inkscape-xwayland" "inkscape") ]; ifLinux64 = f: pkgs: optionalAttrs (pkgs.system == "x86_64-linux") (f pkgs); mkPackages = pkgs: ifLinux64 linuxPackages pkgs // crossPlatformPackages pkgs // fonts pkgs; mkApps = pkgs: ifLinux64 linuxApps pkgs; in { packages = forAllSystems (sys: mkPackages nixpkgs.legacyPackages.${sys}); apps = forAllSystems (sys: mkApps nixpkgs.legacyPackages.${sys}); overlays = forAllSystems (sys: final: prev: mkApps final); }; }