Meu setup de desenvolvimento hoje: Windows Terminal, WSL 2, Arch Linux, tmux e Neovim
O ambiente que uso hoje para programar: Windows Terminal, WSL 2 com Arch Linux, zsh, tmux, Neovim, lazygit e opencode no mesmo fluxo.
Eu nunca gostei muito de conteúdo sobre setup quando ele vira só uma lista de ferramenta. Sempre achei meio sem graça quando a pessoa fala o nome de tudo que usa, mas não mostra o que aquilo resolve na prática.
Então a ideia aqui é mais simples: registrar o que eu uso hoje para trabalhar e por que esse fluxo faz sentido para mim.
Hoje eu uso o Windows como sistema principal, mas programo 100% no Linux, dentro do WSL 2, com Arch Linux. É onde ficam minhas ferramentas, meu shell, meu editor, meus runtimes e basicamente tudo que faz parte do meu dia a dia de desenvolvimento.
Onde eu programo de verdade
Hoje eu entro no WSL 2 pelo Windows Terminal e faço tudo por lá.
O Windows continua sendo meu sistema para o resto das coisas. Eu ainda prefiro manter esse lado por conta de jogos e de coisas fora da programação. Mas, para desenvolver, meu ambiente é o Linux.
No meu caso, essa divisão ficou boa porque eu não preciso escolher entre uma coisa ou outra. Uso o Windows como host e deixo o Linux como ambiente de trabalho.
Dotfiles e organização
Quase toda a configuração importante fica em ~/dotfiles.
Para quem quiser ver, meus dotfiles estão aqui.
Eu uso uma estrutura separada por ferramenta e aplico tudo com stow. Isso me ajuda a manter o ambiente organizado e reproduzível sem transformar configuração em hobby paralelo.
Hoje meus dotfiles concentram principalmente:
zshstarshipmisegittmuxlazygitnvim
Também deixei scripts separados para Arch Linux nativo e para Arch Linux no WSL 2, porque gosto da ideia de conseguir reconstruir o ambiente sem depender de memória ou de uma sequência solta de passos.
Shell
Meu shell hoje é zsh, com oh-my-zsh como base.
Eu uso dois plugins que, para mim, já resolvem bastante coisa sem exagero:
zsh-autosuggestionszsh-syntax-highlighting
O prompt é feito com starship, bem enxuto. Eu gosto de abrir o terminal e ver só o que importa:
- diretório atual
- branch do Git
- status do repositório
Não gosto de prompt carregado demais. Quanto menos ruído, melhor.
Para runtimes, eu uso mise. Hoje ele cuida de:
gobunnodepython
Gosto do mise porque ele deixa essa parte mais organizada. Em vez de ir juntando gerenciador para cada linguagem, fica tudo no mesmo fluxo.
Também uso zoxide, que hoje já virou hábito. Ele resolve uma coisa simples, mas que ajuda muito: chegar mais rápido nos projetos.
Além disso, no shell eu substituí alguns comandos padrão por ferramentas que prefiro no uso diário:
ls->ezacat->batfind->fd
É aquele tipo de detalhe pequeno que melhora o uso do terminal o tempo todo.
Tmux
O tmux é o centro do meu workspace.
É nele que eu organizo as sessões, separo projetos, abro painéis e mantenho contexto entre tarefas. Os splits e novas janelas já abrem no diretório atual, o que ajuda bastante.
Uma parte importante desse fluxo é a combinação de:
tmuxseshfzf-tmux
Isso me ajuda a navegar entre projetos e retomar sessões com rapidez. Em vez de pensar só em abrir pasta, eu penso mais em voltar para um contexto de trabalho que já estava montado.
Também deixei o lazygit como popup dentro do tmux, no diretório atual do projeto. Quando eu preciso revisar mudanças, fazer stage ou olhar histórico, resolvo isso ali mesmo.
Neovim
Meu editor hoje é o Neovim, usando NvChad como base.
Eu gosto dessa escolha porque ela me dá uma estrutura boa para começar, mas ainda deixa espaço para ajustar o que realmente importa para mim.
No dia a dia, algumas decisões fazem bastante diferença:
- números relativos
scrolloffmais alto- navegação centrada em buscas
jkpara sair do insert<C-s>para salvar- integração com
tmuxviavim-tmux-navigator
No visual, o tema atual é tokyodark. No geral, eu tento manter a interface limpa e simples.
Plugins e foco do editor
O meu Neovim hoje está muito alinhado com o tipo de trabalho que eu realmente faço: JavaScript, TypeScript, React, Tailwind, MDX, Astro, bastante configuração de projeto e um pouco de Lua para o próprio setup.
Entre os plugins que mais importam no meu uso estão:
blink.cmptelescope.nvimtrouble.nvimnvim-treetreesitterconform.nvimnvim-lspconfigmason.nvimmdx.nvimnvim-ts-autotag
Isso resume bem o que eu quero do editor hoje: velocidade, previsibilidade e um fluxo bom para ler, navegar e refatorar código.
LSPs e formatação
Uma parte do setup que eu gosto bastante é a forma como LSP e formatação estão organizados.
Os LSPs que aparecem com mais frequência no meu fluxo hoje são:
vtslsbiometailwindcssastroemmet_language_serverprismalsjsonlslua_ls
Na formatação, eu uso conform.nvim com uma lógica que acho importante: o formatter não entra no projeto de forma cega.
Se o repositório usa Biome, ele entra primeiro. Se não usar, o fluxo cai para Prettier ou prettierd, dependendo do arquivo e do contexto.
Eu prefiro isso a tentar forçar um padrão único em tudo. No fim, o setup respeita o projeto.
Git
No Git, eu fico no meio-termo entre terminal e interface mais visual.
Para coisas rápidas, eu uso aliases simples no terminal. Para revisão, staging e navegação mais confortável, o lazygit entra muito bem.
Algumas escolhas do meu config refletem bem como eu gosto de trabalhar:
pull.rebase = truererere.enabled = truecore.editor = nvim
Nada muito mirabolante. Só um fluxo que seja rápido e previsível.
IA no fluxo
Hoje a IA também faz parte do meu ambiente de desenvolvimento, mas do mesmo jeito que o resto das ferramentas: dentro do terminal.
Eu uso opencode no próprio ambiente Linux, com acesso ao contexto real do projeto. Isso faz diferença para mim porque eu não gosto da ideia de usar IA como uma camada separada do trabalho principal.
No meu caso, funciona melhor assim: eu continuo no mesmo ambiente em que abro projeto, leio código, executo comando e navego entre arquivos.
O que eu tento preservar com esse setup
Se eu tivesse que resumir o que esse ambiente tenta me dar hoje, seria isso:
- menos atrito
- mais contexto
- menos bagunça
- menos tempo ajustando ferramenta
Eu não tenho interesse em montar um setup para impressionar ninguém. Eu só quero um ambiente que me deixe trabalhar bem.
É por isso que gosto tanto dessa combinação de Windows + WSL 2 + Arch Linux. Para mim, ela fechou muito bem.
Fechando
Hoje esse é o ambiente em que eu programo 100% do tempo.
Uso o Windows como host, entro no Linux pelo Windows Terminal, trabalho no WSL 2 com Arch Linux, organizo o fluxo com zsh, tmux, Neovim, lazygit e mise, e também uso opencode como parte real do dia a dia.
Não vejo isso como uma vitrine de ferramenta. Vejo mais como o jeito que fui encontrando de trabalhar com menos fricção.
Provavelmente isso ainda vai mudar com o tempo, mas hoje é assim que eu gosto de desenvolver.