👒

Ghosttyのconfig大公開

2024/12/30に公開

HashiCorpでTerraformやPackerを始め、数々のツールを開発してきたMitchell Hashimoto氏が開発したZig製ターミナルエミュレータGhosttyが先日v1.0.0でパブリックリリースされました。既存のターミナルの中で最高のものにするという謳い文句に惹かれ気になったので、1日かけて色々な機能を触ってみました。

Zero Configurationが特徴のうちの1つになっていますが、触っていく中で使い慣れた見た目やシェル、キーバインドにしたかったので、いくつか設定を施してみました。

configの紹介

すべての機能を試したわけではないのでまだ完成形ではないですが、1日触ってみた結果、現在の設定は以下のようになりました。
それぞれなぜその設定にしているか、これから紹介していきます。

shell-integration = bash

theme = xcodedarkhc

font-feature = -calt
font-feature = -dlig

keybind = ctrl+super+h=goto_split:left
keybind = ctrl+super+j=goto_split:bottom
keybind = ctrl+super+k=goto_split:top
keybind = ctrl+super+l=goto_split:right
keybind = alt+super+h=resize_split:left,30
keybind = alt+super+j=resize_split:down,30
keybind = alt+super+k=resize_split:up,30
keybind = alt+super+l=resize_split:right,30
keybind = ctrl+p=unbind
keybind = ctrl+n=unbind

mouse-hide-while-typing = true
mouse-scroll-multiplier = 2

cursor-opacity = 0.7
cursor-style = block
cursor-style-blink = false

unfocused-split-opacity = 0.825

fullscreen = true

window-inherit-working-directory = true

resize-overlay = never

shell-integration

既存で特定のシェルを使いたい場合、そのままではGhosttyのサブコマンドの補完等、Ghosttyとの連携がうまく動かない場合がありました。そこでこの設定で明示的にシェルを指定することで、ある程度の連携が可能となります。(デフォルト値がdetectなので、設定しなくても推測して連携してくれる場合もあります)

theme

背景色はなるべく暗くし(しかし完全な黒だとsplitの境界線と同化してしまうのでそれよりは明るめ)、色はつけつつもコントラストは控えめにしたかったのでxcodedarkhcを選択しました。

font-feature

フォントファミリはデフォルトのJetbrains Monoをそのまま使っています。ただし、特定の文字列で文字同士が結合するリガチャが有効になっていたので、オフにする設定を入れています。Jetbrains Monoの場合は、プログラム中にオフにする-caltとその他の一般的なシチュエーションでオフにする-dligを有効にしていますが、他のフォントファミリでは設定が異なる場合があるので注意が必要です。どの設定をオンオフすべきかは、FontDrop!にフォントファイルを読み込ませて試してみてください。フォントはリポジトリからDLできます。

keybind

surface間の移動やリサイズはGhostty標準のキーバインドを参考にしつつも、arrow keyが遠いのでVimのキーバインド風に設定を変更しました。
また、Vimを編集中にバッファを前後する際はctrl+p, ctrl+nで行っているのですが、効かなくなる(おそらくGhosttyのキーバインドに吸われている)挙動が見受けられたので、設定を無効化しました。

mouse-*

mouse-hide-while-typingはキーボード入力中にマウスを非表示にする設定です。再度マウス操作を行ったり、surfaceを移動したりするとマウスが表示されるようになります。
mouse-scroll-multiplierはGhostty上でスクロールする際のスピード倍率を変更できる機能です。標準だと遅く感じたので、2倍にしました。

cursor-*

cursor-opacityは文字通りカーソルの透過度を変更できる機能で、標準だと明るく感じたので、少し控えめに設定しました。
cursor-styleはカーソルの形を設定する機能で、blockが視認性的にちょうどよかったので採用しました。他にはbarunderline, block_hollowがあります。
一方で、点滅していると煩わしかったので、cursor-style-blinkfalseにしてオフにしました。

unfocused-split-opacity

注目しているsurface以外はデフォルトで結構暗くなってしまうように感じ、複数のsurfaceを同時に見ているときに不便だったので、注目しているsurfaceは把握しつつも、暗くなりすぎない設定にしました。

fullscreen

ターミナルは基本的に全画面表示で使うことが多いので、windowを開いたときに最初からフルスクリーンになる設定にしました。

window-inherit-working-directory

surfaceやwindow, tabを開いたときに直前までカーソルがあたっていた場所のディレクトリを引き継ぎたかったので、有効にしています。

resize-overlay

window起動時やリサイズ時に一瞬映るwindowサイズ情報は、特に自分にとって常に必要な値ではなかったので、オフにする設定にしました。

おまけ

Reference

Ghosttyの設定をする際にReferenceを参考にされてる方も多いんじゃないかと思うのですが、実はmanが非常に充実していて、手元でサクッとドキュメントを見たい時はすごく便利になっています。(さらにghostty(5)では設定ファイルの挙動についても解説されてる!)

Shader

なんとGhosttyにはカスタムシェーダが書ける機能が備わっています!ターミナルのレンダリング結果をシェーダの特定のチャンネルで受け取って、ポストエフェクトとして加工することが可能となっています。(需要があればシェーダーだけで1記事加工かな)

https://x.com/cia_rana/status/1873512825290887640

Discussion