A while ago I build a Charybdis Nano, but being left-handed I wanted the trackball on the left hand, not the right.
After some help from the people in the bastardkb discord, I got everything running.

Firmware changes

The full commit is here in my QMK fork. Only the 3 files mentioned below are important for the change, the remaining changes are just my own keymap.

It boils down to:

  • update the keymatrix
  • change the master to the left
  • tell QMK that the pointing device is left


First we need to update the thumbcluster. By default, the Nano has 3 keys on the left, and 2 on the right.
For the left-handed version it's swapped around, that's why we need to swap them in the Charybdis Nano's keymap definition as well.

#define LAYOUT_charybdis_3x5(                           \
  k00, k01, k02, k03, k04,     k44, k43, k42, k41, k40, \
  k10, k11, k12, k13, k14,     k54, k53, k52, k51, k50, \
  k20, k21, k22, k23, k24,     k64, k63, k62, k61, k60, \
-            k32, k33, k30,     k70, k72                \
+                 k32, k30,     k70, k73, k72           \
)                                                       \
{                                                       \
   {   k00,   k01,   k02,   k03,   k04 },               \
   {   k10,   k11,   k12,   k13,   k14 },               \
   {   k20,   k21,   k22,   k23,   k24 },               \
-  {   k30, KC_NO,   k32,   k33, KC_NO },               \
+  {   k30, KC_NO,   k32,   KC_NO, KC_NO },             \
   {   k40,   k41,   k42,   k43,   k44 },               \
   {   k50,   k51,   k52,   k53,   k54 },               \
   {   k60,   k61,   k62,   k63,   k64 },               \
-  {   k70, KC_NO,   k72, KC_NO, KC_NO },               \
+  {   k70, KC_NO,   k72,   k73, KC_NO },               \

The first change just updates the order or parameters for the LAYOUT_charybdis_3x5 function we use in our keymap.c.

The second and third line updates the matrix internally, k33 goes unused in the left-handed version, and instead we want k73.

Changing the master

Split keyboards work using a master & slave system, only the master communicates with the connected PC. The slave just talks over the TRRS cable with the master.

Usually the right side is the master in QMK, defined by the MASTER_RIGHT in the config.h of a keyboard.
To make things easier, I just set the master to be the left. That way, we don't need to think about sending the trackball stuff over I2C (the TRRS cable).

- #define MASTER_RIGHT
+ #define MASTER_LEFT

Changing the pointer

Last but not least, we need to tell QMK that the pointer is on the left side aswell.


Final thoughts

In the end, not that much work.
If you know which 5 lines you need to change.