Summary Files Commits Branches @commit @diff @stats
path: root / scripts / bin / rclone.sh
diff options
context:
space:
mode:
Commit375d11b33142e971a82f28ddb4cc7d386e3551cf (patch)
Author
 Syndamia <kamen@syndamia.com>
2026-11-01 17:50:07 +0200
Committer
 Syndamia <kamen@syndamia.com>
2026-11-01 17:50:07 +0200
Files85373ae415fcff7142ee1194594e8bb1e381176b /scripts/bin/rclone.sh
.files-375d11b33142e971a82f28ddb4cc7d386e3551cf.tar
.files-375d11b33142e971a82f28ddb4cc7d386e3551cf.tar.gz
.files-375d11b33142e971a82f28ddb4cc7d386e3551cf.zip
Parente41b78ee956a6adcfc07b3c453f70198214ca599 (diff)
feat!: Rework how .files are managed
1 files changed, 104 insertions, 0 deletions
-rwxr-xr-xscripts/bin/rclone.sh104
diff --git a/scripts/bin/rclone.sh b/scripts/bin/rclone.sh
new file mode 100755
index 0000000..c8e0e16
--- /dev/null
+++ b/scripts/bin/rclone.sh
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+: ${PREFIX:=$HOME/mnt} ${TITLE:=rclone helper} ${ICON=rclone-browser}
+FIELDS_BEFORE=1
+
+KDBX_MOUNTED="$PREFIX/FTP marduk.int kamen"
+: ${KDBX_REMOTE_DIR:="Secret"}
+: ${KDBX_LOCAL_DIR:='/mnt/Svalbard/Doc/Adulthood/Vault'}
+
+yad_ok() {
+ echo "$2" | yad --title="$TITLE" --window-icon="$ICON" --borders=10 --text-info \
+ --text="$1" \
+ --button="yad-ok:0" &
+ disown
+}
+
+# Run window
+if [ $# -eq 0 ]
+then
+ eval "yad --title='$TITLE' --window-icon='$ICON' --borders=10 --fixed --no-buttons --form \
+ --field='<span size=\"x-large\" weight=\"bold\">rclone mount</span>:LBL' '' \
+ $(rclone listremotes | awk -v ORS=' ' '
+ {
+ sub(/:$/,"");sub(/^[ \t\v]*/,"");sub(/[ \t\v]*$/,"")
+ print "--field=\"" $0 ":SW\" \"" (system("mount | grep \"" $0 "\" >/dev/null")==0?"TRUE":"FALSE") "\""
+ }') \
+ --changed-action='$0' \
+ --field='<span size=\"x-large\" weight=\"bold\">KDBX sync</span>:LBL' '' \
+ --field='Download KDBX:FBTN' '$0 kdbx download' \
+ --field='Upload KDBX:FBTN' '$0 kdbx upload' \
+ "
+# KDBX sync
+elif [ "$1" = 'kdbx' ]
+then
+ if ! mount | grep "$KDBX_MOUNTED" >/dev/null
+ then
+ yad_ok "Directory not mounted!" "$KDBX_MOUNTED"
+ exit 1
+ fi
+
+ if [ "$2" = 'download' ]
+ then
+ if [ ! -f "$KDBX_MOUNTED/$KDBX_REMOTE_DIR/hash_md5.txt" ]
+ then
+ yad_ok "Missing file!" "$KDBX_MOUNTED/$KDBX_REMOTE_DIR/hash_md5.txt"
+ exit 2
+ fi
+
+ yad --title="$TITLE" --window-icon="$ICON" --borders=10 \
+ --image=dialog-warning --text="Are you sure you want to <b>download</b> KDBX files?\nThis will overwrite <b>local</b> copies!" \
+ --button="yad-yes:0" --button="yad-no:1" || exit 0
+
+ cd "$KDBX_MOUNTED/$KDBX_REMOTE_DIR"
+
+ if ! md5sum -c ./hash_md5.txt >/dev/null 2>&1
+ then
+ yad_ok "Checksum check failed!" "$(md5sum -c --quiet ./hash_md5.txt)"
+ exit 3
+ fi
+
+ while read -r kdbx
+ do
+ kdbx_hash="$(echo "$kdbx" | cut -c-32)"
+ kdbx_path="$(echo "$kdbx" | cut -c35-)"
+
+ cp -f "$kdbx_path" "$KDBX_LOCAL_DIR/$kdbx_path"
+ done <"$KDBX_MOUNTED/$KDBX_REMOTE_DIR/hash_md5.txt"
+ else
+ yad --title="$TITLE" --window-icon="$ICON" --borders=10 \
+ --image=dialog-question --text="Are you sure you want to <b>upload</b> KDBX files?\nThis will overwrite <b>remote</b> copies!" \
+ --button="yad-yes:0" --button="yad-no:1" || exit 0
+
+ mkdir -p "$KDBX_MOUNTED/$KDBX_REMOTE_DIR"
+ cd "$KDBX_MOUNTED/$KDBX_REMOTE_DIR"
+
+ cp -f "$KDBX_LOCAL_DIR"/*.kdbx .
+ md5sum *.kdbx >hash_md5.txt
+ fi
+# Mount/unmount
+else
+ remote_info="$(rclone listremotes --long | awk -v FIELD="$1" -v OFFSET="$FIELDS_BEFORE" 'BEGIN{row=FIELD-OFFSET}NR==row{gsub(/:/,"");print;exit}')"
+
+ if [ -z "$remote_info" ]
+ then
+ yad_ok 'Invalid field data!' "$*"
+ exit 1
+ fi
+
+ remote="$(echo "$remote_info" | awk '{$NF="";sub(/^[ \t\v]*/,"");sub(/[ \t\v]$/,"");print}')"
+ remote_type="$(echo "$remote_info" | awk '{print toupper($NF)}')"
+
+ dir="$PREFIX/$remote_type $remote"
+ mkdir -p "$dir"
+
+ if [ 'FALSE' = "$2" ]
+ then
+ umount "$dir" >/dev/tty
+ elif mount | grep "$dir" >/dev/null
+ then
+ yad_ok 'Directory is already mounted!' "$dir"
+ else
+ rclone mount "$remote:/" "$dir" --daemon &>/dev/null
+ fi
+fi