Github link: https://github.com/Dakkaron/Fairberry
Here’s a video of it in action: https://www.youtube.com/watch?v=iDb8_ld9gOQ
I’ve been using it for almost two years now, and I’m not going back.
It’s based on a spare Blackberry Q10 keyboard and a custom Arduino-compatible board that reads the keyboard matrix and outputs it as USB HID to the phone. From the viewpoint of the phone, it’s just a regular USB keyboard, so no special software is needed.
But I do use a custom virtual keyboard to have just two rows of symbols that are not natively on the keyboard, as I didn’t want to add another layer of rarely used symbols that I’d have to memorize.
(On the image you can see Ubuntu with XFCE4 running on it. I chose Ubuntu because it’s what was easiest to get running in a chroot jail on the phone. I’m using VNC to display the GUI. I even managed to get FEX (x86/x64 emulator) and Wine running, so it runs x86/x64 Linux and Windows apps.)
Surprisingly it’s not too top heavy. It takes a few moments in the beginning to find the right hand posture and then it’s pretty comfortable.
It covers the bottom lip and that allows it to be less top heavy, since part of the phone is stuck into the keyboard.