Il mio setup 2023 – Terminale con iTerm2 e Oh My Zsh

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)

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 generale
  • vscode: 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 scorciatoia project_01 e richiamarla velocemente con wd 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!

Ingegnere informatico e sviluppatore freelance, mi occupo da anni di sviluppo per iOS (ma non solo). Dal 2008 scrivo su questo piccolo blog (con qualche lunga pausa), in cui parlo di programmazione e di qualsiasi altra cosa che mi diverta.

Leave a reply:

Your email address will not be published.

Site Footer