From 802f7df32b5d5ff152b1c53dcf45c9705c8ac054 Mon Sep 17 00:00:00 2001
From: Adar Nimrod <nimrod@shore.co.il>
Date: Sun, 7 Nov 2021 22:06:36 +0200
Subject: [PATCH] NextCloud mount script.

- nc-mount to mount locally NextCloud folders (using rclone).
- Bash completion for nc-mount.
---
 .bash_completion.d/nc-mount | 24 +++++++++++++++++++++++
 Documents/bin/nc-mount      | 39 +++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+)
 create mode 100644 .bash_completion.d/nc-mount
 create mode 100755 Documents/bin/nc-mount

diff --git a/.bash_completion.d/nc-mount b/.bash_completion.d/nc-mount
new file mode 100644
index 0000000..3595544
--- /dev/null
+++ b/.bash_completion.d/nc-mount
@@ -0,0 +1,24 @@
+# vim: ft=bash
+
+_nc_mount () {
+    local cur prev words cword opts
+    _init_completion || return
+    opts='-a --all -h --help -l --list'
+
+    if [[ $cur == -* ]]
+    then
+        COMPREPLY=($(compgen -W "$opts" -- "$cur"))
+    else
+        local IFS=$'\n'
+        declare -a candidates
+        candidates=($(compgen -W "$(nc-mount -l)" -- "$cur"))
+        if [ ${#candidates[*]} -eq 0 ]
+        then
+            COMPREPLY=()
+        else
+            COMPREPLY=($(printf '%q\n' "${candidates[@]}"))
+        fi
+    fi
+}
+
+complete -F _nc_mount nc-mount
diff --git a/Documents/bin/nc-mount b/Documents/bin/nc-mount
new file mode 100755
index 0000000..8a71fcf
--- /dev/null
+++ b/Documents/bin/nc-mount
@@ -0,0 +1,39 @@
+#!/bin/sh
+set -eu
+
+command -v rclone >/dev/null || { echo 'rclone not found.' >&2; exit 1; }
+
+usage () {
+    echo "$0: [-a|--all] [-l|--list] [FOLDER]" >&2
+    exit 1
+}
+
+_mount () {
+    folder="$1"
+    mkfolder -p "$HOME/$folder"
+    rclone mount \
+        --allow-non-empty \
+        --daemon \
+        --gid "$(id -g)" \
+        --vfs-cache-mode full \
+        --uid "$(id -u)" \
+        "nextcloud:$folder" \
+        "$HOME/$folder"
+}
+
+[ "$#" -eq 1 ] || usage
+
+folders="$(rclone lsd nextcloud: | cut -c 44- | grep -vx 'System information')"
+
+case "$1" in
+    -h|--help) usage;;
+    -l|--list) echo "$folders";;
+    -a|--all) echo "$folders" | xargs -I % "$0" "%";;
+    *) if echo "$folders" | grep -qx "$1"
+    then
+        _mount "$1"
+    else
+        echo "Folder $1 not found in Nextcloud." >&2
+        exit 1
+    fi;;
+esac
-- 
GitLab