--- /dev/null
+#compdef userdbctl
+
+local context state state_descr line
+typeset -A opt_args
+local expl
+local -a opt_common=(
+ {-h,--help}'[Show a help message and exit]'
+ '--version[Show the package version and exit]'
+ '--no-pager[Do not pipe output into a pager]'
+ '--no-legend[Do not show the headers and footers]'
+ '(-j)--output=[Select output mode]:mode:(classic table friendly json)'
+ '(--output)-j[Equivalent to --output=json]'
+ {-s+,--service=}'[Query the specified service]'
+ '(-N)--with-nss=[Control whether to include glibc NSS data]:bool:(yes no)'
+ '--with-dropin=[Control whether to include drop-in records]:bool:(yes no)'
+ '--with-varlink=[Control whether to talk to services at all]:bool:(yes no)'
+ '(-N)--synthesize=[Synthesize root/nobody user]:bool:(yes no)'
+ '(--with-nss --synthesize)-N[Do not synthesize or include glibc NSS data]'
+ '--multiplexer=[Control whether to use the multiplexer]:bool:(yes no)'
+ '--json=[JSON output mode]:json-mode:(short pretty)'
+)
+local -a opt_user_group=(
+ {-z,--fuzzy}'[Do a fuzzy name search]'
+ '*--disposition=[Filter by disposition]:disposition:(intrinsic system regular dynamic container)'
+ '-I[Equivalent to --disposition=intrinsic]'
+ '-S[Equivalent to --disposition=system]'
+ '-R[Equivalent to --disposition=regular]'
+ '--uid-min=[Filter by minimum UID/GID]:uid:_numbers -t uids uid -d 0'
+ '--uid-max=[Filter by maximum UID/GID]:gid:_numbers -t gids gid -d 4294967294'
+ '--uuid=[Filter by UUID]:uuid'
+ '(-B)--boundaries=[Show/hide UID/GID range boundaries in output]:bool:(yes no)'
+ '(--boundaries)-B[Equivalent to --boundaries=no]'
+ {-F+,--from-file=}'[Read JSON record from file]:file:_files'
+)
+
+local -a userdbctl_commands=(
+ 'user:Inspect user'
+ 'group:Inspect group'
+ 'users-in-group:Show users that are members of specified groups'
+ 'groups-of-user:Show groups the specified users are members of'
+ 'services:Show enabled database services'
+ 'ssh-authorized-keys:Show SSH authorized keys for user'
+ 'load-credentials:Write static user/group records from credentials'
+)
+
+local ret=1
+_arguments -s \
+ "$opt_common[@]" \
+ ':userdbctl command:->command' \
+ '*:: :->option-or-argument' && ret=0
+
+case $state in
+ command)
+ _describe -t command 'userdbctl command' userdbctl_commands && ret=0
+ ;;
+ option-or-argument)
+ local curcontext=${curcontext%:*:*}:userdbctl-$words[1]:
+ case $words[1] in
+ user)
+ _arguments -s "$opt_common[@]" "$opt_user_group[@]" '*:users:_users' && ret=0
+ ;;
+ groups-of-user)
+ _arguments -s "$opt_common[@]" '*:users:_users' && ret=0
+ ;;
+ group)
+ _arguments -s "$opt_common[@]" "$opt_user_group[@]" '*:groups:_groups' && ret=0
+ ;;
+ users-in-group)
+ _arguments -s "$opt_common[@]" '*:groups:_groups' && ret=0
+ ;;
+ ssh-authorized-keys)
+ _arguments -s "$opt_common[@]" ':users:_users' \
+ '(-):chain:((--chain:"Chain another command"))' \
+ ':command:_absolute_command_paths' \
+ '*: :->chain' && ret=0
+ if [[ $state == chain ]] && compset -N --chain; then
+ _normal && ret=0
+ fi
+ ;;
+ services|load-credentials)
+ _message "no more arguments"
+ ;;
+ esac
+ ;;
+esac
+return ret