Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

NixOS

ZeroClaw 在 nix/module.nix 中提供了一个多实例 NixOS 模块。它在 systemd 下运行一个或多个 agent,并采用适合面向互联网进程的强化默认配置,参照 services.restic.backups 设计。

该软件包

上游 flake 会从源代码构建 ZeroClaw。在启用了 Nix 的实验性功能 nix-command 和 flakes 的情况下,可以检查 CLI,而无需安装系统服务:

nix run github:zeroclaw-labs/zeroclaw -- --version
nix run github:zeroclaw-labs/zeroclaw -- --help

默认包是 ZeroClaw CLI;开发工具链则通过 nix develop 单独提供。在冷缓存情况下构建该包可能需要一些时间。要检查本地检出的代码:

nix build .#zeroclaw
./result/bin/zeroclaw --version
nix flake check

通过 nix run 运行 CLI 不会将其添加到登录 shell 的 PATH 中。若要在 NixOS 上持久安装,Nixpkgs 提供了 pkgs.zeroclaw:

nix

environment.systemPackages = [ pkgs.zeroclaw ];

Nixpkgs 包的版本跟随你的 Nixpkgs 锁定版本,而上游 flake 的版本跟随所选的 ZeroClaw 修订版本。两者可能不一致。下面的模块默认使用 pkgs.zeroclaw,并启动其 zeroclaw daemon 命令。如果要使用其他包,可设置 services.zeroclaw.instances.<name>.package。例如,当你的系统 flake 有一个指向本仓库的 zeroclaw 输入时,可以使用 inputs.zeroclaw.packages.${pkgs.stdenv.hostPlatform.system}.zeroclaw。

单实例

services.zeroclaw.instances.<name> 中的成员身份即为激活信号;不存在顶层的 enable 选项。每个实例都拥有各自独立的 systemd 单元、状态目录和系统用户。

nix

{ config, pkgs, ... }: {
  imports = [ ./path/to/zeroclaw/nix/module.nix ];

  age.secrets.zeroclaw-bot-token.file = ./secrets/zeroclaw-bot-token.age;

  services.zeroclaw.instances.me = {
    environmentFile = config.age.secrets.zeroclaw-bot-token.path;
    settings = {
      providers.models.anthropic.home.model = "claude-sonnet-4-6";
      agents.assistant = {
        model_provider = "anthropic.home";
        risk_profile = "assistant";
        channels = [ "telegram.home" ];
      };
      risk_profiles.assistant = { };
      channels.telegram.home = {
        enabled = true;
        bot_token = "$BOT_TOKEN";   # systemd $VAR,启动时从 environmentFile 替换
        allowed_users = [ "12345" ];
      };
    };
  };
}

settings 将 ~/.zeroclaw/config.toml 映射为 Nix attrset,并渲染到 ${dataDir}/config.toml(权限模式 0600)。密钥通过 environmentFile 传递,绝不经由 settings:该单元的 ExecStartPre 会运行 envsubst,使 $VAR 引用在启动时解析,从而确保 /nix/store 中的副本不含明文。配置 schema(节标题、类型/别名约定)与其他所有平台完全一致。

多个实例

该模块采用 attrsOf submodule 结构,因此在一台主机上配置 N 个租户与配置一个租户的读法一致。当恰好有一个实例创建用户,其余实例设置 createUser = false 时,多个实例可以共享同一个用户。

nix

services.zeroclaw.instances = {
  alice = { environmentFile = "/run/secrets/alice/identity.env"; settings = { /* … */ }; };
  bob   = { environmentFile = "/run/secrets/bob/identity.env";   settings = { /* … */ }; };
};

选项

完整的选项列表(package、user、group、createUser、dataDir、settings、environmentFile、extraConfig、bindReadOnlyPaths)以及密钥模式都记录在 nix/README.md 中。要覆盖 serviceConfig 字段,请使用标准的 NixOS 转义机制,而不是模块选项:

nix

systemd.services."zeroclaw-me".serviceConfig.MemoryMax = "512M";

下一个