aboutsummaryrefslogtreecommitdiff
path: root/files/.config/nnn/plugins/kdeconnect
diff options
context:
space:
mode:
Diffstat (limited to 'files/.config/nnn/plugins/kdeconnect')
-rwxr-xr-xfiles/.config/nnn/plugins/kdeconnect66
1 files changed, 66 insertions, 0 deletions
diff --git a/files/.config/nnn/plugins/kdeconnect b/files/.config/nnn/plugins/kdeconnect
new file mode 100755
index 0000000..dea3c2d
--- /dev/null
+++ b/files/.config/nnn/plugins/kdeconnect
@@ -0,0 +1,66 @@
+#!/usr/bin/env sh
+
+# Description: Send files or folders to your Android device using kdeconnect-cli.
+# kdeconnect must be configured on the Android device and the PC.
+#
+# Usage:
+# - Hover over a file or a folder and call the plugin.
+# - Alternatively, select the files and folders you would like to send, and activate the plugin.
+#
+# Shell: POSIX compliant
+# Author: juacq97, raffaem, N-R-K
+
+# If you want system notification, put this equal to 1
+notify=0
+
+note() {
+ if [ $notify = 1 ]; then
+ notify-send -a "Kdeconnect" "$1"
+ else
+ echo "[Kdeconnect] $1"
+ fi
+}
+
+# kdeconnect doesn't cope with non-files
+filter_files() {
+ xargs -0 -I{} sh -c '
+ if [ -f "{}" ]; then
+ printf "%s\0" "{}";
+ else
+ printf "Error: not a regular file: %s\n" "{}" >&2;
+ fi;'
+}
+
+send() {
+ filter_files | xargs -0 -I{} kdeconnect-cli --name "$devname" --share {}
+ note "Files sent"
+}
+
+# Select paired device
+names=$(kdeconnect-cli --list-available --name-only 2>/dev/null)
+if [ -z "$names" ]; then
+ note "No devices paired and available"
+ exit
+fi
+
+ndevs=$(printf "%s" "$names" | awk 'END{print NR}')
+if [ "$ndevs" -eq 1 ]; then
+ devname="$names"
+else
+ printf "%s" "$names" | awk '{ print NR ". " $0 }'
+ printf "Pick a device: "
+ read -r pick
+ if [ -n "$pick" ] && [ "$pick" -eq "$pick" ]; then
+ devname=$(printf '%s' "$names" | awk "NR==$pick")
+ fi
+fi
+
+selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
+if [ -s "$selection" ]; then
+ send < "$selection"
+ [ -p "$NNN_PIPE" ] && printf "-" > "$NNN_PIPE" # clear selection
+elif [ -n "$1" ]; then
+ printf "%s" "$1" | send
+else
+ note "No selection and no hovered file"
+fi