FaciLinux

Guide Facili per Linux

Gestire i dotfiles

- Posted in tools by

Molti programmi su GNU/Linux usano memorizzare la loro configurazione nella $HOME usando uno o più dotfile (cioè file che iniziano con un punto, come ad esempio .bash_aliases o .vimrc) oppure salvandoli nella directory .config o directory ad hoc (come ad esempio Atom nella directory .atom, KDE nella directory .kde).

Spesso viene dedicato molto tempo alla configurazione e alla personalizzazione dei propri dotfile.\ Pertanto, quando si passa a una nuova macchina o si reinstalla il nostro sistema operativo, è molto importante poter ripristinare facilmente e velocemente tutti quei file di configurazione.

Soluzioni utilizzando il versioning di git

Directory $HOME come repository git

La prima soluzione è rendere l'intera directory $HOME un repository git. Questa può sembrare una soluzione semplice e buona, anche se dobbiamo stare attenti ai sub-repository e, soprattutto, non sarà semplice ripristinare il repository su una nuova macchina (poiché la cartella $HOME esiste già).

Repository separato e link simbolici

Per superare gli inconvenienti dati dal rendere la cartella $HOME un repository git, si può mettere il repository git con i dotfile altrove (ad esempio in $HOME/ dotfiles) e quindi ricollegare i file di configurazione all'interno della cartella $HOME attraverso link simbolici.

L'unico aspetto negativo è che su una nuova macchina dobbiamo collegare manualmente tutto al posto giusto e potrebbe essere un po' noioso.

Per questo motivo, quando si utilizza questo metodo, è una buona idea automatizzare la gestione dei link simbilici, ad esempio utilizzando GNU Stow.

Bare git repository

Un bare git repository consente di mantenere le directory working tree e .git in posizioni differenti.

Questo è molto simile al primo metodo, tranne per il fatto che la cartella .git non si trova direttamente nella cartella $HOME ma risiede, ad esempio, in ~/.config/dotfiles.\ Questo comporta che

  • evitiamo tutti i possibili problemi con i repository nidificati
  • non utilizziamo collegamenti simbolici

Sfortunatamente, come nel primo metodo, non è semplice clonare il repository quando la cartella $HOME esiste già.

vcsh

vcsh (Version Control System for $HOME) permette di avere diversi repository, che mantengono i loro working tree nella directory $HOME senza interferenze reciproche.\ Per impostazione predefinita, tutti i repository git gestiti tramite vcsh memorizzano i file effettivi in $HOME (ma è possibile modificare questa impostazione).

Ciò permette di avere un repository per applicazione o famiglia di applicazioni, ad esempio zsh, vim, ssh, ecc. Ciò, a sua volta, consente di clonare set personalizzati di configurazioni su macchine diverse o anche per utenti diversi e selezionare quali configurazioni si desidera utilizzare dove. Ad esempio, potresti non aver bisogno di avere la tua configurazione di mplayer su un server e potresti voler mantenere una configurazione diversa per ssh sulle tue macchine personali e di lavoro.

In particolare vcsh presenta i seguenti vantaggi:

  • cli più semplice: non è necessario ricordare comandi git complessi o definire alias su una nuova macchina
  • UX migliore: nessun problema nel clonare i dotfile quando la cartella $HOME esiste già o non è vuota
  • supporto perfetto per più repository: non è necessario definire un alias per ciascun repository

vcsh e mr

myrepos è uno strumento per gestire più repository di controllo versione, che funziona molto bene con vcsh.\ myrepos fornisce un comando mr, che è uno strumento unificato per gestire tutti i repository di controllo versione.

Questo metodo è più complesso da configurare rispetto al semplice vcsh (anche se è necessario eseguire questa configurazione una sola volta).

I punti di forza di questo metodo sono:

  • la possibilità di utilizzare script custom che vengono eseguiti al momento del checkout/update
  • la possibilità di fare il checkout dei repository in un percorso diverso dalla $HOME