
Alacrittyとtmuxでターミナル環境をつくる
2021年02月17日
Linuxを使っていた頃は、タイル型のウィンドウマネージャーを使っていたこともあってターミナル自体を大量に開くことで複数のターミナルを同時に使っていました。
Macを買った際にターミナルまわりの環境を構築しなおした際に今までLinuxで使っていたAlacrittyも試してみたのですが、Mac版では一度にひとつのウィンドウしか開けないため今までのように「ウィンドウを多数開いてウィンドウ自体を管理する」という形のターミナル管理はできなくなりました。
そこで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風のバインドに変えたいところ。
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を使っている人向けなので、他のカラースキームを使っている場合は外して自分でステータスラインをカスタムしたほうがよいかもしれません。
できたもの
Alacrittyでtmuxを使ったターミナル管理ができるようになりました。副産物としてAlacrittyを終了しても後ろでtmuxは動き続けているので、OSやtmuxそのものを終了してしまわなければターミナルを終了して再び起動した際に前に作業していた状態に戻ってくるようになりました。これは便利かもしれない。
またAlacrittyはWindowsでも動作し、tmuxもLinuxで使えるのでWSL環境でも同じような感覚でターミナルの管理ができるようになりました。