Gestion des dotfiles


Sous Unix, nous avons moult fichiers de configuration, souvent cachés parce que commençant par un ‘.’. Par exemple le fichier .bashrc. Il peut être intéressant de conserver un historique de ces fichiers et de pouvoir les réutiliser sur une autre machine.

L’idée est donc de mettre ces fichiers dans un dépôt git et de les pousser régulirement vers le serveur (si possible externe).

Vous devez donc disposer d’un serveur git opérationnel, d’une connaissance des commandes git et d’une dose de courage.

Un dépôt bare

Sur votre serveur, créez un dépôt bare que vous appellerez, par exemple, dotfiles.

% mkdir dotfiles
% cd dotfiles
% git init -bare

Cloner le dépôt bare

Sur votre machine, clonez le dépôt bare créé plus haut :

% git clone https://mon_serveur/depots/dotfiles .dotfiles
Cloning into '.dotfiles'...

warning: You appear to have cloned an empty repository

done.

Gérez les fichiers et répertoire dot

C’est l’opération la plus délicate et la plus rébarbative de la mise en place.

Pour chacun des fichiers que vous voulez voir mis dans le dépôt, déplacer ce fichier dans le répertoire du dépôt que vous venez de cloner et faites un lien symbolique, depuis ce fichier vers sa place initiale. Compliqué ? Pas tant que ça, voyez plutôt (l’ami de Mickey).

j’ai ajouté un répertoire avec le nom de ma machine ${HOSTNAME} pour me permettre de gérer les fichiers dot de plusieurs ordinateurs. Je pourrais ajouter une indirection de plus avec le type de machine, serveur ou poste de travail.

% cd ①
% mv .bashrc ~/.dotfiles/tarzan ②
% ln -s /.dotfiles/tarzan/.bashrc ③

① on s’assure d’être dans son répertoire HOME ;
② on déplace le fichier bashrc dans le répertoire cloné ;
③ on crée un lien symbolique depuis la version du répertoire cloné vers notre ${HOME}

On procède de la même manière pour les répertoires, par exemple .config.

Quelques fichiers supplémentaires

Vous pouvez adjoindre cette liste non exhaustive, la liste des logiciels installés. Vous gagnerez un temps précieux en lançant l’installation d’une traite de tous les logiciels dont vous avez besoin.

  • Sur FreeBSD, exécutez la commande pkg prime-list > ~/.dotfiles/tarzan/installed_pkg.txt. Pour restaurer cette liste vous pouvez utiliser la succession de commandes pkglist=$(cat ~/.dotfiles/x220/installed_pkg.txt); sudo pkg install $pkglist.
  • Sur Debian et assimilés utilisez sudo dpkg-query -f '${binary:Package}\n' -W > ~/.dotfiles/tarzan/installed_pkg.txt packages_list.txt et pour réinstaller cette liste, sudo xargs -a ~/.dotfiles/tarzan/installed_pkg.txt apt install
  • Enfin sur Redhat et assimilé, utilisez rpm -qa > ~/.dotfiles/tarzan/installed_pkg.txt et pour réinstaller, utilisez cat ~/.dotfiles/x220/tarzan/installed_pkg.txt | xargs sudo dnf -y install -`

Pensez à mettre jour cette liste régulirement.

Gestion git

Ensuite, c’est de la gestion git basique.

% cd ~/.dotfiles/
% git add
% git commit -m "Commit initial" -a
% git push https://mon_serveur/depots

Le plus de Monsieur Git

Dans les fichiers que je veux gérer se trouve le répertoire .vim qui lui-même contient des clones des greffons que j’utilise. Ceux-ci doivent être ajoutés en temps que submodules

Cela se fait assez facilement, une fois que l’on a compris le principe. En utilisant des submodules, vous vous assurez d’avoir la dernière version.

git add submodule <URL> <PATH>

Pour le module vim-mardown que j’utilise pour écrire ce billet, voilà ce que cela donne (à adapter votre configuration) :

git submodule add https://github.com/preservim/vim-markdown .dotfiles/tarzan/.vim/pack/plugins/start/vim-markdown

Et la suite ?

La suite est simple à chaque modification de l’un de ces fichiers, il faut penser faire le git commit et le git push pour maintenir votre dépôt à jour.

Conclusion

Il existe des scripts ou d’autres méthodes pour la gestion des dotfiles. J’ai préféré ne pas réinventer la roue et faire cela avec des commandes simple, souvent connues de toustes, pour ne pas ajouter à des cerveaux déjà encombrés des commandes supplémentaires.

powered by FreeBSD