"Layer shift when held" not working

I’m trying to set up my keyboard for one-handed typing, and I wanted to have the space key temporarily shift to layer 1 when held. I toggled the “Layer shift when held” option on in the UI, but it doesn’t seem to do anything when saved to the keyboard–the other key pressed while I’m holding space just does its normal action, not its layer 1 action. (Setting a key to layer shift only works fine.) Any idea what’s going wrong here?


I’m having the same problem. I wanted to make backspace shift to layer 2 when held, but using chrysalis via spacing/backspace/layer shift when held, it’s not having any effect on the keyboard for me.

Wondering, is this only doable via custom firmware (the arduino manual method, not chrysalis) at the moment?

1 Like

It’s possible to do it via Chrysalis, but you need to use the experimental (with bells & whistles) firmware, instead of the default one.

@algernon Could you please provide a link to the experimental firmware to which you refer?
So I can take a look at it. thanks.

Update: I wondered if it would be located in the arduino IDE under examples/keyboardio, but not sure which one to pick there.

It’s shipped with Chrysalis. If you go to the firmware update screen, the default firmware is already pre-selected. If you click that, you’ll get a dropdown, and can select the experimental one.

Its source is here:

1 Like

I just tried this - superb. I thought updating the firmware might wipe my custom keymap - but chrysalis saves it, clever! As well as the layer shift when held, I also added a one shot modifier of control on the butterfly key - fabulous!

However all of the led effects on the experimental firmware I find distracting - would like just a constant single color, e.g. blue. So looks like I’ll need to copy the custom firmware from github, modify it then upload it via arduino…

@algernon What process should I follow to customise the experimental firmware?

Do I just copy this file and save it as a new arduino sketch? Is that file alone enough? (I’m not super familiar with C).

Update: I was wondering how included header files would be found for the experimental firmware if I just copied the single .ino file from github – but am I right in saying those are already included within the arduino ide having set that up already for the standard firmware?

Yes and yes.


So, just copy the file, modify it to your hearts content, and then you can upload it with the Arduino IDE.


It’s actually not Chrysalis saving it. The custom keymap is saved in EEPROM, which is not cleared or updated when flashing new firmware. At least not on the Model01. On boards where flashing clears EEPROM, Chrysalis does save & restore it, but that’s not necessary on the Model01.


I’m having this same problem. When I attempt to use “Layer shift when held”, the key does nothing. Holding does not shift to the layer and tapping does not send the key code.

I’m using Chrysalis 0.7.9 and I successfully upgrade to the experimental firmware but still can’t get this feature working.

Working on another bug I got a new version to try and that got my layer taps working!