I was frustrated by the lack of decent phones with physical keyboards. The phones that are currently available are hard to buy, crap, expensive, are old, outdated, have bad software support and/or disappointing hardware.
So I decided to design and build one myself.
This is a Fairphone 4 with a DIY, open source keyboard attachment. It uses a spare Blackberry Q10 keyboard and a custom, self designed Arduino-compatible mainboard, which translates the keyboard matrix to regular USB HID.
This means, it works on any phone without the need of any software modification at all. If the phone can handle a USB keyboard, it can handle this one.
All that’s necessary to make it compatible to any other phone is to adjust the case to fit that phone.
(And yes, that’s XFCE running on Ubuntu in a chroot shell.)
The cool thing here is I got both.
On the one hand, the keyboard is detachable, so should I ever really need to get to a character that I have no key binding on the keyboard for, I can just slide the keyboard off.
But since I don’t want to do that every time I want to type e.g. an € sign, which I cannot bind to on the US international layout that I am using, I also use a customizable software keyboard that shows up when I have the physical keyboard attached and the focus is on a text input field. This virtual keyboard is really slim (two small rows), and contains all special characters that I have no key binding for.
I chose the US international layout, since it fits best to this keyboard and allows for dead keys using the ALT key, which allows me to type all European symbols I need to type. Except of the € sign, since that’s not in the US international layout.
Have you heard of QMK? It’s open source keyboard firmware commonly used in custom desktop keyboards.
You’d easily be able to customise the layout (e.g. to add a euro key) with the VIA web interface.
QMK also supports macros and “layers” (basically multiple keyboard layouts, with a key combination to swap between them). And of course being open source you can modify the source code, which has a plugin architecture designed to allow hardware vendors to customise the source without completely forking the project.