48 lines
1.7 KiB
Markdown
48 lines
1.7 KiB
Markdown
# ECP-0064: NixOS Module For `ec-node` WebTransport Publisher (Tower)
|
|
|
|
Status: Draft
|
|
|
|
## Decision
|
|
|
|
Ship a first-party NixOS module in this repo that runs `ec-node wt-publish` as one or more `systemd` services.
|
|
|
|
The module:
|
|
|
|
- Lives in-repo and is exported from the flake as `nixosModules.ec-node`.
|
|
- Builds `ec-node` from this repo via Nix (no mutable checkout required on the target host).
|
|
- Accepts a read-only configuration (in Nix) for:
|
|
- HDHomeRun identity (either `host` IP/DNS, or `deviceId` with optional LAN discovery).
|
|
- A list of broadcasts (name + channel) to publish.
|
|
- Relay URL and a small set of `wt-publish` toggles (transcode/passthrough/TLS verify).
|
|
|
|
`~/Projects/nix` will consume this module as a flake input and enable it on the `conrad-tower` host, deploying with the existing `deploy-flake` workflow.
|
|
|
|
## Motivation
|
|
|
|
Tower should run publishing continuously, reproducibly, and without "tmux as an orchestration layer".
|
|
|
|
NixOS + systemd gives:
|
|
|
|
- Immutable configuration for the HDHR/relay/channel list.
|
|
- Easy deployment/rollback via the existing host flake.
|
|
- Restart and journald logs for long-running publishers.
|
|
|
|
## Scope
|
|
|
|
In scope:
|
|
|
|
- Nix packaging for `ec-node` sufficient to run `wt-publish`.
|
|
- A module that instantiates a `systemd` unit per broadcast.
|
|
- Optional HDHR host resolution via device-id + local network discovery (best-effort).
|
|
|
|
Out of scope (defer):
|
|
|
|
- ABR/multi-variant ladders from Nix config.
|
|
- Automatic lineup-based channel selection by callsign.
|
|
- Secrets management (publisher doesn't require secrets for Cloudflare relay preview).
|
|
|
|
## Rollout / Reversibility
|
|
|
|
- Enabling the module is per-host.
|
|
- Reversible by removing the module import and disabling the service(s); roll back with the existing deployment tooling.
|
|
|