blob: bfa989a13e267b8dd2de0785a8812c151616fbd2 (
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#!/bin/sh
printhelp () {
printf "dmount: decrypt and mount drives and mount android phones\n"
printf "dmount [-pP] [-d X] [-u X] [-g X]\n"
printf "\t-p) mount with userid and groupid\n"
printf "\t-P) mount without userid and groupid\n"
printf "\t-d X) provide X as arg to dmenu\n"
printf "\t-u X) use X as userid\n"
printf "\t-g X) use X as groupid\n"
}
show () {
printf "%s\n" "$*"
notify-send "dmount" "$@"
}
error_msg () {
show "$@"
exit 1
}
while getopts "hpPugd:" o; do case "${o}" in
d) ARG=${ARG:+"$ARG "}"$OPTARG" ;;
p) USE_USER_ID="y" ;;
P) unset USE_USER_ID ;;
u) USERID="$OPTARG" ;;
g) GROUPID="$OPTARG" ;;
h)
printhelp
exit
;;
*)
printhelp
exit 1;;
esac done
IS_HFS=""
dmenu_lp () {
dmenu -l 15 -p "$@"
}
check_crypto () {
[ "$(sudo lsblk -oFSTYPE "$1" | wc -l)" -gt 2 ] && printf "y"
}
is_crypto () {
sudo lsblk -oFSTYPE "$1" | grep -q "crypto_LUKS" && printf "y"
}
unlock_crypto () {
NAME="$(dmenu_lp "Name" ${ARG:+"$ARG"} < /dev/null)"
PASSWORD="$(dmenu_lp "Password" -P ${ARG:+"$ARG"} < /dev/null)"
echo "$PASSWORD" | sudo cryptsetup open "$1" "$NAME" || FAILED="y"
unset PASSWORD
[ -n "$FAILED" ] && \
error_msg "Failed to decrypt partition $1!"
show "Decrypted $1 successfully."
}
get_available () { sudo lsblk -oPATH,SIZE,FSTYPE,MOUNTPOINT | tail -n+2 | while read -r i; do
[ -z "$(echo "$i" | awk '{print $3}')" ] && continue
[ -n "$(echo "$i" | awk '{print $4}')" ] && continue
#echo "${i%% *}"
#echo "$(lsblk -oMOUNTPOINT "${i%% *}" | tail -n+2 | grep -v -E '^\s*$')"
[ -n "$(echo "$i" | grep -q "crypto_LUKS" && check_crypto "${i%% *}")" ] \
&& continue
echo "$i"
done
}
getmount() { \
[ -z "$chosen" ] && exit 1
# shellcheck disable=SC2086
mp="$(find $1 2>/dev/null | dmenu ${ARG:+"$ARG"} -l 15 -p "Type in mount point.")" || error_msg "Canceled; no mount point chosen."
test -z "$mp" && \
exit 1
if [ ! -d "$mp" ]; then
mkdiryn=$(printf "No\\nYes" | dmenu ${ARG:+"$ARG"} -l 15 -p "$mp does not exist. Create it?") || \
exit 1
[ "$mkdiryn" = "Yes" ] && (mkdir -p "$mp" || sudo mkdir -p "$mp")
fi
}
mount_device () {
getmount "/mnt /media /mount /home -maxdepth 3 -type d -empty"
if [ -n "$USE_USER_ID" ]; then
if [ -n "$USERID" ] && [ -n "$GROUPID" ]; then
MOUNTPROPS="uid=$USERID,gid=$GROUPID"
elif [ -n "$USERID" ]; then
MOUNTPROPS="uid=$USERID"
elif [ -n "$GROUPID" ]; then
MOUNTPROPS="gid=$GROUPID"
else
MOUNTPROPS="$(grep "$(whoami)" /etc/passwd | sed 's/:/ /g' | awk '{print "uid="$3",gid="$4}')"
fi
fi
if [ -n "$IS_HFS" ]; then
if [ -z "$MOUNTPROPS" ]; then
MOUNTPROPS="force,rw"
else
MOUNTPROPS="${MOUNTPROPS},force,rw"
fi
fi
sudo mount ${IS_HFS:+"-t"} ${IS_HFS:+"hfsplus"} ${MOUNTPROPS:+"-o"} ${MOUNTPROPS:+"$MOUNTPROPS"} "$1" "$mp" && show "Mounted successfully\n"
}
DEVICE="$(get_available | dmenu_lp "Devices" ${ARG:+"$ARG"} )"
[ -z "$DEVICE" ] && exit 1
echo "$DEVICE" | grep -q "hfsplus" && IS_HFS="y"
chosen="${DEVICE%% *}"
if [ -n "$(is_crypto "$chosen")" ]; then
unlock_crypto "$chosen"
unset DEVICE chosen DMENU DEFARGS ARGS PASSARG
dmount
fi
mount_device "$chosen"
unset DEVICE chosen DMENU DEFARGS ARGS PASSARG
|