remove vifm
[dotfiles_afify.git] / .scripts / mount_drives
blobfcb8dd2e3bb0d83590be68824c0ebdf92b0b732e
1 #!/bin/sh
3 #==============================================================================
4 # Name : mount_drives
5 # GitHub : Afify
6 # Copyright : MIT
7 # Version : 0.1
8 # Description : Mount drives using dmenu
9 # Depencency : simple-mtpfs, cryptsetup
11 # sudo dmsetup ls (low level logical volume managment)
12 # sudo cryptsetup status /dev/mapper/volume
13 # mount nas sudo mount -t nfs <IP Address>:/<DriveVolumeName>/<NameofShare> /mnt/<FolderyouCreated>
14 #==============================================================================
16 if [ $(uname) = "OpenBSD" ]; then
17 all_disks=$(sysctl -n hw.disknames | grep -o '[cwsf]d[0-9]')
18 mounted=$(df | awk '{print $1}' | grep -o '[cwsf]d[0-9]' | uniq |\
19 tr '\n' '|'| sed -E 's/\|$//g')
20 unmounted=$(echo "$all_disks" | sed -E "s/($mounted)//g")
21 # tr '\n' '|' | grep -o '[cwsf]d[0-9]|' |\
22 # tr -d '\n' | sed -E 's/\|$//g'
24 # simple-mtpfs --device 1 /mnt/mtp -o uid=1000 -o gid=1000 -o allow_other
26 unmounted_description=$(
27 for disk in $unmounted; do
28 dmesg | grep "^$disk" | uniq |\
29 tr -d '\n' |\
30 sed -E "s/at.*<|$disk: / /g" |\
31 sed -E "s/MB.*/MB\\\n/g"
32 done
34 # unmounted_description=$(
35 # dmesg | egrep "($unmounted)" | uniq |\
36 # tr -d '\n' |\
37 # sed -E "s/ at.*:|($unmounted): //g" |\
38 # sed -E "s/MB.*/MB\\\n/g"
39 # )
41 partition=$(echo -e "$unmounted_description" |\
42 dmenu -l 10 | awk '{print $1"i"}')
43 dev=dev
45 elif [ "$(uname)" = "Linux" ]; then
46 # TODO
47 # mounted encrypted volume is still in mount options (crypto_LUKS)
48 # do not print android if mounted
49 # awk '$1~/[[:digit:]]/ && $3~/[[:alnum:]]/ && $4 == "";\
50 # lsblk --noheadings --raw -o NAME,SIZE,TYPE,MOUNTPOINT |\
51 # findmnt show mounted
52 chosen=$(\
53 doas lsblk --noheadings --raw -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT |\
54 awk '$3 == "part" && $5 == ""' |\
55 dmenu -i -p "Mount volume" -l 10 )
57 #TODO mount android
58 # awk '$4 == "part" && $5 == "";\
59 # END {system("simple-mtpfs --list-devices")}'|\
62 partition=$(echo "$chosen" | awk '{print $1}')
63 file_type=$(echo "$chosen" | awk '{print $4}')
64 android_d=$(echo "$partition" | awk '/^[0-9]/' | head -c 1)
66 # android
67 # TODO
68 # mount android even locked screen
69 if [ "$android_d" ]; then
70 mount_point=$(find /mnt/ -maxdepth 1 -type d -empty -name "android*" |\
71 dmenu -i -p "Select mount point")
72 simple-mtpfs --device "$android_d" "$mount_point"\
73 && notify-send "Mounted" "Android"\
74 || notify-send -u critical "Error Mounting Android" "Unlock screen"
75 exit 0
78 # unlock encrypted partition
79 # FIXME:
80 # mount luks non root mount_point
81 if [ "$file_type" = "crypto_LUKS" ]; then
82 dev=dev/mapper
84 # check if locked
85 if [ ! -b /dev/mapper/$partition ]; then
86 if dmenu -P -p 'cryptsetup | sudo '|\
87 sudo -S sh -c "dmenu -P -p 'luks volume | password ' |\
88 cryptsetup luksOpen /dev/$partition $partition"; then
89 notify-send "Unlocked" "$partition"
90 else
91 notify-send -u critical "Error Unlocking $partition"
92 exit 0
96 else # file_type != crypto_LUKS
97 dev=dev
100 fi # end of OS detection
102 if [ "$file_type" = "vfat" ]; then
103 mount_option="-o rw,umask=0000"
104 echo "$mount_option"
107 # Mount partition
108 if [ "$partition" ]; then
109 mount_point=$(find /mnt/ -maxdepth 1 -type d -empty | sort |\
110 dmenu -i -p "Select mount point")
111 if [ "$mount_point" ]; then
112 dmenu -P -p "Mount | sudo " |\
113 sudo -S mount /$dev/$partition $mount_point $mount_option\
114 && notify-send "Mounted" "$partition"\
115 || notify-send -u critical "Error Mounting" "$partition"