【zsh】Powerlevel10kでKubernetes用の設定をする

2022.11.25
2024.03.24
Kubernetes
zsh

はじめに

zshのテーマを変更してくれるプラグインのPowerlevel10kでKubernetes向けの設定をしていきたいと思います。

Powerlevel10kの導入については下記を参照してください。

zinit+iTerm2+powerlevel10kでzshのプロンプトをいい感じにカスタマイズする

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

GitHub - monda00/dotfiles: my dotfiles

my dotfiles. Contribute to monda00/dotfiles development by creating an account on GitHub.

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee