12 · 应用与软件包抽象¶
Omarchy 面向用户说“安装应用”“启动 Web App”“设置默认浏览器”,底层却可能是 pacman 包、AUR、.desktop 文件、Chromium app mode 或终端程序。小命令把这些不同机制收敛成稳定动作。
包 helper 的层级¶
flowchart TD
Feature[install/remove feature] --> Add[omarchy-pkg-add]
Feature --> Drop[omarchy-pkg-drop]
Add --> Present{已安装?}
Present -->|是| Done[幂等退出]
Present -->|否| Pacman[pacman transaction]
Pacman --> Verify[再次验证]
Drop --> Exact[精确选择包]
Exact --> Remove[pacman -Rns]
omarchy-pkg-add 先探测,安装后再验证;drop 只移除显式选择的包,避免模糊匹配导致无关依赖被误删。功能安装器不应重复发明包存在检测与错误输出。
两份 package list 的角色¶
固定快照中:
install/omarchy-base.packages有 151 个条目,是 ISO pacstrap 的核心集合;install/omarchy-other.packages有 76 个条目,为 ISO builder 提供其他可用包;- 合计 227 个条目,但它们不是“所有运行时可安装应用”的完整清单。
base list 同时被 reinstall/preinstall 等流程引用,修改时必须同步理解 ISO 与已安装系统语义。
desktop entry 是应用层协议¶
Quickshell AppLibrary、系统菜单、launcher 和桌面环境都可以消费 .desktop。Omarchy 通过它统一三种应用:
| 类型 | Exec 最终做什么 | 可见身份 |
|---|---|---|
| 原生 GUI | 启动 binary | desktop ID / app class |
| Web App | 浏览器 app mode + URL | 独立 desktop entry/icon |
| TUI | xdg-terminal-exec 包住命令 |
tile/float app ID |
仓库预装 13 个 Web/TUI 业务 desktop files,另有终端、图片、媒体等系统入口。AppLibrary 扫描 desktop entries,而不是维护第二份硬编码应用表。
Web App 安装链¶
omarchy-webapp-install 生成 desktop entry、尝试取得 favicon,并允许自定义 Exec。运行时 omarchy-launch-webapp:
- 读取受支持的默认浏览器;
- 若不支持 app mode 则回退 Chromium;
- 用隔离的 app 参数启动 URL;
- 经
setsid/uwsm-app脱离调用者并进入图形会话 scope。
sequenceDiagram
participant I as webapp install
participant D as .desktop + icon
participant A as AppLibrary
participant L as launch-webapp
participant B as Browser
I->>D: 写 Name/Exec/Icon/URL
A->>D: 扫描并展示
A->>L: 用户启动
L->>L: 选择支持浏览器或 Chromium
L->>B: uwsm-app / app mode
“网站”和“桌面应用”的桥梁不是 Shell 私有数据,而是 freedesktop desktop entry,因此系统搜索、图标、焦点与卸载都能复用标准工具。
TUI 也有桌面身份¶
omarchy-launch-tui 使用 xdg-terminal-exec 选择当前默认终端,并设置适合 Hyprland 规则的 app ID。调用者可选择浮动或平铺,不需要知道 Foot、Ghostty、Kitty 等具体命令行差异。
默认终端本身写入 ~/.config/xdg-terminals.list;默认浏览器使用 XDG MIME;编辑器、agent 等选择存到各自明确状态。Omarchy 尽量通过生态已有标准表达 default,而不是只在内部变量里记一份。
“安装并启动”需要事务意识¶
omarchy-install-and-launch 类流程通常是:检查是否安装 → 必要时开终端/提权安装 → 成功后启动。关键是不要在 package transaction 尚未确认成功时就刷新应用库或启动不存在的 binary。
菜单用 guard 将 installed 状态呈现为 disabled/check;真正执行安装的命令仍必须自己再检查。UI 缓存只是体验优化,不是并发安全的真相。
默认值与缺包¶
设置默认浏览器时,命令可以先安装缺失目标,再更新 XDG MIME。把“选择一个不存在的应用”静默写进 default 会产生延迟失败;Omarchy 更倾向在选择动作中解决依赖或明确拒绝。
关键源码索引¶
bin/omarchy-pkg-add— 幂等添加与验证bin/omarchy-pkg-drop— 精确移除install/omarchy-base.packages— ISO 核心包集install/omarchy-other.packages— 其他包集bin/omarchy-webapp-install— desktop entry 与 faviconbin/omarchy-launch-webapp— browser fallback 与 session launchbin/omarchy-launch-tui— 终端应用抽象shell/services/AppLibrary.qml— desktop entry 共享索引
静态安装之后,系统如何安全地持续改变,是下一章主题:13 · 更新、迁移与渠道。