#compdef netcfg local -a disp all_options() { local _subcommands _subcommands=('list:List all available profiles' 'current:Report currently running profiles' 'check-iface:Start the specified profile, only if its interface is not currently up' 'up:Start the specified profile' 'reconnect:Disconnect and reconnect the specified profile' 'iface-recon:Reconnect profile active on specified interface' 'down:Stop the specified profile' 'iface-down:Stop the profile up on the specified interface' 'all-down:Stop all connected profiles' 'all-suspend:Suspend and store the name of all active profiles' 'all-resume:Reconnect any profiles that have been suspended') _path_files -W "/etc/network.d" -g "*(.)" _describe 'subcommand' _subcommands } all_profiles() { _path_files -W "/etc/network.d" -g "*(.)" } up_profiles() { _files -W "/run/network/profiles" } up_ifaces() { _files -W "/run/network/interfaces" } _arguments -C \ '(- *)-l[List all available profiles]' \ '(- *)-c[Start the specified profile, only if its interface is not currently up]:Network profile:all_profiles' \ '(- *)-u[Start specified profile]:Network profile:all_profiles' \ '(- *)-r[Disconnect and reconnect the specified profile]:Active profiles:up_profiles' \ '(- *)-R[Reconnect profile active on specified interface]:Active interface:up_ifaces' \ '(- *)-d[Take specified profile down]:Active profile:up_profiles' \ '(- *)-D[Take down profile active on specified interface]:Active interface:up_ifaces' \ '(- *)-a[Take all active profiles down]' \ '(- *)*:All options:all_options' if [[ ${#words} == 3 ]]; then case $words[2] in 'check-iface' | 'up') all_profiles;; 'reconnect' | 'down') up_profiles;; 'iface-recon' | 'iface-down') up_ifaces;; esac fi