# RhemaWave A Go-based fullscreen SDL2/OpenGL application for Linux kiosk systems. Displays proclamations with audio playback and animated visual patterns. ## Development Development uses Nix for a reproducible build environment. ```bash nix develop # enter dev shell go build -o bin/rhemawave rhemawave.go # build ./bin/rhemawave # run ./dev_scripts/reset.sh # reset database (if needed) ``` ### Prerequisites - Nix with flakes enabled - A display server (X11/Wayland) and audio device for running the application ## Architecture - **Page-based UI** — SDL2/OpenGL 3.3 fullscreen rendering with a page stack for navigation - **Proclamation player** — scrolling text display with synchronized audio playback - **Startup validation** — WiFi, TOS acceptance, email, license key checks - **Singleton managers** — ShaderManager, FontManager, Logger (initialized once via `sync.Once`) ### Key Directories ``` bin/ # build output (gitignored) share/rhemawave/ # assets (fonts, shaders, proclamations, TOS) internal/ # Go source packages packaging/ # deployment configs (kiosk, updater, polkit) dev_scripts/ # developer utilities ``` ### Runtime Data Stored in `~/.local/share/rhemawave/`: - `data.db` — SQLite database (config, proclamations, logs) - `log.txt` — application log - `license_key` — license key file ## Deployment Deployed to kiosk hardware via NixOS-Anywhere. See `packaging/` for kiosk system configs.