Термінал мрії на Apple: Повний гайд з налаштування Ghostty, tmux та oh-my-zsh

Термінал мрії на Apple: Повний гайд з налаштування Ghostty, tmux та oh-my-zsh

Термінал мрії на 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

Напишіть мені
Будь ласка, заповніть форму нижче, щоб розпочати спілкування зі мною.

Цей сайт захищено reCAPTCHA. Застосовуються Політика конфіденційності та Умови використання Google.