{ config, ... }: let hostname = config.networking.hostName; cfg = config.services.vaultwarden.config; secrets = config.sops.secrets; domain = "${hostname}.internal"; in { services.vaultwarden = { enable = true; configureNginx = false; dbBackend = "sqlite"; inherit domain; config = { SIGNUPS_ALLOWED = false; ROCKET_ADDRESS = "127.0.0.1"; ROCKET_PORT = 8222; ROCKET_LOG = "critical"; }; }; services.nginx.virtualHosts."vaultwarden" = { serverName = domain; forceSSL = true; listen = [ { addr = "[2301:db8:acad:a::1]"; # TODO: extract from topology instead of hardcoding port = 443; ssl = true; } ]; sslCertificateKey = secrets."wg-ca-key".path; sslCertificate = secrets."wg-ca-crt".path; locations."/" = { proxyPass = "http://127.0.0.1:${toString cfg.ROCKET_PORT}"; recommendedProxySettings = true; }; }; }