Skip to content

Instantly share code, notes, and snippets.

@kokoye2007
Last active May 26, 2026 12:56
Show Gist options
  • Select an option

  • Save kokoye2007/e8d30985faca6292a50bdd3b0409105f to your computer and use it in GitHub Desktop.

Select an option

Save kokoye2007/e8d30985faca6292a50bdd3b0409105f to your computer and use it in GitHub Desktop.
Vibe Code Tours — student setup (Linux/macOS/WSL): nvm+Node22, uv+Python3.12, git, Claude Code + verify

Vibe Code Tours — Setup Guide

Get your machine ready before Chapter 1. ~45–60 min (90 if new to the terminal). Works on Linux, macOS, and Windows (via WSL).

You'll install: a code editor, Node, Python, Git, and Claude Code — then verify it all.


Fast path (one command)

If you're comfortable in a terminal, this does everything + verifies:

curl -fsSL https://gist.githubusercontent.com/kokoye2007/e8d30985faca6292a50bdd3b0409105f/raw/student-setup.sh | bash

It's safe to re-run. At the end you want: Passed: 6 Failed: 0.

Windows: first install WSL (see Step 0 below), then run that command inside Ubuntu.

If it all passes — skip to Step 5 (editor) and Step 6 (GitHub), which the script doesn't do for you. Otherwise follow the manual steps.


Step 0 — Windows only: install WSL

Native Windows isn't supported directly — you run everything inside WSL (a real Linux inside Windows).

In PowerShell (Run as Administrator):

wsl --install

Reboot. Open Ubuntu from the Start menu. Everything below runs in that Ubuntu window.

Verify:

wsl --status     # (in PowerShell)
uname -a         # (in Ubuntu — should say Linux)

macOS / Linux users: skip this step.


Step 1 — Node.js (via nvm)

We use nvm (Node Version Manager) so everyone runs the same Node.

# install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

# CLOSE the terminal, open a NEW one, then:
nvm install --lts
nvm use --lts
nvm alias default node

# verify
node --version    # v22.x (or v20+)
npm --version     # 10.x+

#1 setup mistake: forgetting to close + reopen the terminal after installing nvm. Do it.


Step 2 — Python (via uv)

uv installs Python and manages it.

# install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# restart terminal OR: source ~/.bashrc   (or ~/.zshrc on mac)
uv python install 3.12

# verify
python3 --version   # Python 3.12.x
uv --version        # uv 0.x

Step 3 — Git

# Linux / WSL
sudo apt update && sudo apt install -y git

# macOS
xcode-select --install     # provides git, or: brew install git

# verify
git --version       # 2.40+

Step 4 — Claude Code

curl -fsSL https://claude.ai/install.sh | bash

# if "claude: command not found" → close terminal, open new one
claude --version    # 2.x

# first contact (it'll open your browser to log in):
claude "Say hello in one sentence."

A friendly reply = your install, network, and account all work.


Step 5 — Code editor

Pick one (both are free, both are VS Code-based, so the same extensions work in either):

Download, install with default options, open once to confirm it launches.

Recommended extensions (install in either editor)

Open the Extensions panel (Ctrl/Cmd+Shift+X), search each, install:

Extension Why
Python (ms-python.python) Python language support, run/debug
ESLint + Prettier JS/TS linting + auto-format
GitLens See git history/blame inline
Error Lens Errors shown inline, not just underlined
Markdown All in One The Tour writes a lot of markdown
GitHub Pull Requests Manage PRs without leaving the editor
Path Intellisense Autocomplete file paths

Antigravity (and other VS Code forks) may pull extensions from the Open VSX registry instead of Microsoft's — all the above are on both, so search-and-install works the same.


Step 6 — GitHub account + SSH

The riskiest step — don't skip the verification at the end.

  1. Create a free account: https://github.com (note your username)
  2. Generate an SSH key:
    ssh-keygen -t ed25519 -C "[email protected]"
    # press Enter through the prompts
  3. Copy your public key (the .pub one — never share the other):
    cat ~/.ssh/id_ed25519.pub
  4. GitHub → Settings → SSH and GPG keys → New SSH key → paste it.
  5. Verify: Success looks like: Hi <username>! You've successfully authenticated...

Never share the private key (~/.ssh/id_ed25519, the file without .pub).


Step 7 — Verify everything

Run the verifier (the fast-path script does this automatically at the end):

curl -fsSL https://gist.githubusercontent.com/kokoye2007/e8d30985faca6292a50bdd3b0409105f/raw/student-setup.sh | bash

Target: Passed: 6 Failed: 0.

Manual check if you prefer:

node --version && npm --version && python3 --version && \
uv --version && claude --version && git --version

All should print a version with no errors.


Troubleshooting

Symptom Fix
nvm: command not found Close terminal, open new one. Or source ~/.bashrc (mac: ~/.zshrc).
claude: command not found Close terminal, open new one. ~90% of cases.
command not found (anything) right after installing Close terminal, open new one — PATH updates on new shells.
node/uv not found after install Restart terminal. Still missing → re-run the install step.
Windows: nothing works in CMD/PowerShell You must run inside WSL/Ubuntu, not native Windows.
ssh -T [email protected] says "Permission denied" Re-check you pasted the .pub key into GitHub, and used the right account.
sudo: command not found (macOS) Drop sudo — use brew install ... instead.
Install script blocked Antivirus or corporate proxy. Try a personal network.
Slow / dropping connection A stable connection matters for the installs. Find better wifi for the ~1hr setup.

Still stuck? Post the exact error output in the cohort channel #setup-help. Screenshot or copy-paste — "it doesn't work" is hard to help; the exact error is easy.


What you'll have when done

  • VS Code (or Cursor)
  • Node 22 + npm
  • Python 3.12 (via uv)
  • Git + GitHub SSH connected
  • Claude Code, running its first command
  • All 6 verify checks green

That's the one-time tax. Pay it once, then you never touch it again. See you in Chapter 1.


Optional — other AI coding tools (free / open-source)

Not required for the course. Claude Code is our default. But the Tour is about the landscape, not one tool — and Chapter 7 explores alternatives. These are all free + open-source; install any you're curious about. Each needs its own provider account / API key (some have free tiers).

Tool License Install Needs
OpenCode MIT curl -fsSL https://opencode.ai/install | bash (or npm i -g opencode-ai) Any model provider (Anthropic, OpenAI, local, etc.)
Codex CLI Apache-2.0 npm i -g @openai/codex OpenAI account
Gemini CLI Apache-2.0 npm i -g @google/gemini-cli Google account — generous free tier

Verify any you install:

opencode --version
codex --version
gemini --version

Notes:

  • Gemini CLI has the most usable free tier — good if you want to experiment without spending.
  • Claude Code itself is proprietary (Anthropic); the above are the open-source side of the landscape.
  • Also worth knowing (not on our install list): Aider (aider.chat) and llm (Simon Willison) — both open-source CLIs that work with local open models via Ollama, fully free + offline, no API key. We'll point to them in Chapter 7 if you want the local-model route.
  • Don't install all of them on day one. Pick one, try it, form an opinion. That's the Chapter 7 exercise.

Tested on Linux. macOS + Windows-WSL: if you hit anything not covered here, tell us — this guide improves every cohort.

#!/usr/bin/env bash
# Vibe Code Tours — student setup (standalone, self-contained).
# Works on: Linux, macOS, Windows-WSL (Ubuntu). Native Windows: install WSL first.
#
# One-liner for students:
# curl -fsSL <GIST_RAW_URL> | bash
# Or download then run:
# bash student-setup.sh
#
# Idempotent — safe to re-run. Installs: nvm+Node 22 LTS, uv+Python 3.12,
# git, Claude Code. Then verifies everything. No repo clone required.
set -u
NODE_TRACK="--lts" # Node 22 LTS
PY_VER="3.12"
say() { printf '\n\033[1;33m==> %s\033[0m\n' "$*"; }
ok() { printf ' \033[32mOK\033[0m %s\n' "$*"; }
skip() { printf ' \033[36m--\033[0m %s (already present)\n' "$*"; }
warn() { printf ' \033[33m!!\033[0m %s\n' "$*"; }
have() { command -v "$1" >/dev/null 2>&1; }
# ---------- OS detect ----------
OS="unknown"
case "$(uname -s)" in
Linux*) OS="linux" ;;
Darwin*) OS="macos" ;;
esac
IS_WSL=0
if [ "$OS" = "linux" ] && grep -qiE "microsoft|wsl" /proc/version 2>/dev/null; then IS_WSL=1; fi
say "Vibe Code Tours setup — OS: $OS$([ "$IS_WSL" = 1 ] && echo ' (WSL)')"
if [ "$OS" = "unknown" ]; then
warn "Unsupported shell. On native Windows: run 'wsl --install' in PowerShell,"
warn "reboot, open Ubuntu, then re-run this script inside WSL."
exit 1
fi
APT=0; [ "$OS" = "linux" ] && have apt && APT=1
# ---------- 1. Node via nvm ----------
say "1/4 Node.js (nvm + Node 22 LTS)"
export NVM_DIR="${NVM_DIR:-$HOME/.nvm}"
if [ ! -s "$NVM_DIR/nvm.sh" ]; then
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash && ok "nvm installed"
else
skip "nvm"
fi
# shellcheck disable=SC1090
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
if have nvm; then
nvm install $NODE_TRACK >/dev/null 2>&1 && nvm use $NODE_TRACK >/dev/null 2>&1
nvm alias default node >/dev/null 2>&1
ok "Node $(node --version 2>/dev/null)"
else
warn "nvm not on PATH this shell — CLOSE this terminal, open a new one, re-run."
fi
# ---------- 2. Python via uv ----------
say "2/4 Python (uv + Python $PY_VER)"
if ! have uv; then
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"
ok "uv installed"
else
skip "uv"
fi
if have uv; then
uv python install "$PY_VER" >/dev/null 2>&1 || true
ok "Python $PY_VER ready (uv)"
else
warn "uv not on PATH this shell — restart terminal, re-run."
fi
# ---------- 3. Git ----------
say "3/4 Git"
if ! have git; then
if [ "$APT" = 1 ]; then sudo apt update -y && sudo apt install -y git && ok "git installed"
elif [ "$OS" = "macos" ]; then
if have brew; then brew install git && ok "git installed"
else warn "Run: xcode-select --install (provides git on macOS)"; fi
fi
else
skip "git $(git --version | awk '{print $3}')"
fi
# ---------- 4. Claude Code ----------
say "4/4 Claude Code"
if ! have claude; then
curl -fsSL https://claude.ai/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
ok "Claude Code installed"
else
skip "claude $(claude --version 2>/dev/null | head -1)"
fi
# ---------- verify (inline, no external file) ----------
say "Verifying"
PASS=0; FAIL=0
check() { # name cmd regex
local out
if out=$($2 2>&1); then
if echo "$out" | grep -qE "$3"; then ok "$1: $(echo "$out" | head -1)"; PASS=$((PASS+1));
else warn "$1: got '$(echo "$out" | head -1)' — expected /$3/"; FAIL=$((FAIL+1)); fi
else warn "$1: not found"; FAIL=$((FAIL+1)); fi
}
check "Node" "node --version" "^v(22|23|24)\."
check "npm" "npm --version" "^(1[0-9]|2[0-9])\."
check "Python" "python3 --version" "^Python 3\.(12|13)"
check "uv" "uv --version" "^uv 0\."
check "Claude Code" "claude --version" "^[2-9]\."
check "git" "git --version" "git version 2\.([3-9][0-9]|[1-9][0-9]{2})"
say "Result"
echo " Passed: $PASS Failed: $FAIL"
if [ "$FAIL" -eq 0 ]; then
say "All set. You're ready for Chapter 1."
else
warn "Some checks failed. Most fix with: CLOSE this terminal, open a new one, re-run this script."
warn "Still stuck? Post the exact output above in the cohort channel (#setup-help)."
exit 1
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment