Starship Jetpack 预置方案详解:基于右侧提示符的伪极简终端配置
导读
本文系统讲解 Starship 社区预置配置 Jetpack Preset:这是一套"伪极简"(pseudo minimalist)风格的完整 prompt 方案,受 geometry 与 spaceship 两款经典 Zsh 主题启发,将语言版本、Git 状态等"重信息"全部迁移到右侧提示符,左侧只保留最小必要的机器上下文与一个符号,从而获得极简外观与完整信息量的平衡。读完本文你将掌握:Jetpack 预置的完整 TOML 结构、starship preset 的安装与底层执行机制、每个模块的样式与符号含义,以及如何在保留其风格的前提下按需二次定制。
Jetpack Preset 的设计理念与适用场景
Jetpack 是收录在 docs/presets/README.md 中的社区预置之一,其核心理念可概括为三点:
- 伪极简而非真极简:它不是把模块删光,而是利用"右侧提示符"这一界面资源,把信息量转移到终端右缘,视觉上保持左侧干净;
- 适配终端配色主题:预置中所有颜色均使用 Starship 的具名颜色(
bright-yellow、blue、italic green、purple等),没有写死十六进制色值,因此整体观感会随你终端的 color scheme 而变(原文档明确提示 "Jetpack uses the terminal's color theme"); - 面向能渲染右侧提示符的 shell 环境,并推荐 Jetbrains Mono 等具备丰富字形(含特殊符号)的等宽字体以获得最佳显示效果。
Jetpack 使用终端自身的配色主题,改变终端主题即可整体换肤,无需修改配置文件。
界面形态与字体前提
以下是 Jetpack 在文档中呈现的实际运行效果:
图中可以看到典型的"双行 + 右提示符"布局:信息被组织到 right_format 渲染的右侧区域。使用前需要满足两个前置条件(对应 docs/presets/jetpack.md 原文的 Prerequisite 小节):
- shell 需支持右侧提示符,Starship 对右侧提示符的启用方式可参考 高级配置文档;若当前 shell 不支持 right prompt,Jetpack 的"右移重信息"设计将无法生效;
- 推荐安装 Jetbrains Mono(也可选择其他覆盖字形较全的字体),因为预置大量使用了
◎ ○ ■ ▸ ◈ △ ⋯等非 ASCII 符号。
快速安装与验证
原文档给出的安装命令是一条命令完成覆盖写入:
starship preset jetpack -o ~/.config/starship.toml
-o(即 --output)会把预置内容写到指定路径而非打印到标准输出。若该文件已存在,写入时会报错,需要配合 --force 强制覆盖:
starship preset jetpack -o ~/.config/starship.toml --force
在应用前你可以先做三件事:
# 1. 查看当前所有可用预置名称
starship preset --list
# 2. 把预置内容打印到标准输出,快速预览再决定是否覆盖
starship preset jetpack
# 3. 确认当前生效配置(合并默认值后的完整视图)
starship print-config
这一子命令的实现位置在 main.rs:Preset 命令接收可枚举的 name、-o/--output 输出路径与 -f/--force 强制覆盖参数;实际执行逻辑位于 print.rs 的 preset_command,它通过 shadow::get_preset_content(name) 取出构建期嵌入二进制的预置内容,再经 crate::utils::write_file_atomic 原子写入目标文件(force=true 时允许覆盖已存在文件)。也就是说,TOML 预置文件在编译时随 shadow-rs(见 Cargo.toml)打进二进制,离线也能随时还原配置。
如果你不希望覆盖现有配置,也可以直接从仓库获取预置原文,手动合并到自己想用的配置片段中:
- 预置 TOML 源文件:docs/public/presets/toml/jetpack.toml
- 预置使用说明:docs/presets/jetpack.md
顶层布局:双段 format 与两行提示符
Jetpack 的顶层配置(预置文件开头部分)决定了整体骨架:
# version: 1.0.0
"$schema" = 'https://starship.rs/config-schema.json'
add_newline = true
continuation_prompt = "▸▹ "
format = """($nix_shell$container$fill$git_metrics\n)$cmd_duration\
$hostname\
$localip\
$shlvl\
$shell\
$env_var\
$jobs\
$sudo\
$username\
$character"""
right_format = """
$singularity\
$kubernetes\
$directory\
...(省略,见下文详解)\
$battery\
$time"""
要点解读:
add_newline = true:每条 prompt 前插入空行,制造"段落式"阅读节奏;continuation_prompt:多行输入续行时显示为浅白色▸▹,随环境 dimmed/白色;format(左侧主提示符)内部用\n拆成两行:第一行渲染$nix_shell、$container,中间以[fill](配置为单个空格symbol = ' ')把$git_metrics推到本行最右端,形成"左上轻量环境信息 + 右上 Git 增删统计";换行后第二行从左到右依次为命令耗时、主机名、本地 IP、shell 层级、shell 类型、环境变量、后台任务、sudo 状态、用户名,最后以$character收尾;right_format:右侧提示符集中承载剩余的全部模块,按"虚拟化/基础设施 → 目录与版本控制 → 各语言运行时 → 云与工具 → 系统状态"的顺序组织。
命令耗时模块
[cmd_duration]
format = "◄ $duration "
只输出斜体白的 ◄ 耗时 片段,长度紧贴第二行行首,属于典型的极简信息提示。
左侧提示符核心模块逐项拆解
character:随成功/失败切换的几何符号
[character]
format = "$symbol "
success_symbol = "◎"
error_symbol = "○"
vimcmd_symbol = "■"
# not supported in zsh
vimcmd_replace_one_symbol = "◌"
vimcmd_replace_symbol = "□"
vimcmd_visual_symbol = "▼"
- 命令执行成功显示亮黄色加粗斜体的
◎,失败变为紫色斜体○; - 进入 Vim 命令模式显示绿色
■;替换、逐字符替换、可视模式分别使用□、◌、▼; - 注释明确说明 zsh 下部分 vim 替换符号不受支持,是预置作者针对多 shell 兼容性留下的实践说明。
username 与 sudo
[username]
style_user = "bright-yellow bold italic"
style_root = "purple bold italic"
format = "⭘ $user "
disabled = false
show_always = false
[sudo]
format = "$symbol"
style = "bold italic bright-purple"
symbol = "⋈┈"
disabled = false
- 普通用户为亮黄色粗斜体
⭘ 用户名,root 使用紫色粗斜体,show_always = false保证非必要(如 ssh/root 场景)时不显示; - sudo 凭证缓存有效时显示亮紫色
⋈┈小标记。
环境与机器上下文
[env_var.VIMSHELL]
format = "$env_value"
style = 'green italic'
左侧提示符还监听 VIMSHELL 环境变量,命中时以绿色斜体显示其值(便于提示你正处于 Vim 内嵌 shell)。
[localip]
ssh_only = true
format = " ◯$localipv4"
disabled = false
localip 默认关闭,此处显式开启,且 ssh_only = true:只有 SSH 会话才显示品红色 IPv4 地址,本地终端不打扰。
[jobs]
format = "$symbol$number "
style = "white"
symbol = "▶"
后台任务数超过阈值时,以蓝色斜体 ▶ + 白色数字呈现。
目录模块:仓库根与截断策略
[directory]
home_symbol = "⌂"
truncation_length = 2
truncation_symbol = "□ "
read_only = " ◈"
use_os_path_sep = true
style = "italic blue"
format = '$path$read_only'
repo_root_style = 'bold blue'
repo_root_format = '$before_root_path$repo_root$path$read_only △'
- 家目录缩略为
⌂;路径过长时按truncation_length = 2只保留最后两级并用□表示省略; use_os_path_sep = true保证截断按各平台真实路径分隔符进行;- 在 Git 仓库中,仓库根以加粗蓝色高亮,前面的上级路径弱化,并在行尾追加亮蓝色
△标记,与 Git 分支模块的符号体系呼应(repo_root_format使用$before_root_path/$repo_root等插槽拆分前后样式); - 只读目录会显示
◈前缀。
右侧提示符:Git / 版本控制信息模块
右侧的核心是把目录与 Git 全套状态放在一起,且 git_branch 采用了"只显示非主干分支"的策略:
[git_branch]
format = " $branch(:$remote_branch)"
symbol = "△"
style = "italic bright-blue"
truncation_symbol = "⋯"
truncation_length = 11
ignore_branches = ["main", "master"]
only_attached = true
ignore_branches = ["main", "master"]:在主干分支上不输出分支名,保持干净;only_attached = true:HEAD 处于 detached 状态时不显示分支模块;- 长分支名超过 11 字符用
⋯截断,同时$remote_branch显示与远端分支的对应关系。
git_metrics:不依赖 git status 的增删统计
[git_metrics]
format = '(▴$added)(▿$deleted)'
added_style = 'italic dimmed green'
deleted_style = 'italic dimmed red'
ignore_submodules = true
disabled = false
该模块统计自上次提交以来新增/删除行数:绿色 ▴ + 新增数、红色 ▿ + 删除数,均为斜体弱化;ignore_submodules = true 不计子模块,且该模块默认关闭、此处显式开启。它被放在第一行右侧(fill 之后),即使不做文件操作也能随时看到代码量变化。
git_status:细粒度文件状态矩阵
[git_status]
style = "bold italic bright-blue"
format = "(⎪$ahead_behind$staged$modified$untracked$renamed$deleted$conflicted$stashed⎥)"
conflicted = "◪◦"
ahead = "▴│[${count}│](italic green)"
behind = "▿│[${count}│](italic red)"
diverged = "◇ ▴┤[${ahead_count}│▿┤${behind_count}│](italic bright-magenta)"
untracked = "◌◦"
stashed = "◃◈"
modified = "●◦"
staged = "▪┤[$count│](italic bright-cyan)"
renamed = "◎◦"
deleted = "✕"
状态整体包裹在亮蓝色粗斜体的 ⎪ ... ⎥ 括号中,每类状态配独立符号:未跟踪 ◌◦(亮黄)、已暂存 ▪┤n│(亮青)、已修改 ●◦(黄)、冲突 ◪◦(亮品红)、远端领先/落后分别用绿色/红色 ▴│n│ / ▿│n│,分叉则显示菱形合并计数。这套符号在视觉上自成体系,与分支 △、目录根 △ 的"几何图形"语言保持一致。
hg_branch / pijul_channel / jj_bookmark / docker_context
右提示符同样覆盖了其他版本控制工具:
- 预置针对 Jujutsu 提供了独立的
jj_bookmark配置(预置文件第 312-318 行),与git_branch风格统一(△符号、亮蓝斜体、⋯截断、忽略main/master并显示远端与分叉溢出计数); - Mercurial 分支
$hg_branch、Pijul 频道$pijul_channel在right_format中直接占位(使用各自默认样式); docker_context使用◧符号显示当前 Docker 上下文,适合在多个集群上下文间切换的场景。
右侧提示符:语言运行时与版本模块
Jetpack 对主流语言模块统一做了"短标签 + 纯版本号"的重写。通过 version_format = "${raw}" 关闭 Starship 默认的 v 前缀语义化版本格式,直接输出裸版本号,去掉 via/on 等连接词,是全篇信息瘦身的关键手法。
以几个典型模块为例:
[deno]
format = " deno ∫ $version"
version_format = "${raw}"
[lua]
format = " lua ${symbol}${version}"
symbol = "⨀ "
style = "bold bright-yellow"
[nodejs]
format = " node ◫ ($version)"
version_format = "${raw}"
detect_files = ["package-lock.json", "yarn.lock"]
detect_folders = ["node_modules"]
detect_extensions = []
- Node.js 在 nodejs 模块配置 中把探测范围精确收敛到
package-lock.json/yarn.lock/node_modules,且detect_extensions = []表示不再仅凭.js后缀就触发——避免在任意含 JS 文件的目录都被"node 模块"打扰,属于对 Starship Node.js 模块默认探测规则 的行为收紧; - 其余语言模块按同构模式定制:Python
py配⌉⌊符号与亮黄加粗、Rubyrb配◆红色、Rustrs配⊃红色、Swiftsw配◁、Bun 与 Node 同款绿色◫、Package 模块用◨+ 弱化黄色标注当前包版本; - 还有一批"单符号零文字"式极简模块,直接在符号后挂版本或环境名,例如 C/C++
ℂ、Elixir△(含 OTP 版本)、Elm◩、Go∩、Haskell❯λ、Java∪、Julia◎、Nim▴▲▴、Dart◁◅、Gradle/Maven 等由 Java 生态配置 系列承担; - 环境管理器类:Conda
◯、Pixi■、Spack◇、Nix shell✶(区分纯/非纯/未知状态,见 nix_shell 模块)、Guix shell 亦有占位。
右侧提示符:云、系统与时间信息
[aws]
disabled = true
format = " aws $symbol $profile $region"
style = "bold blue"
symbol = "▲ "
[memory_usage]
symbol = "▪▫▪ "
format = " mem ${ram}( ${swap})"
- 云模块(AWS/GCloud/OpenStack/Azure)统一放置在右提示符末段;其中
aws在预置中 disabled = true,即默认不打扰,需要时删除该字段即可启用; memory_usage以▪▫▪符号显示 RAM(与可选的 swap);battery使用纯字符进度块█ ▃ ░配合阈值分档着色(低于 20% 红、60% 亮紫、70% 黄),full_symbol = "█"保证各段宽度稳定;- 时间模块在右侧末尾
%R(24 小时制 HH:MM),utc_time_offset = "local"跟随本地时区,斜体弱化置灰。
深入理解:颜色全部来自终端主题
对比预置全文可以发现:没有任何一个 style 使用 #hex 颜色,所有颜色均为 bright-yellow、blue、purple、green、red、white、magenta、cyan 等 ANSI 具名色,再叠加 bold/italic/dimmed 样式。这正是原文 "Jetpack uses the terminal's color theme" 的源码级印证——Starship 会把具名颜色映射到你终端配色方案中对应的 16 色槽位。因此:
- 切换亮色/暗色终端主题,Jetpack 自动"跟随换肤",无需改配置;
- 这也意味着想要精确还原文档截图观感,需要你的终端主题本身有协调的 16 色调色板;若某个槽位颜色异常,应去调整终端主题而非预置文件。
按需定制:保留骨架,微调细节
Jetpack 文件结构清晰,建议按"三段式"定位修改:
- 想加/减模块:编辑顶层
format与right_format中的$模块名占位,例如希望左侧也出现 Git 分支,把$git_branch从right_format移到format的$username之前; - 想改符号/颜色:进入对应
[模块名]表,替换symbol或style字段,全部使用具名色即可继续跟随终端主题; - 想调整间距:模块
format中的前导空格/尾随空格直接控制模块间距,例如" deno ..."的起始空格即模块与前一模块的分隔。
修改后用 starship print-config 观察合并后的最终配置,再开新终端即可验证。若误改,随时可以用最初的 starship preset jetpack -o ~/.config/starship.toml --force 一键还原官方原版。
小结
Jetpack Preset 用一份约 340 行的 TOML 示范了 Starship 三件高级能力的组合用法:右侧提示符(right_format)做信息分流、fill 模块做行内右对齐、具名色体系做主题自适应。它既是开箱即用的伪极简主题,也是一份绝佳的"Starship 高级布局教学样本"——阅读 docs/presets/README.md 可对比其与 Tokyo Night、Gruvbox Rainbow、Pastel Powerline 等其他预置在 format 策略上的差异,或结合 config 参考文档 按需扩展。
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
