if command -v kubectl >/dev/null 2>&1; then
  source <(kubectl completion bash)
  alias k="kubectl"
  alias kcontext="kubectl config use-context"
  kns() {
    if [[ $# -eq 0 ]]; then
      printf '%s\n' "$(kubectl config view --minify -o jsonpath='{.contexts[0].context.namespace}')"
    else
      local ns="${1?Namespace required}"
      kubectl config set-context --current --namespace "$ns"
      printf 'Switched current context to namespace: %s\n' "$ns"
    fi
  }
  _kns_completion() {
    local cur
    cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(kubectl get namespaces -o name | sed 's|namespace/||')" -- "$cur") )
  }
  _kcontext_completion() {
    local cur
    cur=${COMP_WORDS[COMP_CWORD]}
    COMPREPLY=( $(compgen -W "$(kubectl config get-contexts -o name)" -- $cur) )
  }
  complete -F __start_kubectl k
  complete -F _kns_completion kns
  complete -F _kcontext_completion kcontext
fi