# SPDX-License-Identifier: GPL-2.0 # Copyright (C) 2015-2019 Jason A. Donenfeld . All Rights Reserved. _wg_quick_completion() { local p i a search_paths old_glob search_paths=( /etc/wireguard ) old_glob="$(shopt -p nullglob)" shopt -s nullglob [[ $OSTYPE == *freebsd* || $OSTYPE == *darwin* ]] && search_paths+=( /usr/local/etc/wireguard ) if [[ $COMP_CWORD -eq 1 ]]; then COMPREPLY+=( $(compgen -W "up down" -- "${COMP_WORDS[1]}") ) elif [[ $COMP_CWORD -eq 2 ]]; then if [[ ${COMP_WORDS[1]} == up ]]; then for p in "${search_paths[@]}"; do for i in "$p"/*.conf; do i="${i##*/}"; i="${i%.conf}" mapfile -t a < <(compgen -W "$i" -- "${COMP_WORDS[2]}") COMPREPLY+=( "${a[@]}" ) done done mapfile -t a < <(compgen -f -X '!*.conf' -- "${COMP_WORDS[2]}") COMPREPLY+=( "${a[@]}" ) mapfile -t a < <(compgen -d -- "${COMP_WORDS[2]}") COMPREPLY+=( "${a[@]}" ) elif [[ ${COMP_WORDS[1]} == down ]]; then if [[ $OSTYPE == *openbsd* || $OSTYPE == *darwin* ]]; then for i in /var/run/wireguard/*.name; do i="${i##*/}"; i="${i%.name}" mapfile -t a < <(compgen -W "$i" -- "${COMP_WORDS[2]}") COMPREPLY+=( "${a[@]}" ) done else COMPREPLY+=( $(compgen -W "$(wg show interfaces)" -- "${COMP_WORDS[2]}") ) fi fi fi eval "$old_glob" } complete -o filenames -o nosort -F _wg_quick_completion wg-quick