{ lib, config, ... }: let setup = import ../factories/mkserver.nix { inherit lib config; }; proxyReverseServices = [ "firefox-syncserver" "readeck" "microbin" "ryot" "bazarr" "shiori" "metube" "maloja" "vaultwarden" "mealie" "kavita" "multi-scrobbler" "nix-serve" "flame" "flameSecret" ]; proxyReverseFixServices = [ "audiobookshelf" "lidarr" "gitea" "prowlarr" "ombi" "radarr" "sonarr" "atticd" ]; proxyReversePrivateServices = [ "homepage" ]; mkServiceConfig = type: services: lib.listToAttrs (map (name: lib.nameValuePair name { inherit type; }) services); standardProxyServices = (mkServiceConfig "proxyReverse" proxyReverseServices) // (mkServiceConfig "proxyReverseFix" proxyReverseFixServices) // (mkServiceConfig "proxyReversePrivate" proxyReversePrivateServices); generateProxyConfig = serviceName: serviceConfig: let cfg = config.my.servers.${serviceName}; proxyFunc = if serviceConfig.type == "proxyReverse" then setup.proxyReverse else if serviceConfig.type == "proxyReverseFix" then setup.proxyReverseFix else if serviceConfig.type == "proxyReversePrivate" then setup.proxyReversePrivate else throw "Unknown proxy type: ${serviceConfig.type}"; in lib.nameValuePair cfg.host (lib.mkIf cfg.enableProxy (proxyFunc cfg)); in { config = lib.mkIf config.my.enableProxy { services.nginx.virtualHosts = lib.mapAttrs' generateProxyConfig standardProxyServices; }; }