diff --git a/AGENTS.md b/AGENTS.md index 495f3af..9d3d174 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -78,10 +78,9 @@ files → pacman → aur → systemd ### Python(source.py 及模块) **source.py 结构**: -- 用 `# ── Section ──` 分隔逻辑分区 -- 包集合用 `|=` 语法,元素按字母排序 -- `SUDO_USER` 必须存在,不设 fallback——没有则抛 `SourceError` -- 文件默认权限 `0o644`,仅需特殊权限时显式指定(如 sudoers `0o440`) +- 纯模块注册,不直接声明文件或包 +- 校验 `SUDO_USER` 和必要插件存在性 +- 通过 `decman.modules += [...]` 注册所有模块 **模块模式**(适用于需要 hook 或跨步骤声明的场景): ```python diff --git a/modules/dev.py b/modules/dev.py index 8485827..6b48f0d 100644 --- a/modules/dev.py +++ b/modules/dev.py @@ -1,3 +1,5 @@ +import shlex + import decman from decman import File, Module from decman.plugins.pacman import packages as pacman_packages @@ -46,11 +48,15 @@ class DevModule(Module): def after_update(self, store): for pkg in BUN_GLOBAL_PACKAGES: try: - decman.prg(["su", "-", self.user, "-c", f"bun add -g {pkg}"]) + decman.prg( + ["su", "-", self.user, "-c", shlex.join(["bun", "add", "-g", pkg])] + ) except Exception: print(f"警告:安装 {pkg} 失败,跳过") for pkg in GO_INSTALL_PACKAGES: try: - decman.prg(["su", "-", self.user, "-c", f"go install {pkg}"]) + decman.prg( + ["su", "-", self.user, "-c", shlex.join(["go", "install", pkg])] + ) except Exception: print(f"警告:安装 {pkg} 失败,跳过") diff --git a/source.py b/source.py index 8a31a29..d306eeb 100644 --- a/source.py +++ b/source.py @@ -8,9 +8,8 @@ import modules.docker import modules.locale import modules.zsh -assert decman.pacman is not None -assert decman.aur is not None -assert decman.systemd is not None +if decman.pacman is None or decman.aur is None or decman.systemd is None: + raise decman.SourceError("缺少必要插件,请检查 decman 安装") USERNAME = os.environ.get("SUDO_USER") if not USERNAME: