aboutsummaryrefslogtreecommitdiff
path: root/hosts/tower/web/vaultwarden.nix
diff options
context:
space:
mode:
authorIsabella Bastaja <isabella@sorre.xyz>2026-08-21 21:00:53 +0200
committerIsabella Bastaja <isabella@sorre.xyz>2026-08-21 21:01:06 +0200
commitc5fde5dc02ac4d1ecb9ac672a76260b400ac11e1 (patch)
treedcc16f7bfac59b1c676061be6fbe64c36a15f00f /hosts/tower/web/vaultwarden.nix
parent5a8fef4820dd92d13e1378b798a363f16e763a40 (diff)
tower: add vaultwarden backup service
Diffstat (limited to 'hosts/tower/web/vaultwarden.nix')
-rw-r--r--hosts/tower/web/vaultwarden.nix30
1 files changed, 29 insertions, 1 deletions
diff --git a/hosts/tower/web/vaultwarden.nix b/hosts/tower/web/vaultwarden.nix
index a74494c..bf3c924 100644
--- a/hosts/tower/web/vaultwarden.nix
+++ b/hosts/tower/web/vaultwarden.nix
@@ -1,4 +1,4 @@
-{ lib, config, ... }:
+{ lib, config, pkgs, ... }:
let
cfg = config.services.vaultwarden;
domain = "vaultwarden.sorre.internal";
@@ -25,4 +25,32 @@ in
# "/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" ];
+ };
}