.local/bin/homesync: Delete since it's superseded by ambrevar/storage.
parent
a0821b0fca
commit
3fa99afa57
|
@ -1,154 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
cat <<EOF>&2
|
|
||||||
Usage: ${0##*/}
|
|
||||||
|
|
||||||
Sync home folder.
|
|
||||||
Data is indexed to \$PERSONAL/index.
|
|
||||||
|
|
||||||
The '~/.gnupg' folder can be backup up to a LUKS encrypted device.
|
|
||||||
|
|
||||||
Options:
|
|
||||||
|
|
||||||
-d PATH: where the data is looked up for indexing.
|
|
||||||
-g DEVICE: Device where to sync ~/.gnupg.
|
|
||||||
-p: Push upstream.
|
|
||||||
|
|
||||||
EOF
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
|
|
||||||
OPT_UPDATE=false
|
|
||||||
OPT_DEVICE=""
|
|
||||||
OPT_DATAROOT=$(findmnt -n --fstab --output TARGET | grep ^/media/)
|
|
||||||
[ -z "$OPT_DATAROOT" ] && OPT_DATAROOT=$(findmnt -n --list --output TARGET | grep ^/media/)
|
|
||||||
while getopts ":hd:g:p" opt; do
|
|
||||||
case $opt in
|
|
||||||
h)
|
|
||||||
usage
|
|
||||||
exit ;;
|
|
||||||
d)
|
|
||||||
OPT_DATAROOT="$OPTARG" ;;
|
|
||||||
p)
|
|
||||||
OPT_UPDATE=true ;;
|
|
||||||
g)
|
|
||||||
OPT_DEVICE="$OPTARG" ;;
|
|
||||||
\?)
|
|
||||||
usage
|
|
||||||
exit 1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
shift $(($OPTIND - 1))
|
|
||||||
|
|
||||||
[ -z "$PERSONAL" ] && echo >&2 'Set $PERSONAL to project directory.' && exit 1
|
|
||||||
[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"
|
|
||||||
[ -z "$XDG_DATA_HOME" ] && XDG_DATA_HOME="$HOME/.local/share"
|
|
||||||
|
|
||||||
RED='\033[0;31m\033[1m'
|
|
||||||
GREEN='\033[0;32m\033[1m'
|
|
||||||
YELLOW='\033[0;33m\033[1m'
|
|
||||||
BOLD='\033[0m\033[1m'
|
|
||||||
NORMAL='\033[0m'
|
|
||||||
|
|
||||||
section() {
|
|
||||||
echo -e "$GREEN==> $@$NORMAL"
|
|
||||||
}
|
|
||||||
message() {
|
|
||||||
echo -e "$YELLOW:: $@$NORMAL"
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -n "$OPT_DATAROOT" ]; then
|
|
||||||
section Data index
|
|
||||||
for i in "$OPT_DATAROOT"/*; do
|
|
||||||
mkdir -p "$PERSONAL"/index/
|
|
||||||
case "$i" in
|
|
||||||
*/locate.db|*/lost+found|*/Sync*)
|
|
||||||
continue ;;
|
|
||||||
*/public)
|
|
||||||
for j in "$i"/*; do
|
|
||||||
case "$j" in
|
|
||||||
*/games|*/videos)
|
|
||||||
for k in "$j"/*; do
|
|
||||||
folder=$(basename $(dirname "$k"))
|
|
||||||
mkdir -p "$PERSONAL"/index/"$folder"
|
|
||||||
dataindex "$k" > "$PERSONAL"/index/"$folder"/"$(basename "$k")".index
|
|
||||||
unset folder
|
|
||||||
done ;;
|
|
||||||
*)
|
|
||||||
dataindex "$j" > "$PERSONAL"/index/"$(basename "$j")".index ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
continue ;;
|
|
||||||
*/private)
|
|
||||||
for j in "$i"/*; do
|
|
||||||
mkdir -p "$PERSONAL"/index/private
|
|
||||||
[ -e "$j"/.encfs*.xml ] && continue
|
|
||||||
dataindex "$j" | gpg --encrypt --recipient mail@ambrevar.xyz \
|
|
||||||
--output - > "$PERSONAL"/index/private/"$(basename "$j")".index.gpg
|
|
||||||
done
|
|
||||||
continue ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$OPT_DEVICE" ]; then
|
|
||||||
section "GnuPG"
|
|
||||||
sudo cryptsetup open "$OPT_DEVICE" gpg_backup
|
|
||||||
MOUNT_POINT=/mnt
|
|
||||||
# MOUNT_POINT=/media/ambrevar/gpg_backup
|
|
||||||
sudo mount -o compress=zstd /dev/mapper/gpg_backup "$MOUNT_POINT"
|
|
||||||
gpg --import "$MOUNT_POINT"/public/.gnupg/pubring.gpg
|
|
||||||
sudo btrfs subvolume snapshot -r "$MOUNT_POINT"/public "$MOUNT_POINT"/.snapshots/public.$(date +%F_%R:%S) && \
|
|
||||||
rm -rfv "$MOUNT_POINT"/public/.gnupg && \
|
|
||||||
cp -av ~/.gnupg "$MOUNT_POINT"/public/
|
|
||||||
sudo umount "$MOUNT_POINT"
|
|
||||||
sudo cryptsetup close gpg_backup
|
|
||||||
unset MOUNT_POINT
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -e ~/.cache/mail/.notmuch ]; then
|
|
||||||
section "Notmuch tags"
|
|
||||||
notmuch restore --accumulate --input="$PERSONAL"/mail/notmuch.dump
|
|
||||||
emacs --quick --batch --load=$HOME/.emacs.d/lisp/init-notmuch-sync.el \
|
|
||||||
-f notmuch-dump-important-tags
|
|
||||||
fi
|
|
||||||
|
|
||||||
for i in "$PERSONAL"/games/stowed-saves/*; do
|
|
||||||
section "Stowing '$i'"
|
|
||||||
stow -t ~ -d "$(dirname "$i")" "$(basename "$i")"
|
|
||||||
done
|
|
||||||
|
|
||||||
project_status() {
|
|
||||||
local path=$1
|
|
||||||
local title=$2
|
|
||||||
local body=$3
|
|
||||||
|
|
||||||
[ -z "$body" ] && return
|
|
||||||
|
|
||||||
if $CHANGED; then
|
|
||||||
section "$path"
|
|
||||||
CHANGED=false
|
|
||||||
fi
|
|
||||||
message "$title"
|
|
||||||
echo "$body"
|
|
||||||
}
|
|
||||||
|
|
||||||
for i in ~/.password-store ~/common-lisp/* ~/projects/* ~/.local/share/emacs/site-lisp/* "$@"; do
|
|
||||||
[ ! -d "$i/.git" ] && continue
|
|
||||||
CHANGED=true
|
|
||||||
push=$(git -C "$i" rev-parse --abbrev-ref --symbolic-full-name @{push} 2>&1)
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
unmerged=$(git -C "$i" log --oneline "$push"..)
|
|
||||||
project_status "$i" "Unpushed commits" "$unmerged"
|
|
||||||
else
|
|
||||||
project_status "$i" "Unpushed commits" "No 'push' remote"
|
|
||||||
fi
|
|
||||||
project_status "$i" "Unstaged files" "$(git -C "$i" diff --name-only)"
|
|
||||||
project_status "$i" "Staged files" "$(git -C "$i" diff --name-only --cached)"
|
|
||||||
if $OPT_UPDATE && [ -n "$unmerged" ]; then
|
|
||||||
message "Pushing"
|
|
||||||
git -C "$i" push
|
|
||||||
fi
|
|
||||||
done
|
|
Loading…
Reference in New Issue