-- Leo's gemini proxy

-- Connecting to unbon.cafe:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;

DotFiles / Fichiers cachés


2023-04-06


Les dotfiles, ou fichiers cachés, sont des éléments cachés par défaut et dont le nom commence par un point. Ce sont généralement des fichiers qui permettent de configurer son propre environnement de travail et il peut-être intéressant d'en faire une copie que ce soit à but de partage ou simplement de sauvegarde – et limiter les désagréments lors de réinstallations de système[1].


Git


Ces fichiers ayant tendance à évoluer, il est courant d'utiliser un système de contrôle de version tel que Git[2] pour leur maintenance. L'avantage est que cela ne nécessite que Git sans réelles fioritures autour.


À défaut de maîtriser les arcanes de git, lire entièrement la suite AVANT de se lancer. J'utilise une authentification à deux facteurs sur Codeberg, et n'ai aucune idée de comment lier le dossier local vers le dépôt distant.


L'approche la plus simpliste est de considérer son dossier /home/ comme un dépôt git, et de tout ignorer par défaut (via `gitignore`)[3]. Cette méthode montre ses limites lorsqu'il existe d'autres dépôts git dans le même dossier (Par exemple pour un NonDotFiles si l'on souhaite appliquer la même méthode pour sauvegarder ses fichiers personnels), elle est également très manuelle puisque nécessite de renseigner délibérément chaque fichier à surveiller. JE N'UTILISE PAS CETTE MÉTHODE.


Une méthode alternative serait d'utiliser un dossier vide et d'y associer un alias vers le répertoire /home : la nouvelle commande personnalisée permettrait de facilement traiter les fichiers désirés sans risque de s'emmêler avec d'autres dépôts git parallèles.


git init --bare $HOME/.dotfiles
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
dotfiles config --local status.showUntrackedFiles no
echo "alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'" >> $HOME/.bashrc

Dans l'ordre, ces commandes ont pour fonction de :


Créer un dossier .dotfiles qui fera office d'interface avec les éléments à suivre ;

Créer un alias `dotfiles` pour appeler les commandes git spécifiques aux fichiers cachés ;

Créer un argument sur l'alias de manière à ce que les fichiers non voulus ne soient pas affichés en sortie lors de l'utilisation de la commande `dotfiles` ;

Ajouter l'alias `dotfiles` au fichier .bashrc, qui contient les options de terminal.


Une fois que tout est en place en local, il ne reste qu'à faire la mise en place sur le serveur (Codeberg pour ma part), puis de tout y pousser. Le processus étant obscur pour moi, j'ai remplacé la première étape par un clonage du dépôt distant de sorte à ce que la liaison soit faite automatiquement. Un message d'erreur m'a d'ailleurs averti à cette étape que les permissions de mes clés SSH (~/.ssh/id_rsa) n'étaient pas configurées correctement suite à ma migration, il a été nécessaire de les modifier pour n'être en lecture et écriture que par mon compte.


chmod 600 ~/.ssh/id_rsa

Par la suite il m'est possible d'ajouter et retirer des éléments à suivre respectivement via `dotfiles add` et `dotfiles rm`, des avertissements peuvent apparaître, à prendre en charge au cas par cas.


Informations confidentielles


Parmi les fichiers cachés peuvent se trouver des informations confidentielles telles que les clés ssh. Il est nécessaire d'indiquer à git d'ignorer ces fichiers, faute de quoi les informations se retrouveraient mises en ligne.


Il est possible d'appliquer un traitement sur les fichiers pour filtrer des informations, mais cela resterait spécifique et à appliquer de manière individuelle à l'aide d'expressions régulières et sed[4].


Permissions


On notera que cette méthode n'est pas parfaite et pourrait provoquer des difficultés notamment au niveau des permissions, celles-ci seraient alors à rétablir post-migration.


Utilisation de dotfiles


L'application des dotfiles peut évidemment se faire manuellement en allant chercher les éléments sauvegardés, mais il est possible d'automatiser le processus. Pour cela :


alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
echo ".dotfiles" >> .gitignore
git clone --bare <URL du dépot> $HOME/.dotfiles
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
dotfiles checkout
dotfiles config --local status.showUntrackedFiles no

Comme précédemment, ces commandes vont dans l'ordre :


Définir l'alias git `dotfiles` dans le fichier .bashrc ;

Explicitement ignorer le dossier /.dotfiles pour éviter tout problème de récursivité ;

Cloner le dépôt de sauvegarde sur l'appareil dans un dossier /.dotfiles ;

Définir l'alias dans le terminal (Possible redondance avec la première commande) ;

Restaure les fichiers du dépôt vers le système local. Cette commande peut retourner un message d'erreur, en particulier si des dotfiles existent déjà, en quel cas il faut décider de leur devenir : les supprimer ou les garder dans un coin ;

Créer un argument sur l'alias de manière à ce que les fichiers non voulus ne soient pas affichés en sortie lors de l'utilisation de la commande `dotfiles`.


Références


[1] How to set up a fresh Ubuntu desktop using only dotfiles and bash scripts, Victoria 2019

[2] Système git, LeJun 2022

[3] Managing my dotfiles as a git repository, D.Devault 2019

[4] Stream EDitor, LeJun 2023

-- Response ended

-- Page fetched on Sun May 19 01:16:29 2024