Add bash completion script.
[tinc] / bash_completion.d / tinc
1 _tinc() {
2         local cur prev opts confvars commands nets
3         COMPREPLY=()
4         cur="${COMP_WORDS[COMP_CWORD]}"
5         prev="${COMP_WORDS[COMP_CWORD-1]}"
6         opts="-c -d -D -K -n -o -L -R -U --config --no-detach --debug --net --option --mlock --logfile --pidfile --chroot --user --help --version"
7         confvars="Address AddressFamily BindToAddress BindToInterface Broadcast Cipher ClampMSS Compression ConnectTo DecrementTTL Device DeviceType Digest DirectOnly ECDSAPrivateKeyFile ECDSAPublicKey ECDSAPublicKeyFile ExperimentalProtocol Forwarding GraphDumpFile Hostnames IffOneQueue IndirectData Interface KeyExpire LocalDiscovery MACExpire MACLength MaxOutputBufferSize MaxTimeout Mode Name PMTU PMTUDiscovery PingInterval PingTimeout Port PriorityInheritance PrivateKeyFile ProcessPriority Proxy PublicKeyFile ReplayWindow StrictSubnets Subnet TCPOnly TunnelServer UDPRcvBuf UDPSndBuf VDEGroup VDEPort Weight"
8         commands="config connect debug disconnect dump edit export export-all generate-ecdsa-keys generate-keys generate-rsa-keys help import info init log pcap pid purge reload restart retry start stop top version"
9
10         case ${prev} in
11                 -c|--config)
12                 compopt -o dirnames 2>/dev/null
13                 return 0
14                 ;;
15                 -n|--net)
16                 nets=""
17                 pushd /etc/tinc >/dev/null 2>/dev/null
18                 for dir in *; do
19                         if [[ -f "$dir/tinc.conf" ]]; then
20                                 nets="$nets $dir"
21                         fi
22                 done
23                 popd >/dev/null 2>/dev/null
24                 COMPREPLY=( $(compgen -W "${nets}" -- ${cur}) )
25                 return 0
26                 ;;
27                 -o|--option)
28                 compopt -o nospace
29                 COMPREPLY=( $(compgen -W "${confvars}" -- ${cur}) )
30                 if [[ ${#COMPREPLY[*]} == 1 ]] ; then
31                         COMPREPLY=$COMPREPLY=
32                 fi
33                 return 0
34                 ;;
35                 -U|--user)
36                 COMPREPLY=( $(compgen -u ${cur}) )
37                 return 0
38                 ;;
39                 --logfile|--pidfile)
40                 compopt -o filenames 2>/dev/null
41                 COMPREPLY=( $(compgen -f ${cur}) )
42                 return 0
43         esac
44         if [[ ${cur} == -* ]] ; then
45                 COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
46                 return 0
47         fi
48         if [[ $1 == "d" ]]; then
49                 if [[ -z ${cur} ]] ; then 
50                         COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
51                 fi
52                 return 0
53         fi
54         COMPREPLY=( $(compgen -W "${commands}" -- ${cur}) )
55         case $prev in
56                 config)
57                 COMPREPLY=( $(compgen -W "get set add del ${confvars}" -- ${cur}) )
58                 return 0
59                 ;;
60                 get|set|add|del)
61                 COMPREPLY=( $(compgen -W "${confvars}" -- ${cur}) )
62                 ;;
63                 dump)
64                 COMPREPLY=( $(compgen -W "nodes edges subnets connections graph" -- ${cur}) )
65                 return 0
66                 ;;
67         esac
68         if [[ -z ${cur} ]] ; then 
69                 COMPREPLY=( $(compgen -W "${opts} ${commands}" -- ${cur}) )
70         fi
71         return 0
72 }
73
74 _tincd() {
75         _tinc d;
76 }
77
78 _tincctl() {
79         _tinc ctl;
80 }
81
82 complete -F _tincd tincd
83 complete -F _tincctl tincctl