【zsh】Powerlevel10kでKubernetes用の設定をする
はじめに
zshのテーマを変更してくれるプラグインのPowerlevel10kでKubernetes向けの設定をしていきたいと思います。
Powerlevel10kの導入については下記を参照してください。
zinit+iTerm2+powerlevel10kでzshのプロンプトをいい感じにカスタマイズする
はじめに zinit+iTerm2環境での**Powerlevel10kを導入する手順**につい
Powerlevel10kの設定
Powerlevel10kの設定は~/.p10k.zsh
に保存されています。
今回は、Powerlevel10kを導入した時の初回の設定ではできなかったことを、設定ファイル(~/.p10k.zsh
)を変更することで設定していきます。
コンテキストを常に表示する
まずは、kubectl
などのコマンドを入力した時にしか表示されないコンテキストを、常に表示されるようにします。
下記のようにPOWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND
をコメントアウトすることで常に表示されるようになります。
1...
2
3 #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
4 # Show kubecontext only when the the command you are typing invokes one of these tools.
5 # Tip: Remove the next line to always show kubecontext.
6
7 # ----- コメントアウトします -----
8 # typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern'
9
10...
コンテキストを左側に表示する
次に、コンテキストがプロンプトの右側に表示されているのを、左側に表示されるようにします。
下記のようにPOWERLEVEL9K_LEFT_PROMPT_ELEMENTS
に要素を入れると左側に表示され、POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS
に入れると右側に表示されるようになっています。
1...
2
3 # The list of segments shown on the left. Fill it with the most important segments.
4 typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
5 # =========================[ Line #1 ]=========================
6 os_icon # os identifier
7 dir # current directory
8 vcs # git status
9 # ----- git statusの横にコンテキストが表示されるようにする -----
10 kubecontext # current kubernetes context (https://kubernetes.io/)
11 # =========================[ Line #2 ]=========================
12 newline # \n
13 prompt_char # prompt symbol
14 )
15
16 # The list of segments shown on the right. Fill it with less important segments.
17 # Right prompt on the last prompt line (where you are typing your commands) gets
18 # automatically hidden when the input line reaches it. Right prompt above the
19 # last prompt line gets hidden if it would overlap with left prompt.
20 typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
21 # =========================[ Line #1 ]=========================
22 status # exit code of the last command
23 command_execution_time # duration of the last command
24 background_jobs # presence of background jobs
25 direnv # direnv status (https://direnv.net/)
26 asdf # asdf version manager (https://github.com/asdf-vm/asdf)
27 virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html)
28 anaconda # conda environment (https://conda.io/)
29 pyenv # python environment (https://github.com/pyenv/pyenv)
30 goenv # go environment (https://github.com/syndbg/goenv)
31 nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv)
32 nvm # node.js version from nvm (https://github.com/nvm-sh/nvm)
33 nodeenv # node.js environment (https://github.com/ekalinin/nodeenv)
34 # node_version # node.js version
35 # go_version # go version (https://golang.org)
36 # rust_version # rustc version (https://www.rust-lang.org)
37 # dotnet_version # .NET version (https://dotnet.microsoft.com)
38 # php_version # php version (https://www.php.net/)
39 # laravel_version # laravel php framework version (https://laravel.com/)
40 # java_version # java version (https://www.java.com/)
41 # package # name@version from package.json (https://docs.npmjs.com/files/package.json)
42 rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv)
43 rvm # ruby version from rvm (https://rvm.io)
44 fvm # flutter version management (https://github.com/leoafarias/fvm)
45 luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv)
46 jenv # java version from jenv (https://github.com/jenv/jenv)
47 plenv # perl version from plenv (https://github.com/tokuhirom/plenv)
48 phpenv # php version from phpenv (https://github.com/phpenv/phpenv)
49 scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
50 haskell_stack # haskell version from stack (https://haskellstack.org/)
51 # ----- 右側には表示されないように削除する -----
52 # kubecontext # current kubernetes context (https://kubernetes.io/)
53 terraform # terraform workspace (https://www.terraform.io)
54 # terraform_version # terraform version (https://www.terraform.io)
55 aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
56 aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
57 azure # azure account name (https://docs.microsoft.com/en-us/cli/azure)
58 gcloud # google cloud cli account and project (https://cloud.google.com/)
59 google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
60 toolbox # toolbox name (https://github.com/containers/toolbox)
61 context # user@hostname
62 nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
63 ranger # ranger shell (https://github.com/ranger/ranger)
64 nnn # nnn shell (https://github.com/jarun/nnn)
65 xplr # xplr shell (https://github.com/sayanarijit/xplr)
66 vim_shell # vim shell indicator (:sh)
67 midnight_commander # midnight commander shell (https://midnight-commander.org/)
68 nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
69 # vi_mode # vi mode (you don't need this if you've enabled prompt_char)
70 # vpn_ip # virtual private network indicator
71 # load # CPU load
72 # disk_usage # disk usage
73 # ram # free RAM
74 # swap # used swap
75 todo # todo items (https://github.com/todotxt/todo.txt-cli)
76 timewarrior # timewarrior tracking status (https://timewarrior.net/)
77 taskwarrior # taskwarrior task count (https://taskwarrior.org/)
78 time # current time
79 # =========================[ Line #2 ]=========================
80 newline # \n
81 # ip # ip address and bandwidth usage for a specified network interface
82 # public_ip # public IP address
83 # proxy # system-wide http/https/ftp proxy
84 # battery # internal battery
85 # wifi # wifi speed
86 # example # example user-defined segment (see prompt_example function below)
87 )
88
89...
改行(newline
)を入れれば2行にして表示したりすることもできます。
カレントディレクトリを短縮して表示する
コンテキストを左側に表示したことでプロンプトが長くなってきたので、カレントディレクトリまでのパスを短縮して表示されるようにします。
下記のようにPOWERLEVEL9K_DIR_MAX_LENGTH
を0にすることで、常にパスを短縮して表示してくれます。
1...
2
3 # Shorten directory if it's longer than this even if there is space for it. The value can
4 # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty,
5 # directory will be shortened only when prompt doesn't fit or when other parameters demand it
6 # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below).
7 # If set to `0`, directory will always be shortened to its minimum length.
8 # ----- 0にします -----
9 typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=0
10
11...
本番環境とそれ以外で色を変える
本番環境のコンテキストであるときにすぐにわかるように、コンテキストが表示される色を変えたいと思います。
下記のようにPOWERLEVEL9K_KUBECONTEXT_CLASSES
にコンテキストの種類を定義して、それぞれで表示される内容を設定することができます。
デフォルトではコンテキストとNamespaceの色が同じになっていたので、別々の色になるように無理やり色を変えています。
1...
2
3 typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
4 # ----- prodという名前が含まれているコンテキストへの設定 -----
5 '*prod*' PROD
6 # ----- それ以外への設定 -----
7 '*' DEFAULT)
8 typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134
9 # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
10
11...
12
13 typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION=
14 # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME.
15 # ----- それ以外への設定 -----
16 POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='%45F${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
17 # Append the current context's namespace if it's not "default".
18 POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='%248F|%46F${${:-$P9K_KUBECONTEXT_NAMESPACE}:-default}'
19
20 # ----- PRODへの設定 -----
21 typeset -g POWERLEVEL9K_KUBECONTEXT_PROD_FOREGROUND=134
22 typeset -g POWERLEVEL9K_KUBECONTEXT_PROD_CONTENT_EXPANSION=
23 POWERLEVEL9K_KUBECONTEXT_PROD_CONTENT_EXPANSION+='%196F${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
24 POWERLEVEL9K_KUBECONTEXT_PROD_CONTENT_EXPANSION+='%248F|%207F${${:-$P9K_KUBECONTEXT_NAMESPACE}:-default}'
25
26...
色については下記のコマンドを実行して、自分好みの色を選択してください。
1for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done
完成系
設定した内容で下記のようになりました。
dotfiles
dotfilesもあるので、参考にしてください。
GitHub - monda00/dotfiles: my dotfiles
my dotfiles. Contribute to monda00/dotfiles development by creating an account on GitHub.