From Chrysalis →Kaleidoscope

I’ve been really enjoying customizing my Atreus with Chrysalis. However, I’d like to explore some of the more advanced features that, at least for now, require using Kaleidoscope. I have a few basic questions about how to make that transition, though. (Some of these are so basic that I worry I’ve missed something obvious in the docs. If so, I’d appreciate pointers to the right docs, since I must have been looking in the wrong place!.)

  1. Do I need to start my configuration from scratch, or can I import my existing keymaps? I know I can export configuration from Chrysalis to JSON, but it’s my understanding that there’s currently no way to go from that to the C code Kaleidoscope needs. Is that correct?
  2. If I do need to start from scratch, how do I do so? I understand that Chrysalis uses EEPROM for its configuration. Does that mean that I should disable the EEPROM plugins when I start using Kaleidoscope? With them enabled, the Kateidoscope keymaps show up in Chrysalis as layers -1, -2, and -3 but I don’t see a way to switch to those layers. Does EEPROM provide functionality (other than supporting Chrysalis) that I’d be missing out on by disabling it?
  3. (very basic question) Where are the files that I’m importing when flashing my firmware? Following the docs, I started from the Keybordio Atreus example firmware. I expected that this would load an example project, but it seems to only open one file, which is read-only. I can save the file to a new location, but it’s not clear where it gets its imports from. Should I save a copy of all the examples to a new location? If not, what’s the best way to get set up for my own customization? (Maybe this would be more clear to me if I’d written more C code – I was expecting a directory of configuration files governed by something akin to a package.json or a Cargo.toml, but maybe that’s the wrong reference point.)

More generally, I’m sure this would all be more clear if I’d programmed an Arduino before but this is my first experience on the platform. Thanks very much for any help you can provide!

  1. I don’t know for sure, but I don’t think there’s a way to convert Chrysalis keymaps to C++ source code for Kaleidoscope, so if you want to do that, you’ll need to do it by hand.
  2. You can clear the EEPROM with Chrysalis, and it’s also possible to disable the EEPROM-Keymap plugin in Kaleidoscope. You can also continue using Chrysalis keymaps with Kaleidoscope. There aren’t many keymap entries (if any) that Chrysalis is incapable of setting.
  3. I think the answer to this one depends on how you’re working with the source code. Are you cloning the git repository, or are you using the Arduino IDE’s boards manager? I’m one of the people who’s able to help with the former, but I have no experience with the Arduino IDE.

Thanks. that’s all very helpful!

I think the answer to this one depends on how you’re working with the source code. Are you cloning the git repository, or are you using the Arduino IDE’s boards manager?

Well, so far I’ve been using the Arduino IDE because that was the only installation method I saw mentioned in the docs and I thought that was the only way. After you mentioned that there’s an alternative, it occurred to me to check the git repo, and I see the instructions there. That looks like it will be a lot easier for me (and I’ll be happier in my $EDITOR anyway!). So thanks for pointing me in that direction!

I haven’t yet followed the directions in the git README, but they look fairly straightforward; I’ll follow up here if I run into unexpected issues.

There aren’t many keymap entries (if any) that Chrysalis is incapable of setting.

Maybe I’m confused. My understanding was that there are a number of Kaleidoscope plugins that Chrysalis either can’t yet use at all (e.g., ShapeShifter, Unicode, Cycle) or can only assign bindings after I’ve defined them in Kaleidoscope (e.g., Macros, Leader, TapDance). Am I mistaken about that?

It’s true that many plugins have functionality that is not accessible via Chrysalis alone, but the keymap entries used to trigger those functions can usually be configured in Chrysalis. The most obvious example is Macros: you can define a key to trigger a macro by number in Chrysalis, but you need to edit the Kaleidoscope sketch code in order to define the macro itself.

The documentation for the EEPROM-Keymap plugin is very specific about when the firmware uses keymaps in EEPROM (where Chrysalis stores keymaps) when there is also keymap data compiled into your custom firmware build (aka “PROGMEM”).

Basically, it’s this: EEPROM will only be referenced for layers “higher” than the highest layer defined in your custom firmware (“PROGMEM”). But there’s a setting that can override this, telling the firmware to always and only use keymaps in EEPROM.