#howto - Gestire i dotfiles

Scritto da il
ubuntu
fedora
archlinux

Spesso i nostri dotfiles creano disordine nella nostra home e nelle varie sottocartelle, e rendono piú complicata la gestione ed il mantenimento dei vari cambiamenti che apportiamo. É un problema sopratutto se noi vogliamo usare su piú PC la stessa configurazione.

GNU stow e git, sono due strumenti che ci aiutano a dare un pò di ordine nella nostra home e sincronizzare i nostri dotfile tra le nostre macchine.

Cos’è un dotfile

Prima di metter mano sui dotfile é bene specificare la loro funzione e la loro importanza. I dotfile sono tutti quei file (e cartelle) che iniziano con . e come file nascosti dai nostri filemanager.
Solitamente questi file contengono le configurazioni di vari software ed in genere hanno origine e si salvano nella cartella ~/.config, altre volte invece si vanno a salvare semplicemente nella nostra home ~/ creando un pò di disordine (esempio Steam andrà a creare la cartella ~/.steam).

Cos’è GNU stow

GNU stow è un generatore di symlink che ha lo scopo di gestire file cartelle di vario genere dislocate per il nostro filesystem in un unica cartella. Vediamo meglio come funziona.

Installazione

Installiamo stow con:
Ubuntu:

apt install stow

Fedora:

dnf install stow

Archlinux:

pacman -S stow

Setup

Creiamo una cartella nella quale copieremo tutti i nostri dotfile con :

mkdir ~/.dotfiles
cd ~/.dotfiles

Prenderemo in esempio questa cartella come se fosse la nostra home utente ~/ con una struttura di questo tipo (esempio):

├── cartella1
│   ├── .dotfile1
│   └── .dotfile2
│ 
├── cartella2
│   └── .dotfile3
│ 
└── cartella3
│   └── .sottocartella
│       └── cartella4
│           └── .dotfile4

La struttura della cartella1 e cartella2 è quella che stow riconosce per creare dei symlink nella cartella ~/, per esempio i file ~/.profile, ~/.zshrc, ~/.vimrc sono tutti file che vengono salvati in ~/ e quindi prendendo lo schema di prima andremo a creare dentro a ~/.dotfiles:

├── zsh
│   ├── .zshrc
│   └── .profile
│ 
├── vim
│   └── .vimrc

Dove tutti i dotfile andranno spostati dalla loro posizione originale dentro ~\.dotfiles, esempio:

mv ~/.vimrc ~/.dotfiles/vim/

la cartella3 invece ha una struttura diversa, essa contiene una sottocartella a sua volta contenente una cartella con all’interno un dotfile, questo tipo di schema è per tutti quei file che si trovano in una sottocartella di ~/ come ~/.config, per esempio Alacritty crea il proprio file di configurazione all’interno di ~/.config/alacritty/ quindi dentro ~/.dotfiles andremo a creare:

└── config
│   └── .config
│       └── alacritty
│           └── alacritty.yml

in questo caso andremo a spostare il singolo file alacritty.yml:

mv ~/.config/alacritty/alacritty.yml ~/.dotfiles/config/.config/alacritty/

Ora eseguite la procedura per tutti i dotfiles che volete spostare utilizzande le due strutture in base a dove essi sono salvati (su ~/ o in una sottocartella di ~/)

Adesso dentro ~/.dotfiles andiamo ad eseguire:

stow *

se preferiamo, possiamo selezionare singolarmente le varie cartelle:

stow vim
stow zsh
stow config

così facendo avremo creato dei symlink nella ~/

torniamo nella nostra home e visualizziamo tutti i file, anche quelli nascosti:

cd 
ls -la

Se scorrete l’output, dovreste trovare un risultato simile (in base a quele dotfile avete scelto di spostare in ~/.dotfiles):

lrwxrwxrwx    20 utente gg mm hh:mm  .vimrc -> .dotfiles/vim/.vimrc

Se invece andate all’interno di ~/.config , per esempio nella cartella di Alacritty o quella/e che avete scelto voi avrete un risultato simile:

lrwxrwxrwx    54 utente gg mm hh:mm  alacritty.yml -> ../../.dotfiles/config/.config/alacritty/alacritty.yml

Gestione con git

Git è un ottimo software per il versionamento del codice ma è altrettanto comodo in casi come questo in cui vogliamo avere la stessa versione del dotfile/file di configurazione sui nostri pc. Prima di tutto assicuriamoci della sua presenza: Installiamo git con:
Ubuntu:

apt install git

Fedora:

dnf install git

Archlinux:

pacman -S git

Se utilizzate altre distro guardate questo articolo qui

Fatto ció, entriamo nella cartella ~/.dotfiles e inizializiamo un repo locale:

cd ~/.dotfiles
git init .
git add -A
git commit -m "creato repo locale"

Su github o gitlab (o quello che preferite voi) andate a creare un repository, una volta fatto tornate sul terminale ed eseguite (sempre dentro ~/.dotfiles):

git remote add origin https://github.com/{vostro-nome}/{nome-repo}.git

e se tutto è andato liscio:

git remote

otterremo come output origin.
A questo punto potremo avere a portata di git clone i nostri dotfiles, e sincronizzare ogni singola modifica che effettuiamo.

Per una maggiore infarinatura di git vi consiglio di dare un occhiata qui guida e Utilizzo di SSH per connettersi a GitHub

history_edu Revisioni