← Retour au blog

Image principale

#linux #zsh #ohmyzsh #powerlevel10k #terminal #devtools

Shell sous stéroïdes : ZSH + OhMyZsh + Powerlevel10

25 mars 2022 — par KoS_

Introduction

En tant qu’utilisateur de GNU/Linux/Unix, nous interagissons des dizaines, voire des centaines de fois chaque jour avec notre shell.

Qu’est-ce que le Shell ?

Le shell est le programme qui sert d’interface entre l’utilisateur et le système d’exploitation. C’est un interpréteur de commandes.

La majorité des distributions GNU/Linux sont livrées avec Bash par défaut. Mais il en existe d’autres :

  • sh
  • dash
  • csh
  • tcsh
  • ksh
  • fish
  • zsh

C’est sur ce dernier que nous allons nous attarder : ZSH (Zorn Shell).

Pourquoi choisir ZSH ?

Quelques avantages offerts par ZSH :

  • 100 % rétro-compatible avec Bash
  • Auto-complétion des commandes, de leurs options, des dossiers et fichiers
  • Correction orthographique des commandes
  • Historique partagé entre les différentes consoles

ZSH réunit le meilleur des fonctions offertes par les autres shells. Le gain de temps est sensible dès les premières minutes d’utilisation, même s’il faudra un peu de temps pour en maîtriser toutes les subtilités.

Il bénéficie aussi d’énormément de ressources complémentaires (thèmes, plugins, frameworks) pour lui ajouter tout un tas de fonctions et personnaliser rapidement son environnement.

De Bash à ZSH

Installons les outils nécessaires :

# Debian / Ubuntu / Linux Mint
sudo apt install -y zsh git curl wget

# CentOS / RHEL / Fedora
sudo dnf install -y zsh git curl wget

# Arch / Manjaro
sudo pacman -Sy zsh git curl wget

# openSUSE
sudo zypper install -y zsh git curl wget

Lister les shells disponibles :

cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/bin/zsh
/usr/bin/zsh

Changer le shell par défaut de l’utilisateur :

sudo chsh -s /usr/bin/zsh nom_utilisateur

Relancez le terminal. Appuyez sur 0 à la première invite pour créer le fichier ~/.zshrc. Ce fichier contiendra la configuration de votre ZSH.

OhMyZsh

Plusieurs frameworks existent pour ZSH :

  • Zgen
  • Zim
  • Zplugin
  • Prezto
  • OhMyZsh

Mon choix s’est porté sur OhMyZsh, réputé, stable (1000+ contributeurs) et bien documenté. Il donne accès à des centaines de plugins et thèmes.

Polices (Nerd Fonts)

Certains thèmes affichent des icônes (Git, batterie, Wi-Fi, etc.). Il faut donc une police compatible, par exemple Hack Nerd Font :

wget https://github.com/ryanoasis/nerd-fonts/releases/download/v2.0.0/Hack.zip -O ~/hack.zip
unzip ~/hack.zip -d ~/hack && rm ~/hack.zip
find ~/hack/ -iname "*Windows*" -exec rm {} \;   # supprime les variantes Windows
sudo mv hack /usr/share/fonts/
fc-cache -v
fc-list | grep -i 'hack'

Dans votre terminal, sélectionnez la police fraîchement installée.

Installation d’OhMyZsh + plugins

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

git clone https://github.com/zsh-users/zsh-autosuggestions \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-completions \
${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

Si vous n’avez pas encore basculé sur ZSH, l’installateur le fera et déploiera une config de base dans ~/.zshrc. Par défaut, le thème robbyrussell est utilisé.

Configuration ZSH (base)

Une configuration simple et fonctionnelle, avec le thème agnoster et les plugins installés plus haut :

# Path to your oh-my-zsh installation
export ZSH="$HOME/.oh-my-zsh"

# Theme
ZSH_THEME="agnoster"

# Quality of life
CASE_SENSITIVE="off"
HYPHEN_INSENSITIVE="true"
DISABLE_AUTO_UPDATE="off"
DISABLE_UPDATE_PROMPT="off"
export UPDATE_ZSH_DAYS=30
ENABLE_CORRECTION="true"
COMPLETION_WAITING_DOTS="true"
HIST_STAMPS="dd.mm.yyyy"

# Plugins
plugins=(
zsh-autosuggestions
zsh-completions
zsh-syntax-highlighting
)

source $ZSH/oh-my-zsh.sh

Rechargez la config :

source ~/.zshrc

Powerlevel10k

Powerlevel10k (P10K) est une ré-implémentation très rapide de Powerlevel9k. Avantages :

  • rendu ultra-rapide
  • configurateur interactif
  • fichier .p10k.zsh riche et documenté

Installation

git clone https://github.com/romkatv/powerlevel10k.git \
$ZSH_CUSTOM/themes/powerlevel10k

Activez-le dans ~/.zshrc :

ZSH_THEME="powerlevel10k/powerlevel10k"

Rechargez :

source ~/.zshrc

Le configurateur se lance automatiquement. Vous pouvez le relancer avec :

p10k configure

Exemple de configuration

typeset -ga POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
os_icon
context
dir
vcs
prompt_char
)

typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
status
command_execution_time
background_jobs
load
disk_usage
ram
swap
time
)

💡 Astuce : si context (user@hostname) ne s’affiche pas en local, dans ~/.p10k.zsh commentez la ligne suivante puis rechargez :

# typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=

🏁 Mot de la fin

Je n’ai pas écrit cet article pour couvrir l’intégralité de ZSH + OhMyZsh + Powerlevel10k. Le but est de faciliter l’accès à ce trio et de vous donner une base solide pour personnaliser votre environnement de terminal.

Bien configuré, il peut faire gagner beaucoup de temps et rendre l’expérience en ligne de commande bien plus agréable.

Je vous remercie de m’avoir lu — j’espère que cet article sera utile à certains d’entre vous et qu’il vous donnera envie de tweaker votre shell jusqu’à en faire un vrai cockpit de productivité.

Bon hack à tous ! 🖥️⚡