多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

开发你的第一个Ambxst Mod插件:manifest、补丁三方合并与原子化生成完全教程

开发你的第一个Ambxst Mod插件:manifest、补丁三方合并与原子化生成完全教程 【免费下载链接】AmbxstAn Axtremely customizable shell.项目地址https://gitcode.com/gh_mirrors/am/Ambxst点击查看免费下载Ambxst 是一款以极致可定制著称的 Wayland 桌面 Shell而Ambxst Mod 插件系统让你不改一行主仓库代码就能为桌面新增功能。本文将带你从零开发第一个 Ambxst Mod 插件编写ambxst.mod.json清单用 overlay 与补丁两种操作改造界面并理解 Ambxst 如何用git 三方合并自动化解多个 Mod 对同一文件的修改再用原子化生成 健康窗口回滚保证改坏了也能秒级恢复。 Ambxst Mod 插件是什么Ambxst mods 是声明式源码转换一个 Mod 包只包含清单文件、资源文件和补丁管理器把它们叠加compose到一份干净的 Ambxst 源码树上构建出一个全新的 shell 目录称为生成代际generation而不是原地修改你的安装。整个机制由 Go 后端驱动核心实现在 backend/pkg/mods/manager.go。官方设计文档在 docs/mods/README.md建议配合本文阅读。 第一步搭好 Mod 包的目录结构官方自带一个纯补丁小 Mod 作为范本examples/mods/compact-player-volume-scroll/它让紧凑播放器支持滚轮调音量小到同一个补丁既能提交给上游、也能通过管理器安装。标准包结构如下example-mod/ ├── ambxst.mod.json # 清单身份、版本、兼容范围、操作列表 ├── settings.json # 可选设置面板字段定义 ├── patches/ │ └── feature.patch # 对现有文件的统一 diff 补丁 └── payload/ └── Feature.qml # 通过 overlay 覆盖进去的新文件 Mod 包支持三种安装来源本地目录、归档文件.zip/.tar/.tar.gz/.tgz、Git 仓库。新安装的 Mod 一律默认禁用手动确认后才启用。 第二步编写 manifest 清单ambxst.mod.json是 Mod 的身份证直接参考官方示例 ambxst.mod.json{ manifestVersion: 1, id: community.my-first-mod, name: My First Mod, version: 1.0.0, description: 为紧凑播放器添加滚轮调音量。, license: MIT, author: 你的名字, compatibility: { api: 1, ambxst: 1.2.5 1.3.0, testedBaseCommits: [完整git提交号] }, permissions: [读取媒体播放状态], operations: [ { type: patch, source: patches/feature.patch } ] }几个新手最容易踩的校验规则manifest 校验逻辑id只能用小写字母、数字与._-且不能自引用version必须是严格的主.次.修订格式compatibility.ambxst是硬性门槛版本范围不匹配的 Mod 永远不会参与构建permissions、author、license会在安装确认框中展示给用户——如实填写匿名包会让人无从判断是否可信 完整字段约束见 docs/mods/manifest.schema.json 第三步两种操作 —— overlay 与 patchoperations数组里只能出现两种操作类型用途注意事项overlay新增文件或整体替换文件替换已有文件必须声明replace: true并附上目标文件当前的expectedSha256基线一变就显式报错而不是静默覆盖新代码patch以统一 diff 修改现有文件上下文对不上时自动降级为三方合并下文详解官方示例补丁 compact-player-volume-scroll.patch 只做了 12 行改动给紧凑播放器挂了一个WheelHandler滚轮上拨调用音量接口——这正是小切口补丁的正确打开方式。 核心机制补丁三方合并如何工作这是 Ambxst Mod 系统最精妙的部分applyOperation先严格校验执行git apply --check --whitespaceerror-all上下文完全吻合就直接应用失败自动降级真实使用中上下文几乎必然会漂移——前面的 Mod 改了同一文件、或 Ambxst 自身升级挪动了行号——此时自动回退为git apply --3way基于补丁 diff 中记录的原始镜像pre-image做三方合并借用对象库合并在一个临时 Git 仓库中进行通过 alternates 借用主仓库的对象存储保证 Ambxst 升级后旧补丁的原始版本依然可达激活前该临时仓库即被删除最终生成物就是纯源码initComposition。冲突裁决规则简单而克制✅ 两个 Mod 在同一锚点只插入新行→ 两者都保留按加载顺序排列mergeAddedBlocks。这正是不同工具栏小组件能并排注册的原因 两个 Mod改写同一行→ 构建停止当前生效的代际原封不动。⚛️ 原子化生成改坏了也能自动回滚每次启用 / 禁用 / 调整顺序都会构建一个不可变的新生成代际存放在$XDG_DATA_HOME/ambxst/mods/generations然后通过一次原子状态文件更新切换激活代际$XDG_CONFIG_HOME/ambxst/mods.json。核心流程见 composeAndActivate 与 buildGeneration 构建期间任何一步失败 → 新代际直接丢弃旧代际不受影响 新代际启动后进入8 秒健康窗口期间 shell 崩溃Ambxst 自动恢复上一个已知良好代际并立即启动 手动兜底ambxst mods rollback回滚到上一代际或用AMBXST_MODS_DISABLED1 ambxst完全跳过 Mod 启动用于极端情况恢复。Ambxst 还会在启动前比对代际元数据与当前基线版本基线升级后过期代际被跳过、以干净基线启动设置面板会提示需要重建ambxst update会自动完成重建。 安装并启用你的第一个 Mod命令行方式命令实现见 cmds_mods.goambxst mods install ./my-first-mod # 安装默认禁用 ambxst mods enable community.my-first-mod ambxst mods list # 查看状态与兼容性 ambxst mods move community.my-first-mod up # 调整加载顺序 ambxst mods rebuild # 重新构建当前启用集合 ambxst mods rollback # 回滚到上一代际图形界面同样完整打开设置 → Mods面板实现见 ModsPanel.qml可直接安装、启用、更新 提示把列表切换为Sort: Load order即可拖拽手柄精确调整加载顺序重新构建后重启 Ambxst 生效。⚙️ 进阶给 Mod 加原生设置项可选在settings.json里用数据声明字段而非让 Mod 自带设置 UI支持boolean/string/integer/number/enum五种类型字段约束见 docs/mods/settings.schema.json。启用后的 QML 通过 ModsService.qml 无轮询读取并即时响应变化Component.onCompleted: ModsService.getSettings(community.my-first-mod, (settings, error) { if (!error) applySettings(settings.values); })️ 新手避坑清单compatibility.testedBaseCommits只是建议性声明提交号不在列表只会标记未测试真正挡路的只有版本范围与构建失败untestedBase版本检查可全局绕过设置 → Mods 的 Bypass 开关或ambxst mods bypass on但状态栏仍会持续标记为不兼容commands声明构建前必须存在的可执行文件permissions只是审查元数据不是沙箱给设置新增分区时必须声明新的sectionid并用同一个 id 注册面板——重排已有编号在多 Mod 共存时会导致面板错乱快速上手最省事的办法直接照抄官方示例 examples/mods/ 起步✅ 小结ambxst.mod.json定义身份与兼容范围operations只有overlay / patch两种操作 补丁先严格校验、失败自动三方合并纯插入冲突按加载顺序共存改写冲突则安全停摆⚛️ 每次变更生成不可变代际原子切换 8 秒健康窗口 一键回滚让你放心大胆地改自己的桌面赞分享【免费下载链接】AmbxstAn Axtremely customizable shell.项目地址https://gitcode.com/gh_mirrors/am/Ambxst点击查看免费下载相关推荐React Native Toast Message TypeScript类型定义详解完整的类型安全实现React Native Toast Message TypeScript类型定义详解完整的类型安全实现 React Native Toast MessageLED_CUBE电路设计揭秘看懂8x8x8光立方的底层工作原理LED_CUBE电路设计揭秘看懂8x8x8光立方的底层工作原理 LED光立方是电子爱好者和DIY创客的经典项目而8x8x8规格的光立方更是其中的代表性作品。硬件开发嵌入式智能硬件Editor.md插件开发完全指南从零编写并注册你的第一个自定义插件Editor.md插件开发完全指南从零编写并注册你的第一个自定义插件 Editor.md 是一款开源、可嵌入的在线 Markdown 编辑器组件。本文将带前端UI组件富文本创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表