Informatique
Linux - Personnalisation du shell

Table des matières

Introduction

La ligne de commande Linux par défaut est déjà très pratique ! Mais on peut l'améliorer... Dans cette page je vous partage cette configuration que j'ai en place sur mes machines !

Capture d'écran d'un terminal avec un prompt Starship personnalisé et Fish Shell en action
Capture d'écran d'un terminal avec un prompt Starship personnalisé et Fish Shell en action

Prompt

Le prompt, c'est ce qui s'affiche à côté du curseur : c'est très intéressant d'y faire figurer des informations comme le répertoire courant ou la branche sur un dépôt de code !

🤔 Bash

De base avec le shell bash livré par défaut sur la plupart des systèmes, on a des possibilités limitées. On peut cependant personnaliser grace à la variable PS1 mais la syntaxe est vraiment complexe et difficile à maintenir !

Exemple : export PS1=' \[\e[1;33m\]\t\[\e[0m\]>\w>\[\e[1;36m\]$(__git_ps1 "(%s)")\[\e[0m\] \$ '
Qui affichera :

Capture d'écran d'un prompt bash personnalisé
Capture d'écran d'un prompt bash personnalisé

Soit :

La modification de la variable PS1 est possible dans ce générateur en ligne : Bash Prompt Generator.
Sinon on trouve de nombreuses documentations comme celle-ci par exemple : Customize your Bash prompt - makandra dev

C'est un début, mais il est quand même compliqué de trouver la syntaxe adaptée, et surtout les fonctionnalités sont limitées !
C'est là qu'interviennent des produits pensés pour !

🤔 Powerlevel10k

En cherchant des prompts plus performants, on tombe rapidement sur Powerlevel10k

Un grand MAIS entoure ce projet :

Je n'ai donc pas cherché à l'utiliser...

😍 Starship

Je ne remercierai jamais assez mon ancien collègue Théo qui m'a fait découvrir Starship ! Là, les possibilités sont décuplées, et on a une configuration ultra simple et très bien documentée !
De plus, on a des presets qui permettent d'avoir une configuration en 2 clics !

De mon côté j'utilise une base du preset preset Gruvbox légèrement modifiée, disponible sur ce gist.
Le résultat :

Capture d'écran d'un prompt avec ma config Starship
Capture d'écran d'un prompt avec ma config Starship
Les modifications apportées :

Fish Shell

Une révolution pour moi a aussi été d'utiliser le shell Fish ! Effectivement, ce shell propose de très nombreuses fonctionnalités qui me sont devenues très utiles au quotidien :

Et le meilleur : je n'ai eu AUCUNE configuration à faire pour pouvoir en profiter, tout cela est disponible par défaut !

Le mieux pour voir un étendu de ces fonctionnalités disponibles immédiatement à la première utilisation est de lire cette page du site officiel : Tutorial — fish-shell documentation

Sous Debian et Gnome, pour en profiter simplement, on peut modifier la commande lancée par Terminator dans les préférences : onglet profils, puis commande, exécuter une commande personnalisée, et entrer /usr/bin/fish.

Il y a quand même des choses à savoir lorsque l'on vient de bash... Regardez aux chapitre ci-dessous !

Nouvelle commande cdh

Le shell Fish apporte plusieurs nouvelles commandes, mais je me sert particulièrement de cdh qui affiche l'historique des répertoires visités. Très pratique !

Capture d'écran de la commande cdh du shell Fish
Capture d'écran de la commande cdh du shell Fish

Référence de la commande : cdh - change to a recently visited directory — fish-shell 4.5.0 documentation

Variables d'environnement

Dans bash :

export MY_VAR="my value"

La même chose dans le shell Fish :

set -U MY_VAR "my value"

Voir la documentation Fish associée : Universal Variables

Virtual env Python

Lorsque l'on crée un virtual environment Python, il faut l'activer à l'aide d'un script, par exemple :

source venv/bin/activate

Ce script ne fonctionne pas dans le shell Fish

Par contre un script pour Fish est bien généré ! Il suffit donc de le lancer à la place :

source venv/bin/activate.fish

Référence dans la documentation officielle Python : Creating Virtual Environments

Il existe de multiples solutions pour automatiquement activer le venv lorsque l'on entre dans le répertoire, et donc éviter de devoir manuellement lancer son activation...
Je peux citer par exemple safigo/fish-autovenv: Automatically activate/deactivate Python virtual enviroments when entering/leaving a directory


Utilitaires

up

Un petit utilitaire pour remonter très facilement dans l'arborescence des répertoires !
Exemple d'usage :

/home/user/foo/bar/baz/head/foot $ up
/home/user/foo/bar/baz/head $
/home/user/foo/bar/baz/head $ up 2
/home/user/foo/bar $ 
/home/user/foo/bar $ up ho
/home $ 

À récupérer sur GitHub : shannonmoeller/up: Quickly navigate to a parent directory via tab-completion.

Le dépôt contient de quoi installer très rapidement sous les shell bash, ZSH ou Fish !

rsyncy

Un wrapper de la commande rsync qui permet d'ajouter une barre de progression, avec de nombreuses informations utiles :

À récupérer sur GitHub : laktak/rsyncy: A status/progress bar for rsync


TUI

Le terme barbare de TUI est lui bien décrit par la définition donnée sur la fiche Wikipedia :

Un environnement en mode texte (TUI, de l'anglais « Text User Interface », « Textual User Interface » ou encore «Terminal User Interface » est un rétronyme introduit dans le jargon informatique après l'invention des environnements graphiques pour se distinguer des interfaces en ligne de commande. Ce type d'interface utilisateur occupe la totalité de l'écran comme les interfaces graphiques, et n'est donc pas limité au traitement ligne par ligne comme les CLI.

La navigation sur l'écran (ou le mouvement vers une ligne de données affichée ) s'effectue par des mouvements de curseur. L'emploi de caractères semi-graphiques permet de dessiner des limites de colonne ou les bords d'un tableau, de souligner ou de faire clignoter le caractère actif (celui sur lequel se trouve le curseur).

Ce type d'environnement s'avère très utile pour le développement d'applications sans besoins graphiques. Il est très économe en ressource mémoire (RAM).

Voici donc quelques exemples d'interfaces qui agrémentent efficacement le terminal, et dont je me sert au quotidien !

Lazy SSH

Une interface qui permet de visualiser, créer, trier, chercher, supprimer des hôtes SSH, et bien sûr de lancer une connexion ! Il y a même un système de tags qui permet de catégoriser les entrées, et la gestion du port forwarding !

Capture d'écran de Lazy SSH en action
Capture d'écran de Lazy SSH en action

À récupérer sur GitHub : Adembc/lazyssh: A terminal-based SSH manager inspired by lazydocker and k9s - Written in go

fzf.fish

Un plugin très pratique au shell Fish ! Il apporte du fuzzy finder pour l'historique de commande, les chemins, fichiers, dans git, pour les id de processus.
Je me sert particulièrement de :

Exemple avec l'historique de commandes :

Historique des commandes du shell dans fzf.fish
Historique des commandes du shell dans fzf.fish

À récupérer sur GitHub : PatrickF1/fzf.fish: 🔍🐟 Fzf plugin for Fish

Au passage, dans le navigateur de fichiers il est bien possible de scroller la preview avec le clavier : pour cela il faut utiliser maj+⬆️ ⬇
Cf Keyboard bindings for scrolling preview window? junegunn/fzf.vim#358.

Logalize

Affichage de log avec coloration syntaxique... et on peut même ajouter les siennes avec un descripteur YAML ! Mais de base beaucoup de formats sont déjà pris en charge.

Affichage d'un log avec Logalize
Affichage d'un log avec Logalize

A récupérer sur GitHub : deponian/logalize: Fast and extensible log colorizer Alternative to ccze


Création le 05/11/2025
Dernière mise à jour le 23/02/2026

Un oubli, une erreur, une suggestion ? Rendez-vous sur le dépôt GitHub !