['systemd-delta', ''],
['systemd-detect-virt', ''],
['systemd-dissect', 'HAVE_BLKID'],
+ ['systemd-hwdb', 'ENABLE_HWDB'],
['systemd-id128', ''],
['systemd-nspawn', 'ENABLE_NSPAWN'],
['systemd-path', ''],
--- /dev/null
+# shellcheck shell=bash
+# systemd-hwdb(8) completion -*- shell-script -*-
+# SPDX-License-Identifier: LGPL-2.1-or-later
+#
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# systemd is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with systemd; If not, see <https://www.gnu.org/licenses/>.
+
+__contains_word() {
+ local w word=$1; shift
+ for w in "$@"; do
+ [[ $w = "$word" ]] && return
+ done
+}
+
+_systemd_hwdb() {
+ local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} words cword
+ local i verb comps
+
+ local -A OPTS=(
+ [STANDALONE]='-h --help --version -s --strict --usr'
+ [ARG]='-r --root'
+ )
+
+ local -A VERBS=(
+ [STANDALONE]='update'
+ [ARG]='query'
+ )
+
+ _init_completion || return
+
+ if __contains_word "$prev" ${OPTS[ARG]}; then
+ case $prev in
+ --root|-r)
+ comps=$(compgen -A directory -- "$cur")
+ compopt -o dirnames
+ ;;
+ esac
+ COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
+ return 0
+ fi
+
+ for ((i=0; i < COMP_CWORD; i++)); do
+ if __contains_word "${COMP_WORDS[i]}" ${VERBS[*]} &&
+ ! __contains_word "${COMP_WORDS[i-1]}" ${OPTS[ARG]}; then
+ verb=${COMP_WORDS[i]}
+ break
+ fi
+ done
+
+ if [[ -z ${verb-} ]]; then
+ COMPREPLY=( $(compgen -W '${OPTS[*]} ${VERBS[*]}' -- "$cur") )
+ return 0
+ fi
+
+ if [[ "$cur" = -* ]]; then
+ COMPREPLY=( $(compgen -W '${OPTS[*]}' -- "$cur") )
+ return 0
+ fi
+
+ COMPREPLY=( $(compgen -W '${comps-}' -- "$cur") )
+ return 0
+}
+
+complete -F _systemd_hwdb systemd-hwdb
--- /dev/null
+#compdef systemd-hwdb
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+local context state state_descr line
+typeset -A opt_args
+
+local -a opt_common=(
+ {-h,--help}'[show this help]'
+ '--version[show package version]'
+ {-s,--strict}'[when updating, return non-zero exit value on any parsing error]'
+ '--usr[generate in /usr/lib/udev instead of /etc/udev]'
+ {-r+,--root=}'[alternative root path in the filesystem]:path:_directories'
+)
+
+local -a hwdb_commands=(
+ 'update:update the hwdb database'
+ 'query:query database and print result'
+)
+
+local ret=1
+_arguments -s -A '-*' "$opt_common[@]" \
+ ':command:->command' \
+ '*:: :->option-or-argument' && ret=0
+
+case $state in
+ command)
+ _describe -t command 'systemd-hwdb command' hwdb_commands && ret=0
+ ;;
+ option-or-argument)
+ case $words[1] in
+ update)
+ _arguments -s "$opt_common[@]" && ret=0
+ ;;
+ query)
+ _arguments -s "$opt_common[@]" ':modalias:' && ret=0
+ ;;
+ esac
+ ;;
+esac
+return ret