Atreus Layout: Colemak for macOS w/ Qukeys

I’ve been happily mucking about with a modified Colemak layout for my new Keyboardio Atreus and wanted to share. I’ve mostly been using Chrysalis, which is nice, if a bit unstable (about 1 in 1066 uploads to the board, the upload to the keyboard fails and the app goes to a white screen.)

The layout is optimized for macOS and makes heavy use of the Modifier when held … (in Chrysalis) option / Qukeys plugin (in Kaleidoscope).

Layout

The left home row [A] [R] [S] [T] uses Qukeys to emit [Shift] [CTRL] [ALT] [GUI] keys (and the right home row mirrors this.)

Now I don’t have to move my fingers off of the home row to access the modifier keys (or numbers for that matter, as 1, 2, … through 0 are on the home row of layer #1.)

I’m really quite pleased with the layout and the ergonomics of it. I’ll try living with it for a while and see how it evolves (as I’m not so sure about the placement of the [-] [=] keys and expect that I’ve forgotten to map some essential keys in the process.) Also, perhaps I should move the layer shifts in the bottom row to the [D] and [H] keys instead.

Layer 0

Layer 1

The only awkward bits were:

  • Figuring out that the GUI key is the Command key for macOS
  • Figuring out that Lock layer to also unlocks a layer. image
  • Copying the layer map every time that I made a significant change (as I was worried that one of the Chrysalis hangs would result in me needing to reset the board to factory settings.)

Layer 0 JSON

{
  "keymap": [
    {
      "keyCode": 20,
      "label": "Q"
    },
    {
      "keyCode": 26,
      "label": "W"
    },
    {
      "keyCode": 9,
      "label": "F"
    },
    {
      "keyCode": 19,
      "label": "P"
    },
    {
      "keyCode": 10,
      "label": "G"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 13,
      "label": "J"
    },
    {
      "keyCode": 15,
      "label": "L"
    },
    {
      "keyCode": 24,
      "label": "U"
    },
    {
      "keyCode": 28,
      "label": "Y"
    },
    {
      "keyCode": 51,
      "label": ";"
    },
    {
      "keyCode": 49429,
      "label": "A",
      "extraLabel": "SHIFT/"
    },
    {
      "keyCode": 49190,
      "label": "R",
      "extraLabel": "CTRL/"
    },
    {
      "keyCode": 49703,
      "label": "S",
      "extraLabel": "ALT/"
    },
    {
      "keyCode": 49960,
      "label": "T",
      "extraLabel": "GUI/"
    },
    {
      "keyCode": 7,
      "label": "D"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 11,
      "label": "H"
    },
    {
      "keyCode": 49954,
      "label": "N",
      "extraLabel": "GUI/"
    },
    {
      "keyCode": 49689,
      "label": "E",
      "extraLabel": "ALT/"
    },
    {
      "keyCode": 49181,
      "label": "I",
      "extraLabel": "CTRL/"
    },
    {
      "keyCode": 49443,
      "label": "O",
      "extraLabel": "SHIFT/"
    },
    {
      "keyCode": 29,
      "label": "Z"
    },
    {
      "keyCode": 27,
      "label": "X"
    },
    {
      "keyCode": 6,
      "label": "C"
    },
    {
      "keyCode": 25,
      "label": "V"
    },
    {
      "keyCode": 5,
      "label": "B"
    },
    {
      "keyCode": 17409,
      "label": "1",
      "extraLabel": "LockTo"
    },
    {
      "keyCode": 41,
      "label": "Esc"
    },
    {
      "keyCode": 14,
      "label": "K"
    },
    {
      "keyCode": 16,
      "label": "M"
    },
    {
      "keyCode": 54,
      "label": ","
    },
    {
      "keyCode": 55,
      "label": "."
    },
    {
      "keyCode": 56,
      "label": "/"
    },
    {
      "keyCode": 22710,
      "label": "Track-",
      "extraLabel": "Media",
      "verbose": "Prev. track"
    },
    {
      "keyCode": 22733,
      "label": "Play",
      "extraLabel": "Media",
      "verbose": "Play / pause"
    },
    {
      "keyCode": 22709,
      "label": "Track+",
      "extraLabel": "Media",
      "verbose": "Next track"
    },
    {
      "keyCode": 51527,
      "label": "`",
      "extraLabel": "L#1/"
    },
    {
      "keyCode": 40,
      "label": "Enter"
    },
    {
      "keyCode": 42,
      "label": "Bksp",
      "verbose": "Backspace"
    },
    {
      "keyCode": 43,
      "label": "Tab"
    },
    {
      "keyCode": 44,
      "label": "Space"
    },
    {
      "keyCode": 51526,
      "label": "'",
      "extraLabel": "L#1/"
    },
    {
      "keyCode": 45,
      "label": "-"
    },
    {
      "keyCode": 46,
      "label": "="
    },
    {
      "keyCode": 49,
      "label": "\\"
    }
  ],
  "palette": []
}

Layer 1 JSON

{
  "keymap": [
    {
      "keyCode": 58,
      "label": "F1"
    },
    {
      "keyCode": 59,
      "label": "F2"
    },
    {
      "keyCode": 60,
      "label": "F3"
    },
    {
      "keyCode": 61,
      "label": "F4"
    },
    {
      "keyCode": 62,
      "label": "F5"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 63,
      "label": "F6"
    },
    {
      "keyCode": 64,
      "label": "F7"
    },
    {
      "keyCode": 65,
      "label": "F8"
    },
    {
      "keyCode": 66,
      "label": "F9"
    },
    {
      "keyCode": 67,
      "label": "F10"
    },
    {
      "keyCode": 49455,
      "label": "1",
      "extraLabel": "SHIFT/"
    },
    {
      "keyCode": 49200,
      "label": "2",
      "extraLabel": "CTRL/"
    },
    {
      "keyCode": 49713,
      "label": "3",
      "extraLabel": "ALT/"
    },
    {
      "keyCode": 49970,
      "label": "4",
      "extraLabel": "GUI/"
    },
    {
      "keyCode": 34,
      "label": "5",
      "extraLabel": "%"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 0,
      "label": "Blocked",
      "verbose": "Disabled"
    },
    {
      "keyCode": 35,
      "label": "6",
      "extraLabel": "^"
    },
    {
      "keyCode": 49973,
      "label": "7",
      "extraLabel": "GUI/"
    },
    {
      "keyCode": 49718,
      "label": "8",
      "extraLabel": "ALT/"
    },
    {
      "keyCode": 49207,
      "label": "9",
      "extraLabel": "CTRL/"
    },
    {
      "keyCode": 49464,
      "label": "0",
      "extraLabel": "SHIFT/"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 82,
      "label": "↑"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 47,
      "label": "["
    },
    {
      "keyCode": 2086,
      "label": "("
    },
    {
      "keyCode": 17409,
      "label": "1",
      "extraLabel": "LockTo"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 2087,
      "label": ")"
    },
    {
      "keyCode": 48,
      "label": "]"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 82,
      "label": "↑"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 80,
      "label": "←"
    },
    {
      "keyCode": 81,
      "label": "↓"
    },
    {
      "keyCode": 79,
      "label": "→"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 65535,
      "label": "",
      "verbose": "Transparent"
    },
    {
      "keyCode": 80,
      "label": "←"
    },
    {
      "keyCode": 81,
      "label": "↓"
    },
    {
      "keyCode": 79,
      "label": "→"
    }
  ],
  "palette": []
}
2 Likes

I love this. This is very close to my own thinking, at least for layer 0. How do you find the lock to 1 button, isn’t that in an uncomfortable place?

1 Like

Hey @Zindar! The Lock 1 button is a slightly awkward place, but I more often use the L#1 shift keys. that are next to the Enter and Space keys. The Lock button is mostly when I want to type a bunch of numbers or use the movement keys.

I tried to do this but the problem I have with it is that when typing fast I managed to hit ctrl / alt / gui by mistake all the time.

Currently I ended up having shift on Z and the button where / normally is (I have enter and shift there now).

In case you didn’t know, it is possible to make an adjustment in the firmware (not via Chrysalis, unfortunately) that makes Qukeys less likely to produce unintended modifiers:

Qukeys.setOverlapThreshold(100);

The 100 means 100%. This means that the qukey will only produce a modifier if it is held for 100% of the subsequent key’s press. The default is 80%, because of people who have the opposite problem (getting letter keys when a modifier was intended).

Since unintended modifiers are likely to cause more problems, I’m considering adding another configuration parameter for Qukeys: a minimum time a key must be held in order for a modifier to be output.

3 Likes

I’ve been having trouble with the Hold-keys and tried this fix without noticeable success. According to the code, the overlap percentage must be less than 100.
So I have now set:

Qukeys.setOverlapThreshold(99);

This seems better although I’m still getting occasional errors.

Sorry about the misleading documentation; you can set the overlap threshold to 100%. That means the subsequent key must be released before the qukey for the release-order condition to trigger making the qukey take on its alternate state.

In other words, setting it to 100 turns off the grace period, so you can’t reliably get either output if you release the two keys simultaneously.

1 Like

Since reading this post yesterday I have converted to modifier-when-held on home row, in a fashion similar to yours. It’s working great and I haven’t noticed any mis-triggers at all yet. And now I have a ton of extra options for that bottom row. So thanks!

2 Likes

I’ve been living with my layout for a while now and have made a few small adjustments, mostly geared towards getting more on the base layer and freeing up more of my mouse hand. Also, I’ve added a few conveniences - an F4 button in the lower-left hand corner (as I’ve had to spend too much time in spreadsheets lately) and a CMD+SHIFT+4 button for screenshots.

Lastly, here’s what the keyboard looks like with a mix of blank and labeled keys. Note that T and N are mislabelled intentionally so that I can have tactile bumps on both the home row and on the thumb keys.

4 Likes

Oh, wow! I did not know about that F4 shortcut! Thank you for mentioning it!

Also, it’s interesting to see how different people choose to lay out their home-row Qukeys modifiers. I have mine the opposite way, with shift, as the most often used one, under my index fingers. I also like it that way to avoid confusion when using a standard QWERTY keyboard; if it’s as different as possible, it’s easier to keep the two different typing skills in separate parts of my brain.

1 Like

That’s interesting, @merlin - I hadn’t considered your approach to the modifier keys. For the most part, I’ve tried to rely on having muscle memory between layouts. So far, it works pretty well, though I still have some trouble with my thumbs – they expect things to be symmetrical when they a resting near where they think that the space bar should be. Typing enter and bksp still requires conscious thought at the moment.

This idea – putting the modifiers in the home row – is the one that unlocked everything for me. I have a lot of finger pain (why I got the Atreus in the first place) and the less movement the better. I’m still fussing around but will publish my layouts when they have gelled more.

2 Likes

I’m happy to read that, @billba!

Interesting. I’ll have to give that a go and see how I like it.