→ Slide 1

ZSH: Pimp my shell !

Philippe Wambeke - LoLiGrUB (19 octobre 2019)

→ Slide 2

ZSH, c'est quoi ?

ZSH est un “shell” qui offre des fontionnalités simples et puissantes avec un grand niveau de personnalisation.

↓ Slide 3

Et c'est quoi un shell ?

Un “shell” est un logiciel qui permet à un humain de communiquer avec un ordinateur. On parle d'“interface homme-machine” en bon français.

Il en existe de deux types:

↓ Slide 4

Les shells graphiques

Tout le monde connaît: c'est l'interface graphique qui permet l'interaction avec l'ordinateur.

↓ Slide 5

Les shells textes

C'est la fenêtre noire qui fait peur où il faut taper des trucs bizarres.

→ Slide 6

A quoi ça ressemble ?

↓ Slide 7

Exemple de shell traditionnel

↓ Slide 8

Exemple de zsh

→ Slide 9

Installation

Deux grandes étapes à suivre:

↓ Slide 10

Installation du paquet

Debian et dérivés:

sudo apt-get install zsh

Fedora et dérivés:

sudo yum install zsh
→ Slide 11

Oh my zsh

Oh my zsh est un framework de personnalisation qui permet de gérer facilement la configuration de zsh. Inclut:

↓ Slide 12

Installation de Oh my zsh

Facile: un coup de copier-coller dans n'importe quel shell ;)

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

Après on se retrouve dans zsh, mais c'est encore assez éloigné de la capture d'écran.

→ Slide 13

PowerLevel9K

PowerLevel9K est un des nombreux thèmes pour zsh. Si le paquet existe pour votre distribution, l'installation se fait avec un simple:

sudo apt-get install zsh-theme-powerlevel9k
sudo yum install powerlevel9k
sudo pacman -S powerlevel9k
...

Sinon, il est possible de l'installer par:

git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k
↓ Slide 14

Les polices PowerLine

Ces polices de caractères sont nécessaires pour l'affichage correct des petits symboles. Il faut donc les installer via:

sudo apt-get install fonts-powerline
sudo yum install powerline
sudo pacman -S powerline-fonts
...
↓ Slide 15

Les polices compremant les glyphes

La police PowerLine ne contient pas suffisamment de glyphes. Il faut donc installer une police de caractère spéciale faisant partie de la collection "nerd font".

Parmi toutes les polices, j'ai choisi la police Hack:

wget "https://github.com/ryanoasis/nerd-fonts/releases/download/v2.0.0/Hack.zip"
↓ Slide 16

Installer la police Hack

Pour installer cette nouvelle police de caractères, suivre les étapes suivantes:

mkdir hack
unzip Hack.zip -d hack
sudo mv hack /usr/share/fonts
fc-cache

Après, ne pas oublier de changer la police dans le terminal !

→ Slide 17

La configuration

Maintenant le gros morceau: la configuration. Tout se fait dans le fichier ~/.zshrc

export TERM="xterm-256color"
POWERLEVEL9K_MODE="nerdfont-complete"
ZSH_THEME="powerlevel9k/powerlevel9k"

Si le thème PowerLevel9k est packagé par la distribution, la dernière ligne devient:

source /usr/share/zsh-theme-powerlevel9k/powerlevel9k.zsh-theme
↓ Slide 18

Premier plugin: autosuggestions

Ce plugin permet d'afficher des suggestions basées sur l'historique des commandes. Installation:

git clone https://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions

Et activation (toujours dans le fichier ~/.zshrc):

plugins=(
	zsh-autosuggestions
	)

Après, une suggestion basée sur l'historique apparaîtra au fur et à mesure de la frappe. L'appui sur la flèche droite (ou end) validera la suggestion.

↓ Slide 19

Un historique qui marche

Et tant qu'on y est, on peaufine la gestion de l'historique:

HISTSIZE=3000            # Nombre de lignes en mémoire
HISTFILE=~/.zsh_history  # Fichier de sauvegarde
SAVEHIST=3000            # Nombre d'entrées à enregistrer
HISTDUP=erase            # Suppression des doublons
setopt HIST_IGNORE_SPACE # Ne pas enregistrer les commandes commencant par un blanc
setopt appendhistory     # Ajout des entrées en mode append
setopt sharehistory      # Partage de l'historique entre terminaux
setopt incappendhistory  # Ajout immédiat à l'historique (pas à la fermeture du terminal)
setopt correct           # Propose la commande la plus proche en cas d'erreur de frappe
↓ Slide 20

Deuxième plugin: coloration syntaxique

Ce plugin permet d'avoir une coloration syntaxique à mesure de la frappe au clavier. Installation:

git clone https://github.com/zsh-users/zsh-syntax-highlighting $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

Et activation (toujours dans le fichier ~/.zshrc):

plugins=(
	zsh-autosuggestions
	zsh-syntax-highlighting
	)
↓ Slide 21

Troisième plugin: les pages man en couleur

Ce plugin permet la consultation des pages man en couleur.

Installation: rien à faire car il est déjà fourni par Oh my zsh !

Ne reste plus qu'à l'activer: (toujours dans le fichier ~/.zshrc):

plugins=(
	zsh-autosuggestions
	zsh-syntax-highlighting
	colored-man-pages
	)
→ Slide 22

Personnalisation du thème

↓ Slide 23

Ajout de l'icone du système

Ajouter cette ligne dans ~/.zshrc:

POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon dir)

Si un texte s'affiche au lieu de l'icône (Arc, Deb,…) il est possible de forcer l'icône à utiliser:

os_icon='\uf306'

Les icônes et leur numéros peuvent être recherchés sur le site http://nerdfonts.com

↓ Slide 24

Un prompt mutli-lignes

Ajouter ceci dans ~/.zshrc:

POWERLEVEL9K_PROMPT_ON_NEWLINE=true
POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="%F{014}\u256D\u2500%f"
POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%F{014}\u2570%F{cyan}\uF460%F{073}\uF460%F{109}\uF460%f "
↓ Slide 25

Partie droite du prompt

Ajouter ceci dans ~/.zshrc:

POWERLEVEL9K_TIME_FORMAT="%D{\ue383 %H:%M \uf073 %d.%m.%y}"
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs time battery)
↓ Slide 26

Toujours plus fort !

Modifier la couleur en fonction de l'état de charge de la batterie:

POWERLEVEL9K_BATTERY_STAGES=($'\uf244' $'\uf243' $'\uf242' $'\uf241' $'\uf240')
POWERLEVEL9K_BATTERY_LEVEL_BACKGROUND=(196 208 226 118 46)
POWERLEVEL9K_BATTERY_LOW_FOREGROUND=232
POWERLEVEL9K_BATTERY_CHARGING_FOREGROUND=232
POWERLEVEL9K_BATTERY_CHARGED_FOREGROUND=232
POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=232

Consultez la référence et autres exemples pour styliser le prompt.

→ Slide 27

Et maintenant, qu'est-ce qu'on en fait ?

Quelques exemples d'usage de zsh:

↓ Slide 28
↓ Slide 29

Aide à la saisie

↓ Slide 30

Un historique qui tue

↓ Slide 31

La mort de find

zsh propose un systême de filtres (très) puissant.

Recherche de tous les fichiers sh de manière récursive

ls **/*.sh

Recherche de tous le fichiers modifiés il y a moins d'une heure

ls **/*(mh-1)

Recherche des fichiers de plus de 1 Mio dans le dossier courant:

ls *(Lm+1)
→ Slide 32

Pour aller plus loin

→ Slide 33

Merci

Questions ?