4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

starship で任意のディレクトリ配下にいる時だけ、必要な情報を出すようにしてみた。

Last updated at Posted at 2021-09-12

こんにちは。

starship の設定をしてたら一晩経っていたので、個人的に嬉しいと思う設定を紹介したいと思います。

今回はある特定のディレクトリ配下にいる時に、欲しい情報をプロンプトに添えて出しておく設定になります。

スクリーンショット 2021-09-12 20.52.37.png

スクリーンショット 2021-09-12 21.09.36.png

例えばGCPとAWSを扱う複数のプロジェクトがあった時、デプロイ先がGCPのプロジェクトであればAWSの情報はノイズになりますよね。
そういった時、この設定をすることで、作業に必要な情報を選択してプロンプトの表示に出すことが出来るようになります。

なお私自身のシェル環境はfishとなりますので、適所でお読み替え下さい。

starshipのカスタム設定 を利用します。

例:

$HOME/.config/starship.toml

format = """
${custom.projectName}\
...省略
"""

[custom.projectName]
# ...

トップレベルのformatにカスタム設定の適用場所を決め、他の設定と同じように下部で具体的な設定を書いていきます。

この時、カスタム設定で注意すべきこととして、command, when で実行されるコマンドは現在のシェルに渡される点です。

つまり今時点で実行可能なコマンドをここに記述ができるので, いつ表示させるか, 何を実行するのかの選択肢はとても広いことになります。

今回は when に渡すコマンドを、今いるディレクトリ構造のどれかに、指定するディレクトリ名を含んでいる場合に 終了ステータス0 を返す処理になるように設定します。

fish シェルの場合, $HOME/.config/fish/functions で関数を定義しておけば、どこからでも呼び出し可能なのでそこに定義します。
(bashやzshでも同様の考え方で自由に定義できます。/usr/local/bin等に実行可能なスクリプトとして置いておくのもありですね)

$HOME/.config/fish/functions/am_i_in_the.fish
function am_i_in_the
  string match -r $argv $PWD
end

これでfishシェルに am_i_in_the XXXX と渡すことで 今のディレクトリ構造に XXXX を含むと 終了ステータスが0で返るようになりました。

$HOME/.config/starship.toml
# ...

[custom.projectName]
when = 'am_i_in_the projectDirName'
# ...

when にそのまま設定します。

次に command ですが、こちらに渡すコマンドは、実行結果がプロンプトに表示させたい内容になるよう作られたものにしていきます。

gcloud に関係する環境変数を表示させたかったので、以下のような関数を作成しました。

$HOME/.config/fish/functions/get_gcloud_envs.fish
function get_gcloud_envs --description 'get_gcloud_envs'
  set -l GCLOUD_ENVS ""

  set GCLOUD_ENVS $GCLOUD_ENVS (cat $HOME/.config/gcloud/active_config | xargs -I@ awk '/project/{print "gcloud: "$3}' "$HOME/.config/gcloud/configurations/config_"@)

  if set -q SPANNER_PROJECT_ID; and set -q SPANNER_INSTANCE_ID; and set -q SPANNER_DATABASE_ID
    set GCLOUD_ENVS $GCLOUD_ENVS "spanner: $SPANNER_PROJECT_ID, $SPANNER_INSTANCE_ID, $SPANNER_DATABASE_ID "
  end

  echo $GCLOUD_ENVS
end

まとまった環境変数が定義されていると表示に使う変数に文字を足し、不足していると足さないといった考え方で組みました。

これも シェル上で get_gcloud_envs として呼び出し可能なので、そのまま command に定義します。

$HOME/.config/starship.toml
# ...

[custom.projectName]
when = 'am_i_in_the projectDirName'
command = 'get_gcloud_envs'
# ...

あとは 表示のさせ方について設定すれば、OKです。

色々試した結果、カスタム設定内のフォーマットで改行は行わず、表示するものが無ければ空行、あればそこに表示するといった形が良いと思いました。

この場合、トップレベルのフォーマットと、カスタム設定のフォーマットの2箇所を意識する必要がありました。

$HOME/.config/starship.toml
format = """
${custom.projectName}\
$line_break\
...省略
"""

# ...

[custom.projectName]
when = 'am_i_in_the projectDirName'
command = 'get_gcloud_envs'
format = "[$output]($style) "
style = "#707070"

以上となります。
快適なstarshipライフを🎉

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?