理系学生日記

おまえはいつまで学生気分なのか

Starshipを使ってシェルプロンプトをカスタマイズする

重い腰を上げてWindowsマシンでCygwin環境を構築することにしたとき、やはり気になるのがシェル環境です。

As-is

僕のメインPCであるMacでは、以下のようなプロンプトを使っていました。

Powerlineで美しくテンションが上がるプロンプトで、また、簡単な設定で必要な情報が揃うため、お気に入りでした。過去の僕のモチベーションが上がっている様子です。

ところが、プロンプト設定に使っているGitHub - eendroroy/alien at 2.1.2は開発が止まっています。 また、実装がZshに強依存しており、git submoduleを使った構成になっていることも管理を面倒にしているので、三年ぶりにプロンプトを変更することにしたのでした。

Starship

最近流行っているということで、今回使い出したのはStarshipです。

StarshipはRustで実装されたバイナリが実体となっており、それをシェルから実行する構成になっています。このような構成になっているため、Zshだけでなく、BashでもPowershellからでも利用できます。

インストールはStarship: Cross-Shell Promptに従うだけ。プロンプト設定は~/.config/starship.tomlに記述します。

僕は今回もPowerlineをベースにして、次のようなプロンプトとしてみました。

プリセット

この手のプロンプトは初期設定に時間を溶かしてしまうのですが、Starshipはプリセットの設定を公開してくれています。最初はここにあるプリセットのうち、お気に入りのものをstarship.tomlにコピー&ペーストすれば良いでしょう。

先に載せた僕のプロンプト設定も、Tokyo Nightを少しいじった程度です。

プロンプト設定の何が嬉しいのか

やっぱり毎日見るものだからこそ、モチベーションが上がるものを設定したい。 また、どのbranchをチェックアウトしているのかやgit addすべきものがあるのかが一目でわかると考えなければならないことが減り、物事に集中できる感じもします。

設定

上記設定は以下をコピー&ペーストすれば実現できます。よければどうぞ。

format = """
[░▒▓](#a3aed2)\
[  ](bg:#a3aed2 fg:#090c0c)\
$battery\
[](bg:#769ff0 fg:#a3aed2)\
$directory\
[](fg:#769ff0 bg:#394260)\
$git_branch\
$git_status\
[](fg:#394260 bg:#212736)\
$nodejs\
$golang\
$java\
$terraform\
[](fg:#212736 bg:#1d2230)\
$time\
$cmd_duration\
[ ](fg:#1d2230)\
\n$character"""

[battery]
full_symbol = '🔋'
charging_symbol = '󱊥'
discharging_symbol = '󱊥'
style = "bg:#a3aed2 fg:#090c0c"
format = '[$percentage $symbol]($style)'

[[battery.display]]
threshold = 100
style = "bg:#a3aed2 fg:#090c0c"

[directory]
style = "fg:#e3e5e5 bg:#769ff0"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"

[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = " "
"Pictures" = " "

[git_branch]
symbol = ""
style = "bg:#394260"
format = '[[ $symbol $branch ](fg:#769ff0 bg:#394260)]($style)'

[git_status]
style = "bg:#394260"
format = '[[($all_status$ahead_behind )](fg:#769ff0 bg:#394260)]($style)'

[nodejs]
symbol = ""
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[java]
symbol = ""
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[golang]
symbol = ""
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[terraform]
disabled = false
symbol = "💠"
style = "bg:#212736"
format = '[[ $symbol ($version) ](fg:#769ff0 bg:#212736)]($style)'

[time]
disabled = false
time_format = "%R"                                      # Hour:Minute Format
style = "bg:#1d2230"
format = '[[  $time ](fg:#a0a9cb bg:#1d2230)]($style)'

[cmd_duration]
format = '[[⏱ $duration](fg:#a0a9cb bg:#1d2230)]($style)'
style = "bg:#1d2230"
min_time = 2_000