Skip to content

isene/nomad

Repository files navigation

nomad — Fe₂O₃ on the phone

Kotlin Rust Platform License Stay Amazing

The mobile half of the Fe₂O₃ suite. Each app carries one Fe₂O₃ workflow off the laptop and onto an Android phone, sharing a single Rust core and syncing data over Syncthing — no Google account, no cloud middleman.

Landing page: isene.org/nomad

One Cargo workspace and one Gradle multi-project in a single monorepo. The interesting code lives in Rust (core/, crate fe2o3-mobile-core), exposed to Kotlin through UniFFI; each app is a thin Compose shell. Anything CPU-bound, data-heavy, or shared between apps belongs in the core, so the phone and the desktop tools compute identically.

The reason these are public domain is not that you should install them as-is. They are released for inspiration: clone the repo, fire up Claude Code, and prompt the changes that fit your phone.

The apps

App Role Pairs with
tasks HyperList todo editor + Glance home-screen widget for ~/.tasks/todo.hl scribe, kastrup
hyperlist General HyperList editor — full syntax highlighting, fold, drag-reorder across depth, auto-renumber scribe
relay Notification gateway: relays WhatsApp / Messenger / Instagram / SMS / Discord (and photos) to kastrup and fires replies — replaces the laptop's Marionette bridge kastrup
astro Amateur-astronomy companion: ephemeris, met.no weather + observing conditions, in-the-sky events, APOD, starchart, and a telescope/eyepiece gear catalog astro
watchit TMDB movie / series browser — top-rated & popular lists, wish/dump lists, posters, full detail, search-to-add watchit
amardice Amar RPG O6 dice roller: D6, skill, combat (crit/fumble tables), and fear rolls amar
xrpn Pocket HP-41 RPN scientific calculator — full stack/registers/modes, multi-shift keypad, and a FOCAL program runner xrpn
vox Voice quick-capture: records on launch, Whisper-transcribes, files the text to your todo.hl Inbox or a notes file laptop VTT
scribe Distraction-free notes pad — edit the .md/.hl/.txt files in your synced writing folder, monospace, no chrome scribe

Each ships as its own signed APK with its own launcher icon, sideloaded from a Syncthing-synced folder.

Architecture

nomad/
├── core/                       fe2o3-mobile-core (Rust, UniFFI)
│   ├── src/hyperlist*.rs        HyperList model, parser, highlighter
│   ├── src/astro/               ephemeris (orbit), weather, events, gear, images
│   ├── src/watchit/             TMDB models, parsers, filter/sort
│   ├── src/amardice.rs          O6 engine + crit/fumble/fear tables
│   └── src/xrpn/                RPN stack engine, formatter, FOCAL interpreter
├── apps/<name>/                 Kotlin/Compose shells (one Gradle module each)
├── Cargo.toml                   workspace root
├── settings.gradle.kts          Gradle multi-project root
└── gradle/libs.versions.toml    shared Android/Kotlin version catalog
  • Rust core + UniFFI for all logic. Never hand-rolled JNI.
  • Compose for screens, Glance for widgets, WorkManager for background work (respecting Doze and App Standby).
  • No business logic in Kotlin that could live in the core.

Design hierarchy, build quirks, and per-app notes live in CLAUDE.md.

Build

# Rust core — host tests (no emulator needed)
PATH="/usr/bin:$PATH" cargo test -p fe2o3-mobile-core

# An app's signed release APK
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export ANDROID_NDK_HOME="$HOME/.android-sdk/ndk/27.2.12479018"
./gradlew :apps:<name>:assembleRelease

cargo-ndk cross-compiles the core to all four Android ABIs; uniffi-bindgen generates the Kotlin bindings at build time. The APK lands in apps/<name>/build/outputs/apk/release/.

Sync to phone

Build the signed APK, drop it (and any shared data files) into a Syncthing-shared folder, and sideload on the phone. Per-app data — ~/.tasks/todo.hl, ~/.astro/gear.json, the relay gateway dir, .xrpn programs — rides the same Syncthing channel, so the phone and the desktop Fe₂O₃ tools share one source of truth.

License

Unlicense — public domain. Borrow or steal whatever you want.

Geir Isene

About

Fe2O3 on the phone: Android mobile suite (Rust core + Kotlin/Compose shells). tasks, hyperlist, relay, astro, watchit, amardice, xrpn.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors