Home
       qmenu-dm - qmenu - 🇶 manage qubes os via dmenu - fixed forked version
  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