Le Brewfile ne liste pas tout ce qui est installé
💡 Sujet
Un Brewfile est le manifeste d'une machine : formules, applications, extensions. brew bundle dump le génère à partir de l'existant, et le premier réflexe en lisant le résultat est de croire
qu'il est incomplet — 116 formules installées, 20 lignes dans le fichier.
Ce n'est pas une extraction ratée. C'est exactement ce qu'on veut.
📉 116 formules, 20 lignes
Le dumper ne garde que les formules demandées explicitement, celles qu'on a soi-même installées :
# Library/Homebrew/bundle/brew.rb
requested_formula = formulae.select do |f|
f[:installed_on_request?]
endTout le reste — 96 paquets ici — sont des dépendances tirées par les précédentes. Les réinscrire serait redondant et fragile : Homebrew les réinstallera de lui-même, dans les versions qui vont bien au moment de l'installation.
brew list --formula | wc -l # 116 : tout ce qui est posé sur la machine
grep -c '^brew ' Brewfile # 20 : ce que j'ai vraiment demandé⚠️ Ce n'est pas la même chose que brew leaves : une formule demandée explicitement reste dans
le Brewfile même si une autre a fini par en dépendre. Le dump en garde donc un peu plus.
🧾 Cinq types de lignes
tap "getsentry/tools", trusted: true
brew "gh"
cask "iterm2"
mas "Xcode", id: 497799835
vscode "ms-python.python"Les lignes mas n'apparaissent que si l'outil mas est installé sur la machine qui génère le
fichier — voir mas app store in brewfile.
✍️ Générer
brew bundle dump --file=Brewfile --force --describe--force: écrase le fichier existant, sinondumprefuse d'écraser ;--describe: ajoute au-dessus de chaque entrée la description courte de la formule. Le fichier double de longueur mais devient lisible six mois plus tard :
# GitHub command-line tool
brew "gh"Pour un ajustement ponctuel, inutile de tout régénérer :
brew bundle add jq --file=Brewfile
brew bundle remove openvpn --file=Brewfile📥 Rejouer sur une autre machine
brew bundle --file=Brewfile # installe tout ce qui manque
brew bundle check --file=Brewfile # dit seulement ce qui manque, n'installe rien
brew bundle list --file=Brewfile # les entrées du fichiercheck est le bon outil pour vérifier qu'une machine est conforme sans rien toucher.
☠️ En revanche brew bundle cleanup --file=Brewfile désinstalle tout ce qui n'est pas dans le
fichier. Sur un Brewfile généré ailleurs, c'est un formatage de l'outillage local. Sans --force
il affiche ce qu'il retirerait et demande confirmation — donc ne jamais passer --force avant
d'avoir lu cette liste.
💻 Un Brewfile par machine, pas un pour toutes
Le Brewfile décrit une machine. Deux Mac aux usages différents méritent deux fichiers, choisis au moment de l'installation :
brew bundle --file=brew/Brewfile.work
brew bundle --file=brew/Brewfile.persoRien dans brew bundle ne sait fusionner ou conditionner : c'est un fichier plat, on choisit lequel
on applique.
🧩 Résumé
- 📉
brew bundle dumpne retient que les formules installées à la demande (installed_on_request), pas leurs dépendances — c'est voulu. - 🧾 Cinq types d'entrées :
tap,brew,cask,mas,vscode. - ✍️
--forcepour écraser,--describepour commenter chaque ligne ;bundle add/removepour retoucher sans régénérer. - ✅
brew bundle checkvérifie sans installer. - ☠️
brew bundle cleanupdésinstalle ce qui manque au fichier : jamais sur un Brewfile venu d'ailleurs, et jamais--forcesans avoir lu la liste qu'il propose. - 💻 Un fichier par machine ; aucune fusion possible.