196 lines
7.4 KiB
Org Mode
196 lines
7.4 KiB
Org Mode
* 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:
|
|
|
|
#+begin_example
|
|
# 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
|
|
#+end_example
|
|
|
|
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 [[https://it.wikipedia.org/wiki/YAML][YAML]] e come tale necessita
|
|
di una corretta gestione dell'indentazione delle righe.
|
|
Dotbot consente anche l'uso del formato [[https://www.json2yaml.com/][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.
|
|
|
|
#+begin_example
|
|
- defaults:
|
|
link:
|
|
relink: true
|
|
#+end_example
|
|
|
|
** 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.
|
|
|
|
#+begin_example
|
|
- clean: ['~']
|
|
#+end_example
|
|
|
|
** Impostiamo la creazione dei link simbolici
|
|
|
|
#+begin_example
|
|
- link:
|
|
~/.emacs.d: emacs/.emacs.d
|
|
~/.vim: vim/.vim
|
|
~/.vimrc: vim/.vimrc
|
|
#+end_example
|
|
|
|
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:
|
|
|
|
#+begin_example
|
|
- defaults:
|
|
link:
|
|
relink: true
|
|
|
|
- clean: ['~']
|
|
|
|
- link:
|
|
~/.emacs.d: emacs/.emacs.d
|
|
~/.vim: vim/.vim
|
|
~/.vimrc: vim/.vimrc
|
|
#+end_example
|
|
|
|
** 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:
|
|
#+begin_example
|
|
cd ~ && git clone https://url/to/git/server/.dotfiles && cd ~/.dotfiles && ./install
|
|
#+end_example
|
|
|
|
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) [[https://github.com/anishathalye/dotbot/wiki/Users][lista di utenti che gestiscono i propri dotfiles con dotbot]]
|
|
|
|
** Tips-And-Tricks
|
|
|
|
Nella pagina wiki [[https://github.com/anishathalye/dotbot/wiki/Tips-and-Tricks][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.
|