ambevar-dotfiles/.local/bin/homesync

126 lines
2.6 KiB
Plaintext
Raw Normal View History

2018-05-24 15:25:54 +02:00
#!/bin/sh
2019-01-23 00:07:13 +01:00
usage() {
2018-05-24 15:25:54 +02:00
cat <<EOF>&2
Usage: ${0##*/}
2019-01-23 00:07:13 +01:00
Sync home folder.
2018-05-24 15:25:54 +02:00
Options:
-p: Push upstream.
2019-01-23 00:07:13 +01:00
-d DEVICE: Device where to store ~/.gnupg
2018-05-24 15:25:54 +02:00
EOF
exit
2019-01-23 00:07:13 +01:00
}
2018-05-24 15:25:54 +02:00
OPT_UPDATE=false
2019-01-23 00:07:13 +01:00
OPT_DEVICE=""
while getopts ":hd:p" opt; do
case $opt in
h)
usage
exit ;;
p)
OPT_UPDATE=true ;;
d)
OPT_DEVICE="$OPTARG" ;;
\?)
usage
exit 1 ;;
esac
done
shift $(($OPTIND - 1))
2018-05-24 15:25:54 +02:00
PERSONAL_FOLDER="$HOME/personal"
[ -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"
2018-05-24 15:25:54 +02:00
}
message() {
echo -e "$YELLOW:: $@$NORMAL"
2018-05-24 15:25:54 +02:00
}
section Data index
DATAROOT=/media/$(ls -1 /media)
for i in "$DATAROOT"/*; do
mkdir -p ~/personal/index/
case "$i" in
*/locate.db|*/lost+found|*/Sync*)
continue ;;
*/games|*/videos)
for j in "$i"/*; do
folder=$(basename $(dirname "$j"))
mkdir -p ~/personal/index/"$folder"
dataindex "$j" > ~/personal/index/"$folder"/"$(basename "$j")".index
unset folder
done
continue ;;
*/personal_data)
for j in "$i"/*; do
mkdir -p ~/personal/index/personal_data
## TODO: Discard empty results?
dataindex "$j" | gpg --encrypt --recipient mail@ambrevar.xyz \
--output - > ~/personal/index/personal_data/"$(basename "$j")".index.gpg
done
continue ;;
*)
dataindex "$i" > ~/personal/index/"$(basename "$i")".index ;;
esac
done
2019-01-23 00:07:13 +01:00
if [ -n "$OPT_DEVICE" ]; then
section "GnuPG"
sudo cryptsetup open "$OPT_DEVICE" gpg_backup
sudo mount /dev/mapper/gpg_backup /mnt
tar -C ~ --exclude='*.conf' -cf /mnt/gnugpg-backup-$(date +%F).tar .gnupg
sudo umount /mnt
sudo cryptsetup close gpg_backup
fi
section "$HOME/.package-lists"
package-lister
2018-05-24 15:25:54 +02:00
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 ~/dotfiles ~/.password-store ~/personal ~/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
2018-05-24 15:25:54 +02:00
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