diff --git a/etc/X11/xorg.conf b/etc/X11/xorg.conf
index 22b44e9..18acce1 100644
--- a/etc/X11/xorg.conf
+++ b/etc/X11/xorg.conf
@@ -44,7 +44,9 @@ Section "InputDevice"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
- Option "XkbLayout" "us"
+ Option "XkbLayout" "us,us"
+ Option "XkbVariant" ",colemak"
+ Option "XkbOptions" "grp:ctrls_toggle,grp_led:caps"
EndSection
Section "InputDevice"
diff --git a/usr/share/X11/xkb/rules/base.lst b/usr/share/X11/xkb/rules/base.lst
index a829be1..5e86878 100644
--- a/usr/share/X11/xkb/rules/base.lst
+++ b/usr/share/X11/xkb/rules/base.lst
@@ -211,6 +211,7 @@
! variant
intl us: International (with dead keys)
alt-intl us: Alternative international (former us_intl)
+ colemak us: Colemak
dvorak us: Dvorak
dvorak-l us: Left handed Dvorak
dvorak-r us: Right handed Dvorak
diff --git a/usr/share/X11/xkb/rules/base.xml b/usr/share/X11/xkb/rules/base.xml
index 15ab864..54dabc9 100644
--- a/usr/share/X11/xkb/rules/base.xml
+++ b/usr/share/X11/xkb/rules/base.xml
@@ -3516,6 +3516,12 @@
<description xml:lang="zh_TW">替代國際化 (之前為 us_intl)</description>
</configItem>
</variant>
+ <variant>
+ <configItem>
+ <name>colemak</name>
+ <_description>Colemak</_description>
+ </configItem>
+ </variant>
<variant>
<configItem>
<name>dvorak</name>
diff --git a/usr/share/X11/xkb/symbols.dir b/usr/share/X11/xkb/symbols.dir
index d00ea69..ab12676 100644
--- a/usr/share/X11/xkb/symbols.dir
+++ b/usr/share/X11/xkb/symbols.dir
@@ -691,6 +691,7 @@ h-p----- -------- pc(pc104)
--p----- a------- us(dvorak-classic)
--p----- a------- us(dvorak-l)
--p----- a------- us(dvorak-r)
+--p----- a------- us(colemak)
--p----- a------- us(intl)
--p----- a------- us(mac)
--p----- a------- us(rus)
diff --git a/usr/share/X11/xkb/symbols/us b/usr/share/X11/xkb/symbols/us
index f47dcc5..282af45 100644
--- a/usr/share/X11/xkb/symbols/us
+++ b/usr/share/X11/xkb/symbols/us
@@ -492,3 +492,70 @@ xkb_symbols "mac" {
name[Group1]= "U.S. English - Macintosh";
};
+// Colemak symbols for xkb on X.Org Server 7.x
+// 2006-01-01 Shai Coleman, https://colemak.com/ . Public domain.
+
+partial default alphanumeric_keys
+xkb_symbols "colemak" {
+ include "us"
+ name[Group1]= "U.S. English - Colemak";
+
+ // Alphanumeric section
+ key <TLDE> { [ grave, asciitilde, dead_tilde, asciitilde ] };
+ key <AE01> { [ 1, exclam, exclamdown, onesuperior ] };
+ key <AE02> { [ 2, at, masculine, twosuperior ] };
+ key <AE03> { [ 3, numbersign, ordfeminine, threesuperior ] };
+ key <AE04> { [ 4, dollar, cent, sterling ] };
+ 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> { [ j, J, dstroke, Dstroke ] };
+ key <AD07> { [ l, L, lstroke, Lstroke ] };
+ key <AD08> { [ u, U, uacute, Uacute ] };
+ key <AD09> { [ y, Y, udiaeresis, Udiaeresis ] };
+ key <AD10> { [ semicolon, colon, odiaeresis, Odiaeresis ] };
+ key <AD11> { [ bracketleft, braceleft, guillemotleft, 0x1002039 ] };
+ key <AD12> { [ bracketright, braceright, guillemotright, 0x100203a ] };
+ key <BKSL> { [ backslash, bar, asciitilde, 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> { [ h, H, dead_caron, asciitilde ] };
+ key <AC07> { [ n, N, ntilde, Ntilde ] };
+ key <AC08> { [ e, E, eacute, Eacute ] };
+ key <AC09> { [ i, I, iacute, Iacute ] };
+ key <AC10> { [ o, O, oacute, Oacute ] };
+ key <AC11> { [ apostrophe, quotedbl, otilde, Otilde ] };
+
+ 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> { [ k, K, dead_abovering, asciitilde ] };
+ key <AB07> { [ m, M, dead_macron, asciitilde ] };
+ key <AB08> { [ comma, less, dead_cedilla, asciitilde ] };
+ key <AB09> { [ period, greater, dead_abovedot, asciitilde ] };
+ key <AB10> { [ slash, question, questiondown, asciitilde ] };
+
+ key <CAPS> { [ BackSpace, BackSpace, BackSpace, BackSpace ] };
+ key <LSGT> { [ minus, underscore, endash, emdash ] };
+ key <SPCE> { [ space, space, space, nobreakspace ] };
+
+ include "level3(ralt_switch)"
+};
+