fwupd/data/bash-completion/fwupdmgr.in
Richard Hughes 6de10e118c Allow downloading firmware from IPFS
Only a small amount of the firmware on the LVFS will be available. The user
can use --ipfs on the command line for testing, or change the system-wide
default in /etc/fwupd/daemon.conf.

The IPFS daemon and command line client will need to be installed manually.
2021-02-01 19:33:31 +00:00

197 lines
3.6 KiB
Plaintext

_fwupdmgr_cmd_list=(
'activate'
'block-firmware'
'clear-history'
'clear-offline'
'clear-results'
'disable-remote'
'downgrade'
'enable-remote'
'get-approved-firmware'
'get-blocked-firmware'
'get-details'
'get-devices'
'get-history'
'get-releases'
'get-remotes'
'get-results'
'get-topology'
'get-updates'
'get-upgrades'
'get-plugins'
'install'
'modify-config'
'modify-remote'
'reinstall'
'refresh'
'report-history'
'security'
'set-approved-firmware'
'switch-branch'
'unlock'
'unblock-firmware'
'update'
'upgrade'
'verify'
'verify-update'
'--version'
)
_fwupdmgr_opts=(
'--verbose'
'--offline'
'--allow-reinstall'
'--allow-older'
'--allow-branch-switch'
'--force'
'--assume-yes'
'--no-history'
'--no-unreported-check'
'--no-metadata-check'
'--no-reboot-check'
'--no-safety-check'
'--no-remote-check'
'--show-all'
'--sign'
'--filter'
'--disable-ssl-strict'
'--ipfs'
'--ignore-power'
)
_show_filters()
{
local flags
flags="$(command @libexecdir@/fwupdtool get-device-flags 2>/dev/null)"
COMPREPLY+=( $(compgen -W "${flags}" -- "$cur") )
}
_show_modifiers()
{
COMPREPLY+=( $(compgen -W '${_fwupdmgr_opts[@]}' -- "$cur") )
}
_show_device_ids()
{
local description
OLDIFS=$IFS
IFS=$'\n'
description="$(command fwupdagent get-devices 2>/dev/null | sed -e 's,"Name" :,,; s,",,g; s,\,,,g; s,[[:space:]]\+,,' | command awk '!/DeviceId/ { line = $0 }; /DeviceId/ { print $3 " { "line" }"}')"
COMPREPLY+=( $(compgen -W "${description}" -- "$cur") )
IFS=$OLDIFS
}
_show_remotes()
{
local remotes
remotes="$(command fwupdmgr get-remotes | command awk '/Remote ID/ { print $4 }')"
COMPREPLY+=( $(compgen -W "${remotes}" -- "$cur") )
}
_fwupdmgr()
{
local cur prev command
COMPREPLY=()
cur=`_get_cword`
prev=${COMP_WORDS[COMP_CWORD-1]}
command=${COMP_WORDS[1]}
case $prev in
--filter)
_show_filters
return 0
;;
esac
case $command in
activate|clear-results|downgrade|get-releases|get-results|unlock|verify|verify-update|get-updates|switch-branch)
if [[ "$prev" = "$command" ]]; then
_show_device_ids
else
_show_modifiers
fi
;;
get-details)
#browse for file
if [[ "$prev" = "$command" ]]; then
_filedir
#modifiers
else
_show_modifiers
fi
;;
install)
#find files
if [[ "$prev" = "$command" ]]; then
_filedir
#device ID or modifiers
elif [[ "$prev" = "${COMP_WORDS[2]}" ]]; then
_show_device_ids
_show_modifiers
#modifiers
else
_show_modifiers
fi
;;
modify-remote)
#find remotes
if [[ "$prev" = "$command" ]]; then
_show_remotes
#add key
elif [[ "$prev" = "${COMP_WORDS[2]}" ]]; then
local keys
keys="$(command fwupdmgr get-remotes | command awk -v pattern="Remote ID:.*${prev}$" '$0~pattern{show=1; next}/Remote/{show=0}{gsub(/:.*/,"")}show')"
COMPREPLY+=( $(compgen -W "${keys}" -- "$cur") )
#modifiers
else
_show_modifiers
fi
;;
enable-remote)
#find remotes
if [[ "$prev" = "$command" ]]; then
_show_remotes
#modifiers
else
_show_modifiers
fi
;;
disable-remote)
#find remotes
if [[ "$prev" = "$command" ]]; then
_show_remotes
#modifiers
else
_show_modifiers
fi
;;
refresh)
#find first file
if [[ "$prev" = "$command" ]]; then
_filedir
#find second file
elif [[ "$prev" = "${COMP_WORDS[2]}" ]]; then
_filedir
#find remote ID
elif [[ "$prev" = "${COMP_WORDS[3]}" ]]; then
_show_remotes
else
_show_modifiers
fi
;;
*)
#find first command
if [[ ${COMP_CWORD} = 1 ]]; then
COMPREPLY=( $(compgen -W '${_fwupdmgr_cmd_list[@]}' -- "$cur") )
#modifiers for all commands
else
_show_modifiers
fi
;;
esac
return 0
}
complete -F _fwupdmgr fwupdmgr