NixOS
ZeroClaw 在 nix/module.nix 中提供了一个多实例 NixOS 模块。它在 systemd 下运行一个或多个 agent,并采用适合面向互联网进程的强化默认配置,参照 services.restic.backups 设计。
该软件包
该模块会调用 ${pkgs.zeroclaw}/bin/zeroclaw daemon。pkgs.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 = { /* … */ }; };
};
选项
完整的选项列表(package、user、group、createUser、dataDir、settings、environmentFile、extraConfig、bindReadOnlyPaths)以及密钥模式都记录在 nix/README.md 中。要覆盖 serviceConfig 字段,请使用标准的 NixOS 转义机制,而不是模块选项:
nix
systemd.services."zeroclaw-me".serviceConfig.MemoryMax = "512M";