48 lines
1.6 KiB
Markdown
48 lines
1.6 KiB
Markdown
# 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.
|