initial commit

This commit is contained in:
NeilClack
2026-08-07 14:51:41 -05:00
commit 9251b3a196
604 changed files with 464448 additions and 0 deletions
+143
View File
@@ -0,0 +1,143 @@
{
lib,
stdenv,
cmake,
ninja,
pkg-config,
gtest,
makeWrapper,
sdl3,
sdl3-ttf,
sdl3-image,
sdl3-mixer,
sdl3-net,
sqlite,
curl,
openssl,
systemdLibs,
# Portal API key baked into the binary. Keep it out of the flake; pass it
# when calling callPackage from CI/your own config (see README "App version").
apiKey ? "",
}:
stdenv.mkDerivation (finalAttrs: {
pname = "radiantwave";
version = "0.1.0";
src = lib.cleanSourceWith {
filter =
name: type:
let
base = baseNameOf name;
in
!(builtins.elem base [
".git"
".github"
".vscode"
".DS_Store"
"build"
"archive"
]);
src = ../.;
};
nativeBuildInputs = [
cmake
ninja
pkg-config
makeWrapper
];
# Bake the package version into the binary so the Home footer's Version row
# shows it (CMake passes APP_VERSION through as a compile definition).
# API_KEY is only added when a non-empty key is supplied to callPackage.
cmakeFlags =
[ "-DAPP_VERSION=${finalAttrs.version}" ]
++ lib.optionals (apiKey != "") [ "-DAPI_KEY=${apiKey}" ];
# gtest is a buildInput, not native: nixpkgs builds it shared, so the
# check-phase test binaries need its lib dir baked into their RPATH.
buildInputs = [
gtest
sdl3
sdl3-ttf
sdl3-image
sdl3-mixer
sdl3-net
sqlite
curl
openssl
] ++ lib.optionals stdenv.isLinux [
# libsystemd provides the sd-bus client used by the NetworkManager code.
# It is only linked on Linux (guarded in network_manager.cpp).
systemdLibs
];
# nixpkgs disables tests by default; our checkPhase runs the offline suite.
doCheck = true;
checkPhase = ''
runHook preCheck
# The nixpkgs cmake hook runs this phase from inside ./build; the test
# binaries resolve `assets/...` relative to the source root.
cd ..
# No audio/video hardware exists in the build sandbox.
export SDL_VIDEODRIVER=dummy
export SDL_AUDIODRIVER=dummy
# Offline-safe suite. test_api_client and test_license_service are
# excluded: their "Live" tests hit the portal unconditionally and belong
# on a dev machine, not in a hermetic build sandbox.
for t in \
tests \
test_assets \
test_provisioning \
test_network_unit \
test_config \
test_db \
test_proclamation_sync \
test_license_status \
test_validation \
test_date_format \
test_timezone \
test_logger \
test_audio \
test_audio_downloader \
test_fibonacci_pattern \
test_scroller_streams \
test_fibonacci_scrambler \
test_color_palettes
do
echo "==> running $t"
./build/$t
done
runHook postCheck
# The cmake install phase runs ninja from the build dir; the test loop
# above left us in the source root.
cd "$cmakeBuildDir"
'';
postInstall = ''
# The app resolves `assets/...` relative to its working directory, so the
# wrapper chdirs into a read-only share directory before exec. The cmake
# hook leaves the CWD inside ./build; assets live in the source root.
cd ..
mkdir -p "$out/share/radiantwave"
cp -r assets "$out/share/radiantwave/assets"
mv "$out/bin/radiantwave" "$out/bin/.radiantwave-unwrapped"
makeWrapper "$out/bin/.radiantwave-unwrapped" "$out/bin/radiantwave" \
--chdir "$out/share/radiantwave"
'';
meta = with lib; {
description = "RadiantWave wellness kiosk application";
license = licenses.unfree;
platforms = platforms.linux ++ platforms.darwin;
mainProgram = "radiantwave";
};
})