Starship 社区预设(Presets)完全指南:从 Nerd Font 符号到 Powerline 主题的安装、挑选与源码机制
本文整理自 Starship 文档站点的预设集合页(英文版与韩文版),系统梳理官方收录的 12 个社区预设、每条预设的安装命令与前置依赖,并结合仓库中的 CLI 定义与 TOML 资源说明它们背后的实现原理。读完本文,你将能熟练使用
starship preset一键换装、判断哪些预设需要 Nerd Font 或右侧提示符支持,并在预设基础上按需二次定制出自己的提示符方案。
Starship 预设是什么
Starship 是一个用 Rust 编写、号称"极简、极快、可无限定制"的跨 shell 提示符(当前仓库根目录的 README.md 即以此作为项目定位)。它默认开箱即用,但为了让不同审美与需求的用户能"一键换装",官方在文档中维护了一份社区预设(Presets)集合。
所谓预设,本质上是一份完整的 Starship TOML 配置文件:它通过改写各模块(module)的 format、symbol、style,甚至顶层 format 与调色板 palette,来整体改变提示符的外观。每个预设都在 docs/presets/(及各语言的翻译目录,如韩文版 docs/ko-KR/presets/)下有一个独立页面,配有效果截图、前置条件与一键安装命令,同时把完整配置发布在 docs/public/presets/toml/ 目录中供直接下载。
集合页本身是一个"陈列柜":你点击某个预设卡片即可看到它的效果图、使用方法和配置全文。若你有想分享的自定义配置,官方欢迎通过修改集合页并提交 Pull Request 的方式收录新预设。
使用预设:starship preset 命令详解
一键写入配置文件
每个预设页都提供同一条形式的命令,例如安装 Nerd Font Symbols 预设:
starship preset nerd-font-symbols -o ~/.config/starship.toml
参数含义如下:
| 参数 | 说明 |
|---|---|
preset |
Starship CLI 的子命令,用于把内置预设打印出来或写入文件 |
<preset-name> |
预设名,即命令的必填位置参数 |
-o, --output <FILE> |
将预设配置输出到指定文件(默认输出到 stdout) |
-f, --force |
当目标输出文件已存在时强制覆盖(需配合 --output 使用) |
-l, --list |
列出所有可用预设名称,不执行输出 |
以上命令行选项的定义可在 src/main.rs 中看到:Preset 子命令由 clap 解析,name 是一个 value_enum(映射到 print::Preset 枚举),output 与 force 相互配合用于把配置落盘,list 用于枚举全部预设;实际执行逻辑则分发到 src/print.rs 的 preset_command。
因此常见用法还有几种变体:
# 仅把预设内容打印到终端,先看看长什么样
starship preset tokyo-night
# 列出仓库内置的全部预设名
starship preset --list
# 已有配置文件时,用 -f 强制覆盖
starship preset pastel-powerline -o ~/.config/starship.toml -f
提示:
starship preset只是生成配置文件,并不会即时刷新当前 shell 的提示符。覆盖~/.config/starship.toml后,请重开终端或执行exec $SHELL(视 shell 而定)让新配置生效。
手动下载安装
如果不方便执行命令,每个预设页还提供对应 TOML 文件的直接下载链接。在仓库中,这些文件集中存放于 docs/public/presets/toml/,共有 bracketed-segments.toml、catppuccin-powerline.toml、gruvbox-rainbow.toml、jetpack.toml、nerd-font-symbols.toml、no-empty-icons.toml、no-nerd-font.toml、no-runtime-versions.toml、pastel-powerline.toml、plain-text-symbols.toml、pure-preset.toml、tokyo-night.toml 共 12 份。这些文件的头部通常带有:
"$schema" = 'https://starship.rs/config-schema.json'
即声明其遵循 config-schema.json(仓库根下 docs/public/ 亦保留了这份 schema),许多编辑器可据此获得自动补全与校验。下载后将其内容覆盖写入 ~/.config/starship.toml 即可达到与命令安装相同的效果。
内置预设清单
通过 starship preset --list 可以拿到与仓库一致的完整名单,共 12 个:
nerd-font-symbols、no-nerd-font、bracketed-segments、plain-text-symbols、no-runtime-versions、no-empty-icons、pure-preset、pastel-powerline、tokyo-night、gruvbox-rainbow、jetpack、catppuccin-powerline。
预设速查与挑选总览
| 预设 | 设计目标 | 官方声明的关键前置条件 | 主要影响面 |
|---|---|---|---|
| Nerd Font Symbols | 让各模块符号统一为 Nerd Font 字形 | 终端需安装并启用 Nerd Font(示例为 Fira Code Nerd Font) | 全局各模块的 symbol |
| No Nerd Fonts | 提示符完全不使用 Nerd Font 字形 | 无 | 各模块 symbol,限制为 emoji 与 powerline 字符集 |
| Bracketed Segments | 所有内置模块用方括号包裹段落,替代 "via"/"on" 等措辞 | 无 | 所有内置模块的 format |
| Plain Text Symbols | 符号全部改为纯文本 | 无(适合无法使用 Unicode 的环境) | 各模块 symbol |
| No Runtime Versions | 隐藏语言运行时版本号 | 无(推荐容器/虚拟化环境使用) | 语言类模块的 format(移除 $version) |
| No Empty Icons | 无法探测到工具集版本时连图标也不显示 | 无 | 语言/工具类模块的 format 括号化 |
| Pure Prompt | 复刻 Pure 的外观与交互行为 | 无 | 顶层 format、character、git_*、directory 等 |
| Pastel Powerline | 仿 M365Princess 的柔和 Powerline 风格 | 终端需启用 Nerd Font(示例为 Caskaydia Cove Nerd Font) | 顶层 format、调色板与路径替换 |
| Tokyo Night | 以 tokyo-night VSCode 主题为灵感 | 终端需启用 Nerd Font | 顶层 format、调色板 |
| Gruvbox Rainbow | 融合 Pastel Powerline 与 Tokyo Night 的彩虹分段 | 终端需启用 Nerd Font | 顶层 format、调色板 |
| Jetpack | 灵感来自 geometry/spaceship 的伪极简预设 | 需 shell 支持 right-prompt;推荐 Jetbrains Mono;直接使用终端配色主题 | 顶层 format、右侧提示符、符号 |
| Catppuccin Powerline | 用 Catppuccin 调色板轻改 Gruvbox Rainbow | 终端需启用 Nerd Font | 顶层 format、palette(Mocha/Frappé/Macchiato/Latte) |
符号与排版类预设
这一类预设不追求色彩主题,而是聚焦"字形"与"排版",适合对终端字体或屏幕空间有特定要求的场景。
Nerd Font Symbols(Nerd Font 符号)
各模块默认符号可能来自不同字体集或为纯文本,本预设将每个模块的图标统一替换为 Nerd Font 字形,让提示符具备更完整的图标观感(具体每个模块的符号改动可见 docs/presets/nerd-font.md 内嵌的完整 TOML,即 nerd-font-symbols.toml)。
前置条件是在终端里安装并启用一款 Nerd Font(示例图中使用的是 Fira Code Nerd Font)。安装命令:
starship preset nerd-font-symbols -o ~/.config/starship.toml
No Nerd Fonts(完全不用 Nerd Font)
如果嫌安装 Nerd Font 麻烦,或希望提示符在未安装 Nerd Font 的机器上(例如远程服务器)也不会出现缺字方框,可以选用本预设。它把各模块符号收敛到 emoji 与 powerline 字符集之内,因此在没有 Nerd Font 的情况下也能正确显示全部模块符号(no-nerd-font.toml)。文档同时提示:该预设计划在未来的某个 starship 版本中成为默认预设。安装:
starship preset no-nerd-font -o ~/.config/starship.toml
Bracketed Segments(方括号化分段)
Starship 默认在描述模块时使用 "via"、"on"、"with" 等连接词(例如 via 20.11.0)。本预设把所有内置模块的输出改为 [……] 方括号包裹的形态,视觉上更整齐、也更贴近某些传统提示符的审美。以 bracketed-segments.toml 中的片段为例:
[aws]
format = '\[$symbol($profile)($region)($duration)\]'
[buf]
format = '\[$symbol($version)\]'
[bun]
format = '\[$symbol($version)\]'
[c]
format = '\[$symbol($version(-$name))\]'
可以看到做法是对每个模块重写 format:需要加显式转义的方括号文本 \[ \],再用 $style 沿用各模块原有颜色;cmd_duration 这类带前缀符号的模块则写成 '\[⏱ $duration\]'。安装命令:
starship preset bracketed-segments -o ~/.config/starship.toml
Plain Text Symbols(纯文本符号)
若终端环境无法可靠显示 Unicode(例如某些老旧终端或字符集受限环境),本预设把每个模块的符号替换为可读的纯英文文本标签(如 ->、λ 之外的 ASCII 风格标签,具体替换见 plain-text-symbols.toml),让提示符在纯 ASCII 条件下依然信息完整。安装:
starship preset plain-text-symbols -o ~/.config/starship.toml
信息密度调整类预设
No Runtime Versions(隐藏运行时版本)
如果你经常出入容器、虚拟机等隔离环境,本预设正合适:它把 bun、c、cobol、dart、deno、dotnet、elixir、elm、golang、python、rust 等大量语言模块的 format 中 $version 变量删去,只保留符号与名字。以 no-runtime-versions.toml 为例:
[bun]
format = "via $symbol"
[c]
format = "via $symbol($name)"
[dotnet]
format = "$symbol(🎯 $tfm )"
既保留了"当前目录存在哪种工具链"的提示,又避免了"在容器里看到与宿主机无关的版本号"的噪声。安装:
starship preset no-runtime-versions -o ~/.config/starship.toml
No Empty Icons(探测不到就不显示图标)
默认情况下,部分语言模块只要识别到工具集特征文件(如 package.json、Cargo.toml)就会显示该工具的图标,即使未能进一步解析出版本号。本预设改变这一行为:只有当工具集信息(例如版本)能被真实探测到时,才渲染图标与段落。实现上同样是把相关模块的 format 整体用圆括号括起来作为可选段落,见 no-empty-icons.toml:
[bun]
format = '(via $symbol($version ))'
[dart]
format = '(via $symbol($version ))'
[dotnet]
format = '(via $symbol($version )(🎯 $tfm ))'
由于整段被 ( ) 包成"可选"状态,Starship 只有在 $version 等变量实际存在时才渲染整段。安装:
starship preset no-empty-icons -o ~/.config/starship.toml
复刻经典:Pure Prompt
Pure 是 Zsh 生态中极简提示符的代表。本预设在 Starship 里复刻 Pure 的外观与行为:顶部只保留用户名、主机名、目录、Git 状态、命令耗时等必要信息,换行后用一个紫色/红色的 ❯(错误时变红、vim 命令模式变 ❮)作为输入符。其顶层 format 结构与关键段落来自 pure-preset.toml:
format = """
$username\
$hostname\
$directory\
$git_branch\
$git_state\
$git_status\
$cmd_duration\
$line_break\
$python\
$character"""
[directory]
style = "blue"
[character]
success_symbol = "❯"
error_symbol = "❯"
vimcmd_symbol = "❮"
[git_status]
format = "[(*$conflicted$untracked$modified$staged$renamed$deleted) ($ahead_behind$stashed)]($style)"
style = "cyan"
stashed = "≡"
注意 git_status 中各冲突状态被设为占位"零宽字符",配合纯色符号实现 Pure 那种"无文字噪音"的极简观感。安装:
starship preset pure-preset -o ~/.config/starship.toml
从配置看,该预设还示范了模块级 format 的写法:$character 里的 success_symbol/error_symbol/vimcmd_symbol 分别对应普通命令、失败命令与 vim 模式(详见 character.rs 与 src/modules/character.rs 的实现语义)。
Powerline 风格主题类预设
Pastel Powerline
灵感来自 M365Princess 主题,用柔和粉彩色系的 powerline 尖角衔接各段。它的另一个教学价值是演示了 Starship 的路径替换(path substitution)能力,文档据此展示了目录显示时的映射写法(配置全文见 pastel-powerline.toml)。前置条件是终端启用 Nerd Font(示例使用 Caskaydia Cove Nerd Font)。安装:
starship preset pastel-powerline -o ~/.config/starship.toml
Tokyo Night
灵感来自 tokyo-night VSCode 主题的深蓝夜色配色,输出深色背景下高对比的蓝紫色系提示符(配置见 tokyo-night.toml)。前置条件:终端启用 Nerd Font。安装:
starship preset tokyo-night -o ~/.config/starship.toml
Gruvbox Rainbow
它在设计上强烈参考了 Pastel Powerline 与 Tokyo Night,把二者的彩虹分段思路移植到 Gruvbox 复古暖色系上,形成一条自左向右、按模块分色的"彩虹"提示符(配置见 gruvbox-rainbow.toml)。前置条件:终端启用 Nerd Font。安装:
starship preset gruvbox-rainbow -o ~/.config/starship.toml
Jetpack
灵感来自 geometry 与 spaceship 提示符的**伪极简(pseudo minimalist)**预设。它与多数主题类预设不同:不使用自定义调色板,而是直接继承终端自身的配色主题,因此能无缝融入你现有的配色方案。它有两条明确前提:
- shell 需支持 right-prompt(右侧提示符)(Starship 的右提示符相关说明可参考
advanced-config,仓库对应文档为 docs/advanced-config/README.md); - 推荐搭配 Jetbrains Mono 字体获得最佳观感。
安装:
starship preset jetpack -o ~/.config/starship.toml
由于 Jetpack 同时使用右侧提示符,安装后若提示符右侧没有内容,请检查所用 shell 的初始化脚本是否已启用右提示符渲染。
Catppuccin Powerline
可以看作是 Gruvbox Rainbow 的"换皮"最小化改版:用 Catppuccin 主题调色板替换原有配色,结构上沿用 Gruvbox Rainbow 的分段骨架。它以一段自左向右的 powerline 尖角串联 os、username、directory、git_branch、语言栈、conda、time、cmd_duration 等模块,例如 catppuccin-powerline.toml 顶层所示:
format = """
\
$os\
$username\
\
$directory\
\
$git_branch\
$git_status\
\
...
\
$cmd_duration\
$line_break\
$character"""
palette = 'catppuccin_mocha'
它默认使用 Catppuccin 的 Mocha 口味(flavor)。若想换成其他口味,只需修改配置文件中的 palette 值,可选值为:
catppuccin_mochacatppuccin_frappecatppuccin_macchiatocatppuccin_latte
例如把最后一行改为 palette = 'catppuccin_latte' 即可得到适合浅色终端的变体。前置条件:终端启用 Nerd Font。安装:
starship preset catppuccin-powerline -o ~/.config/starship.toml
从源码看预设机制
在 Starship 中,"预设"不是独立运行的程序,而是由 CLI 子命令把编译进二进制的 TOML 文本按需输出:
- 命令与参数定义在 src/main.rs(
Commands::Preset),要求预设名、可选输出路径-o、强制覆盖-f、列举-l; - 输出与枚举逻辑在 src/print.rs(
preset_command),其Preset枚举的每个变体对应当前仓库 docs/public/presets/toml/ 下的同名配置资源; - 因此
starship preset <name>生成的内容与 docs 页面内嵌展示的 TOML(形如<<< @/public/presets/toml/xxx.toml的引用块)完全一致,文档与二进制保持同源,避免了"文档示例与真实配置漂移"的问题。
这也解释了为什么安装预设后一切皆可继续微调:预设输出的就是普通 starship.toml 语法,之后你仍然可以用 [module] 覆盖个别段落,或参考 config 与 advanced-config 的说明自行增删模块。建议在应用预设前先备份原配置文件(例如 cp ~/.config/starship.toml ~/.config/starship.toml.bak),不满意时可随时还原。
参与社区:分享你自己的预设
预设文化是 Starship 社区协作的一部分。集合页(docs/presets/README.md)在开篇即说明:如果你有想分享的预设,请修改该集合页并提交 Pull Request。一个完整的预设投稿通常需要同时准备:
- 面向读者讲解用法与前置条件的独立 Markdown 页(参考 docs/presets/pure-preset.md 的结构);
- 与该页一一对应的完整 TOML 资源(放至 docs/public/presets/toml/);
- 效果截图资源(放至 docs/public/presets/img/),供集合页陈列;
- 在集合页追加一条带截图入口的条目,其余语言目录(如 docs/ko-KR/presets/、docs/zh-CN/presets/)随之同步。
总而言之,Starship 预设把"折腾提示符"从逐行手写配置变成了"浏览陈列柜 → 一键安装 → 按需微调"的轻松流程。无论你偏好 Nerd Font 图标、极简 Pure、还是 Powerline 彩虹主题,都可以先从 docs/presets/README.md 的 12 个预设中挑一个开始,再借助本文整理的源码路径深入理解它到底改了哪些配置,最终定制出属于自己的专属提示符。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00