Skip to content

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 --install again 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:

  1. Download these four files from the Powerlevel10k README: MesloLGS NF Regular.ttf, Bold.ttf, Italic.ttf, Bold Italic.ttf.
  2. Double-click each and click Install (this installs them for all of Windows).
  3. 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) — run ssh-add ~/.ssh/id_ed25519 (this also re-asks your passphrase after a reboot — that's the no-Keychain tradeoff), then try ssh -T git@github.com again. Still denied? The public key on GitHub's keys page doesn't match — re-copy it with clip.exe < ~/.ssh/id_ed25519.pub and 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.