Contenu

Make your terminal great again

Préambule

Cet article s’adresse principalement à tous les utilisateurs de terminaux, qu’ils soient des utilisateurs aguerris ou occasionnels …

Le terminal est un outil formidable pour réaliser efficacement … et bien à peu près tout ce que vous pourriez être amené à faire sur votre ordinateur, encore faut-il savoir s’en servir convenablement … en effet la syntaxe des interpréteurs de commande peut en rebuter plus d’un, mais avec un peu d’effort, on peut faire de grandes choses en ligne de commande, basées sur les commandes déjà disponibles avec votre interpréteur (SH, BASH, KSH, ZSH …) ou via des outils que l’on peut ajouter à votre terminal.

Pour vous encourager à utiliser cet outil formidable qu’est le terminal, rien de mieux que de le rendre un peu plus sexy que ce qu’il est de base sur votre OS.

Dans cet article nous nous concentrerons sur les terminaux d’OS de type Unix (Linux / MacOS), je m’excuse donc auprès des utilisateurs de Windows / Powershell car cet article ne s’adresse pas à eux 🤷‍♂️

J’explique donc ici comment via quelques outils additionnels, vous pourriez transformer votre terne invite de commande, en terminal de l’espace, pouvant rendre jaloux les OPS les plus barbus de votre DSI 😆

Allez c’est parti, make your terminal great again !

Choisir son terminal

La première chose à faire est de choisir son terminal. Par défaut, sur votre poste, vous aurez un terminal déjà installé mais avec des fonctionnalités limitées.

Je ne saurais que vous conseiller d’en choisir un qui vous permettra de bénéficier de fonctionnalités plus évoluées.

Je ne détaillerai pas dans cet article les différents terminaux du marché mais me concentrerai uniquement sur ceux que j’utilise.

Terminator

Pour les utilisateurs Linux, beaucoup de terminaux sont disponibles, et sans doute que le votre saura avoir un rendu satisfaisant pour des outils Oh-my-zsh que l’on va installer dans la suite de cet article.

Personnellement j’ai opté pour Terminator qui est un émulateur de terminal qui permet de scinder très facilement sa fenêtre en plusieurs terminaux, on peut aussi switcher de session via un système d’onglet, ce qui nous permet de n’avoir qu’une seule fenêtre avec toutes nos sessions.

C’est assez light, ça marche bien et c’est assez customizable.

Terminator

Pour l’installer sur Ubuntu :

1
sudo apt install terminator

iTerm2

Pour les utilisateurs de Mac, le terminal de base disponible dans Mac OS ne dispose pas de fonctionnalités très avancées non plus, et pour un meilleur rendu graphique de ce qui va suivre, je ne saurai que vous conseiller d’utiliser une version plus avancée. Celui pour lequel j’ai opté est iTerm2

Ce terminal permet comme pour Terminator de splitter sa fenêtre afin d’avoir plusieurs sessions en même temps côte à côte, il possède également plein d’autres fonctionnalités avancées que n’a pas le terminal de base (gestion de profils, recherche avancée, historique de copier/coller, couleurs 24 bits)

La liste des features est à retrouver ici : https://iterm2.com/features.html

iTerm2

Pour l’installer sur MacOS :

1
brew install --cask iterm2

Si vous n’avez pas homebrew installé sur votre version de MacOS, vous pouvez le télécharger ici : https://brew.sh/index_fr

Zsh

Maintenant qu’on a un terminal solide, on va s’attaquer à l’amélioration de notre interpréteurs de commande.

Zsh est un interpréteur de commande, au même titre que Bash ou encore Sh. L’intérêt de Zsh réside dans le fait qu’il soit rétro-compatible avec le Bash tout en offrant des fonctionnalités plus avancées (partage d’historique des commandes entre les différentes sessions de terminal, autocomplétion avancée …).

Pour installer Zsh sur Linux (Debian & Ubuntu) :

1
sudo apt install zsh

Pour installer Zsh sur MacOS :

1
brew install zsh

Ensuite il faut en faire notre interpréteur par défaut au lancement du terminal :

1
chsh -s $(which zsh)

Les infos détaillées pour l’installation sont à retrouver ici : https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH

Oh-my-zsh

Oh My Zsh

On va maintenant installer Oh-my-zsh qui est une sorte de boite à outils open source basée sur l’interpréteur Zsh. Oh-my-zsh met à votre disposition un tas de plugins activables facilement pour votre terminal ainsi que des thèmes pour améliorer son rendu.

Une des fonctionnalité sympa de Oh-my-zsh est sa mise à jour automatique hebdomadaire pour bénéficier des dernières fonctionnalités développées par sa grande communauté.

1
2
curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh
./install.sh

Une fois Oh-my-zsh installé sur votre terminal, vous allez trouver un nouveau fichier .zshrc à la racine de votre home. Ce fichier vous servira à configurer votre installation de Oh-my-zsh.

Les plugins

Plusieurs plugins ont été développés par la communauté, vous pouvez les retrouver sur la page https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins

Cependant des plugins additionnels non installés par défaut sont également disponibles à l’adresse https://github.com/zsh-users

Pour ajouter/supprimer des plugins à votre installation de Oh-my-zsh il faut trouver la clé suivante dans le fichier ~/.zshrc :

1
2
3
4
5
6
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git)

Ici nous voyons que le plugin git est déjà activé. Il met à disposition tout un tas d’alias pour effectuer des opérations avec Git, la liste des alias disponibles est accessible ici : https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git

Ajoutons-y 2 plugins vraiment utiles :

1
2
3
4
5
6
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)

Il suffit d’ajouter le nom du plugin dans cette liste pour qu’il soit activé.

Cette manipulation est suffisante uniquement pour les plugins déjà présent nativement au sein de Oh-my-zsh. Pour les 2 plugins additionnels zsh-autosuggestionset zsh-syntax-highlighting que l’on vient d’ajouter et qui sont présentés ci-après, il faudra se rendre sur les pages Github associées et suivre les instructions d’installation de la documentation.

Lien vers la documentation des plugins Oh-my-zsh : https://github.com/ohmyzsh/ohmyzsh#plugins

zsh-autosuggestions

Ce plugin ultra pratique suggère la fin de la ligne de commande en se basant sur l’historique des commandes déjà effectuées. Si la suggestion vous convient, vous pouvez l’accepter en appuyant sur la touche

Une fois adopté, vous ne pourrez plus vous passer de ce plugin.

Page Github : https://github.com/zsh-users/zsh-autosuggestions

zsh-syntax-highlighting

Ce plugin permet de colorer la commande entrée dans le terminal, si la commande n’est pas reconnue par le système, elle sera colorée en rouge, sinon elle sera colorée en vert. Ce n’est pas tout car le plugin sait reconnaître également l’usage de variables, d’accolades et autres …

Page Github : https://github.com/zsh-users/zsh-syntax-highlighting

Les thèmes

Maintenant que nous avons configuré les plugins, intéressons-nous aux thèmes.

Les thèmes permettent de customiser les informations affichées sur et autour du prompt. Par exemple certains thèmes utilisent des icônes pour agrémenter le visuel, comme l’icône Git lorsqu’on se trouve dans le répertoire d’un repository github/gitlab ou l’icône de la batterie sur un laptop, le wifi etc… Tout cela est configurable.

Un exemple d’infos intégrables au prompt (oui c’est vrai ça fait un peu beaucoup ici 😅) :

p10k examples

Un certain nombre de thèmes sont déjà installés nativement et donc disponibles rapidement. Vous pouvez retrouver la liste complète ainsi qu’un aperçu sur la page suivante : https://github.com/ohmyzsh/ohmyzsh/wiki/Themes

Le thème par défaut est agnoster, pour le changer il vous faut trouver la clé ZSH_THEME dans le fichier ~/.zshrc et remplacer "agnoster" par le nom du thème qui vous convient.

Cependant la communauté a également développé d’autres thèmes, certains plus riches que ceux déjà disponibles nativement. La liste des thèmes externes référencés est accessibles ici : https://github.com/ohmyzsh/ohmyzsh/wiki/External-themes

C’est dans cette page que nous allons trouver celui que je vous propose d’installer maintenant.

Powerlevel10k

Personnellement, le thème que j’utilise pour un terminal vraiment sexy est Powerlevel10k, c’est un thème très populaire (18k ⭐)

1️⃣ Avant d’installer ce thème, il nous faut d’abord installer la police qui sera utilisée par le thème. La police recommandée MesloLGS NF est disponible (ainsi que la procédure d’installation pour les différents terminaux) ici

2️⃣ Ensuite pour l’installation du thème il faut cloner le thème :

1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

3️⃣ Dans le fichier ~/.zshrc, remplacer la ligne ZSH_THEME="agnoster" par ZSH_THEME="powerlevel10k/powerlevel10k"

4️⃣ Redémarrer Zsh pour prise en compte du thème : source ~/.zshrc

5️⃣ Lancer la configuration du thème : p10k configure

Ceci lancera une CLI interactive vous permettant de configurer finement votre thème (voir aperçu ci-après)

p10k configuration

Une fois votre configuration terminée, elle est enregistrée dans le fichier ~/.p10k.zsh

Vous pouvez à tout moment reconfigurer votre thème en modifiant le fichier ~/.p10k.zsh ou en relançant la commande p10k configure

Fzf

Je profite de cet article pour faire la publicité d’un autre outil pour votre terminal que j’apprécie particulièrement : Fzf

Fzf c’est une CLI (Command Line Interface) interactive qui nous aide à faire des recherches dans l’historique de commande, les fichiers, les processus, les commits Git etc.

fzf

Je l’utilise surtout pour mes recherches dans l’historique des commandes. Il se greffe sur le raccourci d’accès à l’historique Ctrl + R et nous permet de faire une recherche interactive dans notre historique

Pour installer Zsh sur Linux (Debian & Ubuntu) :

1
2
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

Pour installer Zsh sur MacOS :

1
2
3
4
brew install fzf

# To install useful key bindings and fuzzy completion:
$(brew --prefix)/opt/fzf/install

Normalement la ligne suivante a été ajoutée dans votre ~/.zshrc :

1
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh

Vous pouvez tester en faisant une recherche dans votre historique via Ctrl + R, une invite interactive apparaît, vous pouvez désormais taper un extrait d’une commande passée, pas forcément le début, et la liste des résultats est actualisée en live pour coller à votre extrait :

Résumé

A la fin de ce tutoriel, voici ce que vous devriez obtenir (voir capture ci-après) avec la configuration suivante :

  • Terminal Iterm2 de MacOS
  • Oh-my-zsh
  • Plugins git, zsh-autosuggestions et zsh-syntax-highlighting
  • Thème Powerlevel10k
  • Configuration p10k custom suivante :
    • Prompt Style : Classic
    • Prompt Color : Dark
    • Show current time? : Yes
    • Prompt Separators : Angled
    • Prompt Heads : Round
    • Prompt Tails : Slanted
    • Prompt Height : Two lines
    • Prompt Connection : Dotted
    • Prompt Frame : Full
    • Prompt Spacing : Sparse
    • Icons : Many icons
    • Prompt Flow : Concise
    • Enable Transient Prompt? : Yes

p10k configuration

Voilà, avec tous ces outils vous êtes désormais bien équipé pour bosser dans votre terminal. Je vous conseille quand même d’aller faire les curieux et d’aller fouiller du côté de la page des plugins de la communauté, en fonction de vos usages vous trouverez certainement plus de plugins encore à utiliser. Le but de tous ces outils est de vous faire gagner en efficacité / facilité dans l’utilisation de votre terminal. Vous devriez gagner un temps considérable … mais surtout vous aurez plaisir à évoluer dans un terminal sexy 😃

À propos de l'auteur : Mathieu Souchet

Développeur Full-Stack depuis 2007 (à forte teneur en Java), j’ai rejoint l’aventure Max en janvier 2017. Mon parcours m’a amené à collaborer au plus près de mes clients, leur apportant expertise technique, méthodologique et sens du service.
Touche-à-tout, passionné de technique, je m’épanouis en découvrant de nouvelles technos dans un contexte Agile et dans la bonne humeur.