{ systemdMount, borgArchiveFolder, keepWithin? "14d", keepWeekly? "4", keepMonthly? "6", keepYearly? "-1", }: let pkgs = import{}; in { systemd = { services.backup = { description = "Backup of all user data and system configuration with BorgBackup"; serviceConfig.Type = "oneshot"; path = with pkgs; [ bash borgbackup ]; script = '' #!/usr/bin/env bash set -euo pipefail IFS=$'\n\t' systemctl start ${systemdMount} export BORG_REPO=${borgArchiveFolder} \ BORG_BASE_DIR=${borgArchiveFolder}/borg-base-dir echo "Backup started at `date`" borg create --exclude /var/backup \ --exclude /var/tmp \ --exclude /var/cache \ $BORG_REPO::{hostname}-{now} \ /etc \ /home \ /root \ /var sync echo "Backup finished at `date`" echo "Backup prune started at `date`" borg prune --prefix '{hostname}-' \ --keep-within ${keepWithin} \ --keep-weekly ${keepWeekly} \ --keep-monthly ${keepMonthly} \ --keep-yearly ${keepYearly} sync echo "Backup prune finished at `date`" systemctl stop ${systemdMount} ''; }; timers.backup = { description = "Backup Schedule"; timerConfig = { OnCalendar = "13:37"; Persistent = "true"; }; wantedBy = [ "timers.target" ]; }; }; }