こんにちは。
starship の設定をしてたら一晩経っていたので、個人的に嬉しいと思う設定を紹介したいと思います。
今回はある特定のディレクトリ配下にいる時に、欲しい情報をプロンプトに添えて出しておく設定になります。
例えばGCPとAWSを扱う複数のプロジェクトがあった時、デプロイ先がGCPのプロジェクトであればAWSの情報はノイズになりますよね。
そういった時、この設定をすることで、作業に必要な情報を選択してプロンプトの表示に出すことが出来るようになります。
なお私自身のシェル環境はfishとなりますので、適所でお読み替え下さい。
starshipのカスタム設定 を利用します。
例:
format = """
${custom.projectName}\
...省略
"""
[custom.projectName]
# ...
トップレベルのformatにカスタム設定の適用場所を決め、他の設定と同じように下部で具体的な設定を書いていきます。
この時、カスタム設定で注意すべきこととして、command, when で実行されるコマンドは現在のシェルに渡される点です。
つまり今時点で実行可能なコマンドをここに記述ができるので, いつ表示させるか, 何を実行するのかの選択肢はとても広いことになります。
今回は when に渡すコマンドを、今いるディレクトリ構造のどれかに、指定するディレクトリ名を含んでいる場合に 終了ステータス0 を返す処理になるように設定します。
fish シェルの場合, $HOME/.config/fish/functions で関数を定義しておけば、どこからでも呼び出し可能なのでそこに定義します。
(bashやzshでも同様の考え方で自由に定義できます。/usr/local/bin等に実行可能なスクリプトとして置いておくのもありですね)
function am_i_in_the
string match -r $argv $PWD
end
これでfishシェルに am_i_in_the XXXX
と渡すことで 今のディレクトリ構造に XXXX を含むと 終了ステータスが0で返るようになりました。
# ...
[custom.projectName]
when = 'am_i_in_the projectDirName'
# ...
when にそのまま設定します。
次に command ですが、こちらに渡すコマンドは、実行結果がプロンプトに表示させたい内容になるよう作られたものにしていきます。
gcloud に関係する環境変数を表示させたかったので、以下のような関数を作成しました。
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 に定義します。
# ...
[custom.projectName]
when = 'am_i_in_the projectDirName'
command = 'get_gcloud_envs'
# ...
あとは 表示のさせ方について設定すれば、OKです。
色々試した結果、カスタム設定内のフォーマットで改行は行わず、表示するものが無ければ空行、あればそこに表示するといった形が良いと思いました。
この場合、トップレベルのフォーマットと、カスタム設定のフォーマットの2箇所を意識する必要がありました。
format = """
${custom.projectName}\
$line_break\
...省略
"""
# ...
[custom.projectName]
when = 'am_i_in_the projectDirName'
command = 'get_gcloud_envs'
format = "[$output]($style) "
style = "#707070"
以上となります。
快適なstarshipライフを🎉