qmenu-dm - qmenu - [fork] manage qubes os via dmenu
HTML git clone https://git.drkhsh.at/qmenu.git
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
qmenu-dm (3331B)
---
1 #!/bin/sh
2
3 get_qube_label() {
4 qube_label=$(echo "$qube_list" | grep -w "$target_qube" | awk '{print $2}')
5 # Change label colors according to ~/.config/qmenu.conf if that file exists.
6 if [ -f "$HOME/.config/qmenu.conf" ]; then
7 qube_label=$(grep "^$qube_label=" "$HOME"/.config/qmenu.conf | cut -d= -f2)
8 fi
9 }
10
11 rearrange_qube_list() {
12 qube_list=$(echo "$qube_list" |\
13 awk -v ListInOrder="purple,blue,gray,green,yellow,orange,red,black" '
14 BEGIN {
15 split(ListInOrder, a, ",")
16 for (i = 1; i <= length(a); ++i) ListToOrdinal[a[i]] = i
17 }
18 {print ListToOrdinal[$2] "-" $0}
19 ' | sort -t- -k1,1n | cut -d- -f2-)
20 }
21
22 # Note that the '-m 0' option in 'dmenu' is important
23 # for security as it restricts it to monitor 0.
24 dmenu_fmc="-f -m 0"
25
26 case $1 in
27 --all)
28 device_type=$(printf "Audio input devices\nBlock devices\nUSB devices" |\
29 dmenu -i -l 3 $dmenu_fmc | awk '{print $1}');;
30
31 --audio-input)
32 device_type="Audio";;
33
34 --block)
35 device_type="Block";;
36
37 --usb)
38 device_type="USB";;
39
40 *)
41 printf "qmenu-dm [OPTION]\nList and manage your connected devices.\n\n --all\n --audio-input\n --block\n --usb\n\n\nqmenu v1.3\n<https://github.com/sine3o14nnae/qmenu/>\n<https://gitlab.com/sine3o14nnae/qmenu/>\n\n"
42
43 if [ "$1" = "--help" ]; then exit 0; fi
44 esac
45
46 # Depending on the device type, we have to
47 # 'awk' different fields later on.
48 if [ "$device_type" = "Audio" ]; then
49 device_type="device mic"
50
51 awk_devicename0=2
52 awk_devicename1=10
53 awk_targetqube=3
54
55 elif [ "$device_type" = "Block" ]; then
56 device_type="block"
57
58 awk_devicename0=2
59 awk_devicename1=3
60 awk_targetqube=4
61
62 elif [ "$device_type" = "USB" ]; then
63 device_type="usb"
64
65 awk_devicename0=2
66 awk_devicename1=10
67 awk_targetqube=3
68 else
69
70 exit 2
71 fi
72
73 qube_list=$(qvm-ls --no-spinner --running -O NAME,LABEL |\
74 grep -vw 'dom0\|sys-usb')
75
76 rearrange_qube_list
77
78 devices_list=$(qvm-$device_type)
79 device=0
80
81 while [ -n "$device" ]; do
82 device=$(echo "$devices_list" | dmenu -l 16 $dmenu_fmc)
83 device_id=$(echo "$device" | awk '{print $1}')
84 device_name=$(echo "$device" |\
85 awk '{print $'$awk_devicename0'$'$awk_devicename1'}')
86
87 if [ -n "$device" ]; then
88 target_qube=$(echo "$devices_list" | grep "$device_id" |\
89 awk '{print $'$awk_targetqube'}')
90
91 if [ -z "$target_qube" ]; then
92 target_qube=$(echo "$qube_list" |\
93 sed '1d' | dmenu -p "attach to:" -l 32 $dmenu_fmc | awk '{print $1}')
94
95 if [ -n "$target_qube" ]; then
96 get_qube_label
97
98 prompt=$(printf "No\nYes" |\
99 dmenu -i -p "Attach $device_name to $target_qube?"\
100 -f -m 0 -sb $qube_label)
101
102 if [ "$prompt" = "Yes" ]; then
103 if qvm-$device_type attach "$target_qube" "$device_id"; then exit 0; fi
104
105 echo "Quit..." |\
106 dmenu -p "Failed to attach device!" $dmenu_fmc > /dev/null 2>&1
107
108 exit 2
109 fi
110 fi
111 else
112 get_qube_label
113
114 prompt=$(printf "No\nYes" |\
115 dmenu -i -p "Detach $device_name from $target_qube?"\
116 -f -m 0 -sb $qube_label)
117
118 if [ "$prompt" = "Yes" ]; then
119 if qvm-$device_type detach "$target_qube" "$device_id"; then exit 0; fi
120
121 echo "Quit..." |\
122 dmenu -p "Failed to detach device!" $dmenu_fmc > /dev/null 2>&1
123
124 exit 2
125 fi
126 fi
127 fi
128 done
129
130 exit 1