a.skh.am / android-utils
android-utils
Android apps built with Nix in one repository and delivered to testers through Google Play's internal testing track: hosts that put X11 and Wayland desktops on a phone, a floating-window manager and a browser built around it, a terminal for Nix-on-Droid, a keyboard, PulseAudio servers for the phone and the watch, a Tailscale endpoint for the watch, an inference server, an experiments app and a rhythm game, with the libraries they share. Each has a page explaining how it works.
- 13 apps on Play internal testing
- 3 Wear OS apps
- 9 shared libraries
- 17 Nix flakes
Index
Home screen
- HarbourA home screen where terminals, web pages and agents live on the page
- Phone app
- Background service
Desktops
- X11 DroidAn X server whose windows float as Android windows
- Phone app
- Floating windows
- Widget
- Background service
- WaylandroidA GPU Wayland host for sway and Hyprland on Android
- Phone app
- Floating windows
- Widget
- Background service
Windows & browsing
- FlotillaA window manager that other apps' floating windows cooperate with
- Phone app
- Floating windows
- Widget
- Background service
- FlotsamA browser with fullscreen tabs and floating windows
- Phone app
- Floating windows
- Widget
Terminal & keyboard
- NOD TermA terminal for Nix-on-Droid shells
- Phone app
- Floating windows
- Widget
- Wear OS
- OmniA keyboard for writing code on a phone
- Phone app
- Keyboard
- Floating windows
Audio & network
- PulseServerA PulseAudio server on the phone
- Phone app
- Floating windows
- Widget
- Background service
- Wear PulseThe PulseAudio server on a watch
- Wear OS
- Background service
- Wear TailnetA Tailscale endpoint inside a watch app
- Wear OS
- Background service
On-device AI
- TalosAn OpenAI-compatible inference server on the phone
- Phone app
- Widget
- Background service
Experiments & games
- SandboxA home for small Android experiments
- Phone app
- Widget
- Background service
- Orbit DrumsA polyrhythm drumming game
- Phone app
Shared code
How they ship
Every app is its own Gradle project with a Nix development shell that pins the Android SDK, build tools and Gradle, so a build on any machine uses the same toolchain. A local build produces an APK or app bundle and stops there; the only installs from a workstation are throwaway debug builds made for a test run. A release bumps the app's version, adds a section to the changelog and lands on the main branch, and pushing the app's version tag builds a signed bundle on the repository's own Nix build machines and rolls it out to Google Play's internal testing track. That track is how builds reach testers.
com.harryaskham.nixwidget and com.harryaskham.nixfloat, are registered but hold no code yet.What each app is
| App | Phone app | Wear OS | Floating windows | Background service | Widget | Keyboard | Library |
|---|---|---|---|---|---|---|---|
| Harbour | |||||||
| X11 Droid | |||||||
| Waylandroid | |||||||
| Flotilla | |||||||
| Flotsam | |||||||
| NOD Term | |||||||
| Omni | |||||||
| PulseServer | |||||||
| Wear Pulse | |||||||
| Wear Tailnet | |||||||
| Talos | |||||||
| Sandbox | |||||||
| Orbit Drums | |||||||
| Libraries |
Shared code
Floating windows, the terminal, the display bridges and the remote-control listener are written once, as libraries under libs/, and built into each app that needs them. Most apps include them as Gradle projects; Omni, the keyboard, compiles the few packages it needs straight from the libraries' source. The libraries page explains each one.
| App | floating-overlay | glass | terminal-emulator | terminal-view | native-bridge | app-control | flotilla-api | profile-sync | startup-diagnostics |
|---|---|---|---|---|---|---|---|---|---|
| Harbour | |||||||||
| X11 Droid | |||||||||
| Waylandroid | |||||||||
| Flotilla | |||||||||
| Flotsam | |||||||||
| NOD Term | |||||||||
| Omni | |||||||||
| PulseServer | |||||||||
| Wear Pulse | |||||||||
| Wear Tailnet | |||||||||
| Talos | |||||||||
| Sandbox | |||||||||
| Orbit Drums |