2020-04-09 QWERTY Atreus, again

I’d like to use the Atreus again. The Workman layout is not working out for me. I just don’t get anything done. Plus, they say that different layouts don’t really improve your typing skill. So, back to QWERTY it is!

Workman

As my `qmk_firmware` tree was so out of date, it took me quite a while to discover what I needed to do:

~/src/qmk_firmware$ make PCBDOWN=yes atreus/astar_mirrored:alex

I remember, I have one of the really old models. If I forget `PCBDOWN=yes`, then Alt and Ctrl are swapped. If I forget the `mirrored`, then I get a POIUY keyboard instead of a QWERTY keyboard. Not good.

Also remember that the USB ports on the Purism laptop aren’t good enough to write the firmware. If I try, I’ll corrupt it, and then I have to unscrew the back and reset it by connecting two pins...

Anyway. This is the README:

Alex for Atreus

This is the Alex layout for Atreus.

  q      w      e      r      t        ||       y      u      i      o      p
  a      s      d      f      g        ||       h      j      k      l      ;
  z      x      c      v      b        ||       n      m      ,      .      /
 esc    tab   super  shift  bksp  ctrl || alt  space   RS     LW     '     ret

Raised layer (RS)

  !       @     {      }      |        ||       -      7      8      9      *
  #       $     (      )      `        ||       .      4      5      6      +
  %       ^     [      ]      ~        ||       &      1      2      3      \
 menu    caps   <      >     del       ||       _                    0      =

Lower layer (LW)

 insert  home   up    end    pgup      ||      vol+    F7     F8     F9    F10
  del    left  down  right   pgdn      ||      vol-    F4     F5     F6    F11
                                       ||      mute    F1     F2     F3    F12
                                       ||        –                    ¨    reset

A note on the EN DASH and DIARESIS mappings on the lower layer: these only work if you set up CAPS as your *Multi Key* because they effectively send `<CAPS> - - .` and `<CAPS> "`, respectively.

alex/config.h

#define TAPPING_TOGGLE 1
#define ONESHOT_TAP_TOGGLE 1
#define PCBDOWN 1

alex/keymap.c

#include QMK_KEYBOARD_H

// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QW 0
#define _RS 1
#define _LW 2

#define OSM_SFT OSM(MOD_LSFT)

/* In your system, make sure Caps Lock acts as the Compose Key, also known as the Multi Key. If so, then the quote on
 * the lower layer acts as macro to enter ¨ */
enum custom_keycodes {
	DIAERESIS = SAFE_RANGE,
	EN_DASH
};

  /* Basic layer (L0)
   *  q      w      e      r      t        ||       y      u      i      o      p
   *  a      s      d      f      g        ||       h      j      k      l      ;
   *  z      x      c      v      b        ||       n      m      ,      .      /
   * esc    tab   super  shift  bksp  ctrl || alt  space   RS     LW     '     ret
   */

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_QW] = LAYOUT( /* QWERTY */
    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                      KC_Y,    KC_U,    KC_I,    KC_O,    KC_P    ,
    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                      KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN ,
    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                      KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH ,
    KC_ESC, KC_TAB, KC_LGUI,  OSM_SFT, KC_BSPC,  KC_LCTL, KC_LALT, KC_SPC,  MO(_RS), MO(_LW), KC_QUOT, KC_ENT
  ),

  /* Raised layer (RS)
   *  !       @     {      }      |        ||       -      7      8      9      *
   *  #       $     (      )      `        ||       .      4      5      6      +
   *  %       ^     [      ]      ~        ||       &      1      2      3      \
   * menu    caps   <      >     del       ||       _                    0      =
   */

  [_RS] = LAYOUT( /* [> RAISE <] */
    KC_EXLM, KC_AT,   KC_LCBR, KC_RCBR, KC_PIPE,                   KC_MINS, KC_7,    KC_8,    KC_9, KC_ASTR,
    KC_HASH, KC_DLR,  KC_LPRN, KC_RPRN, KC_GRV,                    KC_DOT,  KC_4,    KC_5,    KC_6, KC_PLUS,
    KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD,                   KC_AMPR, KC_1,    KC_2,    KC_3, KC_BSLS,
    KC_MENU, KC_CAPS, KC_LT,   KC_GT,   KC_DEL,  KC_TRNS, KC_TRNS, KC_UNDS, KC_TRNS, KC_TRNS,  KC_0, KC_EQL ),

  /* Lower layer (LW)
   * insert  home   up    end    pgup      ||      vol+    F7     F8     F9    F10
   *  del    left  down  right   pgdn      ||      vol-    F4     F5     F6    F11
   *                                       ||      mute    F1     F2     F3    F12
   *                                       ||        –                    ¨    reset
   */

  [_LW] = LAYOUT( /* [> LOWER <] */
    KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP,                   KC_VOLU, KC_F7,   KC_F8,   KC_F9,   KC_F10,
    KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN,                   KC_VOLD, KC_F4,   KC_F5,   KC_F6,   KC_F11,
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,                   KC_MUTE, KC_F1,   KC_F2,   KC_F3,   KC_F12,
    KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EN_DASH, KC_TRNS, KC_TRNS, DIAERESIS, RESET  )
};

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (record->event.pressed) {
        switch(keycode) {
		case DIAERESIS:
			// assuming KC_CAPS is your Multi Key
			SEND_STRING(SS_TAP(X_CAPSLOCK)"\"");
			return false;
		case EN_DASH:
			// assuming KC_CAPS is your Multi Key
			SEND_STRING(SS_TAP(X_CAPSLOCK)"--.");
			return false;
        }
    }
    return true;
};

​#Keyboard ​#Atreus

Comments

(Please contact me if you want to remove your comment.)

For the future…

“home row mods” are about placing modifiers on the home row – A guide to home row mods

A guide to home row mods

– Alex 2021-09-09 21:37 UTC

---

I am not happy and think one reason is that I use ctrl arrows, ctrl shift arrows, and the combos with page up and page down a lot. Furthermore, I do type in German every now and then and that’s why the compose “ a o u combo needs to be simple.

This is the Alex layout for Atreus.

  q   w   e   r   t             y   u   i   o   p
  a   s   d   f   g             h   j   k   l   ;
  z   x   c   v   b             n   m   ,   .   /
 esc tab gui sft bksp ctl alt  spc RS  LW   '  ret

Like, is the quote in the right position? is the slash in the right position? The Model 01 has also confused my fingers. Now I expect Return to be where h is, and Escape to be where b is. Annoying.

Raised layer (RS). What I discovered is that the number block layout does nothing for me. I hate it. I need a row of numbers. And I need the arrow keys a lot, switch control and shift being on the left. Therefore, the arrow keys themselves must be on the right. What better way than to use h j k l? This I also learned with the Model 01 keyboard.

One wonders how to use the punctuation atop the numbers efficiently. Maybe not at all.

I’d like diaresis to be easy: RS Caps Lock (for Compose), RS “, a o u – perhaps easy to type than RS Caps Lock, Shift ’, a o u. No switching of modifiers.

In these other layers, I should keep the modifiers where they are. Any other key reachable via the layer must be usable with a modifier (gui shift ctrl alt). All other keys, however, do not have the same protection. This, backspace turns to delete, return turns to menu, etc.

As for pulling apart basic math operators, I think I don’t use them often. I do use hyphens when writing text and lisp, path separators in file names, and control + and - for zooming and the like.

  1   2   3   4   5             6   7    8    9    0
  !   ^   #   $   %           left  up  down right +
  |   @   *   &   =           home pgup pgdn end   -
         gui sft del ctl alt  spc   ∎∎  caps  "   menu

Lower layer (LS). Sadly, function keys remain important for programs such as mc and htop but also debuggers and the like.

 F1   F2   F3   F4   F5           F6  F7  F8  F9  F10
                    vol+           (   )   [   ]  F11
                    vol-           <   >   {   }  F12
           gui  sft mute ctl alt          ∎∎   `  menu

I’m going to try something like that, soon.

– Alex 2022-01-14 22:14 UTC

---

Not sure if I linked this before, but I described my process for coming up with several layouts here: https://www.keebtalk.com/t/my-layouts-for-minimal-keyboards/15145 — maybe it will give you some ideas?

https://www.keebtalk.com/t/my-layouts-for-minimal-keyboards/15145

– deshipu 2022-01-14 22:33 UTC

---

Also, do you have up and down swapped?

– deshipu 2022-01-14 22:34 UTC

---

Only because I’m not actually a vi-head! Thanks for pointing it out, and thanks for the link.

– Alex 2022-01-15 14:21 UTC

---

This video also has some fresh ideas: https://www.youtube.com/watch?v=WA_GUYS8UJg

https://www.youtube.com/watch?v=WA_GUYS8UJg

– deshipu 2022-01-15 14:29 UTC

---

Ugh, trying to remember how this works.

On the regular laptop:

cd ~/src/qmk_firmware
make PCBDOWN=yes atreus/astar_mirrored:alex
cp atreus_astar_mirrored_alex.hex /media/alex/USB_STICK

On the Mac:

cp /Volumes/USB_STICK/atreus_astar_mirrored_alex.hex .
ls /dev > /tmp/off
for n in $(seq 3600); do ls /dev > /tmp/on; diff /tmp/off /tmp/on; sleep 1; done

Now hit the reset key until you see messages such as these:

17a18
> cu.usbmodem641

Now you know the device. Prepare your command, hit the reset key again, and run your command. Repeat until it works.

avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_astar_mirrored_alex.hex -P /dev/cu.usbmodem641

Well, at least that’s the story after I got avrdude working. I was trying to get it installed but curl had some expired certificates or something and wouldn’t update. By sheer luck I stumbled over libusb (as I had decided I would need to compile avrdude from source) and that updated the certs!? How strange.

brew install libusb
brew install avrdude

And that also gets me the dependencies for avrdude: m4, autoconf, automake, cmake, pkg-config, hidapi, libusb-compat, libftdi0, libhid and libelf (in addition to libusb which I just installed). cmake took forever to compile!

– Alex 2022-01-18 13:36 UTC

---

Updated the images, here:

https://alexschroeder.ch/pdfs/atreus-alex/

I’ll say that I already managed to type the password twice, so that’s a big win.

All of this because the keys for the Model 01 don’t actually work as well. i and . get lost, or duplicate, other keys as well. All the nice colours and the nice Linear A keycaps don’t help if the keys themselves don’t work as intended.

– Alex 2022-01-18 15:47 UTC

---

I noticed that I forgot the backslash on the keyboard. I think RS+esc would be a good place for it.

I should have listened to deshipu and use the standard distribution of punctuation. Now I can’t remember why I put ^ next to # – I guess originally I wanted a regexp mnemonic and have ^ next to $ or something like that? It just doesn’t make much sense, now.

Then I need to move the arrows somewhere else. I could move them to the lower layer, and the brackets can all go to the left side of the lower layer.

– Alex 2022-01-18 17:06 UTC

---

OK, revised layout. I switched the parentheses around a bit because the layer key is used with the thumb which ends up in the middle of the right half, and then the most common parenthesis are on the left part of the right half, necessitating a sort of crossing over of the index finger to the left. That’s not cool.

2022-01-21 New Keyboard Layout

– Alex 2022-01-21 21:30 UTC