我用了很长一段时间的 Powerlevel10k(p10k)。

它几乎是 Zsh 生态里最强的 prompt 主题:快、信息密度高、配置也不算复杂。对大多数人来说,它已经是“终点方案”。

但我还是换成了 Starship。

关于p10k

  • 开箱即用的配置向导(p10k configure)
  • 几乎没有性能损耗
  • Git 状态、语言版本、执行结果,一目了然
  • 和 Oh My Zsh 完美融合

但为啥会还是替换成了 starship

因为fnm和nvm的 node自动切版本

真正让我放弃 p10k 的原因:Node 版本切换带来的“噪音”

用p10k的用户一定对p10k的启动警告不陌生。一旦在p10k启动时终端有信息输出就一定会收到p10k的一大段警告。
当然这个警告是可以关闭的。但是关闭的代价就是真的发生异常那就也都无法得知了。

所以强迫症的我决定。。。把p10k换了!

starship 功能相比p10k要弱一些,所以也就没有过度绑定 shell 行为。它不会试图接管整个终端体验。

但是用久了p10k,已经习惯了它的交互界面,很简单,starship的配置非常的模块化、插件化

这是我的starship的交互界面,不能说100%还原p10k吧,至少七八成是有了

既然都说到这里了,那就分享一下我的配置内容

"$schema" = 'https://starship.rs/config-schema.json'

format = """
$shell\
[ ](fg:color_green bg:#DB3943)\
$os\
$username\
[](fg:#DB3943 bg:#EAE5E5)\
$directory\
[](fg:#EAE5E5 bg:#33658A)\
$git_branch\
$git_status\
[](fg:#33658A bg:#06969A)\
$docker_context\
$conda\
$pixi\
[](bold fg:#06969A)\
$fill\
[](fg:#9A348E)\
$cmd_duration\
[](fg:color_yellow bg:#9A348E)\
$c\
$cpp\
$rust\
$golang\
$php\
$java\
$kotlin\
$haskell\
$python\
$nodejs\
$bun\
$deno\
[](fg:#000000 bg:color_yellow)\
$package\
[](fg:color_bg1)\
$time\
$line_break$character\
"""

palette = 'gruvbox_dark'

[palettes.gruvbox_dark]
color_fg0 = '#fbf1c7'
color_bg1 = '#3c3836'
color_bg3 = '#665c54'
color_blue = '#458588'
color_aqua = '#689d6a'
color_green = '#8ee668'
color_orange = '#d65d0e'
color_purple = '#b16286'
color_red = '#cc241d'
color_yellow = '#d79921'

[fill]
symbol = '-'
style = "bold fg:color_bg1"

[os]
disabled = false
style = "fg:#FFFFFF bg:#DB3943"

[os.symbols]
Windows = "󰍲"
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = "󰀵"
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
AOSC = ""
Arch = "󰣇"
Artix = "󰣇"
EndeavourOS = ""
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"
Pop = ""

[username]
show_always = true
style_user = "fg:#FFFFFF bg:#DB3943"
style_root = "fg:#FFFFFF bg:#DB3943"
format = '[ $user 󰯇 ]($style)'

[shell]
disabled = false
style = "fg:color_bg1 bg:color_green"
format = '[$indicator]($style)'

[directory]
style = "fg:#000000 bg:#EAE5E5"
format = "[  $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"

[directory.substitutions]
"Documents" = "󰈙 "
"Downloads" = " "
"Music" = "󰝚 "
"Pictures" = " "
"Developer" = "󰲋 "

[cmd_duration]
min_time = 0
style = "bg:#9A348E"
format = '[ 󱎫 [$duration ](bg:#9A348E)]($style)'

[git_branch]
symbol = ""
style = "bg:#33658A"
format = '[[ $symbol $branch ](bg:#33658A)]($style)'

[git_status]
style = "bg:#33658A"
format = '[[($all_status$ahead_behind )](bg:#33658A)]($style)'

[package]
symbol = "󰏗"
style = ""
format = "[ $symbol( $version)](bold) "

[nodejs]
symbol = ""
style = "bg:color_blue"
# style = "bg:color_yellow fg:color_red"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[bun]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[deno]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[c]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[cpp]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[rust]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[golang]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[php]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[java]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[kotlin]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[haskell]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[python]
symbol = ""
style = "bg:color_blue"
format = '[[ $symbol( $version) ](fg:color_red bg:color_yellow bold italic)]($style)'

[docker_context]
symbol = ""
style = "bg:#06969A"
format = '[[ $symbol( $context) ](bg:#06969A)]($style)'

[conda]
style = "bg:#06969A"
format = '[[ $symbol( $environment) ](bg:#06969A)]($style)'

[pixi]
style = "bg:#06969A"
format = '[[ $symbol( $version)( $environment) ](bg:#06969A)]($style)'

[time]
disabled = false
time_format = "%F %T"
style = "bg:color_bg1"
format = '[[  $time ](fg:color_fg0 bg:color_bg1)]($style)'

[line_break]
disabled = false

[character]
disabled = false
success_symbol = '[󰄾](bold fg:color_green)'
error_symbol = '[󰄾](bold fg:color_red)'
vimcmd_symbol = '[󰄽](bold fg:color_green)'
vimcmd_replace_one_symbol = '[󰄽](bold fg:color_purple)'
vimcmd_replace_symbol = '[󰄽](bold fg:color_purple)'
vimcmd_visual_symbol = '[󰄽](bold fg:color_yellow)'