Files
rofi-scripts/rofi/mount/mountusb
T
2023-02-21 14:33:17 +05:45

93 lines
4.1 KiB
Bash

#!/bin/sh
# merged and modified luke smith's mount and unmount script and imported to rofi
#S4NKALP
# ┌─┐┌─┐┌┐┌┌─┐┬┌─┐┬ ┬┬─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐
# │ │ ││││├┤ ││ ┬│ │├┬┘├─┤ │ ││ ││││└─┐
# └─┘└─┘┘└┘└ ┴└─┘└─┘┴└─┴ ┴ ┴ ┴└─┘┘└┘└─┘
# Rofi Configs
roficonfig=~/.config/rofi/mount/dmenu.rasi
rofiprompt=~/.config/rofi/mount/prompt.rasi
# Always mount every thing here or in it's subdirectories
mountdir=/mnt
# uncomment this line if you already have askpass setuped.
[ -z "$SUDO_ASKPASS" ] && export SUDO_ASKPASS=~/.config/rofi/mount/askpass
# ┌┬┐┌─┐┬ ┬┌┐┌┌┬┐ ┌─┐┌─┐┬─┐┬┌─┐┌┬┐
# ││││ ││ ││││ │ └─┐│ ├┬┘│├─┘ │
# ┴ ┴└─┘└─┘┘└┘ ┴ └─┘└─┘┴└─┴┴ ┴
mountable="$(lsblk -rpo "name,type,size,mountpoint" | grep 'part\|rom' | awk '$4==""{printf "%s (%s)\n",$1,$3}')"
getmount() {
[ -z "$chosen" ] && exit 1
mp="$(find $1 2>/dev/null | rofi -config $roficonfig -dmenu -i -fuzzy -hover-select -p "Type in mount point. or
Type folder name to create")" || exit 1
test -z "$mp" && exit 1
if [ ! -d "$mp" ]; then
mkdiryn=$(printf "Yes\\nNo" | rofi -config $rofiprompt -dmenu -fuzzy -i -hover-select -p "$mp does not exist. Create it? (in $mountdir)") || exit 1
[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mountdir/$mp" || sudo -A mkdir -p "$mountdir/$mp") && mp=$mountdir/$mp
fi
}
mountusb() { \
chosen="$(echo "$mountable" | rofi -config $rofiprompt -dmenu -i -fuzzy -hover-select -p "Mount which drive?")" || exit 1
chosen="$(echo "$chosen" | awk '{print $1}')"
sudo -A mount "$chosen" 2>/dev/null && printf "exit" | rofi -config $rofiprompt -dmenu -i -only-match -p "Mounted $chosen to $mp" && exit 0
alreadymounted=$(lsblk -nrpo "name,type,mountpoint" | awk '$3!~/\/boot|\/home$|SWAP/&&length($3)>1{printf "-not ( -path *%s -prune ) ",$3}')
getmount "$mountdir -type d $alreadymounted"
partitiontype="$(lsblk -no "fstype" "$chosen")"
case "$partitiontype" in
"vfat") sudo -A mount -t vfat "$chosen" "$mp" -o rw,umask=0000 && printf "exit" | rofi -config $rofiprompt -dmenu -i -only-match -p "Mounted $chosen to $mp" && exit 0
;;
"exfat") sudo -A mount "$chosen" "$mp" -o uid="$(id -u)",gid="$(id -g)" && printf "exit" | rofi -config $rofiprompt -dmenu -i -only-match -p "Mounted $chosen to $mp" && exit 0
;;
*) sudo -A mount "$chosen" "$mp"; user="$(whoami)"; ug="$(groups | awk '{print $1}')"; sudo -A chown "$user":"$ug" "$mp" && printf "exit" | rofi -config $rofiprompt -dmenu -i -only-match -p "Mounted $chosen to $mp" && exit 0
;;
esac
printf "exit" | rofi -config $rofiprompt -dmenu -i -only-match -p "Failed to Mount $chosen to $mp" && exit 0
}
# ┬ ┬┌┐┌┌┬┐┌─┐┬ ┬┌┐┌┌┬┐ ┌─┐┌─┐┬─┐┬┌─┐┌┬┐
# │ ││││││││ ││ ││││ │ └─┐│ ├┬┘│├─┘ │
# └─┘┘└┘┴ ┴└─┘└─┘┘└┘ ┴ └─┘└─┘┴└─┴┴ ┴
unmountable=$(lsblk -nrpo "name,type,size,mountpoint,label" | awk -F':' '{gsub(/ /,":")}$4!~/\/boot|\/efi|\/home$|SWAP/&&length($4)>1{printf "%s (%s) %s\n",$4,$3,$5}')
unmountusb() {
[ -z "$unmountable" ] && exit
chosen="$(echo "$unmountable" | rofi -config $rofiprompt -dmenu -fuzzy -hover-select -i -p "Unmount which drive?")" || exit 1
chosen="$(echo "$chosen" | awk '{print $1}')"
[ -z "$chosen" ] && exit
sudo -A umount "$chosen" && printf "exit" | rofi -config $rofiprompt -dmenu -i -only-match -p "Unmounted $chosen" && exit
}
# ┬─┐┌─┐┌─┐┬
# ├┬┘│ │├┤ │
# ┴└─└─┘└ ┴
chk=$(printf "Mount\nUnmount" | rofi -config $rofiprompt -dmenu -i -hover-select -p "USB/Drives" )
case $chk in
Unmount)
if [ -z "$unmountable" ]; then
echo "No USB drives to unmount." && exit
else
unmountusb
fi
;;
Mount)
if [ -z "$mountable" ]; then
notify-send "No USB drives detected" && exit
else
mountusb
fi
esac