sdf_appunti/dotbot.org

7.4 KiB

Dotbot

Si tratta di uno strumento simile a GNU Stow ma che rispetto a questo presenta delle migliorie.

Come Stow anche Dotbot funziona soltanto su Linux/MacOS. E' scritto in Python che, almeno sulle macchine Linux, è solitamente preinstallato.

La metodologia standard per l'uso di Dotbot consiste nel creare un repository per contenere i dotfiles e, all'interno di questo, clonare come submodule Dotbot stesso. Questo sistema rende tutta la gestione in qualche modo "self contained" mentre Stow, ad esempio, deve essere installato.

La pagine di riferimento per il progetto su Github è: https://github.com/anishathalye/dotbot">https://github.com/anishathalye/dotbot dove si trova anche la documentazione

Partendo da zero

Se si inizia a lavorare con Dotbot partendo da zero occorre creare un nuovo repository che andrà a contenere i files da gestire, assumiamo che il repository si troverà nella directory $HOME/.dotfiles e che questa sia già stata creata:

# Mi posiziono nella directory del repository
cd ~/.dotfiles
# Inizializzo il repository se non esiste
git init
# Aggiungo dotbot come submodule
git submodule add https://github.com/anishathalye/dotbot
# Dico a git di ignorare eventuali modifiche alla workdir del submodule
git config -f .gitmodules submodule.dotbot.ignore dirty
# Copio il comando di "install" dal submodule nella root del repository
cp dotbot/tools/git-submodule/install .
# Creo il file di configurazione (vuoto)
touch install.conf.yaml

A questo punto non si deve fare altro che iniziare a impostare il contenuto di install.conf.yaml e spostare i dotfiles dalla posizione origine all'interno del repository.

Una volta impostato il tutto il comando install provvederà alla creazione dei link.

Il file install.conf.yaml

E' il motore di tutto il procedimento. E' un file in formato YAML e come tale necessita di una corretta gestione dell'indentazione delle righe. Dotbot consente anche l'uso del formato JSON, in questo caso il file si dovrà chiare install.conf.json

install.conf.yaml è suddiviso in "comandi":

Defaults
Qui vanno le impostazioni di default valide per tutte la varie situazioni. E' utile per non dover specificare le stesse impostazioni in ogni singolo altro ramo.
Link
Contiene, in forma di dizionario, gli abbinamenti tra destinazione e origine. L'origine è il file presente nel repository e deve essere specificato sempre relativamente alla radice del repository stesso (che è dove si sta eseguendo l'installer). Se si creano link a directory si deve omettere la barra finale.
Create
Indica le directory che devono essere create. Utile per creare la struttura che poi andrà a contenere i link o che comunque è richiesta dalle varie applicazioni.
Shell
Specifica i comandi di shell da eseguire. I comandi eseguiti fanno riferimento alla directory in cui l'installer viene eseguito.
Clean
Specifica le directory che dovranno essere esaminate per la presenza di "dead links". Nel caso in cui si trovi la presenza di un link simbolico che non porta a niente questo viene eliminato.

Ciascun "comando" prevede vari parametri, vedere la documentazione di Dotbot per approfondire.

Impostiamo la gestione

Con un editor andiamo a descrivere le opzioni di installazione in install.conf.yaml

Le impostazioni di default

Le impostazioni di default sono quelle che, una volta specificate, valgono per tutti gli altri "comandi". Nello specifico vogliamo che ciascun link utilizzi l'opzione "relink" che rimuove il vecchio target se è un link simbolico.

  - defaults:
      link:
          relink: true

Facciamo rimuovere i "dead link"

Con l'opzione clean si indicano le directory in cui deve avvenire un controllo per la verifica dei dead link verso il repository.

  - clean: ['~']

Impostiamo la creazione dei link simbolici

  - link:
      ~/.emacs.d: emacs/.emacs.d
      ~/.vim: vim/.vim
      ~/.vimrc: vim/.vimrc

Nell'esempio ho creato i collegamenti per VIM e Emacs. Ho preferito mantenere nel repository i nomi dei files e delle directory che iniziano con il punto, ma non è strettamente necessario.

L'impostazione che ho dato è quella di avere nel repository delle directory che andranno a contenere tutti gli elementi di una applicazione.

In questo semplice esempio si sono creati i soli link simbolici non sfruttando le possibilità di creare directory, eseguire script o utilizzare plugins.

Il risultato finale

Il risultato finale del contenuto di install.conf.yaml dovrebbe quindi essere:

  - defaults:
      link:
          relink: true

  - clean: ['~']

  - link:
      ~/.emacs.d: emacs/.emacs.d
      ~/.vim: vim/.vim
      ~/.vimrc: vim/.vimrc

Copiamo nel repository

A questo punto dobbiamo spostare nel repository i files e le directory.

Occorre spostare la directory $HOME/.emacs.d in $HOME/.dotfiles/emacs/

Occorre anche spostare sia il file $HOME/.vimrc che la directory $HOME/vim in $HOME/.dotfiles/vim/

Commit & push

Stiamo lavorando in un repository. Non dimentichiamo di fare commit e push!

Install

Una volta configurato il tutto non resta che far lavorare dotbot.

Con il comando install (presente in $HOME/.dotfiles) saranno creati i link simbolici e fatto tutto quanto indicato nel file di configurazione.

Bootstrap

Una volta creato il repository, configurato e messo su di un server raggiungibile il bootstrap in un ambiente nuovo si riduce ad una linea di codice:

  cd ~ && git clone https://url/to/git/server/.dotfiles && cd ~/.dotfiles && ./install

L'esempio assume l'uso di un repository che si chiama .dotfiles che sarà clonato nella $HOME mantenendo lo stesso nome.

CAVEAT

Dotbot NON crea i link simbolici se il target già esiste come file o directory normale. Eventuali link simbolici esistenti sono sostituiti in presenza della direttiva relink: true

Informazioni aggiuntive

Plugins

Una caratteristica interessante di dotbot è quella di avere un'architettura che consente l'uso di plugins.

Tra i plugins disponibili (https://github.com/anishathalye/dotbot/wiki/Plugins">https://github.com/anishathalye/dotbot/wiki/Plugins) si trovano, ad esempio, quelli per clonare repository git, per installare Visual studo code, per installare Rust.

La lista non è enorme, ma comprende comunque elementi utili.

Repository di esempio

Oltre all'autore del software che nel suo spazio su Github rende disponibile la propria gestione dotfiles, nelle pagine Wiki del progetto si trova una (lunga) lista di utenti che gestiscono i propri dotfiles con dotbot

Tips-And-Tricks

Nella pagina wiki tips & triks del progetto si trovano spunti interessanti sia per risolvere situazioni particolari, ma anche come punti di partenza per approfondire ulteriori argomenti correlati alla gestione dei dotfiles.