DEV Community

Cover image for ZSH + Oh My ZSH! on Windows with WSL
Camilo Martinez
Camilo Martinez

Posted on • Edited on

ZSH + Oh My ZSH! on Windows with WSL

1. Install WSL

There are plenty of good articles about how to install WSL so I'm not going to detail about this step.

The easy way, install Ubuntu from the Microsoft Store

2. Ubuntu

Search the Ubuntu icon on the start menu and open the terminal (you can also use Windows Terminal)

Update the package source list and updates all the packages presently installed, with this command.



sudo apt update && sudo apt upgrade


Enter fullscreen mode Exit fullscreen mode

This can take a while depending on how many packages going to need to be updated. Maybe it's a good idea to take a rest.

waiting

3. ZSH

Bash is the default Ubuntu shell, but ZSH is in another league with his productivity boosts. So, we are going to install ZSH over Bash.

Install



sudo apt install zsh


Enter fullscreen mode Exit fullscreen mode

Verify the installed version.



zsh --version
zsh 5.8.1 (x86_64-ubuntu-linux-gnu)


Enter fullscreen mode Exit fullscreen mode

Close and reopen the terminal, to update those changes.

4. Oh my zsh!

Install

Add superpowers to zsh installing Oh my zsh! running this command.



sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"


Enter fullscreen mode Exit fullscreen mode

Default

Answer y to change the default shell.



Time to change your default shell to zsh:
Do you want to change your default shell to zsh? [Y/n] y


Enter fullscreen mode Exit fullscreen mode

Fonts

Download and install manually the Meslo Nerd Fonts to include all glyphs and symbols that Powerlevel10k may need

Copy the .ttf files inside ~/.fonts folder. Create one if you don't already have one.

And run these commands:



sudo apt install fontconfig
fc-cache -fv


Enter fullscreen mode Exit fullscreen mode

Theme

There are a lot of themes but my favorite is Powerlevel10k because is easy to set up and use.



git clone https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k


Enter fullscreen mode Exit fullscreen mode

On the ~/.zshrc file add this additional configuration



ZSH_THEME="powerlevel10k/powerlevel10k"
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(history)
POWERLEVEL9K_SHORTEN_DIR_LENGTH=1

export LS_COLORS="rs=0:no=00:mi=00:mh=00:ln=01;36:or=01;31:di=01;34:ow=04;01;34:st=34:tw=04;34:pi=01;33:so=01;33:do=01;33:bd=01;33:cd=01;33:su=01;35:sg=01;35:ca=01;35:ex=01;32:"


Enter fullscreen mode Exit fullscreen mode

Restart the terminal and type p10k configure.

Wizard

Plugins

Oh My zsh! have a lot of plugins to use. It's recommended to explore the options and use what is good for your needs.

I've already installed a lot related to software development and other ones to add more functionalities. Running these commands:



git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/Pilaton/OhMyZsh-full-autoupdate.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/ohmyzsh-full-autoupdate


Enter fullscreen mode Exit fullscreen mode

And now edit the ~/.zshrc file and add it inside the plugins property (don't use commas as separators)



ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor root line)
ZSH_HIGHLIGHT_PATTERNS=('rm -rf *' 'fg=white,bold,bg=red')

plugins=(
    adb
    command-not-found
    extract
    deno
    docker
    git
    github
    gitignore
    history-substring-search
    node
    npm
    nvm
    yarn
    volta
    vscode
    sudo
    web-search
    z
    zsh-autosuggestions
    zsh-syntax-highlighting
    ohmyzsh-full-autoupdate
)


Enter fullscreen mode Exit fullscreen mode

If you are using NVM take care of following this configuration to avoid slowing the zsh start-up and this configuration to speed up the compinit

⚠ If you have done previous package configurations, alias definitions, or something else on your ~/.basrc previous ZSH installation you need to move those manually to ~/.zshrc.

4. Terminals

To use the same terminal inside VSCode and Windows Terminal follow these configurations.

VS Code

Add these properties to the user setttings.json



{ 
    ...
+   "terminal.integrated.fontFamily": "MesloLGS NF",
+   "terminal.integrated.fontSize": 12,
+   "terminal.integrated.shellIntegration.enabled": true,
+   "terminal.integrated.defaultProfile.windows": "Git Bash",
+   "terminal.integrated.defaultProfile.linux": "zsh",
    ...
}


Enter fullscreen mode Exit fullscreen mode

Microsoft Terminal

Add these configurations to the Ubuntu terminal.



{
    "profiles": {
        "defaults": {},
        "list": [
                "colorScheme": "Ubuntu-ColorScheme",
                "cursorShape": "filledBox",
+               "font": {
+                   "face": "MesloLGS NF",
+                   "size": 10
+               },
                "guid": "{57ff1822-68a9-4a3f-90c5-a55c8557df50}",
                "hidden": false,
                "icon": "https://assets.ubuntu.com/v1/49a1a858-favicon-32x32.png",
                "name": "Ubuntu",
+               "commandline": "wsl",
+               "startingDirectory": "~/Developer"
            },
        ]
    }
}


Enter fullscreen mode Exit fullscreen mode

That’s All Folks!
Happy Coding 🖖

beer

Top comments (6)

Collapse
 
birukjeldu profile image
Biruk Jeldu

This was very helpful. Thanks!

Collapse
 
krlz profile image
krlz

I never tried ZSH before but I will give it a try thanks

Collapse
 
equiman profile image
Camilo Martinez
Collapse
 
novilfahlevy profile image
Novil Fahlevy

The p10k configure command not working, it outputs: zsh: command not found: p10k. Did I miss something?

Collapse
 
equiman profile image
Camilo Martinez

Maybe you need restart your terminal before running the p10k command.

Collapse
 
jscraftsman profile image
Gervel Giva

I encountered this issue, this seem to solved my problem:

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k

echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>~/.zshrc

exec zsh