Термінал мрії на Apple: Гайд з налаштування Ghostty, tmux та oh-my-zsh
Якщо ти проводиш у терміналі більше часу, ніж у браузері, стандартних інструментів macOS швидко стає замало. На Apple M1 з його архітектурою Darwin_arm64 ми маємо колосальну продуктивність, і гріх цим не скористатися, щоб зібрати ідеальне, блискавичне та зручне робоче середовище.
Сьогодні розберемо мій сетап: Ghostty + tmux + oh-my-zsh.
Навіщо потрібні ці утиліти і який профіт вони дають?
Ghostty: Це сучасний, неймовірно швидкий емулятор термінала, який рендериться на GPU. Він миттєво відгукується на введення, підтримує сучасні стандарти і не жере пам'ять, як додатки на Electron. Профіт — нульова затримка (latency) і приємний мінімалізм.
Oh My Zsh: Це фреймворк для управління конфігурацією оболонки Zsh. Профіт — замість того, щоб писати сотні рядків коду для автодоповнення, підсвічування синтаксису чи красивого рядка (prompt), ти просто підключаєш готові плагіни. Це робить роботу в консолі візуально зрозумілою та швидкою.
Tmux: Термінальний мультиплексор. Він дозволяє ділити одне вікно на багато панелей і вкладок. Але головний профіт — сесії. Ти можеш закрити Ghostty, перезавантажити графічну оболонку, потім відкрити термінал, написати
tmux attach— і всі твої запущені сервери, відкриті файли в Neovim та логи залишаться на тих самих місцях. (Про тонкощі компіляції його плагінів поговоримо в наступних частинах).
Давай почнемо з базового фундаменту — налаштування Zsh.
Крок 1: Встановлення Homebrew
Homebrew — це менеджер пакетів для macOS. Без нього нікуди. Відкрий свій термінал і виконай команду:
Bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Після встановлення потрібно додати його до змінної PATH (заміни [username] на своє ім'я користувача, наприклад muntai):
Bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/[username]/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
Крок 2: Встановлення Git
Якщо Git ще не встановлено, додаємо його через Brew:
Bash
brew install git
Крок 3: Встановлення Oh My Zsh
Запускаємо офіційний скрипт встановлення. Він автоматично зробить Zsh твоєю оболонкою за замовчуванням:
Bash
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Крок 4: Тема PowerLevel10K та шрифти
PowerLevel10K — це найшвидша і найінформативніша тема для Zsh. Встановлюємо її:
Bash
git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
Важливо: Щоб іконки (гілки git, логотипи директорій) відображалися коректно, тобі потрібен шрифт Meslo Nerd Font. Зазвичай під час першого запуску PowerLevel10K він сам запропонує його завантажити — просто натисни
y, дочекайся встановлення і перезапусти Ghostty.
Після перезапуску термінала введи p10k configure і пройди простий візард, вибираючи вигляд рядка, який тобі найбільше подобається.
Крок 5: Встановлення плагінів
Щоб термінал підказував команди з історії та підсвічував правильний синтаксис (зеленим — існуючі команди, червоним — помилки), встановимо два мастхев-плагіни:
Bash
# Автодоповнення
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
# Підсвічування синтаксису
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
Крок 6: Ідеальний конфіг .zshrc
Тепер зберемо все до купи. Відкрий файл ~/.zshrc у своєму улюбленому редакторі (наприклад, Neovim) і повністю заміни його вміст на цей оптимізований конфіг.
Тут уже прописані правильні шляхи для Apple Silicon (/opt/homebrew/bin), підключені плагіни та сучасні утиліти на кшталт eza (заміна ls), zoxide (розумний cd) та atuin (просунута історія команд).
Bash
# 1. Powerlevel10k Instant Prompt
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# 2. Oh My Zsh Config
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
# Плагіни
plugins=(git zsh-autosuggestions zsh-syntax-highlighting copypath web-search)
source $ZSH/oh-my-zsh.sh
# 3. Змінні оточення та шляхи (Оптимізовано)
export TERM=xterm-256color
export COLORTERM=truecolor
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# КРИТИЧНИЙ БЛОК: Ставимо Homebrew вперед, щоб усі утиліти (tree-sitter тощо) знаходилися відразу
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
# Інші шляхи
export PATH="/opt/homebrew/opt/postgresql@18/bin:$PATH"
export PATH="/opt/homebrew/opt/ruby/bin:$PATH"
export PATH="/opt/local/bin:$PATH"
export PATH="$HOME/.lmstudio/bin:$PATH"
export PATH="$HOME/.local/bin:$PATH"
# pnpm
export PNPM_HOME="/Users/muntai/Library/pnpm"
export PATH="$PNPM_HOME:$PATH"
# 4. Аліаси
alias vim="nvim"
alias reload-zsh="source ~/.zshrc"
alias edit-zsh="nvim ~/.zshrc"
alias python="python3"
alias pip="pip3"
# --- Покращені аліаси для eza (заміна ls/ll/la) ---
alias ls="eza --icons=always --group-directories-first"
alias ll="eza -l --icons=always --group-directories-first --git"
alias la="eza -la --icons=always --group-directories-first --git"
alias lt="eza -T -L 3 --icons=always --group-directories-first"
alias lzd="lazydocker"
# 5. Функції
# Yazi (файловий менеджер)
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
# 6. Історія команд
HISTFILE=$HOME/.zhistory
SAVEHIST=1000
HISTSIZE=999
setopt share_history
setopt hist_expire_dups_first
setopt hist_ignore_dups
setopt hist_verify
# 7. Інтеграції (Atuin, Zoxide)
# Atuin
[ -s "$HOME/.atuin/bin/env" ] && \. "$HOME/.atuin/bin/env"
eval "$(atuin init zsh)"
# Zoxide
eval "$(zoxide init zsh)"
# 8. Фінальна ініціалізація теми
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
Після збереження файлу виконай команду source ~/.zshrc.
Крок 7: Налаштування Ghostty (Естетика та швидкість)
Тепер перейдемо до самого серця нашого термінала — конфігураційного файлу Ghostty. Оскільки це нативний додаток, ми можемо витиснути з нього максимум візуального кайфу та зручності.
Відкриваємо конфіг (зазвичай це ~/.config/ghostty/config) і додаємо туди такі налаштування:
1. Шрифти та робота з текстом
Ghostty має неймовірний рендеринг шрифтів. Для розробки на TypeScript та Next.js ідеально підходить JetBrains Mono.
font-family = "JetBrainsMono Nerd Font"таfont-size = 13.5: Задаємо базовий шрифт з підтримкою іконок (Nerd Font).font-thicken = true: Робить шрифти трохи більш "маківськими" та згладженими.copy-on-select = true: Економить купу часу — просто виділив текст, і він уже в системному буфері обміну.link-url = true: Робить URL-посилання клікабельними (черезCmd+ клік).macos-option-as-alt = true: Дозволяє використовувати клавішуOptionякAlt, що критично важливо для гарячих клавіш у терміналі.
2. Тема та кольори
theme = "Catppuccin Mocha": У Ghostty вшиті сотні тем, але ми обираємо Catppuccin. Вона ідеально гармоніює з нашими майбутніми налаштуваннями tmux та Neovim, створюючи єдиний візуальний стиль усього робочого середовища.
3. Естетика вікна (Стиль macOS)
Термінал має виглядати сучасно, а не як вікно з 90-х.
background-opacity = 0.95таbackground-blur-radius = 20: Створюють той самий преміальний ефект "матового скла" (blur), який розкішно виглядає на екранах Mac.window-padding-x = 10таwindow-padding-y = 10: Додають внутрішні відступи. Код більше не прилипає до країв вікна, йому є чим "дихати".
4. Курсор та миша
cursor-style = blockтаcursor-style-blink = false: Ставимо класичний блочний курсор і вимикаємо його блимання. Це абсолютно не відволікає під час вдумливого читання коду чи логів.cursor-click-to-move = true: Забезпечує плавну анімацію курсора під час перемикання.mouse-hide-while-typing = true: Щойно ти починаєш набирати код, курсор миші зникає, щоб не перекривати текст. Дрібниця, але дуже продумана.
5. Поведінка та Гарячі клавіші (Keybinds)
Ghostty дозволяє дуже гнучко налаштовувати бінди під себе.
window-save-state = always: Термінал запам'ятовує розмір та положення вікна на екрані при закритті.confirm-close-surface = false: Вимикає набридливе підтвердження при закритті вікна (від випадкових втрат даних нас усе одно страхують сесії tmux).
Бінди для швидкої навігації:
keybind = cmd+t=new_tab— миттєве створення нової вкладки.keybind = cmd+w=close_surface— швидке закриття активної вкладки.keybind = cmd+shift+h=previous_tabтаkeybind = cmd+shift+l=next_tab— перемикання між вкладками в стилі Vim (за допомогою клавішhтаl).keybind = cmd+k=clear_screen— швидке очищення екрана. Рятує, коли вивід компілятора Next.js стає занадто довгим.
config.ghosty:
# ==========================================
# Шрифти та текст
# ==========================================
# Ghostty неймовірно круто рендерит шрифти. JetBrains Mono - топ для Next.js та TypeScript.
font-family = "JetBrainsMono Nerd Font"
font-size = 13.5
# Робить шрифти трохи більш "маківськими" і гладкими
font-thicken = true
# Автоматичне копіювання виділеного тексту до системного буфера
copy-on-select = true
# Дозволяє Ghostty коректно обробляти URL-посилання (можна кликати на них з Cmd)
link-url = true
# Відключаємо дратівливий системний звук при помилках
macos-option-as-alt = true
# ==========================================
# Тема та кольори
# ==========================================
# У Ghostty вбудовані сотні тем. Ставимо ту ж, що й у твоєму tmux, для ідеальної гармонії!
theme = "Catppuccin Mocha"
# ==========================================
# Зовнішній вигляд вікна (Естетика macOS)
# ==========================================
# Забираємо стандартну верхню рамку з назвою вікна. Залишаться лише "світлофори" закриття.
# macos-titlebar-style = hidden
# Робимо легку напівпрозорість
background-opacity = 0.95
# Додаємо ефект "матового скла" (блюр, працює тільки на macOS)
background-blur-radius = 20
# Внутрішні відступи, щоб текст не прилипав до країв вікна
window-padding-x = 10
window-padding-y = 10
# ==========================================
# Курсор та миша
# ==========================================
# Класичний блоковий курсор, не блимає (не відволікає під час читання коду)
cursor-style = block
cursor-style-blink = false
# Плавна анімація курсора при перемиканні
cursor-click-to-move = true
# Приховуємо курсор миші, коли починаєш друкувати
mouse-hide-while-typing = true
# ==========================================
# Поведінка
# ==========================================
# Запам'ятовувати розмір та положення вікна під час закриття
window-save-state = always
# Підтвердження при закритті вікна (щоб випадково не вбити сесію, хоча tmux нас врятує)
confirm-close-surface = false
# Швидкий перехід до створення нової вкладки
keybind = cmd+t=new_tab
# Швидке закриття
keybind = cmd + w = close_surface
# Перемикання між вкладками
keybind = cmd+shift+h=previous_tab
keybind = cmd+shift+l=next_tab
# Швидке очищення логів у поточному терміналі
keybind = cmd+k=clear_screen
