LINUX.ORG.RU

Alacritty + Zellij: идеальное сочетание для терминала

 ,


2

3

Alacritty — быстрый и минималистичный терминальный эмулятор с поддержкой ускорения через GPU. Я попробовал много разных терминалов. Меня в принципе устраивал и Konsole, но он объективно подтормаживает и трудно кастомизируется. Из современных я пробовал Ghostty, Kitty, Wezterm, но у них всех недостатки. Они тянут слишком много зависимостей, а также запускают скрипты на Python или Lua. В Alacritty же нет ничего лишнего. И отдельно напишу, что он поддерживает более стабильный (как покосившийся сарай, который, тем не менее, падать не спешит) X.Org. Единственным его недостатком является отсутствие лигатур.

Установка

sudo pacman -S alacritty

Так же советую поставить темы для него:

sudo pacman -S alacritty-theme-git

Для этого должен быть добавлен репозиторий archlinuxcn. Также темы можно поставить из AUR.

Вручную:

git clone https://github.com/alacritty/alacritty-theme ~/.config/alacritty/themes

За быстроту приходиться платить отсутствием функционала. В этом эмуляторе терминала нет даже вкладок, поэтому потребуется мультиплексер — программа, которая может разделять экран, запуская в нём несколько сессий шелла. Обычно для этого используют tmux, но он всем давно приелся и не лишен недостатков, иначе бы не появился zellij. Ставим последний:

sudo pacman -S zellij

Если в дистрибутиве нет alacritty или zellij в репозиториях, то их можно поставить через стандартный пакетный менеджер Rust:

cargo install alacritty
cargo install zellij

Чтобы все работало, $PATH должен содержать путь до ~/.cargo/bin.

Настройка Alacritty

Создадим директорию для конфига:

mkdir -p ~/.config/alacritty

Пример конфига:

~/.config/alacritty/alacritty.toml

[general]
# тут указываем путь до темы
import = [
  "/usr/share/alacritty/themes/catppuccin_mocha.toml",
]

[window]
opacity = 0.96
startup_mode = "Windowed"
# у терминала можно отключить оформление, что может пригодиться любителям тайлинга
decorations = "Full"
dynamic_title = true

# Начальные размеры окна терминала при старте
[window.dimensions]
columns = 140
lines = 50

# Изменяем курсор
[cursor.style]
shape = "Beam"
blinking = "Always"

[scrolling]
# если у вас мало памяти, то уменьшите значение
history = 100000
multiplier = 3

[font]
size = 11.5

# Можно использовать свои шрифты для каждого варианта текста (normal, bold, italic)
[font.normal]
# Использовать лучше всего патченные Nerd-шрифты
family = "JetBrainsMono NF"

# Для лучшей поддержи прозрачности в vim и тп
[colors]
transparent_background_colors = true

[terminal.shell]
# Запускаем при старте терминала zellij, при этом используя последнюю сессию
program = "/usr/bin/bash"
args = [
  "-l",
  "-c",
  "zellij attach --index 0 || zellij",
]

Настройка Zellij

Создадим конфиг:

mkdir -p ~/.config/zellij
zellij setup --dump-config > ~/.config/zellij/config.kdl

Редактируем его:

vim ~/.config/zellij/config.kdl

Что изменить:

ui {
    pane_frames {
        // Можно скрыть название сессии
        hide_session_name true
        // Или сделать края рамок круглыми
        //rounded_corners true
    }
}

// ...
keybinds {
    normal {
        // uncomment this and adjust key if using copy_on_select=false
        // bind "Alt c" { Copy; }
    }
    locked {        
        // Эти клавиши не будут доступны в том же Vim
        bind "Ctrl g" { SwitchToMode "Normal"; }

        // Я бы добавил сочетания для прокрутки экрана, так как встроенные, используемые Alacritty, не будут работать (zellij перехватывает это событие)
        // PageUp/PageDown не работают ни с какими сочетаниями, а поэтому на них
        // лучше ничего не вешать
        bind "Ctrl Shift Up" { PageScrollUp; }
        bind "Ctrl Shift Down" { PageScrollDown; }
        bind "Ctrl Shift Home" { ScrollToTop; }
        bind "Ctrl Shift End" { ScrollToBottom; }  
    }
    // Остальное все дефолтным оставляем
}

// Стартуем в заблокированном режиме
default_mode "locked"

// Можно сменить тему
// Список встроенные тем: https://zellij.dev/documentation/theme-list.html
// Можно использовать "универсальную", использующую цвета теминала
theme "ansi"

// Если этот режим включен, то не работает вставка средней кнопкой мыши, а когда
// выключен — в Vim клик мыши не перемещает курсор
mouse_mode true

// Размер буфера прокрутки в строках. Приводит к увеличению используемой оперативной памяти
scroll_buffer_size 100000

// Kitty официально не поддерживает ни Tmux, ни Zellij. Совместимость с ним можно вырубить, если есть какие-то проблемы
support_kitty_keyboard_protocol true

// Если раздражают различные сообщения при запуске
show_release_notes false
show_startup_tips false

Как пользоваться Zellij?

При использовании настроек выше, вы стартуете в заблокированном режиме, когда ввод в терминал игнорируется. Чтобы перейти в нормальный режим (управления сессиями, интерфейсом), нажмите Ctrl-g. Чтобы разбить экран, нажимаем Ctrl-p, d. Между сплитами можно переключаться с помощью Alt и стрелок. Все доступные сочетания выведены на экран. Как только закончите, нажмите Ctrl-g чтобы начать работать с терминалом.

Zellij так же поддерживает сессии, между которыми можно переключаться… А так же, если вы просто закроете терминал (вместо exit или quit), то сессия сохранится, и процессы будут крутиться в фоновом режиме.

Пример команд:

zellij ls              # Список сессий
zellij attach -c work  # Создать/присоединиться к сессии
info zellij            # Справка

Настройка SSH

Так как по умолчанию переменная $TERM в alacritty содержит недопустимое значение с точки зрения удаленного сервера, то при запуске ssh могут не работать некоторые сочетания клавиш. Чтобы это исправить, добавьте в ~/.ssh/config:

Host *
  SetEnv TERM=xterm-256color

На сервере, как правило, нет terminfo для alacritty, поэтому сервер в ответ шлет escape-последовательности, которые alacritty понимает неправильно. Мы можем использовать способ выше либо скопировать terminfo на сервер:

# На хосте экспортируем файл terminfo
infocmp alacritty > alacritty.info

# Копируем его на удаленный сервер
scp alacritty.info user@server:/tmp/

# А затем устанавливаем на удаленном сервере
tic -x /tmp/alacritty.info

Полезные заметки

  • В Allacrity Vi-mode переключается сочетанием клавиш Ctrl + Alt + Space.
  • Через Ctrl + Shift + F можно искать текст на экране.
  • Все сочетания Alacritty перечислены здесь.
  • При использовании Zellij, сочетания Alacritty для прокрутки не работают. Как альтернативу можно использовать режим поиска: Ctrl-g, Ctrl-s, ↓/↑/j/k, Esc… или настройки выше
  • Сочетания с Ctrl можно переназанчить на Alt:
    # keybinds clear-defaults=true нужно чтобы дефолтные сочетания автоматом не дополнялись 
    sed -ri 's/Ctrl /Alt /; s/(keybinds)[^{]+/\1 clear-defaults=true /' ~/.config/zellij/config.kdl
    
★★★

Проверено: hobbit ()
Последнее исправление: dataman (всего исправлений: 21)
Ответ на: комментарий от Bad_ptr

Вот из-за сложности оперирования tmux у меня не прижился, неинтересно было выучивать кучу сочетаний. Только я стал использовать dvtm+abduco вместо сабжа.

Bfgeshka ★★★★★
()

Единственным его недостатком является отсутствие лигатур

Не очень понимаю, зачем в терминале с моноширинным шрифтом нужны лигатуры.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Чтобы всякие firacode склеивали == в единый длинный знак.

neumond ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.