Disinteressato

Un metodo semplice per gestire i dotfiles

In vita mia non avevo mai approfondito la gestione dei dotfiles, avevo letto qualcosa, ma era rimasta nel cassetto tra i progetti incompiuti.

Poi sono capitato per caso sul sito GitHub does dotfiles, così ho ricominciato a pensarci e a studiare qua e là per ottenere un risultato semplice e funzionale.

La scelta è ricaduta sul metodo del bare repository (ovvero un repository privo della cartella di lavoro) e alias, come descritto in queste due fondamentali letture: The best way to store your dotfiles: A bare Git repository e l’irrinunciabile Wiki di Arch Linux.

Per prima cosa ho creato un repository in GitHub: deve essere vuoto, quindi senza README e LICENSE.

Da terminale, con questi soli 3 comandi, ho configurato il tutto:

git init --bare ~/DOTFILES_FOLDER
alias dotfiles='/usr/bin/git --git-dir=$HOME/DOTFILES_FOLDER/ --work-tree=$HOME'
dotfiles config status.showUntrackedFiles no

Utilizzando macOS è una buona idea escludere i file .DS_Store dal controllo di versione utilizzando gitignore:

touch ~/.gitignore
echo ".DS_Store" >> .gitignore
echo "._.DS_Store" >> .gitignore
echo "**/.DS_Store" >> .gitignore
echo "**/._.DS_Store" >> .gitignore
dotfiles add ~/.gitignore
dotfiles commit -m "Ignoring .DS_Store"

Aggiungere il repository remoto:

dotfiles remote add origin https://github.com/GitHub_Username/GitHub_Repository
dotfiles branch -M main
dotfiles push -u origin main

Per evitare che la cartella home venga popolata con i file README e LICENSE utilizzo il comando di git sparse checkout:

dotfiles config core.sparsecheckout true
touch ~/DOTFILES_FOLDER/info/sparse-checkout
echo "/*" >> ~/DOTFILES_FOLDER/info/sparse-checkout
echo '!'"README.md" >> ~/DOTFILES_FOLDER/info/sparse-checkout
echo '!'"LICENSE" >> ~/DOTFILES_FOLDER/info/sparse-checkout

Direttamente dall’interfaccia web di GitHub inserire i file README e LICENSE e per testare che vengano effettivamente ignorati fare un pull:

dotfiles pull

Inserire un alias in .zshrc:

$ micro ~/.zshrc
alias dotfiles='/usr/bin/git --git-dir=$HOME/DOTFILES_FOLDER/ --work-tree=$HOME'
$ source ~/.zshrc

Inviare al repository remoto su GitHub:

dotfiles add ~/.zshrc
dotfiles commit -m "Add .zshrc"
dotfiles push

Ecco qua, adesso basterà aggiungere col comando add ogni singolo file che si vuole tracciare ed il gioco è fatto.