日々に作業には様々なツールを利用しますよね。Emacs、Vim、tmuxといったツールを導入すると、カスタマイズ沼にハマってしまい、ついつい一日中設定ファイルをいじり回してしまったという経験のある人も多いのではないでしょうか。しかしこうした現象は一過性のもので、一度自分にとって最適な環境に落ち着いてしまうと、その後は10年単位で古い設定を使い続けてしまうというのもまた、この手のツールにありがちです。筆者もその例に漏れず、Emacsやzshの設定は10年以上、ほとんどいじっていませんでした。とはいえ新しいプラグイン管理ツールなんかも出てくるし、やっぱり適度に設定はアップデートしないといけないよなあ……と思い、ここ最近はdotfilesディレクトリの見直しを進めていたりします*1。
今まで筆者はzshのプロンプトを、シェル関数を書き、precmd_functionsにセットすることでカスタマイズしていました。設定した当時としては満足していたのですが、最近ではプロンプトをカスタマイズするプラグインも沢山存在しますし、メンテのコストを考えると、そういうものに乗った方がいいんじゃないかな? と思い、Powerlevel10kを使ってみることにしました。
Powerlevel10kのインストール方法等は公式ドキュメントを見ていただくとして、インストールするとデフォルトで様々な情報がプロンプトに表示されるのがわかります。AWSのプロファイルや、KUBECONFIGのコンテキストが表示されるのはもちろんですが、これらの情報は常時表示されるのではなく、kubectlやhelmコマンドを入力した時だけ表示されるため、普段使いの邪魔にならない点もポイントです。
ですが以下のエントリで紹介したように、筆者はKUBECONFIGを単一ファイルのコンテキストではなく、ファイルそのものを分離して、KUBECONFIG環境変数で切替えています。
そのためデフォルトの設定では少し都合が悪いため、プロンプトをカスタマイズすることにしました。具体的には任意の環境変数を、常時右プロンプトに表示させます。まずPowerlevel10kの設定ファイルである、~/.p10k.zsh
をエディタで開きます。その中で、以下のようにシェル関数を定義してください。-fオプションの引数は文字色なので、お好みで変更して構いません。
function prompt_my_kubeconfig() { [ -n "${KUBECONFIG}" ] && p10k segment -f 208 -t "KUBE:${${KUBECONFIG%/config}##/*/}" }
ポイントは関数名をprompt_
で始めることと、他の関数と衝突しないようmy_
プレフィックスをつけておくことです。関数の内容は、p10k segment
コマンドを実行し、表示したい文字列や文字色、アイコン等を指定するだけです。KUBECONFIG
環境変数には、KUBECONFIGファイルの絶対パスが格納されているのですが、筆者は~/.kube/プロジェクト名/config
という名前で統一しています。そこで末尾の/config
と、先頭からの/*/
を削ってプロジェクト名を取り出しています。
次に、このシェル関数を呼び出す設定を追加します。~/.p10k.zsh
の先頭付近に、POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
をtypesetしているブロックがあります。ここの末尾に、先ほど実装したmy_kubeconfig
を追記します。関数名はpromot_my_kubeconfig
ですが、プロンプトセグメントの定義はmy_kubeconfig
である点に注意してください。
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( # =========================[ Line #1 ]========================= status # exit code of the last command command_execution_time # duration of the last command (...中略...) # ↓この行を追記 my_kubeconfig )
zshを再起動すれば、設定が反映されます。
カレントディレクトリはもちろん、Gitのブランチやasdfで導入したツールのバージョンなども表示されていて、便利ですね。しばらくはp10kをカスタマイズしつつ、快適な環境を模索してみようと思います。
*1:先日Emacs 29に対応する際、leaf.elを使って古いEmacsの設定を全部書き直しました……。とはいえ、Emacs29からはuse-packageが本体に入ってるので、この選択が正しかったのかは自信がないです。