diff --git a/src/_fwupdmgr b/src/_fwupdmgr new file mode 100644 index 0000000..5edcbf7 --- /dev/null +++ b/src/_fwupdmgr @@ -0,0 +1,293 @@ +#compdef fwupdmgr +# ------------------------------------------------------------------------------ +# Description +# ----------- +# +# Completion script for fwupdmgr 1.2.9 (https://github.com/hughsie/fwupd). +# +# ------------------------------------------------------------------------------ +# Authors +# ------- +# +# * Julien Nicoulaud +# +# ------------------------------------------------------------------------------ + + +_fwupdmgr() { + + local context state state_descr line + typeset -A opt_args + + _arguments -C \ + '(- : *)'{-h,--help}'[display help information]' \ + '(- : *)'{-v,--version}'[display version information]' \ + {-v,--verbose}'[show extra debugging information]' \ + --offline'[schedule installation for next reboot when possible]' \ + --allow-reinstall'[allow re-installing existing firmware versions]' \ + --allow-older'[allow downgrading firmware versions]' \ + --force'[override warnings and force the action]' \ + '(-y, --assume-yes)'{-y,--assume-yes}'[answer yes to all questions]' \ + --sign'[sign the uploaded data with the client certificate]' \ + --no-unreported-check'[do not check for unreported history]' \ + --no-metadata-check'[do not check for old metadata]' \ + --no-reboot-check'[do not check for reboot after update]' \ + --no-history'[do not write to the history database]' \ + --show-all-devices'[show devices that are not updatable]' \ + '(-): :->command' \ + '(-)*:: :->arguments' \ + && ret=0 + + case $state in + (command) + _fwupdmgr_commands + ;; + (arguments) + curcontext=${curcontext%:*:*}:fwupdmgr-$words[1]: + if (( $+functions[_fwupdmgr_${words[1]}_args] )); then + _fwupdmgr_${words[1]}_args + else + _message "unknown command ${words[1]}" && ret=1 + fi + ;; + (*) + _message "unknown state $state" && ret=1 + ;; + esac +} + +(( $+functions[_fwupdmgr_commands] )) || +_fwupdmgr_commands() { + local commands=( + 'activate:activate devices' + 'clear-history:erase all firmware update history' + 'clear-offline:clears any updates scheduled to be updated offline' + 'clear-results:clears the results from the last update' + 'disable-remote:disables a given remote' + 'downgrade:downgrades the firmware on a device' + 'enable-remote:enables a given remote' + 'get-approved-firmware:gets the list of approved firmware' + 'get-details:gets details about a firmware file' + 'get-devices:get all devices that support firmware updates' + 'get-history:show history of firmware updates' + 'get-releases:gets the releases for a device' + 'get-remotes:gets the configured remotes' + 'get-results:gets the results from the last update' + 'get-topology:get all devices according to the system topology' + 'get-updates:gets the list of updates for connected hardware' + 'install:install a firmware file on this hardware' + 'modify-config:modifies a daemon configuration value' + 'modify-remote:modifies a given remote' + 'refresh:refresh metadata from remote server' + 'report-history:share firmware history with the developers' + 'set-approved-firmware:sets the list of approved firmware' + 'unlock:unlocks the device for firmware access' + 'update:updates all firmware to latest versions available' + 'verify:gets the cryptographic hash of the dumped firmware' + 'verify-update:update the stored metadata with current ROM contents' + ) + _describe -t commands commands commands +} + +(( $+functions[_fwupdmgr_activate_args] )) || +_fwupdmgr_activate_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_clear-history_args] )) || +_fwupdmgr_clear-history_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_clear-results_args] )) || +_fwupdmgr_clear-results_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_disable-remote_args] )) || +_fwupdmgr_disable-remote_args() { + _arguments -C \ + '1: :_fwupdmgr_remote_ids' +} + +(( $+functions[_fwupdmgr_downgrade_args] )) || +_fwupdmgr_downgrade_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_enable-remote_args] )) || +_fwupdmgr_enable-remote_args() { + _arguments -C \ + '1: :_fwupdmgr_remote_ids' +} + +(( $+functions[_fwupdmgr_get-approved-firmware_args] )) || +_fwupdmgr_get-approved-firmware_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-details_args] )) || +_fwupdmgr_get-details_args() { + _files +} + +(( $+functions[_fwupdmgr_get-devices_args] )) || +_fwupdmgr_get-devices_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-history_args] )) || +_fwupdmgr_get-history_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-releases_args] )) || +_fwupdmgr_get-releases_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_get-remotes_args] )) || +_fwupdmgr_get-remotes_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-results_args] )) || +_fwupdmgr_get-results_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_get-topology_args] )) || +_fwupdmgr_get-topology_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_get-updates_args] )) || +_fwupdmgr_get-updates_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_install_args] )) || +_fwupdmgr_install_args() { + _arguments -C \ + '1: :_files' \ + '2: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_TODO_args] )) || +_fwupdmgr_TODO_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_modify-config_args] )) || +_fwupdmgr_modify-config_args() { + local ret=1 + if compset -P '*,'; then + _wanted config-value expl 'config value' _fwupdmgr_config_values ${IPREFIX%=} && ret=0 + else + _wanted config-key expl 'config key' _fwupdmgr_config_keys -qS, && ret=0 + fi + return ret +} + +(( $+functions[_fwupdmgr_modify-remote_args] )) || +_fwupdmgr_modify-remote_args() { + _arguments -C \ + '1: :_fwupdmgr_remote_ids' \ + '2: :_fwupdmgr_remote_keys' \ + '3: :_fwupdmgr_remote_values' +} + +(( $+functions[_fwupdmgr_refresh_args] )) || +_fwupdmgr_refresh_args() { + _arguments -C \ + '1: :_files' \ + '2:file signature:' \ + '3: :_fwupdmgr_remote_ids' +} + +(( $+functions[_fwupdmgr_report-history_args] )) || +_fwupdmgr_report-history_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_set-approved-firmware_args] )) || +_fwupdmgr_set-approved-firmware_args() { + _message 'checksum' && ret=0 +} + +(( $+functions[_fwupdmgr_unlock_args] )) || +_fwupdmgr_unlock_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_update_args] )) || +_fwupdmgr_update_args() { + _message 'no more arguments' && ret=0 +} + +(( $+functions[_fwupdmgr_verify_args] )) || +_fwupdmgr_verify_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_verify-update_args] )) || +_fwupdmgr_verify-update_args() { + _arguments -C \ + '1: :_fwupdmgr_device_ids' +} + +(( $+functions[_fwupdmgr_device_ids] )) || +_fwupdmgr_device_ids() { + # TODO add device name as description + local devices=($(_call_program devices fwupdmgr get-devices | grep -Po 'DeviceId:\s+\K(.*)')) + _describe -t devices 'device ID' devices +} + +(( $+functions[_fwupdmgr_remote_ids] )) || +_fwupdmgr_remote_ids() { + # TODO add remote description + local remotes=($(_call_program remotes fwupdmgr get-remotes | grep -Po 'Remote ID:\s+\K(.*)')) + _describe -t remotes 'remote ID' remotes +} + +(( $+functions[_fwupdmgr_checksums] )) || +_fwupdmgr_checksums() { + _guard '[^\-]#' 'checksum' +} + +(( $+functions[_fwupdmgr_config_keys] )) || +_fwupdmgr_config_keys() { + _guard '[^\-]#' 'config key' +} + +(( $+functions[_fwupdmgr_config_values] )) || +_fwupdmgr_config_values() { + _guard '[^\-]#' 'config value' +} + +(( $+functions[_fwupdmgr_remote_keys] )) || +_fwupdmgr_remote_keys() { + _guard '[^\-]#' 'remote key' +} + +(( $+functions[_fwupdmgr_remote_values] )) || +_fwupdmgr_remote_values() { + _guard '[^\-]#' 'remote value' +} + +_fwupdmgr "$@" + +# Local Variables: +# mode: Shell-Script +# sh-indentation: 2 +# indent-tabs-mode: nil +# sh-basic-offset: 2 +# End: +# vim: ft=zsh sw=2 ts=2 et