Entorno de desarrollo en macOS sin el atracón de Homebrew
Cómo mantengo un setup de Mac rápido y reproducible sin acabar con 600 paquetes que no sé justificar.
- macOS
- Homebrew
- mise
- Developer Experience
Un Mac nuevo, configurado como la mayoría de ingenieros configuran sus Macs, instalará unos 600 paquetes de Homebrew en sus primeros seis meses. Unos 30 son cosas que de verdad usas. Los otros 570 son dependencias-de-dependencias, herramientas que probaste una vez, y esa fórmula rara que instalaste porque Stack Overflow te lo dijo.
Este es el setup al que he llegado tras tratar mi entorno de desarrollo como infraestructura real durante años. El objetivo no es minimalismo por minimalismo; es saber qué hay en la máquina y por qué.
La regla dura: nada system-wide que no pertenezca a system-wide
Lo system-wide es para cosas que son parte del trabajo de macOS: la shell, las fuentes, GUIs, drivers, codecs de vídeo. Lenguajes y herramientas que cambian con cada proyecto no deberían instalarse system-wide.
Eso significa que Homebrew es para GUIs y utilidades a nivel de SO:
brew install --cask raycast iterm2 1password orbstack rectangle
brew install git wget jq fd ripgrep htop direnv
Punto. Unos 25 paquetes. Casi nunca cambian.
Lenguajes y herramientas: por proyecto, con mise
Para cada intérprete, runtime o herramienta que tenga “una versión que importa”, uso mise (el fork moderno de asdf). Node, Python, Ruby, Deno, Go, Bun, Terraform, Helm, kubectl, awscli — todos.
# .mise.toml en cada proyecto
[tools]
node = "22"
pnpm = "10"
python = "3.12"
mise install una vez, cd al directorio, y las versiones correctas están en el PATH. Sin nvm use, sin pyenv shell, sin malabares. Cuando el proyecto especifica, el proyecto recibe.
La diferencia con Homebrew: cuando borro un proyecto, las herramientas que pineaba siguen en disco pero no me cuestan nada. Cuando hago mise prune, desaparecen. Homebrew no tiene equivalente — una vez instalada una fórmula, recordar quitarla es responsabilidad tuya.
Contenedores: OrbStack, no Docker Desktop
OrbStack es un reemplazo drop-in de Docker Desktop que no se come 8 GB de RAM en idle. Además corre VMs de Linux baratas, así que no necesito una herramienta separada para “quiero un shell de Ubuntu rápido”. orb run ubuntu y lo tienes.
Docker Desktop tiene su sitio; en un Mac, ese sitio es “me están pagando por usarlo”. Para uso personal y la mayoría del profesional, OrbStack es la elección tranquila.
Shell: aburrida y portable
Zsh (el default de macOS) más un único archivo de config:
# ~/.zshrc — 30 líneas o menos
eval "$(mise activate zsh)"
eval "$(direnv hook zsh)"
source <(starship init zsh) # si quieres un prompt elegante
Nada de oh-my-zsh, nada de gestor de plugins. Cada línea de .zshrc debe justificarse sola. direnv es el héroe anónimo: variables de entorno por directorio que se cargan al cd (después de un direnv allow la primera vez). Combinado con mise, tu proyecto se vuelve auto-descriptivo: entras a la carpeta, se cargan las versiones y el entorno correctos; sales, tu shell vuelve a estar limpia.
El setup real, reproducible
Todo lo anterior vive en un Brewfile, un ~/.config/mise/config.toml, un ~/.zshrc y un ~/.gitconfig. Cuatro archivos, en un repo privado de dotfiles. Mac nuevo:
- Instalar Xcode CLT y Homebrew.
brew bundle --file ./Brewfile.- Symlinkear los cuatro configs.
mise installpara las herramientas globales.
Tiempo total: 25 minutos. Cosas que tuve que recordar: cero.
La disciplina paga el día que de verdad cambias de Mac, le pasas un script a alguien junior, o reinstalas porque algo se torció. El objetivo de un setup limpio no es tener un setup limpio; es no volver a perder un día en setup nunca más.
¿Te ha resultado útil?