I’ve made my own software keyboard using Xkb (Linux). Based on a standard (ISO/European) keyboard. It’s qwerty but I’ve made changes in order to (first motivation) more easily be able to write all kinds of symbols. So the number row is repurposed to providing keys like Shift, level 3 (after shift), level 4, and level 5. On both sides. For example shift is `4` and `8`.
- Shift: normal
- Level 3: mostly symbols
- Level 4: numpad on the home row (since I’ve repurposed the number row)
- Level 5: less used symbols
Also on the number row:
- Ctrl+V
- Ctrl+Insert (Linux: paste primary selection)
- Menu
- Compose key (both sides)
- Lock shift (Caps Lock leaves keys like `.` alone but this one locks to Shift for all keys)
In addition to the compose key I’ve mapped several unused keysyms (like Kanji) to map to various symbols and expansions. There I mostly use `key + + ` where I can press `` and `` in any order (meaning two compose sequences for each). So I can press the initial key and then just mash the two others and get what I want. Those Kanji symbols are mapped to some fringe (to the sides) keys that I don’t need anymore because they’re on level 3.
It’s derived from my regional keyboard (Norwegian) but it could be modified to work with the standard US layout.
I’ve had some troubles with it after Ubuntu 22.04/Gnome 3. Now it only works in most applications. But not certain others like gnome-terminal. It seems to be because of the X/Wayland split. So there are some painpoints that I haven’t ironed out yet. And I’m not eager to start since debugging Xkb can be painful and non-obvious.