blob: 8c69aab8e3d8a2dbd86759e77364c001276d2fac (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#!/bin/sh
export UNMOUNT_BLACKLIST="luksdev nvme0n1p1"
export PINENTRY="pinentry-dmenu"
prompt_pin() {
printf "SETPROMPT $1\nGETPIN\n" | $PINENTRY | grep '^D' | sed 's/^D //g'
}
disk_dialog_entry() {
lsblk -r -o NAME,FSTYPE,MOUNTPOINT,LABEL | column -s ' ' -t | grep "$1"
}
luks_map() {
for map in $(sudo dmsetup ls | awk '{ print $1 }'); do
echo $map $(sudo cryptsetup status "$map" | grep "device:" | awk '{ print $2 }')
done
}
luks_regex() {
luks_map | awk '{ print $2 }' | sed -E 's/\/dev\/(.*)/\1/g' | sed -z 's/\n/\\|/g' | sed -e 's/\\|$/\n/g'
}
list_mountable() {
lsblk -r -o NAME,FSTYPE,MOUNTPOINTS | grep -E '^[^ ]+\s+[^ ]+\s*$' | sed -e '/\[SWAP\]/d' | sed -e "/$(luks_regex)/d" | awk '{ print $1 }'
}
list_unmountable() {
lsblk -r -o NAME,FSTYPE,MOUNTPOINT | sed -e '/NAME FSTYPE MOUNTPOINT/d' | grep -E '^[^ ]+\s+[^ ]+\s+[^ ]+$' | awk '{ print $1 }'
}
main_dialog() {
for d in $(list_unmountable); do
[ -z "$(echo $UNMOUNT_BLACKLIST | grep "$d")" ] && echo "⏏ $(disk_dialog_entry $d)"
done
for d in $(list_mountable); do
echo " $(disk_dialog_entry $d)"
done
}
select=$(main_dialog | dmenu)
[ -z "$select" ] && exit
if [ "$(echo $select | awk '{ print $1 }')" = "⏏" ]; then
mountpoint=$(echo "$select" | awk '{ print $4 }')
disk=$(echo "$select" | awk '{ print $2 }')
sync
sudo umount "$mountpoint"
rmdir "$mountpoint"
if [ -n "$(luks_map | grep "$disk")" ]; then
sudo cryptsetup close "$disk"
fi
notify-send "Mount Manager" "$disk unmounted"
else
disk=$(echo "$select" | awk '{ print $1 }')
device_path="/dev/$disk"
fstype=$(echo "$select" | awk '{ print $2 }')
if [ "$fstype" = "crypto_LUKS" ]; then
prompt_pin "Passphrase to decrypt $disk" | sudo cryptsetup open "$device_path" "luks$disk" || exit
new_disk="luks$disk"
disk="$new_disk"
device_path="/dev/mapper/$disk"
fi
mountpoint="/mnt/$disk"
mkdir "$mountpoint"
sudo mount "$device_path" "$mountpoint"
notify-send "Mount Manager" "$disk mounted"
fi
|