Gérer ses dotfiles avec git

Gérer ses dotfiles avec git

L’utilisation de plusieurs ordinateurs sous Linux, peut devenir un vrai cauchemar lorsque l’on veut maintenir la même configuration à jour. Dans mon quotidien il m’arrive d’utiliser trois ordinateurs différents. Et j’aime bien retrouver mes marques quel que soit la machine utilisée. Au départ je « trimballais » partout une clef usb avec tous mes fichiers de configurations, mais cette solution a atteint sa limite très rapidement.

Elle était surtout très contraignante car, je devais en permanence avoir ma clef usb sur moi et en cas de modification de configuration penser à faire une copie (ce qui arrivait une fois sur mille) sur la dite clef pour pouvoir mettre à jour mes autres ordinateurs. Du coup je me retrouvais avec des configurations très hétéroclites.

J’ai donc décidé de créer un dépôt git pour les différentes configurations que je souhaite déployer sur mes ordinateurs. Certains diront pourquoi ne pas tout grouper dans un même dépôt, je préfère les séparer en cas problème sur un cela ne me bloquera pas le reste.

C’est alors que j’ai entendu parler de vcsh et mr (Merci à Brice camarade libriste qui m’a expliqué les bases). Ses deux petits programmes couplés avec git m’ont permit de centraliser tous mes fichiers de configurations sur mon serveur gitlab et ainsi de pouvoir installer mon environnement sur tous les ordinateurs que j’utilise.

VCSH – Version Control System for $HOME – multiple Git repositories in $HOME

Comme son nom l’indique il permet de faire de la gestion de version pour le $HOME. Grâce à lui plusieurs dépôts git peuvent cohabiter dans le même répertoire. Il centralise toutes les têtes de dépôts au même endroit, par défaut il les place dans ~/.config/vcsh/repos.d mais il est tout à fait possible de le changer, de même si l’on désire maintenir plusieurs dépôts git ailleurs que dans le $HOME. Pour plus d’informations je vous invite sur la page github du projet

Passons à son installation, sous Debian,

 mr pour myrepo

mr intervient principalement sur l’utilisation et la configuration des dépôts. Dans un premier temps il permet avec une seule ligne de commande, de livrer et pousser les modifications, mettre à jour simultanément tous les dépôts renseignés dans sa configuration. Dans un second temps il permet aussi de gérer la configuration de ses mêmes dépôts. Dans mon cas il me permet de pousser mes modifications à la fois sur mon serveur gitlab mais aussi sur mon compte github pour en garder une sauvegarde. Il me permet de rajouter une url à mon origin dès le clonage des dépôts, ce qui m’évite une configuration post-installation de tous mes dépots. Pour plus d’informations voici la page du projet.

L’installation sur Debian est toujours aussi simple

Préparatifs avant la transformation

Tout d’abords j’ai défini quels fichiers de configurations que je souhaite garder à jour et déployer sur mes différents ordinateurs:

  1. La configuration d’openbox
  2. La configuration d’emacs
  3. La configuration de terminator
  4. La configuration de zsh

Initialisation avec vcsh

J’ai au préalable créé sur gitlab et github un dépôt par configurations. Ensuite j’ai suivi la documentation de vcsh pour créer un par un par les dépôts. Exemple avec openbox :

J’ai reproduit cette manipulation pour chacun des dépôts à initialiser. Petite astuce si le dépôt git existe déjà, comme ce fut le cas pour moi avec ma configuration d’emacs, dont je ne voulais pas perdre l’historique. Il m’a suffi de créer le chemin vers les fichiers de configurations dans le dépôts git avant la migration vers vcsh.

Pour emacs il faut de l’on retrouve le chemin exact vers le fichier init.el.

Ensuite j’ai supprimé totalement le dossier .emacs de mon $HOME, pour le cloner avec vcsh.

Ainsi j’ai put garder l’historique de mon dépôt emacs, et je peux maintenant l’utiliser avec vcsh sans problème.

Configuration de mr

Une fois tous mes dépôts de configuration initialiser avec vcsh, je suis passé à la configuration de mr dont le but premier, dans mon cas, est de pouvoir pousser mes modifications sur mon gitlab et les sauvegarder sur github. Il n’y a pas très longtemps je n’étais pas pour l’utilisation de github, mais les différents commentaires sur cet article et une récente discussion avec des amis m’a fait changer d’avis. Et comme de toute façon ses dépôts seront public pourquoi ne pas en faire profiter les utilisateurs de github cela pourra être utile à quelqu’un, qui sait.

La configuration de mr se fait via un fichier .mrconfig directement placé dans le $HOME. Voici le mien

Petite explication :

Lors du clonage des dépôts mr rajoutera l’url de mon compte github à l’origin déjà configurée.

Ce qui me permet de pousser d’un seul coup tous les dépôts sur mon github.

Déploiement

A partir de maintenant je peux déployer mes configurations sur n’importe quel ordinateur ou git, vcsh et mr sont installés.

Je procède comme suit :

Et voilà en quelques minutes j’ai déployé ma configuration et je suis prêt à travailler. S’il m’arrive de faire des modifications je les livre et les pousse directement dans le dépôt concerné. Et sur mes autres ordinateurs il me suffit de faire une mise à jour avec la commande ‘mr update‘ pour qu’elles soient prises en comptent.

Conclusion

Depuis que j’utilise cette méthode je revis littéralement, je ne me soucis plus de savoir si j’ai ma clef usb à jour et avec moi. Tout est centralisé sur mon gitlab et j’ai mon github en sauvegarde. Je l’ai étendu sur d’autre projet sur lesquels je travaille.

5 thoughts on “Gérer ses dotfiles avec git

  1. Bonjour,

    Un truc me chiffonne vachement avec le partage de fichiers de configuration du home. À moins que je ne sois super passé à côté de quelque chose, comment gérez-vous la plupart de vos mots de passe / clés secrètes etc. ?

    Car au delà de l’utilité de partager ses petites recettes perso, le seul intérêt que je vois à mettre en place un versionning de ses config, c’est de pouvoir les synchroniser entre plusieurs postes.

    Un cas très concret en ce qui me concerne est ma config emacs. Elle est séparée en une 10aine de fichiers différents organisés en terme de grande fonctionnalité (code, mail, irc, org, site perso…). Assez régulièrement des informations sensibles viennent se nicher dans ces fichiers (par exemple mes règles de tri de mail. Je n’ai pas envie que le monde entier relève facilement des adresse valides apparaissant dans mes critères).

    Bref, je suis curieux de savoir comment vous gérez ça. De fait, j’ai pris le pli de ne synchroniser mes config qu’au sein d’un container encfs sur un serveur perso (et donc ben… pas partagé) mais si une solution viable existait permettant l’ouverture partielle de ces recettes, je suis preneur de bonnes idées 🙂

    1. Bonjour Milouse,

      Pour mes fichiers sensibles, je les laisse en privé sur mon serveur gitlab, et il n’y a que moi qui y est accès, et ils ne sont pas répliqués sur github. C’est se qu j’utilise en ce moment.
      Si vous ne pouvez installer de serveur gitlab il est tout à fait possible de chiffrer des fichiers sur un dépôt Git, je n’ai plus le nom du programme en tête mais dès que je le retrouve je vous le donnerai. De ce fait sur n’importe quel dépôt public vous pouvez rendre non lisible certains fichiers de configuration. Les fichiers chiffrés ne seront lisible (a confirmé je n’ai pas encore essayé) qu’après import en local avec des clefs de déchiffrage.

  2. J’utilise une solution entre la clés usb et vcsh.
    Un simple dépot git situé par exemple dans ~/code/dotfiles/ où se trouvent tous mes fichiers de config versionnés.

    Je fait pointer mes fichiers comme ~/.tmux.conf vers ~/code/dotfiles/.tmux.conf

    Ensuite je modifie ma config directement dans mon répertoire dotfiles 🙂

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.