dotfiles/.local/bin/dmnt

69 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env sh
# Dmenu to mount/unmount partitions.
ScriptName=${0##*/}
Version=1.0.0
# Set menu options:
MenuMount='1. Mount a partition.'
MenuUnmount='2. Unmount a partition.'
ChosenMenu=$(printf '%s\n%s' \
"$MenuMount" "$MenuUnmount" \
| dmenu -i -l 10 -p "$ScriptName:")
# Mount a partition:
if [ "$ChosenMenu" = "$MenuMount" ]; then
Mountable=$(lsblk -lp \
| grep "part $" \
| awk '{print $1, "(" $4 ")"}')
[ -z "$Mountable" ] && exit 1
Chosen=$(printf '%s' "$Mountable" \
| dmenu -i -l 10 -p 'Mount which drive?' \
| awk '{print $1}')
[ -z "$Chosen" ] && exit 1
# Try to mount directly based on fstab:
sudo mount "$Chosen" && exit 0
# Otherwise ask for directory.
### Implement a way to exclude already mounted locations.
Directories=$(find /mnt -maxdepth 1 -type d 2>/dev/null)
MountPoint=$(printf '%s' "$Directories" \
| dmenu -i -l 10 -p 'Type in mount point:')
[ -z "$MountPoint" ] && exit 1
if [ ! -d "$MountPoint" ]; then
mkdirprompt=$(printf 'No\\nYes' \
| dmenu -i -p "$MountPoint does not exist. Create it?")
[ "$mkdirprompt" = 'Yes' ] && sudo mkdir -p "$MountPoint"
fi
sudo mount "$Chosen" "$MountPoint"
# Unmount a partition:
elif [ "$ChosenMenu" = "$MenuUnmount" ]; then
ExclusionRegex='\(/boot\|/home\|/\|/backup\|/backup/extra\)$'
Drives=$(lsblk -lp \
| grep "part /" \
| grep -v "$ExclusionRegex" \
| awk '{print $1, "(" $4 ")", "on", $7}')
[ -z "$Drives" ] && exit 1
Chosen=$(printf '%s' "$Drives" \
| dmenu -i -l 10 -p 'Unmount which drive?' \
| awk '{print $1}')
[ -z "$Chosen" ] && exit 1
sudo umount "$Chosen"
elif [ -z "$ChosenMenu" ]; then
exit 1
else
printf 'ERROR: invalid selection.\n'
exit 1
fi