af4f814b0c
* Remove misleading character escape. Everything is in single quotes, so shell will escape it correctly without backslashes. Fixes #440. * Remove lsblk type restriction. * Make it possible to cancel with ESC in dmenu. Up to now if you pressed ESC to cancel the program would just continue with incorrect data.
66 lines
2.5 KiB
Bash
Executable file
66 lines
2.5 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# Gives a dmenu prompt to mount unmounted drives and Android phones. If
|
|
# they're in /etc/fstab, they'll be mounted automatically. Otherwise, you'll
|
|
# be prompted to give a mountpoint from already existsing directories. If you
|
|
# input a novel directory, it will prompt you to create that directory.
|
|
|
|
getmount() { \
|
|
[ -z "$chosen" ] && exit 1
|
|
# shellcheck disable=SC2086
|
|
mp="$(find $1 2>/dev/null | dmenu -i -p "Type in mount point.")" || exit 1
|
|
[ "$mp" = "" ] && exit 1
|
|
if [ ! -d "$mp" ]; then
|
|
mkdiryn=$(printf "No\\nYes" | dmenu -i -p "$mp does not exist. Create it?") || exit 1
|
|
[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo -A mkdir -p "$mp")
|
|
fi
|
|
}
|
|
|
|
mountusb() { \
|
|
chosen="$(echo "$usbdrives" | dmenu -i -p "Mount which drive?")" || exit 1
|
|
chosen="$(echo "$chosen" | awk '{print $1}')"
|
|
sudo -A mount "$chosen" 2>/dev/null && notify-send "💻 USB mounting" "$chosen mounted." && exit 0
|
|
alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}')
|
|
getmount "/mnt /media /mount /home -maxdepth 5 -type d $alreadymounted"
|
|
partitiontype="$(lsblk -no "fstype" "$chosen")"
|
|
case "$partitiontype" in
|
|
"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000;;
|
|
*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp";;
|
|
esac
|
|
notify-send "💻 USB mounting" "$chosen mounted to $mp."
|
|
}
|
|
|
|
mountandroid() { \
|
|
chosen="$(echo "$anddrives" | dmenu -i -p "Which Android device?")" || exit 1
|
|
chosen="$(echo "$chosen" | cut -d : -f 1)"
|
|
getmount "$HOME -maxdepth 3 -type d"
|
|
simple-mtpfs --device "$chosen" "$mp"
|
|
echo "OK" | dmenu -i -p "Tap Allow on your phone if it asks for permission and then press enter" || exit 1
|
|
simple-mtpfs --device "$chosen" "$mp"
|
|
notify-send "🤖 Android Mounting" "Android device mounted to $mp."
|
|
}
|
|
|
|
asktype() { \
|
|
choice="$(printf "USB\\nAndroid" | dmenu -i -p "Mount a USB drive or Android device?")" || exit 1
|
|
case $choice in
|
|
USB) mountusb ;;
|
|
Android) mountandroid ;;
|
|
esac
|
|
}
|
|
|
|
anddrives=$(simple-mtpfs -l 2>/dev/null)
|
|
usbdrives="$(lsblk -rpo "name,type,size,mountpoint" | awk '$4==""{printf "%s (%s)\n",$1,$3}')"
|
|
|
|
if [ -z "$usbdrives" ]; then
|
|
[ -z "$anddrives" ] && echo "No USB drive or Android device detected" && exit
|
|
echo "Android device(s) detected."
|
|
mountandroid
|
|
else
|
|
if [ -z "$anddrives" ]; then
|
|
echo "USB drive(s) detected."
|
|
mountusb
|
|
else
|
|
echo "Mountable USB drive(s) and Android device(s) detected."
|
|
asktype
|
|
fi
|
|
fi
|