#compdef usbkey #autoload _usbkey_mounted() { mount | grep "/media/usbkey" | grep -q "/dev/mapper/usbkey" } _usbkey () { local cmd if (( CURRENT > 2)); then _usbkey_mounted || return operation=${words[2]} # Run the completion for the subcommand case "${operation}" in ssh-import) [ -d "/media/usbkey/ssh" ] || return local keys=() for F in $(find "/media/usbkey/ssh" -name '*.pub'); do F="${F#/media/usbkey/ssh/}" keys+=("${F%.pub}") done _describe -t keys 'usbkey' keys ;; openvpn-get) [ -d "/media/usbkey/openvpn" ] || return local certs=() for F in $(find "/media/usbkey/openvpn" -name 'ca.crt' -o -name '*.crt' -print); do F="${F#/media/usbkey/openvpn/}" certs+=("${F%.crt}") done _describe -t certificates 'usbkey' certs ;; # TODO esac else local operations=( "mount:Mount key of usb driver" "unmount:Unmount usb driver" "sync:Synchronize drive to bakup drive" ) if _usbkey_mounted; then operations+=( "gpg-import:Import gpg key" "ssh-import:Import ssh key" "ssh-generate:Generate new ssh key" "ssh-list:List all SSH keys in store" "openvpn-list:List all OpenVPN keys" "openvpn-get:Get OpenVPN keys for some host" "openvpn-generate:Generate OpenVPN key for new host" ) fi _describe -t operations 'usbkey' operations _arguments : "--help[Output help message]" fi } _usbkey