#compdef zerotier-cli #autoload _get_network_ids () { if [[ "$OSTYPE" == "darwin"* ]]; then COMPREPLY=($(compgen -W "$(ls -1 /Library/Application\ Support/ZeroTier/One/networks.d | cut -c 1-16)" -- ${cur})) else COMPREPLY=($(compgen -W "$(ls -1 /var/lib/zerotier-one/networks.d | cut -c 1-16)" -- ${cur})) fi } _get_network_ids_from_history () { COMPREPLY=($(compgen -W "$(fc -l -1000 -1 | sed -n 's/.*\([[:xdigit:]]\{16\}\).*/\1/p')" -- ${cur})) } _zerotier-cli_completions() { local cur prev cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} case ${COMP_CWORD} in 1) COMPREPLY=($(compgen -W "info listpeers peers listnetworks join leave set get listmoons orbit deorbit" -- ${cur})) ;; 2) case ${prev} in leave) _get_network_ids ;; join) _get_network_ids_from_history ;; set) _get_network_ids ;; get) _get_network_ids ;; *) COMPREPLY=() ;; esac ;; *) COMPREPLY=() ;; esac } complete -F _zerotier-cli_completions zerotier-cli