Starship Jetpack Preset 全解析:用终端原生配色打造伪极简双栏提示符
2026/9/8 16:28:52 网站建设 项目流程

Starship Jetpack Preset 全解析:用终端原生配色打造伪极简双栏提示符

【免费下载链接】starship☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship

Jetpack 是 Starship 社区预设集合中的一款「伪极简(pseudo-minimalist)」主题,灵感来自 geometry 与 spaceship 两款知名 zsh 提示符方案。本文以官方预设说明及随附的 jetpack.toml 为骨架,逐项讲解它的设计理念、启用方法、配置结构与源码实现原理,读完即可安装使用,并能在其基础上按需定制属于你自己的双栏提示符。

核心特征一句话概括:Jetpack复用终端的配色方案(颜色全部取自基础 ANSI 色名),把 Git、语言版本、云环境等大量信息移交到右侧提示符(right prompt),主提示行只保留最精简的动态要素,从而实现视觉克制、信息不减的「伪极简」。

设计理念:什么是“伪极简主义”

Jetpack 所属的预设集由社区提交并收录在 docs/presets/README.md 中,每条预设均以一张实际截图 + 完整 TOML 配置文件的形式对外发布。Jetpack 的设计参考了两个经典 zsh 主题:

  • geometry:以极简著称,把大量信息藏进右侧或按需显示;
  • spaceship:以「符号 + 语义段」的方式组织提示符信息。

Jetpack 融合两者:主提示行(format)保持短小,仅保留 shell 环境、任务、用户名、命令耗时与 prompt 字符;右侧(right_format)则几乎收容了全部上下文信息——工作目录、Git 状态、语言运行时版本、容器与云环境、电池电量等。由于右侧信息默认在输入换行前不会影响视觉主体,因此从观感上是「极简」的,但信息量并不打折,这正是「伪极简」的由来。

与纯极简配置不同的是,Jetpack 的每条配置都通过基础 ANSI 颜色词(如bright-yellowpurpleblue)指定样式,而非硬编码十六进制色值。这意味着预设不绑定固定调色板,而会跟随你终端主题的 16 色方案自动换肤——官方文档因此专门注明:Jetpack 使用终端的配色方案

前置条件

要完整启用 Jetpack 的两栏布局,需要满足两个条件:

1. 支持右侧提示符(right prompt)的 shell

Jetpack 把绝大多数模块放在right_format中,而右侧提示行依赖 shell 自身的渲染通道。从 src/init 下的初始化脚本可以看到 Starship 为不同 shell 分别挂接右提示的实现:

  • zsh / fish:通过各自的右提示钩子输出--right内容(如 starship.fish 中的fish_right_prompt);
  • bash:在启用ble.sh增强时通过bleopt prompt_rps1渲染(见 starship.bash);
  • elvish:通过edit:rprompt呈现(见 starship.elv)。

因此请确认你的 shell 具备右提示能力(zsh、fish 是常见首选);若 shell 不支持右提示,Jetpack 右侧的大量模块将无法显示,只保留主提示行,效果会大打折扣。

2. 推荐使用 JetBrains Mono 字体

Jetpack 的符号体系(等)依赖等宽字体中的细线/几何字符排版。官方建议使用JetBrains Mono,以保证▸▹⎪…⎥这类边框与箭头符号的对齐效果。普通等宽字体虽可运行,但观感可能参差。

安装与启用

Jetpack 与其他预设一样,通过 Starship 内置的preset子命令安装。在已安装并初始化 Starship 的前提下执行:

starship preset jetpack -o ~/.config/starship.toml

该命令会把内置的 jetpack 配置写入~/.config/starship.toml,随后重开 shell 或执行exec $SHELL即可生效。

如果只想把配置打印到标准输出查看,去掉-o参数即可:

starship preset jetpack

从 src/main.rs 的 CLI 定义可以看出,preset子命令还支持以下能力:

  • -o, --output <FILE>:把预设内容写入指定文件;
  • -f, --force:当输出文件已存在时强制覆盖(该选项依赖--output);
  • -l, --list:列出所有可用预设名称。

对应的实现位于 src/print.rs:预设内容读取自编译期嵌入的 TOML,写文件走原子写入write_file_atomic,从而避免写一半留下损坏配置;而-l列表则直接枚举全部内置预设。仓库自带的单元测试(如 src/print.rs)验证了「输出到文件的内容与docs/public/presets/toml/…中源码完全一致」这一约束。

手动回退方案是直接下载 jetpack.toml 覆盖到你的配置路径(Linux 下一般为~/.config/starship.toml,macOS 为~/.config/starship.toml),之后执行starship config可校验配置是否可被正确解析。

配置文件逐段精讲

jetpack.toml 首行声明了 schema 版本号,配置主体可以分成三块:全局参数与主提示行format、右侧提示行right_format、以及逐模块的定制段落。下面按顺序解读核心片段。

全局参数与主提示行(左侧)

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""" [fill] symbol = ' '
  • add_newline = true:每条命令输出前自动换行,保持行首清爽(这也是 Starship 默认值,见 src/configs/starship_root.rs)。
  • continuation_prompt:多行命令续行时显示▸▹(dimmed white),替代默认的
  • format:主提示行自上而下依次渲染nix_shellcontainerfillgit_metrics,随后是cmd_durationhostnamelocalipshlvlshellenv_varjobssudousernamecharacter
    • 第一行nix_shell/container独立成行的(括号内内容结尾紧跟\n),即以“状态行”形式汇报 Nix shell 与容器信息;$fill将剩余宽度填满为空格,而git_metrics(新增/删除行数)被放在同行的末尾,视觉上“顶到右边”。
    • 第二行才是真正的交互提示行。值得注意:普通配置中常见的directorygit_branch并不在这里——它们被刻意移到了右提示。
  • [fill]symbol = ' ':使用空格填充主提示行第一行中段,让git_metrics与左侧状态拉开距离。

右侧提示行:信息的主战场

right_format = """ $singularity\ $kubernetes\ $directory\ ... $time"""

right_format的顺序即右侧信息从左到右的排列次序,依次覆盖以下六类信息:

  1. 环境与编排singularitykubernetesdocker_contextnix_shell(容器/虚拟化上下文);
  2. 版本控制directoryvcshfossil_branchgit_branchgit_commitgit_stategit_statushg_branchpijul_channel——几乎所有 VCS 工具链都被放进了右侧;
  3. 包管理package(当前目录的项目包版本);
  4. 语言运行时ccppcmakecoboldamldartdenodotnetelixirelmerlangfennelfortrangolangguix_shellhaskellhaxehelmjavajuliakotlingradleluamavennimnodejsbunocamlopaperlphppulumipurescriptpythonrakurlangredrubyrustscalasolidityswiftterraformvlangvagrantxmakezig等一整套语言工具链;
  5. 包管理器与运行环境bufcondapiximesonspack
  6. 系统状态memory_usageawsgcloudopenstackazurecrystalcustomstatusosbatterytime

也就是说:你 cd 进任意项目后,语言版本、Git 状态、云平台 profile、内存占用、电量与时间都会在右侧自动汇总展示,主提示行则保持只有一个prompt 字符的极简形态。

关键模块的定制细节

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 中不受支持(仅部分 shell 能区分多种 vim 子模式),若你在 zsh 使用 Jetpack,这部分符号将不会按预期切换。

username 与 sudo

[sudo] format = "$symbol" style = "bold italic bright-purple" symbol = "⋈┈" disabled = false [username] style_user = "bright-yellow bold italic" style_root = "purple bold italic" format = "⭘ $user " disabled = false show_always = false
  • 显式启用sudo模块(Starship 默认关闭),仅在检测到有效的 sudo 凭证时显示⋈┈,配合身份提示。
  • username平时不显示(show_always = false),只有当用户为 root、通过 SSH 连接或用户名与约定不一致时才出现;普通用户前缀,root 使用紫色粗体。

directory:目录展示是右侧的核心

[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 △'
  • 家目录缩写为,长路径从头部截断、只保留最后 2 层(truncation_length = 2),被省略部分用表示;配合use_os_path_sep = true会按各操作系统路径分隔符显示。
  • 只读目录追加角标。
  • 进入 Git 仓库根目录时,仓库根以粗体蓝色高亮,并在末尾追加[△]标记,与git_branch图标形成呼应。

Git 状态族:细颗粒的状态可视化

[git_branch] format = " $branch(:$remote_branch)" symbol = "△" style = "italic bright-blue" truncation_symbol = "⋯" truncation_length = 11 ignore_branches = ["main", "master"] only_attached = true [git_metrics] format = '(▴$added)(▿$deleted)' added_style = 'italic dimmed green' deleted_style = 'italic dimmed red' ignore_submodules = true disabled = false [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 = "✕"
  • git_branch:默认隐藏main/master分支(ignore_branches),只在HEAD 直接附着于分支时显示(only_attached = true),避免 detached HEAD 状态下的噪音。
  • git_metrics:非默认启用,汇报相对上游新增/删除的行数——新增用(绿)、删除用(红),这也是主提示行第一行右侧的内容来源。
  • git_status:把未提交改动汇总在⎪…⎥双竖线括号中,每一种改动类型都有专属符号与颜色(冲突◪◦、领先、落后、分叉、未跟踪◌◦、暂存、修改●◦、重命名◎◦、删除、stash◃◈),其中带计数的地方用bold white数字突出。

Jetpack 同样为 jj(Jujutsu)用户定义了jj_bookmark模块样式(图标 + 忽略main/master),与 Git 分支观感保持一致,方便混用两类版本控制工具的团队统一体验。

语言运行时:统一但克制的缩写标签

Jetpack 把所有语言模块的展示名压成 2~4 个字母,且保持「斜体标签 + 彩色版本」的统一版式,例如:

[nodejs] format = " node ◫ ($version)" version_format = "${raw}" detect_files = ["package-lock.json", "yarn.lock"] detect_folders = ["node_modules"] detect_extensions = [] [python] format = " py ${symbol}${version}" symbol = "⌉⌊ " version_format = "${raw}" style = "bold bright-yellow"
  • version_format = "${raw}":直接展示原始版本号,去掉多余的前缀修饰,保证信息紧凑。
  • nodejs 的探测规则被显式收窄为package-lock.json/yarn.locknode_modules,避免在无关目录误报。
  • 类似的缩写规则贯穿全文件:Rust 显示为rs、Ruby 为rb、Swift 为sw、Go 为go,而 deno、lua、bun 等则以完整小写单词出现。无论哪种语言,标签都统一为斜体、无下划线,颜色让位给版本号,视觉层级非常一致。

系统状态与时间

[time] disabled = false format = " $time" time_format = "%R" utc_time_offset = "local" style = "italic dimmed white" [battery] format = " $percentage $symbol" full_symbol = "█" charging_symbol = "↑" discharging_symbol = "↓" unknown_symbol = "░" empty_symbol = "▃" [[battery.display]] threshold = 20 style = "italic bold red" [[battery.display]] threshold = 60 style = "italic dimmed bright-purple" [[battery.display]] threshold = 70 style = "italic dimmed yellow"
  • time以 24 小时制%R显示并跟随本地时区;localip仅在 SSH 会话中输出(ssh_only = true,亮品红圆点前缀);jobs用蓝色标记后台任务;cmd_duration◄ …包裹耗时。
  • battery为三档阈值(20/60/70)设置了红/紫/黄分级样式,memory_usage提供ram(及可选swap)占用。

Nix Shell 与环境标注

[nix_shell] style = 'bold italic dimmed blue' symbol = '✶' format = '$symbol nix⎪$state⎪ $name' impure_msg = '⌽' pure_msg = '⌾' unknown_msg = '◌'

Nix shell 使用标记并区分 pure(绿)/ impure(红)两种进入方式,右侧的docker_contextkubernetes等模块同理只在实际进入相关环境时出现,保证「不在其位不谋其政」的信息收敛。

完整配置清单

以下是 jetpack.toml 的完整内容(与starship preset 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\ $vcsh\ $fossil_branch\ $git_branch\ $git_commit\ $git_state\ $git_status\ $hg_branch\ $pijul_channel\ $docker_context\ $package\ $c\ $cpp\ $cmake\ $cobol\ $daml\ $dart\ $deno\ $dotnet\ $elixir\ $elm\ $erlang\ $fennel\ $fortran\ $golang\ $guix_shell\ $haskell\ $haxe\ $helm\ $java\ $julia\ $kotlin\ $gradle\ $lua\ $maven\ $nim\ $nodejs\ $bun\ $ocaml\ $opa\ $perl\ $php\ $pulumi\ $purescript\ $python\ $raku\ $rlang\ $red\ $ruby\ $rust\ $scala\ $solidity\ $swift\ $terraform\ $vlang\ $vagrant\ $xmake\ $zig\ $buf\ $conda\ $pixi\ $meson\ $spack\ $memory_usage\ $aws\ $gcloud\ $openstack\ $azure\ $crystal\ $custom\ $status\ $os\ $battery\ $time""" [fill] symbol = ' ' [character] format = "$symbol " success_symbol = "◎" error_symbol = "○" vimcmd_symbol = "■" # not supported in zsh vimcmd_replace_one_symbol = "◌" vimcmd_replace_symbol = "□" vimcmd_visual_symbol = "▼" [env_var.VIMSHELL] format = "$env_value" style = 'green italic' [sudo] format = "$symbol" style = "bold italic bright-purple" symbol = "⋈┈" disabled = false [username] style_user = "bright-yellow bold italic" style_root = "purple bold italic" format = "⭘ $user " disabled = false show_always = false [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 △' [cmd_duration] format = "◄ $duration " [jobs] format = "$symbol$number " style = "white" symbol = "▶" [localip] ssh_only = true format = " ◯$localipv4" disabled = false [time] disabled = false format = " $time" time_format = "%R" utc_time_offset = "local" style = "italic dimmed white" [battery] format = " $percentage $symbol" full_symbol = "█" charging_symbol = "↑" discharging_symbol = "↓" unknown_symbol = "░" empty_symbol = "▃" [[battery.display]] threshold = 20 style = "italic bold red" [[battery.display]] threshold = 60 style = "italic dimmed bright-purple" [[battery.display]] threshold = 70 style = "italic dimmed yellow" [git_branch] format = " $branch(:$remote_branch)" symbol = "△" style = "italic bright-blue" truncation_symbol = "⋯" truncation_length = 11 ignore_branches = ["main", "master"] only_attached = true [git_metrics] format = '(▴$added)(▿$deleted)' added_style = 'italic dimmed green' deleted_style = 'italic dimmed red' ignore_submodules = true disabled = false [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 = "✕" [deno] format = " deno ∫ $version" version_format = "${raw}" [lua] format = " lua ${symbol}${version}" version_format = "${raw}" 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 = [] [bun] format = " bun ◫ ($version)" version_format = "${raw}" [python] format = " py ${symbol}${version}" symbol = "⌉⌊ " version_format = "${raw}" style = "bold bright-yellow" [ruby] format = " rb ${symbol}${version}" symbol = "◆ " version_format = "${raw}" style = "bold red" [rust] format = " rs $symbol$version" symbol = "⊃ " version_format = "${raw}" style = "bold red" [package] format = " pkg $symbol$version" version_format = "${raw}" symbol = "◨ " style = "dimmed yellow italic bold" [swift] format = " sw ${symbol}${version}" symbol = "◁ " style = "bold bright-red" version_format = "${raw}" [aws] disabled = true format = " aws $symbol $profile $region" style = "bold blue" symbol = "▲ " [buf] symbol = "■ " format = " buf $symbol $version $buf_version" [c] symbol = "ℂ " format = " $symbol($version(-$name))" [cpp] symbol = "ℂ " format = " $symbol($version(-$name))" [conda] symbol = "◯ " format = " conda $symbol$environment" [pixi] symbol = "■ " format = " pixi $symbol$version ($environment )" [dart] symbol = "◁◅ " format = " dart $symbol($version )" [docker_context] symbol = "◧ " format = " docker $symbol$context" [elixir] symbol = "△ " format = " exs $symbol $version OTP $otp_version " [elm] symbol = "◩ " format = " elm $symbol($version )" [golang] symbol = "∩ " format = " go $symbol($version )" [haskell] symbol = "❯λ " format = " hs $symbol($version )" [java] symbol = "∪ " format = " java ${symbol}(${version} )" [jj_bookmark] format = " $symbol$bookmark(@$remote)$diverged( \\(+$overflow_count others\\))" symbol = "△" style = "italic bright-blue" truncation_symbol = "⋯" truncation_length = 11 ignore_names = ["main", "master"] [julia] symbol = "◎ " format = " jl $symbol($version )" [memory_usage] symbol = "▪▫▪ " format = " mem ${ram}( ${swap})" [nim] symbol = "▴▲▴ " format = " nim $symbol($version )" [nix_shell] style = 'bold italic dimmed blue' symbol = '✶' format = '$symbol nix⎪$state⎪ $name' impure_msg = '⌽' pure_msg = '⌾' unknown_msg = '◌' [spack] symbol = "◇ " format = " spack $symbol$environment"

源码视角:这份配置如何被加载与验证

  • 配置入口:Jetpack 用到的formatright_formatadd_newlinecontinuation_prompt等都属于 Starship 的全局配置。其默认值与字段声明位于 src/configs/starship_root.rs:默认format"$all"(所有模块自动排列)、right_format为空字符串、add_newline默认true。Jetpack 显式覆盖它们,正是「伪极简」的结构基础。
  • 右提示的解析:Starship 把right_formatformat同等对待——两套字符串都会经由格式化解析器展开成模块序列,主提示与右提示在渲染时各占一条输出通道。
  • 预设内容的一致性:预设内容在构建期通过include_str!("../docs/public/presets/toml/jetpack.toml")嵌入二进制(见 src/print.rs 附近测试),因此CLI 输出的配置与仓库中的 TOML 文件永远同步;测试还覆盖了--output写入与--force覆盖行为(src/print.rs)。
  • 文档侧的一致性:官方预设索引 docs/presets/README.md 中的 Jetpack 条目同样指向这张截图与同名 TOML,意味着任何语言的官方文档页(含 docs/de-DE/presets/jetpack.md)都与实际可执行配置保持一致。

个性化扩展建议

  • 换掉云厂商模块:Jetpack 默认在右侧把aws置为disabled = true,而保留gcloudazureopenstack;如果你的主力是 AWS,删除[aws] disabled = true段并把对应的云模块移出right_format即可反向调整。
  • 加回丢失的模块:部分模块(如batterytime之外的crystalcustom)已出现在right_format中,若你不需要某项,直接从right_format删除对应行即可;若你需要某个未列出的内置模块,在right_format追加其$模块名并到文末补充一段样式即可。
  • 切换运行时显示粒度version_format = "${raw}"是 Jetpack 紧凑风格的关键;想显示更完整的版本元信息,可改回默认的${version}语义或自定义占位符。
  • 与官方 schema 协作:文件头部的$schema声明让主流编辑器可以按 config-schema.json 提供补全与校验,二次开发时建议保留。

总的来说,Jetpack 是一份非常适合「信息密集但外观克制」用户群体的基准配置:它把 Starship 的双栏渲染能力、基础 ANSI 配色随主题自适应的特性、以及符号化状态表达做到了一个自洽的平衡点。以本文的完整配置为起点,你可以放心地增删模块、替换符号与颜色,打造自己专属的伪极简提示符。

【免费下载链接】starship☄🌌️ The minimal, blazing-fast, and infinitely customizable prompt for any shell!项目地址: https://gitcode.com/GitHub_Trending/st/starship

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询