GhosttyをNixOSに導入する方法

:::note warn
この記事は、Nixが大好きなしがない大学生が書いたものです。そのため、内容に誤りがあったり、表現が正しくないことがあるかもしれません。ご了承ください。
:::

GhosttyをNixOSで使用する方法は、公式ドキュメントにも説明があります。この記事では、Ghosttyの`config`をdotfilesで管理する方法を含めて説明しようと思います。

公式ドキュメントの該当箇所は、以下のリンクから見ることができます。

https://ghostty.org/docs/install/binary#nixos

# 前提

私のdotfilesは`flake`と`home-manager`を使っています。そのため、この2つを使っていることを前提として説明していきます。

Nix言語を読むのに馴れている方は、以下の私のdotfilesのレポジトリのリンクを見て導入していただくと良いかもしれません。

https://github.com/Myxogastria0808/dotfiles

:::note warn
私のdotfilesはまだまだ発展途上なので、内容がいろいろ変化していく可能性が高いです。そのため、`README`の内容が追従しきれていない可能性があります。ご注意ください。
:::

# 環境
OS: NixOS 25.05.20241213.71a6392 (Warbler) x86_64
Host: 20QES11500 (ThinkPad X1 Carbon 7th)
DE: KDE Plasma

# 導入方法

導入方法は私のdotfilesの構造に依存した方法なので、適宜みなさんのdotfilesの構造に読み変えてください。

### 1. `flake.nix`の編集

以下のように記述を追加します。(私のdotfilesの記述を一部省略して書いています。)
私は`extraSpecialArgs`に`username = "hello"`を記述しています。これは`home/home.nix`で使用していますので、ご注意ください。

```nix
{
  inputs = {
    ...
    #ghostty
    ghostty = {
      url = "github:ghostty-org/ghostty";
    };
    ...
  };
  outputs = inputs: {
    ## home-manager ##
    homeConfigurations = {
      myHomeConfig = inputs.home-manager.lib.homeManagerConfiguration {
        pkgs = import inputs.nixpkgs {
          system = "x86_64-linux";
          ...
        };
        ...
        extraSpecialArgs = {
          inherit inputs;
          username = "hello";
        };
        ...
      };
    };
    ...
  };
}
```

### 2. `home/home.nix`の編集

以下のように記述を追加します。(私のdotfilesの記述を一部省略して書いています。)
私は`config`ファイルを`home/config/ghostty/`配下に置いています。
ghosttyの`config`は`/home/<username>/.config/ghostty/config`に置かれるので、`target`を`/home/${username}/.config/ghostty/config`にしています。

```nix
# usernameが引数にあることに注意してください!
{ username, ... }:
{
  imports = [
    ./apps.nix
  ];
  home = {
    ...
    #ghostty
    file."config" = {
      enable = true;
      source = ./config/ghostty/config;
      target = "/home/${username}/.config/ghostty/config";
    };
  };
  ...
}
```

### 3. `home/app.nix`の編集

以下のように記述を追加します。(私のdotfilesの記述を一部省略して書いています。)

```nix
{ pkgs, inputs, ... }:
{
  ...
  # Install pkgs
  home.packages = with pkgs; [
    ...
    #Ghostty
    inputs.ghostty.packages.${pkgs.system}.default
    ...
  ];
}
```

### 4. `home/config/ghostty/config`に設定を書いていく

参考までに、私の`config`を載せておきます。以下の`config`をそのまま使用する場合は`font-family`に`0xProto Nerd Font`を指定している点に注意してください。
キーバインドについて補足しておくと、私がGhosttyの起動を`ctrl+alt+t`にしているので、他の一部のキーバインドも`ctrl+alt+何か`にしています。
色についても補足しておくと、私は`zsh-autosuggestions`を使っているのですが、補完される文字の色が見にくかったので、`home/config/zsh/zsh.nix`の`programs.zsh.initExtra`に`ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#586e75"`を追記しました。`config`も`palette = 8=#5d728c`で一部の色を調整しています。(こんなに面倒なことをしてでも`theme = Builtin Solarized Dark`が良かったんです...)
```config
theme = Builtin Solarized Dark
background-opacity = 0.85
font-family = "0xProto Nerd Font"
palette = 8=#5d728c
# *keybind* #
# create new tab
keybind = ctrl+alt+n=new_tab
# move tabs
keybind = ctrl+alt+left_bracket=previous_tab
keybind = ctrl+alt+right_bracket=next_tab
# close tab
keybind = ctrl+alt+q=close_window

# create new split window
keybind = ctrl+alt+r=new_split:right
keybind = ctrl+alt+l=new_split:left
keybind = ctrl+alt+t=new_split:up
keybind = ctrl+alt+b=new_split:down

# move splited window
keybind = ctrl+alt+right=goto_split:right
keybind = ctrl+alt+left=goto_split:left
keybind = ctrl+alt+up=goto_split:top
keybind = ctrl+alt+down=goto_split:bottom
```

### これでdotfilesの編集は完了です!

# 終わりに

Ghosttyの`Prebuilt Ghostty Binaries and Packages`のページに`NixOS`や`Void Linux
`などのinstall方法が説明されていることにかなり驚きました。

みなさんも、ぜひGhosttyを使ってみてください!

では、また他の記事でお会いしましょう。
バイバイ (@^^)/~~~