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.

Index

Home screen

Desktops

Windows & browsing

Terminal & keyboard

Audio & network

On-device AI

Experiments & games

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.

How an app ships The path from source to a tester's device. Each app is its own Gradle project with a Nix development shell, built with the Nix-provided Gradle. Local builds make APKs and app bundles; only throwaway debug builds are installed from a workstation, for tests. A release bumps the app's version, adds a changelog section and lands on the main branch; pushing the app's version tag then builds a signed app bundle on the repository's own Nix build machines and rolls it out to Google Play's internal testing track, from which testers' phones and watches install it. app sourceKotlin · Java · C nix developpinned SDK + Gradle local APK / AABdebug installs for tests tag v<app>-<version>after the release lands CIsigned bundle Play internal testinghow testers get builds phones and watches
One way to testers. Two more package names, com.harryaskham.nixwidget and com.harryaskham.nixfloat, are registered but hold no code yet.

What each app is

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.