dotfiles/.local/bin/obsd
2026-08-15 19:39:06 +01:00

158 lines
2.5 KiB
Bash
Executable file

#!/usr/bin/env bash
# AUTHOR: Daesorin
# CREATED: 2026-08-08 16:59 +0100
set -Eeuo pipefail
# CONFIGURATION
LOCAL_VAULT="${HOME}/obsidian"
REMOTE_HOST="ish"
REMOTE_VAULT="~/obsidian"
RSYNC_FLAGS=(
-az
--delete
--human-readable
--itemize-changes
)
EXCLUDES=(
--exclude=".DS_Store"
--exclude=".Trash-*"
# Obsidian cache
--exclude=".obsidian/cache/"
--exclude=".obsidian/workspace*.json"
--exclude=".obsidian/workspace-mobile.json"
# Vim
--exclude="*.swp"
--exclude="*.swo"
# Temporary files
--exclude="*~"
)
# HELP
usage() {
cat <<EOF
obsd - Obsidian Vault Synchroniser
Usage:
obsd push
obsd pull
obsd status
obsd diff
obsd backup
obsd help
Commands
push Local -> iSH
pull iSH -> Local
status Dry-run using timestamps
diff Dry-run using checksums
backup Create compressed archive
EOF
}
# CHECKS
check_requirements() {
command -v rsync >/dev/null \
|| { echo "rsync not installed."; exit 1; }
command -v ssh >/dev/null \
|| { echo "ssh not installed."; exit 1; }
[[ -d "$LOCAL_VAULT" ]] \
|| { echo "Vault not found: $LOCAL_VAULT"; exit 1; }
}
# BACKUP
backup() {
local backup_dir="${HOME}/obsidian-backups"
mkdir -p "$backup_dir"
local stamp
stamp="$(date +%Y%m%d-%H%M%S)"
local archive="${backup_dir}/obsidian-${stamp}.tar.zst"
echo "Creating backup..."
tar \
--zstd \
-cf "$archive" \
-C "$HOME" \
obsidian
echo
echo "Backup created:"
echo " $archive"
}
# PUSH
push() {
rsync \
"${RSYNC_FLAGS[@]}" \
"${EXCLUDES[@]}" \
"${LOCAL_VAULT}/" \
"${REMOTE_HOST}:${REMOTE_VAULT}/"
}
# PULL
pull() {
rsync \
"${RSYNC_FLAGS[@]}" \
"${EXCLUDES[@]}" \
"${REMOTE_HOST}:${REMOTE_VAULT}/" \
"${LOCAL_VAULT}/"
}
# STATUS
status() {
rsync \
-azin \
"${EXCLUDES[@]}" \
"${LOCAL_VAULT}/" \
"${REMOTE_HOST}:${REMOTE_VAULT}/"
}
# DIFF
diff() {
rsync \
-azcin \
"${EXCLUDES[@]}" \
"${LOCAL_VAULT}/" \
"${REMOTE_HOST}:${REMOTE_VAULT}/"
}
# MAIN
check_requirements
case "${1:-help}" in
push)
push
;;
pull)
pull
;;
status)
status
;;
diff)
diff
;;
backup)
backup
;;
help|-h|--help)
usage
;;
*)
echo "Unknown command: ${1}"
echo
usage
exit 1
;;
esac