7.4 KiB
- Dotbot
- Partendo da zero
- Il file
install.conf.yaml
- Impostiamo la gestione
- Bootstrap
- Informazioni aggiuntive
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.