diff --git a/README.md b/README.md index 6545fdd..864bfab 100644 --- a/README.md +++ b/README.md @@ -14,22 +14,27 @@ Les fichiers de config sont gérés avec **Stow** plutôt que copiés directemen ## Contenu du dépôt +Le dépôt est cloné dans `~/.dotfiles` (dossier caché, à créer manuellement) et contient : + ``` -dotfiles/ (racine du dépôt) -├── spaceship/ -│ └── spaceship.zsh # prompt zsh Spaceship -├── zellij/ -│ ├── config.kdl # config principale zellij -│ └── layouts/ -│ └── default.kdl # layout par défaut -├── zsh/ -│ └── zshrc.perso # config zsh perso (linkée en ~/.zshrc.perso) +~/.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 ``` -Tout est réuni dans un seul dépôt git : les packages de configuration (`spaceship/`, `zellij/`, `zsh/`) et le script d'installation (`install/`) sont au même niveau. +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 @@ -44,8 +49,8 @@ Le script installe lui-même le reste (rust/cargo, zellij, stow, etc.) s'ils son ### 1. Cloner ce dépôt ```bash -git clone dotfiles -cd dotfiles +git clone https://gitlabns.nameshield.net/an.ginder/dotfiles.git ~/.dotfiles +cd ~/.dotfiles ``` ### 2. Lancer le script d'installation @@ -61,7 +66,7 @@ Le script est idempotent et non destructif : si une configuration existe déjà 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 `zsh/zshrc.perso` (dans ce dépôt). +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`. @@ -78,83 +83,21 @@ Le script crée le lien `~/.zshrc.perso`, mais il faut le sourcer depuis ton `~/ 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` : -```zsh -zellij_autostart() { - [[ -n "$ZELLIJ" ]] && return - [[ -o interactive ]] || return - - local sessions - sessions=$(zellij list-sessions --no-formatting 2>/dev/null) - - if [[ -z "$sessions" ]]; then - zellij - return - fi - - local count - count=$(printf '%s\n' "$sessions" | wc -l) - - if (( count == 1 )); then - zellij attach "$(printf '%s\n' "$sessions" | cut -d' ' -f1)" - return - fi - - if command -v fzf >/dev/null 2>&1; then - local choice - choice=$(printf '%s\n' "$sessions" | fzf \ - --tac --height=40% --border \ - --prompt="Session zellij > " \ - --header 'Entrée: attacher | Ctrl-R: supprimer la session surlignée' \ - --bind 'ctrl-r:execute-silent(name=$(echo {} | cut -d" " -f1); zellij kill-session "$name" 2>/dev/null; zellij delete-session "$name" --force 2>/dev/null)+reload(zellij list-sessions --no-formatting 2>/dev/null)' \ - | cut -d' ' -f1) - - if [[ -n "$choice" ]]; then - zellij attach "$choice" - else - zellij - fi - else - print -P "%BSessions zellij disponibles :%b" - local -a names - local i=1 - while IFS= read -r line; do - names+=("${line%% *}") - printf " %d) %s\n" "$i" "$line" - ((i++)) - done <<< "$sessions" - printf " n) Nouvelle session\n" - read "choix?Ton choix : " - if [[ "$choix" == "n" || -z "$choix" ]]; then - zellij - elif (( choix >= 1 && choix <= ${#names[@]} )); then - zellij attach "${names[$choix]}" - else - zellij - fi - fi -} - -zellij_autostart -``` - 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). -`fzf` est optionnel mais recommandé pour une meilleure expérience : -```bash -sudo apt install fzf -``` - ## Mettre à jour la configuration -Après avoir modifié un fichier du dépôt (`zellij/config.kdl`, `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 : +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` à la racine du dépôt suffit à récupérer les changements (pas besoin de relancer `install.sh`, sauf si un nouveau fichier de config a été ajouté). +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é). diff --git a/install/install.sh b/install/install.sh index 66d3baf..56a4bf9 100755 --- a/install/install.sh +++ b/install/install.sh @@ -3,9 +3,11 @@ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# Racine du dépôt : install/ et les packages (zellij, spaceship, zsh) -# sont au même niveau, donc on remonte d'un seul cran depuis install/. -ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" +# Le dépôt est cloné dans ~/.dotfiles, avec cette structure : +# ~/.dotfiles/dotfiles/ -> packages stow (zellij, spaceship, zsh) +# ~/.dotfiles/install/ -> ce script +# DOTFILES_DIR pointe donc sur le sous-dossier "dotfiles" voisin de "install". +DOTFILES_DIR="$(cd "$SCRIPT_DIR/../dotfiles" && pwd)" log() { echo "[*] $*"; } err() { echo "Erreur: $*" >&2; } @@ -25,7 +27,7 @@ stow_config() { mkdir -p "$target" log "Stow du package '$package' vers $target ..." - (cd "$ROOT_DIR" && stow -vSt "$target" "$package") + (cd "$DOTFILES_DIR" && stow -vSt "$target" "$package") } # --- 1. Dépendances système --- @@ -33,7 +35,7 @@ log "Mise à jour des paquets apt ..." sudo apt update log "Installation des dépendances apt ..." -sudo apt -y install apt-transport-https curl gnupg stow zsh +sudo apt -y install apt-transport-https curl gnupg stow zsh fzf # --- 2. Rust / cargo --- if ! command -v cargo >/dev/null 2>&1; then @@ -62,7 +64,7 @@ stow_config "zellij" "$HOME/.config/zellij" # mais on veut un symlink caché ~/.zshrc.perso. stow ne permet pas ce # renommage nativement (sauf convention "dot-" qu'on ne veut pas imposer # au dépôt), donc on crée le symlink manuellement. -ZSHRC_PERSO_SRC="$ROOT_DIR/zsh/zshrc.perso" +ZSHRC_PERSO_SRC="$DOTFILES_DIR/zsh/zshrc.perso" ZSHRC_PERSO_DEST="$HOME/.zshrc.perso" if [ -e "$ZSHRC_PERSO_DEST" ] || [ -L "$ZSHRC_PERSO_DEST" ]; then