3
Home
kosnik edited this page 2026-07-21 11:10:48 +00:00
Table of contents
- Documentation : Gestion des dotfiles avec GNU Stow et sous-modules Git
- Introduction
- Structure du dépôt
- Prérequis
- Déploiement initial
- 1. Cloner le dépôt avec les sous-modules
- 2. Fixer la version du sous-module workflow-inc-release-hotfix
- 3. Déployer tous les packages Stow
- Mise à jour
- 1. Mettre à jour le dépôt principal
- 2. Mettre à jour les sous-modules
- 3. Redéployer les packages Stow (si nécessaire)
- Désinstallation
- Ajouter un nouveau dotfile
- Gestion des conflits
- Configuration avancée
- Commandes utiles
- Notes spécifiques
- Ressources
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 versionv1.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/, ouwaybar/utilisent.config/pour respecter la norme XDG Base Directory. - Sous-module
workflow-inc-release-hotfix: Verrouillé surv1.04. Non géré par Stow (utiliser Git uniquement). - Fichiers ignorés :
.gitignore,.gitmodules, et.stow-local-ignoredéfinissent les exclusions.