Alors que la tendance est plutôt zsh comme shell sous Linux (avec oh-my-zsh en complément), je fais partie de ceux qui utilisent le shell fish (avec fisher en complément) pour certaines raisons en particulier :

  • Auto-suggestion des commandes au fur et à mesure qu'on écrit une commande (et si c'est faux la commande passe en rouge, indiquant qu'elle est inconnue). basé sur l'historique des commandes qu'on a faites auparavant
  • Listage des arguments des commandes avec tab, par exemple ls - puis la touche tab, ce qui sortira l'output suivant par exemple :
Listage des arguments de la commande ls
  • Certains plugins de oh-my-fish comme z (qui permet d'atteindre un dossier directement depuis n'importe où en utilisant son nom une fois que l'on a atteint au moins une fois normalement. Par exemple z rest m'envoie directement dans le dossier /home/anthodev/projects/demo-rest-api) et GitNow qui permet d'être plus rapide sur les commandes git.

Bref revenons au sujet de ce billet, même si fish est très agréable la grande majorité du temps, il peut avoir de temps en temps des comportements erratiques du fait que certaines commandes bash ne sont pas reconnus par fish comme EXPORT.

Et cela peut poser problème car pour signer les commits sous fish, il faut pouvoir ajouter la clé GPG au shell, et sous bash cela se fait de la manière suivante :

export GPG_TTY="$( tty )"

Sauf que sous fish cette commande ne fonctionne pas puisqu'il utilise une syntaxe spécifique. Donc pour pouvoir signer ses commits sous fish, il faut ajouter la ligne suivante dans son config.fish situé dans ~/.config/fish :

set -gx GPG_TTY (tty)

Il suffit de relancer la session de votre distribution et désormais un prompt s'affichera demandant le mot de passe de votre clé GPG quand vous allez vouloir commit en signant, au lieu d'afficher un message d'erreur. Une fois les changements push, vous aurez le beau indicateur sur votre commit :

Les commits sont vérifiés sur Github