hyperhive/nix/host-modules
Repository files (latest commit first)
Filename Latest commit message Latest commit date
atlas 2f7d3e02e9 bao: write the swarm controller's policy from inside the store
Cert auth answers a role, so nothing in the swarm can authenticate to
the store until some role exists. Creating the first one therefore
cannot itself use a certificate — the credential has to come from
outside that cycle, and an operator places it.

`deploy.bao.bootstrapTokenFile` names that token. A one-shot unit inside
the store's container reads it and writes the `swarm-controller` policy;
`local-defaults.nix` supplies the path (never the file) on an all-local
deploy, since co-location makes only the location derivable. `bao
operator init` stays an operator action in every shape.

The unit runs in the container rather than on the host because writing
the first grant is a store-side operation: it reaches the store locally
and needs no client certificate. Gating it on the store being here is
therefore not the co-location assumption glue-matrix-bao-token.nix
warns about — a reader has to work from anywhere, the first write never
does.

Policy only, deliberately: a cert-auth role binds a certificate and the
controller has no bao identity yet — it holds no leaf and contains no
bao code at all. The two certificates that do exist are both wrong to
bind. `clientCertFile` is the store host's own reader leaf rather than
the controller's, and the CA that signed it also signs every other
reader's, so binding that would let any reader authenticate as the
controller. Whoever gives the controller an identity writes the role.

The grants are scoped to `hive-*`. Without the prefix the controller
could rewrite the policy that constrains it.

Two things the module-eval arms pin: the unit renders inside the
container with the token path in both its script and its
ConditionPathExists, and a host that names a token while running no
store gets neither the unit nor the host-side directory.

The capabilities were derived with `bao write -output-policy` rather
than written from memory, and the setup.md commands were run against a
real binary for shape before being written down.

Refs #3726.
2026-09-07 18:43:09 +02:00
..
hive-c0re nix: split statusPublish and the otel secret into deploy.* 2026-09-07 16:54:23 +02:00
hive-forge deploy: move authelia's three host paths out of swarm.authelia 2026-09-07 15:44:07 +02:00
hive-gateway docs: matrix gateway vhost defaults to chat.<swarm-domain>, not matrix.<domain> 2026-09-07 16:53:22 +02:00
lib swarm: extract the name guards, so the module just says what is forbidden 2026-08-31 18:50:15 +02:00
swarm-grafana/dashboards treefmt: apply prettier 2026-09-02 15:25:07 +02:00
default.nix glue-matrix-bao-token: the store's first reader 2026-08-30 19:01:10 +02:00
deploy.nix nix: split statusPublish and the otel secret into deploy.* 2026-09-07 16:54:23 +02:00
glue-bao-tls.nix swarm-bao: ship the store's logs and metrics 2026-08-31 21:25:00 +02:00
glue-matrix-bao-token.nix deploy: split the homeserver's host decisions out of swarm.matrix 2026-09-07 14:24:52 +02:00
hive-ci.nix deploy: split the forge's host decisions out of swarm.forge 2026-09-07 14:24:52 +02:00
hive-matrix.nix matrix: derive the gateway's body cap from maxRequestSize 2026-09-07 16:53:43 +02:00
hive-network.nix docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
hive-priv.nix docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
hive-tls.nix docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
hyperhive.nix docs: restructure into topic subdirectories, collapse duplicated index 2026-09-02 01:55:37 +02:00
local-defaults.nix bao: write the swarm controller's policy from inside the store 2026-09-07 18:43:09 +02:00
otel.nix deploy: move authelia's three host paths out of swarm.authelia 2026-09-07 15:44:07 +02:00
stylix-theme.nix swarm-ui: apply the operator's stylix theme, same as the dashboard already does 2026-08-24 14:28:25 +02:00
swarm-authelia.nix deploy: move authelia's three host paths out of swarm.authelia 2026-09-07 15:44:07 +02:00
swarm-bao.nix bao: write the swarm controller's policy from inside the store 2026-09-07 18:43:09 +02:00
swarm-ca.nix swarm-ca: state the store-is-world-readable rule once, not three times 2026-09-02 09:03:35 +02:00
swarm-container-resolver.nix fix(#3363): swarm containers write their own resolver file 2026-08-17 17:30:15 +02:00
swarm-controller.nix deploy: move authelia's three host paths out of swarm.authelia 2026-09-07 15:44:07 +02:00
swarm-grafana.nix deploy: move authelia's three host paths out of swarm.authelia 2026-09-07 15:44:07 +02:00
swarm-nats.nix deploy: move authelia's three host paths out of swarm.authelia 2026-09-07 15:44:07 +02:00
swarm-otel.nix nix: split statusPublish and the otel secret into deploy.* 2026-09-07 16:54:23 +02:00
swarm-peers-removed.nix docs+nix: fix stale certFingerprint/HYPERHIVE_PEERS references (hyperhive#3294) 2026-08-15 19:56:11 +02:00
swarm-required-services.nix deploy: rename enableAllLocalDefaults to deploy.singleHostSwarm 2026-08-30 20:12:16 +02:00
swarm-snapshot-store.nix deploy: move the wireguard mesh out of the namespace hives read 2026-09-07 14:24:52 +02:00
swarm-ui.nix deploy: move the controller's socket and credentials out of swarm.controller 2026-09-07 14:24:52 +02:00
swarm-victorialogs.nix containers: put journal files on the host, where the collector looks 2026-09-02 23:00:30 +02:00
swarm-victoriametrics.nix containers: put journal files on the host, where the collector looks 2026-09-02 23:00:30 +02:00
swarm-wireguard.nix deploy: move the wireguard mesh out of the namespace hives read 2026-09-07 14:24:52 +02:00
swarm.nix nix: split statusPublish and the otel secret into deploy.* 2026-09-07 16:54:23 +02:00