{ config, pkgs, ... }: let serviceName = "backup-postgres"; in { environment.systemPackages = [ pkgs.restic ]; systemd.timers."${serviceName}" = { wantedBy = [ "timers.target" ]; timerConfig = { OnBootSec = "10m"; OnUnitActiveSec = "10m"; Unit = "${serviceName}.service"; }; }; systemd.services."${serviceName}"= { script = '' set -euo pipefail cd /var/lib/hexname/postgres ${config.services.postgresql.package}/bin/pg_dumpall \ --exclude-database=roundcube \ --exclude-database=template0 \ --exclude-database=template1 \ --exclude-database=postgres \ --clean \ --file ./postgres.out ''; wants = [ "restic-backups-postgres.service" ]; serviceConfig = { Type = "oneshot"; User = "postgres"; Group = "postgres"; RemainAfterExit = true; # Don't start the service on every rebuild }; }; # Overwrite the restic backup service so that it's triggered after `pg_dump` systemd.services.restic-backups-postgres = { after = [ "backup-postgres.service" ]; # requires = [ "backup-postgres.service" ]; }; }