2021-06-27 17:28:31 +00:00
|
|
|
* Gestire i dotfiles con GNU Stow
|
|
|
|
|
|
|
|
GNU Stow è uno strumento nato per gestire in modo massivo
|
|
|
|
i link simbolici nell'installazione di pacchetti software
|
|
|
|
compilati dai sorgenti.
|
|
|
|
|
|
|
|
La sua specializzazione è gestire i link simbolici e per
|
|
|
|
questo è perfettamente adatto allo scopo di gestire i
|
|
|
|
dotfiles in un repository git, files che poi saranno
|
2021-06-28 11:02:35 +00:00
|
|
|
agganciati come link simbolici nelle directory standard.
|
2021-06-27 17:28:31 +00:00
|
|
|
|
|
|
|
* I "package"
|
|
|
|
|
|
|
|
Stow definisce come package delle collezioni di elementi
|
|
|
|
correlati allo stesso contesto e che si vogliono gestire
|
|
|
|
come elemento unitario. Un package è una directory che
|
|
|
|
contiene al suo interno tutta la struttura che si vuole
|
|
|
|
replicare.
|
|
|
|
|
|
|
|
Il package "vim" (quindi la directory "vim") conterrà tutti
|
|
|
|
i files e le directory necessari per la configurazione di
|
|
|
|
vim. Il nome del package non è necessariamente lo stesso
|
|
|
|
del programma di cui andremo a gestire i dotfiles, ma è
|
|
|
|
sicuramente buona pratica dare dei nomi significativi.
|
|
|
|
|
|
|
|
* La "stow directory"
|
|
|
|
|
|
|
|
E' la directory che contiene i package che vogliamo
|
|
|
|
gestire.
|
|
|
|
|
|
|
|
Se non indicato in modo esplicito Stow considera come
|
|
|
|
stow directory la directory corrente.
|
|
|
|
|
|
|
|
* La "target directory"
|
|
|
|
|
|
|
|
E' la directory di destinazione dove Stow andrà a creare
|
|
|
|
i link simbolici. Se non indicata in modo esplicito
|
|
|
|
Stow assume come target directory la parent della
|
|
|
|
directory corrente.
|
|
|
|
|
|
|
|
* Creazione della struttura.
|
|
|
|
|
|
|
|
Assumendo che la stow directory si chiami ".dotfile"
|
|
|
|
un esempio di struttura potrebbe essere questo:
|
|
|
|
|
|
|
|
#+begin_example
|
|
|
|
$HOME
|
|
|
|
+-- .dotfiles
|
|
|
|
+ bash (directory - package)
|
|
|
|
| +-- .bash_aliases (file)
|
|
|
|
+-- vim (directory - package)
|
|
|
|
| +-- .vim (directory)
|
|
|
|
| +-- .vimrc (file)
|
|
|
|
+-- htop (directory - package)
|
|
|
|
+-- .config (directory)
|
|
|
|
+-- htop (directory)
|
|
|
|
+-- htoprc (file)
|
|
|
|
#+end_example
|
|
|
|
|
|
|
|
* Esecuzione
|
|
|
|
|
|
|
|
~stow bash~ crea i limk simbolici del package "bash". Mantenendo le impostazioni
|
|
|
|
predefinite e assumendo di aver eseguito il comando posizionati nella directory
|
|
|
|
$HOME/.dotfiles Stow creerà un link simbolico di nome ".bash_alias" nella $HOME
|
2021-06-28 11:02:35 +00:00
|
|
|
che andrà a puntare a ~$HOME/.dotfiles/bash/.bash_alias~
|
2021-06-27 17:28:31 +00:00
|
|
|
|
|
|
|
E' possibile indicare più package: ~stow bash htop~ creerà i link simbolici per
|
|
|
|
i package "bash" e "htop".
|
|
|
|
|
|
|
|
E' possibile anche far girare stow per tutti i package della stow directory:
|
|
|
|
~stow *~
|
|
|
|
|
|
|
|
* ~--adopt~
|
|
|
|
|
|
|
|
Un parametro estremamente utile, ma da usare con cautela è ~--adopt~.
|
|
|
|
|
|
|
|
Una volta creata la struttura dei package dove i files possono essere vuoti, si
|
|
|
|
può utilizzare questa opzione per automatizzare lo spostamento del file effettivo
|
|
|
|
nella sua posizione del package e la creazione del link simbolico.
|
|
|
|
|
|
|
|
Quindi, assumendo di aver creato la struttura e che nel package "bash" il file
|
|
|
|
~bash_aliases~ sia presente ma vuoto e assumendo anche che esista il file
|
|
|
|
~$HOME/.bash_aliases~, l'uso del comando ~stow --adopt bash~ andrà a spostare
|
|
|
|
il file ~$HOME/.bash_aliases~ nella ~$HOME/.dotfiles/bash~ sovrascrivendo
|
|
|
|
il file esistente e creerà un link simbolico che vi punta.
|
|
|
|
a spostare
|
|
|
|
|
|
|
|
* Rimozione dei link simbolici
|
|
|
|
|
|
|
|
Può capitare di voler far pulizia: è possibile rimuovere i link simbolici
|
|
|
|
creati usando il parametro ~-D~
|
|
|
|
|
|
|
|
* Configurazioni separate per macchine separate
|
|
|
|
|
2021-06-28 11:02:35 +00:00
|
|
|
E' un funzionalità non gestita direttamente da Stow.
|
2021-06-27 17:28:31 +00:00
|
|
|
Tuttavia, con un po' di manualità si possono creare package specifici sfruttando
|
|
|
|
il fatto che Stow non funziona con dei "sotto-package" e utilizzando in modo
|
|
|
|
corretto i parametri ~-d~ e ~-t~
|
|
|
|
|
|
|
|
E' possibile creare una struttura simile a questa:
|
|
|
|
|
|
|
|
#+begin_example
|
|
|
|
$HOME
|
|
|
|
+-- .dotfiles
|
|
|
|
+-- bash (directory - package)
|
|
|
|
+-- PC1 (directory - macchina 1)
|
|
|
|
| +-- .bash_aliases (file per macchina 1)
|
|
|
|
+-- PC2 (directory - macchina 2)
|
|
|
|
+-- .bash_aliases (file per macchina 2)
|
|
|
|
#+end_example
|
|
|
|
|
|
|
|
A questo punto si dovrà indicare a Stow che, per la macchina 1, la stow directory
|
|
|
|
è la ~$HOME/.dotfiles/bash~ e che la target directory è la ~$HOME~.
|
|
|
|
|
|
|
|
Il comando sarà quindi qualcosa di simile (usando il parametro ~-n~ per simulare
|
|
|
|
l'esecuzione:
|
|
|
|
~stow -n -d $HOME/.dotfiles/bash -t $HOME PC1~
|
|
|
|
|