気になったのでGhostty入れてみた[Mac]

みなさんターミナル何を使ってますか?

今までweztermを使っていたのですが、ここ最近Ghosttyの話題をよく見かけるので使ってみました。

# Terminal関連の記事

https://qiita.com/maooz4426/items/cd1b15a38f4bf166b8f8

https://qiita.com/maooz4426/items/824c4a3edfd5d6722d04


# Ghosttyとは
Ghosttyは、Zigで作成されたターミナルエミュレーターです。

https://ghostty.org/

:::note
### Zigとは
静的型付けコンパイル言語です。
C言語にあった問題を解決しつつ、C言語を踏襲したような特徴を持つそうです。

:::


:::note
### ターミナルエミュレーターとは
標準で搭載されているターミナルと同等に動くソフトウェアのことを指します。
:::

特徴としては、
- 動作速度の速さ
- 豊富な機能
- クロスプラットフォームで動作

の3点にあります。

特にどの紹介記事でも豊富な機能があり、尚且つその設定が楽(行数が短い)というのにかなり特徴的そうという印象を受けました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/cebfc856-034b-142e-ce81-bf93f5ad2e42.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/effe614d-ed78-cd29-1b90-fbda1a71792e.png)

>starshipでデザインが少しいじられてる部分があります

# インストール

インストールはdmgでやる方法とhomebrewを使う2種類存在します。

https://ghostty.org/download

今回はhomebrewで行ってみました。

```zsh:zsh
brew install --cask ghostty
```

# 基本キーバインド

キーバインドは下のようになっています。


|キーバインド|内容|
|---|---|
|⌘+T|新規タブ作成|
|`⌘+shift+[` or `⌘+shift+]`|タブを移動|
|⌘+D|横にスプリット|
|⇧+⌘+D|縦にスプリット|
|`⌘+[` or `⌘+]`|スプリットを移動|
|⇧+⌘+↵|スプリットをズーム、ズームアウト|
|option+click|クリックしたところにカーソルを合わせられます

# 色々設定してみる

Macの場合は下のパスに設定ファイルが作成されます。

`~/Library/Application\ Support/com.mitchellh.ghostty/config`

しかし初期状態だと見当たらなかったのですが、タブから`ghostty`の`settings`を開くと設定ファイルが作成されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/e81c6e6c-ec42-e859-3d14-99c360d756aa.png)

一旦テーマを設定してみようと思います。

下のコマンドでテーマを確認できます。
```zsh:zsh
ghostty +list-themes
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/efc04904-9c73-ed0a-6705-9ec3e4148192.png)

今回はtokyonightをテーマにしてみようと思います。
configファイルに下記を記述します。
```config
theme = tokyonight
```

そこから上記画像で出てきた`Reload Configuration`を使うと設定をロードしてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/8c71df7d-cc17-d88d-ddee-be8b6578f8dd.png)


# さらに設定してみる


### ファイルマークを消す
邪魔なファイルマークを消すことのできる設定です。

https://ghostty.org/docs/config/reference#macos-titlebar-proxy-icon

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/583546a0-9b1e-5f86-0137-def4df0e6e09.png)

### タイトルバーを消す

titilebarを消すことができます

https://ghostty.org/docs/config/reference#macos-titlebar-style

```config
macos-titlebar-style = hidden
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/311cbea8-db57-5cf1-46b8-04ca3e91a17b.png)

`cmd+t`でタブを複製すると、下のようにwindowが複製される感じになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/832536f5-c373-68b4-dd61-22031713e681.png)

`hidden`ではなく、`tabs`にするとwarpのような感じのデザインで作業できます。

```config
macos-titlebar-style = tabs
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/57e8fc41-d0fa-ed3f-6036-540cacbdb017.png)

### windowサイズを調整してみる

`window-height`と`window-width`で画面サイズを調整することができます。

https://ghostty.org/docs/config/reference#window-height

自分は下のようにしてみました。
```config
window-height = 40
window-width = 180
```

### paddingを調整する

`window-padding-x`,`window-padding-y`を調整することでpaddingを調整することができます。

https://ghostty.org/docs/config/reference#window-padding-x

例えばx方向のpaddingを調整してみます。
```
window-padding-x = 0
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/740fb5ac-c2a6-6ab0-10f2-e7f50a4e57ab.png)

```
window-padding-x = 20
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/1bfef72d-bffc-0e99-dd92-6a1855e0fe7b.png)

このようにターミナルの見やすさを自分好みにできます。

### カーソルを調整する

カーソルの色を変更することができます。

https://ghostty.org/docs/config/reference#cursor-color

```
cursor-color = FF88FF
```

カーソルを点滅させることができるようになります。

https://ghostty.org/docs/config/reference#cursor-style-blink

```
cursor-style-blink = true
```

### クイックターミナルを使ってみる
クイックターミナルはiTerm2にあった一瞬だけターミナルを出す機能です。
>自分はwarpとweztermしか使ったことがなかったのでそんなのあるんだとなりました。


下のように設定してみました。
```
quick-terminal-position = "top"
quick-terminal-screen = "main"
quick-terminal-animation-duration = 0.3
keybind = "global:cmd+shift+t=toggle_quick_terminal"
```

`quick-terminal-position`はクイックターミナルの表示部分を指定できます。

https://ghostty.org/docs/config/reference#quick-terminal-position

`quick-terminal-screen`でクイックターミナルをどこに表示するかを指定します。

https://ghostty.org/docs/config/reference#quick-terminal-screen

`quick-terminal-animation-duration`でクイックターミナルの表示するまでの時間を設定しています。

https://ghostty.org/docs/config/reference#quick-terminal-animation-duration

`keybind`では表示するキーバインドを設定しています。
globalを指定することでGhosstyを表示していない画面でも使用できます。

:::note warn
システム設定の`プライバシーとセキュリティ`からアクセシビリティの許可を出す必要があります。
:::

キーバインド(cmd+shift+t)で表示されるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/b7aa54ec-0d67-7f97-411b-579bd6ce1736.png)

weztermにはない機能なのでこれは便利だとなりました。

### macのアイコンを変えてみる
下のようにするとmacのアイコンが変わりました。

```
macos-icon = custom-style
macos-icon-ghost-color = 010101
macos-icon-screen-color = FF88FF
```

`macos-icon`でアイコンをカスタムすることを明示します。これがないとアイコンが変わりません。

https://ghostty.org/docs/config/reference#macos-icon

`macos-icon-ghost-color`でゴーストの色を`macos-icon-screen-color`でそのゴーストの背景の色を指定できます。

https://ghostty.org/docs/config/reference#macos-icon-ghost-color

https://ghostty.org/docs/config/reference#macos-icon-screen-color

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/7172d260-b683-bfd4-a9b6-a9ebdb93d5f7.png)

ちなみにフレームも変えれます。

https://ghostty.org/docs/config/reference#macos-icon-frame

例えば`plastic`にしてみると
```
macos-icon-frame = plastic
```
フレームが黒くなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/8b992999-99db-5ebc-3a81-3ce962519df3.png)

`chrome`にしてみると
```
macos-icon-frame = chrome
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/e75c84a4-0758-eeb8-9b2e-795be4e6b1f7.png)

# 使ってみた感想

個人的には動作も軽く、滑らかで設定ファイルもたくさん書く必要なく多くの機能を使うことができ、クイックターミナルも便利だったので、かなり気に入りました。

しかし、weztermの方がデザインカスタム性は高かったので、自分好みのターミナルを使うという点に関していうとweztermの方がまだ好きかなとなっています。

ただ、macを買ったばかりで標準ターミナル以外を使いたい人はぜひお勧めしたいです。

# 現在の設定ファイル
現在の設定ファイルは下のようになっています。
ぜひ参考にしてみてください。

https://github.com/maooz4426/Ghostty-dotfiles