# Migration shim for `services.hyperhive.swarm.peers`, replaced by the # `swarm.hives` directory in ./swarm.nix. # # ⚠️ This could not be a `mkRenamedOptionModule`. `hives` is not `peers` # under a new name, it is **`peers` ∪ {self}**: the set gains a member no # existing config has ever written down, because a host's own identity # lived in *other* options entirely. A rename migrates a name and a # default can re-root a meaning; neither can conjure a new member. # # The whole module is self-contained and deletable — one file to remove # when the deprecation window closes, with nothing else referring to it. # # Deliberately a warning rather than a hard failure, with the loudness # coming from elsewhere: a config that set only `peers` leaves `hives` # empty, so the self-entry assertion in ./swarm.nix fails the build # anyway. The warning is what explains it; the assertion is what stops # it. { lib, config, ... }: let peers = config.services.hyperhive.swarm.peers; withCaCert = lib.attrNames (lib.filterAttrs (_: p: p ? caCert && p.caCert != null) peers); in { options.services.hyperhive.swarm.peers = lib.mkOption { type = lib.types.attrsOf lib.types.anything; default = { }; visible = false; internal = true; description = '' Removed — use `services.hyperhive.swarm.hives` instead, which describes every hive in the swarm including this one. Kept only so an existing definition produces a warning that says where to move it, rather than an "option does not exist" error that says nothing. ''; }; config.warnings = lib.optional (peers != { }) '' services.hyperhive.swarm.peers is removed and ignored. Move these entries to services.hyperhive.swarm.hives, keyed by hive NAME rather than domain, and add an entry for this hive itself (services.hyperhive.hiveName) — `hives` is the swarm's full directory, identical on every host. services.hyperhive.swarm.hives. = { domain = ""; # wireguard* carries over unchanged }; Still set: ${lib.concatStringsSep ", " (lib.attrNames peers)} '' ++ lib.optional (withCaCert != [ ]) '' services.hyperhive.swarm.peers..caCert is removed and ignored, and has no replacement in services.hyperhive.swarm.hives. Trust inside a swarm now derives from the swarm root CA (services.hyperhive.swarm.ca — see docs/swarm/ca.md): every hive under it chains to it, so a per-hive CA is dead weight. What this genuinely drops is trusting a hive whose root this swarm does NOT own — another swarm's, or one keeping its own CA. Still set on: ${lib.concatStringsSep ", " withCaCert} ''; }