{ lib, config, pkgs, ... }: let cfg = config.services.vaultwarden; domain = "vaultwarden.sorre.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; LOG_LEVEL = "debug"; }; }; systemd.services.vaultwarden = lib.mkIf cfg.enable { serviceConfig.EnvironmentFile = [ # For admin token. # Leave disabled unless you need the /admin page. # "/var/secrets/vaultwarden.env" ]; }; systemd.services.backup-vaultwarden = lib.mkIf cfg.enable { serviceConfig.Type = "oneshot"; description = "Back up vaultwarden data"; conflicts = [ "vaultwarden.service" ]; path = [ pkgs.gnutar pkgs.systemdMinimal ]; enableStrictShellChecks = true; script = '' #!/usr/bin/env bash set -euo pipefail [ ! -d /var/lib/backup/vaultwarden ] && mkdir -p /var/lib/backup/vaultwarden TIMESTAMP="$(date +%Y%m%d%H%M%S)" tar cvf "/var/lib/backup/vaultwarden/$TIMESTAMP.backup.tar" /var/lib/vaultwarden find /var/lib/backup/vaultwarden -type f -name '*.backup.tar' -print0 | sort --zero-terminated --reverse | tail --zero-terminated --lines=+6 | xargs --null --no-run-if-empty rm -- ''; postStop = "systemctl start vaultwarden.service"; }; systemd.timers.backup-vaultwarden = { description = "Back up vaultwarden every morning"; timerConfig.OnCalendar = "*-*-* 05:00:00"; wantedBy = [ "timers.target" ]; }; }