Windows Development Environment Setup Guide for Mac & Linux Users
A complete guide to setting up Windows for development when coming from Mac or Linux
Coming from Mac or Linux to Windows for development work can feel like landing on a different planet. Your muscle memory fights you on keyboard shortcuts, package management seems foreign, and you miss the comfort of your Unix-like terminal. I recently went through this transition myself, and while Windows has come a long way in becoming developer-friendly, finding and setting up the right tools can be challenging.
Here's the thing: while there are countless guides about essential Mac apps for developers, the Windows ecosystem doesn't get the same attention. This is particularly frustrating when setting up a new Windows 10 machine and trying to create a productive development environment. Whether switching by choice or necessity, you need a reliable setup that feels familiar and gets the job done.
In this guide, you'll learn:
- How to set up a complete development environment with WSL2 and Ubuntu
- Which tools can replicate your favorite Mac/Linux features
- Essential configurations for a smooth development workflow
- Tips and tricks for maximizing productivity on Windows
This guide is specifically tailored for developers who:
- Are transitioning from Mac or Linux to Windows
- Need to set up a development environment on Windows 10
- Want to maintain their productivity with familiar Unix-like tools
- Are looking for Windows alternatives to their favorite Mac/Linux applications
Setting Up Your Development Environment
The foundation of any good development setup on Windows starts with the Windows Subsystem for Linux (WSL2) and a proper terminal. While Windows' traditional Command Prompt might trigger painful flashbacks, modern Windows offers powerful alternatives that rival Mac's Terminal and Linux's shell environments.
Windows Terminal
Remember iTerm2 on Mac or your customized terminal on Linux? Windows Terminal is Microsoft's answer to modern terminal emulation, and it's surprisingly good.
To install it, you have two options:
- Microsoft Store (easiest)
- Windows Package Manager (for the command-line purists):
winget install Microsoft.WindowsTerminal
After installation, you'll get:
- Multiple tabs and pane splitting (like iTerm2)
- GPU-accelerated text rendering
- Full Unicode support including emojis
- Customizable keyboard shortcuts
- Themes and color schemes
Setting Up WSL2
WSL2 isn't just a Linux emulator—it's a full Linux kernel running natively on Windows. Think of it as running Ubuntu (or your preferred Linux distro) natively, but without the dual-boot hassle. First, let's enable the required Windows features. Open PowerShell as Administrator and run:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
After a quick restart, install Ubuntu from the Microsoft Store or use:
wsl --install
Want to continue with setting up Zsh and making the terminal feel more like home?
Making Your Terminal Productive with Zsh
If you're coming from Mac, you're probably used to Zsh as your default shell (since macOS Catalina). If you're from Linux, you might be a Bash purist or a Zsh convert. Either way, let's set up a powerful shell environment.
First, update your Ubuntu and install the essentials:
# Update package list and upgrade existing packages
sudo apt update && sudo apt upgrade -y
# Install Zsh and necessary tools
sudo apt install -y zsh curl git build-essential
Oh My Zsh
Remember how good your Mac terminal looked?
# Install Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Now, let's add syntax highlighting and autosuggestions plugins:
# Install syntax highlighting and autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
Edit your ~/.zshrc
to enable these plugins:
nano ~/.zshrc
Find the plugins line and update it to:
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
Node.js and Dev Tools
Let's install Node.js using nvm (Node Version Manager)
# Install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Reload shell configuration
source ~/.zshrc
# Install latest LTS version of Node.js
nvm install --lts
At this point, your terminal should be feeling a lot more familiar.
Setting Up VS Code for WSL
First, install VS Code on Windows (not in WSL) from code.visualstudio.com. Then, in VS Code:
- Install the "Remote - WSL" extension
Open your WSL terminal and type:
code .
Magic! VS Code launches from Windows but connects directly to your WSL environment. No more path issues or file system conflicts.
Essential VS Code Extensions for WSL
Let's install those must-have extensions you're used to:
code --install-extension ms-vscode-remote.remote-wsl
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension PKief.material-icon-theme
code --install-extension GitLens.gitlens
Pro tip: Extensions need to be installed twice - once for Windows VS Code and once for WSL VS Code. When you open VS Code from WSL, you'll see "WSL: Ubuntu" in the bottom-left corner, indicating you're in the WSL context.
Configuring Git
# In WSL terminal
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# Generate SSH key for GitHub
ssh-keygen -t ed25519 -C "your.email@example.com"
# Start SSH agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
Don't forget to add your SSH key to GitHub.
Setting up Docker Desktop
On Windows with WSL2, Docker Desktop integration is seamless, and you get native Linux container performance without any extra configuration.
Installing Docker Desktop for Windows
- Download Docker Desktop from docker.com
- During installation, make sure to check:
- "Use WSL 2 instead of Hyper-V"
- "Ubuntu" in the WSL Integration settings
Pro tip: Unlike on Mac, Docker Desktop for Windows with WSL2 doesn't use a VM for container operations. It runs containers natively in WSL2, giving you better performance.
Verifying Your Docker Setup
Open your Ubuntu terminal and run:
# Check Docker version
docker --version
# Verify Docker daemon is running
docker ps
# Run the classic test container
docker run hello-world
If everything's working, you'll see Docker running natively in your WSL environment. No more path issues or volume mount problems.
Docker Compose and Common Commands
Docker Compose comes bundled with Docker Desktop. Let's verify it:
# Check Docker Compose version
docker compose version
# Common commands you're used to still work:
docker compose up -d
docker compose down
Windows PowerToys
If you're missing Mac's productivity features like Spotlight, Rectangle for window management, or simple color-picking tools, PowerToys is your new best friend. It's Microsoft's open-source utility that brings many Mac-like features to Windows.
Installing PowerToys
Two ways to get it:
# Using winget (Windows Package Manager)
winget install Microsoft.PowerToys
# Or download from GitHub releases
# https://github.com/microsoft/PowerToys/releases/
Pro Tips & Performance Optimization
After spending months switching between Mac and Windows development environments, I've discovered some game-changing tips that'll make your Windows development experience smoother.
Managing Resource Usage
Add these lines to %UserProfile%/.wslconfig
:
ini
Copy
[wsl2]
memory=8GB
processors=4
swap=2GB
Pro tip: Adjust these numbers based on your system. Unlike Docker Desktop on Mac, you're not locked into fixed resource limits.
Storage Optimization
# Clear Docker build cache
docker system prune -a
# Clean APT cache in WSL
sudo apt clean
sudo apt autoremove
Path Issues
Remember those annoying path issues on Mac? Here's how to handle them in WSL:
- Keep projects in your Linux file system (
/home/username/
) - Access Windows files via
/mnt/c/
when needed - Use VS Code's Remote WSL extension to handle paths automatically
Terminal Performance
If your terminal feels slow:
# Add to your .zshrc
DISABLE_UPDATE_PROMPT=true
DISABLE_AUTO_UPDATE=true
Git Line Ending Issues
# In WSL
git config --global core.autocrlf input
# In Windows
git config --global core.autocrlf true
Conclusion
Setting up a development environment on Windows doesn't have to be a downgrade from your Mac or Linux experience. With the right tools and configurations—WSL2 for your Linux needs, Windows Terminal for modern command-line work, PowerToys for productivity features, and proper IDE setup—you can create a powerful and comfortable development environment. The Windows development ecosystem has evolved significantly, and with this setup, you'll find yourself being just as productive as you were on other platforms, if not more so.