{ lib, config, inputs, ... }: let 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" "stash" "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 inputs.self.lib.proxyReverse else if serviceConfig.type == "proxyReverseFix" then inputs.self.lib.proxyReverseFix else if serviceConfig.type == "proxyReversePrivate" then inputs.self.lib.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; }; }