111 lines
3.3 KiB
Bash
Executable File
111 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && 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; }
|
|
|
|
# usage: stow_config <nom_package> <répertoire_cible>
|
|
# Si le répertoire cible existe déjà, on ne touche à rien (idempotence
|
|
# non-destructive) : on suppose que la config est déjà en place.
|
|
stow_config() {
|
|
local package="$1"
|
|
local target="$2"
|
|
|
|
if [ -e "$target" ]; then
|
|
log "Config déjà présente ($target), on ne touche à rien. Skip."
|
|
return
|
|
fi
|
|
|
|
mkdir -p "$target"
|
|
|
|
log "Stow du package '$package' vers $target ..."
|
|
(cd "$DOTFILES_DIR" && stow -vSt "$target" "$package")
|
|
}
|
|
|
|
# --- 1. Dépendances système ---
|
|
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 fzf zoxide
|
|
|
|
# --- 2. Rust / cargo ---
|
|
if ! command -v cargo >/dev/null 2>&1; then
|
|
log "cargo introuvable, installation de rustup ..."
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
|
|
fi
|
|
|
|
if [ -f "$HOME/.cargo/env" ]; then
|
|
# shellcheck disable=SC1091
|
|
source "$HOME/.cargo/env"
|
|
fi
|
|
|
|
if ! command -v cargo >/dev/null 2>&1; then
|
|
err "cargo toujours introuvable après installation, abandon."
|
|
exit 1
|
|
fi
|
|
|
|
# --- 3. Zellij + sa config ---
|
|
log "Installation de zellij ..."
|
|
#cargo install --locked zellij
|
|
|
|
stow_config "zellij" "$HOME/.config/zellij"
|
|
|
|
# --- 4. Zsh perso + zshrc principal ---
|
|
# Les fichiers restent nommés "zshrc" et "zshrc.perso" (sans point) dans le
|
|
# dépôt, mais on veut des symlinks cachés ~/.zshrc et ~/.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 les symlinks manuellement.
|
|
|
|
link_dotfile() {
|
|
local src="$1"
|
|
local dest="$2"
|
|
|
|
if [ -e "$dest" ] || [ -L "$dest" ]; then
|
|
log "$dest existe déjà, on ne touche à rien. Skip."
|
|
return
|
|
fi
|
|
|
|
if [ ! -f "$src" ]; then
|
|
err "Fichier source introuvable : $src"
|
|
exit 1
|
|
fi
|
|
|
|
log "Création du symlink $dest -> $src ..."
|
|
ln -s "$src" "$dest"
|
|
}
|
|
|
|
link_dotfile "$DOTFILES_DIR/zsh/zshrc" "$HOME/.zshrc"
|
|
link_dotfile "$DOTFILES_DIR/zsh/zshrc.perso" "$HOME/.zshrc.perso"
|
|
|
|
# --- 5. Spaceship (prompt zsh) ---
|
|
SPACESHIP_DIR="$HOME/.zsh/spaceship-prompt"
|
|
|
|
if [ -d "$SPACESHIP_DIR/.git" ]; then
|
|
log "Spaceship (upstream) déjà présent, mise à jour ..."
|
|
(cd "$HOME/.zsh" && git -C spaceship-prompt pull --ff-only)
|
|
elif [ -e "$SPACESHIP_DIR" ]; then
|
|
log "$SPACESHIP_DIR existe mais n'est pas un dépôt git, on ne touche à rien. Skip."
|
|
else
|
|
log "Installation de spaceship (clone upstream) ..."
|
|
mkdir -p "$HOME/.zsh"
|
|
git clone --depth=1 https://github.com/spaceship-prompt/spaceship-prompt.git "$SPACESHIP_DIR"
|
|
fi
|
|
|
|
stow_config "spaceship" "$HOME/.config/spaceship"
|
|
|
|
# --- 6. Outils Rust additionnels ---
|
|
log "Installation des outils Rust (bat, bottom, diskus, procs, cargo-update) ..."
|
|
cargo install --locked bat bottom diskus procs cargo-update
|
|
|
|
log "Installation terminée avec succès."
|
|
|