Not sure how to add attachments here, so here's my xkb file (configuration for linux). Put this in /usr/share/X11/xkb/symbols/cyborg16 (I use this name so it doesn't conflict with any shipped layout files), then set the layout using this command, or similar methods:
This allows switching between colemak and qwerty layouts by pressing the scroll-lock key and indicates which is active with the caps-lock light (my laptop doesn't have a scroll-lock light and caps-lock won't work anyway, if colemak is the first layout).
There's also a dvorak version, and a version with the right-hand shifted one key to the right, in order to make AltGr more comfortable to press (which kindof worked, but it is really confusing to switch between this and an ordinary keyboard layout). Note that they're also designed for a GB keyboard, but with @ above the 2 like on a US keyboard (a personal preference).
I don't have configuration for windows/mac/etc., but maybe if other people like this colemak extension someone could have a go!
Comments appreciated (please email if I don't respond).
// $XKeyboardConfig: xkeyboard-config/symbols/progsyms 2008-10-15 svu Exp $
// Difficulty to reach (under index finger: 1 - 8)
// 1 2 3 4 5 6 7 8 9 0 - =
// 4 2 2 2 5 8 4 2 2 4 6
// 3 2 2 1 3 5 1 2 2 3 7
// 6 3 3 3 6 5 4 4 4 8
// no. (of which are pairs, possibly with a lower valued key)
// 1: 2 (1) ( 1+0)
// 2: 9 (4) ( 5+1)
// 3: 6 (1) ( 6+5)
// 4: 6 (5) (11+1)
// 5: 3 (1) (12+2)
// 6: 3 (0) (12+5)
// 7: 1 (0) (12+6)
// 8: 2 (2) (14+4)
// International plus programming keys (higher emphasis on progamming) The
// brackets and common operators, and more useful dead keys, are on the third
// level. Keys (with colemak layout, dead keys applied to u or c):
// `1234567890-= ¬!@£$%^&*()_+ ù¡ü¥€¤ûū·ŭ°─± ‘’“”¢ųǔ÷×ưů↓↑
// qwfpgjluy;[] QWFPGJLUY:{} <{*& \|/}> Æ ×· °÷ Œ←→
// arstdhneio'# ARSTDHNEIO"~ [(+=~:!-)]úũ æ®ß™ ─ œüű
// \zcxvbkm,./ |ZXCVBKM<>? |`'ç$ #ç"¿ ¦ © µ«»
partial alphanumeric_keys
xkb_symbols "prog_intl" {
name[Group1]="3rd-level symbols for programmers";
key <TLDE> { [ NoSymbol, NoSymbol, dead_grave, leftsinglequotemark ] };
key <AE01> { [ NoSymbol, NoSymbol, exclamdown, rightsinglequotemark ] };
key <AE02> { [ NoSymbol, NoSymbol, dead_diaeresis, leftdoublequotemark ] };
key <AE03> { [ NoSymbol, NoSymbol, yen, rightdoublequotemark ] };
key <AE04> { [ NoSymbol, NoSymbol, EuroSign, cent ] };
key <AE05> { [ NoSymbol, NoSymbol, currency, dead_ogonek ] };
key <AE06> { [ NoSymbol, NoSymbol, dead_circumflex, dead_caron ] };
key <AE07> { [ NoSymbol, NoSymbol, dead_macron, division ] };
key <AE08> { [ NoSymbol, NoSymbol, periodcentered, multiply ] };
key <AE09> { [ NoSymbol, NoSymbol, dead_breve, dead_horn ] };
key <AE10> { [ NoSymbol, NoSymbol, degree, dead_abovering ] };
key <AE11> { [ NoSymbol, NoSymbol, 0x1002212, downarrow ] };
key <AE12> { [ NoSymbol, NoSymbol, plusminus, uparrow ] };
key <AD01> { [ NoSymbol, NoSymbol, less, AE ] };
key <AD02> { [ NoSymbol, NoSymbol, braceleft, NoSymbol ] };
key <AD03> { [ NoSymbol, NoSymbol, asterisk, multiply ] };
key <AD04> { [ NoSymbol, NoSymbol, ampersand, periodcentered ] };
key <AD05> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AD06> { [ NoSymbol, NoSymbol, backslash, NoSymbol ] };
key <AD07> { [ NoSymbol, NoSymbol, bar, degree ] };
key <AD08> { [ NoSymbol, NoSymbol, slash, division ] };
key <AD09> { [ NoSymbol, NoSymbol, braceright, NoSymbol ] };
key <AD10> { [ NoSymbol, NoSymbol, greater, OE ] };
key <AD11> { [ NoSymbol, NoSymbol, NoSymbol, leftarrow ] };
key <AD12> { [ NoSymbol, NoSymbol, NoSymbol, rightarrow ] };
key <AC01> { [ NoSymbol, NoSymbol, bracketleft, ae ] };
key <AC02> { [ NoSymbol, NoSymbol, parenleft, registered ] };
key <AC03> { [ NoSymbol, NoSymbol, plus, ssharp ] };
key <AC04> { [ NoSymbol, NoSymbol, equal, trademark] };
key <AC05> { [ NoSymbol, NoSymbol, asciitilde, NoSymbol ] };
key <AC06> { [ NoSymbol, NoSymbol, colon, NoSymbol ] };
key <AC07> { [ NoSymbol, NoSymbol, exclam, 0x1002212 ] };
key <AC08> { [ NoSymbol, NoSymbol, minus, 0x1002212 ] };
key <AC09> { [ NoSymbol, NoSymbol, parenright, NoSymbol ] };
key <AC10> { [ NoSymbol, NoSymbol, bracketright, oe ] };
key <AC11> { [ NoSymbol, NoSymbol, dead_acute, dead_diaeresis ] };
key <BKSL> { [ NoSymbol, NoSymbol, dead_tilde, dead_doubleacute ] };
key <AB01> { [ NoSymbol, NoSymbol, grave, NoSymbol ] };
key <AB02> { [ NoSymbol, NoSymbol, apostrophe, NoSymbol ] };
key <AB03> { [ NoSymbol, NoSymbol, ccedilla, copyright ] };
key <AB04> { [ NoSymbol, NoSymbol, dollar, NoSymbol ] };
key <AB07> { [ NoSymbol, NoSymbol, numbersign, mu ] };
key <AB08> { [ NoSymbol, NoSymbol, dead_cedilla, guillemotleft ] };
key <AB09> { [ NoSymbol, NoSymbol, quotedbl, guillemotright ] };
};
// Older version of above (not quite the same; no international keys).
// Adds third-level symbols: // Alternative (not implemented):
// < { / | \ & * } > // < { ( [ ] ) } >
// [ ( - = _ : ~ + ) ] // & + * = _ ~ / - |
// ` ' ! $ # ? " // ` ! $ # ? \
partial alphanumeric_keys
xkb_symbols "progsyms" {
name[Group1]="3rd-level symbols for programmers";
key <AD01> { [ NoSymbol, NoSymbol, less, NoSymbol ] };
key <AD02> { [ NoSymbol, NoSymbol, braceleft, NoSymbol ] };
key <AD03> { [ NoSymbol, NoSymbol, slash, NoSymbol ] };
key <AD04> { [ NoSymbol, NoSymbol, bar, NoSymbol ] };
key <AD05> { [ NoSymbol, NoSymbol, backslash, NoSymbol ] };
key <AD06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AD07> { [ NoSymbol, NoSymbol, ampersand, NoSymbol ] };
key <AD08> { [ NoSymbol, NoSymbol, asterisk, NoSymbol ] };
key <AD09> { [ NoSymbol, NoSymbol, braceright, NoSymbol ] };
key <AD10> { [ NoSymbol, NoSymbol, greater, NoSymbol ] };
key <AC01> { [ NoSymbol, NoSymbol, bracketleft, NoSymbol ] };
key <AC02> { [ NoSymbol, NoSymbol, parenleft, NoSymbol ] };
key <AC03> { [ NoSymbol, NoSymbol, minus, NoSymbol ] };
key <AC04> { [ NoSymbol, NoSymbol, equal, NoSymbol ] };
key <AC05> { [ NoSymbol, NoSymbol, underscore, NoSymbol ] };
key <AC06> { [ NoSymbol, NoSymbol, colon, NoSymbol ] };
key <AC07> { [ NoSymbol, NoSymbol, asciitilde, NoSymbol ] };
key <AC08> { [ NoSymbol, NoSymbol, plus, NoSymbol ] };
key <AC09> { [ NoSymbol, NoSymbol, parenright, NoSymbol ] };
key <AC10> { [ NoSymbol, NoSymbol, bracketright, NoSymbol ] };
key <AB01> { [ NoSymbol, NoSymbol, grave, NoSymbol ] };
key <AB02> { [ NoSymbol, NoSymbol, apostrophe, NoSymbol ] };
key <AB03> { [ NoSymbol, NoSymbol, exclam, NoSymbol ] };
key <AB04> { [ NoSymbol, NoSymbol, dollar, NoSymbol ] };
key <AB07> { [ NoSymbol, NoSymbol, numbersign, NoSymbol ] };
key <AB08> { [ NoSymbol, NoSymbol, question, NoSymbol ] };
key <AB09> { [ NoSymbol, NoSymbol, quotedbl, NoSymbol ] };
};
// All the following were stolen from gb, with at and quotedbl swapped.
partial alphanumeric_keys
xkb_symbols "colemak" {
include "us(colemak)"
include "cyborg16(prog_intl)"
name[Group1]="United Kingdom - Colemak and progsyms";
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, sterling ] };
key <AE04> { [ 4, dollar, EuroSign ] };
key <AC11> { [apostrophe, quotedbl ] };
key <TLDE> { [ grave, notsign ] };
key <BKSL> { [numbersign, asciitilde ] };
key <LSGT> { [ backslash, bar, bar, brokenbar ] };
key <CAPS> { [ BackSpace, BackSpace, BackSpace, BackSpace ] };
include "level3(ralt_switch_multikey)"
};
partial alphanumeric_keys
xkb_symbols "dvorak" {
include "us(dvorak)"
include "cyborg16(prog_intl)"
name[Group1]="United Kingdom - Dvorak and progsyms";
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, sterling ] };
key <AE04> { [ 4, dollar, EuroSign ] };
key <AD01> { [ apostrophe, quotedbl ] };
key <TLDE> { [ grave, notsign ] };
key <BKSL> { [numbersign, asciitilde ] };
key <LSGT> { [ backslash, bar, bar, brokenbar ] };
include "level3(ralt_switch_multikey)"
};
partial default alphanumeric_keys
xkb_symbols "basic" {
include "cyborg16(prog_intl)"
include "latin"
name[Group1]="United Kingdom - with progsyms";
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, sterling ] };
key <AE04> { [ 4, dollar, EuroSign ] };
key <AC11> { [apostrophe, quotedbl ] };
key <TLDE> { [ grave, notsign ] };
key <BKSL> { [numbersign, asciitilde ] };
key <LSGT> { [ backslash, bar, bar, brokenbar ] };
include "level3(ralt_switch_multikey)"
};
// These have the right hand shifted one key right, in an attempt to make the
// thumb alt key easier to press. It turned out not to be a good idea though..
partial alphanumeric_keys
xkb_symbols "progsyms_shift" {
name[Group1]="3rd-level symbols for programmers shifted";
key <AD01> { [ NoSymbol, NoSymbol, less, NoSymbol ] };
key <AD02> { [ NoSymbol, NoSymbol, braceleft, NoSymbol ] };
key <AD03> { [ NoSymbol, NoSymbol, slash, NoSymbol ] };
key <AD04> { [ NoSymbol, NoSymbol, bar, NoSymbol ] };
key <AD05> { [ NoSymbol, NoSymbol, backslash, NoSymbol ] };
key <AD06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AD07> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AD08> { [ NoSymbol, NoSymbol, ampersand, NoSymbol ] };
key <AD09> { [ NoSymbol, NoSymbol, asterisk, NoSymbol ] };
key <AD10> { [ NoSymbol, NoSymbol, braceright, NoSymbol ] };
key <AD11> { [ NoSymbol, NoSymbol, greater, NoSymbol ] };
key <AC01> { [ NoSymbol, NoSymbol, bracketleft, NoSymbol ] };
key <AC02> { [ NoSymbol, NoSymbol, parenleft, NoSymbol ] };
key <AC03> { [ NoSymbol, NoSymbol, minus, NoSymbol ] };
key <AC04> { [ NoSymbol, NoSymbol, equal, NoSymbol ] };
key <AC05> { [ NoSymbol, NoSymbol, underscore, NoSymbol ] };
key <AC06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AC07> { [ NoSymbol, NoSymbol, colon, NoSymbol ] };
key <AC08> { [ NoSymbol, NoSymbol, asciitilde, NoSymbol ] };
key <AC09> { [ NoSymbol, NoSymbol, plus, NoSymbol ] };
key <AC10> { [ NoSymbol, NoSymbol, parenright, NoSymbol ] };
key <AC11> { [ NoSymbol, NoSymbol, bracketright, NoSymbol ] };
key <AB01> { [ NoSymbol, NoSymbol, grave, NoSymbol ] };
key <AB02> { [ NoSymbol, NoSymbol, apostrophe, NoSymbol ] };
key <AB03> { [ NoSymbol, NoSymbol, exclam, NoSymbol ] };
key <AB04> { [ NoSymbol, NoSymbol, dollar, NoSymbol ] };
key <AB05> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AB06> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AB07> { [ NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
key <AB08> { [ NoSymbol, NoSymbol, numbersign, NoSymbol ] };
key <AB09> { [ NoSymbol, NoSymbol, question, NoSymbol ] };
key <AB10> { [ NoSymbol, NoSymbol, quotedbl, NoSymbol ] };
};
// All the following were stolen from gb, with at and quotedbl swapped.
partial alphanumeric_keys
xkb_symbols "gbcolemak_shift" {
include "us"
include "cyborg16(progsyms_shift)"
name[Group1]="United Kingdom - Colemak shifted";
// Alphanumeric section
key <TLDE> { [ grave, notsign, bar, bar ] };
key <AE01> { [ 1, exclam, exclamdown, onesuperior ] };
key <AE02> { [ 2, at, twosuperior, oneeighth ] };
key <AE03> { [ 3, sterling, threesuperior, sterling ] };
key <AE04> { [ 4, dollar, EuroSign, onequarter ] };
key <AE05> { [ 5, percent, EuroSign, yen ] };
key <AE06> { [ 6, asciicircum, hstroke, Hstroke ] };
key <AE07> { [ 7, ampersand, eth, ETH ] };
key <AE08> { [ 8, asterisk, thorn, THORN ] };
key <AE09> { [ 9, parenleft, leftsinglequotemark, leftdoublequotemark ] };
key <AE10> { [ 0, parenright, rightsinglequotemark, rightdoublequotemark ] };
key <AE11> { [ minus, underscore, endash, emdash ] };
key <AE12> { [ equal, plus, multiply, division ] };
key <AD01> { [ q, Q, adiaeresis, Adiaeresis ] };
key <AD02> { [ w, W, aring, Aring ] };
key <AD03> { [ f, F, atilde, Atilde ] };
key <AD04> { [ p, P, oslash, Ooblique ] };
key <AD05> { [ g, G, dead_ogonek, asciitilde ] };
key <AD06> { [numbersign, asciitilde, dead_grave, dead_breve ] };
key <AD07> { [ j, J, dstroke, Dstroke ] };
key <AD08> { [ l, L, lstroke, Lstroke ] };
key <AD09> { [ u, U, uacute, Uacute ] };
key <AD10> { [ y, Y, udiaeresis, Udiaeresis ] };
key <AD11> { [ semicolon, colon, odiaeresis, Odiaeresis ] };
key <AD12> { [ slash, question, questiondown, asciitilde ] };
key <AC01> { [ a, A, aacute, Aacute ] };
key <AC02> { [ r, R, dead_grave, asciitilde ] };
key <AC03> { [ s, S, ssharp, asciitilde ] };
key <AC04> { [ t, T, dead_acute, dead_doubleacute ] };
key <AC05> { [ d, D, dead_diaeresis, asciitilde ] };
key <AC06> { [ bracketleft, braceleft, guillemotleft, 0x1002039 ] };
key <AC07> { [ h, H, dead_caron, asciitilde ] };
key <AC08> { [ n, N, ntilde, Ntilde ] };
key <AC09> { [ e, E, eacute, Eacute ] };
key <AC10> { [ i, I, iacute, Iacute ] };
key <AC11> { [ o, O, oacute, Oacute ] };
key <BKSL> { [apostrophe, quotedbl, dead_circumflex, dead_caron] };
key <LSGT> { [ backslash, bar, bar, brokenbar ] };
key <AB01> { [ z, Z, ae, AE ] };
key <AB02> { [ x, X, dead_circumflex, asciitilde ] };
key <AB03> { [ c, C, ccedilla, Ccedilla ] };
key <AB04> { [ v, V, oe, OE ] };
key <AB05> { [ b, B, dead_breve, asciitilde ] };
key <AB06> { [ bracketright, braceright, guillemotright, 0x100203a ] };
key <AB07> { [ k, K, dead_abovering, asciitilde ] };
key <AB08> { [ m, M, dead_macron, asciitilde ] };
key <AB09> { [ comma, less, dead_cedilla, asciitilde ] };
key <AB10> { [ period, greater, dead_abovedot, asciitilde ] };
key <CAPS> { [ BackSpace, BackSpace, BackSpace, BackSpace ] };
key <SPCE> { [ space, space, space, nobreakspace ] };
include "level3(ralt_switch)"
};
partial alphanumeric_keys
xkb_symbols "colemak_shift" {
include "cyborg16(gbcolemak_shift)"
include "cyborg16(progsyms_shift)"
name[Group1]="United Kingdom - Colemak and progsyms shifted";
key <BKSL> { [apostrophe, quotedbl, dead_circumflex, dead_caron] };
include "level3(ralt_switch_multikey)"
};