diff options
Diffstat (limited to 'config')
| -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   +    ''; +  }; +};  | 
