NixOS
ZeroClaw incluye un módulo NixOS multi-instancia en nix/module.nix. Ejecuta uno o más agentes bajo systemd con valores predeterminados de endurecimiento apropiados para un proceso expuesto a internet, siguiendo el modelo de services.restic.backups.
El paquete
El módulo invoca ${pkgs.zeroclaw}/bin/zeroclaw daemon. pkgs.zeroclaw aún no está en nixpkgs; su seguimiento se realiza en #5987. Hasta que se incorpore, compila el binario tú mismo y haz que el módulo apunte a él con la opción package:
nix
services.zeroclaw.instances.me.package =
pkgs.callPackage ./zeroclaw.nix { };
Por la misma razón, nix run github:zeroclaw-labs/zeroclaw no inicia el agente. nix run resuelve apps.<system>.default y luego packages.<system>.default; este flake no define apps, y su packages.default es la cadena de herramientas de Rust (para el shell de desarrollo), por lo que el comando ejecutaría la derivación de la cadena de herramientas, no ZeroClaw. En cualquier otra plataforma, install.sh es la ruta compatible.
Instancia única
La pertenencia a services.zeroclaw.instances.<name> es la señal de activación; no existe un enable de nivel superior. Cada instancia obtiene su propia unidad de systemd, directorio de estado y usuario del sistema.
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"; # $VAR de systemd, sustituido desde environmentFile al iniciar
allowed_users = [ "12345" ];
};
};
};
}
settings refleja ~/.zeroclaw/config.toml como un attrset de Nix, renderizado en ${dataDir}/config.toml (modo 0600). Los secretos viajan a través de environmentFile, nunca de settings: el ExecStartPre de la unidad ejecuta envsubst para que las referencias $VAR se resuelvan al inicio, manteniendo la copia de /nix/store libre de texto plano. El esquema de configuración (encabezados de sección, convención de tipos/alias) es idéntico al de todas las demás plataformas.
Múltiples instancias
El módulo tiene forma de attrsOf submodule, por lo que N tenants en un host se leen igual que uno. Las instancias pueden compartir un usuario cuando exactamente una lo crea y el resto establece createUser = false.
nix
services.zeroclaw.instances = {
alice = { environmentFile = "/run/secrets/alice/identity.env"; settings = { /* … */ }; };
bob = { environmentFile = "/run/secrets/bob/identity.env"; settings = { /* … */ }; };
};
Opciones
La superficie completa de opciones (package, user, group, createUser, dataDir, settings, environmentFile, extraConfig, bindReadOnlyPaths) y el patrón de secretos están documentados en nix/README.md. Para sobrescribir un campo de serviceConfig, use el mecanismo de escape estándar de NixOS en lugar de una opción del módulo:
nix
systemd.services."zeroclaw-me".serviceConfig.MemoryMax = "512M";
Siguiente
- Gestión de servicios: la unidad de systemd que ZeroClaw genera en hosts que no son Nix
- Proveedores → Configuración: el esquema de configuración
settingsrefleja