Not entirely what you are asking for, but Waydroid has a surprisingly simple architecture which makes it easy to tinker with to suit your needs. It just links the Android hardware compositor OEMs use straight into waylands interface, which is made easy since the interfaces are already very similar to each other. It's basically no different than how it runs on your phone once it's up and running. Non-wayland inputs/sensors work in a similar fashion, basically just getting the output of the /dev file then redirecting it into the android equivalent.
All it's really doing is pulling a LineageOS image, then dropping in the waydroid "drivers/firmware" that make it work with wayland using a series of patch files people have contributed. It all then gets run in a container which you "remotely" access for the GUI parts. Starting and stopping the container is like turning your phone on and off. If you set it up as a systemd service then you can just make this lockstep with your actual boot sequence.
It's primarily "marketed" as a tool to run android apps on Linux, which means the documentation kind of guides you down this path of running individual apps as their own window in Gnome or something. This doesn't work very well and apps tend to crash when you try to resize them. However, if you run it via `waydroid show-full-ui` it works perfectly in my experience and operates just like a phone/tablet.
I currently use it with a 2-in-1 x1 Thinkpad (meaning it has a touchscreen + pen), primarily for reading comics, books and watching movies when I connect it to my TV. I have it "wrapped" in Hyprland, so I can easily switch workspaces to return to the "host" if I want to, but I usually just do everything entirely within waydroid, and lazily use JuiceSSH for most host operations.
My laptops camera is a bit special and lacks linux support, but my understanding is a properly supported camera would work fine with waydroid. It doesn't support screen rotation or wifi configuration though, so those parts still need to be handled by the host system. I have my laptop auto rotate via hyprland since it was the easiest but I think it would be trivial to just add a patch for support as well.
It uses a pretty old LineageOS image, but I rebuilt it with some community patches so I could use the latest image, so you aren't even restricted to just LineageOS. I also didn't quite like how my stylus was being treated by android, so made a custom idc file for it and plopped it into the overlay filesystem waydroid has, saving me the effort of having to rebuild the image again.
It all sounds kind of complicated, but you can get most of this up and running right out of the box, complete with google play services too (requires you get a token from google, but they have guides for this). It's just once you notice something bugging you, you can actually do something about it, in an afternoon even, instead of just dealing with it forever. Something I personally appreciate.
That said, I'm using it as a tablet, for a phone there will be some gaps that need still need filling, such as:
- You would need to somehow get a small touchscreen device and install linux on it
- GPS: You would need to make sure this device exposes the GPS interface in some way and integrate it with waydroid. Since waydroid works via the same path OEMs take, there are probably some guides for this.
- LTE: Same as GPS, though so long as you can get internet on the host, waydroid will inherit that automatically.
- ARM Apps: Waydroid has some stuff that should allow you to run ARM apps but I've never bothered to set it up, not sure how well it works.
What should work out of the box, assuming they support linux:
- Cameras
- All touch interactions
- All stylus interactions
- Keyboard + Mouse
- HW rendering, works perfectly
- Network access (only configurable on host though)
- Direct USB access (out-of-the box in the sense you need to enable this in the waydroid config since it's not always desirable)
- Google play services (with token)
- All android apps built for x86_64, which is surprisingly supported by nearly all apps I've tried other than doodle jump.
- Storage, doesn't require a custom partition or anything and you can use bind mounts to get host files, though I find SFTP to be easier in practice. I have in the past bind mounted an SSHFS mount which worked fine. In theory you could utilize this to expose an NFS which is otherwise not possible on Android.