diff options
Diffstat (limited to 'config/borg-backup.nix')
-rw-r--r-- | config/borg-backup.nix | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/config/borg-backup.nix b/config/borg-backup.nix new file mode 100644 index 0000000..40c8fd9 --- /dev/null +++ b/config/borg-backup.nix @@ -0,0 +1,39 @@ +# To initialize repo +# borg init --encryption=keyfile /staging/backup +# Key file also stored in pass +{ config, lib, pkgs, ... }: +let + repo = /staging/backup +in +{ + systemd.services.borg-backup = { + description = "Run backups."; + path = with pkgs [ borgbackup ]; + startAt = "*-*-* 02:30:00"; + environment = { + BORG_KEYS_DIR = "/opt/secret/borg-backup-keys/"; + REPOSITORY = "/staging/backup"; + }; + serviceConfig = { + RemainAfterExit = true; + }; + script = '' + echo "Creating backup" + borg create -v --stats \ + --compression lzma,6 \ + $REPOSITORY::'storage-{now:%Y-%m-%d}' \ + /storage + + borg create -v --stats \ + --compression lzma,6 \ + $REPOSITORY::'{hostname}-{now:%Y-%m-%d}' \ + /opt /home + + echo "Pruning old versions" + borg prune -v --list $REPOSITORY --prefix 'storage-' \ + --keep-daily=7 --keep-weekly=4 --keep-monthly=6 + borg prune -v --list $REPOSITORY --prefix '{hostname}-' \ + --keep-daily=7 --keep-weekly=4 --keep-monthly=6 + ''; + }; +}; |