💾 Archived View for unbon.cafe › lejun › posts › 20230406_dotfiles.gmi captured on 2024-03-21 at 15:48:22. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-04-19)
-=-=-=-=-=-=-
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].
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 :
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.
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].
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.
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 :
[1] How to set up a fresh Ubuntu desktop using only dotfiles and bash scripts, Victoria 2019
[3] Managing my dotfiles as a git repository, D.Devault 2019