#! /usr/bin/env dash NAME="aumo" error() { printf "\033[1;91m==> ERROR:\033[0m \033[1;93m%s\033[0m\n" "$*" >&2 } die() { error "$1" if [ -n "$2" ]; then exit "$2" else exit 1 fi } get_mounted_labels() { findmnt --output label --json | jq '.filesystems | map(.label) | sort | unique | map(select(. != null))' } get_unmounted_labels() { first=true find /dev/disk/by-label -printf "%P\n" | while read -r label; do if ! get_mounted_labels | jq 'join("\n")' --raw-output | grep "$label" --quiet; then if [ "$first" = "true" ]; then first=false else printf "|" fi printf "%s" "$label" fi done } unmounting() { disk_name="$(get_mounted_labels | jq 'join("|")' --join-output | rofi -sep "|" -dmenu -p "Select disk to unmount")" udisksctl unmount --block-device "/dev/disk/by-label/$disk_name" } mounting() { disk_name="$(get_unmounted_labels | rofi -sep "|" -dmenu -p "Select disk to mount")" udisksctl mount --block-device "/dev/disk/by-label/$disk_name" } case "$1" in "mount") mounting ;; "unmount" | "umount") unmounting ;; *) die "Usage: $NAME mount|unmount" ;; esac