3 Home
kosnik edited this page 2026-07-21 11:10:48 +00:00

Documentation : Gestion des dotfiles avec GNU Stow et sous-modules Git

Introduction

Utilisation de GNU Stow pour organiser et synchroniser les fichiers de configuration (dotfiles) entre plusieurs machines, avec un sous-module Git (workflow-inc-release-hotfix) verrouillé sur une version spécifique (v1.04).


Structure du dépôt

~/dotfiles/
├── .gitignore
├── .gitmodules
├── .stow-local-ignore
├── bash/
│   ├── .bash_aliases
│   └── .bashrc
├── dunstrc/
│   └── .config/
│       └── dunst/
│           └── dunstrc
├── environment.d/
│   └── .config/
│       └── environment.d/
│           └── xdg.conf
├── foot/
│   └── .config/
│       └── foot/
│           ├── foot.ini
│           └── themes/
│               └── alacritty
├── git/
│   └── .config/
│       └── git/
│           ├── config
│           ├── gitk
│           └── ignore
├── powerline/
│   └── .config/
│       └── powerline/
│           ├── powerline.bash
│           └── powerline_custom.bash
├── pulsar/
│   ├── .config/
│   │   └── Pulsar/
│   │       └── Preferences
│   └── .gitignore
├── starship/
│   └── .config/
│       └── starship.toml
├── sway/
│   └── .config/
│       └── sway/
│           ├── config
│           └── config.d/
│               ├── 40-sway-background.conf
│               ├── 50-systemd-user.conf
│               ├── 98-assign-to-move.config
│               └── 99-exec.conf
├── vial/
│   └── vial/
│       └── corne_choc_pro/
│           └── ergol_v1.vil
├── waybar/
│   └── .config/
│       └── waybar/
│           ├── config.jsonc
│           └── style.css
└── workflow-inc-release-hotfix/  # Sous-module Git (version fixe : v1.04)
    ├── bin/
    │   └── git-next-version
    ├── docs/
    │   ├── automatisation.md
    │   ├── bugs_connus.md
    │   ├── installation.md
    │   ├── script.md
    │   └── utilisation.md
    ├── .lefthook/
    │   ├── post-merge/
    │   │   └── post-merge
    │   ├── pre-commit/
    │   │   └── export-requirements.sh
    │   ├── pre-merge-commit/
    │   │   └── bump-version-files.sh
    │   └── prepare-commit-msg/
    │       └── prepare-commit-msg
    ├── lefthook.yml
    ├── readme.md
    ├── .stow-local-ignore
    └── templates/
        └── lefthook.yml
  • Packages Stow : Chaque dossier à la racine (sauf workflow-inc-release-hotfix/) est un package à déployer.
  • Sous-module Git : workflow-inc-release-hotfix/ est verrouillé sur la version v1.04.

Prérequis

1. Installer GNU Stow et Git

# Debian/Ubuntu
sudo apt install stow git

# Arch Linux
sudo pacman -S stow git

# macOS (Homebrew)
brew install stow git

Déploiement initial

1. Cloner le dépôt avec les sous-modules

git clone --recurse-submodules https://github.com/tondolio/dotfiles.git ~/dotfiles
cd ~/dotfiles

2. Fixer la version du sous-module workflow-inc-release-hotfix

cd workflow-inc-release-hotfix && git checkout v1.04 && cd ..

3. Déployer tous les packages Stow

for dir in */; do
  if [[ "$dir" != "workflow-inc-release-hotfix/" ]]; then
    stow -v -S "${dir%/}"
  fi
done

Mise à jour

1. Mettre à jour le dépôt principal

cd ~/dotfiles
git pull

2. Mettre à jour les sous-modules

cd ~/dotfiles
git submodule update --remote --recursive
# Re-fixer la version du sous-module
cd workflow-inc-release-hotfix && git checkout v1.04 && cd ..

3. Redéployer les packages Stow (si nécessaire)

for dir in */; do
  if [[ "$dir" != "workflow-inc-release-hotfix/" ]]; then
    stow -v -R "${dir%/}"
  fi
done

Désinstallation

Supprimer les liens d'un package

stow -v -D <package>  # Exemple : stow -v -D sway

Supprimer tous les liens

for dir in */; do
  if [[ "$dir" != "workflow-inc-release-hotfix/" ]]; then
    stow -v -D "${dir%/}"
  fi
done

Ajouter un nouveau dotfile

Exemple : Ajouter ~/.config/alacritty/alacritty.yml

# Créer la structure dans le dépôt
mkdir -p ~/dotfiles/alacritty/.config/alacritty

# Copier le fichier de configuration
cp ~/.config/alacritty/alacritty.yml ~/dotfiles/alacritty/.config/alacritty/

# Déployer avec Stow
stow -v -S alacritty

# Commiter les changements
git add alacritty/
git commit -m "Ajout de la configuration Alacritty"
git push

Gestion des conflits

Si un fichier existe déjà dans $HOME (ex: ~/.bashrc) :

  • Sauvegarder : mv ~/.bashrc ~/.bashrc.bak
  • Adopter : stow --adopt -v bash

Configuration avancée

Fichier .stowrc (optionnel)

Placé à la racine du dépôt (~/dotfiles/.stowrc) :

--no-conflict
--verbose=2
--ignore=regex:^\.git$
--ignore=regex:^\.gitmodules$
--ignore=regex:^\.stow-local-ignore$
--ignore=regex:^workflow-inc-release-hotfix/

Fichier .stow-local-ignore

Utilisé pour ignorer des fichiers spécifiques dans un package (ex: dans workflow-inc-release-hotfix/).


Commandes utiles

Commande Description
stow -v -n <package> Simulation (dry-run) pour <package>.
stow -v -R <package> Remplacer les liens existants.
stow -v -D <package> Supprimer les liens pour <package>.
stow --adopt -v <package> Adopter un fichier existant.
git submodule status Vérifier l'état des sous-modules.

Notes spécifiques

  • Norme XDG : Les packages comme dunstrc/, sway/, ou waybar/ utilisent .config/ pour respecter la norme XDG Base Directory.
  • Sous-module workflow-inc-release-hotfix : Verrouillé sur v1.04. Non géré par Stow (utiliser Git uniquement).
  • Fichiers ignorés : .gitignore, .gitmodules, et .stow-local-ignore définissent les exclusions.

Ressources