Nel precedente articolo di questa mini-serie dedicata al setup del mio Mac, vi ho mostrato le app e le configurazioni che utilizzo quotidianamente in macOS.
C’era però un grande assente: il terminale. Come ogni sviluppatore che si rispetti, il terminale è un fedele compagno di lavoro, che personalmente mi trovo ad utilizzare per parecchio tempo durante la giornata. Questa è, attualmente, la configurazione del mio terminale:
In questo articolo vi parlerò di cosa utilizzo, come l’ho personalizzato e come l’ho reso aderente alle mie necessità.
Situazione iniziale
Di default, macOS mette a disposizione un classico terminale, che funziona egregiamente ma è abbastanza spoglio:
Da qualche anno zsh
è la shell predefinita, e questa è una buona notizia. Come vedremo, infatti, c’è un ottimo framework che permette di estendere le funzionalità e personalizzare molti aspetti della shell.
iTerm2
Come prima cosa, ho sostituito il Terminale
con iTerm2
. Si tratta di un sostituto per il terminale di macOS, che offre molte funzionalità in più e una serie quasi infinita di possibili personalizzazioni.
In particolare, ci sono due funzionalità di cui non posso più fare a meno: lo split verticale (e orizzontale) di più sessioni e la ricerca testuale all’interno di una sessione.
iTerm2 è gratuito e si scarica direttamente dal sito degli sviluppatori. Da qui possiamo iniziare a rendere il terminale sempre migliore.
Oh-my-zsh
Dopo aver scaricato ed installato iTerm2, il passo successivo è installare Oh My Zsh
. Questa è la descrizione che viene data dagli sviluppatori:
Oh My Zsh è un delizioso framework open source guidato dalla community per la gestione della configurazione di Zsh.
In sostanza, Oh My Zsh
mette a disposizione una serie di temi e plugin sviluppati dalla community, in modo da potervi creare un ambiente cucito sulle vostre esigenze.
L’installazione è molto semplice, si deve eseguire un comando che potete trovare direttamente sulla home del progetto.
Oh My Zsh non è un’esclusiva di macOS o di iTerm2: potete installarlo in qualsiasi sistema operativo, a patto di utilizzare una shell zsh
(e perchè non dovreste?).
Tema, plugin e configurazioni
Abbiamo quindi installato iTerm2 e Oh My Zsh, siamo pronti per creare l’assetto più indicato alle nostre necessità. Vi mostro quali sono le personalizzazioni e le configurazioi che ho impostato nel mio ambiente, di cui sono abbastanza soddisfatto.
Tema
Partiamo dal tema. Dopo averne valutati diversi, ho ristretto il cerchio a tre candidati:
- Pure
👍 Minimal e di bel design
👎 Poche possibilità di configurazioni - Powerlevel10k
👍 Molte possibilità di personalizzazioni
👎 Aspetto un po’ troppo “pieno”, ho riscontrato anche qualche problema con alcune funzionalità (es. la visualizzazione della versione di Ruby) - Spaceship
👍 Design minimale
👍 Ampia possibilità di configurazioni
And the winner is… Spaceship!
L’installazione non è complessa, ma assicuratevi di seguire tutti i passi della documentazione, per fare in modo che tutto funzioni correttamente.
Miglioramenti al tema
Per ottenere il mio stesso design, ci sono alcune modifiche da fare:
- installare il font Fura Mono Regular, che vi permette di avere anche le icone usate, ad esempio, per i rami di Git (repository GitHub)
- installare il preset colori Snazzy per iTerm2 (repository GitHub)
- impostare in iTerm:
- tema finestra minimale (
Appearance -> General -> Theme -> Minimal
) - cursore come lampeggiante (
Profiles → Text → Cursor: Box e Blinking
)
- tema finestra minimale (
Ed ecco il risultato finale:
Configurazione del prompt
Il tema Spaceship offre molte possibilità di personalizzazione. Per farlo, è sufficiente agire sul file di configurazione posto in .config/spaceship.conf
. Questa è la mia configurazione:
# Prompt configuration
SPACESHIP_PROMPT_ORDER=(
time
user
host
dir
git
venv
line_sep
char
)
# Char
SPACESHIP_CHAR_SYMBOL=">" # replace default ➜ character
SPACESHIP_CHAR_SUFFIX=" " # add a space after the char symbol
# Dir
SPACESHIP_DIR_PREFIX='' # disable directory prefix, cause it's not the first section
SPACESHIP_DIR_TRUNC='1' # show only last directory
SPACESHIP_PROMPT_ORDER
definisce gli elementi che vengono visualizzati nel prompt:
Con SPACESHIP_CHAR_SYMBOL
ho modificato il simbolo che viene mostrato, con il simbolo “maggiore” che non mi dispiace.
SPACESHIP_DIR_PREFIX
permettono, infine, di decidere quante e quali parte del path mostrare. Personalmente mi piace vedere solo la folder in cui sono, non ho la necessità di vedere il path completo.
Plugin Oh My Zsh
All’interno del file .zshrc
è possibile specificare quali plugin di Oh My Zsh
vogliamo abilitare.
plugins=(
wd
xcode
vscode
)
xcode
: fornisce alcune utility molto comode per lavorare con Xcode e lo sviluppo iOS in generalevscode
: fornisce alcuni alias molto utili per lavorare con VSCode (ad esempio per aprire la folder corrente o uno specifico file direttamente nell’editor)wd
: è il mio plugin preferito. Consente di creare dello scorciatoie e poi navigarci velocemente. Ad esempio, se ci capita di andare spesso nella folder~/Work/repos/customer_a/project_01
, possiamo definire una scorciatoiaproject_01
e richiamarla velocemente conwd project_01
, navigando così direttamente dentro la relativa folder. Personalmente non ne posso più fare a meno.
Alias zshrc
Ho definito alcuni alias sempre nel file .zshrc
, in questo caso il commento penso sia chiaro per tutti i comandi:
# open Sublime Merge for current directory
alias sm="smerge ."
# needed because HEAD^ doesn't work with zsh
alias grh="git reset HEAD~1"
# shortcut for forced git push
alias gpf="git push -f"
# be sure to always use Bat instead of standard cat
alias cat=bat
Conclusioni
Sono molto soddisfatto del setup che sono riuscito a creare per il terminale, mi ci trovo molto bene.
Ci sono alcune aggiunte che sto provando e che sto ancora valutando. Una di queste, ad esempio, è bat, una versione evoluta del classico cat
, che offre funzionalità quali i numeri di riga o la formattazione della sintassi.
Spero di avervi dato qualche spunto, se c’è qualcosa che volete consigliarmi, scrivetemelo nei commenti o parliamone su Mastodon!