{ config, lib, ... }: let cfg = config.services.caddy; vw = { domain = config.services.vaultwarden.domain; port = config.services.vaultwarden.config.ROCKET_PORT; }; navidrome = { domain = "music.sorre.internal"; port = config.services.navidrome.settings.Port; }; in { services.caddy = { enable = true; virtualHosts = { "${vw.domain}" = { listenAddresses = [ "100.64.0.6" ]; extraConfig = '' tls {$CREDENTIALS_DIRECTORY}/sagittarius.crt {$CREDENTIALS_DIRECTORY}/sagittarius.key reverse_proxy :${toString vw.port} { header_up True-Client-IP {remote_host} header_up X-Real-IP {remote_host} } ''; }; "${navidrome.domain}" = { listenAddresses = [ "100.64.0.6" ]; extraConfig = '' tls {$CREDENTIALS_DIRECTORY}/sagittarius.crt {$CREDENTIALS_DIRECTORY}/sagittarius.key reverse_proxy :${toString navidrome.port} { header_up True-Client-IP {remote_host} header_up X-Real-IP {remote_host} flush_interval -1 } ''; }; }; }; systemd.services.caddy = lib.mkIf cfg.enable { preStart = '' echo "Credentials directory: $CREDENTIALS_DIRECTORY" >&2 if [ ! -d "$CREDENTIALS_DIRECTORY" ]; then echo "Credentials dir not found!" >&2 exit 1 fi ''; serviceConfig.LoadCredential = [ "sagittarius.crt:/var/secrets/certs/sagittarius.crt" "sagittarius.key:/var/secrets/certs/sagittarius.key" ]; }; }