秋の dotfiles 大掃除【Alacritty編】

[Alacritty](https://github.com/alacritty/alacritty)はRust製のターミナルエミュレータで、GPUを利用することで高速なレンダリングを実現しています。macOS、Linux、Windows、BSDなどの主要なOSで使用できます。


## 環境

<div>
  <img src="https://img.shields.io/badge/macOS Catalina-19.15.7-999999.svg?logo=apple&style=flat-square">
  <img src="https://img.shields.io/badge/Rust-1.47.0-000000.svg?logo=Rust&style=flat-square">
</div>

- macOS Catalina 19.15.7
- Rust 1.47.0（stable）

## インストール

macOSにAlacrittyをインストールする方法は3つあります。

- ソースコードからビルドする
- `Homebrew`でインストール
- `cargo`でインストール

`Homebrew`や`cargo`でインストールする場合、 terminfo fileやdesktop entry、manual page、 シェル補完を利用できなくなりますが、Rustの環境を構築する必要がなく（cargoを利用する場合は必要）、簡単にAlacrittyをインストールできます。
詳しくは[マニュアルインストール](https://github.com/alacritty/alacritty/blob/master/INSTALL.md)を確認してください。

### ソースコードからビルド

1\. Rustの環境を構築する

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

2\. リポジトリからソースコードをクローンする

```bash
git clone https://github.com/alacritty/alacritty.git
cd alacritty
```

3\. AlacrittyをコンパイルするRustのバージョンを指定する

```bash
rustup override set stable
rustup update stable
```

4\. Alacrittyのビルドとインストール

 ```bash
make app
cp -r target/release/osx/Alacritty.app /Applications/
```

### Homebrewでインストール

HomebrewでAlacrittyをインストールする

```bash
brew cask install alacritty
```

### cargoでインストール

1\. Rustの環境を構築する

```bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```

2\. cargoでAlacrittyをインストールする

```bash
cargo install alacritty
```

## 設定

### 設定ファイルの優先順位

1. `$XDG_CONFIG_HOME/alacritty/alacritty.yml`
2. `$XDG_CONFIG_HOME/alacritty.yml`
3. `$HOME/.config/alacritty/alacritty.yml`
4. `$HOME/.alacritty.yml`

Alacrityは上記の順番で設定ファイルが読み込まれます。
macOSの場合、デフォルトでは`$XDG_CONFIG_HOME`は設定されていないので`$HOME/.config/alacritty/alacritty.yml`と`$HOME/.alacritty.yml`が読み込まれるでしょう。
今回は`$HOME/.config/alacritty/alacritty.yml`に設定を記述します。

### 設定ファイル

```yaml:$HOME/.config/alacritty/alacritty.yml
shell:
  program: /usr/local/bin/fish
  args:
    - --login
    - --command
    - "tmux attach || tmux"
# テーマ
colors:
  primary:
    background: '#32302f'
    foreground: '#ebdbb2'
  normal:
    black:   '#282828'
    red:     '#cc241d'
    green:   '#98971a'
    yellow:  '#d79921'
    blue:    '#458588'
    magenta: '#b16286'
    cyan:    '#689d6a'
    white:   '#a89984'
  bright:
    black:   '#928374'
    red:     '#fb4934'
    green:   '#b8bb26'
    yellow:  '#fabd2f'
    blue:    '#83a598'
    magenta: '#d3869b'
    cyan:    '#8ec07c'
    white:   '#ebdbb2'
# フォント
font:
  size: 12  # フォントサイズ
  normal:
    family: 'Source Code Pro'
    style: Regular
  bold:
    family: 'Source Code Pro'
    style: Bold
  italic:
    family: 'Source Code Pro'
    style: Italic
  bold_italic:
    family: 'Source Code Pro'
    style: Bold Italic
window:
  decorations: full         # ボーダーとタイトルバーを表示する
  startup_mode: Fullscreen  # フルスクリーンで起動する
background_opacity: 0.95    # 背景を透過させる
```

fish shellとtmuxを使用しているので、`shell`でAlacritty起動時にfish shellを使用して、tmuxのセッションが残っていた場合セッションにアタッチし、残っていなかった場合tmuxを実行するように指定しています。

`colors`ではAlacrittyのテーマを指定できます。上記の設定ファイルでは`Gruvbox`のカラースキームを指定していますが、[Color schemes · alacritty/alacritty Wiki](https://github.com/alacritty/alacritty/wiki/Color-schemes)でAlacritty用のカラースキームが公開されています。

`font`では、フォントサイズと使用するフォントを指定しています。`Souce Code Pro`はAdobeが開発したプログラミング用フォントでPowerlineフォントとしても利用できます。

`window`と`background_opacity`では、Alacrittyの見た目を変えています。

その他の設定は[config-alacritty/alacritty.yml at master · tmcdonell/config-alacritty](https://github.com/tmcdonell/config-alacritty/blob/master/alacritty.yml)を参考にすると良いでしょう。

### tmux, NeovimでTrue colorを有効にする

Alacrittyで、tmux、NeovimのTrue colorを有効にするにはAlacrittyとtmuxの設定が必要です。以下の設定をそれぞれの設定ファイルに追加しましょう。

```yaml:$HOME/.config/alacritty/alacritty.yml
env:
  TERM: alacritty
```

```conf:$HOME/.tmux.conf
set -g default-terminal "screen-256color"
set-option -sa terminal-overrides ',alacritty:RGB'
```

> [Support "True" (24-bit) color · Issue #109 · alacritty/alacritty](https://github.com/alacritty/alacritty/issues/109)

---

**参考サイト**

> - [Rust製の爆速端末Alacrittyのインストールと設定方法 | TomboMemo](https://tombomemo.com/alacritty-install-settings)
> - [Terminalの見た目を維持してAlacrittyを導入したよ - Qiita](https://qiita.com/hsawaji/items/5d0ee41be1f628811e6e#%E3%82%AB%E3%83%A9%E3%83%BC%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%A0%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B)
> - [Rust製の高速ターミナル「Alacritty」とhammerspoonを組み合わせてiTerm2を超える爆速環境構築 on macOS - Qiita](https://qiita.com/susiyaki/items/19ec8e0d1a570fdb477a)