Минималистичная конфигурация терминала с возможностью тонкой настройки

Мой терминал настроен очень минималистично. Это просто черный ящик, который сообщает мне полезную информацию. Основное удобство в том, что каждый его аспект имеет собственный файл конфигурации  —  даже сам эмулятор терминала. 

В этой статье я опишу настройку, которую оценят минималисты.

Содержание 

· Настройка оболочки: zsh
· Настройка терминала: alacritty
· Настройка мультиплексора: tmux
· Заключение

1. Настройка оболочки: zsh

Не так давно я перешел на zsh только потому, что теперь он используется в macOS по умолчанию. Мне очень понравилось то, насколько легко сделать красивое и информативное диалоговое окно с помощью Oh My Zsh.

Установка Oh My Zsh

Для установки вставьте в терминал следующий код:

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

По завершению будет создан файл конфигурации ~/.zshrc.

В этом файле есть множество настроек, которые можно активировать и отключать. Их мы здесь рассматривать не станем, так как они выходят за тему статьи.

В своем файле я сделал следующие изменения:

# Путь к месту установки oh-my-zsh
export ZSH="/Users/gloege/.oh-my-zsh"

# Тема zsh: https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="agnoster"

# Плагины omz
plugins=(web-search transfer osx tmux git)

# Открыть tmux при запуске, необходим плагин tmux
ZSH_TMUX_AUTOSTART=true

# oh-my-zsh.sh берет все файлы *.zsh из $ZSH_CUSTOM/custom
# - Я включаю: aliases.zsh, functions.zsh, prompt.zsh, ect.
source $ZSH/oh-my-zsh.sh

# prompt.zsh аугментирует диалоговое окно agnoster, удаляет #user@hostname
# должен запускаться в конце .zshrc
. ${ZSH_CUSTOM}/prompt.zsh

Эта конфигурация вносит следующие изменения.

  • Устанавливает ZSH_THEME как agnoster.
  • Загружает плагины, включенные с Oh My Zsh.
  • Автоматически запускает tmux.

Каждое из этих изменений описывается ниже.

Тема Oh My Zsh

Смена ZSH_THEME приведет к полному изменению внешнего вида диалогового окна. На выбор представлено огромное число разных тем. Можете посмотреть их на GitHub.

Я использую тему agnoster с удаленным username@hostname. Для этого приходится изменить prompt_context():

# Удаляет user@hostname из диалогового окна agnoster
prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)"
  fi
}

Чтобы сработало, этот код должен находиться в конце .zshrc.

Плагины Zsh

Oh My Zsh содержит кучу всяких плагинов для расширения терминала. Одна из их функций  —  предоставление полезных сокращений для часто используемых команд. Не все плагины загружаются по умолчанию, так как не все требуются для каждой конфигурации, а загрузка их чрезмерного количества просто излишне замедлит запуск.

Лично я загружаю следующие.

  • git → предоставляет полезные сокращения команд git.
  • transfer → упрощает использование transfer.sh.
  • tmux → позволяет tmux автоматически запускаться при открытии терминала.
  • osx → удобные сокращения команд.
  • web-search → позволяет использовать предпочтительный поисковый движок из командной строки, открывая его в браузере. Я им пользуюсь нечасто.

Автозапуск tmux

Плагин tmux предоставляет способ автозапуска tmux через добавление в .zshrc следующей строки:

# Открывает tmux при запуске, требует плагин tmux
ZSH_TMUX_AUTOSTART=true

2. Настройка терминала: alacritty

Alacritty  —  это эмулятор терминала с GPU-ускорением, который отличается высокой скоростью, портативностью и удобством настройки. На момент написания alacritty находится на бета-стадии. Хотя за время использования я особых багов в нем не встречал.

Установка

На macOS можете установить его с помощью homebrew.

brew install alacritty

Здесь находятся инструкции для других операционных систем.

Developer not verified

Если возникает сообщение об ошибке “Developer not verified”, перейдите в /Applications, кликните правой кнопкой alacritty.app, а затем левой по open.

Файл конфигурации

Alacritty допускает очень широкую настройку, чем выгодно отличается от популярного эмулятора терминала iTerm2.

По умолчанию alacritty не создает этот файл. В macOS программа сначала ищет файл конфигурации в ~/.config/alacritty/alacritty.yml.

За вас она этот файл не создает, но ищет таковой по следующим путям:

  1. $XDG_CONFIG_HOME/alacritty/alacritty.yml;
  2. $XDG_CONFIG_HOME/alacritty.yml;
  3. $HOME/.config/alacritty/alacritty.yml;
  4. $HOME/.alacritty.yml.

В Windows файл конфигурации должен располагаться в:

%APPDATA%\alacritty\alacritty.yml

Вот мой файл alacritty.yml с комментариями:

#
# Изменен 2021-06-28
#

env:
  # Это значение используется для установки переменной среды `$TERM` 
  # для каждого экземпляра Alacritty. Если он отсутствует, 
  # alacritty проверяет локальную базу данных terminfo и использует      
  # `alacritty` в случае его доступности, в противном случае   #задействуется `xterm- 256color`.
  TERM: xterm-256color

window:
  # Равномерно распределяет дополнительные отступы вокруг #содержимого терминала.
  padding:
    x: 10
    y: 10
  # Удаляет кнопки
  decorations: none
  # Открывает в полный экран 
  startup_mode: SimpleFullscreen
  # Dimensions, если не SimpleFullscreen
  dimensions:
    columns: 140
    lines: 38

# Делает фон немного прозрачным
background_opacity: 0.92

cursor:
  # Block Underline или Beam
  style: Block

font:
  normal:
    # При использовании темы zsh с powerline должен быть установлен #шрифт powerline
    family: Source Code Pro for Powerline   
  # Размер шрифта
  size: 17

  # Улучшенная отрисовка шрифта для mac
  use_thin_strokes: true

# Цвета (Hyper)
colors:
  # Цвета по умолчанию
  primary:
    background: '#000000'
    foreground: '#ffffff'
  cursor:
    text: '#F81CE5'
    cursor: '#ffffff'

  # Нормальные цвета
  normal:
    black:   '#000000'
    red:     '#fe0100'
    green:   '#00a600'
    yellow:  '#feff00'
    blue:    '#0066ff'
    magenta: '#cc00ff'
    cyan:    '#00ffff'
    white:   '#d0d0d0'

  # Яркие цвета
  bright:
    black:   '#808080'
    red:     '#fe0100'
    green:   '#00d900'
    yellow:  '#feff00'
    blue:    '#0066ff'
    magenta: '#cc00ff'
    cyan:    '#00ffff'
    white:   '#FFFFFF'

selection:
  # Эта строка содержит все символы, используемые в качестве #разделителей для "semantic words" в Alacritty.
  semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"

  # Когда true, выбранный текст будет скопирован в основной буфер #обмена
  save_to_clipboard: true

# Login shell с аргументами
shell:
  program: /bin/zsh
  args:
    - --login

# Директория запуска, unset или None для домашней директории
working_directory: None

Здесь мы затронули самую малость из всех доступных настроек alacritty. Со всеми ними можно ознакомиться на GitHub.

Из основного я меняю цветовую схему и шрифт.

Изменение цветовой схемы

Список доступных цветовых схем можно найти на GitHub. Просто измените часть конфигурации на предпочтительные настройки.

Изменение семейства шрифтов

Если вы используете тему zsh с powerlines, например agnoster, то вам потребуется шрифт powerline. Я предпочитаю Source Code Pro for Powerline.

Шрифты Powerline

Для установки следуйте инструкциям с GitHub.

3. Настройка мультиплексора: tmux

Мультиплексор важен при использовании alacritty, поскольку терминал не допускает применения вкладок, и вы даже не сможете открыть другое окно, не добавив привязку клавиши в файле конфигурации. Это вынуждает меня работать с множеством открытых окон, не имея панели вкладок, напоминающей браузер.

В случае с мультиплексорами есть два варианта: screen и tmux. Я склоняюсь к последнему. Однако некоторые из его начальных настроек, на мой взгляд, дурацкие.

Файл конфигурации tmux должен находиться здесь: ~/.tmux.conf.

Можете создать пустой файл, если такой еще не существует.

​​touch​​ ​​~/.tmux.conf

Вот моя конфигурация .tmux.conf с комментариями:

#
# На основе файлов конфигурации Хэма Вокке и milosz:
# https://www.hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/
# https://sleeplessbeastie.eu/2016/08/22/how-to-create-basic-tmux-setup/
#
# Последнее обновление: 2021-06-28
#

# Переназначение привязки клавиш с 'Ctrl-b' на 'Ctrl-a'
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix

# Установка типа терминала по умолчанию
set -g default-terminal "screen-256color"

# Извлечение конфигурации через C-a + r
bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded"

# Открыть конфигурацию через C-a затем shift+M
bind-key M split-window -h "vim ~/.tmux.conf"

# Активация режима с мышью (>tmux 2.1)
# кликабельные окна, панели, при этом размер панелей можно менять
set -g mouse on

# Начало отсчета окон и панелей с 1 
set -g base-index 1
set-window-option -g pane-base-index 1

# Не переименовывать окна автоматически
set-option -g allow-rename off

# Разделить панели вертикально с помощью | 
# Разделить панели горизонтально с помощью  -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %

# Выбор панелей в стиле Vim
bind h select-pane -L
bind l select-pane -R
bind k select-pane -U
bind j select-pane -D 

# Переключение панелей с помощью Alt-стрелка без приставки
# M - это мета-клавиша, в macOS обычно alt
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Shift стрелка для смены окон
bind -n S-Left  previous-window
bind -n S-Right next-window

# Отключить все звуки колокольчика
set -g visual-activity off
set -g visual-bell off
set -g visual-silence off
setw -g monitor-activity off
set -g bell-action none
 
# Панель состояния
# цвета xterm   : https://jonasjacek.github.io/colors/
# формат strftime : https://devhints.io/datetime
set -g status-position bottom
set -g status-style 'bg=colour235 fg=colour255'
set -g status-left "  "
set -g status-right "#[bg=colour235,fg=colour255] %a %b %e #[bg=colour235,fg=colour255] %H:%M:%S  "
set -g status-right-length 50
set -g status-left-length 50

# Цвета панелей
set -g pane-border-style 'bg=default fg=colour19'
set -g pane-active-border-style 'bg=default fg=colour172'

# Стилизация сообщений
set -g message-style 'fg=colour255 bg=colour62'

tmux допускает очень много настроек.

Caps lock → control

В tmux клавишу Control мы используем часто. Она расположена в неудобном месте, поэтому я переназначил ее на Caps Lock. В MacOS это делается так.

  1. Открыть “System Preferences”.
  2. Кликнуть “Keyboard”.
  3. Кликнуть “Modifier Keys…” в правом нижнем углу.
  4. С помощью выпадающего окна переназначить “caps lock” на “control”.

Заключение

Эта конфигурация:

  • минималистична;
  • эстетически привлекательна;
  • информативна, так как предоставляет всю необходимую информацию о состоянии;
  • поддается настройке через файлы конфигурации.

Надеюсь, что на основе этого вы сможете самостоятельно освоить простую и минималистичную настройку терминала.

Читайте также:

Читайте нас в Telegram, VK и Яндекс.Дзен


Перевод статьи Luke Gloege, Ph.D.: A Minimal and Configurable Terminal Setup

Предыдущая статьяТоп-15 лайфхаков для работы с Python
Следующая статьяКак разработать систему для 100 миллионов пользователей: руководство для начинающих