nix: move the agent option namespace under services.hyperhive.agent
Every per-agent harness option lived at the top-level `hyperhive.*` while the host tier has always been `services.hyperhive.*`. Move all 52 agent-tier option leaves (33 top-level names across 16 modules) to `services.hyperhive.agent.*`, repoint every read, and keep existing agent configs evaluating through one `mkRenamedOptionModule` per old leaf path in the new nix/agent-modules/renamed-options.nix. The shims are per leaf rather than per namespace: `user`, `mcp`, `otel`, `queue`, `docs`, `forge`, `frontend`, `github`, `gui`, `logs`, `matrix` and `cargo` are plain attrsets of declarations, not submodule-typed options, so a parent-path rename would not reach their children. Three read-only options (`frontend.mergedDist`, `queue.clientIdFile`, `queue.clientSecretFile`) deliberately get no shim — a rename contributes a definition, which a read-only option refuses; the exclusions are commented in place. Refs #4473
This commit is contained in:
parent
60393d0e32
commit
3662eda440
21 changed files with 531 additions and 290 deletions
|
|
@ -8,8 +8,8 @@ let
|
|||
# GUI processes run as the agent's own non-root user — the same user
|
||||
# hive-agent runs as (declared + home-chowned by ./user.nix) — so
|
||||
# weston, the wayland client, and the agent share one user session.
|
||||
# `hyperhive.user.name` is set per-agent by the meta-flake renderer.
|
||||
userName = config.hyperhive.user.name;
|
||||
# `services.hyperhive.agent.user.name` is set per-agent by the meta-flake renderer.
|
||||
userName = config.services.hyperhive.agent.user.name;
|
||||
|
||||
# Static weston config. `[core] idle-time=0` disables the 300s idle /
|
||||
# lock screen; `[vnc] auth-method=none` + the `--disable-transport-
|
||||
|
|
@ -31,7 +31,7 @@ let
|
|||
in
|
||||
{
|
||||
# Optional Weston (Wayland compositor) with the VNC backend,
|
||||
# surfaced as a per-agent `hyperhive.gui.enable` option. Imported
|
||||
# surfaced as a per-agent `services.hyperhive.agent.gui.enable` option. Imported
|
||||
# from ./default.nix so every sub-agent + the manager sees the
|
||||
# option; only those that flip it on get the service.
|
||||
#
|
||||
|
|
@ -41,7 +41,7 @@ in
|
|||
# Harness-side WebSocket relay shape: docs/web-ui/agent.md::Per-agent
|
||||
# endpoints (`/screen` + `/screen/ws`).
|
||||
|
||||
options.hyperhive.gui.enable = lib.mkOption {
|
||||
options.services.hyperhive.agent.gui.enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
|
|
@ -50,7 +50,7 @@ in
|
|||
relay. Renders in software (pixman) — no GPU, DRM, or VT
|
||||
access, so no extra container capabilities are needed.
|
||||
|
||||
Weston binds a fixed VNC port (`hyperhive.gui.vncPort`) on the
|
||||
Weston binds a fixed VNC port (`services.hyperhive.agent.gui.vncPort`) on the
|
||||
container's own loopback. Network isolation is unconditional
|
||||
(each agent has its own netns), so a fixed port can't collide
|
||||
across containers — no per-agent hashing needed. The harness
|
||||
|
|
@ -60,7 +60,7 @@ in
|
|||
loop instead of blocking `nixos-container update`.
|
||||
|
||||
Weston, the wayland client and the agent harness run as the
|
||||
agent's own non-root user (`hyperhive.user.name`), sharing one
|
||||
agent's own non-root user (`services.hyperhive.agent.user.name`), sharing one
|
||||
session: a fixed `XDG_RUNTIME_DIR=/run/gui`, one wayland display,
|
||||
and one D-Bus session bus at `/run/gui/bus` (gui-dbus.service),
|
||||
so GUI clients need no private `dbus-run-session`.
|
||||
|
|
@ -73,7 +73,7 @@ in
|
|||
# is container-local and can't collide. Internal: the harness reads
|
||||
# the value via the `HIVE_GUI_VNC_PORT` env var the harness service
|
||||
# injects from this option, not directly.
|
||||
options.hyperhive.gui.vncPort = lib.mkOption {
|
||||
options.services.hyperhive.agent.gui.vncPort = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
default = 5900;
|
||||
internal = true;
|
||||
|
|
@ -84,14 +84,14 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
config = lib.mkIf config.hyperhive.gui.enable {
|
||||
config = lib.mkIf config.services.hyperhive.agent.gui.enable {
|
||||
# The GUI must run non-root: weston + the wayland client share the
|
||||
# agent's own user session. `user.name` is the agent name for every
|
||||
# spawned agent; only a misconfigured root-named agent would trip this.
|
||||
assertions = [
|
||||
{
|
||||
assertion = userName != "root";
|
||||
message = "hyperhive.gui.enable requires a non-root hyperhive.user.name (the GUI runs as that user).";
|
||||
message = "services.hyperhive.agent.gui.enable requires a non-root services.hyperhive.agent.user.name (the GUI runs as that user).";
|
||||
}
|
||||
];
|
||||
|
||||
|
|
@ -177,7 +177,7 @@ in
|
|||
--config=${westonIni} \
|
||||
--backend=vnc-backend.so \
|
||||
--renderer=pixman \
|
||||
--port=${toString config.hyperhive.gui.vncPort} \
|
||||
--port=${toString config.services.hyperhive.agent.gui.vncPort} \
|
||||
--socket=wayland-0 \
|
||||
--disable-transport-layer-security
|
||||
'';
|
||||
|
|
|
|||
Loading…
Reference in a new issue