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 设计。

该软件包

该模块会调用 ${pkgs.zeroclaw}/bin/zeroclaw daemonpkgs.zeroclaw 尚未进入 nixpkgs;其进度可在 #5987 中跟踪。在它合入之前,请自行构建该二进制文件,并通过 package 选项将该模块指向它:

nix

services.zeroclaw.instances.me.package =
  pkgs.callPackage ./zeroclaw.nix { };

出于同样的原因,nix run github:zeroclaw-labs/zeroclaw 不会启动该 agent。nix run 会先解析 apps.<system>.default,然后解析 packages.<system>.default;此 flake 没有定义 apps,而其 packages.default 是 Rust 工具链(用于开发 shell),因此该命令会运行工具链的 derivation,而不是 ZeroClaw。在任何其他平台上,install.sh 才是受支持的安装方式。

单实例

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 = { /* … */ }; };
};

选项

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

nix

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

下一个