Programmer dvorak

The cool thing about programmer dvorak is that it uses un-shifted number keys for punctuation, which is perfect because I type a lot more [()] !! than 123332.

So far this has dvorak for letters, and the number row does symbols un-shifted – that is, hit 123 keys and you get [{}. all based on

Also, i’m limited in thumb mobility, so this has
butterfly key => space
any key => one-shot command
esc key => escape from oneshot

hat tip to Coleen O’Rourke , for pairing with me on this – so ironic that i need to type to build my ergonomic keyboard!


nice i used a programmer workman layout for a bit which was great when I was programming but everywhere else it was annoying so I dropped it. any particular reason to not use the plugin instead seems like it was made for just this use case.

Programmer Dvorak changes some of the symbols on the shifted numbers, so merely swapping them will get you a different symbol (or number) layout. A combination of TopsyTurvy and ShapeShifter may do the trick, but the two do not compose as well as I originally hoped (both were developed to support Programmer Dvorak, but the experiment wasn’t all that successful sadly).

The numbers are also on the NUMPAD layer, accessible with a single hand, with much less movement than on the top row, so… symbols on the top row + numpad is a more comfortable solution than simply swapping the numbers & symbols on the top row.

(I’ve been using a similar setup too, not exactly the same, but similar in spirit.)


ah I see, should have looked closer at the layout makes sense now.

The big issue I had when using unshifted symbols and numpad on a conventional keyboard was inputting times, which is the majority of my number input. The awkward colon was annoying and frustrating. maybe I will revisit unshifted symbols now that I can freely adjust my numpad layer.

There are a few things that are harder with such a setup. For example, typing uint8_t with the layout I have now is… awkward: uint, AUX 8, Shift -, t is not the most convenient thing. Even if I chord AUX with 8 and Shift -, and the sequence becomes uint, AUX+8 AUX+Shift _, t, I still have to time the AUX release properly.

So far, my experience is that a numpad is great if you want to enter a continous sequence of numbers, or perhaps number + some symbols that are accessible on the same layer. But as soon as you inline numbers with other stuff, from different layers, they aren’t as convenient anymore. In this case, having numbers on the shifted top row might be an improvement (though one still has to press a shift for that, so we’re not much better off…).

I’m planning a layout with all symbols on the “base” layer, and a shiftable layer for numbers, where I don’t need to ever use shift itself. At the moment, I’m considering changing backspace on my “function” layer to ShiftToLayer(NUM), so typing uint8_t would just be: uint, Fn+bksp+8, _t. Of course, OneShot could be used to eliminate the chording.

That use case I did not consider and I agree that sounds inconvenient, would using tapdance on the numpad keys to tap out single/short numbers be better instead of the chording?

Mmm… don’t think so. OneShot layers are better for single numbers. The problem with uint8_t is that unless _ is accessible without chording, it involves too many layers or layer+modifier combos for my taste.

With a standard number row, it is uint8 SHIFT - t - one modifier only. With numbers on the numpad, it is uint AUX 8 SHIFT - t, and that’s a lot of complexity there. If I put _ an the AUX layer (or NUMPAD, or whatever we call it), then it becomes uint AUX + (8, _) t, which is slightly better, but involves chording. But as my AUX key is a palm key, and chording that isn’t as bad as chording with my pinkies.

But this is very much personal preference.

Mine just arrived today. I’m a programmer and used Dvorak for years with my Kinesis contour. @algernon any pointers to a layout/firmware I should try first?

I’d rather not do a ton of experimentation and just piggyback on your research. I’d like to spend my time acclimating to something you feel is the most appropriate based on your deeper experience.

This is the sketch I use, but be aware that it is very much tuned to my needs and taste. It’s the most appropriate for me, but every person is different. Don’t be suprprised if you don’t like it, or have to tweak it.

Here is my implémentation of Dvorak programming

It a system wide change
And here is the adjustment for the keyboardio

You can edit the CSV file and read the readme to generate your keymap

1 Like

To add to the discussion, here’s the Programmer Dvorak code I use:

The actual code is in the example; if you use the Arduino IDE then adding the library will also add the programmer dvorak sketch to the examples from the menu bar.

The example is a minimal sketch, but it’s easy to get other functionality by combining the code with, for example, the default Model01 firmware.

After quite a bit of struggling I’ve now also got a working Programmer Dvorak setup:

1 Like

Where’s your F12? I couldn’t find it on your images.

This code uses the deprecated module NumLock and will not compile.

You can switch out references to NumLock to NumPad. While you’re at it, you may also want to migrate to the new plugin loader.

EDIT: Here.

For anyone coming to this thread now looking for a programmer dvoark implementation - I have just done mine for the Model100, and the CharShift plugin has been life-changing in how easy it makes the configuration of the top row:

1 Like