You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.5 KiB

#!/bin/sh
# the repo and it's passphrase
# This file should export the following (as a minimum)
# BORG_REPO
# BORG_PASSPHRASE
source "$(dirname "$(readlink -f "$0")")/borg.secret"
installed="/home/jonathan/pacman-installed"
# some helpers and error handling:
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
info "Starting backup"
# get a list of all explicitly installed packages to include in the backup
if type -p yay > /dev/null; then
yay -Qe > "$installed"
else
pacman -Qe > "$installed"
fi
# backup the directories
borg create \
--verbose --filter AME \
--list --stats --show-rc \
--compression zlib,5 \
--exclude '/home/*/.cache' \
--exclude '/home/*/.ccache' \
--exclude '/home/*/Downloads' \
--exclude '/home/*/.dotfiles' \
--exclude '/home/*/GitRepos' \
::'{hostname}-{now}' \
/home 2>&1
backup_exit=$?
rm "$installed"
info "Pruning repository"
# prune the repo
borg prune \
--list \
--prefix '{hostname}-' \
--show-rc \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 3 2>&1
prune_exit=$?
# use highest exit code as exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
if [ ${global_exit} -eq 1 ];
then
info "Backup and/or Prune finished with a warning"
fi
if [ ${global_exit} -gt 1 ];
then
info "Backup and/or Prune finished with an error"
fi
exit ${global_exit}