#!/bin/sh

# Setting this so the repo does not need to be given on the command line:
BORG_REPO=ssh://flyingscorpio@2px.info:22/~/"$(hostname)".borg
export BORG_REPO

export BORG_PASSPHRASE='ribosome66'

# 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"

# Backup the most important directories into an archive named after
# the machine this script is currently running on:
borg create                     	 \
  --verbose                     	 \
  --filter AME                  	 \
  --list                        	 \
  --stats                       	 \
  --show-rc                     	 \
  --compression lz4             	 \
  --exclude-caches              	 \
  --exclude '/home/*/.*/*'  	 	 \
  --exclude '/home/*/.*'  	 	 \
  --exclude '/home/*/builds/*'    	 \
  --exclude '/home/*/github_dotfiles/*'  \
  --exclude '/home/*/github_misc/*'  	 \
  --exclude '/home/*/Keepass/*' 	 \
  --exclude '/home/*/Lessons/*' 	 \
  --exclude '/home/*/Music/*'	 	 \
  --exclude '/home/*/PersonnalScripts/*' \
  --exclude '/home/*/RootMe/*'	 	 \
  --exclude '/home/*/SetupCockpit/*'	 \
  --exclude '/home/*/SRC/*'	 	 \
  --exclude '/home/*/VirtualBox VMs/*'	 \
  --exclude '/home/*/Videos/*'	 	 \
  --exclude '/var/cache/*'      	 \
  --exclude '/var/log/*'      	 	 \
  --exclude '/var/tmp/*'        	 \
                                	 \
  ::'{hostname}-{now}'          	 \
  /etc                          	 \
  /home                         	 \
  /root                         	 \
  /var                          	 \

backup_exit=$?

info "Pruning repository"

# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
# archives of THIS machine. The '{hostname}-' prefix is very important to
# limit prune's operation to this machine's archives and not apply to
# other machines' archives also:
borg prune                      \
  --list                        \
  --prefix '{hostname}-'        \
  --show-rc                     \
  --keep-daily    7             \
  --keep-weekly   4             \
  --keep-monthly  6             \

prune_exit=$?

# Use highest exit code as global exit code
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))

if [ ${global_exit} -eq 0 ]; then
  info "Backup and Prune finished succesfully"
elif [ ${global_exit} -eq 1 ]; then
  info "Backup and/or Prune finished with warnings"
else
  info "Backup and/or Prune finished with errors"
fi

exit ${global_exit}