Mise en place de zsh et d'un dossier .dotfiles
Introduction
Qu'est-ce que c'est que zsh ?
Il s'agit (comme nous indique aimablement sa page Wikipédia) d'un shell unix. En gros, il s'agit d'un remplaçant potentiel pour votre vénérable interpréteur bash.
Mais pourquoi se casser le beignet à installer zsh, alors que j'ai déjà bash ?
zsh a plusieurs atouts sur bash :
- Une autocomplétion avancée (incluant une correction orthographique).
- Un historique partagé entre les différents shells.
- Et surtout, le support de plugins permettant une personnalisation TRÈS agréable de son outil de travail.
Et du coup, c'est quoi le rapport avec un dossier .dotfiles ?
Hé bien, tant qu'à tripatouiller son interpréteur, autant en profiter pour constituer un dossier .dotfiles, c'est-à-dire un dossier contenant vos différents fichiers de configuration. Ensuite, ce dossier est mis sur votre gestionnaire de version favori, et il n'y a plus qu'à le mettre sur vos différentes stations de travail. C'est très utile quand on apprécie utiliser le même environnement de travail partout.
L'objectif de cet article est de vous présenter rapidement comment installer zsh, le configurer, et sauvegarder votre configuration dans un .dotfiles.
Installation de zsh
Mise en place
Après l'installation du paquet zsh, l'interpréteur est installé, mais il n'est pas utilisé par défaut par le système. Vous pouvez cependant l'utiliser en tapant la commande zsh dans votre shell, si vous souhaitez tester votre configuration avant d'en faire votre shell par défaut.
Pour faire de zsh votre interpréteur par défaut, il faut utiliser cette commande, puis relancer votre session pour que cela soit pris en compte :
1 |
chsh -s /bin/zsh |
Si la commande chsh n'est pas disponible de base, c'est qu'il vous faut installer le paquet util-linux-user.
Configuration
Comme bash, zsh est configurable à partir d'un .zshrc. Si vous avez déjà un dossier .dotfiles, je vous laisse sauter directement à la partie de configuration du .zshrc, et surtout de ses plugins. Pour les autres, je vais vous montrer comment j'ai géré le mien. Attention, je ne prétends pas détenir la meilleure des méthodes !
Le dossier .dotfiles
Création du dossier
Créez un dossier .dotfiles dans votre home, et initiez un dépôt dedans (pour git, cf ici).
1 2 3 |
mkdir .dotfiles cd .dotfiles git init |
Ensuite, il ne reste plus qu'à mettre les fichiers de configuration à l'intérieur et les faire suivre par votre gestionnaire.
Création d'un Makefile
L'idée, c'est qu'une fois que votre dossier est fait, vous n'ayez que le minimum à faire pour maintenir votre configuration à jour. Pour cela, le plus intéressant que je connaisse reste de créer un Makefile, qui contiendra toutes les commandes nécessaires.
Voici un exemple avec le mien, qui gère les 4 fichiers de configuration de mon dossier :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
all: pull source source: cp ~/.dotfiles/.aliases ~/.aliases cp ~/.dotfiles/.zshrc ~/.zshrc cp ~/.dotfiles/.bashrc ~/.bashrc cp ~/.dotfiles/.bash_profile ~/.bash_profile pull: git pull antigen: git clone https://github.com/zsh-users/antigen.git install: antigen source |
Ainsi, make va successivement mettre à jour le dépôt, puis sourcer les fichiers de configuration. Le make install est présent uniquement pour l'installation du dépôt sur vos autres machines, en permettant l'ajout du gestionnaire de plugin de zsh (détails dans la partie sur Antigen) avant de copier les fichiers de configuration.
Les plus attentifs d'entre vous auront remarqué qu'au lieu de créer des liens symboliques, je copie les fichiers de configuration. En fait, il m'est arrivé que les liens symboliques ne marchent pas, et j'ai préféré pallier ce soucis en copiant directement les fichiers. C'est moins propre et occupe un peu plus de place, mais bon, j'assume, tout le monde à le droit à son coté sombre et déviant !
La configuration de zsh
Le zshrc
Comme exemple, voici mon dossier .dotfiles, vous pouvez jeter un œil à mon .zshrc si vous le souhaitez.
Les alias : si ce n'est pas déjà fait, je vous conseille de mettre vos alias dans un fichier .aliases, et de pointer vers ce fichier grâce à cette commande dans votre .zshrc :
1 |
source ~/.aliases |
En dehors de ça, la grande force de zsh, c'est sa customisation via des plugins. Cela est possible grâce à 2 outils.
Antigen
Antigen est le gestionnaire de plugins pour zsh, l'équivalent de Vundle ou Plug pour Vim et Neovim.
Pour utiliser Antigen, il faut copier le dépôt (dans le cadre de cet article, dans votre .dotfiles, sinon, où vous voulez) :
1 |
git clone https://github.com/zsh-users/antigen.git |
Antigen peut être mis à jour avec cette commande :
1 |
antigen selfupdate |
Pour mettre à jour les plugins :
1 |
antigen update |
Oh-my-zsh
Seul, Antigen ne fait pas grand chose. C'est là qu'intervient oh-my-zsh, un dépôt pour gérer votre configuration. Cela contient un peu de tout, depuis des thèmes, jusqu'à des plugins faisant dire des "Chuck Norris Facts" à une vache ! Il existe d'autres dépôts, comme prezto, mais je n'ai pas encore eu l'occasion de comparer.
Pour l'installer, c'est très simple, Antigen le fait pour vous. Idem pour l'installation des plugins, et leur mise à jour !
Pour cela, rien de plus simple, rendez vous dans votre .zshrc, et écrivez :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
autoload antigen # Source vers Antigen source ~/.dotfiles/antigen/antigen.zsh # Installation de oh-my-zsh antigen use oh-my-zsh # différents plugins # support de git antigen bundle arialdomartini/oh-my-git antigen bundle git # coloration syntaxique dans le shell antigen bundle zsh-users/zsh-syntax-highlighting # theme antigen theme ys antigen apply |
Il ne vous restera plus qu'à chercher les plugins qui vous paraissent les plus intéressants, le thème de vos rêves, et faire des liens ou copier les fichiers de configuration dans votre /home!
Merci aux relecteurs : eorn, Nico M., et Nisaea
Nisaea
juin 22, 2017 à 2:14
Bon ben testé et adopté :] Pour l'instant tout va bien, j'ai pris le thème bira et j'aime beaucoup!
David Picard
juin 23, 2017 à 9:12
Content que l'article t'ai servi ^^
J'ai pas mal hésité entre bira et ys, mais au final j'utilise ys pour une raison toute simple: ce thème laisse une ligne vide après chaque commande, ce qui me permet de visualiser plus facilement les différents blocs.
Bastien
octobre 17, 2017 à 10:52
Bonjour et merci pour ce post,
j'ai besoin d'un coup de main sur l'installation d'antigen.
j'ai suivi à la lettre la façon dont vous l'avez installé mais rien n'y fait :
bastien@bastien-VirtualBox:~/.dotfiles$ git clone https://github.com/zsh-users/antigen.git
bastien@bastien-VirtualBox:~/.dotfiles$ ls -alt
total 64
drwxrwxr-x 8 bastien bastien 4096 oct. 17 10:38 .git
drwxrwxr-x 7 bastien bastien 4096 oct. 17 10:36 antigen
drwxrwxr-x 4 bastien bastien 4096 oct. 17 10:34 .
-rw-rw-r-- 1 bastien bastien 371 oct. 17 10:34 .zshrc
drwxr-xr-x 39 bastien bastien 32768 oct. 17 10:28 ..
-rw-rw-r-- 1 bastien bastien 330 oct. 17 10:20 Makefile
-rw-rw-r-- 1 bastien bastien 0 oct. 17 08:52 .bash_profile
-rw-rw-r-- 1 bastien bastien 0 oct. 17 08:52 .aliases
-rw-r--r-- 1 bastien bastien 5067 oct. 17 08:49 .bashrc
bastien@bastien-VirtualBox:~/.dotfiles$ antigen
antigen : commande introuvable
J'ai essayé de l'installer de manière classique : sudo apt-get install zsh-antigen
bastien@bastien-VirtualBox:~/.dotfiles$ which antigen
bastien@bastien-VirtualBox:~/.dotfiles$
Je suis tombé sur ce post parlant d'un 'caveat' : https://github.com/zsh-users/antigen/issues/159
==> Caveats
To activate antigen, add the following to your ~/.zshrc:
source $(brew --prefix)/share/antigen.zsh
J'ai ajouté la ligne à mon ~/.zshrc, j'ai source le fichier mais toujours rien...
Je suis à court d'idées :). Merci d'avance !
PS : Je suis actuellement sur machine virtuelle, mais j'ai le même problème sur ma machine réelle
Bastien
Nisaea
octobre 17, 2017 à 6:40
Bonjour Bastien,
Exécutes-tu la commande depuis zsh? Ton prompt ressemble beaucoup à un prompt bash. Si ce n'est pas le cas essaye d'ouvrir une session zsh en tapant juste zsh sans arguments, et vois si le problème persiste.
Good luck! o/
Bastien
octobre 18, 2017 à 9:22
J'ai cligné des yeux à l'emplacement de la commande : chsh -s /bin/zsh
Autant pour moi 🙂 merci