Du PS1 à Oh My Bash/Zsh/Posh : personnalisez votre terminal et rendez-le plus utile

Pimp my terminal !
Du PS1 à Oh My Bash/Zsh/Posh : personnalisez votre terminal et rendez-le plus utile
Crédits : badmanproduction/iStock/Thinkstock

Quoi de plus triste qu'un terminal ? Parce que dans la vraie vie, ce n'est pas comme dans les films et séries, il n'y défile pas sans cesse des caractères étranges que seuls des êtres supérieurs comprennent. Les développeurs ont aussi un petit cœur et aiment ce qui est mignon. Ce guide leur est dédié.

Lorsque vous lancez un invite de commandes, que ce soit sous Linux, macOS ou Windows, vous êtes habitués à obtenir une fenêtre sur fond noir avec le dossier courant et parfois un indicateur sur le nom de la machine. Mais saviez-vous que, comme les différents éléments de la fenêtre, cette petite ligne de texte est personnalisable ?

Il y a même des applications pensées uniquement dans ce but, avec leurs facilités et leurs thèmes prêts à l'emploi. Ils n'apportent d'ailleurs pas que des indications graphiques. Vous pouvez également ajouter l'heure courante, le statut d'un dépôt Git et autres petites informations qui peuvent vous aider au quotidien. 

Voici un petit guide pour vous guider dans les méandres de la personnalisation du terminal.

PS1 sous Unix, késako ?

Commençons par un exemple simple avec le fameux PS1 (Prompt String 1) d'Unix, donc utilisé tant sous Linux que macOS. Il s'agit du texte qui s'affiche à gauche du curseur lorsque vous ouvrez un terminal. Une simple variable que vous pouvez modifier, mais aussi faire évoluer selon des scripts complexes comme nous le verrons plus loin.

La manière de réagir de PS1 dépend de votre Shell. Dans la plupart des distributions, c'est Bash (/bin/bash) qui est installé et utilisé par défaut. Pour savoir si c'est votre cas, tapez la commande suivante :

echo $SHELL

Pour connaître la valeur PS1 actuelle, c'est la même chose : 

echo $PS1

Notez qu'il existe des valeurs PS2, PS3, PS4 et PROMPT_COMMAND que nous n'utiliserons pas ici. 

Modifions PS1 à la main

Vous pouvez y écrire ce que vous voulez sans risque, cela ne sera valable que pour la session courante : 

PS1="Ceci est la machine de moi > "

Désormais, c'est ce texte que vous aurez à chaque début de ligne. Vous pouvez aussi ajouter des variables et des couleurs, la liste complète de celles prises en compte par Bash est disponible ici. Par exemple : 

PS1="\[\e[1;34m\]\A \[\e[0m\]\$ "

Ici, on affiche l'heure courante et le statut de l'utilisateur (# s'il est root, $ sinon). On y ajoute de la couleur avec des codes comme \e[1;34m qui représente une déclinaison de bleu. Il faut penser à l'encadrer de caractères indiquant que c'est une valeur qui ne sera pas affichée : \[...\], ce qui donne ce résultat assez complexe. Si vous modifiez les couleurs, pensez toujours à déclarer celle des caractères qui suivront PS1 (ici blanc, donc \e[0m).

On peut ensuite aller encore un peu plus loin :

PS1="\[\e[1;34m\]\A ⚡ \[\e[0m\]$(lscpu | grep 'Cœurs' | awk '{print $4}')C/$(nproc)T ⚡ \[\e[32m\]\w > \u:\$ \[\e[0m\]"

Qui ne fonctionne sur un système français. En anglais ou dans le cas du sous-système Linux (WSL) de Windows 10 :

PS1="\[\e[1;34m\]\A ⚡ \[\e[0m\]$(lscpu | grep 'Core(s)' | awk '{print $4}')C/$(nproc)T ⚡ \[\e[32m\]\w > \u:\$ \[\e[0m\]"

Dans cet exemple, on utilise des variables issues d'applications affichant le nombre de cœurs du CPU : lscpu et nproc. Vous pouvez faire de même avec n'importe quel outil renvoyant une simple valeur. Concernant les émojis, ils sont exploitables directement ou peuvent être remplacés par leur valeur Unicode si vous préférez. 

Au final, nous obtenons le résultat suivant :

Terminal Ubuntu PS1 modifié

Oh my Bash : thèmes et plugins prêts à l'emploi

La pratique de la modification du PS1 n'est pas nouvelle. Elle a donc à travers le temps suscité des vocations, notamment pour simplifier un peu la procédure en l'encadrant avec des thèmes.

C'était d'autant plus nécessaire que cela permet d'automatiser certaines tâches, dont l'écriture dans le fichier de configuration .bashrc qui rend la modification pérenne, mais aussi d'aller vers des modifications plus complexes prenant en compte des scripts pour afficher le statut d'un dépôt Git, l'IP de la machine ou la météo.

Pour Bash, un tel outil existe et se nomme Oh my Bash. Son installation est simple, passant par un script :

bash -c "$(wget https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh -O -)"

Avec cette commande, il est téléchargé puis exécuté. En cas de problème, il se désinstalle aussi simplement :

uninstall_oh_my_bash

Après sa mise en place, vous aurez tout de suite un PS1 amélioré affichant l'heure, le nom de l'utilisateur, de la machine, le dossier, le statut d'un dépôt Git ainsi que la branche dans laquelle vous vous trouvez. Vous pouvez modifier le thème utilisé à travers la variable OSH_THEME du fichier de configuration :

nano ~/.bashrc

Pour afficher tout de suite la modification :

source ~/.bashrc

La liste des thèmes disponibles se trouve par ici, des captures sont visibles par là. Il faudra parfois passer par certaines procédures d'installations et autres plugins, ou ajouter une police comme powerline. Pensez à garder si un guide d'installation est présent ou détaillé, notamment dans ce dossier.

Vous pouvez bien entendu créer vos thèmes et les modifier comme bon vous semble. Ils se trouvent dans ~/.oh-my-bash/themes/. L'activation des plugins se fait également en modifiant le fichier .bashrc.

Oh My BashOh My BashLe thème « font » utilisé par défaut par Oh My Bash, puis Kitsune qui doit être utilisé avec le plugin battery

Oh My Zsh pour un Shell plus productif

Le travail autour de Oh my Bash est inspiré de Oh My Zsh, pensé pour Z Shell (zsh) qui est en général apprécié, car bien plus complet et riche en fonctionnalités que Bash... si on se donne la peine de le paramétrer. C'est là qu'est né l'idée de cet outil tout-en-un qui active de nombreuses options très utiles par défaut et donne accès aux thèmes.

Son installation passe elle aussi par un simple script à lancer et installer. On y trouve également thèmes et plugins, mais pouvant aller plus loin que sous Bash, avec une communauté plus développée.

sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"

Il existe d'ailleurs de nombreux articles et des vidéos consacrés au sujet. Une fois l'installation effectuée, il vous sera proposé d'utiliser zsh par défaut, avec une configuration vide, effectuée manuellement ou prédéfinie. Si c'est votre première fois, on vous conseille ce dernier choix. Vous pourrez par exemple naviguer au clavier lorsque vous effectuez un ls pour afficher la liste des fichiers et dossier du répertoire courant.

La configuration est similaire à Oh My Bash, mais se fait cette fois en modifiant le fichier ~/.zshrc. Cela peut donner des résultats plutôt intéressants, exploitant également la colonne de droite du terminal. Comme celui d'un lecteur nous ayant soumis la capture de son terminal sous zsh avec le thème Powerlevel10k :

Oh My Zsh Powerlevel10k

Vous êtes plutôt porté sur fish ? N'ayez crainte, il y a aussi un « Oh My » pour vous.

PowerShell, le nouveau Terminal et Oh my Posh

Et Windows dans tout ça ? Eh bien entre le bon vieil invite de commandes et PowerShell, il était plutôt laissé de côté sur ces joyeuseries graphiques, à quelques exceptions près. Mais l'arrivée du nouveau Terminal a changé la donne. Avec lui sont arrivées de nombreuses nouveautés, mais aussi des possibilités de personnalisation.

Certes, cela passe encore souvent par un fichier JSON à modifier et c'est un peu limité, mais c'est un début. Dans un billet récent, l'équipe de Microsoft en a détaillé certaines, évoquant un projet équivalent aux deux précédents : Oh my Posh. Lui aussi inspiré de Oh My Zsh, mais se focalisant sur l'application de thèmes pour PowerShell.

Son installation passe par de simples modules (en mode Administrateur) :

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

Pour tester un thème, vous pouvez ensuite simplement taper les commandes :

Set-Prompt
Set-Theme Powerlevel10k-Lean

Si vous rencontrez une erreur, c'est peut être que l'exécution de scripts PowerShell n'est pas autorisée :

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Là aussi, les icônes et polices par défaut seront parfois insuffisantes. Vous pouvez alors installer Cascadia PL comme indiqué dans ce guide, qui détaille également comment profiter de Powerline dans WSL. Microsoft évoque aussi les projets Terminal-Icons et Nerd Fonts pour ajouter un grain de folie supplémentaire. 

Par exemple, pour utiliser CaskaydiaCove dans le profil par défaut, ajoutez dans les paramètres du Terminal :

"defaults":
{
    "fontFace": "CaskaydiaCove NF"
},

Pour rendre votre configuration durable, il faut éditer le profil utilisateur :

notepad $PROFILE

Pour y ajouter le contenu suivant (à adapter au thème qui aura votre préférence) :

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Powerlevel10k-Lean

Notez que la v3 de Oh my Posh, actuellement en test, introduira l'utilisation de fichiers de configuration plus simples, faciles à partager, à réutiliser d'une machine à l'autre. Il fonctionnera avec Windows Terminal, mais aussi ConEmu, Alacritty, Terminus, Hyper, FluentTerminal et différents Shells : zsh, bash, nix ou fish.

Et vous, à quoi ressemble votre configuration idéale, qu'il s'agisse de thèmes et plugins ou d'un simple PS1 ? N'hésitez pas à nous le dire en commentaires et à partager vos astuces avec nos autres lecteurs.

Oh my Posh Vous arriveriez à travailler dans ce terminal, vous ?

Vous n'avez pas encore de notification

Page d'accueil
Options d'affichage
Abonné
Actualités
Abonné
Des thèmes sont disponibles :
Thème de baseThème de baseThème sombreThème sombreThème yinyang clairThème yinyang clairThème yinyang sombreThème yinyang sombreThème orange mécanique clairThème orange mécanique clairThème orange mécanique sombreThème orange mécanique sombreThème rose clairThème rose clairThème rose sombreThème rose sombre

Vous n'êtes pas encore INpactien ?

Inscrivez-vous !