{ lib, config, pkgs, ... }: let secrets = config.services.secrets.secrets; mail_config = config.mailserver; backupPrepareCommand = "${ (pkgs.writeShellScriptBin "backupPrepareCommand" '' systemctl start ${ lib.concatStringsSep " " (lib.forEach config.services.postgresqlBackup.databases (db: "postgresqlBackup-${db}")) } --wait '') }/bin/backupPrepareCommand"; in { environment.systemPackages = [ (pkgs.writeShellScriptBin "restic-hetzner-vm" '' env \ RESTIC_PASSWORD_FILE=${secrets.restic_password.path} \ $(cat ${secrets.restic_env.path}) \ ${pkgs.restic}/bin/restic $@ '') ]; services.restic.backups.hetzner-vm = { user = "root"; paths = [ "/var/lib/acme" # Quassel & Invidious "/var/backup/postgresql" "/home/quassel/.config/quassel-irc.org" # mail mail_config.vmail_config.directory mail_config.sieve_directory mail_config.dkim_directory "/var/lib/redis-rspamd" ]; # repository is overrided in environmentFile to contain auth # make sure to keep up to date when changing repository repository = "rest:https://storage-restic.owo.monster/HetznerVM"; passwordFile = "${secrets.restic_password.path}"; environmentFile = "${secrets.restic_env.path}"; pruneOpts = [ "--keep-last 20" ]; timerConfig = { OnBootSec = "1m"; OnCalendar = "daily"; }; inherit backupPrepareCommand; }; services.postgresqlBackup = { enable = true; backupAll = false; databases = ["postgres" "quassel" "roundcube"]; compression = "zstd"; }; }