- Open PowerShell as Administrator and run:
wsl --install
- Restart your computer if prompted.
- Open PowerShell and install Ubuntu:
wsl --install -d Ubuntu
- Once installed, search for Ubuntu in the Start Menu and open it.
- Set up your UNIX username and password (this is different from your Windows account).
After opening Ubuntu, update and upgrade packages:
sudo apt update && sudo apt upgrade -y
Install essential tools:
sudo apt install -y curl git zsh wget
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Press Y when asked to change your default shell.
Enhance your Zsh experience with the following plugins:
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
Edit the Zsh configuration file:
nano ~/.zshrc
Find the plugins=
line and modify it:
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)
Save and exit (Ctrl + X, then Y, then Enter), then apply the changes:
source ~/.zshrc
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
- Open the Zsh configuration file:
nano ~/.zshrc
- Find the line:
Replace it with:
ZSH_THEME="robbyrussell"
ZSH_THEME="powerlevel10k/powerlevel10k"
- Save and exit.
- Apply changes:
source ~/.zshrc
- Restart your terminal to begin Powerlevel10k configuration and follow the prompts.
sudo apt install -y neovim
echo "export EDITOR=nvim" >> ~/.zshrc
source ~/.zshrc
-
Install vim-plug (plugin manager for Neovim):
curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
-
Open Neovim and edit the config file:
nvim ~/.config/nvim/init.vim
-
Add the following basic plugin setup:
call plug#begin() Plug 'morhetz/gruvbox' Plug 'tpope/vim-sensible' Plug 'junegunn/fzf.vim' call plug#end() syntax on colorscheme gruvbox set number
-
Save and exit (Esc, then type
:wq
). -
Install the plugins inside Neovim:
:PlugInstall
-
Restart Neovim for changes to take effect.
To use the same extensions in both environments:
- Open VS Code on Windows.
- Sign in to your GitHub or Microsoft account to enable Settings Sync.
- Open VS Code inside WSL using:
<<<<<<<<< Temporary merge branch 1 ========= git config --global user.name "YourName" git config --global user.email "youremail@example.com"
- Check if Git is installed:
git --version
- Clone a GitHub repository:
git clone https://github.com/yourusername/yourrepository.git
- Check Ubuntu version:
lsb_release -a
- List files in home directory:
ls -la ~
- Check installed Node.js version:
node -v
- Display system info using Neofetch:
sudo apt install -y neofetch neofetch
Your Ubuntu files are stored inside WSL. You can access them in Windows File Explorer by typing:
\\wsl.localhost\Ubuntu\home\<your-UNIX-username>
Or navigate to:
C:\Users\YourWindowsUsername\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\rootfs\home\<your-UNIX-username>
-
Move your old project folders to:
/home/<your-ubuntu-username>/
-
Open VS Code and navigate to the folder inside WSL.
-
Run it in Ubuntu terminal using:
cd ~/your-project-folder >>>>>>>>> Temporary merge branch 2 code .
-
Sign in again and enable syncing.
-
Your extensions and settings should now be synced!
- Zsh is an interactive shell for running commands, while Neovim is a powerful text editor.
- Zsh helps with command-line efficiency, auto-suggestions, and plugins.
- Neovim is optimized for coding, with syntax highlighting, plugins, and customization.
- Using Both: You can configure Neovim as your Zsh editor by setting:
This allows you to edit files inside your terminal seamlessly.
export EDITOR=nvim
Pros: ✅ Neovim as default editor in Zsh streamlines workflow. ✅ Zsh enhances command-line experience.
C:\Users\YourWindowsUsername\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\rootfs\home\<your-UNIX-username>
======= Cons: ❌ Using both might be overwhelming for beginners. ❌ Requires time to configure properly.
✅ Now you have the perfect dual-terminal setup: Windows for daily tasks & Ubuntu for development! 🚀
Since I have been often using multiple terminal tabs for your full-stack development, tmux is a great addition. Here’s why: It is part of my learning experiences of things are 😁
You can divide your terminal into multiple panes and navigate between them easily. Example use case: Have backend logs on one side and your frontend dev server on another.
If you close your terminal by mistake, your running processes (like servers, databases, etc.) won’t die! You can reattach to them.
You don’t have to constantly open and close new terminal tabs. Instead, just split panes inside tmux and jump between them with key bindings.
Since you already have Zsh + Oh My Zsh + Powerlevel10k, I’d add tmux and configure it to work seamlessly with your current setup.
1️⃣ Install tmux
sudo apt update && sudo apt install tmux -y
2️⃣ Configure tmux for a Better Experience
Create a ~/.tmux.conf
file to customize it:
nano ~/.tmux.conf
Paste the following configuration:
# Set better keybindings
set -g mouse on # Enable mouse support for easier pane resizing
unbind C-b # Unbind default tmux prefix (Ctrl+b)
set -g prefix C-a # Set "Ctrl + a" as the new prefix (easier to use)
bind C-a send-prefix # Let you send Ctrl+A to applications if needed
# Split panes with shortcuts
bind | split-window -h # Ctrl+A then | → Split horizontally
bind - split-window -v # Ctrl+A then - → Split vertically
# Switch panes with arrow keys
bind -r Left select-pane -L
bind -r Right select-pane -R
bind -r Up select-pane -U
bind -r Down select-pane -D
# Resize panes with Shift + Arrow keys
bind -r S-Left resize-pane -L 5
bind -r S-Right resize-pane -R 5
bind -r S-Up resize-pane -U 5
bind -r S-Down resize-pane -D 5
# Reload config with Ctrl+A then r
bind r source-file ~/.tmux.conf \; display-message "Tmux config reloaded!"
Save & exit (Ctrl+X → Y → Enter).
3️⃣ Reload tmux Configuration
tmux source ~/.tmux.conf
4️⃣ Start a New tmux Session
tmux
-
Mouse Support:
set -g mouse on
- Enables mouse support for easier pane resizing and navigation.
-
Prefix Key:
set -g prefix C-a
- Changes the default prefix key from
Ctrl+b
toCtrl+a
for easier access. unbind C-b
unbinds the default prefix key.
- Changes the default prefix key from
-
Send Prefix:
bind C-a send-prefix
- Allows you to send
Ctrl+a
to applications if needed.
- Allows you to send
-
Split Panes:
bind | split-window -h
:Ctrl+a
then|
splits the window horizontally.bind - split-window -v
:Ctrl+a
then-
splits the window vertically.
-
Switch Panes:
bind -r Left select-pane -L
:Ctrl+a
then Left Arrow switches to the left pane.bind -r Right select-pane -R
:Ctrl+a
then Right Arrow switches to the right pane.bind -r Up select-pane -U
:Ctrl+a
then Up Arrow switches to the upper pane.bind -r Down select-pane -D
:Ctrl+a
then Down Arrow switches to the lower pane.
-
Resize Panes:
bind -r S-Left resize-pane -L 5
:Shift + Left Arrow
resizes the pane to the left by 5 units.bind -r S-Right resize-pane -R 5
:Shift + Right Arrow
resizes the pane to the right by 5 units.bind -r S-Up resize-pane -U 5
:Shift + Up Arrow
resizes the pane upwards by 5 units.bind -r S-Down resize-pane -D 5
:Shift + Down Arrow
resizes the pane downwards by 5 units.
-
Reload Configuration:
bind r source-file ~/.tmux.conf \; display-message "Tmux config reloaded!"
:Ctrl+a
thenr
reloads the tmux configuration file and displays a message.
Now, try these:
- Split panes:
Ctrl + A
then|
(vertical split)Ctrl + A
then-
(horizontal split)
- Switch between panes:
Ctrl + A
then arrow keys - Resize panes: Shift + Arrow keys
- Detach from tmux (without closing it):
Ctrl + A
thenD
- Reattach to your session after closing the terminal:
tmux attach-session -t 0