😺

GPUベースのターミナルKittyをmacOS用に使いやすく設定する

2021/07/21に公開

はじめに

kittyは高速に動き、機能が豊富で、クロスプラットフォームに対応しているGPUベースのターミナルエミュレーターです。
非常に動作が軽く、Zoomなどの重いアプリが起動していてiTerm2ではもっさりする場合でもKittyなら軽快に動作します。
また同じGPUベースのターミナルエミュレーターとしてAlacrittyがありますが、日本語IME関連のバグ(もうすぐ解消されそうな気配がありますが)があったり、ターミナルレベルの画面分割やタブに対応していないなどの問題点があり、Kittyはこれらの点を解決しています。
本記事では、このKittyをmacOSで使いやすく設定する方法を紹介します。

この記事を読むと以下の設定を行うことができます。

  • iTerm2のようにホットキー(ショートカット)で全画面ターミナルを表示/非表示
  • ターミナルを透過
  • cmd+dで画面分割、cmd+tで新規タブ、cmd+wでWindowを閉じる
  • Icebergインスパイアの美しいカラーテーマ

demo

クイックスタート

とりあえず設定したいという方は、以下で設定することができます。

kittyをインストール

brew install --cask kitty

ホットキーでターミナルを表示/非表示するために利用する、Hammerspoonをインストール

brew install --cask hammerspoon

Kittyの設定ファイル~/.config/kitty/kitty.conf~/.config/kitty/macos-launch-services-cmdlineを作成

kitty.conf
font_size 13.5

cursor #c7c7c7
cursor_text_color #FEFFFF

foreground #D1D2D3
background #16171E

#: black
color0 #000000
color8 #676767

#: red
color1 #E68E8E
color9 #FF6D67

#: green
color2  #83AC8E
color10 #5FF967

#: yellow
color3  #F5B78A
color11 #FEFB67

#: blue
color4  #9BB8DC
color12 #6871FF

#: magenta
color5  #BAACE2
color13 #FF76FF

#: cyan
color6  #00C5C7
color14 #5FFDFF

#: white
color7  #C7C7C7
color15 #FEFFFF

background_opacity 0.8

scrollback_lines 10000

enabled_layouts Grid

tab_bar_edge top
tab_bar_style powerline
tab_powerline_style angled
tab_title_template " {index}: {'{: <501}'.format(title)}"

kitty_mod cmd
map kitty_mod+d new_window_with_cwd
map kitty_mod+t new_tab_with_cwd
map kitty_mod+w close_window

macos_option_as_alt yes
macos_quit_when_last_window_closed yes
macos_traditional_fullscreen yes

confirm_os_window_close 0
macos-launch-services-cmdline
--start-as=fullscreen

もしくは、kitty.confmacos-launch-services-cmdline

Hammerspoonの設定ファイル~/.hammerspoon/init.luaを作成

init.lua
hs.hotkey.bind({"ctrl"}, "t", function()
    local kitty = hs.application.get("kitty")
    if kitty == nil then
        hs.application.launchOrFocus("/Applications/kitty.app")
    elseif kitty:isFrontmost() then
        kitty:hide()
    else
        local space = hs.spaces.focusedSpace()
        local win = kitty:focusedWindow()
        hs.spaces.moveWindowToSpace(win, space)
        win:focus()
    end
end)

もしくは、init.lua

この後、Hammerspoonの設定を再読み込みする必要があるかもしれません。(GUIのアプリから行うことができます)

以上で設定は終了で、ctrl+tでターミナルの表示/非表示、cmd+dで画面分割、cmd+tで新規タブ作成、cmd+wでWindowの終了を行うことができます。

Kittyの設定

ここではKittyの設定について詳しく見ていきます。

インストール

KittyはHomebrewのcaskでインストールすることができます。

brew install --cask kitty

設定ファイル

基本的に設定ファイルについてはすべてこちらに記載されています。

まず~/.config/kitty/kitty.confを作成します。既にデフォルトで生成された設定ファイルがあるかもしれません。

次に設定する項目について一つずつ見ていきます。

フォントサイズ

フォントサイズを設定します。

font_size 13.5

カラーテーマ

Icebergインスパイアのカラーテーマを設定します。

cursor #c7c7c7
cursor_text_color #FEFFFF

foreground #D1D2D3
background #16171E

#: black
color0 #000000
color8 #676767

#: red
color1 #E68E8E
color9 #FF6D67

#: green
color2  #83AC8E
color10 #5FF967

#: yellow
color3  #F5B78A
color11 #FEFB67

#: blue
color4  #9BB8DC
color12 #6871FF

#: magenta
color5  #BAACE2
color13 #FF76FF

#: cyan
color6  #00C5C7
color14 #5FFDFF

#: white
color7  #C7C7C7
color15 #FEFFFF

画面の透過

画面の透過率を設定します。

background_opacity 0.8

スクロールバックサイズ

スクロールバックサイズを設定します。

scrollback_lines 10000

画面分割

画面分割方法を設定します。
Kittyは画面分割方法が特殊で、ユーザーが縦分割や横分割を指定するのではなく、ユーザーが画面分割をするたびに、アプリ側が設定に沿って縦分割か横分割かを自動で判断します。
本記事では、筆者が最も直感的にだった分割方法を採用していますが、もし使いづらい場合はこちらに全ての分割方法が記載されています。

enabled_layouts Grid

タブ

タブの見た目を設定します。

tab_bar_edge top
tab_bar_style powerline
tab_powerline_style angled
tab_title_template " {index}: {'{: <501}'.format(title)}"

Kittyではタブの横幅が、タブの内容によってインタラクティブに変化します。
つまり、コマンドを実行したりディレクトリを移動するたびに、タブの横幅が変化してしまうということであり、これがかなり気になってしまいました。
これを解決するため、タブの内容のテンプレートを設定するtab_title_templateで右に空白を表示することで、常にタブの横幅が最大になるように設定しました。
もしタブの横幅の変化が気にならないなら、tab_title_template " {index}: {title}"と設定することで、より表示をシンプルにすることができます。

ショートカット

ショートカットを設定します。

kitty_mod cmd
map kitty_mod+d new_window_with_cwd
map kitty_mod+t new_tab_with_cwd
map kitty_mod+w close_window

上記の設定では、新しいWindow(分割)やタブを生成するときに、元のディレクトリを引き継ぐようになっています。
もしこの設定が不要ならばnew_window_with_cwdnew_tab_with_cwdの代わりにnew_windownew_tabを使うことができます。

macOS固有の設定

macOS向けの設定を行います。

macos_option_as_alt yes
macos_quit_when_last_window_closed yes
macos_traditional_fullscreen yes

macos_traditional_fullscreenは必須ですが、macos_option_as_alt(optionをaltとして扱う)とmacos_quit_when_last_window_closed(最後のシェルが終了したときにKittyも終了する)は任意です。

シャットダウン時の確認

シャットダウン時の確認の設定を行います。

confirm_os_window_close 0

上記の設定がない場合は、シャットダウンや再起動のときにKittyが起動していると、Kittyを終了するかどうかの確認が入ります。この確認をなくし、シャットダウンなどのときに自動でKittyを終了するためには、上記の設定が必要です。

最後に以下の内容の設定ファイル~/.config/kitty/macos-launch-services-cmdlineを作成します。

macos-launch-services-cmdline
--start-as=fullscreen

Hammerspoonの設定

HammerspoonはmacOSで自動化を行うためのツールであり、本記事ではKittyをホットキーで表示/非表示するために利用します。

インストール

HammerspoonはHomebrewのcaskでインストールすることができます。

brew install --cask hammerspoon

設定ファイル

Hammerspoonの設定ファイル~/.hammerspoon/init.luaを作成します。
ctrl+tでKittyを表示/非表示します。

init.lua
hs.hotkey.bind({"ctrl"}, "t", function()
    local kitty = hs.application.get("kitty")
    if kitty == nil then
        hs.application.launchOrFocus("/Applications/kitty.app")
    elseif kitty:isFrontmost() then
        kitty:hide()
    else
        local space = hs.spaces.focusedSpace()
        local win = kitty:focusedWindow()
        hs.spaces.moveWindowToSpace(win, space)
        win:focus()
    end
end)

この関数ではKittyのプロセスを取得し、最前面にあるなら非表示にし、それ以外なら最前面に表示します。
また、hs.hotkey.bindの第1引数、第2引数を変更することでホットキーを変更することができます。

設定ファイルを作成した後に、設定を再読み込みする必要がある可能性があります。
これはHammerspoonのアプリアイコンをクリックすることで起動できるHammerspoon Consoleの右上のReload configから行うことができます。

おわりに

本記事では、GPUベースのターミナルKittyをmacOS用に使いやすく設定する方法を紹介しました。
Kittyは画像を表示することができるなど、他にも様々な機能があるので是非ホームページで確認してみてください。

GitHubで編集を提案

Discussion