programming happydev dotfiles configurations

Cosa sono i dotfiles

Come avere le stesse configurazioni su computer diversi

Nell'articolo precedente ho detto che "il mio vimrc è su github". Perché?

Perché tengo sotto controllo versione molte delle configurazioni dei programmi che uso, così da poter sincronizzarle nei differenti computer su cui mi trovo a lavorare.

dotfiles

Nella repository dei miei dotfiles si trovano diverse configurazioni. Quelle della shell (zsh), di vim e tmux le uso praticamente ovunque. La cosa bella di questo trio zsh+vim+tmux è che si possono usare sia su linux che su OSX. Ma a loro dedicherò un articolo più avanti.

Configurare questi programmi (soprattutto vim) per le proprie esigenze richiede attenzione e tempo ed è un'attività che non finisce mai, infatti richiedono di essere ritoccati spesso.

Trovandomi ad usare diversi computer, ho cercato un sistema per tenere sincronizzate queste configurazioni nelle varie macchine, così se mentre lavoro con il portatile aggiungo un plugin a vim, appena accendo il fisso in ufficio me lo trovo anche lì.

Backup, sincronizzazione... e usare git? Le configurazioni sono semplici file di testo. Usando git, non solo posso sincronizzare le configurazioni nelle varie macchine, ma anche tenere traccia delle modifiche. Beh... non ho inventato niente, questa tecnica esiste da tempo.

Su github molti utenti condividono le loro configurazioni, così ho deciso di metterle anch'io in una repository pubblica. Ovviamente bisogna separare le configurazioni che si possono pubblicare da quelle che contengono informazioni private.

Il nome dotfiles deriva dal fatto che nei sistemi unix-like i file di configurazione con un punto, dot, e sono file normalmente nascosti.

Come creare la repository

Si crea come una qualsiasi repository git. Io preferisco metterla nella mia home directory:

git init ~/.dotfiles

Quindi scegliamo i file o le cartele delle configurazioni che vogliamo condividere fra i diversi computer e li spostiamo dentro a questa cartella. Consiglio di salvarli senza il punto davanti quando sono dentro la repository, così da non risultare nascosti.

mv ~/.zshrc ~/.dotfiles/zshrc
mv ~/.vimrc ~/.dotfiles/vimrc
mv ~/.vim ~/.dotfiles/vim
mv ~/.tmux.conf ~/.dotfiles/tmux.conf

Ovviamente, quando i file sono stati spostati nella repository, l'applicazione che li usa non riesce più a trovarli. Per questo bisogna creare un link esattamente dove il file si trovava prima.

ln -s ~/.dotfiles/zshrc ~/.zshrc
ln -s ~/.dotfiles/vimrc ~/.vimrc
ln -s ~/.dotfiles/vim ~/.vim
ln -s ~/.dotfiles/tmux.conf ~/.tmux.conf

Per ricordarmi dove i file vanno messi, preferisco mettere un commento all'inizio del file con scritto il nome del file originale. Ad esempio:

## @filename: ~/.zshrc

A questo punto si può anche fare uno script di inizializzazione, che crei automaticamente i link quando cloniamo la repository in una nuova macchina. Lo script può essere una semplice sequenza di ln -s ~/.dotfiles/xxx ~/xxx oppure qualcosa di più complesso, magari interattivo, che chieda quali file installare.

Una volta che la macchina ha i dotfiles, quando si modifica una configurazione, ad esempio ~/.vimrc, in realtà viene modificato il file dentro a ~/.dotfiles, che è una repository git. Così ci basta committare e sincronizzare con una repository remota. Appena accendiamo l'altro computer, con un semplice git pull abbiamo disponibili le nuove configurazioni.

Cosa si può mettere nei dotfiles

Tutto quello che si preferisce! Ma è buona norma mettere solo le cose che non hanno problemi a diventare pubbliche. Infatti i dotfiles sono belli soprattutto se condivisi.

dotfiles

Ecco cosa contiene attualmente la mia repo dotfiles:

  • configurazioni zsh (alias, plugin, etc...)
  • configurazioni vim (vimrc, snippets...)
  • configurazioni tmux
  • configurazioni ag (silver searcher)
  • configurazioni git
  • alcuni script eseguibili usati da quei programmi

Questa repository è pubblica per cui ho dovuto fare attenzione a non dimenticare dentro dati privati, come ad esempio l'identità dell'utente che normalmente si trova in ~/.gitconfig.

Per questi casi si può usare la tecnica dei file *.local, che sono interessanti anche quando vogliamo una configurazione leggermente diversa per un particolare pc. Ad esempio, nel computer che uso in Texa ho un ~/.zshrc.local con delle funzioni che esclusivamente per il progetto su cui sto lavorando lì.

Questa tecnica funziona con i programmi che permettono di includere file di configurazioni da altri percorsi.

Ad esempio, per zsh faccio così:

if [ -e ~/.zshrc.local ]; then source ~/.zshrc.local; fi

In vimrc ho invece questo:

if filereadable(glob("~/.vimrc.local"))
    source ~/.vimrc.local
endif

In gitconfig:

[include]
  path = ~/.gitconfig.local

Ovviamente il suffisso .local è una convenzione, possiamo chiamarlo in qualsiasi altro modo. Consiglio di mettere questi file in una repository separata, che non verrà pubblicata. Altrimenti si possono mettere nella stessa repository pubblica, ma solo dopo essere stati criptati, per esempio con gpg.

Pubblicare i dotfiles

Credo che la soluzione migliore per pubblicarli sia github. Soprattutto perché al momento sembra essere la più grande comunità di utenti dotfiles (se così si possono chiamare).

Visto che anche altri utenti possono essere interessati a vedere i nostri dotfiles è molto utile commentare le configurazioni, per spiegare il perché si è deciso di fare in un certo modo.

Visto che c'è una grande comunità, si possono prendere tanti spunti in giro. In questa pagina di github sono riassunte una serie di utili referenze a riguardo.

Ti è piaciuto l'articolo? Condividilo! Commentalo!

comments powered by Disqus