Dotig

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é.
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.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…
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 ?
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.
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.
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 ou 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 :
/home/utilisateur/.cache/
(par défaut) devient
$DOTFILES/home/xdg_cache/
,/home/utilisateur/.config/
(par défaut) devient
$DOTFILES/home/xdg_config/
,/home/utilisateur/.local/bin/
(par défaut) devient
$DOTFILES/home/xdg_bin/
,/home/utilisateur/.local/share/
(par défaut) devient
$DOTFILES/home/xdg_data/
,/home/utilisateur/.local/lib/
(par défaut) devient
$DOTFILES/home/xdg_lib/
,/home/utilisateur/.local/state/
(par défaut) devient
$DOTFILES/home/xdg_sate/
,$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).
Dotig propose à ce jour 11 actions différentes :
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.
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.
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 souhaite s’en charger, Dotig ne sera compatible qu’avec Linux.
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.
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.
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.