Developer Environment Setup (WSL, Terminal, VS Code)
Learn to configure a professional developer environment on Windows using WSL2, the Linux terminal, and VS Code. By the end, you will have a fully working local dev setup that mirrors real-world engineering workflows.
Course Content
6 modules · 30 lessonsUnderstanding WSL2 and Why It Exists
Students can explain what WSL2 is, how it differs from a VM, and why developers use it on Windows.
What is WSL2 and how is it different from a virtual machine
WSL2 definition, Windows Subsystem for Linux, hypervisor architecture, WSL1 vs WSL2, kernel differences, use cases
How to enable WSL2 on Windows 10 and Windows 11
Windows version requirements, virtualization BIOS setting, enabling WSL feature, enabling Virtual Machine Platform, wsl --install command, restart behavior
How the WSL2 filesystem works and where to put your code
Linux filesystem root, /mnt/c mount point, WSL home directory, filesystem performance difference, \\wsl$ UNC path, where to store projects
How to install and switch between Linux distros in WSL2
wsl --list --online, wsl --install -d, default distro, wsl --set-default, running multiple distros, wsl --terminate, wsl --unregister
How to update and maintain your WSL2 installation
wsl --update, wsl --version, Linux package manager apt, apt update vs apt upgrade, keeping kernel current, WSL2 shutdown command
Linux Terminal Fundamentals
Students can navigate the filesystem, manage files, and run basic shell commands confidently inside WSL2.
How to navigate the Linux filesystem with cd, ls, and pwd
pwd command, cd absolute vs relative paths, ls flags, home directory tilde shortcut, hidden files, filesystem hierarchy
How to create, copy, move, and delete files in the Linux terminal
touch command, mkdir with -p flag, cp command, mv command, rm and rm -r, rmdir, glob patterns, safety with rm
How to read and search file contents with cat, grep, and less
cat command, less pager, grep basic usage, grep -r recursive, grep -i case insensitive, grep -n line numbers, pipe operator, combining commands
How to use environment variables and the PATH in Linux
environment variables, echo $VAR, export command, PATH variable, which command, permanent vs session-only variables, .bashrc and .zshrc
How to use permissions and sudo in Linux
file permissions rwx, chmod numeric and symbolic, chown command, sudo usage, when not to use sudo, whoami, sudo vs su
Shell Configuration and Productivity
Students can customize their shell environment, write aliases, and use productivity tools that make terminal work significantly faster.
What is .bashrc and how to configure your shell environment
.bashrc vs .bash_profile, source command, login vs interactive shells, when .bashrc loads, editing with nano or vim, testing changes
How to create shell aliases to speed up your workflow
alias syntax, unalias, common developer aliases, alias persistence in .bashrc, alias vs function, quoting in aliases
How to install and use Zsh with Oh My Zsh on WSL2
installing zsh, chsh to change default shell, Oh My Zsh installation, themes, plugins array, zsh-autosuggestions, zsh-syntax-highlighting, .zshrc config file
How to use tmux to manage multiple terminal sessions
tmux installation, sessions vs windows vs panes, prefix key, creating splits, switching panes, detach and reattach, named sessions, basic tmux config
How to use shell history and keyboard shortcuts to work faster
Ctrl+R reverse search, history command, !! last command, !$ last argument, Ctrl+A and Ctrl+E, Ctrl+L, Ctrl+U, HISTSIZE, HISTFILESIZE
Installing and Managing Development Tools
Students can install Node.js, Python, Git, and other tools correctly in WSL2 without common permission or path conflicts.
How to install Node.js in WSL2 using nvm
why not apt for Node.js, nvm installation, nvm install, nvm use, nvm alias default, multiple Node versions, .nvmrc file, npm global packages
How to install Python and manage versions with pyenv in WSL2
system Python risks, pyenv installation, pyenv install, pyenv global, pyenv local, .python-version file, pip usage, virtual environments intro
How to configure Git correctly in WSL2
git install, git config global user name and email, git config default branch, git credential helper for WSL2, SSH key generation, adding SSH key to GitHub
How to install Docker Desktop and use it with WSL2
Docker Desktop WSL2 backend, enabling WSL2 integration per distro, docker run hello-world, docker without sudo, docker compose, common permission issue fix
How to use apt and manage system packages in Ubuntu WSL2
apt vs apt-get, apt search, apt show, apt install, apt remove vs purge, apt autoremove, adding PPAs, dpkg for .deb files, snap packages
VS Code Setup and WSL2 Integration
Students can configure VS Code on Windows to edit and debug code running inside WSL2 with extensions, settings, and keyboard shortcuts.
How to install VS Code and connect it to WSL2
VS Code download, Remote Development extension pack, WSL extension, code . command, Remote Explorer, WSL2 server installation, remote indicator
How to configure VS Code settings and keybindings
settings.json, user vs workspace settings, common developer settings, editor.formatOnSave, tabSize, defaultFormatter, keybindings.json, useful built-in shortcuts
Which VS Code extensions every developer should install
Prettier formatter, ESLint, GitLens, Path Intellisense, Error Lens, Remote WSL, Thunder Client, extension sync, disabling extensions per workspace
How to use the VS Code integrated terminal with WSL2
opening terminal in VS Code, setting default shell to zsh, multiple terminal instances, terminal split, terminal profile configuration, running npm scripts from terminal
How to debug Node.js applications in VS Code with WSL2
launch.json configuration, setting breakpoints, debug console, watch expressions, call stack panel, attaching to running process, nodemon with debugger, common debug configs
Git Workflows and Developer Best Practices
Students can apply a professional Git branching workflow, write useful commit messages, and resolve merge conflicts inside the WSL2 and VS Code environment.
How to use Git branches for feature development
git branch, git checkout -b, git switch, branch naming conventions, git merge, git branch -d, fast-forward vs merge commit, HEAD pointer
How to write good Git commit messages
conventional commits format, type prefix, subject line rules, body and footer, git log --oneline, amending commits, atomic commits, why commit messages matter
How to resolve Git merge conflicts in VS Code
what causes merge conflicts, conflict markers, VS Code merge editor, accept current vs incoming vs both, git add after resolution, git merge --abort, preventing conflicts
How to use .gitignore to exclude files from version control
.gitignore syntax, negation patterns, global gitignore, ignoring already-tracked files, gitignore.io, common patterns for Node.js and Python, git rm --cached
How to use Git stash, rebase, and cherry-pick for advanced workflows
git stash and pop, stash list, git rebase vs merge, interactive rebase squash, git cherry-pick, when to use each, rebase golden rule, force push caution
