104 lines
5.1 KiB
Markdown
104 lines
5.1 KiB
Markdown
# Dotfiles
|
|
|
|
Configuration personnelle pour zsh, zellij et spaceship, gérée avec [GNU Stow](https://www.gnu.org/software/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](https://github.com/spaceship-prompt/spaceship-prompt).
|
|
- **[Zellij](https://zellij.dev/)** (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`.
|
|
- `git` installé pour cloner le dépôt `dotfiles`.
|
|
|
|
Le script installe lui-même le reste (rust/cargo, zellij, stow, etc.) s'ils sont absents.
|
|
|
|
## Installation
|
|
|
|
### 1. Cloner ce dépôt
|
|
|
|
```bash
|
|
git clone https://gitlabns.nameshield.net/an.ginder/dotfiles.git ~/.dotfiles
|
|
cd ~/.dotfiles
|
|
```
|
|
|
|
### 2. Lancer le script d'installation
|
|
|
|
```bash
|
|
./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
|
|
|
|
1. Installe les dépendances système (`stow`, `zsh`, `curl`, etc.) via `apt`.
|
|
2. Installe Rust (`rustup`) si `cargo` n'est pas déjà disponible.
|
|
3. Installe Zellij via `cargo` et lie sa configuration (`~/.config/zellij`) avec Stow.
|
|
4. Crée le lien symbolique `~/.zshrc.perso` vers `dotfiles/zsh/zshrc.perso`.
|
|
5. Clone (ou met à jour) Spaceship et lie sa configuration (`~/.config/spaceship`) avec Stow.
|
|
6. 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 :
|
|
|
|
```bash
|
|
# à 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 `fzf` si installé, sinon menu numéroté en fallback). Dans `fzf`, `Ctrl-R` supprime 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 :
|
|
|
|
```bash
|
|
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é).
|
|
|