~~NOCACHE~~ ~~REVEAL theme=league&transition=convex&controls=1&show_progress_bar=1&build_all_lists=1&open_in_new_window=1~~ ====== ZSH: Pimp my shell ! ====== Philippe Wambeke - LoLiGrUB (19 octobre 2019) ===== ZSH, c'est quoi ? ===== ZSH est un "shell" qui offre des fontionnalités simples et puissantes avec un grand niveau de personnalisation. ==== 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: * Les shells graphiques * Les shells textuels ==== Les shells graphiques ==== Tout le monde connaît: c'est l'interface graphique qui permet l'interaction avec l'ordinateur. * KDE, Gnome, XFCE, Mate (fork de gnome 2), Cinnamon (fork de gnome 3), ... * Windows ==== Les shells textes ==== C'est la fenêtre noire qui fait peur où il faut taper des trucs bizarres. * sh (Bourne Shell) - Stephen Bourne: 1977 * csh (C Shell) - Bill Joy: 1978 * tcsh - version moderne de csh. Systèmes BSD * ksh (Korn Shell) - David Korn: 1983. Compatible avec sh. Inclut des fonctionnalités de csh * Bash (Bourne Again Shell) - Brian Fox: 1988. Implémentation libre de sh pour le projet GNU * Zsh (Z Shell) - Paul Falstad: 1990. Le shell ultime. ===== A quoi ça ressemble ? ===== ==== Exemple de shell traditionnel ==== {{::classic_shell.png?600|}} ==== Exemple de zsh ==== {{::zsh_shell.png?600|}} ===== Installation ===== Deux grandes étapes à suivre: * Installer le paquet zsh: inclus dans toutes les distributions GNU/Linux * Installer Oh my zsh ! ==== Installation du paquet ==== Debian et dérivés: sudo apt-get install zsh Fedora et dérivés: sudo yum install zsh ===== Oh my zsh ===== Oh my zsh est un framework de personnalisation qui permet de gérer facilement la configuration de zsh. Inclut: * Plus de 200 plugins optionnels * Plus de 140 thèmes * Mise à jour automatique ==== 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. ===== 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 ==== 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 ... ==== 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 [[https://github.com/ryanoasis/nerd-fonts|"nerd font"]]. Parmi toutes les [[https://github.com/ryanoasis/nerd-fonts/releases/tag/v2.0.0|polices]], j'ai choisi la police [[https://github.com/ryanoasis/nerd-fonts/releases/download/v2.0.0/Hack.zip|Hack]]: wget "https://github.com/ryanoasis/nerd-fonts/releases/download/v2.0.0/Hack.zip" ==== 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 ! ===== 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 ==== 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. ==== 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 ==== 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 ) ==== 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 ) ===== Personnalisation du thème ===== ==== 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 ==== 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 " ==== 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) ==== 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 [[https://github.com/bhilburn/powerlevel9k/wiki/Stylizing-Your-Prompt|référence]] et autres exemples pour styliser le prompt. ===== Et maintenant, qu'est-ce qu'on en fait ? ===== Quelques exemples d'usage de zsh: ==== Navigation dans les dossiers ==== * navigation rapide dans les dossiers grâce aux combinaisons uniques (zsh n'est pas case-sensitve !) * un deuxième appui sur la touche TAB présente une liste de possibilités dans laquelle on peut naviguer * pas besoin de faire "cd dossier" pour aller dans "dossier" * les horribles commandes du genre "cd ../../.." pour remonter de 3 niveaux sont remplacées par "...." * pour retourner dans le 'n' dernier dossier, il suffit d'un simple "cd -n" ==== Aide à la saisie ==== * Remplacement des variables: oubliez "echo ${ma_variable}": tapez directement "${ma_variable}" suivi de la touche TAB * Proposition de commande si faute de frappe * Coloration syntaxique en cours de frappe (commandes ET variables) * besoin de voir les fichiers du dossier pendant la frappe ? appuyer deux fois sur la touche TAB * besoin de connaître les arguments d'une commande sans quitter le prompt ? taper la commande suivie d'un tiret et appuyer 2 fois sur TAB ==== Un historique qui tue ==== * L'historique fonctionne toujours même avec plusieurs instances de zsh simultanées * Le plugin de suggestion est juste génial * Rappel de la dernière commande qui commence par ce qu'on a tapé: flêche vers le haut * CTRL+R de bash fonctionne aussi dans ZSH ==== 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) ===== Pour aller plus loin ===== * [[https://ohmyz.sh/|ohmyzsh]] * [[https://github.com/robbyrussell/oh-my-zsh|ohmyzsh depuis github]] * [[https://github.com/bhilburn/powerlevel9k|Personnalisation]] * [[http://reasoniamhere.com/2014/01/11/outrageously-useful-tips-to-master-your-z-shell|Utilisation]] * [[https://github.com/romkatv/powerlevel10k|powerlevel10k]] ===== Merci ===== Questions ?