summaryrefslogtreecommitdiff
path: root/desktop/build.gradle.kts
diff options
context:
space:
mode:
authorElizabeth Alexander Hunt <me@liz.coffee>2026-11-12 21:11:08 -0800
committerElizabeth Alexander Hunt <me@liz.coffee>2026-11-12 21:11:08 -0800
commit3afb04de43726d71580b626e856c68b6ed79984e (patch)
tree33f7bcb227ff8cfcb046a10036d2faa69c2edd1f /desktop/build.gradle.kts
downloadrookery-3afb04de43726d71580b626e856c68b6ed79984e.tar.gz
rookery-3afb04de43726d71580b626e856c68b6ed79984e.zip
Rookery: penguin-themed cubing toolkit, phases 0-1 and GAN BLE
Kotlin Multiplatform + Compose desktop app. - Sync: per-device append-only op logs (HLC-stamped LWW) in a plain folder, safe under Syncthing/Drive; content-addressed image blobs. - Timer: WCA inspection, +2/DNF, solve table, WCA-correct aoN/moN, per-event lifetime PBs with a pixel-penguin party and synthesized 8-bit chime. Mascot sprite from liz.coffee. - Scrambles for all WCA events + FTO via tnoodle-lib, with previews. - Importers: csTimer exports (incl. smart-cube reconstructions and cube MACs) and the Letter Pair Gym prototype (words, notes, images, history, practice stats). Idempotent; headless `--import`. - Letter-pair grid with miss heatmap, glance lookup and editor. - 3D puzzle engine (polyhedron + cut planes) and Canvas renderer: NxN 2-7, Pyraminx, Skewb, verified sticker-for-sticker against tnoodle; 3D replay of smart-cube solves. - GAN Gen2/3/4 smart-cube protocol (ported from gan-web-bluetooth, MIT) with a BlueZ D-Bus transport and `--cube scan|monitor` CLI. Not yet tested against hardware. - lizCI pipeline (.ci) building a test+package Docker target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Diffstat (limited to 'desktop/build.gradle.kts')
-rw-r--r--desktop/build.gradle.kts30
1 files changed, 30 insertions, 0 deletions
diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts
new file mode 100644
index 0000000..d143c5f
--- /dev/null
+++ b/desktop/build.gradle.kts
@@ -0,0 +1,30 @@
+import org.jetbrains.compose.desktop.application.dsl.TargetFormat
+
+plugins {
+ alias(libs.plugins.kotlin.jvm)
+ alias(libs.plugins.kotlin.compose)
+ alias(libs.plugins.compose)
+}
+
+kotlin { jvmToolchain(21) }
+
+dependencies {
+ implementation(project(":ui"))
+ implementation(compose.desktop.currentOs)
+ implementation(libs.coroutines.swing)
+}
+
+compose.desktop {
+ application {
+ mainClass = "coffee.liz.rookery.desktop.MainKt"
+ jvmArgs += listOf("-Xmx256m", "-XX:+UseSerialGC")
+ nativeDistributions {
+ targetFormats(TargetFormat.AppImage, TargetFormat.Deb)
+ packageName = "rookery"
+ packageVersion = "0.1.0"
+ }
+ }
+}
+
+// `./gradlew :desktop:run --args="--import file.txt"` passes args through; env lets tests point at a scratch home.
+tasks.withType<JavaExec>().configureEach { environment.putAll(System.getenv().filterKeys { it.startsWith("XDG_") || it.startsWith("ROOKERY_") }) }