Oh My Niu:Niubash 的主题与插件框架

niubash 的官方 Oh My 式插件框架与捆绑发行:插件即目录、主题即插件, shell 核心只提供加载原语。装好即得 27 款主题与一族功能插件 (git / docker / kubectl / zoxide / fzf…),随 niubash 发行做离线基线,之后独立更新与回滚。 它不是 zsh 兼容层——是 Oh My Zsh 的有用形状、bash 的身体。

Shell(.niu / bash) 随 niubash · 全平台 v2.0.0 MIT

github.com/unixwin/oh-my-niu ↗ 1 stars (repo-meta.json 实测 2026-10-19)

为什么是 Oh My Niu

用惯了 Oh My Zsh / fish 插件管理器 / PowerShell 提示符框架的人,期待的不是某个具体主题, 而是一套模型:列插件、挑主题、source 一行,一切就位。 原生 shell 常缺这一层;oh-my-niu 给 niubash 补上,且刻意不把框架焊死在 shell 里。

形状

Oh My 的形状,bash 的身体

Oh My Zsh 真正好用的不是 zsh 语法,而是「插件即目录、按可预测顺序加载」的模型。oh-my-niu 把这个形状带给 niubash:列插件、source 框架、框架去加载,用户零学习成本。

分工

shell 出原语,框架出组合

niubash 拥有加载、生命周期钩子、权限审阅、更新回滚等原语;oh-my-niu 拥有框架库、插件目录、主题与默认组合。随 shell 发行,但 bundled 不等于 built in——与第三方插件走同一套系统。

不绑死

catalog 指向官方上游

niu plugin 的 bash 生态 catalog(niu plugin add oh-my-bash 即装)直指各自官方仓,不指向 oh-my-niu:上游插件一行不改即可原生运行,官方 bundle 只是选项之一。

核心特性

  • 主题画廊 27 款主题(plugins/theme-* 目录与 themes/*.toml 资产层一一对应、集合一致):Oh My Zsh 经典款、Powerlevel 风 p10 四款、Oh My Posh 风配色款与官方基础款。
  • 主题即插件 每款主题是一个普通插件目录(plugin.toml + theme-*.plugin.niu),与功能插件同一加载面——没有特殊的「主题系统」。
  • prompt-core 提示符 API 与 segment 注册表的拥有者,默认开启;git 提示符段按 bundle 契约解析为 niubash 原生 Vcs 段(面向 niubash 1.4.1+),分支/脏星/短 SHA 进程内渲染,零 git 子进程。
  • Starship 接管模式 想用 Starship?加载 starship 插件、留空 NIU_THEME,由 Starship 经标准 Bash init 路径接管 PROMPT_COMMAND/PS1/PS2/PS0。
  • 功能插件族 git、docker、kubectl、npm、jj、zoxide、direnv、dotenv、fzf、last-working-dir、thefuck、path-tools、extract、common-aliases、keybindings、command-not-found、winuxcmd-core(WinuxCmd 命令补全)……
  • 2.0 新一方插件 command-timer(逐命令耗时与退出码)、auto-env(按目录自动 .venv)、dirmarks(目录书签)、git-fetch-reminder(上游分叉提醒)、env-sync(经 rclone 同步 shell 配置与 WPM 包清单)。
  • 别名 / 补全 / 键位资产 aliases/ 五组 TOML(common/git/docker/kubectl/npm);completions/ 174 个 TOML 补全定义(WinuxCmd 核心命令族 + git/docker/kubectl/npm/jj);keybindings/ emacs 与 vi 预设。
  • 环境包(envs) 一个小 TOML 声明装哪些 wpm 包、启用哪些插件、导出哪些变量:niu env use git 一键配好原生 Git 工具链(git + delta、GIT_PAGER、git-fetch-reminder)。

安装与快速上手

bundle 随 niubash 发行(离线基线,随 niu self-update 一并推进), 启用只需 rc 三行。niu plugin 命令族管的是外部生态 (oh-my-bash、bash-it 等第三方源),与捆好的 oh-my-niu 是两条互不干扰的轨道。 入口 oh-my-niu.niu 可重入——source 两次是空操作, 全量重载加 --reload。

# ~/.niubashrc 三行启用:选插件、选主题、source 框架
NIU_PLUGINS=(prompt-core git docker zoxide)
NIU_THEME=minimal
source "$NIUBASH/oh-my-niu.niu"

日常操作

# 换主题:改 NIU_THEME 后重开终端,或当前会话全量重载
source "$NIUBASH/oh-my-niu.niu" --reload
# 捆绑基线随 niubash 版本推进
niu self-update
# 顶层健康检查(rc 块、PATH 一致性等)
niu doctor

换主题改 NIU_THEME 后重开终端即可;把配置改动写进 ~/.niubashrc(source 本身不落盘,插件不经用户显式命令不改写 rc)。 验证一切正常,让牛说话:

niu_moo "Bash, native on Windows."   # cowsay 风格对话泡

深入:主题画廊

画廊不是静态皮肤库——每款主题都是 plugins/theme-*/ 下的普通插件目录 (plugin.toml 元数据 + *.plugin.niu 行为),由 prompt-core 的 segment 注册表渲染;themes/*.toml 资产层 服务于 manifest 兼容与审阅。四组风格:

分组主题
Oh My Zsh 经典 agnoster · avit · bira · clean · fishy · lambda · robbyrussell
Powerlevel 风 p10-lean · p10-classic · p10-rainbow · p10-pure
Oh My Posh 风 dracula · catppuccin-mocha · gruvbox · spaceship · tokyonight
官方基础 default · dark · light · colorful · minimal · classic · pure · compact · cyberpunk · forest · ocean

来源:oh-my-niu README「First-Party Plugins」插件表与 plugins/、 themes/ 目录(实测计数 2026-10-24:theme-* 目录与 themes/*.toml 均为 27、集合一致;上表四组合计 27)。

目录优先模型

行为本体在 plugins/<name>/;packs/、aliases/、 completions/、prompts/、keybindings/、 themes/ 是过渡期的 manifest 兼容与审阅元数据面(当前 niubash 发行工具仍认 manifest-first 布局)。新行为先进插件目录,再暴露 TOML 元数据供审阅、托管安装、更新与回滚—— 设计全文见仓内 docs/design.md(framework-first)。

catalog 指向官方上游

niu plugin 的三个内置 bash 生态源不绑 oh-my-niu—— origin 直指官方上游仓,上游资产一行不改原生运行(兼容性是被 rubash 引擎测出来的事实):

catalog 源官方 origin内容
oh-my-bash github.com/ohmybash/oh-my-bash bash 框架:80+ 主题、插件与别名(MIT)
bash-it github.com/Bash-it/bash-it 社区别名、插件、补全与主题(MIT)
bash-completion github.com/scop/bash-completion 标准 bash 补全库(GPL-2.0+,按需拉取)

来源:niubash crates/niubash-runtime/src/plugins/descriptors.rs(ManagerDescriptor origin 字段)· HIGHLIGHTS #13。

与 niu plugin 命令族的边界

bundle 契约:api = "niubash:[email protected]"、 min_niubash = "1.0.0"(2.0 线自旧 winuxsh: 前缀迁至 niubash:;旧 min_winuxsh 字段仍被接受,改名前的 ~/.oh-my-winuxsh 目录作为回退仍被发现)。发布档 oh-my-niu-<version>.zip 附 .sha256。

更新模型一句话:oh-my-niu 不是 niu plugin 的 source—— niu plugin update oh-my-niu 会报 unknown source(1.4.4 实测), 这是有意设计:捆好的框架随 niubash 版本走(niu self-update 推进基线), update/rollback 那 spec+lockfile 机制管的是外部第三方源。 旧的 niu plugin themes/doctor/review/search 内建面也已退役 (niubash#145):主题选择就是 NIU_THEME,主题总览看上方画廊或 plugins/theme-*/ 目录,诊断走顶层 niu doctor (CLI 全录见 CLI 参考)。

实测数字

框架类项目没有微基准——这里的数字是结构台账与仓内实测计数(2026-10-19):

指标数值来源
主题 27 款(theme-* 插件目录 27、themes/*.toml 27,两集合逐名一致) 仓内 plugins/ 与 themes/ 实测计数 2026-10-19
插件目录 50 个(27 主题 + 23 功能插件) 仓内 plugins/ 实测计数 2026-10-19
补全定义 174 个 TOML 仓内 completions/ 实测计数 2026-10-19
索引 pack 条目 22 个(bundle 2.0.0,min_niubash 1.0.0) oh-my-niu/index.toml
别名包 / 环境包 5 组 TOML · 2 个官方 env(git / cicd) 仓内 aliases/ · envs/ 实测计数

更新动态

oh-my-niu 有自身 CHANGELOG。最新 3 版(changelogs.json,抓取 2026-10-19; 完整流水见 更新日志):

  • 2.0.0(日期未标) 更名 oh-my-winuxsh → oh-my-niu(对齐 niubash 1.0.0 品牌);bundle/plugin API 前缀 winuxsh: → niubash:,环境前缀改 NIU_*; 新一方插件 command-timer / auto-env / dirmarks / git-fetch-reminder / env-sync; git 提示符段面向 niubash 1.4.1+ 解析为原生 Vcs 段(进程内渲染、零 git 子进程)。
  • 1.0.1(2026-08-02) 首批源包(Git/Docker/kubectl/npm/zoxide/direnv/dotenv/fzf/last-working-dir/thefuck); 框架入口点、目录优先官方插件、prompt-core 与 minimal/classic/pure/compact/cyberpunk/forest/ocean 七款主题插件;运行时 smoke 脚本;确定性发布打包(zip + sha256)。
  • 1.0.0(2026-07-31) 建仓为官方插件 bundle:bundle 元数据(api = winuxsh:[email protected]、 min_winuxsh 0.8.3)、别名/补全/提示符预设/键位/主题资产与作者模板、 确定性发布打包与校验和。

相关链接

常见问题

oh-my-niu 怎么启用?

rc 三行:NIU_PLUGINS=(prompt-core git …) 选插件、NIU_THEME=… 选主题、source "$NIUBASH/oh-my-niu.niu" 加载框架。框架随 niubash 发行,入口可重入(source 两次是空操作,--reload 全量重载)。

oh-my-niu 怎么换主题?

改 NIU_THEME 后重开终端即可;当前会话可 source "$NIUBASH/oh-my-niu.niu" --reload 热重载。27 款主题每一款都是普通插件目录,没有特殊的「主题系统」。

能跑 oh-my-bash 的主题和插件吗?

能——niu plugin add oh-my-bash(catalog 直指官方上游仓),上游资产一行不改原生运行;oh-my-niu 与外部源互不干扰,可并存。

oh-my-niu 怎么更新?

捆绑基线随 niu self-update 推进。它不是 niu plugin source——niu plugin update oh-my-niu 报 unknown source(niubash 1.4.4 实测),spec+lockfile 机制管的是外部第三方源。

免费吗?支持哪些平台?

全部开源免费。niubash 提供 Windows x64 / arm64 原生安装包(winget:Unixwin.Niubash);引擎 rubash 另有 Linux(gnu/musl)、macOS、Android 与 OpenHarmony 五平台的 CI 门禁构建。