sdf_appunti/gnu_stow.org

119 lines
4.6 KiB
Org Mode
Raw Permalink Normal View History

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~