Configuration personnelle pour environnement de développement (Ubuntu & Arch/CachyOS).
git clone https://github.com/Haelle/dotfiles.git ~/.dotfiles && cd ~/.dotfiles && ./install./installPour visualiser les changements sans les appliquer :
./install --dry-runLors de l'installation, les fichiers existants sont sauvegardés dans :
~/.dotfiles/backup_YYYYMMDD_HHMMSS/Configuration sécurisée avec :
- Algorithmes forts uniquement (Ed25519, ChaCha20-Poly1305)
- Multiplexing activé (connexions plus rapides via
~/.ssh/sockets/) - Keep-alive pour maintenir les connexions
Configuration avec signature SSH des commits. Générer la clef :
ssh-keygen -t ed25519L'ajouter dans le ~/.gitconfig.local :
[user]
email = email@example.com
signingkey = ~/.ssh/id_ed25519.pub
# vim: set ft=gitconfig:La référencer dans les signataires autorisés :
mkdir -p ~/.config/git
echo "mail@example.com" $(cat ~/.ssh/id_ed25519.pub)" >> ~/.config/git/allowed_signers| Alias | Commande |
|---|---|
git st |
status |
git co |
checkout |
git ci |
commit --verbose |
git ca |
commit --amend |
git fix |
commit --amend --no-edit |
git lg |
Log compact avec couleurs |
git lgs |
Log avec statut des signatures |
git pf |
push --force-with-lease |
git ds |
diff --staged |
Shell moderne avec autosuggestions et completions natives.
fish # Entrer dans Fish
tide configure # Configurer le prompt Tide
chsh -s $(which fish) # Définir Fish comme shell par défaut- Tide - Prompt équivalent à Powerlevel10k
- fzf.fish - Intégration fzf (Ctrl-R historique, Ctrl-T fichiers)
- direnv - Variables d'environnement par dossier
fish/conf.d/load-local.fish source automatiquement tous les *.fish de ~/.config/fish/local.d/ au démarrage. Idéal pour les secrets et configs spécifiques à une machine.
# ~/.config/fish/local.d/secrets.fish
set -gx GITHUB_PERSONAL_ACCESS_TOKEN ghp_xxxxxxxxxxxx
set -gx TFE_TOKEN xxxxxx| Alias | Commande |
|---|---|
v |
nvim (fzf) - ouvrir fichier avec fzf |
g |
git status (ou git <cmd> avec args) |
jwt |
Décoder un token JWT |
update-dotfiles |
Pull origin master des dotfiles (depuis n'importe où) |
update-nvim |
Pull origin master de la config NeoVim |
update-all |
Met à jour dotfiles + NeoVim |
| Raccourci | Description |
|---|---|
Alt-Up |
Remonter au dossier parent |
Alt-S |
Préfixer la commande avec sudo |
Ctrl-R |
Recherche dans l'historique |
Ctrl-T |
Recherche de fichiers |
Alt-C |
cd dans un dossier |
| Commande | Description |
|---|---|
tmux new -s nom |
Nouvelle session nom |
tmux a -t nom |
Rattacher la session nom |
tmux ls |
Lister les sessions |
Ctrl-B d |
Détacher de la session |
| Raccourci | Description |
|---|---|
Ctrl-B c |
Nouvelle fenêtre |
Ctrl-B , |
Renommer la fenêtre |
Ctrl-B n |
Fenêtre suivante |
Ctrl-B p |
Fenêtre précédente |
Ctrl-B 1-9 |
Aller à la fenêtre N (clavier FR : Shift+1-9) |
Ctrl-B w |
Explorer les fenêtres (vue arborescente) |
| Raccourci | Description |
|---|---|
Ctrl-B % |
Split vertical |
Ctrl-B " |
Split horizontal |
Ctrl-B ←↑↓→ |
Naviguer entre les panes |
Note navigation : Après Ctrl-B ←↑↓→, il y a un court délai avant de récupérer le focus. Si vous appuyez sur ↑ trop vite pour l'historique des commandes, ça change de pane.
| Méthode | Description |
|---|---|
| Souris | Glisser les bordures entre les panes |
Ctrl-B Ctrl-←↑↓→ |
Redimensionner avec le clavier (maintenir Ctrl) |
| Méthode | Description |
|---|---|
| Molette souris | Scroller dans l'historique |
Ctrl-B PgUp-PgDn |
Scroller dans l'historique |
| Clic gauche + drag | Sélectionner et copier dans le clipboard au relâchement |
Ctrl-B ] |
Coller depuis le buffer tmux |
Ctrl-Shift-V |
Coller depuis le clipboard système (raccourci terminal) |
Profil par défaut personnalisé (thème TokyoNight Night, police MesloLGS NF). GNOME Terminal ne stocke rien dans un fichier : tout vit dans dconf, donc le profil est exporté dans gnome-terminal/profile.dconf.
dconf load /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ < gnome-terminal/profile.dconfb1dcc9dd-… est l'UUID du profil par défaut, identique sur toute installation GNOME : la commande écrase donc le profil existant sans en créer un nouveau. La police MesloLGS NF doit être présente (fournie par le module Fish / l'export offline plus bas).
Après avoir ajusté couleurs ou police dans les préférences GNOME Terminal :
dconf dump /org/gnome/terminal/legacy/profiles:/:b1dcc9dd-5262-4d8d-a863-c897e6d979b9/ > gnome-terminal/profile.dconfTunnel sécurisé pour exposer un port local sur internet.
./install ngrokngrok config add-authtoken <TOKEN> # Token depuis https://dashboard.ngrok.com| Commande | Description |
|---|---|
ngrok tcp 22 |
Tunnel TCP (ex: SSH) |
Assistant IA en ligne de commande.
./install claudegit clone https://github.com/Haelle/dotfiles.git ~/.dotfiles && cd ~/.dotfiles && ./install-claude-conf- Claude Code via le script officiel (si pas déjà présent)
- asdf + Node.js (cf. section asdf ci-dessous) — requis pour les LSPs npm et le MCP svelte
- CLAUDE.md global — instructions personnalisées (langue, style de code, git, sécurité)
- Skills — collection de skills spécialisés (React, Python, DevOps, SQL, etc.)
- Commands — commandes custom (
/bugfix,/plan,/pr-review,/fix-latest-build, etc.) - Settings — configuration gérée (plugins LSP, statusline, permissions)
- Statusline — script custom affichant modèle, usage quotidien, répertoire et branche git
Une image custom est disponible pour charger ma configuration Claude quand il tourne dans un Docker sandbox :
docker build -t claude-alxs:latest -f container/Containerfile.claude .
docker sandbox create --template claude-alxs:latest claude .
docker sandbox run <sandbox>Les fichiers sensibles sont bloqués en lecture par les settings :
.env,.env.**token*,*TOKEN*master.key,sandbox.key,staging.key,production.key
Gestionnaire de runtimes (Node, NeoVim, etc.) — dépendance commune des modules claude et neovim.
Le binaire asdf est installé dans ~/.local/bin/asdf (téléchargé depuis GitHub releases) et la config fish (fish/conf.d/asdf.fish) ajoute ~/.asdf/shims au PATH.
Définies en haut de lib/asdf.sh pour rester synchrones entre les PC :
| Variable | Version actuelle | Usage |
|---|---|---|
NODE_VERSION |
24.14.0 |
LSPs npm (Claude), MCP svelte |
Pour mettre à jour : éditer la variable puis relancer ./install claude (ou ./install neovim).
Pour git, tmux, ssh pas de dépendances offline, on peut donc cloner et faire :
./install git tmux sshPar contre Fish a besoin d'internet mais une installation locale peut être exportée car ça ne nécessite aucune dépendances qui ne soit dans un dépôt Debian/Ubuntu. Sur la machine source :
cp -rL ~/.config/fish /tmp/fish
# Retirer le source de Rust/Cargo : non dispo dans les dépôts Debian, donc absent
# en offline → sinon Fish lève une erreur "while sourcing ~/.cargo/env.fish" au démarrage.
rm -f /tmp/fish/conf.d/rustup.fish
tar czf fish.tar.gz -C /tmp fish && rm -rf /tmp/fish
tar czf meslo-nerd.tar.gz -C ~/.local/share/fonts MesloSur la machine cible :
tar xzf fish.tar.gz -C ~/.config/
mkdir -p ~/.local/share/fonts && tar xzf meslo-nerd.tar.gz -C ~/.local/share/fonts/ && fc-cache -f ~/.local/share/fonts/Meslo
chsh -s $(which fish)P.S: les dépendances sont fish, fzf, git, jq, tree et direnv. Elles sont installées si ./install git (et/ou) tmux (et/ou) ssh ont été installés. La police MesloLGS Nerd Font est nécessaire pour le prompt Tide (icônes) : sur Arch elle vient du paquet ttf-meslo-nerd, sur Ubuntu l'export ci-dessus la transfère depuis ~/.local/share/fonts/Meslo.
Afin de travailler en offline ce conteneur contient tout ce qu'il faut pour que mon environnement de travail soit opérationnel.
podman build -f container/Containerfile -t dotfiles-dev .
cd /chemin/vers/projet
~/path/to/dotfiles/container/devcontainer/dev monte le dossier courant sur /work et ouvre fish dedans, nvim/tmux/LSP prêts. Il monte aussi automatiquement, en lecture seule et seulement s'ils existent :
| Hôte | Conteneur | Usage |
|---|---|---|
| dossier courant | /work |
workspace |
~/.gitconfig, ~/.gitconfig.local, ~/.gitconfig.*.local |
/home/ubuntu/… |
identité, alias, clé de signature |
~/.config/git/allowed_signers |
idem | vérification des signatures SSH |
~/.ssh |
/home/ubuntu/.ssh |
clés pour committer et signer |
podman save dotfiles-dev -o dotfiles-dev.tar # machine source
podman load -i dotfiles-dev.tar # machine ciblePlugin Claude Code qui force à garder la main sur le code pour ne pas perdre ses compétences. Idée : définir un % de commits humains à atteindre, sinon Claude passe en mode coaching au lieu d'écrire le code lui-même.
Repo : https://github.com/mlolson/claude-spp
# installe le CLI npm et le plugin Claude
./install claudecd /chemin/projet
spp initCrée la config locale (.spp/ ou similaire) et démarre le suivi.
| Commande | Description |
|---|---|
spp init |
Initialiser SPP dans le projet courant |
spp stats |
Afficher le ratio humain/Claude et les statistiques |
spp modes |
Lister les modes disponibles |
spp mode [n] |
Voir ou changer le mode (1-2) |
spp drive |
Toggle "drive mode" — tu codes, Claude se limite au coaching |
spp settings |
Voir/modifier la config (target %, window, tracking…) |
spp transcript |
Voir les transcripts live ou archivés |
spp pause |
Suspendre l'enforcement pendant 24h |
spp resume |
Reprendre l'enforcement |
spp reset |
Reset du tracking au commit courant |
/coach |
(dans Claude Code) Coaching sur la session drive courante |
spp settings expose notamment :
targetPercentage: part de commits humains visée (10,25,50,100)trackingMode:commitsoulinesstatsWindow:oneDay,oneWeek,allTimemodeType: ex.weeklyGoal
SPP distingue les commits humains des commits Claude via le trailer Co-Authored-By: Claude. Sous la cible, Claude refuse d'écrire du code tant que le ratio n'est pas rattrapé.
spp drive— active le mode où Claude ne peut plus écrire de code.- Code toi-même, pose des questions, demande des explications.
- À la fin de la session,
/coachdans Claude pour obtenir un retour basé sur le transcript de la session. spp driveà nouveau pour désactiver.