Database is more usable now. All pages have been updated to use the database, and share an application configuration. Page Stack has been removed, no more pages hanging around in memory. Replaced with a 'Router' which uses an Enum to determine which page should be displayed, destroys the old page and initializes the new page all in one go. No more push, pop, rollback, etc. No more holding instances of pages. Logger has been updated with proper timestamps and sorting now works as expected."
55 lines
2.0 KiB
Markdown
55 lines
2.0 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
|
|
|
|
### Development Rules
|
|
These rules must be followed during the development of RhemaWave to retain a
|
|
maintainable application.
|
|
1. The Application package is soley responsible for managing the database handler, and the
|
|
configuration cache. Internal packages may update the configuration within the database, and
|
|
then signal the application to refresh the cache via a callback function `refreshCache()`.
|
|
|
|
## Deployment
|
|
|
|
Deployed to kiosk hardware via NixOS-Anywhere. See `packaging/` for kiosk system configs.
|