mirror of
https://github.com/gaschz/dotfiles.git
synced 2025-03-01 14:22:33 +01:00
feat: update qvm completion with upstream
This commit is contained in:
parent
874905eecf
commit
59dd3011b2
@ -10,177 +10,180 @@
|
|||||||
## - https://www.mail-archive.com/qubes-users@googlegroups.com/msg20088.html
|
## - https://www.mail-archive.com/qubes-users@googlegroups.com/msg20088.html
|
||||||
## - https://github.com/taradiddles/qubes-os-qvm-bash-completion
|
## - https://github.com/taradiddles/qubes-os-qvm-bash-completion
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# COMP_CWORD related functions
|
||||||
|
|
||||||
## COMPLETION FUNCTIONS
|
# Get the relative position of COMP_CWORD with option words ignored
|
||||||
## ====================
|
# Note: This logic is flawed when using option arguments (eg. -s blah).
|
||||||
## Output the relative position of COMP_CWORD with option words ignored
|
# Unfortunately there is no way to solve this except parsing every
|
||||||
## Note: This logic is flawed when using option arguments (eg. -s blah).
|
# known option for a given qvm-* command
|
||||||
## Unfortunately there is no way to solve this except parsing every
|
_get-cword-pos() {
|
||||||
## known option for a given qvm-* command
|
|
||||||
_get-cword() {
|
|
||||||
local index=0
|
local index=0
|
||||||
local i
|
local i
|
||||||
for ((i=1; i<=COMP_CWORD; i++)); do
|
for ((i=1; i<=COMP_CWORD; i++)); do
|
||||||
[[ ${COMP_WORDS[i]} == -* ]] && continue
|
[[ ${COMP_WORDS[i]} == -* ]] && continue
|
||||||
let index++
|
((index++))
|
||||||
done
|
done
|
||||||
echo ${index}
|
echo ${index}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Output the relative position of COMP_CWORD with option words ignored
|
# Get the relative position of the first COMP_CWORD with option words ignored
|
||||||
# Note: This logic is flawed when using option arguments (eg. -s blah).
|
# Note: Same limitation as _get-cword-pos() above.
|
||||||
# Unfortunately there is no way to solve this except parsing every
|
_get-first-cword() {
|
||||||
# known option for a given qvm-* command
|
|
||||||
_get-first-word() {
|
|
||||||
local i
|
local i
|
||||||
for ((i=1; i<=COMP_CWORD; i++)); do
|
for ((i=1; i<=COMP_CWORD; i++)); do
|
||||||
[[ ${COMP_WORDS[i]} == -* ]] && continue
|
[[ ${COMP_WORDS[i]} == -* ]] && continue
|
||||||
echo ${COMP_WORDS[i]}
|
echo "${COMP_WORDS[i]}"
|
||||||
return 0
|
return 0
|
||||||
done
|
done
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
_complete-vms() {
|
|
||||||
local vms
|
# ---------------------------------------------------------------------------
|
||||||
|
# Completion functions (set COMPREPLY)
|
||||||
|
|
||||||
|
# Sets COMPREPLY to an array of qubes in a given state
|
||||||
|
_complete-qubes() {
|
||||||
|
local qubes
|
||||||
local state="${1}"
|
local state="${1}"
|
||||||
|
local state_re=''
|
||||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
case "${state}" in
|
case "${state}" in
|
||||||
runtrans)
|
|
||||||
vms="$(qvm-ls --no-spinner --raw-data --fields=NAME,STATE |
|
|
||||||
grep -i "|\(running$\|transient$\)" | cut -d "|" -f1)"
|
|
||||||
;;
|
|
||||||
running|halted|paused)
|
running|halted|paused)
|
||||||
vms="$(qvm-ls --no-spinner --raw-list "--${state}")"
|
state_re="${state}"
|
||||||
;;
|
;;
|
||||||
"")
|
runtrans)
|
||||||
vms="$(qvm-ls --no-spinner --raw-list)"
|
state_re='\(running\|transient\)'
|
||||||
|
;;
|
||||||
|
any_state)
|
||||||
|
state_re='[^|]\+'
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
COMPREPLY=( $(compgen -W "${vms}" -- "${cur}") )
|
qubes=$(qvm-ls --raw-data | grep -v '^dom0|' | \
|
||||||
|
grep -i "^[^|]\+|${state_re}|" | cut -f1 -d"|")
|
||||||
|
mapfile -t COMPREPLY < <(compgen -W "${qubes}" -- "${cur}")
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
_complete-filenames() {
|
# Sets COMPREPLY to an array of qube properties (prefs, features, tags, service)
|
||||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
_complete-qubeprops() {
|
||||||
COMPREPLY=( $(compgen -f -- "$cur") )
|
local qube="${1}"
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
_complete-vmprops() {
|
|
||||||
local vm="${1}"
|
|
||||||
local property="${2}"
|
local property="${2}"
|
||||||
local props
|
local props
|
||||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
if qvm-check "${vm}" > /dev/null 2>&1; then
|
if qvm-check "${qube}" > /dev/null 2>&1; then
|
||||||
case "${property}" in
|
case "${property}" in
|
||||||
prefs)
|
prefs|features|tags|service)
|
||||||
props=$(qvm-prefs "${vm}" | cut -f1 -d " ")
|
props=$("qvm-${property}" "${qube}" | \
|
||||||
;;
|
cut -f1 -d " ")
|
||||||
features)
|
|
||||||
props=$(qvm-features "${vm}" | cut -f1 -d " ")
|
|
||||||
;;
|
|
||||||
tags)
|
|
||||||
props=$(qvm-tags "${vm}" | cut -f1 -d " ")
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
COMPREPLY=( $(compgen -W "${props}" -- "${cur}") )
|
mapfile -t COMPREPLY < <(compgen -W "${props}" -- "${cur}")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Sets COMPREPLY to an array of qvm-tags options
|
||||||
|
_complete-qvm-tags-actions() {
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
local options=$(qvm-tags --help | \
|
||||||
|
sed -ne 's/.*VMNAME {\([^}]\+\)}.*/\1/p' | tr ',' '\n')
|
||||||
|
mapfile -t COMPREPLY < <(compgen -W "${options}" -- "${cur}")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# Sets COMPREPLY to an array of file names
|
||||||
|
_complete-filenames() {
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
mapfile -t COMPREPLY < <(compgen -f -- "$cur")
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## WRAPPERS and COMPLETE functions
|
# ---------------------------------------------------------------------------
|
||||||
## ===============================
|
# "Link" completion functions to qvm-* commands
|
||||||
##----- args: vm(all) -----
|
|
||||||
_qvm-vms-all-all() {
|
# complete each argument with qubes in any state
|
||||||
_complete-vms ""
|
_qvmcmd-any_state-all_args() {
|
||||||
|
_complete-qubes "any_state"
|
||||||
}
|
}
|
||||||
complete -F _qvm-vms-all-all qvm-backup
|
complete -F _qvmcmd-any_state-all_args qvm-backup
|
||||||
complete -F _qvm-vms-all-all qvm-ls
|
complete -F _qvmcmd-any_state-all_args qvm-ls
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(all) -----
|
# complete the first argument with qubes in a given state
|
||||||
_qvm-vms-all() {
|
_qvmcmd-in_state() {
|
||||||
[ $(_get-cword ${COMP_CWORD}) = 1 ] && _complete-vms ""
|
local state="$1"
|
||||||
|
[ "$(_get-cword-pos "${COMP_CWORD}")" = 1 ] &&
|
||||||
|
_complete-qubes "${state}"
|
||||||
}
|
}
|
||||||
complete -F _qvm-vms-all qvm-check
|
|
||||||
complete -F _qvm-vms-all qvm-clone
|
_qvmcmd-any_state() { _qvmcmd-in_state "any_state"; }
|
||||||
complete -F _qvm-vms-all qvm-firewall
|
complete -F _qvmcmd-any_state qvm-check
|
||||||
complete -F _qvm-vms-all qvm-remove
|
complete -F _qvmcmd-any_state qvm-clone
|
||||||
complete -F _qvm-vms-all qvm-run
|
complete -F _qvmcmd-any_state qvm-firewall
|
||||||
complete -F _qvm-vms-all qvm-service
|
complete -F _qvmcmd-any_state qvm-remove
|
||||||
complete -F _qvm-vms-all qvm-start-gui
|
complete -F _qvmcmd-any_state qvm-run
|
||||||
complete -F _qvm-vms-all qvm-usb
|
complete -F _qvmcmd-any_state qvm-service
|
||||||
complete -F _qvm-vms-all qvm-terminal # ~/.config/sh/shrc alias
|
complete -F _qvmcmd-any_state qvm-start-gui
|
||||||
|
complete -F _qvmcmd-any_state qvm-usb
|
||||||
|
|
||||||
|
_qvmcmd-halted() { _qvmcmd-in_state "halted"; }
|
||||||
|
complete -F _qvmcmd-halted qvm-start
|
||||||
|
|
||||||
|
_qvmcmd-paused() { _qvmcmd-in_state "paused"; }
|
||||||
|
complete -F _qvmcmd-paused qvm-unpause
|
||||||
|
|
||||||
|
_qvmcmd-running() { _qvmcmd-in_state "running"; }
|
||||||
|
complete -F _qvmcmd-running qvm-pause
|
||||||
|
complete -F _qvmcmd-running qvm-shutdown
|
||||||
|
|
||||||
|
_qvmcmd-runtrans() { _qvmcmd-in_state "runtrans"; }
|
||||||
|
complete -F _qvmcmd-runtrans qvm-kill
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(halted) -----
|
# complete the first argument with qubes in any state
|
||||||
_qvm-vms-halted() {
|
# complete n>=2 arguments with filenames
|
||||||
[ $(_get-cword ${COMP_CWORD}) = 1 ] && _complete-vms "halted"
|
_qvmcmd-any_state-filenames() {
|
||||||
}
|
if [ "$(_get-cword-pos "${COMP_CWORD}")" = 1 ]; then
|
||||||
complete -F _qvm-vms-halted qvm-start
|
_complete-qubes "any_state"
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(paused) -----
|
|
||||||
_qvm-vms-paused() {
|
|
||||||
[ $(_get-cword ${COMP_CWORD}) = 1 ] && _complete-vms "paused"
|
|
||||||
}
|
|
||||||
complete -F _qvm-vms-paused qvm-unpause
|
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(running) -----
|
|
||||||
_qvm-vms-running() {
|
|
||||||
[ $(_get-cword ${COMP_CWORD}) = 1 ] && _complete-vms "running"
|
|
||||||
}
|
|
||||||
complete -F _qvm-vms-running qvm-pause
|
|
||||||
complete -F _qvm-vms-running qvm-shutdown
|
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(running|transient) -----
|
|
||||||
_qvm-vms-runtrans() {
|
|
||||||
[ $(_get-cword ${COMP_CWORD}) = 1 ] && _complete-vms "runtrans"
|
|
||||||
}
|
|
||||||
complete -F _qvm-vms-runtrans qvm-kill
|
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(all) ; arg(>=2): filenames -----
|
|
||||||
_qvm-vms-all-filenames() {
|
|
||||||
if [ "$(_get-cword ${COMP_CWORD})" -eq 1 ]; then
|
|
||||||
_complete-vms ""
|
|
||||||
else
|
else
|
||||||
_complete-filenames
|
_complete-filenames
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
complete -F _qvm-vms-all-filenames qvm-copy-to-vm
|
complete -F _qvmcmd-any_state-filenames qvm-copy-to-vm
|
||||||
complete -F _qvm-vms-all-filenames qvm-move-to-vm
|
complete -F _qvmcmd-any_state-filenames qvm-move-to-vm
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(all) ; arg2: vm preferences -----
|
# complete the first argument with qubes in any state
|
||||||
_qvm-vms-all-vmprefs() {
|
# complete the second argument with qube properties (features, prefs, ...)
|
||||||
case "$(_get-cword ${COMP_CWORD})" in
|
_qvmcmd-any_state-qubeprop() {
|
||||||
1) _complete-vms "" ;;
|
local property="$1"
|
||||||
2) _complete-vmprops "$(_get-first-word)" "prefs";;
|
case "$(_get-cword-pos "${COMP_CWORD}")" in
|
||||||
|
1) _complete-qubes "any_state" ;;
|
||||||
|
2) _complete-qubeprops "$(_get-first-cword)" "${property}" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
complete -F _qvm-vms-all-vmprefs qvm-prefs
|
|
||||||
|
_qvmcmd-any_state-qubeprefs() { _qvmcmd-any_state-qubeprop "prefs"; }
|
||||||
|
complete -F _qvmcmd-any_state-qubeprefs qvm-prefs
|
||||||
|
|
||||||
|
_qvmcmd-any_state-qubefeatures() { _qvmcmd-any_state-qubeprop "features"; }
|
||||||
|
complete -F _qvmcmd-any_state-qubefeatures qvm-features
|
||||||
|
|
||||||
|
_qvmcmd-any_state-qubeservice() { _qvmcmd-any_state-qubeprop "service"; }
|
||||||
|
complete -F _qvmcmd-any_state-qubeservice qvm-service
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(all) ; arg2: vm features -----
|
# complete the first argument with qubes in any state
|
||||||
_qvm-vms-all-vmfeatures() {
|
# complete the second argument with qvm-tags actions
|
||||||
case "$(_get-cword ${COMP_CWORD})" in
|
# complete the third argument with qube properties (features, prefs, ...)
|
||||||
1) _complete-vms "" ;;
|
_qvmcmd-any_state-qubetags() {
|
||||||
2) _complete-vmprops "$(_get-first-word)" "features";;
|
case "$(_get-cword-pos "${COMP_CWORD}")" in
|
||||||
|
1) _complete-qubes "any_state" ;;
|
||||||
|
2) _complete-qvm-tags-actions ;;
|
||||||
|
3) _complete-qubeprops "$(_get-first-cword)" "tags" ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
complete -F _qvm-vms-all-vmfeatures qvm-features
|
complete -F _qvmcmd-any_state-qubetags qvm-tags
|
||||||
|
|
||||||
|
|
||||||
#----- arg1: vm(all) ; arg2: vm tags -----
|
|
||||||
_qvm-vms-all-vmtags() {
|
|
||||||
case "$(_get-cword ${COMP_CWORD})" in
|
|
||||||
1) _complete-vms "" ;;
|
|
||||||
2) _complete-vmprops "$(_get-first-word)" "tags";;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
complete -F _qvm-vms-all-vmtags qvm-tags
|
|
||||||
|
15
files/net/.local/bin/urlopener
Executable file
15
files/net/.local/bin/urlopener
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if command -v qvm-open-in-dvm >/dev/null; then
|
||||||
|
qvm-open-in-dvm @default "$1"
|
||||||
|
elif test -n "${BROWSER-}"; then
|
||||||
|
"${BROWSER}" "$1"
|
||||||
|
else
|
||||||
|
xdg-open "$1"
|
||||||
|
fi
|
Loading…
x
Reference in New Issue
Block a user