Homebrew — дефолтный пакетный менеджер на Mac у большинства разработчиков. Ниже — как им пользоваться так, чтобы через год brew list не превратился в свалку 🧰
Установка и PATH #
Официальный install script — с https://brew.sh. На Apple Silicon префикс:
/opt/homebrewПроверка:
brew --prefix # /opt/homebrew
echo "$PATH" | tr ':' '\n' | headВ .zprofile (не только .zshrc — GUI-приложения иначе не видят):
eval "$(/opt/homebrew/bin/brew shellenv)"Ежедневные команды #
brew update # обновить формулы
brew upgrade # обновить пакеты
brew upgrade hugo # точечно
brew info hugo
brew list --versions
brew search ripgrep
brew install ripgrep fd bat
brew uninstall old-toolPin, если мажор ломает CI:
brew pin hugo
brew unpin hugoBrewfile: инфраструктура как код для ноутбука #
brew bundle dump --file=~/dotfiles/Brewfile --forceПример Brewfile:
brew "git"
brew "hugo"
brew "fzf"
brew "ripgrep"
cask "iterm2" # GUI — через caskНа новой машине:
brew bundle --file=~/dotfiles/BrewfileТак восстанавливается набор CLI, а не «что вспомнил».
Гигиена #
brew doctor # сначала читать, не слепо «fix»
brew cleanup -s # старые версии + кэш
brew autoremove # лишние зависимости
du -sh "$(brew --cache)"Раз в квартал:
brew leaves # верхнеуровневые пакеты
# удалить то, чем не пользовались полгодаЧастые грабли #
- Два Homebrew (Intel + ARM после миграции) — оставьте один prefix, почистите PATH.
- pip install –user рядом с
brew install python— путаница модулей; для проектов —uv/venv, не глобальный pip. - sudo brew — никогда. Ломает права в
/opt/homebrew. - CI — не ставьте «свежий brew» на каждый job без кэша; pin версий или используйте готовые action/image.
Linux? #
Linuxbrew/Homebrew on Linux работает, но на серверах Debian/Ubuntu я предпочитаю apt + upstream .deb/docker: меньше расхождения с политикой обновлений ОС. Homebrew — в первую очередь dev-машина.
Итог #
Brewfile в dotfiles + upgrade осознанно + cleanup по расписанию. Homebrew перестаёт быть магией и становится просто ещё одним манифестом окружения 📦