Ghosttyのconfig大公開
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
が視認性的にちょうどよかったので採用しました。他にはbar
やunderline
, block_hollow
があります。
一方で、点滅していると煩わしかったので、cursor-style-blink
をfalse
にしてオフにしました。
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記事加工かな)
Discussion