#compdef hostnamectl _hostnamectl_set-hostname() { if (( CURRENT <= 3 )); then _message "new hostname" else _message "no more options" fi } _hostnamectl_set-icon-name() { if (( CURRENT <= 3 )); then _message "new icon name" else _message "no more options" fi } _hostnamectl_set-chassis() { if (( CURRENT <= 3 )); then _chassis=( desktop laptop server tablet handset watch vm container ) _describe chassis _chassis else _message "no more options" fi } _hostnamectl_set-deployment() { if (( CURRENT <= 3 )); then _message "new environment" else _message "no more options" fi } _hostnamectl_command() { local -a _hostnamectl_cmds _hostnamectl_cmds=( "status:Show current hostname settings" "set-hostname:Set system hostname" "set-icon-name:Set icon name for host" "set-chassis:Set chassis type for host" "set-deployment:Set deployment environment" ) if (( CURRENT == 1 )); then _describe -t commands 'hostnamectl commands' _hostnamectl_cmds || compadd "$@" else local curcontext="$curcontext" cmd="${${_hostnamectl_cmds[(r)$words[1]:*]%%:*}}" if (( $#cmd )); then if [[ $cmd == status ]]; then _message "no options" else _hostnamectl_$cmd fi else _message "unknown hostnamectl command: $words[1]" fi fi } _arguments -s \ {-h,--help}'[Show this help]' \ '--version[Show package version]' \ '--transient[Only set transient hostname]' \ '--static[Only set static hostname]' \ '--pretty[Only set pretty hostname]' \ '--no-ask-password[Do not prompt for password]' \ {-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \ '*::hostnamectl commands:_hostnamectl_command'