#!/usr/bin/env fish set REMOTE "your-backup-ssh-server" # ip/host where to backup to set REMOTE_PATH "~/backup/current" # remote location where backup is mirrored set USER username # ssh user set KEY ~/.ssh/id_backup_key # ssh key set SSH_OPT # possible ssh options set LUKS_DEVICE "~/storage" # luks device or file to open set LUKS_NAME "luks_"(random) # generate a random name for the luks groups set LUKS_MOUNT "~/backup" # the mount point where the container is mounted to set RSYNC_IGNORE_FILE "~/.backup-ignore" # the file containing the blacklist # open luks container set_color -o green echo "Mounting luks container..." set_color normal ssh $SSH_OPT -t -i $KEY $USER@$REMOTE " if [ -d $REMOTE_PATH ] set_color -o green; echo \"backup already mounted!\" set_color normal exit end mkdir $LUKS_MOUNT read x sudo cryptsetup open --type luks $LUKS_DEVICE $LUKS_NAME sudo mount /dev/mapper/$LUKS_NAME $LUKS_MOUNT " if test "$argv" = '--browse' set_color -o green echo "LUKS mounted, connecting..." set_color normal ssh -i $KEY $USER@$REMOTE exit end # sync with rsync set_color -o green echo "Syncing filesystem..." set_color normal rsync --exclude-from=$RSYNC_IGNORE_FILE -rlptgozEP ~ $USER@$REMOTE:$REMOTE_PATH #TODO find more applicable options # unmount luks container set_color -o green echo "Syncing complete - unmounting luks container..." set_color normal ssh -t -i $KEY $USER@$REMOTE " sudo umount $LUKS_MOUNT sudo cryptsetup close --type luks $LUKS_NAME rmdir $LUKS_MOUNT "