// http://www.x.org/archive/X11R6.8.2/doc/XKB-Enhancing4.html // https://www.charvolant.org/doug/xkb/html/index.htm // https://wiki.archlinux.org/index.php/X_KeyBoard_extension // http://grahamwideman.wikispaces.com/linux+--+keyboard+configuration,+xkb // on actions: https://www.x.org/releases/X11R7.6/doc/kbproto/xkbproto.html#key_actions // full layout with de as base default hidden partial alphanumeric_keys xkb_symbols "de" { include "de" include "neolight(layers)" name[Group1] = "German (Neolight)"; }; // full layout with de as base hidden partial alphanumeric_keys xkb_symbols "de_escape_keys" { include "de" include "neolight(layers)" include "neolight(escape_keys)" name[Group1] = "German (Neolight, additional escape keys)"; }; // the additional layers hidden partial alphanumeric_keys xkb_symbols "layers" { // preserves AltGr and Shift+AltGr levels include "neolight(modifiers)" // virtual modifiers: // [None, Shift, LevelThree, LevelThree + Shift, LevelFive, LevelFive + Shift, LevelThree + LevelFive, LevelThree + LevelFive + Shift] key.type[Group1] = "EIGHT_LEVEL"; // Number row // -------------------------------------------------------------- key { // 1 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, onesuperior, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 2 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, twosuperior, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 3 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, threesuperior, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 4 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, U203A, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 5 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, U2039, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 6 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, cent, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 7 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, yen, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 8 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, singlelowquotemark, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 9 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, leftsinglequotemark, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // 0 symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, rightsinglequotemark, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // ß symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // ´ symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, dead_abovering, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; // Top row // -------------------------------------------------------------- key { // q symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, ellipsis, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // w symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, underscore, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // e symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, bracketleft, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // r symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, bracketright, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // t symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, asciicircum, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // z symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, exclam, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // u symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, less, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // i symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, greater, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // o symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, equal, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // p symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, ampersand, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // ü symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, U017F, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // + symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; // Middle row // -------------------------------------------------------------- key { // a symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, backslash, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // s symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, slash, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // d symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, braceleft, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // f symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, braceright, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // g symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, asterisk, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // h symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, question, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // j symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, parenleft, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // k symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, parenright, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // l symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, minus, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // ö symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, colon, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // ä symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, at, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; // Bottom row // -------------------------------------------------------------- key { // y symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, numbersign, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // x symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, dollar, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // c symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, bar, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // v symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, asciitilde, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), RedirectKey(keycode=, clearmods=LevelThree+LevelFive), RedirectKey(keycode=, clearmods=LevelThree+LevelFive)] }; key { // b symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, grave, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // n symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, plus, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // m symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, percent, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // , symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, quotedbl, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // . symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, apostrophe, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; key { // - symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, semicolon, NoSymbol, NoSymbol], actions[Group1] = [NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction(), NoAction()] }; }; hidden partial modifier_keys xkb_symbols "modifiers" { // modifier keys for layer 3 // alt+caps still activates capslock key { type[Group1] = "PC_ALT_LEVEL2", symbols[Group1] = [ISO_Level5_Shift, Caps_Lock] }; key { // # key type[Group1] = "ONE_LEVEL", symbols[Group1] = [ISO_Level5_Shift] }; // modifier keys for layer 4 key { // < key type[Group1] = "ONE_LEVEL", symbols[Group1] = [VoidSymbol], actions[Group1] = [SetMods(modifiers=LevelThree+LevelFive)] }; key { type[Group1] = "ONE_LEVEL", symbols[Group1] = [VoidSymbol], actions[Group1] = [SetMods(modifiers=LevelThree+LevelFive)] }; }; // additional escape keys for vim users hidden partial alphanumeric_keys xkb_symbols "escape_keys" { key { // q symbols[Group1] = [NoSymbol, NoSymbol, NoSymbol, NoSymbol, Escape, NoSymbol] }; key { // + symbols[Group1] = [Escape, NoSymbol, NoSymbol, NoSymbol, Escape, NoSymbol] }; }; // can be used together with e.g. Mozc to toggle the japanese IME hidden partial alphanumeric_keys xkb_symbols "jp" { key { // ^ symbols[Group1] = [Zenkaku_Hankaku] }; };