スクリーンショット 2021-02-15 21.14.17

Alacrittyとtmuxでターミナル環境をつくる

2021年02月17日

Linuxを使っていた頃は、タイル型のウィンドウマネージャーを使っていたこともあってターミナル自体を大量に開くことで複数のターミナルを同時に使っていました。
Macを買った際にターミナルまわりの環境を構築しなおした際に今までLinuxで使っていたAlacrittyも試してみたのですが、Mac版では一度にひとつのウィンドウしか開けないため今までのように「ウィンドウを多数開いてウィンドウ自体を管理する」という形のターミナル管理はできなくなりました。

スクリーンショット 2021-02-17 20.52.17

そこでMacではiTerm2を使うことにしました。macOSによく馴染み、多機能でFLOSSでよいターミナルだと思うのですが、WSL環境でもAlacrittyを使っているのでできれば同じターミナルにしたいこと、前々からtmuxには興味を持っていたのでAlacritty+tmuxの組み合わせを試すことにしました。

tmuxのインストール

tmuxはHomebrewでインストールできます。arm64のバイナリがあるのでそちらにしましょう。Linuxでもほとんどのディストロにパッケージが収録されていると思います。

brew install tmux

Alacrittyのビルドとインストール

Linuxだとディストロによりますが、少なくともArchとFedoraにはパッケージがあります。Ubuntuだと手でビルドすることになるでしょう。

sudo dnf install alacritty

macOSの場合、Alacrittyはプロジェクト側が供給しているバイナリもあるのですが、現時点ではIntel向けのビルドになっています。arm64ネイティブのバイナリにするために自分でビルドすることにしました。

まずはRustの環境を作りましょう。Rust 1.50.0でApple Siliconがサポートされるようになったので、ふつうにRustupを使うだけでOK。

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

zshを使っているならRustupがよしなにしてくれるはずですが、fishを使っている場合~/.cargo/binに自分でPATHを通す必要があります。 ~/.config/fish/config.fishにこんな感じで書いておくとか。

set -x PATH $HOME/.cargo/bin $PATH

ソースコードをもらってきてビルドします。M1だと数分程度。

git clone https://github.com/alacritty/alacritty
cd alacritty
make app
cp -r target/release/osx/Alacritty.app /Applications/

terminfoとmanpageも入れちゃいましょう。公式のドキュメントではticを管理者権限で動かしていますが、macOSでは不要です。

tic -xe alacritty,alacritty-direct extra/alacritty.info
sudo mkdir -p /usr/local/share/man/man1
gzip -c extra/alacritty.man | sudo tee /usr/local/share/man/man1/alacritty.1.gz > /dev/null

設定する

Alacritty

デフォルトの設定ファイルをコピーします。

cd alacritty
cp alacritty.yml ~/.config/alacritty/alacritty.yml

macOSのウィンドウは四隅が丸くなっているので、少しだけ余白をつけます。

window:
  padding:
    x: 8
    y: 4

フォントはSF Mono Squareを使っています。

font:
  normal:
    family: 'SF Mono Square'
    style: Regular
  bold:
    family: 'SF Mono Square'
    style: Bold
  size: 16.0
  offset:
    y: 1

Alacrittyを起動したらtmuxが起動するようにします。0番のセッションが立ち上がっている場合はそこに入ります。fish以外のシェルを使っているなら立ち上げるシェルを変えましょう。

shell:
  program: /opt/homebrew/bin/fish
  args: 
    - -c
    - "/opt/homebrew/bin/tmux a -t 0 || /opt/homebrew/bin/tmux"

tmux

tmuxの設定ファイルは~/.tmux.confに書きます。

set -g default-terminal "screen-256color"
set -ga terminal-overrides ",alacritty:Tc"
 
set -g default-shell /opt/homebrew/bin/fish
 
set -g mouse on

最初の2行でnvimの色を直し、真ん中でデフォルトのシェルをfishにし、最後にマウスサポートをONにしています。

マウスサポートをONにすると簡単な操作ならマウスでできるようになります。キーバインドは今はほとんど触っていませんが、vimに慣れているとあまり直感的ではないのでそのうちvim風のバインドに変えたいところ。

スクリーンショット 2021-02-17 22.39.09

tmuxにはtpmというプラグインマネージャーがあり、vimと同じようにプラグインで機能拡張をすることができます。

git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'arcticicestudio/nord-tmux'
 
run '~/.tmux/plugins/tpm/tpm'

nord-tmuxはターミナルのカラースキームにNordを使っている人向けなので、他のカラースキームを使っている場合は外して自分でステータスラインをカスタムしたほうがよいかもしれません。

できたもの

スクリーンショット 2021-02-15 21.14.17

Alacrittyでtmuxを使ったターミナル管理ができるようになりました。副産物としてAlacrittyを終了しても後ろでtmuxは動き続けているので、OSやtmuxそのものを終了してしまわなければターミナルを終了して再び起動した際に前に作業していた状態に戻ってくるようになりました。これは便利かもしれない。

またAlacrittyはWindowsでも動作し、tmuxもLinuxで使えるのでWSL環境でも同じような感覚でターミナルの管理ができるようになりました。