4 分で読了 #tools

Ghostty

メインのターミナル。設定ファイルは10行程度に収まっている。外観に関わる部分はすべて委譲しているからだ。ウィンドウの角丸、ボーダー、ぼかし、移動やリサイズは Hyprland に、配色は matugen に任せている。Ghostty には文字を描画する領域だけが残る。高速で GPU レンダリングを行い、設定は純粋な key = value 形式である。これだけで十分だ。

background-opacity = 0.92      # 半透明。ぼかしはコンポジットに任せる
background-blur = false        # 自身でぼかしをかけると、二重にかかって灰色になる
theme = MaterialYou            # matugen が生成したテーマを指す
window-decoration = none       # タイトルバーを消し、純粋なコンテンツのみ表示
gtk-titlebar = false

2点ほど触れておく。1つ目は透明度とぼかしは分離すべきだということだ。ウィンドウを半透明にすることで背景色を透けさせ、ぼかしはコンポジット側で一度だけ適用する。両方で適用すると、全体が灰色に溶けてしまう。2つ目は、配色の設定は静的ではないということだ。壁紙を変更すると、matugen はテーマファイルを書き換えるだけでなく、開いているすべてのターミナルに対して OSC シーケンスを送信して即座に色を変更する。ウィンドウを再起動する必要はない(詳細は matugen の記事を参照)。

タイトルバーを消すとウィンドウが裸同然になるが、Hyprland によって角丸とボーダーが追加され、SUPER+ドラッグ で移動できるため、全体としてテーマに溶け込んだように見える。タブ機能は Ghostty 標準のものを使わず、Zellij に委ねている。

なぜ Ghostty なのか。 Zig で書かれており GPU レンダリングを採用しているため、スクロールや大量の出力でも滑らかに動作する。しかし、私がこれを選んだ最大の理由は「デフォルトが正しい」ことだ。箱から出してすぐに正しいリガチャ、Unicode 全角文字の処理、kitty グラフィックプロトコル、適切な選択範囲の挙動が使える。他のターミナルのように、使えるようになるまで長時間設定する必要がない。設定は純粋な key = value 形式で、学ぶべき DSL はない。Linux/macOS でネイティブに動作し(それぞれプラットフォーム固有のウィンドウ/フォントスタックを使用)、Electron を被せたものではない。

シェルインテグレーションは特別に有効にする価値がある。 Ghostty は自動的にシェルインテグレーション(zsh/bash/fish)を注入し、それによって以下のような実用的な機能が追加される。各コマンドのプロンプト境界をマークするため、「前/次のコマンドの出力にジャンプ」できる。現在の作業ディレクトリ(cwd)を自動報告するため、新しいウィンドウや分割で開いた際に即座に現在のディレクトリに移動できる。コマンドの実行完了時に終了コードに基づいて通知を行う。これらは自分で設定する必要がなく、インストールするだけで使える。「外観を委譲し、自分は文字を描くだけ」という方針と一致している。機能はプロトコルとデフォルト設定から得られ、設定ファイルは短いに越したことはない。

フォントには JetBrains Mono を使用している。エディタや WezTerm と同じフォントセットを採用し、ターミナル間で視覚的な統一感を持たせている。