Установка Zsh с Oh-My-Zsh и темой Jovial: полное руководство
Это пошаговая инструкция по настройке современного и красивого терминала с использованием Zsh, фреймворка Oh-My-Zsh, темы Jovial и полезных плагинов. Руководство подходит для Debian, Ubuntu, CentOS, Fedora и других популярных дистрибутивов Linux.
Что мы получим в итоге
- Zsh вместо bash — мощный shell с автодополнениями и историей команд
- Oh-My-Zsh — фреймворк с сотнями тем и плагинов
- Тема Jovial — красивый промпт с контекстными emoji и информацией о Git
- Полезные плагины: автодополнения, подсветка синтаксиса, умный поиск по истории
- Современные утилиты:
ezaвместоls,batвместоcat
Шаг 1: Установка Zsh и базовых инструментов
Debian/Ubuntu
sudo apt update
sudo apt install -y zsh git curl ca-certificates autojump
CentOS/RHEL/Fedora
# Для CentOS 7/RHEL 7
sudo yum install -y zsh git curl ca-certificates autojump-zsh
# Для CentOS 8+/RHEL 8+/Fedora
sudo dnf install -y zsh git curl ca-certificates autojump-zsh
Arch Linux
sudo pacman -S zsh git curl ca-certificates autojump
Alpine Linux
sudo apk add zsh git curl ca-certificates
Проверка установки:
zsh --version
# Должно вывести: zsh 5.8 или новее
Шаг 2: Установка дополнительных утилит (опционально)
eza — современная замена ls
Debian/Ubuntu 22.04+:
sudo apt install -y eza
Для старых версий или других дистрибутивов:
# Скачать последнюю версию с GitHub
wget -c https://github.com/eza-community/eza/releases/latest/download/eza_x86_64-unknown-linux-gnu.tar.gz -O - | sudo tar xz -C /usr/local/bin
bat — улучшенный cat с подсветкой синтаксиса
Debian/Ubuntu:
sudo apt install -y bat
# В Debian пакет называется batcat, создаём симлинк
sudo ln -s /usr/bin/batcat /usr/local/bin/bat
CentOS/Fedora:
sudo dnf install -y bat
Arch Linux:
sudo pacman -S bat
Проверка:
eza --version # Должна показать версию
bat --version # Должна показать версию
Если утилиты недоступны — не страшно, в конфигурации есть безопасные fallback на стандартные ls и cat.
Шаг 3: Смена стандартного shell на Zsh
Определяем путь к zsh:
command -v zsh
# Обычно: /usr/bin/zsh или /bin/zsh
Устанавливаем zsh как shell по умолчанию:
# Замените /usr/bin/zsh на ваш путь, если он отличается
chsh -s /usr/bin/zsh
# Или для конкретного пользователя (от root):
sudo chsh -s /usr/bin/zsh username
Важно: Изменения вступят в силу после повторного входа в систему или перезапуска терминала.
Проверка:
echo $SHELL
# Должно вывести: /usr/bin/zsh
Шаг 4: Установка Oh-My-Zsh
Скачиваем и устанавливаем Oh-My-Zsh:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Скрипт автоматически:
- Создаст директорию
~/.oh-my-zsh - Создаст базовый файл
~/.zshrc - Предложит сделать zsh shell по умолчанию (если ещё не сделано)
Альтернативный способ (ручная установка):
git clone https://github.com/ohmyzsh/ohmyzsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
Шаг 5: Установка плагинов
Создаём директорию для кастомных плагинов
mkdir -p ~/.oh-my-zsh/custom/plugins
zsh-autosuggestions — автодополнения на основе истории
git clone https://github.com/zsh-users/zsh-autosuggestions \
~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
zsh-syntax-highlighting — подсветка команд в реальном времени
git clone https://github.com/zsh-users/zsh-syntax-highlighting \
~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
zsh-history-enquirer — умный поиск по истории
git clone https://github.com/zthxxx/zsh-history-enquirer \
~/.oh-my-zsh/custom/plugins/zsh-history-enquirer
Jovial — плагин и тема (2 в 1)
git clone https://github.com/zthxxx/jovial \
~/.oh-my-zsh/custom/plugins/jovial
Шаг 6: Установка темы Jovial
Создаём симлинк темы:
mkdir -p ~/.oh-my-zsh/custom/themes
ln -sf ~/.oh-my-zsh/custom/plugins/jovial/jovial.zsh-theme \
~/.oh-my-zsh/custom/themes/jovial.zsh-theme
Шаг 7: Настройка .zshrc
Создаём резервную копию (если файл уже существует):
cp ~/.zshrc ~/.zshrc.backup
Открываем .zshrc в редакторе:
nano ~/.zshrc
# или
vim ~/.zshrc
Заменяем содержимое на следующее:
# === GUARD: выполнять только в zsh ===
[ -n "$ZSH_VERSION" ] || return
# === Oh-My-Zsh ===
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="jovial"
# === Плагины ===
# ВАЖНО: zsh-syntax-highlighting должен быть последним!
plugins=(
git
autojump
bgnotify
zsh-history-enquirer
zsh-autosuggestions
jovial
zsh-syntax-highlighting
)
source "$ZSH/oh-my-zsh.sh"
# === Настройки Jovial ===
typeset -g JOVIAL_EXEC_THRESHOLD_SECONDS=1
# === Терминал ===
export TERM="xterm-256color"
export COLORTERM="truecolor"
# === Локаль (для корректного отображения emoji) ===
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
# === Алиасы для eza (с безопасным fallback на ls) ===
if command -v eza >/dev/null 2>&1; then
alias ls='eza --icons=auto --group-directories-first --git'
alias ll='eza -l --icons=auto --group-directories-first --git'
alias la='eza -la --icons=auto --group-directories-first --git'
alias lt='eza --tree --level=2 --icons=auto'
alias lsize='eza -l --sort=size --icons=auto'
else
alias ls='ls --color=auto'
alias ll='ls -l --color=auto'
alias la='ls -la --color=auto'
fi
# === Алиасы для bat/batcat (с fallback на cat) ===
if command -v bat >/dev/null 2>&1; then
alias cat='bat --paging=never --style=plain'
elif command -v batcat >/dev/null 2>&1; then
alias cat='batcat --paging=never --style=plain'
fi
export BAT_PAGER="less -FR"
export BAT_THEME="ansi"
# === Контекстные "эмоции" стрелки Jovial ===
typeset -g JOV_ARROW_DEFAULT='%(?.(◕‿◕).(╥﹏╥%))'
typeset -g JOV_ARROW_KUBE='%(?.(\_(ツ)_/¯).(╥﹏╥%))'
typeset -g JOV_ARROW_CONT='%(?.(⌐■_■).(╥﹏╥%))'
autoload -Uz add-zsh-hook
typeset -g JOV_LAST_CMD_BASE=''
jov_store_last_cmd() {
local line="${2:-$1}"
emulate -L zsh -o extendedglob
line="${line##[[:space:]]##}"
local base="${line%%[[:space:]]*}"
if [[ "$base" == (sudo|doas) ]]; then
local rest="${line#*[[:space:]]}"
base="${rest%%[[:space:]]*}"
fi
JOV_LAST_CMD_BASE="$base"
}
preexec_functions=(${preexec_functions:#jov_store_last_cmd})
preexec_functions+=('jov_store_last_cmd')
jov_apply_context_face() {
local expr="$JOV_ARROW_DEFAULT"
case "$JOV_LAST_CMD_BASE" in
kubectl|k|helm) expr="$JOV_ARROW_KUBE" ;;
docker|docker-compose|podman|nerdctl) expr="$JOV_ARROW_CONT" ;;
*) expr="$JOV_ARROW_DEFAULT" ;;
esac
JOVIAL_SYMBOL[arrow]="$expr"
JOVIAL_SYMBOL[arrow.git-clean]="$expr"
JOVIAL_SYMBOL[arrow.git-dirty]="$expr"
}
precmd_functions=(${precmd_functions:#jov_apply_context_face})
precmd_functions+=('jov_apply_context_face')
# === Редакторы (опционально — настройте под себя) ===
export EDITOR="nano"
export VISUAL="nano"
# Если используете VS Code CLI:
# export EDITOR="code --wait --reuse-window"
# export VISUAL="code --wait --reuse-window"
Сохраняем и закрываем редактор (в nano: Ctrl+O, Enter, Ctrl+X).
Шаг 8: Применение изменений
Перезагружаем конфигурацию:
source ~/.zshrc
Или просто выходим и заходим заново:
exit
# Затем снова ssh/логин в систему
Шаг 9: Проверка работы
Проверяем shell:
echo $SHELL
# Ожидается: /usr/bin/zsh
Проверяем тему:
echo $ZSH_THEME
# Ожидается: jovial
Проверяем плагины:
# Начните вводить команду, которую уже использовали —
# должны появиться серые автодополнения (zsh-autosuggestions)
# Введите несуществующую команду — она подсветится красным
# (zsh-syntax-highlighting)
Проверяем алиасы:
ll # Должен показать красивый вывод с иконками (если установлен eza)
cat ~/.zshrc # Должен показать подсветку синтаксиса (если установлен bat)
Настройка VS Code Remote-SSH (опционально)
Если вы используете VS Code для подключения к серверу по SSH, нужно указать zsh как терминал по умолчанию.
В настройках VS Code (settings.json):
{
"terminal.integrated.profiles.linux": {
"zsh": {
"path": "/usr/bin/zsh",
"args": ["-l"]
}
},
"terminal.integrated.defaultProfile.linux": "zsh",
"terminal.integrated.inheritEnv": false
}
Почему важна первая строка в .zshrc:
[ -n "$ZSH_VERSION" ] || return
Эта строка-страж предотвращает выполнение .zshrc в bash, если VS Code случайно запустит bash вместо zsh. Без неё вы получите ошибки типа "Oh My Zsh can't be loaded from: bash".
Типичные проблемы и решения
Проблема 1: Ошибка "Oh My Zsh can't be loaded from: bash"
Причина: Bash пытается выполнить .zshrc
Решение:
- Убедитесь, что первая строка в
.zshrc:[ -n "$ZSH_VERSION" ] || return - Проверьте shell по умолчанию:
echo $SHELL - В VS Code выберите zsh в настройках терминала
Проблема 2: Не отображаются иконки и emoji
Причина: Отсутствует поддержка UTF-8 или нужен специальный шрифт
Решение:
# Проверьте локаль
echo $LC_ALL $LANG
# Установите UTF-8 локаль
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
# Добавьте эти строки в .zshrc
Для терминала установите Nerd Font (например, Fira Code Nerd Font, Hack Nerd Font).
Проблема 3: eza или bat не работают
Причина: Пакеты недоступны в репозитории или не установлены
Решение:
- Конфигурация уже содержит fallback на стандартные утилиты
- Можно установить вручную из GitHub releases
- Или просто использовать стандартные
lsиcat— они тоже будут работать
Проблема 4: Медленная загрузка shell
Причина: Слишком много плагинов или тяжёлые операции в .zshrc
Решение:
- Измерьте время загрузки:
time zsh -i -c exit - Отключите ненужные плагины в массиве
plugins=() - Используйте ленивую загрузку для редко используемых инструментов
Проблема 5: Автодополнения не работают
Причина: Плагин zsh-autosuggestions не загружен или конфликт
Решение:
# Проверьте наличие плагина
ls ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
# Убедитесь, что он в списке plugins=() в .zshrc
grep zsh-autosuggestions ~/.zshrc
# Перезагрузите конфигурацию
source ~/.zshrc
Обновление компонентов
Обновление Oh-My-Zsh
Oh-My-Zsh имеет встроенную команду обновления:
omz update
Или вручную:
cd ~/.oh-my-zsh
git pull origin master
Обновление плагинов
cd ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
git pull
cd ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
git pull
cd ~/.oh-my-zsh/custom/plugins/zsh-history-enquirer
git pull
cd ~/.oh-my-zsh/custom/plugins/jovial
git pull
# Обновляем симлинк темы (если изменилась)
ln -sf ~/.oh-my-zsh/custom/plugins/jovial/jovial.zsh-theme \
~/.oh-my-zsh/custom/themes/jovial.zsh-theme
Удаление (откат к bash)
Если решите вернуться к bash:
# Вернуть bash как shell по умолчанию
chsh -s /bin/bash
# Удалить Oh-My-Zsh
rm -rf ~/.oh-my-zsh
# Удалить конфигурацию (сохраните бэкап если нужно)
rm ~/.zshrc
# Восстановить старую конфигурацию
cp ~/.zshrc.backup ~/.zshrc
# Удалить пакеты (опционально)
sudo apt remove --purge zsh eza bat autojump
sudo apt autoremove
Дополнительные настройки
История команд
Добавьте в .zshrc для увеличения размера истории:
HISTFILE=~/.zsh_history
HISTSIZE=10000
SAVEHIST=10000
setopt SHARE_HISTORY # Общая история между сессиями
setopt HIST_IGNORE_DUPS # Игнорировать дубликаты
setopt HIST_FIND_NO_DUPS # Не показывать дубликаты при поиске
Полезные алиасы
# Быстрая навигация
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
# Git алиасы
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git push'
alias gl='git log --oneline --graph'
# Системные
alias update='sudo apt update && sudo apt upgrade -y'
alias ports='netstat -tulanp'
alias meminfo='free -m -l -t'
alias psgrep='ps aux | grep -v grep | grep -i -e VSZ -e'
# Docker
alias dps='docker ps'
alias dimg='docker images'
alias dlog='docker logs -f'
Включение case-insensitive автодополнений
# Добавьте в .zshrc
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
Заключение
Теперь у вас настроен современный, красивый и функциональный терминал с:
✅ Умными автодополнениями на основе истории
✅ Подсветкой синтаксиса в реальном времени
✅ Красивым промптом с контекстной информацией
✅ Современными утилитами для работы с файлами
✅ Гибкой системой плагинов и тем
Этот setup значительно повысит вашу продуктивность при работе в командной строке и сделает её более приятной визуально.
Полезные ссылки:
