Prezto から Starship に乗り換えた話

正確には Prezto と Starship を共存させた話です。 シェルの環境構築は一度済ませてしまうと忘れがちなので、乗り換えたタイミングで手順を残しておきます。

元々は以下のような環境でしたが、描画が少し遅いのが気になっていました。(Enter を長押しすると顕著)

Rust 製の Starship というツールが良いと聞いたので試しに入れてみましたが、結論から言うと速くて便利で最高の体験を得られました。

starship.rs

github.com

macOSUbuntu を使っているのでそれぞれにインストールしました。
README には載っていませんでしたが、Ubuntu でも snap 経由で入れられるので楽です。

homebrew

$ brew install starship

snap

$ sudo snap install starship

Starship の設定ファイルは toml で記述します。デフォルトのパスは ~/.config/starship.toml ですが個人的に扱いづらかったので変更しました。

.zshrc

最初は Starship だけ設定していましたが、zsh-syntax-highlighting や zsh-completion に相当する機能はなかったので結局 Prezto も併用しています。

# Source Prezto.
if [[ -s "${ZDOTDIR:-$HOME}/.zprezto/init.zsh" ]]; then
  source "${ZDOTDIR:-$HOME}/.zprezto/init.zsh"
fi

export STARSHIP_CONFIG=~/.starship.toml
eval "$(starship init zsh)"

.zpreztorc

Prezto の設定は元々ほぼデフォルトのまま(prompt のテーマを powerlevel9k にしていたくらい)でしたが、この際に見直して読み込む module を最低限に絞りました。

zstyle ':prezto:load' pmodule \
  'utility' \
  'completion' \
  'syntax-highlighting' \
#  'environment' \
#  'terminal' \
#  'history' \
#  'directory' \
#  'spectrum' \
#  'prompt' \
#  'autosuggestions'

.starship.toml

prompt_order で表示順を変えたり、改行を消したり、Kubernets の context を表示するようにしたりしています。(大体の項目はデフォルトで有効ですが Kubernetes のように一部無効のものもあります)

add_newline = false
prompt_order = [
  ...
]

[aws]
displayed_items = "profile"

[character]
use_symbol_for_status = true

[directory]
truncation_length = 5

[kubernetes]
symbol = "🐳 "
disabled = false

色もいい感じについてかなり快適な環境になりました。Enter 連打にも耐えうる描画速度で今のところとても満足しています。