k9sをDracula Theme対応した

Table of Contents

背景・動機

最近仕事でkubernetesを使う機会に恵まれた。 kubernetesを使うにあたって、モニタリングツールはk9sがデファクトのようなのでhome-managerを使って導入した。 「すべてのツールのカラーテーマはdracula themeに寄せる」という方針なので漏れなく対応した。

試したこと・やったこと

1. home-managerで導入

home-manager moduleはすでに用意されているのでenableするだけでよい。

C-c で閉じるよりも :q で閉じる方が直感的なので noExitOnCtrlC を有効化した。

https://github.com/nix-community/home-manager/blob/master/modules/programs/k9s.nix

{
  programs.k9s = {
    enable = true;
    settings.k9s = {
      noExitOnCtrlC = true;
    };
  };
}

2. dracula theme対応

k9sはskinという機能を用意しており、自前で用意したものを適用できる。 Claude Codeに必要なものを用意させた。

https://k9scli.io/topics/skins/

{
  programs.k9s = {
    settings.k9s = {
      ui.skin = "dracula";
    };
    skins = {
      dracula =
        let
          foreground = "#f8f8f2";
          background = "#282a36";
          current_line = "#44475a";
          selection = "#44475a";
          comment = "#6272a4";
          cyan = "#8be9fd";
          green = "#50fa7b";
          orange = "#ffb86c";
          pink = "#ff79c6";
          purple = "#bd93f9";
          red = "#ff5555";
          yellow = "#f1fa8c";
        in
        {
          k9s = {
            body = {
              fgColor = foreground;
              bgColor = background;
              logoColor = purple;
            };
            prompt = {
              fgColor = foreground;
              bgColor = background;
              suggestColor = purple;
            };
            info = {
              fgColor = pink;
              sectionColor = foreground;
            };
            dialog = {
              fgColor = foreground;
              bgColor = background;
              buttonFgColor = foreground;
              buttonBgColor = purple;
              buttonFocusFgColor = yellow;
              buttonFocusBgColor = pink;
              labelFgColor = orange;
              fieldFgColor = foreground;
            };
            frame = {
              border = {
                fgColor = selection;
                focusColor = current_line;
              };
              menu = {
                fgColor = foreground;
                keyColor = pink;
                numKeyColor = pink;
              };
              crumbs = {
                fgColor = foreground;
                bgColor = current_line;
                activeColor = current_line;
              };
              status = {
                newColor = cyan;
                modifyColor = purple;
                addColor = green;
                errorColor = red;
                highlightColor = orange;
                killColor = comment;
                completedColor = comment;
              };
              title = {
                fgColor = foreground;
                bgColor = current_line;
                highlightColor = orange;
                counterColor = purple;
                filterColor = pink;
              };
            };
            views = {
              charts = {
                bgColor = "default";
                defaultDialColors = [
                  purple
                  red
                ];
                defaultChartColors = [
                  purple
                  red
                ];
              };
              table = {
                fgColor = foreground;
                bgColor = background;
                header = {
                  fgColor = foreground;
                  bgColor = background;
                  sorterColor = cyan;
                };
              };
              xray = {
                fgColor = foreground;
                bgColor = background;
                cursorColor = current_line;
                graphicColor = purple;
                showIcons = false;
              };
              yaml = {
                keyColor = pink;
                colonColor = purple;
                valueColor = foreground;
              };
              logs = {
                fgColor = foreground;
                bgColor = background;
                indicator = {
                  fgColor = foreground;
                  bgColor = purple;
                  toggleOnColor = green;
                  toggleOffColor = cyan;
                };
              };
            };
          };
        };
    };
  };
}

3. k9s起動する

無事反映されてることが確認できた。

得られた結果・所感

ドキュメント的に export K9S_SKIN="dracula" ですでに準備されてるものが反映されるのかなと思ったら全然そんなことなかった。

https://k9scli.io/topics/skins/

Lastly, you can completely override these settings in your shell via setting K9S_SKIN in the environment, e.g. export K9S_SKIN=“dracula”.

Claude Codeにthemeを書かせると簡単に欲しいものが出来あがるので便利。

今後の展開・検討事項

k9sの使い方がまだ分からないので使いこなしたい。