Post

zsh

Pourquoi

Le shell est un élément fondamental de l’expérience de travail sur un système d’exploitation Linux, et il existe de nombreuses alternatives au shell par défaut, Bash. Zsh (Z shell) est l’une de ces alternatives populaires, offrant de nombreuses fonctionnalités avancées pour améliorer l’efficacité et la convivialité de l’interface en ligne de commande.

Introduction

Zsh est un shell interactif en ligne de commande conçu pour être une amélioration de Bash, le shell par défaut de la plupart des distributions Linux. Il offre une variété de fonctionnalités avancées, notamment la complétion automatique, la personnalisation avancée, des thèmes, et de nombreuses autres fonctionnalités qui rendent l’utilisation du terminal plus efficace et agréable.

Préparation

Avant d’installer de nouveaux logiciels, il est conseillé de mettre à jour la liste des paquets disponibles. Pour ce faire, exécutez la commande suivante :

1
sudo apt update

Pour installer Zsh, utilisez la commande apt :

1
sudo apt install zsh zsh-doc

Sachant que vous pouvez aussi ajouter thefuck aux paquets à installer.

The Fuck est une magnifique application, inspirée par un tweet de @liamosaur, qui corrige les erreurs dans les commandes précédentes de la console.

Shell par défaut

Après l’installation, vous pouvez changer votre shell actuel vers Zsh en utilisant la commande suivante :

1
chsh -s $(which zsh)

La commande which zsh localisera le chemin du binaire Zsh pour vous. Vous devrez peut-être vous déconnecter et vous reconnecter pour que le changement prenne effet.

Personnalisation

Zsh est hautement personnalisable. Vous pouvez créer un fichier de configuration ~/.zshrc pour définir des options, des thèmes et des plugins personnalisés. De nombreux gestionnaires de thèmes et plugins Zsh sont disponibles, tels que Oh-My-Zsh, Zgen, ou Antigen, pour rendre Zsh encore plus puissant et adapté à vos besoins.

Oh-My-Zsh

Oh-My-Zsh est une extension pour Zsh qui rend la personnalisation du shell facile et agréable. Il propose une variété de fonctionnalités telles que la complétion automatique avancée, des thèmes personnalisables, des raccourcis clavier améliorés, et bien plus encore. Oh-My-Zsh est un projet open source maintenu par une communauté active, ce qui signifie que de nombreuses contributions de thèmes et de plugins sont disponibles pour étendre encore davantage ses fonctionnalités.

Installation

Avant d’installer Oh-My-Zsh, assurez-vous d’avoir Zsh installé sur votre système Debian. Si vous ne l’avez pas encore fait, suivez les étapes précédentes pour installer Zsh.

Oh-My-Zsh s’installe et se configure par utilisateur !

L’installation d’Oh-My-Zsh est simple et se fait en une seule commande. Ouvrez votre terminal et exécutez la commande suivante :

1
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Cette commande télécharge le script d’installation d’Oh-My-Zsh depuis GitHub et l’exécute pour mettre en place le framework sur votre système.

Configuration

Après l’installation, Oh-My-Zsh sera automatiquement configuré comme votre shell par défaut. Vous pouvez personnaliser votre configuration en éditant le fichier ~/.zshrc. Pour ce faire, utilisez un éditeur de texte de votre choix, par exemple, nano :

1
nano ~/.zshrc

Vous pouvez maintenant personnaliser votre shell en modifiant des paramètres tels que le thème, les plugins, et les options spécifiques à Oh-My-Zsh.

Thèmes

Oh-My-Zsh propose une variété de thèmes pour personnaliser l’apparence de votre shell. Vous pouvez changer de thème en modifiant la variable ZSH_THEME dans votre fichier ~/.zshrc. Par exemple, pour utiliser le thème “agnoster,” ajoutez la ligne suivante à votre fichier de configuration :

1
ZSH_THEME="agnoster"

Plugins

Oh-My-Zsh offre de nombreux plugins qui ajoutent des fonctionnalités utiles à votre shell. Pour activer un plugin, ajoutez son nom à la liste des plugins dans ~/.zshrc. Par exemple, pour activer le plugin de complétion automatique des commandes Docker, ajoutez “docker” à la liste des plugins :

1
plugins=(... docker)

Appliquer les Modifications

Après avoir personnalisé votre fichier ~/.zshrc, sauvegardez-le et quittez l’éditeur. Pour appliquer les modifications, rechargez la configuration de Zsh en exécutant la commande suivante :

1
source ~/.zshrc

PowerLevel10k

L’interface de terminal est l’un des outils les plus utilisés par les développeurs et les administrateurs système, et la personnalisation de votre terminal peut grandement améliorer votre expérience de travail. Powerlevel10k est un thème pour Oh-My-Zsh qui offre une personnalisation avancée de l’invite de commande, rendant votre terminal plus élégant, informatif et puissant.

Powerlevel10k est un thème extrêmement flexible pour Zsh, basé sur Powerlevel9k. Il vous permet de personnaliser chaque aspect de l’invite de commande, des icônes et couleurs jusqu’aux informations système affichées. Grâce à sa configuration interactive, vous pouvez créer une invite de commande qui répond parfaitement à vos besoins et à votre style de travail.

Installation

Avant d’ajouter Powerlevel10k, assurez-vous d’avoir Zsh et Oh-My-Zsh installés sur votre système. Si vous ne l’avez pas encore fait, suivez les étapes précédentes pour les installer.

Pour installer Powerlevel10k, ouvrez un terminal et exécutez la commande suivante :

1
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k

Cette commande clone le référentiel Powerlevel10k depuis GitHub dans le répertoire de thèmes personnalisés d’Oh-My-Zsh.

Configuration

Pour configurer Powerlevel10k comme thème par défaut, ouvrez le fichier ~/.zshrc dans un éditeur de texte. Recherchez la ligne qui définit le thème (elle doit être déjà présente) et remplacez-la par :

1
ZSH_THEME="powerlevel10k/powerlevel10k"

Tips

Je ne peux que vous conseiller d’installer aussi zsh-autosuggestions :

Autosuggestions rapides et discrètes de type “Fish” pour zsh.

Il suggère des commandes au fur et à mesure de la frappe en se basant sur l’historique et les complétions.

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

Alias

Tout comme pour bash, il est possible sous zsh de configurer des alias de commandes pour se simplifier la vie :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# -----------------------------------------------------------------------------
# ZSH TWEAKS
# -----------------------------------------------------------------------------


# ------------------------------
# ALIASES
# ------------------------------

# Privileged access
if (( UID != 0 )); then
    alias sudo='sudo '
    alias scat='sudo cat'
    alias svim='sudoedit'
    alias root='sudo -i'
    alias reboot='sudo systemctl reboot'
    alias poweroff='sudo systemctl poweroff'
    alias update='sudo apt update'
    alias netctl='sudo netctl'
fi

## Safety features
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -I'                    # 'rm -i' prompts for every file

# btrfs cow
alias cp='cp -i --reflink=auto'

# safer alternative w/ timeout, not stored in history
alias rm=' timeout 3 rm -Iv --one-file-system'
alias ln='ln -i'
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'
alias cls=" echo -ne '\033c'"       # clear screen for real (it does not work in Terminology)

## Make Bash error tolerant
alias :q=' exit'
alias :Q=' exit'
alias :x=' exit'
alias cd..='cd ..'

# process using web
alias ports='lsof -i -n -P'

# make parent directory if needed
alias mkdir='mkdir -p'

# quit, exit & reboot
alias :q='exit'
alias oust="echo 'bye $USER...'; sleep 2s && systemctl poweroff"
alias comeback="echo 'be back right now...'; sleep 2s && systemctl reboot"

# Modified commands
alias diff='colordiff'              # requires colordiff package
alias grep='grep --color=auto'
alias more='less'
alias df='df -h'
alias du='du -c -h'
alias mkdir='mkdir -p -v'
alias nano='nano -w'
alias ping='ping -c 5'
alias dmesg='dmesg -HL'

## New commands
alias da="date '+%A, %B %d, %Y [%T]'"
alias du1='du --max-depth=1'
alias hist='history | grep'         # requires an argument
alias openports='ss --all --numeric --processes --ipv4 --ipv6'
alias pgg='ps -Af | grep'           # requires an argument
alias ..='cd ..'
alias x=exit

# changes directories
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias .3='...'
alias .4='....'
alias .5='.....'

# handy short cuts
alias h='history'
alias j='jobs -l'

# date /time
alias path='echo -e ${PATH//:/\\n}'
alias now="date +'%T'"
alias nowtime=now
alias nowdate="date +'%d-%m-%Y'"

## pass options to free ##
alias free='free -h'
alias meminfo='free -m -l -t'

## get top process eating memory
alias psmem='ps auxf | sort -nr -k 4'
alias psmem10='ps auxf | sort -nr -k 4 | head -10'

## get top process eating cpu ##
alias pscpu='ps auxf | sort -nr -k 3'
alias pscpu10='ps auxf | sort -nr -k 3 | head -10'

## Resume wget by default
alias wget='wget -c'

# better 'top'
alias top='htop'

# screen default resume
alias screen='screen -R'
alias sr='screen'

# listings
alias ll='ls -lha'
alias lo='ls -o'
alias lh='ls -lh'
alias la='ls -la'
alias sl='ls'
alias l='ls'
alias s='ls'
alias lt='ls -laptr' #oldest first sort
alias labc='ls -lap' #alphabetical sort

## ls
alias ls='ls -hFX --color=auto --group-directories-first'
alias lr='ls -RhFX --color=auto --group-directories-first'
alias ll='ls -lhFXa --color=auto --group-directories-first'
alias la='ll -AhFX --color=auto --group-directories-first'
alias lx='ll -BXhFX --color=auto --group-directories-first'                   # sort by extension
alias lz='ll -rShFX --color=auto --group-directories-first'                   # sort by size
alias lt='ll -rthFX --color=auto --group-directories-first'                   # sort by date
alias lm='la | more'

# Git related
alias gs='git status'
alias gc='git commit'
alias ga='git add'
alias gd='git diff'
alias gb='git branch'
alias gl='git log'
alias gsb='git show-branch'
alias gco='git checkout'
alias gg='git grep'
alias gk='gitk --all'
alias gr='git rebase'
alias gri='git rebase --interactive'
alias gcp='git cherry-pick'
alias grm='git rm'

# packages
alias pacman='sudo pacman'
alias remove='pacman -R'
alias update='pacman -Syy'
alias upgrade='pacman -Syu && yay'
alias install='pacman -S --needed'
alias installed='pacman -Q'
#alias update='sudo powerpill -Syy'
#alias upgrade='sudo powerpill -Syu'
#alias install='sudo powerpill -S --needed'

# performances analysis
alias analyze='systemd-analyze'
alias blame='systemd-analyze blame'
alias criticalchain='systemd-analyze critical-chain'
alias plot='systemd-analyze plot > /tmp/boot.analysis.svg && chmod 0777 /tmp/boot.analysis.svg'

# systemctl
alias ssysctl='sudo systemctl'
alias status='ssysctl status'
alias running='ssysctl list-units'
alias failed='ssysctl --failed'
alias units='ssysctl list-unit-files'
alias start='ssysctl start'
alias stop='ssysctl stop'
alias restart='ssysctl restart'
alias reload='ssysctl reload'
alias status='ssysctl status'
alias enable='ssysctl enable'
alias disable='ssysctl disable'
alias activate='enable --now'
alias mask='ssysctl mask'
alias unmask='ssysctl unmask'
alias help='ssysctl help'
alias daemonreload='ssysctl daemon-reload'
alias reboot='ssysctl reboot'
alias poweroff='ssysctl poweroff'
alias suspend='ssysctl suspend'
alias hibernate='ssysctl hibernate'
alias sleep='ssysctl hybrid-sleep'
alias reenable='ssysctl reenable'
alias revert='ssysctl revert'
alias targets='running --type=target'
alias enabled='units |grep enabled'
alias disabled='units |grep disabled'
alias jobs='ssysctl list-jobs'

# journald
alias journal='sudo journalctl'
alias boot='journal -b'
alias pid='journal _PID='
alias follow='journal -f'
alias kernel='journal -k'
alias unit='journal -u'
alias jeca='journal -p err..alert'
alias jreload='reload systemd-journald.service'
alias jauth='journal SYSLOG_FACILITY=10'
alias since='journal --since'
alias today="journalsince 'yesterday'"
alias j1h="journalsince '60 minutes ago'"
alias j15m="journal --since '15 minutes ago'"
alias j30m="journal --since '30 minutes ago'"
alias kernelboot='journal -k -b -1'
alias boots='journal --list-boots'
alias entries20='journal -n 20'

# exports
export EDITOR='nano'
export BROWSER='surf'
export PAGER='most'

# path
export PATH="/usr/lib/ccache/bin/:$PATH"
export PATH="/usr/lib/colorgcc/bin/:$PATH"
export CCACHE_PATH='/usr/bin'
export CCACHE_DIR=/mnt/build
export BUILDDIR=/mnt/build

# vm
NPROC=$(nproc)

Vous n’êtes pas obligé d’inclure tous ces alias dans votre configuration :p.

Appliquer les Modifications

Après avoir modifié le fichier ~/.zshrc, sauvegardez-le et quittez l’éditeur. Pour que les modifications prennent effet, rechargez la configuration de Zsh en exécutant la commande suivante :

1
source ~/.zshrc

Conclusion

Zsh est un shell puissant qui peut améliorer considérablement votre expérience en ligne de commande sur Debian. Son installation est simple et rapide, et vous pouvez personnaliser votre configuration pour correspondre à vos besoins spécifiques. En adoptant Zsh, vous accéderez à de nombreuses fonctionnalités avancées qui faciliteront votre travail quotidien sur votre système Debian. Profitez de votre nouvel environnement de terminal plus performant !

Oh-My-Zsh est un excellent framework pour personnaliser et améliorer votre expérience en ligne de commande sous Debian. En suivant ce guide, vous pourrez facilement installer Oh-My-Zsh, choisir un thème qui vous convient et ajouter des plugins pour personnaliser davantage votre environnement de terminal. Profitez de la puissance et de la convivialité de Zsh avec Oh-My-Zsh pour améliorer votre productivité et votre expérience utilisateur.

Powerlevel10k est un excellent moyen d’améliorer votre expérience de travail dans le terminal. En l’ajoutant à Oh-My-Zsh, vous pouvez personnaliser chaque aspect de votre invite de commande, ce qui la rend élégante, informative et adaptée à vos besoins. Suivez ce guide pour l’installer et le configurer, et découvrez comment Powerlevel10k peut rendre votre travail quotidien dans le terminal plus efficace et agréable.

Cet article est sous licence CC BY 4.0 par l'auteur.

© 2022- Olivier. Certains droits réservés.

Propulsé par τζ avec le thème Χ