From bdb1ea9e9d74a2c1a1ac9d02345b7ac633dbb8eb Mon Sep 17 00:00:00 2001 From: Joshua Gleitze Date: Thu, 4 Nov 2021 16:34:23 +0100 Subject: [PATCH] Make Completions Installable with Antibody (#263) --- README.md | 155 ++++++++++++----------- completion/{kubectx.zsh => _kubectx.zsh} | 0 completion/{kubens.zsh => _kubens.zsh} | 0 3 files changed, 82 insertions(+), 73 deletions(-) rename completion/{kubectx.zsh => _kubectx.zsh} (100%) rename completion/{kubens.zsh => _kubens.zsh} (100%) diff --git a/README.md b/README.md index 65e5b53..3800370 100644 --- a/README.md +++ b/README.md @@ -98,22 +98,23 @@ Active namespace is "default". There are several installation options: -- As kubectl plugins (macOS/Linux) -- macOS - - Homebrew (recommended) - - MacPorts -- Linux - - Debian - - Arch Linux - - Homebrew - - Manual installation +- [as kubectl plugins (macOS & Linux)](#kubectl-plugins-macos-and-linux) +- [with Homebrew (macOS & Linux)](#homebrew-macos-and-linux) +- [with MacPorts (macOS)](#macports-macos) +- [with apt (Debian)](#apt-debian) +- [with pacman (Arch Linux)](#pacman-arch-linux) +- [manually (macOS & Linux)](#manual-installation-macos-and-linux) + +If you like to add context/namespace information to your shell prompt (`$PS1`), you can try out [kube-ps1](https://github.com/jonmosco/kube-ps1). + ### Kubectl Plugins (macOS and Linux) -You can install and use [Krew](https://github.com/kubernetes-sigs/krew/) kubectl -plugin manager to get `kubectx` and `kubens`. **NOTE:** This will not install -shell completion scripts, if you want those, choose another installation method -below. +You can install and use the [Krew](https://github.com/kubernetes-sigs/krew/) kubectl +plugin manager to get `kubectx` and `kubens`. + +**NOTE:** This will not install the shell completion scripts. If you want them, choose another installation method +or install the scripts [manually](#manual-installation-macos-and-linux). ```sh kubectl krew install ctx @@ -122,33 +123,30 @@ kubectl krew install ns After installing, the tools will be available as `kubectl ctx` and `kubectl ns`. -### macOS +### Homebrew (macOS and Linux) -#### Homebrew +If you use [Homebrew](https://brew.sh/) you can install like this: -:confetti_ball: If you use [Homebrew](https://brew.sh/) you can install like this: - - brew install kubectx +```sh +brew install kubectx +``` This command will set up bash/zsh/fish completion scripts automatically. -- If you like to add context/namespace info to your shell prompt (`$PS1`), - I recommend trying out [kube-ps1](https://github.com/jonmosco/kube-ps1). -#### MacPorts +### MacPorts (macOS) If you use [MacPorts](https://www.macports.org) you can install like this: - sudo port install kubectx +```sh +sudo port install kubectx +``` -### Linux - -#### Debian +### apt (Debian) ``` bash sudo apt install kubectx ``` - Newer versions might be available on repos like [Debian Buster (testing)](https://packages.debian.org/buster/kubectx), [Sid (unstable)](https://packages.debian.org/sid/kubectx) @@ -156,7 +154,8 @@ Newer versions might be available on repos like testing/unstable repos, check out the [Debian Wiki](https://wiki.debian.org/DebianReleases)_): -#### Arch Linux + +### pacman (Arch Linux) Available as official Arch Linux package. Install it via: @@ -164,20 +163,10 @@ Available as official Arch Linux package. Install it via: sudo pacman -S kubectx ``` -#### Homebrew -:confetti_ball: If you use [Homebrew](https://brew.sh/) you can install like this: +### Manual Installation (macOS and Linux) - brew install kubectx - -This command will set up bash/zsh/fish completion scripts automatically. - -- If you like to add context/namespace info to your shell prompt (`$PS1`), - I recommend trying out [kube-ps1](https://github.com/jonmosco/kube-ps1). - -#### Manual - -Since `kubectx`/`kubens` are written in Bash, you should be able to install +Since `kubectx` and `kubens` are written in Bash, you should be able to install them to any POSIX environment that has Bash installed. - Download the `kubectx`, and `kubens` scripts. @@ -186,38 +175,6 @@ them to any POSIX environment that has Bash installed. - or save them to a directory, then create symlinks to `kubectx`/`kubens` from somewhere in your `PATH`, like `/usr/local/bin` - Make `kubectx` and `kubens` executable (`chmod +x ...`) -- Install bash/zsh/fish [completion scripts](completion/). - - For zsh: - The completion scripts have to be in a path that belongs to `$fpath`. Either link or copy them to an existing folder. - If using oh-my-zsh you can do as follows: - ```bash - mkdir -p ~/.oh-my-zsh/completions - chmod -R 755 ~/.oh-my-zsh/completions - ln -s /opt/kubectx/completion/kubectx.zsh ~/.oh-my-zsh/completions/_kubectx.zsh - ln -s /opt/kubectx/completion/kubens.zsh ~/.oh-my-zsh/completions/_kubens.zsh - ``` - Note that the leading underscore seems to be a convention. If completion doesn't work, add `autoload -U compinit && compinit` to your `.zshrc` (similar to [`zsh-completions`](https://github.com/zsh-users/zsh-completions/blob/master/README.md#oh-my-zsh)). - If not using oh-my-zsh, you could link to `/usr/share/zsh/functions/Completion` (might require sudo), depending on the `$fpath` of your zsh installation. - In case of error, calling `compaudit` might help. - - For bash: - ```bash - git clone https://github.com/ahmetb/kubectx.git ~/.kubectx - COMPDIR=$(pkg-config --variable=completionsdir bash-completion) - ln -sf ~/.kubectx/completion/kubens.bash $COMPDIR/kubens - ln -sf ~/.kubectx/completion/kubectx.bash $COMPDIR/kubectx - cat << FOE >> ~/.bashrc - - - #kubectx and kubens - export PATH=~/.kubectx:\$PATH - FOE - ``` - - For fish: - ```fish - mkdir -p ~/.config/fish/completions - ln -s /opt/kubectx/completion/kubectx.fish ~/.config/fish/completions/ - ln -s /opt/kubectx/completion/kubens.fish ~/.config/fish/completions/ - ``` Example installation steps: @@ -227,13 +184,65 @@ sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens ``` +If you also want to have shell completions, pick an installation method for the [completion scripts](completion/) that fits your system best: [`zsh` with `antibody`](#completion-scripts-for-zsh-with-antibody), [plain `zsh`](#completion-scripts-for-plain-zsh), [`bash`](#completion-scripts-for-bash) or [`fish`](#completion-scripts-for-fish). + +#### Completion scripts for `zsh` with [antibody](https://getantibody.github.io) + +Add this line to your [Plugins File](https://getantibody.github.io/usage/) (e.g. `~/.zsh_plugins.txt`): + +``` +ahmetb/kubectx path:completion kind:fpath +``` + +Depending on your setup, you might or might not need to call `compinit` or `autoload -U compinit && compinit` in your `~/.zshrc` after you load the Plugins file. If you use [oh-my-zsh](https://github.com/ohmyzsh/ohmyzsh), load the completions before you load `oh-my-zsh` because `oh-my-zsh` will call `compinit`. + +#### Completion scripts for plain `zsh` +The completion scripts have to be in a path that belongs to `$fpath`. Either link or copy them to an existing folder. + +Example with [`oh-my-zsh`](https://github.com/ohmyzsh/ohmyzsh): + +```bash +mkdir -p ~/.oh-my-zsh/completions +chmod -R 755 ~/.oh-my-zsh/completions +ln -s /opt/kubectx/completion/_kubectx.zsh ~/.oh-my-zsh/completions/_kubectx.zsh +ln -s /opt/kubectx/completion/_kubens.zsh ~/.oh-my-zsh/completions/_kubens.zsh +``` + +If completion doesn't work, add `autoload -U compinit && compinit` to your `.zshrc` (similar to [`zsh-completions`](https://github.com/zsh-users/zsh-completions/blob/master/README.md#oh-my-zsh)). + +If you are not using [`oh-my-zsh`](https://github.com/ohmyzsh/ohmyzsh), you could link to `/usr/share/zsh/functions/Completion` (might require sudo), depending on the `$fpath` of your zsh installation. + +In case of errors, calling `compaudit` might help. + +#### Completion scripts for `bash` + +```bash +git clone https://github.com/ahmetb/kubectx.git ~/.kubectx +COMPDIR=$(pkg-config --variable=completionsdir bash-completion) +ln -sf ~/.kubectx/completion/kubens.bash $COMPDIR/kubens +ln -sf ~/.kubectx/completion/kubectx.bash $COMPDIR/kubectx +cat << EOF >> ~/.bashrc + + +#kubectx and kubens +export PATH=~/.kubectx:\$PATH +EOF +``` + +#### Completion scripts for `fish` + +```fish +mkdir -p ~/.config/fish/completions +ln -s /opt/kubectx/completion/kubectx.fish ~/.config/fish/completions/ +ln -s /opt/kubectx/completion/kubens.fish ~/.config/fish/completions/ +``` + ----- ### Interactive mode If you want `kubectx` and `kubens` commands to present you an interactive menu -with fuzzy searching, you just need to [install -`fzf`](https://github.com/junegunn/fzf) in your PATH. +with fuzzy searching, you just need to [install `fzf`](https://github.com/junegunn/fzf) in your `$PATH`. ![kubectx interactive search with fzf](img/kubectx-interactive.gif) diff --git a/completion/kubectx.zsh b/completion/_kubectx.zsh similarity index 100% rename from completion/kubectx.zsh rename to completion/_kubectx.zsh diff --git a/completion/kubens.zsh b/completion/_kubens.zsh similarity index 100% rename from completion/kubens.zsh rename to completion/_kubens.zsh