refactor: move hive-c0re options to hyperhive namespace (#612)

- Move options.services.hive-c0re → options.hyperhive.c0re
- Add options.hyperhive.enable to auto-enable c0re + subsystems
- Add deprecation alias for services.hive-c0re.enable (backward compat)
- Update doc references in README, flake.nix, docs, harness-base.nix
- Simplifies config: 'hyperhive.enable = true' now enables everything

Existing operator configs using services.hive-c0re.enable will
continue to work but emit a deprecation warning. Aligns the option
namespace with the existing hyperhive.* family (matrix, forge, domain).

fixes #612
This commit is contained in:
atlas 2026-05-29 23:23:58 +02:00 committed by Mara
commit 32148179e6
5 changed files with 111 additions and 82 deletions

View file

@ -61,8 +61,8 @@ Minimal `flake.nix` for a host that runs hive-c0re:
modules = [ modules = [
hyperhive.nixosModules.default # hive-c0re + hive-forge in one import hyperhive.nixosModules.default # hive-c0re + hive-forge in one import
({ ... }: { ({ ... }: {
services.hive-c0re.enable = true; hyperhive.enable = true;
# services.hive-c0re.operatorPronouns = "they/them"; # default: "she/her" # hyperhive.c0re.operatorPronouns = "they/them"; # default: "she/her"
# ... rest of your host config # ... rest of your host config
system.stateVersion = "25.11"; system.stateVersion = "25.11";
@ -78,7 +78,7 @@ manager container, and auto-rebuilds any container whose hyperhive
rev goes stale. `claude-code` is unfree — hyperhive scopes the rev goes stale. `claude-code` is unfree — hyperhive scopes the
whitelist to itself, nothing for the operator to set. whitelist to itself, nothing for the operator to set.
Optional: set `services.hive-c0re.preBuildAgentTemplates = true;` Optional: set `hyperhive.c0re.preBuildAgentTemplates = true;`
to pre-fetch the per-container system closures into your host's to pre-fetch the per-container system closures into your host's
/nix/store as part of `nixos-rebuild`. First-agent-spawn then /nix/store as part of `nixos-rebuild`. First-agent-spawn then
completes in seconds instead of minutes (no nixpkgs/claude-code completes in seconds instead of minutes (no nixpkgs/claude-code

View file

@ -76,7 +76,7 @@ match wins):
1. `HIVE_CONTEXT_WINDOW_TOKENS_<KEY>` env var, where `KEY` 1. `HIVE_CONTEXT_WINDOW_TOKENS_<KEY>` env var, where `KEY`
(lowercased) is a substring of the active model name. Injected (lowercased) is a substring of the active model name. Injected
by the meta flake from `services.hive-c0re.contextWindowTokens` by the meta flake from `hyperhive.c0re.contextWindowTokens`
(host-level NixOS option, defaults: haiku=200k, sonnet=1M, (host-level NixOS option, defaults: haiku=200k, sonnet=1M,
opus=1M). Override these for all agents at once without a opus=1M). Override these for all agents at once without a
per-agent config change. per-agent config change.
@ -178,7 +178,7 @@ socket at `/run/hive/` once at startup:
#519); everything else is shared. Then `{label}` and #519); everything else is shared. Then `{label}` and
`{operator_pronouns}` get substituted in the assembled output. `{operator_pronouns}` get substituted in the assembled output.
Pronouns come from `HIVE_OPERATOR_PRONOUNS` env (set by the meta Pronouns come from `HIVE_OPERATOR_PRONOUNS` env (set by the meta
flake from `services.hive-c0re.operatorPronouns`, default flake from `hyperhive.c0re.operatorPronouns`, default
`she/her`). Passed via `--system-prompt-file`. `she/her`). Passed via `--system-prompt-file`.
The shared per-turn plumbing lives in `hive_ag3nt::turn::{write_mcp_config, The shared per-turn plumbing lives in `hive_ag3nt::turn::{write_mcp_config,

View file

@ -225,7 +225,7 @@
agent-base = ./nix/templates/agent-base.nix; agent-base = ./nix/templates/agent-base.nix;
manager = ./nix/templates/manager.nix; manager = ./nix/templates/manager.nix;
# The hive-c0re module wants `pkgs.hyperhive` for its default # The hive-c0re module wants `pkgs.hyperhive` for its default
# `services.hive-c0re.package`. To avoid making operators apply an # `hyperhive.c0re.package`. To avoid making operators apply an
# overlay (which would also pollute their host pkgs with our # overlay (which would also pollute their host pkgs with our
# build), we thread the package straight from this flake's # build), we thread the package straight from this flake's
# `packages.<system>.default` via a `hyperhivePackage` argument. # `packages.<system>.default` via a `hyperhivePackage` argument.
@ -237,7 +237,7 @@
hyperhiveAssets = system: self.packages.${system}.assets; hyperhiveAssets = system: self.packages.${system}.assets;
hyperhiveFlake = "${self}"; hyperhiveFlake = "${self}";
# Per-container toplevels — wired into `system.extraDependencies` # Per-container toplevels — wired into `system.extraDependencies`
# when `services.hive-c0re.preBuildAgentTemplates` is on so the # when `hyperhive.c0re.preBuildAgentTemplates` is on so the
# host system closure pre-fetches the heavy build inputs (#97). # host system closure pre-fetches the heavy build inputs (#97).
# Defined only for x86_64-linux because nixosConfigurations are # Defined only for x86_64-linux because nixosConfigurations are
# hardcoded to that system; the option's default keeps the # hardcoded to that system; the option's default keeps the
@ -252,7 +252,7 @@
# in hive-forge). Intended usage: # in hive-forge). Intended usage:
# #
# imports = [ hyperhive.nixosModules.default ]; # imports = [ hyperhive.nixosModules.default ];
# services.hive-c0re.enable = true; # hyperhive.enable = true;
# #
default = self.nixosModules.hive-c0re; default = self.nixosModules.hive-c0re;
}; };

View file

@ -13,7 +13,7 @@
... ...
}: }:
let let
cfg = config.services.hive-c0re; cfg = config.hyperhive.c0re;
in in
{ {
# The forge is part of the standard install — hive-c0re mirrors # The forge is part of the standard install — hive-c0re mirrors
@ -26,6 +26,10 @@ in
./hive-matrix.nix ./hive-matrix.nix
]; ];
# Top-level hyperhive enable flag. When true, automatically enables
# hive-c0re and hyperhive subsystems.
options.hyperhive.enable = lib.mkEnableOption "hyperhive the agent swarm coordinator";
# Top-level option shared by any hyperhive subsystem that needs a # Top-level option shared by any hyperhive subsystem that needs a
# stable hostname (matrix server_name today, forge ROOT_URL likely # stable hostname (matrix server_name today, forge ROOT_URL likely
# next). Type is nullable + default null so existing operator # next). Type is nullable + default null so existing operator
@ -46,8 +50,23 @@ in
''; '';
}; };
options.services.hive-c0re = { # Deprecated alias for backward compatibility. Remove in v0.2.
enable = lib.mkEnableOption "hive-c0re hyperhive coordinator daemon"; options.services.hive-c0re.enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
**DEPRECATED** (as of #612). Use `hyperhive.enable = true` or
`hyperhive.c0re.enable = true` instead. This option is maintained
for backward compatibility and will be removed in a future release.
'';
};
options.hyperhive.c0re = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.hyperhive.enable;
description = "Enable hive-c0re coordinator daemon (auto-enabled by hyperhive.enable).";
};
package = lib.mkOption { package = lib.mkOption {
type = lib.types.package; type = lib.types.package;
default = hyperhivePackage pkgs.stdenv.hostPlatform.system; default = hyperhivePackage pkgs.stdenv.hostPlatform.system;
@ -166,7 +185,16 @@ in
}; };
}; };
config = lib.mkIf cfg.enable { config = lib.mkMerge [
# Backward-compatibility redirect for deprecated services.hive-c0re.enable
(lib.mkIf config.services.hive-c0re.enable {
hyperhive.c0re.enable = true;
warnings = [
"services.hive-c0re.enable is deprecated (as of #612). Use 'hyperhive.enable = true' or 'hyperhive.c0re.enable = true' instead."
];
})
# Main config block
(lib.mkIf cfg.enable {
environment.systemPackages = [ environment.systemPackages = [
cfg.package cfg.package
pkgs.git pkgs.git
@ -238,5 +266,6 @@ in
StateDirectory = "hyperhive"; StateDirectory = "hyperhive";
}; };
}; };
}; })
];
} }

View file

@ -36,7 +36,7 @@
`"haiku"`, `"sonnet"`, `"opus"` (or any future identifier). Context `"haiku"`, `"sonnet"`, `"opus"` (or any future identifier). Context
window sizes are looked up at runtime from the window sizes are looked up at runtime from the
`HIVE_CONTEXT_WINDOW_TOKENS_<KEY_UPPER>` env vars injected by the `HIVE_CONTEXT_WINDOW_TOKENS_<KEY_UPPER>` env vars injected by the
meta flake; override sizes via `services.hive-c0re.contextWindowTokens` meta flake; override sizes via `hyperhive.c0re.contextWindowTokens`
on the host. on the host.
''; '';
}; };
@ -595,7 +595,7 @@
# both the harness binary and any user-shell `cargo run` inside the # both the harness binary and any user-shell `cargo run` inside the
# container resolve them from the same path. # container resolve them from the same path.
# HIVE_CONTEXT_WINDOW_TOKENS_* are injected by the meta flake from the # HIVE_CONTEXT_WINDOW_TOKENS_* are injected by the meta flake from the
# host-level `services.hive-c0re.contextWindowTokens` option — not set here. # host-level `hyperhive.c0re.contextWindowTokens` option — not set here.
environment.variables = { environment.variables = {
HIVE_DEFAULT_MODEL = config.hyperhive.model; HIVE_DEFAULT_MODEL = config.hyperhive.model;
HIVE_ASSETS_DIR = "${pkgs.hyperhive-assets}/share/hyperhive"; HIVE_ASSETS_DIR = "${pkgs.hyperhive-assets}/share/hyperhive";