Vibe coding setup for Windows (WSL + Ubuntu)
Oct 24, 2026
Post 3 of Set up your Mac or Windows machine for vibe coding. You need: Windows 11 (or Windows 10, build 19041+), permission to install software and restart, ~90–120 minutes, and a free GitHub account. If terminal, prompt, clone and commit are new words, read the primer first. Mac user? Your track is here.
Why Linux on a Windows machine? WSL (Windows Subsystem for Linux) runs a
genuine Ubuntu terminal inside Windows, and it's what OpenCode officially
recommends on Windows. Your projects will live in Ubuntu's home folder (~/…) —
not C:\ — which keeps them fast and identical to how the Mac track works.
Do the steps in order.
1. Install WSL — Windows grows a Linux side
Open PowerShell as administrator: Start menu, type powershell, right-click
Run as administrator, then:
wsl --install
When it finishes, restart your PC — this is required, not optional. After the restart an Ubuntu window opens and asks you to create a Linux username and password. This is separate from Windows: pick something simple. When you type the password it's invisible — that's normal, type it blind.
Reopen Ubuntu any time from the Start menu (type Ubuntu).
When this goes wrong:
- "Please restart your computer" loops or features not enabling — the reboot in the middle wasn't optional. Let Windows fully restart, reopen PowerShell, and run
wsl --installagain if Ubuntu didn't appear.- Install stuck at 0% — run
wsl --install --web-download -d Ubuntu, per Microsoft's own note.- Errors mentioning virtualization / "Virtual Machine Platform" — your PC's processor virtualization is switched off in the BIOS/UEFI firmware. Search "
enable virtualization BIOS" (Dell, HP, Lenovo, ASUS all have official pages), flip it on, and rerun wsl --install. This is the one step in the series that depends on your hardware vendor.
Source: learn.microsoft.com/windows/wsl/install · checked 2026-10-24 · ⏳ clean-VM stamp pending
2. Update Ubuntu; install git and curl
Inside the Ubuntu terminal (black window, dollar-sign prompt):
sudo apt update && sudo apt upgrade -y
sudo apt install -y git curl build-essential
git --version
sudo means "as administrator" (it asks for the Ubuntu password you created;
typing is invisible). apt is Ubuntu's installer — the Ubuntu twin of the Mac
track's Homebrew. build-essential is a small toolkit some install scripts
assume exists; two minutes now saves a confusing failure later.
Source: ubuntu.com/server/docs · checked 2026-10-24 · ⏳ clean-VM stamp pending
3. The icon font — installed on Windows, used by Windows Terminal
The fancy prompt in steps 4–5 uses symbols that need a font containing them. Fonts are a Windows-side thing, so this step happens outside Ubuntu:
- Download these four files from the
Powerlevel10k README:
MesloLGS NF Regular.ttf,Bold.ttf,Italic.ttf,Bold Italic.ttf. - Double-click each and click Install (this installs them for all of Windows).
- In Windows Terminal: Ctrl+, to open Settings → click the Ubuntu
profile (or Defaults) → Appearance → Font face →
MesloLGS NF→ Save.
Source: github.com/romkatv/powerlevel10k (Fonts) · checked 2026-10-24 · ⏳ clean-VM stamp pending
4. zsh + Oh My Zsh — inside Ubuntu
Ubuntu's default shell is bash; this installs zsh and the Oh My Zsh
framework. Answer yes when it offers to make zsh your default shell.
sudo apt install -y zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
If it doesn't offer, run chsh -s $(which zsh). Close the Ubuntu window and
reopen it so the new shell takes over — the prompt changes slightly. That's
you in zsh.
Source: ohmyz.sh · checked 2026-10-24 · ⏳ clean-VM stamp pending
5. Two plugins, then Powerlevel10k — the prompt that pays rent
Same two helpers as the Mac track: grey autosuggestions as you type, Tab completion. Then the theme.
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-completions
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
nano ~/.zshrc
In nano, make these two lines read:
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git zsh-autosuggestions zsh-completions)
Save with Ctrl-O, Enter, exit with Ctrl-X, then reload:
exec zsh
The configuration wizard starts on its own — pick Rainbow and accept the
suggestions; redo any time with p10k configure. (It's the most popular zsh
theme by a wide margin; development has slowed, but it's stable.)
When this goes wrong: little boxes or question marks in the prompt — the font from step 3 isn't set on the Ubuntu profile in Windows Terminal. Redo step 3.3, close and reopen the Ubuntu tab.
Source: github.com/romkatv/powerlevel10k (Oh My Zsh install), zsh-autosuggestions · checked 2026-10-24 · ⏳ clean-VM stamp pending
6. VS Code on Windows, with the WSL bridge
Install VS Code on Windows like any app. Then give it the bridge into Ubuntu: open VS Code → Extensions (Ctrl+Shift+X) → search WSL → install the one published by Microsoft.
Now, from the Ubuntu terminal, this one command opens your Linux files in the Windows-side editor:
code .
(First run downloads a small server into Ubuntu — let it.) You'll use VS Code as a comfortable viewer for what the agent edits; all typing stays in the Ubuntu terminal.
Source: code.visualstudio.com/docs/remote/wsl · checked 2026-10-24 · ⏳ clean-VM stamp pending
7. SSH key in Ubuntu — Windows has no Keychain, so do this instead
An SSH key is a pair of files: the public half goes to GitHub, the private half never leaves your machine. Ubuntu inside WSL has no equivalent of the Mac's Keychain, so instead you'll run a tiny agent — a key-keeper that lives in each terminal session — and teach git's SSH to use it.
ssh-keygen -t ed25519 -C "you@example.com"
Press Enter to accept the location; a passphrase is recommended but optional here (if you set one, the agent below asks for it once per terminal session).
cat > ~/.ssh/config <<'EOF'
Host github.com
AddKeysToAgent yes
IdentityFile ~/.ssh/id_ed25519
EOF
cat >> ~/.zshrc <<'EOF'
# keep an ssh-agent running in each terminal so git can use my key
if [ -z "$SSH_AUTH_SOCK" ]; then
eval "$(ssh-agent -s)" >/dev/null
fi
EOF
exec zsh
ssh-add ~/.ssh/id_ed25519
Now give GitHub the public half. WSL can reach the Windows clipboard directly
(clip.exe), then open
github.com/settings/keys → New SSH key →
title it Windows PC, paste, Add SSH key:
clip.exe < ~/.ssh/id_ed25519.pub
The proof — this must say hi to you, by username:
ssh -T git@github.com
When this goes wrong:
git@github.com: Permission denied (publickey)— runssh-add ~/.ssh/id_ed25519(this also re-asks your passphrase after a reboot — that's the no-Keychain tradeoff), then tryssh -T git@github.comagain. Still denied? The public key on GitHub's keys page doesn't match — re-copy it withclip.exe < ~/.ssh/id_ed25519.puband replace the old entry.
Source: docs.github.com — connecting to GitHub with SSH · checked 2026-10-24 · ⏳ clean-VM stamp pending
Checkpoint — and the payoff
You should now have: Ubuntu opening into a colorful prompt, git --version
printing, VS Code opening your Linux home with code ., and
ssh -T git@github.com saying hi. That's every dependency for the last post:
→ Your first agent run (OpenCode + OpenRouter)
Stuck on a step? Open an issue at github.com/napjoseph/napjose.ph with the step number and the exact error text — it goes straight into the verification log.