Il ne s’agit pas d’un nouveau projet : j’ai transféré cette présentation depuis mon ancien site donc la date de publication ne correspond pas à la date du projet. Ce dernier n’est pas archivé, mais il n’est plus réellement maintenu.

Je cherchais un moyen de gérer mes dotfiles efficacement avec Git. J’ai testé différents outils sans être pleinement satisfait. J’ai donc décidé de créer mon propre gestionnaire de dotfiles !

Présentation de Dotig

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.

Je souhaitais un nom à la fois court, facile à retenir et de préférence non utilisé. Je suis parti sur un nom reprenant les deux notions essentielles en les contractant : « dot » (pour dotfiles) et « git » écrit en miroir.

Ce que je souhaitais mettre en place

Dotig devait être capable de réaliser différentes actions pour s’avérer utile :

  • ajouter des dotfiles dans un dépôt Git,
  • 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 statut 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.

Je souhaitais également m’appuyer sur la spécification XDG pour différentes raisons :

  • J’aime avoir une home propre, que chaque fichier soit à sa place.
  • Cela permet de ne pas écrire en dur un emplacement et donc de pouvoir facilement transférer ses dotfiles d’une distribution Linux à une autre.
  • Je pensais que ça faciliterait la compatibilité entre les systèmes d’exploitation (Mac/Linux par exemple) ; j’en suis moins sûr maintenant à cause notamment d’un problème de casse (il me semble que pour Mac certains fichiers de configuration commencent par une majuscule).

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/.

Dotig suit ensuite la correspondance inverse lorsqu’il crée les liens symboliques.

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 ou n si besoin.

Capture d’écran du menu de Dotig affiché dans un terminal
Aperçu du menu de Dotig

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.

Les options

Il est possible de passer des options lors de l’utilisation de Dotig. 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.

Capture d’écran du retour produit par l’option -h ("help") de Dotig
Aperçu des fonctionnalités de Dotig

Par exemple, en utilisant dotig update -b, vous pourrez mettre à jour vos liens symboliques mais également rechercher et supprimer les liens symboliques cassés.

La gestion de plusieurs dépôts

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

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 configuration 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.

Il est possible d’utiliser d’autres dépôts si besoin mais la fonctionnalité n’est pas native. La tâche ne sera donc pas aussi aisée. Pour y parvenir, 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 nouveau dépôt. Avec cette solution, vous ne pouvez utiliser Dotig qu’avec le menu.

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.

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.

Récupérer Dotig

Si vous souhaitez tester l’outil, vous trouverez le code source sur son dépôt Github. 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.

Une fois téléchargé, placez-le dans un dossier inclut dans votre $PATH (par exemple ~/.local/bin inclut par défaut par Manjaro). Il faudra également vous assurer qu’il possède les droits d’exécution :

shell
Copié !
chmod +x dotig

Vous pouvez désormais l’utiliser depuis n’importe quel emplacement sur votre PC avec la commande suivante : dotig.