Dotfiles
Configuration personnelle pour zsh, zellij et spaceship, gérée avec GNU Stow et installée via un script d'automatisation.
Pourquoi ce projet
L'objectif est d'avoir un environnement shell reproductible en une commande sur n'importe quelle machine (Debian/Ubuntu), sans avoir à reconfigurer manuellement :
- zsh avec une configuration personnalisée (
.zshrc.perso) et le prompt Spaceship. - Zellij (multiplexeur de terminal, alternative à tmux) avec une config et des layouts prédéfinis, plus un système d'auto-attache à la session précédente à chaque ouverture de terminal (au lieu de repartir d'une session vierge à chaque fois).
- Une poignée d'outils CLI en Rust (
bat,bottom,diskus,procs) installés au passage.
Les fichiers de config sont gérés avec Stow plutôt que copiés directement : Stow crée des liens symboliques depuis ce dépôt vers leur emplacement final (~/.config/..., ~/.zshrc.perso, etc.). Ça permet de modifier les fichiers de config à un seul endroit (ce dépôt), de les versionner avec git, et de les synchroniser facilement entre plusieurs machines.
Contenu du dépôt
Le dépôt est cloné dans ~/.dotfiles (dossier caché, à créer manuellement) et contient :
~/.dotfiles/
├── dotfiles/
│ ├── spaceship/
│ │ └── spaceship.zsh # prompt zsh Spaceship
│ ├── zellij/
│ │ ├── config.kdl # config principale zellij
│ │ ├── layouts/
│ │ │ └── default.kdl # layout par défaut
│ │ └── plugins/
│ │ └── monocle.wasm # plugin zellij
│ └── zsh/
│ └── zshrc.perso # config zsh perso (linkée en ~/.zshrc.perso)
├── install/
│ └── install.sh # script d'installation / mise à jour
└── README.md
Le sous-dossier dotfiles/ regroupe les packages Stow (un dossier par outil configuré). install/install.sh s'appuie sur sa propre position pour retrouver ce sous-dossier, donc l'ensemble fonctionne quel que soit l'endroit exact où ~/.dotfiles est cloné.
Prérequis
- Une distribution Debian/Ubuntu (le script utilise
apt). - Un accès
sudo. gitinstallé pour cloner le dépôtdotfiles.
Le script installe lui-même le reste (rust/cargo, zellij, stow, etc.) s'ils sont absents.
Installation
1. Cloner ce dépôt
git clone https://gitlabns.nameshield.net/an.ginder/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
2. Lancer le script d'installation
./install/install.sh
Le script est idempotent et non destructif : si une configuration existe déjà à l'endroit ciblé (~/.config/zellij, ~/.zshrc.perso, etc.), il ne touche à rien et passe à l'étape suivante plutôt que d'écraser quoi que ce soit. Pour forcer une réinstallation d'une config donnée, il faut supprimer manuellement le dossier/fichier concerné avant de relancer le script.
Ce que fait le script
- Installe les dépendances système (
stow,zsh,curl, etc.) viaapt. - Installe Rust (
rustup) sicargon'est pas déjà disponible. - Installe Zellij via
cargoet lie sa configuration (~/.config/zellij) avec Stow. - Crée le lien symbolique
~/.zshrc.persoversdotfiles/zsh/zshrc.perso. - Clone (ou met à jour) Spaceship et lie sa configuration (
~/.config/spaceship) avec Stow. - Installe des outils Rust additionnels :
bat,bottom,diskus,procs,cargo-update.
Activer la config zsh perso
Le script crée le lien ~/.zshrc.perso, mais il faut le sourcer depuis ton ~/.zshrc principal pour qu'il soit pris en compte :
# à ajouter dans ~/.zshrc
[ -f ~/.zshrc.perso ] && source ~/.zshrc.perso
Auto-attache à la session Zellij précédente
Par défaut, ~/.zshrc.perso peut lancer une nouvelle session Zellij à chaque ouverture de terminal. Pour retrouver automatiquement la dernière session en cours (ou choisir parmi plusieurs), ajoute la fonction suivante dans ~/.zshrc.perso (ou dans le fichier zellij de dotfiles/zsh/) à la place d'un simple zellij :
- Une seule session existante → attache automatique, sans interaction.
- Plusieurs sessions → sélection interactive (menu
fzfsi installé, sinon menu numéroté en fallback). Dansfzf,Ctrl-Rsupprime la session surlignée. [[ -n "$ZELLIJ" ]]empêche la fonction de se redéclencher à l'intérieur d'une session déjà active (panneaux/onglets zellij).
Mettre à jour la configuration
Après avoir modifié un fichier dans dotfiles/ (dotfiles/zellij/config.kdl, dotfiles/zsh/zshrc.perso, etc.), les changements sont immédiatement visibles (les fichiers cibles sont des liens symboliques). Il suffit de commit/push pour les partager avec d'autres machines :
cd ~/.dotfiles
git add -A
git commit -m "update config"
git push
Sur une autre machine, un git pull dans ~/.dotfiles suffit à récupérer les changements (pas besoin de relancer install.sh, sauf si un nouveau fichier de config a été ajouté).