Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save dinhducit/b384f8963b33f8c89639b14b15d72bf5 to your computer and use it in GitHub Desktop.
Save dinhducit/b384f8963b33f8c89639b14b15d72bf5 to your computer and use it in GitHub Desktop.
WSL, zsh and Powerlevel10k

WSL, zsh and Powerlevel9k

Beautiful command line interface for Windows 10 optimized for working with git and Kubernetes.

WSL

Pre-reqs

  • Windows 10
  • Windows Subsystem for Linux. I use Ubuntu 18.04

Install required nerd-fonts

Install Powerline, Windows compatible font from this repo https://github.com/ryanoasis/nerd-fonts. You need to install version 1.2.0 since version 2.0.0 don't work with Windows.

Download this asset https://github.com/ryanoasis/nerd-fonts/releases/download/v1.2.0/DejaVuSansMono.zip. Unzip file and install the DejaVu Sans Mono for Powerline Nerd Font Complete Mono Windows Compatible.ttf font by right-clicking on the file and select install.

Change WSL font

Open the WSL options and change font to DejaVuSansMonoPowerline NF DejaVuSansMonoPowerline NF

Install and configure zsh

Install zsh

sudo apt install zsh

Install oh-my-zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

Install Powerlevel9k theme

git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k

Configure oh-my-zsh

nano ~/.zshrc

Open .zsh in nano and change/add the following settings

ZSH_THEME="powerlevel9k/powerlevel9k"
POWERLEVEL9K_MODE='nerdfont-complete'
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir dir_writable vcs)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status kubecontext time)
POWERLEVEL9K_PROMPT_ON_NEWLINE=true
# If you have installed Windows 10 1903 then you can skip the next line
POWERLEVEL9K_COLOR_SCHEME='light'

Restart your WSL command prompt and it will look great

Kubernetes tools

kubectl

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.14.2/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl

Add your colon delimited list of Kubernetes config files to KUBECONFIG env variable in .zshrc file

nano ~/.zshrc

Add the follwing at the end of the file and change paths to your config files. I choose to point them to my Windows k8s config files that I also use in Powershell

export KUBECONFIG="/mnt/c/dev/kubernetes/rnd-admin.conf:/mnt/c/Users/janl/.kube/config"

Add completion

echo "if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc

Add shorthand alias for kubectl

nano ~/.zshrc

Add the following to the end of the .zshrc file

alias k=kubectl
complete -F __start_kubectl k

Restart your WSL command prompt and you will see the Kubernetes context and have code completion for both kubectl and the alias k

helm

wget -q https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64.tar.gz
tar xvzf helm-v2.14.0-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin
helm init -c

#Cleanup
rm helm-v2.14.0-linux-amd64.tar.gz
rm -r linux-amd64

Add completion

echo "if [ $commands[helm] ]; then source <(helm completion zsh); fi" >> ~/.zshrc

Restart your WSL command prompt and you will have helm command with completion

kubens and kubectx

Tools for fast switching between clusters and namespaces

sudo git clone https://github.com/ahmetb/kubectx /opt/kubectx
sudo ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
sudo ln -s /opt/kubectx/kubens /usr/local/bin/kubens

Add completion

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
ln -s /opt/kubectx/completion/kubens.zsh ~/.oh-my-zsh/completions/_kubens
rm -f ~/.zcompdump; compinit

Add kns and kctx aliases to your ~/.zshrc file

alias kns=kubens
alias kctx=kubectx

Restart your WSL command prompt and you will have kubens and kubectx available with completion.

Useful links

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment