zshのプロンプトのカスタマイズは簡単にできる！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/834bed52-5bc0-9e3d-bf27-bdf91797b93f.png)

きっっっっったないdotfile をリファクタリングしてたら素晴らしいものを見つけてしまったのでこっそりと紹介しちゃうよ〜ん

# Powerlevel10k とは

https://github.com/romkatv/powerlevel10k/tree/master

柔軟性が高くてスグに使えるzsh のテーマだよ！
...って言ってるけど, **カスタマイズをしようと思わなければ**スグに使えるzsh のテーマだよ！
でも柔軟性はとても高くて**理解できるようになれば**とっても簡単！

なんでかって？

それは[README](https://github.com/romkatv/powerlevel10k/tree/master?tab=readme-ov-file#powerlevel10k)を見ると分かるけどバカみたいになっがい...
なっがいけどすごい親切に書いてある！
だからプロンプトをいい感じにしたいけどzsh 頑張りたくないな...って人でも, オレオレのプロンプトにしてやるぜって人も満足できると思う

ってことで実際にカスタマイズしていこう！

# フォントをインストール

Powerlevel10k を触る前にfont をインストールしておこう
[フォントについて](https://github.com/romkatv/powerlevel10k/tree/master?tab=readme-ov-file#meslo-nerd-font-patched-for-powerlevel10k)
色んな人がゴニョゴニョやってMeslo Nerd Font ができてパッチが当てられてるらしいから無難に使っておこう

手動でフォントのインストール方法を詳しく知りたい方は[Archwiki](https://wiki.archlinux.jp/index.php/%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88#.E6.89.8B.E5.8B.95.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB)を参考に
font を`~/.local/share/fonts`にダウンロードするよ〜

```zsh
curl -o ~/.local/share/fonts/'MelsoLGS NF Regular.ttf' https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf \
     -o ~/.local/share/fonts/'MesloLGS NF Bold.ttf' https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf \
     -o ~/.local/share/fonts/'MesloLGS NF Italic.ttf' https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf \
     -o ~/.local/share/fonts/'MesloLGS NF Bold Italic.ttf' https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf
```

そしてキャッシュをアップデートしよう

```zsh
fc-cache
```

# Powerlevel10k をインストール

フォントが終わったらPowerlevel10k の出番だ！
Powerlevel10k の説明でも言った通り親切に書いてあるからどんな人でもインストールできると思う
僕はzinit を使ってるのでzinit でインストールしていくよ！ (zinit の導入は省略)
他の人は[Installation](https://github.com/romkatv/powerlevel10k/tree/master?tab=readme-ov-file#installation) を見てやってみよう！

```zsh
echo 'zinit ice depth=1; zinit light romkatv/powerlevel10k' >> ~/.zshrc
```
って言っても`~/.zshrc`に追記するだけなんだけどね
そして追記したら`~/.zshrc`を読み込もう！

```zsh
source ~/.zshrc
```

よしオッケ〜
インストールができたら設定していこう〜

# Powerlevel10k の設定

無事にインストールができたら設定していくよ
時間はかかるけどコマンド一つと質問に答えるだけでいい感じのを作ってくれる

これを実行すると

```zsh
p10k configure
```
こんな感じで赤丸の部分がダイアモンドに見えるか聞いてくるから自分の環境で見えたら`y`見えなければ`n`を押す
こんな感じでなっがーい質問タイムが始まる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/2fc30a5c-9e93-8563-b0cb-3dae8cd0ffc7.png)


ここからはサクッといくよ〜
次は鍵に見えるか`y`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/8efc24a4-b238-cce4-35c0-5efcea76ed65.png)

上矢印にみえるか`y`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/a79a7a3e-381d-86bf-2f02-8c6b9fc3b69b.png)

アイコンが十字の間に収まってるか
ちょっとよくわからないけど`y`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/b8c26bd1-e816-06a1-14d7-9040920b637f.png)

ここからちょっと変わってどのスタイルが好みか`3`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/17dd34a1-7e95-7736-cc4b-3077c6cddfe3.png)

ユニコードを使うかどうか`1`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/9b31ff87-8dbc-7406-b2d1-1a85dad2574a.png)

右側の表示をどうするか`2`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/b5541d51-58c0-f795-94a4-764afd121511.png)

区切りはどんな感じにするか`3`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/25aa168c-1fc0-08b5-28bc-d640c51795b5.png)

中心はどれにするか`5`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/05c6d932-6bc1-5ccd-2146-f5ec05cda422.png)

端はどれにするか`5`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/ea6abf8a-9b5c-bf4c-5e4e-a187c2f7e5cd.png)

入力部を改行するか`2`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/3a68e55d-2d8c-468d-872a-cf006138f54b.png)

中心の繋ぎはどうするか`2`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/0f562130-80f3-d184-335d-8467ebc25e07.png)

両端のフレームはどうするか`4`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/ad7c0d8d-471d-743a-87e3-eb9c5ad7a6dc.png)

フレームの色はどうするか`1`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/59660bce-606c-7f57-91c4-56eb836eabb4.png)

改行はどうするか`2`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/6cfcb956-635a-79ee-d75e-a0e912964f14.png)

アイコンマシマシにするか`2`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/9ff677ad-1152-39b2-3cf3-391c25cf43bb.png)

文字もマシマシにするか`1`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/a035f513-ed69-da41-6a18-8f65b5c1f717.png)

コマンド実行後にマシマシプロンプトを消すか`y`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/86ae4049-bb9d-a75c-55c2-352009c6341a.png)

起動に時間がかかっても入力できるようにするか`1`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/fc2b46a4-2b44-04eb-3367-ab6efd4a78cb.png)

この設定で大丈夫？`y`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/98e2a91c-9da9-1b59-0253-6e60650f8775.png)

`~/.zshrc`に書き込む？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/4566607b-9674-c5a7-5580-41edb9b1cb86.png)

無事終了するといい感じになってる！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/6034457d-2e1e-604c-d23b-1cee91785bf1.png)

これで満足したなら終了！
お疲れ様でした〜
...とはさせないよ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/834bed52-5bc0-9e3d-bf27-bdf91797b93f.png)

どっかで見たけど, これは[README](https://github.com/romkatv/powerlevel10k/tree/master?tab=readme-ov-file#extremely-customizable)で紹介されてる超マシマシカスタマイズ
ずるい！！
僕もマシマシにする！！！！

# 更なる深みへ...

自動生成では満足できないそこの君...
一緒に沼ろうではないか

プロンプトをマシマシにするにはこれで大丈夫？の質問で生成 or 上書きされたファイルをいじる
基本的には`~/.p10k.zsh`になると
僕の場合は`~/.config/zsh/rc/.p10k.zsh`
(色々と酷いことになってるけどリファクタリング中に書いてるから...)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/98e2a91c-9da9-1b59-0253-6e60650f8775.png)

好きなエディターでファイルを開いたられっつご〜

## 左側をイジってみる

左側をイジるには33行目からの`POWERLEVEL9K_LEFT_PROMPT_ELEMENTS`をゴニョゴニョやるとイジれる

```zsh:.p10k.zsh
  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
    # =========================[ Line #1 ]=========================
    os_icon                 # os identifier
    dir                     # current directory
    vcs                     # git status
    # =========================[ Line #2 ]=========================
    newline                 # \n
    # prompt_char           # prompt symbol
  )
```

一応説明すると一行目に`os アイコン` `カレントディレクトリ` `git status` を表示する
そして`newline`で改行して終わり

ふむ...
これでもいいけどディレクトリの階層が深くなるとみづらくなるからこうじゃ！

```zsh:.p10k.zsh
  typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
    # =========================[ Line #1 ]=========================
    dir                     # current directory
    # =========================[ Line #2 ]=========================
    newline                 # \n
    os_icon                 # os identifier
    vi_mode                 # vi mode (you don't need this if you've enabled prompt_char)
    vcs                     # git status
    # prompt_char           # prompt symbol
    # =========================[ Line #3 ]=========================
    newline                 # \n
  )
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/32186860-d393-c299-7b0b-268cd4a8b5be.png)

vi_mode が動いてないけど設定の問題なので一旦
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/72beef1c-8aa8-0b05-0e01-54ec96e78903.png)

## 右側をイジってみる

右側は50行目あたりの`POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS`をイジる
すっごーーーい長くて色々と機能がある...
ざっくりカット

```zsh:.p10k.zsh
  typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
    # =========================[ Line #1 ]=========================
    # =========================[ Line #2 ]=========================
    newline
    ip                    # ip address and bandwidth usage for a specified network interface
    public_ip             # public IP address
    # proxy                 # system-wide http/https/ftp proxy
    # battery               # internal battery
    # wifi                  # wifi speed
    # example               # example user-defined segment (see prompt_example function below)
    # =========================[ Line #3 ]=========================
    newline
    status                  # exit code of the last command
    command_execution_time  # duration of the last command
    background_jobs         # presence of background jobs
    direnv                  # direnv status (https://direnv.net/)
    asdf                    # asdf version manager (https://github.com/asdf-vm/asdf)
    virtualenv              # python virtual environment (https://docs.python.org/3/library/venv.html)
    anaconda                # conda environment (https://conda.io/)
    pyenv                   # python environment (https://github.com/pyenv/pyenv)
    goenv                   # go environment (https://github.com/syndbg/goenv)
    nodenv                  # node.js version from nodenv (https://github.com/nodenv/nodenv)
    nvm                     # node.js version from nvm (https://github.com/nvm-sh/nvm)
    nodeenv                 # node.js environment (https://github.com/ekalinin/nodeenv)
    # node_version          # node.js version
    # go_version            # go version (https://golang.org)
    # rust_version          # rustc version (https://www.rust-lang.org)
    # dotnet_version        # .NET version (https://dotnet.microsoft.com)
    # php_version           # php version (https://www.php.net/)
    # laravel_version       # laravel php framework version (https://laravel.com/)
    # java_version          # java version (https://www.java.com/)
    # package               # name@version from package.json (https://docs.npmjs.com/files/package.json)
    rbenv                   # ruby version from rbenv (https://github.com/rbenv/rbenv)
    rvm                     # ruby version from rvm (https://rvm.io)
    fvm                     # flutter version management (https://github.com/leoafarias/fvm)
    luaenv                  # lua version from luaenv (https://github.com/cehoffman/luaenv)
    jenv                    # java version from jenv (https://github.com/jenv/jenv)
    plenv                   # perl version from plenv (https://github.com/tokuhirom/plenv)
    perlbrew                # perl version from perlbrew (https://github.com/gugod/App-perlbrew)
    phpenv                  # php version from phpenv (https://github.com/phpenv/phpenv)
    scalaenv                # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
    haskell_stack           # haskell version from stack (https://haskellstack.org/)
    kubecontext             # current kubernetes context (https://kubernetes.io/)
    terraform               # terraform workspace (https://www.terraform.io)
    # terraform_version     # terraform version (https://www.terraform.io)
    aws                     # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
    aws_eb_env              # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
    azure                   # azure account name (https://docs.microsoft.com/en-us/cli/azure)
    gcloud                  # google cloud cli account and project (https://cloud.google.com/)
    google_app_cred         # google application credentials (https://cloud.google.com/docs/authentication/production)
    toolbox                 # toolbox name (https://github.com/containers/toolbox)
    context                 # user@hostname
    nordvpn                 # nordvpn connection status, linux only (https://nordvpn.com/)
    ranger                  # ranger shell (https://github.com/ranger/ranger)
    yazi                    # yazi shell (https://github.com/sxyazi/yazi)
    nnn                     # nnn shell (https://github.com/jarun/nnn)
    lf                      # lf shell (https://github.com/gokcehan/lf)
    xplr                    # xplr shell (https://github.com/sayanarijit/xplr)
    vim_shell               # vim shell indicator (:sh)
    midnight_commander      # midnight commander shell (https://midnight-commander.org/)
    nix_shell               # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
    chezmoi_shell           # chezmoi shell (https://www.chezmoi.io/)
    # vpn_ip                # virtual private network indicator
    # load                  # CPU load
    # disk_usage            # disk usage
    # ram                   # free RAM
    # swap                  # used swap
    todo                    # todo items (https://github.com/todotxt/todo.txt-cli)
    timewarrior             # timewarrior tracking status (https://timewarrior.net/)
    taskwarrior             # taskwarrior task count (https://taskwarrior.org/)
    per_directory_history   # Oh My Zsh per-directory-history local/global indicator
    # cpu_arch              # CPU architecture
    time                    # current time
  )
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/dbd44551-70e3-a64f-b0ef-c110acfeff29.png)

グローバルIP が見えてるから隠して
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/72beef1c-8aa8-0b05-0e01-54ec96e78903.png)

## vi_mode を使えるように

上のスクショでは見えてなかったけどInsert モードじゃなければ見える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/f3a21308-9422-2676-4d0f-1d6193c5eb3b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/ac11e9f3-0965-d1d8-daf3-025f9570bd99.png)

いや, Insert でもみたいやんってことで840行目付近を見てみる

```zsh:.p10k.zsh
  ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]###########
  # Foreground color.
  typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0
  # Text and color for normal (a.k.a. command) vi mode.
  typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL
  typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2
  # Text and color for visual vi mode.
  typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL
  typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4
  # Text and color for overtype (a.k.a. overwrite and replace) vi mode.
  typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE
  typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3
  # Text and color for insert vi mode.
  typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING=
  typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8
  # Custom icon.
  # typeset -g POWERLEVEL9K_VI_MODE_VISUAL_IDENTIFIER_EXPANSION='⭐'
```

`POWERLEVEL9K_VI_INSERT_MODE_STRING=`...
うん. そりゃ何もでん

そして`  # typeset -g POWERLEVEL9K_VI_MODE_VISUAL_IDENTIFIER_EXPANSION='⭐'`アイコンも指定できるということで
※アイコンは[Nerd Fonts のチートシート](https://www.nerdfonts.com/cheat-sheet)で検索できるよ〜

```zsh:.p10k.zsh
  ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]###########
  # Foreground color.
  typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0
  # Text and color for normal (a.k.a. command) vi mode.
  typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL
  typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=4
  # Text and color for visual vi mode.
  typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL
  typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=3
  # Text and color for overtype (a.k.a. overwrite and replace) vi mode.
  typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE
  typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=5
  # Text and color for insert vi mode.
  typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING=INSERT
  typeset -g POWERLEVEL9K_VI_MODE_INSERT_BACKGROUND=2
  # Custom icon.
  typeset -g POWERLEVEL9K_VI_MODE_VISUAL_IDENTIFIER_EXPANSION=''
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/2c6a164e-9a96-7b30-eb02-efe6a38ef62a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/a0276f0a-6960-9f4b-cdcf-8aa86a282be7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/fc08ffdf-b784-db9d-bdbc-d24e8c13bb7a.png)

完璧だ...

## カレントディレクトリ毎に色分けできたら便利じゃね？

今いるディレクトリによってバックグラウンドが変わったら便利な気がするからやろう！
320行目くらいを見てみると

```zsh:.p10k.zsh
  # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different
  # directories. It must be an array with 3 * N elements. Each triplet consists of:
  #
  #   1. A pattern against which the current directory ($PWD) is matched. Matching is done with
  #      extended_glob option enabled.
  #   2. Directory class for the purpose of styling.
  #   3. An empty string.
  #
  # Triplets are tried in order. The first triplet whose pattern matches $PWD wins.
  #
  # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories
  # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively.
  #
  # For example, given these settings:
  #
  #   typeset -g POWERLEVEL9K_DIR_CLASSES=(
  #     '~/work(|/*)'  WORK     ''
  #     '~(|/*)'       HOME     ''
  #     '*'            DEFAULT  '')
  #
  # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one
  # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or
  # WORK_NON_EXISTENT.
```

英語できんけど色々試した結果
ふむふむ`POWERLEVEL9K_DIR_CLASSES`をイジるとディレクトリ毎に色分けできるようになると
ディレクトリのマッチ, クラス付け, 空(アイコン)の順で設定できて上から優先して色付けしていくと

```zsh:.p10k.zsh
  typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='󰶳'
  typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=2
  typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=0

  # Styling for WORK_NOT_WRITABLE.
  # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=1
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=0

  #   # Styling for WORK_NON_EXISTENT.
  # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐'
  typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4
  typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254
  typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250
  typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255
```

こんな感じで`POWERLEVEL9K_DIR_クラス名_...`で色々設定できると
`POWERLEVEL9K_DIR_クラス名_NOT_WRITABLE_...`で書き込み権限が無いところも変えられると
`POWERLEVEL9K_DIR_クラス名_NON_EXISTENT_...`でディレクトリが消えたときもいけるのね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/72beef1c-8aa8-0b05-0e01-54ec96e78903.png)

ちなみに300行目くらいの`POWERLEVEL9K_LOCK_ICON`で書き込み権限が無いときのデフォルトアイコンを設定できる

```zsh:.p10k.zsh
  typeset -g POWERLEVEL9K_LOCK_ICON=''

  typeset -g POWERLEVEL9K_DIR_CLASSES=(
    '~/work(|/*)'  WORK     ''
    '~/School(|/*)'  SCHOOL     ''
    '~(|/*)'       HOME     ''
    '*'            DEFAULT  '')

  # Styling for WORK.
  typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='󰶳'
  typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=2
  typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=0

  # Styling for WORK_NOT_WRITABLE.
  # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=1
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=0

  # Styling for SCHOOL.
  typeset -g POWERLEVEL9K_DIR_SCHOOL_VISUAL_IDENTIFIER_EXPANSION='󰑴'
  typeset -g POWERLEVEL9K_DIR_SCHOOL_BACKGROUND=3
  typeset -g POWERLEVEL9K_DIR_SCHOOL_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_SCHOOL_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_SCHOOL_ANCHOR_FOREGROUND=0

  # Styling for SCHOOL_NOT_WRITABLE.
  # typeset -g POWERLEVEL9K_DIR_SCHOOL_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
  typeset -g POWERLEVEL9K_DIR_SCHOOL_NOT_WRITABLE_BACKGROUND=1
  typeset -g POWERLEVEL9K_DIR_SCHOOL_NOT_WRITABLE_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_SCHOOL_NOT_WRITABLE_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_SCHOOL_NOT_WRITABLE_ANCHOR_FOREGROUND=0

  # Styling for HOME.
  typeset -g POWERLEVEL9K_DIR_HOME_VISUAL_IDENTIFIER_EXPANSION='󰠤'
  typeset -g POWERLEVEL9K_DIR_HOME_BACKGROUND=4
  typeset -g POWERLEVEL9K_DIR_HOME_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_HOME_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_HOME_ANCHOR_FOREGROUND=0

  # Styling for HOME_NOT_WRITABLE.
  # typeset -g POWERLEVEL9K_DIR_HOME_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
  typeset -g POWERLEVEL9K_DIR_HOME_NOT_WRITABLE_BACKGROUND=1
  typeset -g POWERLEVEL9K_DIR_HOME_NOT_WRITABLE_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_HOME_NOT_WRITABLE_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_HOME_NOT_WRITABLE_ANCHOR_FOREGROUND=0

  # Styling for DEFAULT.
  typeset -g POWERLEVEL9K_DIR_DEFAULT_VISUAL_IDENTIFIER_EXPANSION=''
  typeset -g POWERLEVEL9K_DIR_DEFAULT_BACKGROUND=4
  typeset -g POWERLEVEL9K_DIR_DEFAULT_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_DEFAULT_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_DEFAULT_ANCHOR_FOREGROUND=0

  # Styling for DEFAULT_NOT_WRITABLE.
  # typeset -g POWERLEVEL9K_DIR_DEFAULT_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
  typeset -g POWERLEVEL9K_DIR_DEFAULT_NOT_WRITABLE_BACKGROUND=1
  typeset -g POWERLEVEL9K_DIR_DEFAULT_NOT_WRITABLE_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_DEFAULT_NOT_WRITABLE_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_DEFAULT_NOT_WRITABLE_ANCHOR_FOREGROUND=0
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/3b1b596b-781b-0ec5-caf8-3fa8b86f04ce.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/e16be755-9335-a02a-35b2-2863f8af8bb0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/275a1a85-f808-094c-2aa8-40668a345c69.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/a097990e-c17c-6377-5516-99b8f6828090.png)

ええやん！！！！

## 真ん中の繋ぎもイジるぞ〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/dbd44551-70e3-a64f-b0ef-c110acfeff29.png)

真ん中の点線2行目に欲しいし, README みたいにしたいな...
うむ！
160行目くらいからの

```zsh:.p10k.zsh
  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·'
  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND=
  typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND=
  if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
    # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE
    # ornaments defined above.
    typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=244
    # Start filler from the edge of the screen if there are no left segments on the first line.
    typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
    # End filler on the edge of the screen if there are no right segments on the first line.
    typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
  fi
```

お前らや！
`POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_CHAR`を足して
if で色もイジってあげれば完璧だ！ってことで

```zsh:.p10k.zsh
  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='─'
  typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND=
  typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_CHAR='·'
  typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND=
  if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
    # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE
    # ornaments defined above.
    typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=244
    # Start filler from the edge of the screen if there are no left segments on the first line.
    typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
    # End filler on the edge of the screen if there are no right segments on the first line.
    typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
  fi

  if [[ $POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_CHAR != ' ' ]]; then
    # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE
    # ornaments defined above.
    typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_FOREGROUND=244
    # Start filler from the edge of the screen if there are no left segments on the first line.
    typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_NEWLINE_SEGMENT_END_SYMBOL='%{%}'
    # End filler on the edge of the screen if there are no right segments on the first line.
    typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_NEWLINE_SEGMENT_START_SYMBOL='%{%}'
  fi
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/7456f702-b977-ada8-eb47-6b57e52d9d3d.png)

うぇ〜い！！！！

## 色を可愛くしちゃおう！

同じ色ばっかでちょ〜っと上がらない君へ
このコマンドで好きな色を探そう！

```bash
for i in {0..255}; do print -Pn "%K{$i}  %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done
```

実行するとこんな感じに出てくるよ〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/ab15faf0-909e-a53c-070a-fd2328827d1f.png)

この色を`..._BACKGROUND`とか`...FOREGROUND`に渡してカラフルにするぞ〜
例として`$HOME`下のディレクトリ表示を218(ピンク)にしてみるぞ〜
`POWERLEVEL9K_DIR_HOME_BACKGROUND=218`にするとできる！

```zsh
  typeset -g POWERLEVEL9K_DIR_HOME_VISUAL_IDENTIFIER_EXPANSION='󰠤'
  typeset -g POWERLEVEL9K_DIR_HOME_BACKGROUND=218
  typeset -g POWERLEVEL9K_DIR_HOME_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_HOME_SHORTENED_FOREGROUND=0
  typeset -g POWERLEVEL9K_DIR_HOME_ANCHOR_FOREGROUND=0
```

こんな感じに色んなやつを設定して〜
完成！

[ちなみに](https://github.com/romkatv/powerlevel10k#set-colors-through-powerlevel10k-configuration-parameters)
> If your terminal supports truecolor, you can use 24-bit colors in the #RRGGBB format in addition to the numbered colors.

ターミナルがサポートしてるなら`#000000`でもかけるよ〜

# もう疲れた...

色々設定したけど, もう十分や...
お腹いっぱい...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199251/43040e73-2ca8-15fc-3c82-099e03b87066.png)


[README](https://github.com/romkatv/powerlevel10k/tree/master?tab=readme-ov-file#batteries-included)を見ると分かるけど, めっちゃあるんよ...
`p10k configure`を使ったよってのはちらほらあったけど, ぱっと見オレオレカスタマイズしてる人いないんよね...
まあ, 探す前にREADME 見て`.p10k.zsh`イジってたからあったところでだったけどw

## 選ばなかった設定知りたい

選ばなかった設定は[internal/wizard.zsh](https://github.com/romkatv/powerlevel10k/blob/master/internal/wizard.zsh)に有りはするんで, 僕みたいに頑張る人は頑張れ！！

# 参考文献

https://github.com/romkatv/powerlevel10k/tree/master

https://qiita.com/obake_fe/items/c2edf65de684f026c59c#%E3%83%86%E3%83%BC%E3%83%9E