Ambiente de desenvolvimento Windows + WSL2, orientado a projetos PHP/WordPress com Lando. Idempotente — seguro para re-executar a qualquer momento.
A separação correta entre Windows e WSL2 é a chave da performance e da sanidade mental:
| Windows | WSL2 (Ubuntu 24.04) |
|---|---|
| VS Code + Remote WSL | Node.js (via nvm) |
| Cursor | PHP 8.3 + Composer |
| Chrome, Windows Terminal | Docker Engine (sem Docker Desktop) |
| 1Password (opcional) | Lando CLI |
| GitHub Desktop | Claude Code CLI |
| — | Git, Zsh, GitHub CLI |
Docker Desktop → GUI, +500MB RAM, I/O lento entre Windows↔WSL2
Docker Engine → CLI lean, rápido, nativo no Linux ← usamos este
Projetos em ~/projects/ (filesystem Linux nativo EXT4) são lidos pelo Docker diretamente,
sem passar pela camada de interop Windows → ganho de I/O de ~10-20x comparado a projetos em C:\Users\....
Abra o PowerShell como Administrador e execute:
Set-ExecutionPolicy Bypass -Scope Process -Force; irm https://raw.githubusercontent.com/lgobatto/dev-environment-setup/main/install.ps1 -OutFile "$env:TEMP\install.ps1"; & "$env:TEMP\install.ps1"Com 1Password:
Set-ExecutionPolicy Bypass -Scope Process -Force; irm https://raw.githubusercontent.com/lgobatto/dev-environment-setup/main/install.ps1 -OutFile "$env:TEMP\install.ps1"; & "$env:TEMP\install.ps1" -Install1PasswordO script clona automaticamente o repositório em
%USERPROFILE%\dev-environment-setupse necessário.
# Clonar e executar
git clone git@github.com:lgobatto/dev-environment-setup.git
cd dev-environment-setup
Set-ExecutionPolicy Bypass -Scope Process -Force
.\install.ps1
# Com 1Password:
.\install.ps1 -Install1Password
# Só WSL2 + .wslconfig, sem instalar apps:
.\install.ps1 -SkipAppsO script detecta o hardware da máquina e calcula automaticamente a alocação ideal de RAM e CPUs para o WSL2:
| RAM da máquina | WSL2 RAM | CPUs |
|---|---|---|
| 8GB | ~3GB | 4 |
| 16GB | ~6GB | 4 |
| 32GB | ~14GB | 4–8 |
| 64GB | ~26GB | 8 |
| 96GB+ | ~28GB (máx 32GB) | 8–12 |
O setup-windows.ps1 já executa o setup-wsl.sh automaticamente. Se precisar rodar manualmente:
bash setup-wsl.sh
# Com opções:
GIT_NAME="Leonardo Gobatto" GIT_EMAIL="leo@email.com" INSTALL_1PASSWORD=1 bash setup-wsl.sh# Clonar projeto direto no filesystem Linux (~/projects/)
REPO_URL="git@github.com:org/repo.git" bash migrate-project.sh
# Modo interativo (lista projetos disponíveis)
bash migrate-project.shConfigura o lado Windows do ambiente. Requer PowerShell como Administrador.
O que faz:
- Solicita interativamente nome e email para
git config(aplicados no WSL2) - Instala e atualiza WSL2
- Instala Ubuntu 24.04 LTS
- Gera
.wslconfigotimizado com base no hardware detectado - Instala apps via
winget: VS Code, Cursor, Chrome, Windows Terminal, GitHub Desktop, Postman, JetBrains Mono Nerd Font - Configura automaticamente a fonte JetBrainsMono Nerd Font no Windows Terminal
- Instala extensões VS Code para WSL (Remote WSL, Remote Explorer)
- Faz bootstrap do WSL executando
setup-wsl.sh
Parâmetros:
-Install1Password # Inclui 1Password e 1Password CLI
-SkipApps # Pula instalação de apps (só WSL2 + .wslconfig)
-SkipWSL # Pula WSL2 (só instala apps Windows)Configura o ambiente de desenvolvimento dentro do Ubuntu 24.04. Idempotente.
O que instala:
- Docker Engine — sem Docker Desktop, direto no Linux
- nvm + Node.js LTS (sempre última versão)
- PHP 8.3 + Composer (via
ppa:ondrej/php) - Lando CLI — versão mais recente via GitHub releases
- Claude Code CLI —
@anthropic-ai/claude-code - GitHub CLI
- Zsh + Oh My Zsh + Powerlevel10k + plugins (autosuggestions, syntax-highlighting, completions)
- Git configurado para WSL (
core.autocrlf=input,init.defaultBranch=main)
Variáveis de ambiente:
GIT_NAME="Seu Nome" # Nome para git config
GIT_EMAIL="seu@email.com" # Email para git config
INSTALL_1PASSWORD=1 # Configura 1Password SSH agent
NODE_VERSION="lts" # "lts", "latest" ou versão específica "22"
PHP_VERSION="8.3" # Versão do PHPAliases instalados:
dev # cd ~/projects
lup # lando start
ldn # lando stop
ldev # lando dev
lbuild # lando theme-build
lflush # lando flush
lacorn # lando acorn
cc # claude (Claude Code CLI)Move (ou clona) projetos do filesystem Windows para ~/projects/ no WSL2 nativo.
# Clonar por URL (recomendado — clona com submodules):
REPO_URL="git@github.com:org/projeto.git" bash migrate-project.sh
# Por nome (copia .env do Windows, verifica submodules):
PROJECT_NAME="meu-projeto" bash migrate-project.sh
# Interativo:
bash migrate-project.shConfigura SSH com múltiplas identidades Git (GitHub pessoal, GitHub empresa, GitLab, etc.) com suporte a 1Password SSH agent.
Instala Nerd Fonts (FiraCode, JetBrainsMono, CascadiaCode, etc.) no Linux/WSL2.
O 1Password funciona como SSH agent, eliminando a necessidade de gerenciar chaves manualmente.
Setup:
- Instale o 1Password no Windows (
setup-windows.ps1 -Install1Password) - Abra 1Password → Settings → Developer
- Ative "SSH Agent"
- Ative "Integrate with WSL"
- O
SSH_AUTH_SOCKe~/.ssh/configsão configurados automaticamente no WSL2
Para validar o setup-wsl.sh em uma VM descartável antes de rodar no sistema real:
# Instalar Multipass
winget install Canonical.Multipass
# Criar VM Ubuntu 24.04
multipass launch 24.04 --name dev-test --cpus 4 --memory 8G --disk 30G
multipass shell dev-test# Dentro da VM: testar o script
bash /mnt/c/Users/SEU_USUARIO/Work/dev-environment-setup/setup-wsl.sh
# Destruir sem rastro quando terminar
# (no PowerShell): multipass delete dev-test && multipass purge| Script | Windows (WSL2) | Linux nativo | macOS |
|---|---|---|---|
setup-windows.ps1 |
✅ | ❌ | ❌ |
setup-wsl.sh |
✅ | ✅ | |
migrate-project.sh |
✅ | ✅ | ✅ |
ssh-git-setup.sh |
✅ | ✅ | ✅ |
nerdfonts-install.sh |
✅ WSL2 | ✅ | ❌ |
dev-environment-setup/
├── setup-windows.ps1 # Setup Windows: WSL2 + apps via winget
├── setup-wsl.sh # Setup WSL2: Docker Engine, Node, PHP, Lando, Claude Code
├── migrate-project.sh # Migrar projetos para ~/projects/ no WSL2
├── ssh-git-setup.sh # SSH multi-identidade com 1Password
├── nerdfonts-install.sh # Instalador de Nerd Fonts
├── ZSH_SETUP.md # Guia pós-instalação do Powerlevel10k
├── archive/ # Scripts legados (referência histórica)
│ ├── install.sh
│ ├── gui-apps.sh
│ ├── shell-apps.sh
│ └── zsh-setup.sh
└── README.md
MIT © Leonardo Gobatto