Introduction

J’avais déjà un peu parlé de dotfiles sur ce site. Je vous avez présenté deux méthodes pour les gérer et les versionner. Je les essayé, mais je n’étais pas pleinement satisfait. Il en existe d’autres. Je ne les ai pas toutes testées, je n’en avais pas envie. À la place, j’ai décidé de créer mon propre script pour gérer mes dotfiles. Plus je pensais aux fonctionnalités que je souhaitais intégrer, plus je me disais qu’il pourrait servir à d’autres : Dotig est né.

Dotig logo

Pourquoi versionner ses dotfiles ?

Si vous débarquez sur Linux en venant de Windows, vous n’en verrez sans doute pas l’intérêt. En tout cas, j’étais dans ce cas-là. Puis, quelques mois ou années passent et vous comprenez un peu mieux l’architecture de votre $HOME. Vous remarquez que vos applications enregistrent des fichiers à plusieurs endroits :

  • .config (dans le meilleur des cas) pour la personnalisation de l’application,
  • .cache pour les données plus ou moins temporaires qui ne présentent pas beaucoup d’intérêt pour vous,
  • .local/share pour certains fichiers utiles au bon fonctionnement de l’application mais qui n’ont pas forcément de rapport avec vos préférences.

Un gain de temps

Parallèlement, vous avez consacré beaucoup de temps à paramétrer un nouveau logiciel pour que ses fonctionnalités et son apparence correspondent à vos besoins et vos préférences. Vous êtes content du résultat mais vous vous dîtes également que vous ne feriez pas ça tous les jours. Le résultat est certes satisfaisant, mais la tâche est un peu chronophage et n’est pas toujours très passionnante…

Un moyen de sauvegarde

Pourtant, vous pensez également qu’il faudra bien le faire que ce soit lorsque vous changerez de PC, quand vous décidez de formater votre disque dur ou si vous avez une deuxième machine et que vous souhaitez utiliser la même configuration. Certes il est possible de créer une sauvegarde temporaire sur un clé USB par exemple… mais qu’en est-il si votre disque dur rend l’âme s’en prévenir ? Et que faire si vous changez de configuration puis décidez de revenir aux anciens paramètres alors que vous ne savez plus exactement ce qui était défini ?

La possibilité de partage

Les gestionnaires de version comme Git se présentent alors comment une solution intéressante pour sauvegarder (et versionner) ses dotfiles. En plus ces derniers vous permettent, si vous le souhaitez, de partager facilement votre configuration avec d’autres personnes. Lorsqu’il s’agit de simples cases cochées dans un logiciel dont la valeur est enregistrée dans un fichier, l’intérêt peut sembler limiter.

Cependant, il s’agit parfois de morceaux de code permettant d’ajuster le comportement de l’application, comme un terminal par exemple et là, l’intérêt du partage prend plus de sens. Vous vous êtes peut-être vous-même inspiré du fichier de quelqu’un d’autre lorsque vous avez paramétré l’application. Alors, pourquoi ne pas en faire profiter les autres à votre tour ?

Seulement voilà, un autre casse-tête se présente. Comment gérer ses dotfiles efficacement ? Il existe plusieurs solutions ; Dotig en est une. Même si beaucoup reposent sur les liens symboliques, elle ne fonctionnent pas tout à fait de la même manière. Ainsi, je ne sais pas si Dotig répond aux besoins de tout le monde, mais il correspond à mon envie de les gérer. Et c’est son but premier.

Présentation de Dotig

Son nom vient de la contraction de Dot (pour dotfiles) et Git (en miroir). Ainsi, comme son nom l’indique, Dotig permet de gérer ses dotfiles à l’aide de Git. Le mécanisme repose sur les liens symboliques pour la partie gestion des fichiers et sur les commandes Git pour la partie sauvegarde/version.

Son fonctionnement

Dotig peut s’utiliser via un menu proposant une sélection de choix ou en ligne de commandes. Dans le premier cas, il vous suffit de sélectionner l’action à exécuter à l’aide de nombres et de confirmer vos choix avec y/n si besoin. Dans le deuxième cas, vous pouvez directement gérer vos dotfiles en écrivant les actions dans le terminal. Ainsi, pour mettre à jour les liens symboliques, vous pouvez tout simplement écrire dotig update. Sauf erreur de ma part, les deux solutions permettent de faire exactement la même chose.

Au niveau de l’architecture du dépôt, Dotig s’appuie sur la spécification XDG. Ainsi, il place vos fichiers selon les correspondances suivantes :

  • $XDG_HOME_CACHE ou /home/utilisateur/.cache/ (par défaut) devient $DOTFILES/home/xdg_cache/,
  • $XDG_HOME_CONFIG ou /home/utilisateur/.config/ (par défaut) devient $DOTFILES/home/xdg_config/,
  • $XDG_HOME_BIN ou /home/utilisateur/.local/bin/ (par défaut) devient $DOTFILES/home/xdg_bin/,
  • $XDG_HOME_DATA ou /home/utilisateur/.local/share/ (par défaut) devient $DOTFILES/home/xdg_data/,
  • $XDG_HOME_LIB ou /home/utilisateur/.local/lib/ (par défaut) devient $DOTFILES/home/xdg_lib/,
  • $XDG_HOME_STATE ou /home/utilisateur/.local/state/ (par défaut) devient $DOTFILES/home/xdg_sate/,
  • tous les autres fichiers dans $HOME ( /home/utilisateur/ ) sont déplacés en recopiant la structure dans $DOTFILES/home/.

Évidemment, Dotig suit la correspondance inverse lorsqu’il crée les liens symboliques.

J’ai choisi cette architecture en pensant que ça faciliterait la compatibilité entre les systèmes d’exploitation. Cependant, je ne sais pas si c’est vraiment le cas. Un autre problème se pose : le format des dossiers (comme la casse ou tout simplement l’appellation).

Ses fonctionnalités

Dotig propose à ce jour 11 actions différentes :

  • ajouter des dotfiles,
  • mettre à jour les liens symboliques,
  • supprimer les liens symboliques,
  • créer un commit,
  • envoyer les commits sur le dépôt distant,
  • récupérer les changements depuis le dépôt distant,
  • mettre à jour les sous-modules de Git,
  • afficher le statuts du dépôt local,
  • vérifier l’existence de mises à jour pour Dotig,
  • afficher le numéro de version de Dotig,
  • afficher l’aide.
Menu de Dotig

Les options

Il est possible d’utiliser des options. Par exemple, si au lancement de Dotig vous souhaitez afficher le statut de votre dépôt, vous pouvez utiliser dotig -s.

Si vous utilisez Dotig en ligne de commande, chaque commande possède également des options. Vous pouvez en connaître la liste en utilisant le format suivant dotig commande -h. Par exemple, en utilisant dotig update -b, vous pourrez mettre à jour vos liens symboliques mais également rechercher et supprimer les liens symboliques cassés.

dotig --help : liste des fonctionnalités

La gestion de plusieurs dépôts

Si vous souhaitez versionner certains fichiers sur un dépôt privé, Dotig vous permet de gérer un deuxième dépôt. Pour cela, il suffit d’utiliser l’option -p après avoir défini la variable d’environnement DOTFILES_PRIVATE. La structure de ce dépôt sera identique au premier.

J’utilise le mot « private » pour dépôt privé, mais je ne vous conseille pas d’y versionner vos mots de passe pour autant. Il peut servir à versionner certains fichiers de config contenant des adresses e-mails (je pense au fichier de configuration de Git par exemple) que vous ne souhaitez pas laisser à la vue de tous.

S’il vous faut d’autres dépôts, c’est possible, mais comme ce n’est pas prévu, la tâche ne sera pas aussi aisée. Vous pouvez utiliser dotig -i et lorsqu’il vous est demandé si le dépôt est correct, il vous suffit de répondre « non » et de saisir l’adresse de votre dépôt. Avec cette solution, vous ne pouvez utiliser Dotig qu’avec le menu.

Sa compatibilité au vu de ses dépendances

Pour fonctionner, Dotig a besoin de trois choses : Linux, Git et GNU Coreutils. Éventuellement, si vous souhaitez utiliser la fonctionnalité pour rechercher les mises à jour de Dotig, il vous faudra également curl.

Je l’ai testé sur plusieurs distributions GNU/Linux et tout semblait fonctionner correctement. Cependant, je ne peux pas vous assurer que ce soit le cas pour toutes les distributions. Certaines peuvent utiliser des versions de logiciel plus anciennes/récentes et, par conséquent, certaines options peuvent ne pas être les mêmes.

Mac n’est pas supporté. Ce n’est pas l’envie qui manque mais les moyens : sans Mac à disposition, je ne peux pas tester. Donc, je n’ai pas envie de toucher au script à l’aveugle. Le jour où j’aurai Mac OS à disposition, je testerai volontiers. De même, si je trouve le temps – puisque je n’en ai pas besoin – je regarderai également comment fonctionne le script sur BSD.

En attendant, sauf si quelqu’un veut s’en charger, Dotig ne sera compatible qu’avec Linux.

Ce que Dotig ne fait pas

Il doit sans doute manquer quelques fonctionnalités. Par exemple, il n’est pas possible de lister les fichiers suivis et/ou les fichiers non suivis. Je n’ai pas encore pris le temps de créer cette possibilité, mais j’y songe.

Dotig ne gère pas non plus les secrets. Cela peut-être intéressant, plutôt qu’un dépôt privé, mais je ne sais pas trop comment m’y prendre et surtout, je n’en ai pas le besoin, donc je n’ai pas pris le temps de chercher.

Il manque peut-être d’autres fonctionnalités, je suis ouvert aux suggestions.

Récupérer Dotig

Comme à mon habitude, vous pouvez choisir entre Github ou Gitlab pour récupérer le script. Le fichier qui vous intéresse dans le dépôt se nomme dotig. Il pèse environ 70ko. La taille vient du fait qu’il fait un peu plus de 2 600 lignes de code tout de même. J’aurai pu le scinder en plus petits fichiers, mais je souhaitais qu’il soit facilement portable.

Ainsi, une fois téléchargé, il ne vous reste plus qu’à vérifier les droits d’exécution :

chmod +x dotig

Puis, vous pouvez le placer dans ~/.local/bin pour l’utiliser depuis n’importe quel endroit sur votre PC avec la commande dotig.

Vérifiez tout de même que ~/.local/bin est par défaut dans votre PATH (c’est le cas pour Manjaro), sinon, il faut l’ajouter.

Épilogue

Au final, la création de Dotig m’a pris un peu de temps ; sans doute plus qu’une gestion à la main. Cependant, sur du long terme, je me dis que je pourrais gérer facilement mes dotfiles sans trop me poser de questions puisque je sais exactement comment le script fonctionne. Je pourrais également le faire évoluer selon mes envies.

Je ne prétends pas que ma solution est parfaite. Il est également possible que des bugs persistent… Son plus gros défaut pour le moment est sans doute son manque de compatibilité. Idéalement, j’aimerai qu’il puisse fonctionner aussi bien sur Linux (peu importe la distribution) et sur Mac. Pour Linux, il ne devrait pas y avoir de problèmes. Pour Mac, il m’en faudrait un sous la main pour pouvoir tester et rendre Dotig compatible. Actuellement, certaines fonctions dépendent encore de GNU Coreutils.

Aucun commentaire sur “Dotig : un gestionnaire de dotfiles” pour le moment.

S'abonner aux commentaires

Laisser un commentaire

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