{ pkgs, inputs, ... }: { security.acme = { acceptTerms = true; defaults.email = "acme@zerforschen.plus"; }; security.pam.services.nginx.setEnvironment = false; systemd.services.nginx.serviceConfig = { SupplementaryGroups = [ "shadow" ]; }; services.nginx = { enable = true; additionalModules = [ pkgs.nginxModules.pam ]; recommendedProxySettings = true; recommendedTlsSettings = true; recommendedGzipSettings = true; recommendedOptimisation = true; virtualHosts = let servicesDomain = "services.zerforschen.plus"; mkServiceConfig = { host, port }: { addSSL = true; enableACME = true; locations."/" = { proxyPass = "http://${host}:${toString port}/"; extraConfig = '' # bind to tailscale ip proxy_bind 100.88.118.60; # pam auth limit_except OPTIONS { auth_pam "Password Required"; auth_pam_service_name "nginx"; } ''; }; }; pc2 = "vinzenz-pc2.donkey-pentatonic.ts.net"; in { "code.${servicesDomain}" = lib.mkMerge [ (mkServiceConfig { host = pc2; port = 8542; }) { locations."/".proxyWebsockets = true; } ]; "view.${servicesDomain}" = mkServiceConfig { host = pc2; port = 1313; }; "zerforschen.plus" = { addSSL = true; enableACME = true; root = inputs.zerforschen-plus.packages."${pkgs.system}".zerforschen-plus-content; }; }; }; networking.firewall.allowedTCPPorts = [ 80 443 ]; }