URI:
       Merge fqvm_usb and fqvm_block - qmenu - manage qubes os via dmenu (drkhsh fork)
  HTML git clone git://git.drkhsh.at/qmenu.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 7d8ea58070ad1094a681b95ea774fb0a28ca918f
   DIR parent 1bb80d5b505ca7bf841f023bfb6d8056889964ad
  HTML Author: sine3o14nnae <3o14@pm.me>
       Date:   Mon, 19 Aug 2019 04:00:33 +0200
       
       Merge fqvm_usb and fqvm_block
       
       Diffstat:
         D qmenu-usb                           |     124 -------------------------------
         M qmenu-vm                            |     255 ++++++++++++++-----------------
       
       2 files changed, 115 insertions(+), 264 deletions(-)
       ---
   DIR diff --git a/qmenu-usb b/qmenu-usb
       @@ -1,124 +0,0 @@
       -#!/bin/bash
       -
       -rearrange_qube_list() {
       - 
       - local QUBE_LIST_REARRANGED+=`echo "$(echo "$qube_list" |\
       -   awk '$2 == "purple"')"`
       -
       - local QUBE_LIST_REARRANGED+=`echo "\n$(echo "$qube_list" |\
       -   awk '$2 == "blue"')"`
       - 
       - local QUBE_LIST_REARRANGED+=`echo "\n$(echo "$qube_list" |\
       -   awk '$2 == "gray"')"`
       -   
       - local QUBE_LIST_REARRANGED+=`echo "\n$(echo "$qube_list" |\
       -   awk '$2 == "green"')"`
       -
       - local QUBE_LIST_REARRANGED+=`echo "\n$(echo "$qube_list" |\
       -   awk '$2 == "yellow"')"`
       -
       - local QUBE_LIST_REARRANGED+=`echo "\n$(echo "$qube_list" |\
       -   awk '$2 == "orange"')"`
       -
       - local QUBE_LIST_REARRANGED+=`echo "\n$(echo "$qube_list" |\
       -   awk '$2 == "red"')"`
       -
       - local QUBE_LIST_REARRANGED+=`echo "\n$(echo "$qube_list" |\
       -   awk '$2 == "black"')"`
       -
       - # Remove blank lines 
       - qube_list=`echo -e "$QUBE_LIST_REARRANGED" | sed "{/^$/d;}"`
       -}
       -
       -
       -get_qube_label() {
       -
       - qube_label=`echo "$qube_list" | grep -w $target_qube | awk '{ print $2 }'`
       - 
       - # Change black, yellow and green to a more readable color if needed 
       - if [ "$qube_label" = "black" ]; then
       -
       -   qube_label='#373737'
       -
       - # Change only if dark theme is selected
       - elif [ "$theme_1" = "#ffffff" ]; then
       -
       -   if [ "$qube_label" = "yellow" ]; then 
       -        
       -     qube_label='#cdcd00'
       -    
       -   elif [ "$qube_label" = "green" ]; then
       -
       -     qube_label='#00b300'
       -   fi
       - fi
       -}
       -
       -
       -if [ "$1"  = "--light-theme" ]; then
       -
       -  theme_0='#ffffff'
       -  theme_1='#000000'
       -else
       -        
       -  theme_0='#000000'
       -  theme_1='#ffffff'
       -fi
       -
       -usb_list=`qvm-usb`
       -
       -qube_list=`qvm-ls --no-spinner --running -O NAME,LABEL`
       -
       -rearrange_qube_list
       -
       -device=`echo "$usb_list" | dmenu -l 16 -f -m 0 -nb $theme_0\
       -  -nf $theme_1 -sb $theme_1 -sf $theme_0`
       -
       -device_id=`echo $device | awk '{ print $1 }'`
       -
       -device_name=`echo $device | awk '{ print $2 }'`
       -
       -if [ -n "$device" ]; then
       -
       -  target_qube=`echo "$usb_list" | grep $device_id | awk '{ print $3 }'`
       -
       -  if [ -z "$target_qube" ]; then
       -    
       -    target_qube=`echo "$qube_list" | grep -v -w dom0 |\
       -      sed '1d' | dmenu -p "attach to:" -l 32 -f -m 0\
       -      -nb $theme_0 -nf $theme_1 -sb $theme_1 -sf $theme_0 |\
       -      awk '{ print $1 }'`    
       -    
       -    if [ -n "$target_qube" ]; then
       -
       -      get_qube_label 
       -
       -      prompt=`echo -e "No\nYes" |\
       -        dmenu -i -p "Attach $device_name to $target_qube?"\
       -        -f -m 0 -nb $theme_0 -nf $theme_1 -sb $qube_label -sf $theme_1`
       -    
       -      if [ "$prompt" = "Yes" ]; then
       -
       -        if ! qvm-usb attach $target_qube $device_id; then exit 2; fi        
       -        
       -        exit 0
       -      fi
       -    fi 
       -  else
       -    
       -    get_qube_label
       -
       -    prompt=`echo -e "No\nYes" |\
       -      dmenu -i -p "Detach $device_name from $target_qube?"\
       -      -f -m 0 -nb $theme_0 -nf $theme_1 -sb $qube_label -sf $theme_1`
       -    
       -    if [ "$prompt" = "Yes" ]; then
       -
       -      if ! qvm-usb detach $target_qube $device_id; then exit 2; fi
       -        
       -      exit 0
       -    fi
       -  fi
       -fi
       -
       -exit 1
   DIR diff --git a/qmenu-vm b/qmenu-vm
       @@ -600,6 +600,95 @@ fqvm_firewall() {
        }
        
        
       +fqvm_devices() {
       +
       + if ! qvm-check --running $target_qube &>/dev/null; then 
       +
       +   echo "Go back..." |\
       +     dmenu -p "$target_qube needs to be running, in order to attach devices"\
       +     $dmenu_fmc &>/dev/null 
       + else
       +
       +   # Depending on the device type, we have to 
       +   # 'awk' different fields later on
       +   if [ "$chosefrom" = "Audio" ]; then
       +
       +     local device_type="device mic"
       +  
       +     local awk_devicename0=2
       +     local awk_devicename1=10
       +     local awk_targetqube=3
       +
       +   elif [ "$chosefrom" = "Block" ]; then
       +
       +     local device_type="${chosefrom,}"
       +
       +     local awk_devicename0=2
       +     local awk_devicename1=3
       +     local awk_targetqube=4
       +
       +   elif [ "$chosefrom" = "USB" ]; then
       +
       +     local device_type="${chosefrom,,}"
       +
       +     local awk_devicename0=2
       +     local awk_devicename1=10
       +     local awk_targetqube=3
       +fi
       +    
       +   local devices_list=`qvm-$device_type`
       +
       +   local device=`echo "$devices_list" |\
       +     dmenu -l 16 -p "$target_qube:" $dmenu_fmc`
       +
       +   local device_id=`echo $device | awk '{ print $1 }'`
       +
       +   local device_name=`echo $device |\
       +     awk '{ print $'$awk_devicename0'$'$awk_devicename1' }'`
       +
       +   if [ -n "$device" ]; then
       +
       +     local holds_qube=`echo "$devices_list" | grep $device_id |\
       +       awk '{ print $'$awk_targetqube' }'`
       +
       +     if [ -z "$holds_qube" ]; then 
       +
       +       local answer=`echo -e "No\nYes" |\
       +         dmenu -i -p "Attach $device_name to $target_qube?"\
       +         $dmenu_fmc`
       +    
       +       if [ "$answer" = "Yes" ]; then
       +
       +         qvm-$device_type attach $target_qube $device_id&
       +       fi 
       +
       +     elif [ "$holds_qube" = "$target_qube" ]; then 
       +
       +       local answer=`echo -e "No\nYes" |\
       +         dmenu -i -p "Detach $device_name from $target_qube?"\
       +         $dmenu_fmc`
       +    
       +       if [ "$answer" = "Yes" ]; then
       +
       +         qvm-$device_type detach $holds_qube $device_id&
       +       fi
       +     else
       +   
       +       local answer=`echo -e "No\nYes" |\
       +         dmenu -i -p "Detach $device_name from $holds_qube and attach it to $target_qube?"\
       +         $dmenu_fmc`
       +    
       +       if [ "$answer" = "Yes" ]; then
       +
       +         $(qvm-$device_type detach $holds_qube $device_id &&
       +           qvm-$device_type attach $target_qube $device_id)&
       +       fi
       +     fi
       +   fi
       + fi
       +}
       +
       +
        fqvm_applications() {
        
         local option=0        
       @@ -771,126 +860,6 @@ fqvm_disk() {
        }
        
        
       -fqvm_usb() {
       -
       - if ! qvm-check --running $target_qube &>/dev/null; then 
       -
       -   echo "Go back..." |\
       -     dmenu -p "$target_qube needs to be running, in order to attach USB devices"\
       -     $dmenu_fmc &>/dev/null 
       - else
       -    
       -   local devices_list=`qvm-usb`
       -
       -   local device=`echo "$devices_list" | dmenu -l 16 -p "$target_qube:" $dmenu_fmc`
       -
       -   local device_id=`echo $device | awk '{ print $1 }'`
       -
       -   local device_name=`echo $device | awk '{ print $2 }'`
       -
       -   if [ -n "$device" ]; then
       -
       -     local holds_qube=`echo "$devices_list" | grep $device_id | awk '{ print $3 }'`
       -
       -     if [ -z "$holds_qube" ]; then 
       -
       -       local answer=`echo -e "No\nYes" |\
       -         dmenu -i -p "Attach $device_name to $target_qube?"\
       -         $dmenu_fmc`
       -    
       -       if [ "$answer" = "Yes" ]; then
       -
       -         qvm-usb attach $target_qube $device_id
       -       fi 
       -
       -     elif [ "$holds_qube" = "$target_qube" ]; then 
       -
       -       local answer=`echo -e "No\nYes" |\
       -         dmenu -i -p "Detach $device_name from $target_qube?"\
       -         $dmenu_fmc`
       -    
       -       if [ "$answer" = "Yes" ]; then
       -
       -         qvm-usb detach $holds_qube $device_id
       -       fi
       -     else
       -   
       -       local answer=`echo -e "No\nYes" |\
       -         dmenu -i -p "Detach $device_name from $holds_qube and attach it to $target_qube?"\
       -         $dmenu_fmc`
       -    
       -       if [ "$answer" = "Yes" ]; then
       -
       -         qvm-usb detach $holds_qube $device_id
       -
       -         qvm-usb attach $target_qube $device_id
       -       fi
       -     fi
       -   fi
       - fi
       -}
       -
       -
       -fqvm_blck() {
       -
       - if ! qvm-check --running $target_qube &>/dev/null; then 
       -
       -   echo "Go back..." |\
       -     dmenu -p "$target_qube needs to be running, in order to attach block devices"\
       -     $dmenu_fmc &>/dev/null 
       - else
       -    
       -   local devices_list=`qvm-block`
       -
       -   local device=`echo "$devices_list" | dmenu -l 16 -p "$target_qube:" $dmenu_fmc`
       -
       -   local device_id=`echo $device | awk '{ print $1 }'`
       -
       -   local device_name=`echo $device | awk '{ print $2 $3 }'`
       -
       -   if [ -n "$device" ]; then
       -
       -     local holds_qube=`echo "$devices_list" | grep $device_id | awk '{ print $4 }'`
       -
       -     if [ -z "$holds_qube" ]; then 
       -
       -       local answer=`echo -e "No\nYes" |\
       -         dmenu -i -p "Attach $device_name to $target_qube?"\
       -         $dmenu_fmc`
       -    
       -       if [ "$answer" = "Yes" ]; then
       -
       -         qvm-block attach $target_qube $device_id
       -       fi 
       -
       -     elif [ "$holds_qube" = "$target_qube" ]; then 
       -
       -       local answer=`echo -e "No\nYes" |\
       -         dmenu -i -p "Detach $device_name from $target_qube?"\
       -         $dmenu_fmc`
       -    
       -       if [ "$answer" = "Yes" ]; then
       -
       -         qvm-block detach $holds_qube $device_id
       -       fi
       -     else
       -   
       -       local answer=`echo -e "No\nYes" |\
       -         dmenu -i -p "Detach $device_name from $holds_qube and attach it to $target_qube?"\
       -         $dmenu_fmc`
       -    
       -       if [ "$answer" = "Yes" ]; then
       -
       -         qvm-block detach $holds_qube $device_id
       -
       -         qvm-block attach $target_qube $device_id
       -       fi
       -     fi
       -   fi
       - fi
       -}
       -
       -
        fqvm_keyboard() {
         
         if [ -n "$LAYOUT" ]; then unset LAYOUT; fi
       @@ -1389,19 +1358,21 @@ while true; do
                correct_qube_label
                    
                # Note that the '-m 0' option in 'dmenu' is important
       -        # for security as it restricts 'qmenu-vm' to monitor 0
       +        # for security as it restricts it to monitor 0
                dmenu_fmc="-m 0 -nb $theme_0 -nf $theme_1 -sb $qube_label -sf $theme_1"
        
                chosefrom=0
        
                while [ -n "$chosefrom" ]; do
                    
       -          chosefrom=`echo -e "Applications\nBlocks\nBoot\nBootfrom"\
       -                             "\nClone\nCommand\nDisk\nFirewall"\
       -                             "\nGUI\nKeyboard\nKill\nPause"\
       -                             "\nPCI\nPreferences\nReboot\nRemove"\
       -                             "\nServices\nShutdown\nUnpause\nUSB" |\
       -                             dmenu -l 19 -i -p "$target_qube:" $dmenu_fmc`
       +          chosefrom=`echo -e "Applications\nAudio input\nBlock devices\nBoot"\
       +                             "\nBootfrom\nClone\nCommand\nDisk"\
       +                             "\nFirewall\nGUI\nKeyboard\nKill"\
       +                             "\nPause\nPCI\nPreferences\nReboot"\
       +                             "\nRemove\nServices\nShutdown\nUnpause"\
       +                             "\nUSB" |\
       +                             dmenu -l 21 -i -p "$target_qube:" $dmenu_fmc |\
       +                             awk '{ print $1 }'`
        
                  case $chosefrom in
        
       @@ -1409,15 +1380,19 @@ while true; do
                    
                      fqvm_applications;;
        
       -            Blocks)
       +            Audio)
       +
       +              fqvm_devices;;
       +
       +            Block)
        
       -              fqvm_blck;;
       +              fqvm_devices;;
                        
       -            Boot) 
       +            Boot*) 
                    
                      qvm-start --skip-if-running $target_qube&;; 
                    
       -            Bootfrom*) 
       +            Bootfrom) 
                    
                      qubes-vm-boot-from-device $target_qube;;
                            
       @@ -1429,11 +1404,11 @@ while true; do
                    
                      fqvm_run;;
                        
       -            Disk) 
       +            Disk*) 
                    
                      fqvm_disk;;
                           
       -            Firewall*) 
       +            Firewall) 
                    
                      fqvm_firewall;;
                            
       @@ -1445,7 +1420,7 @@ while true; do
                    
                      fqvm_keyboard;;
                            
       -            Kill) 
       +            Kill*) 
                    
                      answer=`echo -e "No\nYes" |\
                        dmenu -i -p "Kill $target_qube?" $dmenu_fmc`
       @@ -1455,7 +1430,7 @@ while true; do
                        qvm-kill $target_qube& fi;;
                            
                    
       -            Pause*) 
       +            Pause) 
                    
                      answer=`echo -e "No\nYes" |\
                        dmenu -i -p "Pause $target_qube?" $dmenu_fmc`
       @@ -1473,7 +1448,7 @@ while true; do
                    
                      fqvm_preferences;; 
        
       -            Reboot) 
       +            Reboot*) 
                    
                      answer=`echo -e "No\nYes" |\
                        dmenu -i -p "Reboot $target_qube?" $dmenu_fmc`
       @@ -1487,11 +1462,11 @@ while true; do
                      fi;;
                     
                    
       -            Remove*) 
       +            Remove) 
                    
                      fqvm_remove;;  
        
       -            Services*) 
       +            Services) 
                    
                      fqvm_service;;
        
       @@ -1505,13 +1480,13 @@ while true; do
                        qvm-shutdown $target_qube& fi;;     
        
                    
       -            Unpause) 
       +            Unpause*) 
                    
                      qvm-unpause $target_qube&;;
        
                    USB) 
                    
       -              fqvm_usb;;
       +              fqvm_devices;;
        
                    *)
                  esac