Мой терминал настроен очень минималистично. Это просто черный ящик, который сообщает мне полезную информацию. Основное удобство в том, что каждый его аспект имеет собственный файл конфигурации — даже сам эмулятор терминала.
В этой статье я опишу настройку, которую оценят минималисты.
Содержание
· Настройка оболочки: 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
.
За вас она этот файл не создает, но ищет таковой по следующим путям:
$XDG_CONFIG_HOME/alacritty/alacritty.yml
;$XDG_CONFIG_HOME/alacritty.yml
;$HOME/.config/alacritty/alacritty.yml
;$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 это делается так.
- Открыть “System Preferences”.
- Кликнуть “Keyboard”.
- Кликнуть “Modifier Keys…” в правом нижнем углу.
- С помощью выпадающего окна переназначить “caps lock” на “control”.
Заключение
Эта конфигурация:
- минималистична;
- эстетически привлекательна;
- информативна, так как предоставляет всю необходимую информацию о состоянии;
- поддается настройке через файлы конфигурации.
Надеюсь, что на основе этого вы сможете самостоятельно освоить простую и минималистичную настройку терминала.
Читайте также:
- Введение в сетки в цифровом дизайне
- 8 мощных пакетов NPM для любого веб-разработчика
- Парсинг HTML из строки на Ruby On Rails
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Luke Gloege, Ph.D.: A Minimal and Configurable Terminal Setup