Starship(on nushell)のcustom commandをon/off

2022/11/27に公開

Nu ShellでのStarship設定ファイルアクセス

Starshipの設定はTOMLファイル形式に記載しています。nu shellで開くと、TOML形式ファイルを認識して次のようにレコード形式で表示されます。

❯ open ~/.config/starship.toml
╭────────────────┬────────────────────────────────────────────────────────────────────────╮
│ c              │ {record 3 fields}                                                      │
│ custom         │ {record 3 fields}                                                      │
│ deno           │ {record 2 fields}                                                      │
│ directory      │ {record 5 fields}                                                      │
│ docker_context │ {record 3 fields}                                                      │
│ format         │ $directory[](fg:#DA627D                                               │
│                │ bg:#FCA17D)$git_branch$git_status[](fg:#FCA17D                        │
│                │ bg:#86BBD8)$c$nodejs$rust$deno[](fg:#86BBD8                           │
│                │ bg:#06969A)$docker_context[](fg:#06969A                               │
│                │ bg:#33658A)$status[](fg:#33658A bg:#191970)$custom[](fg:#191970)❯    │
│                │                                                                        │
│ git_branch     │ {record 3 fields}                                                      │
│ git_status     │ {record 2 fields}                                                      │
│ nodejs         │ {record 4 fields}                                                      │
│ rust           │ {record 3 fields}                                                      │
│ status         │ {record 5 fields}                                                      │
╰────────────────┴────────────────────────────────────────────────────────────────────────╯

ここで、nu shellに読み込んだ設定項目のDenoformatをアクセスしてみます。

 open ~/.config/starship.toml | $in.deno.format
[🦕 $version]($style)

次にこの項目内容を変更してみます。変更するにはnu shellビルトインコマンドのupdateを使います。

❯ open ~/.config/starship.toml | update deno.format "[Deno]($style)" | $in.deno
╭────────┬───────────────────────╮
│ format │ [Deno]($style)        │
│ style  │ bg:#86BBD8 fg:#000000 │
╰────────┴───────────────────────╯

変更できたことが確認できました。最後に変更内容をファイルに書き戻します。

❯ open ~/.config/starship.toml | update deno.format "[Deno]($style)" | save ~/.config/starship.toml

カスタマイズコマンドのOn/Off制御

Starshipカスタムコマンドの主要オプションは下記のとおりです。

Option Default Description
command "" 出力を表示するコマンド。コマンドは stdin でシェルに渡されます。
when false モジュール表示条件(true/false or コマンド終了ステータス)
detect_files [] 作業ディレクトリでマッチするファイル名あるか確認するファイルリスト
detect_extensions [] 作業ディレクトリでマッチする拡張子のファイルがあるか確認する拡張子リスト
detect_folders [] 作業ディレクトリでマッチするフォルダか確認するフォルダ名リスト
disabled false trueなら、このカスタム モジュールを無効

下記の動作確認用のカスタムコマンドを設定ファイルに追記します。On/Off制御にはdisabled,whenオプションの設定値を変更すればできそうですが、今回はwhenオプションで確認します。

[custom.trial]
description = "trial"
command = "echo trial"
when = false

これまでのTOML内容の更新方法で、whenオプションを変更して、On/Offを制御します。

# 有効化
❯ open ~/.config/starship.toml | update custom.trial.when true | save ~/.config/starship.toml
# 無効化
❯ open ~/.config/starship.toml | update custom.trial.when false | save ~/.config/starship.toml

この内容をAliasやコマンド定義しておくと使いやすくなると思います。
これで動的にカスタムコマンドのOn/Offができるようになるほか、一時的に設定内容を変更することがnu shellで簡単にできるようになりました。設定ファイルはバックアップしておいてから試した方がいいでしょう。

Tips

なおStarshipではstarship explainでモジュールの動作状況および実行時間が表示されるので、実際に変更内容が反映できているかなどを確認できます。
今回の場合のカスタムコマンドcustom.trialwhentrueの場合は以下のとおりになります。descriptionを設定していれば下記のtrialというように表示されます。

❯ starship explain

 Here's a breakdown of your prompt:
 "trial " (7ms)  -  trial
 " ~ " (<1ms)    -  The current working directory

Discussion