93 lines
4.1 KiB
Bash
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
|
|
|