docs: the forge is swarm-wide but not optional, so it derives nothing

Both the option description and docs/swarm.md listed the forge among the
services whose `enable` defaults from `swarm.enableRequiredServices`.
It has no `enable`: it is the canonical store for the meta flake and
every agent's config repo, so it deploys with hyperhive itself.

The distinction is worth stating rather than deleting — a reader who
sees matrix and authelia listed and the forge absent would reasonably
wonder whether the forge is per-hive. It isn't; it's mandatory.
This commit is contained in:
atlas 2026-08-05 18:04:48 +02:00
commit ade0bf24c5
2 changed files with 19 additions and 8 deletions

View file

@ -116,8 +116,8 @@ swarm's trust hierarchy.
## Running the swarm's shared services ## Running the swarm's shared services
Some things exist once per **swarm**, not once per hive: the forge, the Some things exist once per **swarm**, not once per hive: the forge, the
matrix homeserver, the SSO provider, the CA. Two options say where they matrix homeserver, the SSO provider, the CA. Two options say where the
live, and everything else derives: optional ones live, and everything else derives:
```nix ```nix
services.hyperhive.enableAllLocalDefaults = true; # everything on this box services.hyperhive.enableAllLocalDefaults = true; # everything on this box
@ -137,6 +137,11 @@ operator saying so rather than something inferred. With them off, a hive
is a *client* of those services — it configures how to reach them and is a *client* of those services — it configures how to reach them and
runs none of them. runs none of them.
The forge is the exception, and not because it is per-hive: it is
swarm-wide but **not optional**, being the canonical store for the meta
flake and every agent's config repo, so it deploys with hyperhive itself
and has no `enable` to derive from anything.
### SSO (authelia) ### SSO (authelia)
One authelia per swarm, in a `swarm-authelia` container, at One authelia per swarm, in a `swarm-authelia` container, at

View file

@ -127,9 +127,10 @@
}; };
# "The swarm-wide services run HERE." A swarm has one forge, one # "The swarm-wide services run HERE." A swarm has one forge, one
# matrix, one SSO — this says this host is where they live, and each # matrix, one SSO — this says this host is where they live. The
# of those services defaults its own enable from it rather than the # OPTIONAL ones (matrix, authelia) default their own enable from it,
# operator enabling them one at a time. # rather than the operator enabling them one at a time; the forge has
# no enable to derive because it is not optional.
options.services.hyperhive.swarm.enableRequiredServices = lib.mkOption { options.services.hyperhive.swarm.enableRequiredServices = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = config.services.hyperhive.enableAllLocalDefaults; default = config.services.hyperhive.enableAllLocalDefaults;
@ -137,9 +138,14 @@
example = true; example = true;
description = '' description = ''
Host the swarm's shared services on this hive. The services that Host the swarm's shared services on this hive. The services that
exist once per swarm rather than once per hive the forge, the exist once per swarm rather than once per hive and are *optional*
matrix homeserver, the SSO provider default their `enable` from the matrix homeserver, the SSO provider default their
this, so a swarm's service host is declared in one place. `enable` from this, so a swarm's service host is declared in one
place.
The forge is swarm-wide too but has no `enable` to derive: it is
the canonical store for the meta flake and every agent's config
repo, so it deploys with hyperhive itself and is not optional.
Defaults from `services.hyperhive.enableAllLocalDefaults` (off), Defaults from `services.hyperhive.enableAllLocalDefaults` (off),
which is the all-on-one-box switch. Set it directly to run the which is the all-on-one-box switch. Set it directly to run the