2021/03/22

Alacritty+Prezto+Pureで快適なお洒落ターミナル環境

経緯

ターミナル周りのことであれこれと試行錯誤していたのも今は昔。近頃はKDEを入れるついでにKonsoleも追加しておく手癖が身についてしまい、気が付けば最近のターミナル事情にすっかり疎くなっていた。Linuxはもともとターミナル文化が根強かったせいか、今さら新顔が幅を利かせる余地などないとたかをくくっていたのかもしれない。

聞けばAlacrittyというターミナルエミュレータがミニマルで快適だという。なにげにマルチプラットフォーム対応でWindows版もリリースされている。設定はテキストファイルのみで行うので煩雑なメニュー画面に惑わされることもない……なるほど、なかなか良さそうじゃないか。

むろん、欠点もなくはない。Pros/Consで表すと以下の通りになる。

Pros
・Rust製かつGPU支援が実装されているため動作が軽快
・マルチプラットフォーム対応
・設定をテキストファイルに記述する形で行う

Cons
・環境によってはフルインストールにビルドを要する
・スクロールバーはない
・タブもない
・日本語のインライン入力は現状サポートされていない

書いておいてなんだが、こうして一覧にしてみるとけっこう人を選びそうな気もする。しかし動作が軽快なのは想像以上に本当の話で、僕程度のカジュアルな使い方でも十分に効能を実感できたほどだ。ビルドに関しては一度慣れてしまえばどうということはないし、タブ機能もtmuxを駆使すればおおよそ問題ない。インライン入力はそのうち何とかしてほしい。

Alacrittyの導入方法(Linux)

ここにちょっと面倒なところがある。Arch Linuxなど特別な仕様のリポジトリを持っているディストリビューションはともかく、他の環境では自らビルドを行わなければならない。以下にその手順を示す。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#リポジトリをクローンしてから当該フォルダに移動する
$ git clone https://github.com/alacritty/alacritty.git
$ cd alacritty

#ビルドに必要なrustupとcargoを導入する。
$ curl https://sh.rustup.rs -sSf | sh

#コンパイラの設定を行う。rustupが働かない場合はOSを再起動する。
$ rustup override set stable
$ rustup update stable

#ビルド開始。コーヒーを淹れて飲み干すくらい時間がかかった。
$ cargo build --release

#Alacrittyの情報をシステムに登録する。
$ sudo cp target/release/alacritty /usr/local/bin
$ sudo cp extra/logo/alacritty-term.svg /usr/share/pixmaps/Alacritty.svg
$ sudo desktop-file-install extra/linux/Alacritty.desktop
$ sudo update-desktop-database

#Alacrittyのmanualを登録する。
$ 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の導入方法(Windows)

想定環境はWindows10。本項ではPowerShellとScoopを使用する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#PowerShellに実行許可を与える。
PS> set-executionpolicy remotesigned -scope currentuser

#Scoopの導入を行う。
PS> Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')

#導入したScoopを用いてAlacrittyと推奨パッケージを入手する。
PS> scoop bucket add extras
PS> scoop install alacritty
PS> scoop install extras/vcredist2017

Alacrittyの設定

Linuxは~/.config/alacritty/alacritty.yml
Windowsは/%APPDATA%/Roaming/Alacritty/alacritty.yml に設定ファイルを置く仕組みになっている。設定例の一つとして僕のファイルを下記に掲載する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# シェル
shell:
  program: /usr/bin/zsh
  args:
    - --login

# カーソル
cursor:
  text: '#ffffff'
  cursor: '#00ff00'
  style:
    shape: Underline
    blinking: On
  unfocused_hollow: false
  blink_interval: 470

# タブスペース
tabspaces: 4

# フォント
font:
  size: 13.5
  normal:
    family: 'Ricty'
    style: Regular
  bold:
    family: 'Ricty'
    style: Bold
  italic:
    family: 'Ricty'
    style: Italic
  bold_italic:
    family: 'Ricty'
    style: Bold Italic

# ウインドウ
window:
  decorations: full
  dimensions:
          columms: 120
          line: 100

# 透過
background_opacity: 0.99

# 環境変数
env:
  TERM: alacritty

# テーマ
# KDE Breeze (Ported from Konsole)
colors:
  # Default colors
  primary:
    background: '#232627'
    foreground: '#fcfcfc'

    dim_foreground: '#eff0f1'
    bright_foreground: '#ffffff'
    dim_background: '#31363b'
    bright_background: '#000000'

  # Normal colors
  normal:
    black: '#232627'
    red: '#ed1515'
    green: '#11d116'
    yellow: '#f67400'
    blue: '#1d99f3'
    magenta: '#9b59b6'
    cyan: '#1abc9c'
    white: '#fcfcfc'

  # Bright colors
  bright:
    black: '#7f8c8d'
    red: '#c0392b'
    green: '#1cdc9a'
    yellow: '#fdbc4b'
    blue: '#3daee9'
    magenta: '#8e44ad'
    cyan: '#16a085'
    white: '#ffffff'

  # Dim colors
  dim:
    black: '#31363b'
    red: '#783228'
    green: '#17a262'
    yellow: '#b65619'
    blue: '#1b668f'
    magenta: '#614a73'
    cyan: '#186c60'
    white: '#63686d'

すべてのマシンで同一の設定ファイルを使い回すのはさすがに厳しかったので、HiDPIのラップトップではフォントを大きめにして、Windowsではフォントを白源に変え(Rictyとの相性が悪いため)、シェルのパスをWSLに指定している。

Windows Terminalや、もっと以前のminttyも決して強い不満を抱くような代物ではなかったが、僕にはAlacrittyの方が性に合っていたらしい。

なお、Alacrittyのテーマはここからテキストをコピーする形で利用できる。探せば他にもあると思う。

あれこれ気になりはじめた

改めてターミナル周りについて事細かに探っていると、関連した他の情報もおのずと目に入ってくる。聞けばzshにはいくつものフレームワークが存在しており、導入するだけで手堅くよしなに設定してくれるようだ。これまではoh-my-zshしか知らなかったが、Preztoというフレームワークが簡便で良さそうだった。遠い昔に見様見真似で.zshrcをえいやとこしらえ、今の今まで特段の不自由なく使ってきた僕にとっては順当なアプローチに思える。

プロンプト部分も手動でガチャガチャやるよりも、フレームワークに付属するテーマの方がより洗練されているように感じた。特にPureというプロンプトは一切の無駄がなく本当にミニマルで美しい。どこかの男性が人間と恋に落ちた時、僕はターミナルエミュレータのプロンプトに一目惚れしたのだ。

従前の手動プロンプト設定に取り入れていた情報(カレントディレクトリやSSH接続先の表示など)はしっかり網羅されており、PowerlineでおなじみのGitのステージング関係も控えめながら組み込まれている。その上でPreztoの強力な補完機能も得られる。すごい。

うーん、いい感じだ。
紹介が済んだところでPreztoとPureを導入する手順を記していく。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#まずはPreztoを引っ張ってくる。
$ git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"

#シェルオプションを有効にする。
$ setopt EXTENDED_GLOB

#設定済みファイルのシンボリックリンクを張る。
$ for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done

ここで一つ注意がある。既に.zshrc.zshenvがホームディレクトリに置かれていた場合、当該のシンボリックリンクは当たり前だが作成されない。これをうっかり忘れてそのままだとPreztoが機能しないので~/.zprezto/runcoms/直下にある実体ファイルを参照しながら適宜修正するか、一旦、自前の設定ファイルを引っ込ませて、後で新しくできたファイルの方に設定を付け加えるかしよう。

とはいえ定番の機能はPreztoの方で一通り有効化されているため、結局はほとんどの記述を削除することになると思われる。僕の.zshrcも逆に心配になるくらいスカスカになってしまった。

正しく設定が読み込まれていれば、Alacrrityの再起動後に大きく外観が変わっているはずだ。初期設定ではsorinというテーマが適用されている。Preztoの設定は~/.zpreztorcの内容を書き換える形で変更する。例によって僕の設定ファイルを下記に掲載しておく。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 色彩
zstyle ':prezto:*:*' color 'yes'

# 補完対象
zstyle ':prezto:load' pmodule \
  'environment' \
  'terminal' \
  'editor' \
  'history' \
  'directory' \
  'spectrum' \
  'utility' \
  'completion' \
  'syntax-highlighting' \
  'git' \
  'archive' \
  'command-not-found' \
  'prompt'

# キーマップ
zstyle ':prezto:module:editor' key-bindings 'emacs'

# テーマ
zstyle ':prezto:module:prompt' theme 'pure'

Pureの導入は設定例に従って名称を記述するだけで完了する。これだけの作業で快適なお洒落ターミナル環境が手に入ってしまうのだからすばらしい。

その他(順次追記)

・tmuxでneovimを開いた際にTrue Colorが無効になるエラーを修正する

1
2
3
4
5
6
7
#.alacritty.ymlに以下を追記
env:
    TERM: alacritty

#.tmux.confに以下を追記
set -g default-terminal "screen-256color"
set-option -sa terminal-overrides ',alacritty:RGB'

既知の問題点(たぶん何かを見落としている)

・tmuxからdetachするとカーソルが点滅しなくなる
・カーソルの色設定が反映されない
・ウインドウサイズの設定が反映されない
・コマンド以外だとなんでも下線が付くところがちょっと気に入らない

たまには実用的な記事を書くのも楽しいが、ポエム的な文章表現を自重することがとても難しい。

©2011 Rikuoh Tsujitani | Twitter | 小説