- Shell 56.6%
- Go Template 35.4%
- Ruby 8%
| home | ||
| scripts | ||
| .chezmoiroot | ||
| .gitignore | ||
| Brewfile | ||
| README.md | ||
dotfiles
Configuration macOS gérée avec chezmoi.
- La liste des logiciels vit dans
Brewfile, à la racine du repo. - Les fichiers de config de
~vivent danshome/. - Tout s'applique avec
chezmoi apply.
Ajouter un logiciel
Oui, ça s'ajoute à la main dans le Brewfile. Il n'y a pas de commande
brew install à lancer : c'est chezmoi apply qui installe.
# 1. Trouver le nom exact du paquet
brew search telegram
# 2. Ouvrir le Brewfile (celui que chezmoi lit vraiment)
chezmoi cd && cd ..
$EDITOR Brewfile
# 3. Ajouter la ligne dans la bonne rubrique
# brew "nom" → outil en ligne de commande
# cask "nom" → application graphique (/Applications)
# 4. Installer
chezmoi apply
# 5. Versionner
git add Brewfile && git commit -m "Ajoute telegram" && git push
Pourquoi chezmoi apply installe : l'empreinte du Brewfile est incluse dans
home/run_onchange_after_10-brewfile.sh.tmpl. Dès que le fichier change,
chezmoi rejoue brew bundle — et seulement à ce moment-là. Tant que le
Brewfile est stable, rien ne tourne.
Supprimer un logiciel
Retirer la ligne du Brewfile ne désinstalle rien : brew bundle n'ajoute
que ce qui manque. Il faut désinstaller soi-même :
brew uninstall telegram # ou : brew uninstall --cask telegram
Sur les autres machines
Le nouveau logiciel arrive au prochain :
chezmoi update --init
« J'ai édité le Brewfile et chezmoi apply n'a rien fait »
C'est le piège classique. chezmoi apply ne lit qu'un seul dépôt :
~/.local/share/chezmoi (ce que donne chezmoi source-path). Si tu travailles
depuis un autre clone — par exemple ~/Documents/Projects/dotfiles — ton
édition n'existe pas encore pour chezmoi.
Dans ce cas, le chemin est : git push depuis ton clone, puis
chezmoi update --init # pull dans ~/.local/share/chezmoi + apply
Pour éviter l'aller-retour, édite directement via chezmoi cd.
Si l'app existe déjà hors de Homebrew
Le script d'installation refuse d'installer un cask quand l'app est déjà dans
/Applications sans appartenir à brew : l'« adoption » peut échouer et
supprimer l'app. Il te le dit et te propose la sortie :
brew install --cask --adopt telegram # brew reprend l'app en l'état
# ou : supprimer l'app à la main, puis relancer chezmoi apply
Si l'adoption échoue sur un Operation not permitted, donne au terminal
l'autorisation Réglages Système > Confidentialité et sécurité > Gestion des
apps, puis réessaie.
Modifier une config (.zshrc, tmux, ghostty…)
chezmoi edit ~/.zshrc # éditer la source dans home/
chezmoi diff # voir ce qui va changer
chezmoi apply # appliquer
chezmoi cd && git push # versionner
Installation sur une machine neuve
curl -fsSL https://git.bastienfournier.com/babass/dotfiles/raw/branch/main/scripts/bootstrap.sh | bash
Le script installe les Command Line Tools, Homebrew et chezmoi, puis passe la
main à chezmoi : selon l'état de la machine, soit un init (clone + questions
de configuration), soit un update --init (pull, régénération de la config et
apply, sans aucune question). Les paquets du Brewfile sont installés pendant
l'apply.
Les questions de chezmoi — nom, email, clé de signature — ne sont posées qu'une
fois par machine, et pré-remplies avec ce qui est déjà configuré (config git
globale, clé SSH présente dans ~/.ssh) : il suffit généralement de valider.
Le script est idempotent : le relancer sur une machine déjà configurée ne réinstalle rien et ne crée aucun doublon.
Les réglages système sont à part, à lancer une fois :
./scripts/macos-defaults.sh
Structure
.chezmoiroot → "home" : la racine chezmoi est home/, pas le repo
Brewfile → liste des logiciels (racine du repo, hors de home/)
home/ → source de vérité pour ~
scripts/ → bootstrap et réglages macOS
Conventions de nommage chezmoi dans home/ :
| Préfixe | Effet |
|---|---|
dot_ |
devient . dans ~ |
private_ |
permissions 0600 |
.tmpl |
fichier templaté (variables, conditions) |
run_onchange_ |
script rejoué quand son contenu change |
Pourquoi --init dans chezmoi update --init
Il régénère ~/.config/chezmoi/chezmoi.toml depuis home/.chezmoi.toml.tmpl
après le pull. Sans lui, chezmoi avertit config file template has changed dès
que ce template évolue, et applique avec des données périmées. C'est muet et
sans risque : les questions déjà répondues ne sont pas reposées.
Référence
tmux
Config dans home/dot_config/tmux/tmux.conf, lue nativement par tmux 3.1+
depuis ~/.config/tmux/tmux.conf. Préfixe remappé sur Ctrl-a, souris active,
découpe avec | et - dans le répertoire courant, préfixe + r pour recharger.
Alias fournis : t, tl, tn <nom>, et ta <nom> qui attache la session si
elle existe et la crée sinon.
Forgejo
Le repo est hébergé sur https://git.bastienfournier.com/babass/dotfiles.
tea, la CLI Gitea/Forgejo, y remplace gh. Connexion une fois par machine,
avec un jeton créé sur
https://git.bastienfournier.com/user/settings/applications :
tea login add --name forgejo --url https://git.bastienfournier.com
Ensuite tea repos, tea issues, tea pr. Les complétions zsh sont fournies
par la formule Homebrew, rien à ajouter au .zshrc.
Les remotes sont en HTTPS : le serveur annonce SSH sur le port 10024 mais ne
l'expose pas publiquement (seul le 443 passe). Le bloc
Host git.bastienfournier.com de ~/.ssh/config est déjà en place, avec
l'alias court forgejo, pour le jour où le port sera ouvert ou depuis le
LAN/VPN.
Surcharges locales
Trois fichiers non versionnés permettent d'ajouter du spécifique machine :
~/.zshrc.local~/.zprofile.local~/.ssh/config.local(à inclure manuellement dans~/.ssh/config)
Secrets
Rien de sensible en clair, même en repo privé. Les clés SSH privées ne sont
jamais versionnées — seul ~/.ssh/config l'est.
Pour un secret dans un template, deux options :
chezmoi add --encrypt ~/.un-fichier-sensible # chiffrement age
ou lire depuis 1Password / Bitwarden / le Trousseau macOS directement dans le template.
Python
macOS ne fournit que le 3.9.6 des Command Line Tools, en /usr/bin/python3.
Le Brewfile installe donc python (3.14), et comme /opt/homebrew/bin passe
avant /usr/bin dans le PATH, python3 désigne bien celui de Homebrew.
uv reste à côté pour le travail par projet : environnements virtuels et
interpréteurs dédiés (uv venv, uv python install 3.13), sans toucher au
python3 global. Les deux ne se marchent pas dessus.
Note : Homebrew n'installe pas de commande python sans le 3. C'est
volontaire et il vaut mieux ne pas la créer à la main.
Régénérer le Brewfile depuis la machine
brew bundle dump --force --file="$(chezmoi source-path)/../Brewfile"
À utiliser avec précaution : ça écrase le fichier, donc les commentaires et le classement par rubrique, et ça ajoute tout ce qui traîne sur la machine. Ajouter les lignes à la main reste préférable.
Reste à trancher
Aucun gestionnaire de versions Node n'est installé. Ajouter brew "node" si une
version unique suffit, ou fnm / nvm pour jongler entre projets.