L'une des choses auxquelles on tient quand on configure notre système d'exploitation lors d'une nouvelle installation, c'est de le configurer le plus rapidement possible de la façon dont on a l'habitude de l'utiliser.

Essentiellement sur Windows ça se résume pas mal à réinstaller les applications habituelles (Firefox, Nanazip, 1Password, WSL, Jetbrains Toolbox, Docker, les différents drivers, Steam, Playnite, Tidal, etc...), éventuellement d'installer un logiciel pour configurer les services et le paramétrage de Windows (typiquement pour retirer les logiciels/services qui ne sont pas réellement utilisé dans un usage standard de Windows, avec WinPilot par exemple ou Win11Debloat).

Bref tout mis bout à bout, il faut bien au minimum une demi-journée, et jusqu'à deux-trois jours pour tout remettre en place en fonction du temps pour faire les backups avant de faire une (ré-)install, puis le re-paramétrage complet des différents logiciels (à moins d'utiliser des versions portables de différents logiciels pour pouvoir exporter les configurations) et de sa vitesse de connexion à internet ainsi que la puissance de son PC.

Sur Linux c'est différent puisque le système est bien plus paramétrable (et surtout bien plus facilement), que ce soit au niveau visuel et/ou technique. Par exemple en fonction de son gestionnaire de fenêtres, il est possible de configurer tout l'aspect visuel de son OS et le comportement de la plupart des applications avec quelques fichiers de configuration. Par exemple de mon côté je peux exporter le paramétrage de mon gestionnaire de fenêtre, de ma barre des tâches, de mon écran de verrouillage, de mon gestionnaire d'application, etc...

Mais le truc un peu embêtant c'est qu'avant que je connaisse l'application dont je vais vous parler, je devais copier/coller les fichiers de configuration d'un dossier à l'autre au moment de la réinstallation et si je faisais des modifications, penser à porter les modifications dans le fichier correspondant au sein de mon repo git pour sauvegarder de manière distante toutes les modifications.

Grâce à «Stow» cela devient plus simple, ce logiciel va simplement créer un lien symbolique de manière récursive et dynamique par rapport à un dossier cible.

Premièrement pour installer Stow, cela est simple, il suffit d'exécuter la commande suivante :

# Avec Debian/Ubuntu
sudo apt install stow

# Avec Arch/EndeavourOS/Manjaro
sudo pacman -S stow

# Avec Homebrew
brew install stow

Pour l'utiliser de manière simple et direct, disons qu'on a l'arborescence suivante :

Le dossier .dotfiles est le repo contenant tous les fichiers de configuration des différentes applications (au sens large) que j'utilise habituellement sous Linux. Les autres fichiers/dossiers sont à la racine de notre répertoire /home/NOTRE_USERNAME.

⚠️
Il faut supprimer tous les fichiers existants de votre repo de votre système. Par exemple si vous avez un /.dotfiles/.zshrc~ et un ~/.zshrc, vous devez supprimer le ~/.zshrc avant de passer à la suite

Pour synchroniser la configuration de vos applications avec votre repo, vous devez suivre les commandes suivantes :

cd
cd .dotfiles
stow .

La commande stow . va créer un lien symbolique dans le dossier parent dans lequel vous vous situez. Par exemple cela veut dire qu'on va passer de cela :

Avant l'utilisation de la commande stow .

À ceci :

Après l'utilisation de la commande stow .

À noter que si vous créez un nouveau dossier dans un des niveaux d'arborescence de votre repo, il peut être nécessaire de relancer la commande stow . pour que le lien symbolique du question se créer au niveau de votre dossier personnel.

⚠️
Attention à ne pas mettre des données privées ou qui doivent être sécurisées (clés SSH, mot de passe, tokens, etc...) dans un dossier qui est surveillé par Stow, car ces données deviendront publiques au prochain commit/push vers le repo distant

Grâce à Stow, il est désormais possible de remettre en quelque minutes la configuration complète pour un utilisateur. Perso je l'utilise pour mettre en place rapidement mon desktop (avec hyprland, hyprlock, kitty, waybar, neovim, fish, btop, etc...)

À votre tour d'utiliser cet outil fantastique !