504095caa8261e0ebec7d9482a023c759bbf8152
Updated Sync functions to perform proper synchronizations instead of pure downloads. This means that if something is deleted on the server, it will be deleted on the client as well, instead of just left hanging. The SyncProclamations function was also updated to perform this way, but while retaining the user's saved list.
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.
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 loglicense_key— license key file
Development Rules
These rules must be followed during the development of RhemaWave to retain a maintainable application.
- 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.
Languages
Go
86.1%
Shell
4.9%
Python
4.5%
Nix
2.5%
HTML
1.4%
Other
0.6%