fix(dotfile): divers fix
This commit is contained in:
@@ -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
|
## 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)
|
~/.dotfiles/
|
||||||
├── spaceship/
|
├── dotfiles/
|
||||||
│ └── spaceship.zsh # prompt zsh Spaceship
|
│ ├── spaceship/
|
||||||
├── zellij/
|
│ │ └── spaceship.zsh # prompt zsh Spaceship
|
||||||
│ ├── config.kdl # config principale zellij
|
│ ├── zellij/
|
||||||
│ └── layouts/
|
│ │ ├── config.kdl # config principale zellij
|
||||||
│ └── default.kdl # layout par défaut
|
│ │ ├── layouts/
|
||||||
├── zsh/
|
│ │ │ └── default.kdl # layout par défaut
|
||||||
|
│ │ └── plugins/
|
||||||
|
│ │ └── monocle.wasm # plugin zellij
|
||||||
|
│ └── zsh/
|
||||||
│ └── zshrc.perso # config zsh perso (linkée en ~/.zshrc.perso)
|
│ └── zshrc.perso # config zsh perso (linkée en ~/.zshrc.perso)
|
||||||
├── install/
|
├── install/
|
||||||
│ └── install.sh # script d'installation / mise à jour
|
│ └── install.sh # script d'installation / mise à jour
|
||||||
└── README.md
|
└── 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
|
## 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
|
### 1. Cloner ce dépôt
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone <URL_DE_CE_DEPOT> dotfiles
|
git clone https://gitlabns.nameshield.net/an.ginder/dotfiles.git ~/.dotfiles
|
||||||
cd dotfiles
|
cd ~/.dotfiles
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. Lancer le script d'installation
|
### 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`.
|
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.
|
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.
|
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.
|
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`.
|
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` :
|
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.
|
- 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.
|
- 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).
|
- `[[ -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
|
## 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
|
```bash
|
||||||
|
cd ~/.dotfiles
|
||||||
git add -A
|
git add -A
|
||||||
git commit -m "update config"
|
git commit -m "update config"
|
||||||
git push
|
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é).
|
||||||
|
|
||||||
|
|||||||
+8
-6
@@ -3,9 +3,11 @@
|
|||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
# Racine du dépôt : install/ et les packages (zellij, spaceship, zsh)
|
# Le dépôt est cloné dans ~/.dotfiles, avec cette structure :
|
||||||
# sont au même niveau, donc on remonte d'un seul cran depuis install/.
|
# ~/.dotfiles/dotfiles/ -> packages stow (zellij, spaceship, zsh)
|
||||||
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
# ~/.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 "[*] $*"; }
|
log() { echo "[*] $*"; }
|
||||||
err() { echo "Erreur: $*" >&2; }
|
err() { echo "Erreur: $*" >&2; }
|
||||||
@@ -25,7 +27,7 @@ stow_config() {
|
|||||||
mkdir -p "$target"
|
mkdir -p "$target"
|
||||||
|
|
||||||
log "Stow du package '$package' vers $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 ---
|
# --- 1. Dépendances système ---
|
||||||
@@ -33,7 +35,7 @@ log "Mise à jour des paquets apt ..."
|
|||||||
sudo apt update
|
sudo apt update
|
||||||
|
|
||||||
log "Installation des dépendances apt ..."
|
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 ---
|
# --- 2. Rust / cargo ---
|
||||||
if ! command -v cargo >/dev/null 2>&1; then
|
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
|
# mais on veut un symlink caché ~/.zshrc.perso. stow ne permet pas ce
|
||||||
# renommage nativement (sauf convention "dot-" qu'on ne veut pas imposer
|
# renommage nativement (sauf convention "dot-" qu'on ne veut pas imposer
|
||||||
# au dépôt), donc on crée le symlink manuellement.
|
# 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"
|
ZSHRC_PERSO_DEST="$HOME/.zshrc.perso"
|
||||||
|
|
||||||
if [ -e "$ZSHRC_PERSO_DEST" ] || [ -L "$ZSHRC_PERSO_DEST" ]; then
|
if [ -e "$ZSHRC_PERSO_DEST" ] || [ -L "$ZSHRC_PERSO_DEST" ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user