Dotfiles
L'ensemble de mes fichiers de configuration est disponible sur GitHub. Ce dépôt centralise la configuration de mon environnement de travail : shell, éditeur, outils de développement, et amorçage d'un nouveau poste.
Bootstrap
Le fichier Brewfile permet de restaurer un environnement complet en une commande sur macOS :
Il installe l'intégralité de la toolchain : outils CLI (ripgrep, bat, fzf, lsd, fd...), Kubernetes (kubectl, helm, krew, kubeswitch...), cloud providers (AWS CLI, gcloud, az...), IaC (Terraform, Vault, Consul), et applications GUI (Arc, DBeaver, TablePlus...).
Le script init_mac.sh orchestre l'installation complète de manière idempotente.
Zsh
Plugins oh-my-zsh
La configuration s'appuie sur oh-my-zsh avec les plugins suivants :
| Plugin | Rôle |
|---|---|
zsh-defer | Chargement différé pour accélérer le démarrage |
ssh-agent | Gestion automatique des clés SSH |
terraform | Autocompletion Terraform |
kubectl | Autocompletion kubectl |
kube-ps1 | Contexte Kubernetes dans le prompt |
helm | Autocompletion Helm |
aws | Autocompletion AWS CLI |
Chargement différé (performance)
Toutes les sources lourdes sont chargées via zsh-defer pour ne pas pénaliser le démarrage du shell :
zsh-defer source ~/.zsh_functions
zsh-defer source ~/.zsh_alias
zsh-defer source ~/.zsh_mac # ou ~/.zsh_linux selon l'OS
zsh-defer source <(fzf --zsh)
zsh-defer source <(gcloud ... completion zsh)
Les completions de kafkactl et delta sont également différées.
Historique
Un milliard d'entrées — l'historique ne se perd plus jamais.
Prompt
Le prompt droit affiche le contexte Kubernetes courant via kube_ps1 :
Détection de plateforme
Les fichiers ~/.zsh_mac et ~/.zsh_linux permettent d'avoir des configurations spécifiques par OS, chargés dynamiquement selon la plateforme détectée.
Aliases
Raccourcis de commandes
Remplacement par des outils modernes
alias vim='nvim'
alias cat='bat --style=plain'
alias df='dfc'
alias dig='dog'
alias rm='rip'
alias ls='lsd'
Voir Remplacer les commandes de base pour le détail de chaque outil.
Kubernetes
alias kctx='kubectx' # switch de contexte
alias kns='kubens' # switch de namespace
alias switch='kubeswitch'
Avec kubecolor pour coloriser la sortie de kubectl :
Git sur plusieurs dépôts
# git pull sur tous les dossiers du répertoire courant
alias pullparallel='ls | xargs -P10 -I{} git -C {} pull'
# git pull récursif avec submodules
alias pullrecursive='git pull --recurse-submodules'
Fonctions personnalisées
extract — décompression universelle
Identifie l'extension et applique la commande adaptée :
extract archive.tar.gz # tar xzf
extract archive.zip # unzip
extract archive.7z # 7z x
extract archive.rar # rar x
# ... gzip, bzip2, xz, lzma, uncompress
kevents — événements Kubernetes formatés
Affiche les événements d'un cluster en tableau trié et paginé :
Utilise kubectl get events -o json | jq + column + less.
mergebranch — merge GitLab via CLI
Approuve et merge la branche courante en une commande via glab :
Git
Pager : delta
Toutes les diffs passent par delta pour une lecture colorisée et lisible :
Aliases essentiels
| Alias | Commande |
|---|---|
g c | commit |
g cm | commit -S -m (commit signé) |
g cma | commit --amend |
g d | diff |
g dc | diff --cached |
g st | status -sb |
g co | checkout |
g nah | Hard reset + clean (abandon tout) |
g psf | push --force-with-lease (force safe) |
g psmr | Push + création MR GitLab via glab |
g smu | Update submodules en parallèle |
Inclusions conditionnelles (work/perso)
[includeIf "gitdir:~/work/"]
path = ~/.gitconfig_work
[includeIf "gitdir:~/perso/"]
path = ~/.gitconfig_perso
L'identité (nom, email) change automatiquement selon le répertoire du projet.
Signature SSH des commits
La signature se fait via une clé SSH plutôt que GPG — plus simple à gérer.
Autres réglages notables
[pull]
rebase = true # rebase par défaut sur pull
[merge]
conflictstyle = zdiff3 # diff3 amélioré pour les conflits
[rebase]
autostash = true # stash auto avant rebase
[branch]
sort = -committerdate # branches triées par date de commit
SSH
Multiplexage de connexions activé globalement :
Host *
User jdelgado
ControlMaster auto
ControlPath ~/.ssh/private/master-%C.socket
ControlPersist 10m
Une seule connexion TCP est établie par hôte, réutilisée pendant 10 minutes. Gain significatif sur les workflows avec beaucoup de connexions répétées (déploiements, tunnels, Ansible...).
Tmux
Configuration minimale avec réorganisation automatique des panes :
Quand un pane est fermé, la disposition tiled est appliquée automatiquement. Plus besoin de réorganiser manuellement après avoir tué un processus.
Terminal : Wezterm
WezTerm est le terminal utilisé, configuré via .wezterm.lua. Il remplace iTerm2 avec le bénéfice d'une configuration as-code en Lua, versionnable dans le dépôt.