{ config, ... }: let headscale = { domain = config.services.headscale.address; port = config.services.headscale.port; }; simpleProxies = { "sorre.xyz" = "tower.sorre.internal:7291"; "git.sorre.xyz" = "tower.sorre.internal:8721"; "idm.sorre.xyz" = "tower.sorre.internal:8443"; }; simpleProxyVirtualHosts = builtins.mapAttrs (domain: upstream: { extraConfig = '' reverse_proxy ${upstream} { headers_up True-Client-IP {remote_host} header_up X-Real-IP {remote_host} } ''; }) simpleProxies; in { services.caddy = { enable = true; virtualHosts = { "http://headscale.sorre.xyz".extraConfig = '' handle /generate_204 { respond 204 } handle * { redir https://{host}{uri} } ''; "headscale.sorre.xyz".extraConfig = '' reverse_proxy ${headscale.domain}:${toString headscale.port} { headers_up True-Client-IP {remote_host} header_up X-Real-IP {remote_host} } ''; } // simpleProxyVirtualHosts; }; }