I’m working on a set of libraries with which to extend the Keyboardio firmware with, and it looks like it will satisfy my own needs very, very soon now. But chances are, I won’t be able to play with the hardware yet by that point, so to keep myself occupied during the - hopefully - final stretch of the wait, I thought I’ll ask all of you people here, for ideas about features that could be useful in the firmware. These will be additional libraries, not part of the core firmware itself, so don’t hold your imagination back!
Ideas are listed below, for progress, check the milestone on GitHub.
- A keylogger, and a tool to make pretty heatmaps. The tool is not ready yet, only the keylogger part.
- Magic combo framework: Press any combination of keys at the same time, and run custom actions. This is a building block for other things, primarily for plugin authors, not end-users.
- One-shot keys: which all support holding and double-tapping for sticky behaviour. Only one-shot modifiers are implemented so far.
- Generic macros: Nothing really useful in itself, just a framework for making it possible to build macros with. Not very user-friendly just yet.
- Run-time toggleable one-shots: One-shot modifiers that start out as normal keys, but if a magic sequence is tapped, the modifiers turn into one-shots. (Needs
- Tap-dance keys: different functionality, depending on how many times the same key has been tapped without interruption.
- Unicode input: A way to programmatically trigger the Unicode input system of he operating system. Works on Linux only so far, but OSX and Windows support is coming, too.
- Dynamic macros: trigger recording, press a key to assign the macro to, tap other keys, and trigger stop. The macro is saved to EEPROM, and the assigned key will replay the recorded sequence.
- Keymaps in EEPROM: Instead of having to reflash the keyboard every time one wants to change the keymap, provide a way to upload a keymap via Serial, and have it stored in EEPROM. This makes it much much easier to update the layout, for a non-programmer.
- Leader keys, a’la Vim.
- Symbolic unicode input: trigger the mode, enter a symbol name, and the keyboard will delete what you wrote and input the unicode symbol instead. For example,
Fn+u, kisswould result in
😙ending up on your screen. This would also make it possible to use macros to enter unicode stuff, so you could have a macro that says
typeUnicode(Unicode::Lambda)in the code, and inputs
layer/keypairs: Tap the key, and get a normal symbol, hold it, and get a modifier, or a temporary layer switch. Thanks to @james.nvc for the idea.
- A diacritic key, to cycle through diacritics over the previously input symbol. Thanks to @michael for the idea.
- Built-in heatmap with the LEDs, thanks to @merlin for the idea.
- One-shot layers.
- Space Cadet Shift.
- Examples and helper libraries that combine some of the other plugins, presented in a friendlier way.
- A way to communicate with the keyboard, for editor integration and such. Idea from @amos.
- An easy way to shift-invert keys. Idea from @merlin.
- An easy way to remap the shifted symbol of any key. Idea from @merlin.
As of this morning (EU time), the official firmware has enough hooks to implement most - if not all - of the above, rendering my previous attempt at making an extensible keyboard library obsolete. So I’ll spend the weekend porting the features to the official firmware, and likely start implementing the missing ones. If you have any other ideas, please do let me know. The more the merrier, and no idea is too wild!
This will be a set of libraries, not a single one, so we’ll get to pick and choose what we like. And composing them looks simple enough so far:
That’s all there is to it, thanks to some clever wizardry going on behind the scenes.
Anyway, don’t hold your imagination back, I’d like to know even the wildest ideas you may have regarding the firmware, and I’ll see if it can be made reality.
Edit#1: Added dual-use keys and a keylogger.
Edit#2: Added diacritic key.
Edit#3: Added the built-in heatmap.
Edit#4: Added a link to the source code repo of the libraries.
Edit#5: Rearranged the list a bit, to make it more up-to-date.
Edit#6: Another rearrangement of the feature list.
Edit#7: Yet another rearrangement. Just list the ideas, not progress. Link to the GitHub milestone for progress.
Edit#8: Added the communication idea.
Edit#9: Added Space Cadet Shift.
Edit#10: Added the shift-invert and the shift-replace ideas.