From fab934ace95bfcb28b940a100962d17766b18d5f Mon Sep 17 00:00:00 2001 From: imbytecat Date: Thu, 26 Mar 2026 13:31:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(docker):=20=E6=B7=BB=E5=8A=A0=20Docker=20?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=B9=B6=E9=87=8D=E6=8E=92=20source.py=20?= =?UTF-8?q?=E5=A3=B0=E6=98=8E=E9=A1=BA=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker_module.py | 16 ++++++++++++++++ pyproject.toml | 3 ++- source.py | 45 ++++++++++++++++++++++++++------------------- uv.lock | 10 ++++++++++ 4 files changed, 54 insertions(+), 20 deletions(-) create mode 100644 docker_module.py diff --git a/docker_module.py b/docker_module.py new file mode 100644 index 0000000..158ffad --- /dev/null +++ b/docker_module.py @@ -0,0 +1,16 @@ +from decman import Module +from decman.plugins.pacman import packages +from decman.plugins.systemd import units + + +class DockerModule(Module): + def __init__(self): + super().__init__("docker") + + @packages + def packages(self) -> set[str]: + return {"docker", "docker-compose"} + + @units + def units(self) -> set[str]: + return {"docker.service"} diff --git a/pyproject.toml b/pyproject.toml index 1a83d0b..3f4a5b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,11 +4,12 @@ version = "0.0.0" requires-python = ">=3.13" [dependency-groups] -dev = ["decman", "decman-pacman"] +dev = ["decman", "decman-pacman", "decman-systemd"] [tool.uv.sources] decman = { git = "https://github.com/kiviktnm/decman.git" } decman-pacman = { git = "https://github.com/kiviktnm/decman.git", subdirectory = "plugins/decman-pacman" } +decman-systemd = { git = "https://github.com/kiviktnm/decman.git", subdirectory = "plugins/decman-systemd" } [tool.ty.environment] python = ".venv" diff --git a/source.py b/source.py index 2be2bed..776cfcf 100644 --- a/source.py +++ b/source.py @@ -1,6 +1,7 @@ """ Arch Linux 声明式系统配置 — decman +执行顺序:files → pacman → aur → systemd 用法: 首次:sudo decman --source /path/to/source.py 后续:sudo decman @@ -11,16 +12,40 @@ import os import decman from decman import File +import docker_module import locale_module assert decman.pacman is not None assert decman.aur is not None +assert decman.systemd is not None # ── 用户 ────────────────────────────────────────────────────── # sudo decman 时 SUDO_USER 为调用 sudo 的原始用户 USERNAME = os.environ.get("SUDO_USER", "imbytecat") HOME = f"/home/{USERNAME}" +# ── 系统文件(/etc/)────────────────────────────────────────── +decman.files["/etc/pacman.d/mirrorlist"] = File( + source_file="./system/etc/pacman.d/mirrorlist", +) + +decman.files["/etc/sudoers.d/10-wheel"] = File( + source_file="./system/etc/sudoers.d/10-wheel", + permissions=0o440, +) + +# ── 用户配置 ───────────────────────────────────────────────── +decman.files[f"{HOME}/.zshrc"] = File( + source_file="./home/.zshrc", + owner=USERNAME, +) + +# ── Modules ────────────────────────────────────────────────── +decman.modules += [ + locale_module.LocaleModule(), + docker_module.DockerModule(), +] + # ── Pacman 包(官方仓库)────────────────────────────────────── decman.pacman.packages |= { "base-devel", @@ -37,10 +62,10 @@ decman.pacman.packages |= { "vim", "wget", "zoxide", + "zsh", "zsh-autosuggestions", "zsh-completions", "zsh-syntax-highlighting", - "zsh", } # ── AUR 包 ──────────────────────────────────────────────────── @@ -52,21 +77,3 @@ decman.aur.packages |= { "oh-my-zsh-git", "yay", } - -# ── 系统文件(/etc/)────────────────────────────────────────── -decman.files["/etc/pacman.d/mirrorlist"] = File( - source_file="./system/etc/pacman.d/mirrorlist", -) - -decman.files["/etc/sudoers.d/10-wheel"] = File( - source_file="./system/etc/sudoers.d/10-wheel", - permissions=0o440, -) - -decman.modules += [locale_module.LocaleModule()] - -# ── 用户配置 ───────────────────────────────────────────────── -decman.files[f"{HOME}/.zshrc"] = File( - source_file="./home/.zshrc", - owner=USERNAME, -) diff --git a/uv.lock b/uv.lock index ed7fd6b..39ef674 100644 --- a/uv.lock +++ b/uv.lock @@ -11,6 +11,7 @@ source = { virtual = "." } dev = [ { name = "decman" }, { name = "decman-pacman" }, + { name = "decman-systemd" }, ] [package.metadata] @@ -19,6 +20,7 @@ dev = [ dev = [ { name = "decman", git = "https://github.com/kiviktnm/decman.git" }, { name = "decman-pacman", git = "https://github.com/kiviktnm/decman.git?subdirectory=plugins%2Fdecman-pacman" }, + { name = "decman-systemd", git = "https://github.com/kiviktnm/decman.git?subdirectory=plugins%2Fdecman-systemd" }, ] [[package]] @@ -102,6 +104,14 @@ dependencies = [ { name = "requests" }, ] +[[package]] +name = "decman-systemd" +version = "1.1.0" +source = { git = "https://github.com/kiviktnm/decman.git?subdirectory=plugins%2Fdecman-systemd#8c54220dbcb793836e99c567c43718aaed08acd2" } +dependencies = [ + { name = "decman" }, +] + [[package]] name = "idna" version = "3.11"