🚀

Starship で Rosetta 経由でシェルを起動しているかをプロンプトに表示する

2021/12/08に公開

モチベーション

Starship: Cross-Shell Prompt は様々なシェルで使えるプロンプトの実装です。いろんな種類のモジュールが存在して、カレントディレクトリや Node.js のバージョンなどの表示を行えます。

M1 Mac では Rosetta 経由でシェルを起動すると、x86_64 なバイナリも実行できるようになります。

$ arch -x86_64 uname -m # => x86_64

しかし M1 な Macを購入したからには、できる限り全てのバイナリを arm64 なものにしたくなります。これを達成するために、プロンプトのどこかに、Rosetta 経由でシェルを起動しているかを表示しておくことで、うっかり x86_64 なバイナリをインストールしないようにします。

Custom commands の設定

Custom commands を使用することで任意のコマンドの結果をプロンプトに表示することができます。

今回は以下の設定を starship.toml に追加することで、Rosetta 経由でシェルを起動しているときは、プロンプトに x86_64 を表示するようにしました[1]

starship.toml
[custom.arch]
command = "uname -m"
when = """ test $(uname -m) = "x86_64" """
style = "bold yellow"
format = "[$output]($style)"

常に uname -m の結果を表示していないのは、Starship の他のモジュールの情報を表示する必要がある場合のみそれを表示するという仕様に合わせたためです。

この設定で画像のように表示されました。

脚注
  1. https://github.com/odanado/dotfiles/commit/81797a9c0d571f13161a35508e7388138e2f6278 ↩︎

Discussion