- nixos/vm.nix: enable PasswordAuthentication for kiosk user (SSH test access) - scripts/test-vm.sh: one-command build → start → diagnose workflow - macOS: builds and runs on remote Linux server, SSH through server - Linux: builds and runs locally - Commands: --build, --start, --stop, --diagnose, --shell - Diagnostics: NetworkManager, PipeWire, wpctl, ALSA, pactl, processes, logs - AGENTS.md: compact agent guide for the repo
2.3 KiB
RadiantWave Agent Guide
What This Is
Go kiosk application using SDL2, OpenGL 3.3, SQLite (via GORM), and D-Bus (NetworkManager). Nix flake is the primary build system. CI runs on Forgejo (not GitHub Actions).
Build & Run
Dev shell via direnv (use flake in .envrc). Inside the nix dev shell:
# Build
go build -o bin/rhemawave rhemawave.go
# Run
./bin/rhemawave
# Nix build (CI uses this)
nix build -L
CGO is required (CGO_ENABLED=1). The nix dev shell and flake.nix preBuild set the necessary CGO_CFLAGS and CGO_LDFLAGS for SDL2. Do not attempt a plain go build outside the nix shell — it will fail on missing SDL2 headers.
Tests
Only one test suite exists: internal/mixer/mixer_test.go. Run with:
go test ./internal/mixer/
No lint or typecheck commands are configured in the repo. CI only runs nix build -L.
Branch Model
dev → main via pull requests. CI workflows are in .forgejo/workflows/:
build-dev.yml: PRs todevbuild-prod.yml: PRs tomain
Both run nix build -L on a self-hosted runner (neils-server-runner).
Key Architecture
- Entry:
rhemawave.go→internal/application.Run() - State machine:
internal/application/application.go— FIRST_RUN → NEEDS_INTERNET → NEEDS_EMAIL_ADDRESS → NEEDS_LICENSE_KEY → DOWNLOADING_ASSETS → READY - Pages:
internal/page/— router pattern with page interface (page.go) - DB: SQLite at
~/.local/share/rhemawave/database.sqlite, managed by GORM ininternal/db/ - Assets:
share/rhemawave/(fonts, shaders, proclamations, tos) — copied into nix store at build time - Audio:
.wavfiles are gitignored, downloaded at runtime fromfiles.radiantwavetech.com - Vendor: Dependencies are vendored and committed. Use
go mod vendorafter adding deps.
Common Pitfalls
- The
dev_scripts/reset.shreferenced in the nix devShell hook does not exist in the repo. share/rhemawave/audio/*.wavis gitignored — do not commit audio assets.- The
vendor/directory is committed — always rungo mod vendoraftergo mod tidy. - CI runs on a self-hosted Forgejo runner, not GitHub-hosted runners. Workflows source nix via
/nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh. - The
packaging/directory contains a kiosk-specific updater script and is not part of the main build.