No description
  • Shell 56.6%
  • Go Template 35.4%
  • Ruby 8%
Find a file
2026-10-05 22:48:12 +02:00
home add homelab 2026-09-25 11:47:45 +02:00
scripts Regenere la config chezmoi au moment du pull 2026-09-04 17:59:30 +02:00
.chezmoiroot Configuration initiale des dotfiles chezmoi 2026-09-04 16:00:07 +02:00
.gitignore Configuration initiale des dotfiles chezmoi 2026-09-04 16:00:07 +02:00
Brewfile add codex 2026-10-05 22:48:12 +02:00
README.md add telegram 2026-09-24 15:10:11 +02:00

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 dans home/.
  • 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.