_fwupdtool_cmd_list=( 'activate' 'build-firmware' 'clear-history' 'esp-list' 'esp-mount' 'esp-unmount' 'firmware-build' 'firmware-convert' 'firmware-export' 'firmware-extract' 'firmware-parse' 'firmware-sign' 'firmware-patch' 'get-bios-setting' 'get-updates' 'get-upgrades' 'get-details' 'get-firmware-types' 'get-device-flags' 'get-devices' 'get-history' 'get-plugins' 'get-remotes' 'get-report-metadata' 'get-topology' 'hwids' 'update' 'upgrade' 'install' 'install-blob' 'monitor' 'reinstall' 'security' 'set-bios-setting' 'switch-branch' 'self-sign' 'smbios-dump' 'attach' 'detach' 'firmware-dump' 'firmware-read' 'refresh' 'verify-update' 'watch' 'unbind-driver' 'bind-driver' 'export-hwids' ) _fwupdtool_opts=( '--verbose' '--allow-reinstall' '--allow-older' '--force' '--show-all' '--plugins' '--prepare' '--cleanup' '--filter' '--method' '--disable-ssl-strict' '--no-safety-check' '--no-search' '--ignore-checksum' '--ignore-vid-pid' '--save-backends' ) _show_filters() { local flags flags="$(command fwupdtool get-device-flags 2>/dev/null)" COMPREPLY+=( $(compgen -W "${flags}" -- "$cur") ) } _show_firmware_types() { local firmware_types firmware_types="$(command fwupdtool get-firmware-types 2>/dev/null)" COMPREPLY+=( $(compgen -W "${firmware_types}" -- "$cur") ) } _show_device_ids() { if ! command -v jq &> /dev/null; then return 0 fi local description description="$(command jq '.Devices | .[] | .DeviceId' @localstatedir@/cache/fwupd/devices.json 2>/dev/null)" COMPREPLY+=( $(compgen -W "${description}" -- "$cur") ) } _show_plugins() { if ! command -v jq &> /dev/null; then return 0 fi local plugins plugins="$(command fwupdtool get-plugins --json 2>/dev/null | jq '.Plugins | .[] | .Name')" COMPREPLY+=( $(compgen -W "${plugins}" -- "$cur") ) } _show_modifiers() { COMPREPLY+=( $(compgen -W '${_fwupdtool_opts[@]}' -- "$cur") ) } _fwupdtool() { local cur prev command arg args COMPREPLY=() _get_comp_words_by_ref cur prev _get_first_arg _count_args case $prev in --plugins) _show_plugins return 0 ;; --filter) _show_filters return 0 ;; esac case $arg in get-details|install|install-blob|firmware-dump|firmware-read) #find files if [[ "$args" = "2" ]]; then _filedir #device ID elif [[ "$args" = "3" ]]; then _show_device_ids fi ;; attach|detach|activate|verify-update|reinstall|get-updates) #device ID if [[ "$args" = "2" ]]; then _show_device_ids fi ;; firmware-parse|firmware-patch) #find files if [[ "$args" = "2" ]]; then _filedir #firmware_type elif [[ "$args" = "3" ]]; then _show_firmware_types fi ;; firmware-convert) #file in if [[ "$args" = "2" ]]; then _filedir #file out elif [[ "$args" = "3" ]]; then _filedir #firmware_type in elif [[ "$args" = "4" ]]; then _show_firmware_types #firmware_type out elif [[ "$args" = "5" ]]; then _show_firmware_types fi ;; *) #find first command if [[ "$args" = "1" ]]; then COMPREPLY=( $(compgen -W '${_fwupdtool_cmd_list[@]}' -- "$cur") ) fi ;; esac #modifiers _show_modifiers return 0 } complete -F _fwupdtool fwupdtool