/
/
/
This repo is destined for my server automations and setup.
1---
2# =============================================================================
3# RUNNER HOST CONFIGURATION
4# =============================================================================
5
6# =============================================================================
7# BASIC HOST SETTINGS
8# =============================================================================
9server_hostname: "runner"
10server_type: "compute"
11gpu_enabled: true
12
13# =============================================================================
14# DOCKER CONFIGURATION
15# =============================================================================
16runner_docker_base_dir: "/docker"
17runner_enabled: true
18
19# Storage server connection (for NFS mounts)
20storage_server_ip: storage.home
21runner_nas_host: "{{ storage_server_ip }}"
22
23# =============================================================================
24# SERVICE CONFIGURATION
25# =============================================================================
26# Enable/disable individual services
27frigate_enabled: true
28immich_enabled: true
29forgejo_enabled: true
30web_tools_enabled: true
31tandoor_enabled: true
32ghost_enabled: true
33cvat_enabled: true
34harbor_enabled: true
35llm_stack_enabled: true
36livekit_enabled: true
37dnd_enabled: true
38macros_enabled: true
39# Alongside Tandoor for now; Tandoor is retired once recipes are moved over.
40mealie_enabled: true
41# Reached through the reverse proxy; BASE_URL drives links Mealie generates.
42mealie_base_url: "http://mealie.home"
43
44# The chapter is written by ONE call over the whole transcript, by a model whose
45# context can hold a session -- rather than the local chain of ~66 calls against
46# qwen3:14b, which cannot (a 4-hour transcript is ~61,000 tokens against a
47# 24,576 window).
48#
49# Measured across eight real sessions (E23-E28, C2E46/47): dice and table
50# leakage fell from 83 references to 12, and a chapter took ~5 minutes against
51# ~2 hours, at roughly $0.05 a session.
52#
53# **This sends the whole transcript to a third party.** Four hours of the
54# table's conversation goes to DeepSeek, whose consumer terms permit training on
55# submissions. Set back to "local" to keep an evening in the house; the local
56# path is unchanged and needs no network.
57dnd_chronicle_backend: "remote"
58
59# Renders the battlemap kiosk and streams it to the table Pi, which only
60# hardware-decodes it. Pulled from Harbor rather than built here, because the
61# same image also runs on the Pi.
62dnd_table_enabled: true
63
64# Publishes a recorded episode into a live session's room as the DM and the
65# table, so the atmosphere and lighting layers can be tuned against real
66# material before an evening is spent on them.
67#
68# Test scaffolding on the one always-on stack, so it is off by default and
69# behind its own compose profile as well as this flag. Nothing starts it
70# implicitly: the Chamberlain runs it on request, against the live session.
71dnd_testfeed_enabled: true
72
73# **`live`, overriding the role's `observe` default â deliberately and
74# temporarily.**
75#
76# In `observe` the agent decides everything and plays nothing: the timeline is
77# written either way and only acting is withheld, which is what makes a first
78# run safe. `live` lets those decisions reach the speakers and the lights.
79#
80# Set 2026-08-30 to hear and see the atmosphere and lighting layers against a
81# recorded episode through the test feeder. **This governs the LIGHTS as well
82# as the sound** â a room that quietly starts flickering during a session
83# nobody meant to be live is exactly the surprise the default exists to
84# prevent, so put it back to `observe` (or delete this line) when the tuning
85# run is done.
86#
87# Audio lands on hifi-node-dining, whose `dnd-atmosphere` receiver takes the
88# sound card for the session and hands it back afterwards.
89dnd_atmosphere_mode: "observe"
90
91# **Monitoring the replayed session, temporarily.** Mixes the feeder's own
92# audio in under the beds so the run can be listened to -- which is the only
93# way to judge whether a cue lands ON the beat. The timeline cannot answer
94# that: it records a cue firing 3 s after an utterance began, and utterances
95# run 10-30 s.
96#
97# **Remove this with `dnd_atmosphere_mode` above.** For a real table it is
98# feedback, not monitoring: the room already hears itself.
99dnd_monitor_session: true
100
101# Hardware acceleration override (runner has NVIDIA GPU)
102frigate_hardware_acceleration: "nvenc"
103immich_hardware_acceleration: "cuda"
104
105# =============================================================================
106# NETWORK SETTINGS
107# =============================================================================
108# Service ports (customize if needed)
109frigate_web_port: 5000
110immich_server_port: 2283
111forgejo_http_port: 3010
112web_tools_stirling_port: 8090
113tandoor_port: 8085
114ghost_port: 2368
115
116# LiveKit conferencing (7880 signaling, 7881 TCP, 7882 UDP mux, 7883 Meet UI)
117livekit_port: 7880
118livekit_meet_port: 7883
119
120# Fronted by Nginx Proxy Manager on homeassistant.home (192.168.34.203) with a
121# Let's Encrypt wildcard for *.rakys.xyz. Media (UDP 7882) is NOT proxied and
122# still goes browser -> runner directly.
123livekit_tls_enabled: true
124livekit_domain: "livekit.rakys.xyz"
125livekit_sfu_domain: "livekit-sfu.rakys.xyz"
126
127# D&D session agent (The Thaumaturgeon). One switch above controls the whole
128# stack. STT is not exposed through NPM: only containers on runner-network
129# talk to it.
130dnd_stt_host_port: 9010
131
132# The Chamberlain's web UI: create a campaign and a session, start and stop the
133# evening, run the post pass, send the recap.
134#
135# `dnd_room` used to live here as a single fixed LiveKit room. It is gone: rooms
136# are now derived per session as <campaign-slug>-<nnn>, so one fixed name would
137# have every session of every campaign share a room.
138chamberlain_http_port: 8095
139
140