Philippe Wambeke - LoLiGrUB (19 octobre 2019)
ZSH est un “shell” qui offre des fontionnalités simples et puissantes avec un grand niveau de personnalisation.
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:
Tout le monde connaît: c'est l'interface graphique qui permet l'interaction avec l'ordinateur.
C'est la fenêtre noire qui fait peur où il faut taper des trucs bizarres.
Deux grandes étapes à suivre:
Debian et dérivés:
sudo apt-get install zsh
Fedora et dérivés:
sudo yum install zsh
Oh my zsh est un framework de personnalisation qui permet de gérer facilement la configuration de zsh. Inclut:
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.
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
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 ...
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"
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 !
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
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.
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
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 )
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 )
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
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 "
Ajouter ceci dans ~/.zshrc:
POWERLEVEL9K_TIME_FORMAT="%D{\ue383 %H:%M \uf073 %d.%m.%y}" POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status background_jobs time battery)
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.
Quelques exemples d'usage de zsh:
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)
Questions ?