シェルのプロンプトを StarShip でいい感じにする
シェルのプロンプトの設定は、凝ろうと思ったら無限に時間が消費される。2022年時点、最も現代的でおすすめできる方法が StarShip だ。 従来、プロンプトの設定は環境変数やシェル関数などを組み合わせて、ググりながら暗号的なコードと格闘しなければならなかった。 StarShipはプロンプトの生成をRust製の実行ファイルに一任し、それ設定ファイルはTOMLファイルに抽象化されている。 クロスプラットフォーム(LinuxでもMacでもWindowsでも)、マルチシェル(zsh, fish, windows-power-shell, …)対応。 Nerd Font(Powerline font)を使ったカラフルな表示や現代的な機能にも、もちろん対応している。
oh-my-zsh? 無駄な労力ですね。
Nerd Font
事前準備として Nerd Font をインストールしておく。 従来は Powerline font などと呼ばれていたが、各種を統合してワンパッケージにしたものだ。 ついでに、フォント自体も好みのプログラミングフォントをインストールしておこう。
日本語も対応してているものとして、Cicaなどが使いやすいと思う。
Macの場合は展開して*.ttf
ファイルを~/Library/Fonts/
にコピーするだけ。
私の場合は使い慣れた Ricty が好きなので自分で生成したが、わりとハマったのでこの文章の最後にまとめておく。
インストール
本家サイト参照。次のコマンドをコピペする。
curl -sS https://starship.rs/install.sh | sh
本家サイトのとおり、使っているシェルに合わせて、初期化を仕込む。
zshの場合は.zshrc
(これはインタラクティブシェルの場合だけ実行される)に次のように。
# ~/.zshrc
eval "$(starship init zsh)"
コマンドを手で実行してみればわかるが、starshipコマンドが ~/.config/starship.toml
ファイルを読み込んでzsh用のコマンドシーケンスを生成し、シェルに評価させている。
設定
設定は、現代的に ~/.config/starship.toml
に記述する。~/.XXXXrc
を使わずに~/.config/
を使うところも現代的でお行儀が良い。
最初はデフォルトでも、いい感じに設定されているので、ほとんどの用途で満足がいくと思う。
一律のプロンプト設定ではなく、そのプロジェクトにGitリポがあるか、使用言語、実行環境などによって、自動判別で細かく表示がカスタマイズされ、必要な情報が表示されるが不要なものは省かれるようになっている。
- パスは、リポの場合はそこから上は表示されないのがデフォルト。
- Gitレポの場合、ブランチ名を表示
- これは、Rustのプロジェクトなので、このプロジェクトのCargoバージョン
- カニアイコンとrustcのバージョン
- もし未登録ファイルがあれば、その警告も
cargo build
など時間がかかるコマンドは実行時間。lsの場合には表示されない。$?
が0でなければプロンプトの色が変わる。
Ricty Discord Nerd Fontの生成
古くからプログラミングフォントとしてRictyが存在して親しまれている。 とくに、自体が丸っこくて、フォントの「ふところ」が深く判別しやすいこと、「゜」「、」などの記号類が大きく分かりやすくなっていることなどが良い点だ。
しかし、元となるフォントのライセンスの関係上、ワンパッケージにしたフォントを配布することができない。元となるフォントをダウンロードして、手元で合成する、というハードルがある。ネットにある情報は古くなっていたりして、最新の環境ではハマることもあるので、私の手順を示しておこう。
作るのは Ricty Discord {Regular,Bold, Oblique, Bold Oblique} Nerd Font Complete.ttf
。
Discordというのは、一部のASCII文字をオリジナルのInconsolataから見やすい様に編集したもの(非調和と名付けられている)。
Rictyには再配布ライセンスの問題がないDiminishedもあるが、第二水準の一部の漢字が入っていない。
NerdフォントはComplete版(Nerd Fontプロジェクトにある可能な限りの絵文字が入っている)を結合。
参考
- 本家サイトの「生成方法」
- RictyにNerd Fontを合成する
FontForgeのインストール
Macの場合。
❯ brew install fontforge
mapfile
あとのほうでmapfile
コマンドを使う。これはbash組み込み関数なのだが、macに初期から入っているbash-3.2ではサポートされていない。brewでbashをインストールするとbash-5.1が入り、これだとサポートされている。
bash-3.2$ mapfile
bash: mapfile: command not found
bash-3.2$ brew instal bash
...
...
bash-3.2$ bash
bash-5.1$ mapfile
^C
bash-5.1$
bash-5.1$ exit
ダウンロード
- Inconsolata
- [https://fonts.google.com/specimen/Inconsolata]
- Migu 1M
- [http://mix-mplus-ipa.osdn.jp/migu/]
- ricty_generator.sh
- [https://rictyfonts.github.io]
素材フォントのRegularとBoldを作業ディレクトリにコピー
❯ cp migu-1m-20200307/migu-1m-regular.ttf .
❯ cp migu-1m-20200307/migu-1m-bold.ttf .
❯ ls -F
migu-1m-bold.ttf
migu-1m-regular.ttf
Inconsolata-Bold.ttf
Inconsolata-Regular.ttf
ricty_generator.sh
Ricky Discordでバグがあるのでスクリプトを修正
私の場合、Ricty Discordの生成時に、r
, 0
の合成に失敗している。本来は生成スクリプトの修正で対処したかったのだが、無理だったので、FontForge.appで手動で修正した。後述。
Rictyを生成
❯ chmod a+x ricty_generator.sh
❯ ./ricty_generator.sh auto
Ricty Generator 4.1.1
...
...
このコマンドで、Ricty-{Regular,Bold,Oblique,BoldOblique}, RictyDiscord-{Regular,Bold,Oblique,BoldOblique}。
❯ ls -lF Ricty*
-rw-r--r-- 1 nkon staff 3454152 8 27 12:38 Ricty-Bold.ttf
-rw-r--r-- 1 nkon staff 3681564 8 27 12:39 Ricty-BoldOblique.ttf
-rw-r--r-- 1 nkon staff 3408348 8 27 12:39 Ricty-Oblique.ttf
-rw-r--r-- 1 nkon staff 3184348 8 27 12:38 Ricty-Regular.ttf
-rw-r--r-- 1 nkon staff 3454276 8 27 12:38 RictyDiscord-Bold.ttf
-rw-r--r-- 1 nkon staff 3681752 8 27 12:39 RictyDiscord-BoldOblique.ttf
-rw-r--r-- 1 nkon staff 3408564 8 27 12:39 RictyDiscord-Oblique.ttf
-rw-r--r-- 1 nkon staff 3184500 8 27 12:38 RictyDiscord-Regular.ttf
テストしてみたらRictyDiscordの0
,r
がおかしい。
brewでインストールされているFontForge.app
でフォントファイルを開いて、正しいグリフ(下の方にある)をコピーして、
「ファイル」→「フォントを出力」で修正した*.ttf
を上書き保存する。
RictyとNerd Fontの合成
Nerd Font リポジトリをクローン
❯ git clone --depth=1 https://github.com/ryanoasis/nerd-fonts.git
Cloning into 'nerd-fonts'...
...
...
font-patcherを実行
上述のようにCompleteオプション(-c
)をつける。
❯ ls Ricty* | xargs -n 1 python3 nerd-fonts/font-patcher -c
...
...
❯ ls -lF | grep Nerd
-rw-r--r-- 1 nkon staff 4424956 8 27 12:50 Ricty Bold Nerd Font Complete.ttf
-rw-r--r-- 1 nkon staff 4650336 8 27 12:50 Ricty Bold Oblique Nerd Font Complete.ttf
-rw-r--r-- 1 nkon staff 4425152 8 27 12:50 Ricty Discord Bold Nerd Font Complete.ttf
-rw-r--r-- 1 nkon staff 4650596 8 27 12:50 Ricty Discord Bold Oblique Nerd Font Complete.ttf
-rw-r--r-- 1 nkon staff 4381332 8 27 12:50 Ricty Discord Oblique Nerd Font Complete.ttf
-rw-r--r-- 1 nkon staff 4159240 8 27 12:50 Ricty Discord Regular Nerd Font Complete.ttf
-rw-r--r-- 1 nkon staff 4381044 8 27 12:50 Ricty Oblique Nerd Font Complete.ttf
-rw-r--r-- 1 nkon staff 4159016 8 27 12:50 Ricty Regular Nerd Font Complete.ttf
インストール
生成されたフォントをインストール
❯ cp Ricty\ Discord* ~/Library/Fonts/
設定
GUIのソフトの場合、設定画面からそれらしいフォントを選べばOK。
Alacrittyの場合は~/.config/alacritty/alacritty.yml
に次のように書けばよい。
こういうところに書くフォントの名前は fc-list | grep Nerd
などとして調べる。
# Font
font:
size: 13
normal:
family: 'RictyDiscord Nerd Font'
style: Regular
bold:
family: 'RictyDiscord Nerd Font'
style: Bold
italic:
family: 'RictyDiscord Nerd Font'
style: Oblique
bold_italic:
family: 'RictyDiscord Nerd Font'
style: Bold Oblique