Skip to content

Instantly share code, notes, and snippets.

@wilderjds
Created July 6, 2021 15:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wilderjds/2bce5d6df3f04c934fb4beda0c6560ad to your computer and use it in GitHub Desktop.
Save wilderjds/2bce5d6df3f04c934fb4beda0c6560ad to your computer and use it in GitHub Desktop.

Keymaps for all the keyboards

Introduction

This file contains the keymaps for all my keyboards, in a literate form I am quoting several times the following document Archlinux Wiki - X Keyboard Extension. I also found pretty useful some info found on this GitHub page such as, for instance, how to split the definition for each group.

complete apl layout

move navigation (via hyper) to group 4

Split definitions by groups

Open the definition of our keymap

xkb_keymap {

Main sections

Section xkb_keycodes

Description

Keycode definition. The rest of the file does not use numeric keycodes, only symbolic keylabels defined in this section. The labels themselves are arbitrary. They are only used in xkb_symbols section later.

custom

This section deviates from the standard in some instances:

  • The ESC keylabel is assigned to keycode 22 (commonly BACKSPACE)
  • The BACKSPACE keylabel is assigned to keycode 49 (apparently TAB)
xkb_keycodes "wilder-keycodes" {
    minimum = 8;
maximum = 255;
<ESC> =  22;
    <AE01> = 10;
<AE02> = 11;
    <AE03> = 12;
    <AE04> = 13;
    <AE05> = 14;
    <AE06> = 15;
    <AE07> = 16;
    <AE08> = 17;
    <AE09> = 18;
    <AE10> = 19;
    <AE11> = 20;
    <AE12> = 21;
    <BKSP> = 23;
    <TAB>  = 9;
    <AD01> = 24;
    <AD02> = 25;
    <AD03> = 26;
    <AD04> = 27;
    <AD05> = 28;
    <AD06> = 29;
    <AD07> = 30;
    <AD08> = 31;
    <AD09> = 32;
    <AD10> = 33;
    <AD11> = 34;
    <AD12> = 35;
    <RTRN> = 36;
    <LCTL> = 37;
    <AC01> = 38;
    <AC02> = 39;
    <AC03> = 40;
    <AC04> = 41;
    <AC05> = 42;
    <AC06> = 43;
    <AC07> = 44;
    <AC08> = 45;
    <AC09> = 46;
    <AC10> = 47;
    <AC11> = 48;
    <TLDE> = 49;
    <LFSH> = 50;
    <BKSL> = 51;
    <AB01> = 52;
    <AB02> = 53;
    <AB03> = 54;
    <AB04> = 55;
    <AB05> = 56;
    <AB06> = 57;
    <AB07> = 58;
    <AB08> = 59;
    <AB09> = 60;
    <AB10> = 61;
    <RTSH> = 62;
    <KPMU> = 63;
    <LALT> = 64;
    <SPCE> = 65;
    <CAPS> = 66;
    <FK01> = 67;
    <FK02> = 68;
    <FK03> = 69;
    <FK04> = 70;
    <FK05> = 71;
    <FK06> = 72;
    <FK07> = 73;
    <FK08> = 74;
    <FK09> = 75;
    <FK10> = 76;
    <NMLK> = 77;
    <SCLK> = 78;
     <KP7> = 79;
     <KP8> = 80;
     <KP9> = 81;
    <KPSU> = 82;
     <KP4> = 83;
     <KP5> = 84;
     <KP6> = 85;
    <KPAD> = 86;
     <KP1> = 87;
     <KP2> = 88;
     <KP3> = 89;
     <KP0> = 90;
    <KPDL> = 91;
    <LVL3> = 92;
    <LSGT> = 94;
    <FK11> = 95;
    <FK12> = 96;
    <AB11> = 97;
    <KATA> = 98;
    <HIRA> = 99;
    <HENK> = 100;
    <HKTG> = 101;
    <MUHE> = 102;
    <JPCM> = 103;
    <KPEN> = 104;
<RCTL> = 105;
<KPDV> = 106;
<RWIN> = 107;
<RALT> = 108;
<LNFD> = 109;
<HOME> = 110;
      <UP> = 111;
    <PGUP> = 112;
    <LEFT> = 113;
    <RGHT> = 114;
     <END> = 115;
    <DOWN> = 116;
    <PGDN> = 117;
     <INS> = 118;
    <DELE> = 119;
    <I120> = 120;
    <MUTE> = 121;
    <VOL-> = 122;
    <VOL+> = 123;
    <POWR> = 124;
    <KPEQ> = 125;
    <I126> = 126;
    <PAUS> = 127;
    <I128> = 128;
    <I129> = 129;
    <HNGL> = 130;
    <HJCV> = 131;
    <AE13> = 132;
    <LWIN> = 133;
    <PRSC> = 134;
    <COMP> = 135;
    <STOP> = 136;
    <AGAI> = 137;
    <PROP> = 138;
    <UNDO> = 139;
    <FRNT> = 140;
    <COPY> = 141;
    <OPEN> = 142;
    <PAST> = 143;
    <FIND> = 144;
     <CUT> = 145;
    <HELP> = 146;
    <I147> = 147;
    <I148> = 148;
    <I149> = 149;
    <I150> = 150;
    <I151> = 151;
    <I152> = 152;
    <I153> = 153;
    <I154> = 154;
    <I155> = 155;
    <I156> = 156;
    <I157> = 157;
    <I158> = 158;
    <I159> = 159;
    <I160> = 160;
    <I161> = 161;
    <I162> = 162;
    <I163> = 163;
    <I164> = 164;
    <I165> = 165;
    <I166> = 166;
    <I167> = 167;
    <I168> = 168;
    <I169> = 169;
    <I170> = 170;
    <I171> = 171;
    <I172> = 172;
    <I173> = 173;
    <I174> = 174;
    <I175> = 175;
    <I176> = 176;
    <I177> = 177;
    <I178> = 178;
    <I179> = 179;
    <I180> = 180;
    <I181> = 181;
    <I182> = 182;
    <I183> = 183;
    <I184> = 184;
    <I185> = 185;
    <I186> = 186;
    <I187> = 187;
    <I188> = 188;
    <I189> = 189;
    <I190> = 190;
    <FK13> = 191;
    <FK14> = 192;
    <FK15> = 193;
    <FK16> = 194;
    <FK17> = 195;
    <FK18> = 196;
    <FK19> = 197;
    <FK20> = 198;
    <FK21> = 199;
    <FK22> = 200;
    <FK23> = 201;
    <FK24> = 202;
    <MDSW> = 203;
     <ALT> = 204;
    <META> = 205;
    <SUPR> = 206;
    <HYPR> = 207;
    <I208> = 208;
    <I209> = 209;
    <I210> = 210;
    <I211> = 211;
    <I212> = 212;
    <I213> = 213;
    <I214> = 214;
    <I215> = 215;
    <I216> = 216;
    <I217> = 217;
    <I218> = 218;
    <I219> = 219;
    <I220> = 220;
    <I221> = 221;
    <I222> = 222;
    <I223> = 223;
    <I224> = 224;
    <I225> = 225;
    <I226> = 226;
    <I227> = 227;
    <I228> = 228;
    <I229> = 229;
    <I230> = 230;
    <I231> = 231;
    <I232> = 232;
    <I233> = 233;
    <I234> = 234;
    <I235> = 235;
    <I236> = 236;
    <I237> = 237;
    <I238> = 238;
    <I239> = 239;
    <I240> = 240;
    <I241> = 241;
    <I242> = 242;
    <I243> = 243;
    <I244> = 244;
    <I245> = 245;
    <I246> = 246;
    <I247> = 247;
    <I248> = 248;
    <I249> = 249;
    <I250> = 250;
    <I251> = 251;
    <I252> = 252;
    <I253> = 253;

Indicators are the standard ones plus two virtual indicators used for the two special groups for Greek and Math

    indicator 1 = "Caps Lock";
indicator 2 = "Num Lock";
indicator 3 = "Scroll Lock";
indicator 4 = "Compose";
indicator 5 = "Kana";
indicator 6 = "Sleep";
indicator 7 = "Suspend";
indicator 8 = "Mute";
indicator 9 = "Misc";
indicator 10 = "Mail";
indicator 11 = "Charging";
virtual indicator 12 = "Shift Lock";
virtual indicator 13 = "Greek";
virtual indicator 14 = "Math";

Aliases are standard

        alias <AC12> = <BKSL>;
        alias <MENU> = <COMP>;
        alias <HZTG> = <TLDE>;
        alias <LMTA> = <LWIN>;
        alias <RMTA> = <RWIN>;
        alias <ALGR> = <RALT>;
        alias <KPPT> = <I129>;
        alias <LatQ> = <AD01>;
        alias <LatW> = <AD02>;
        alias <LatE> = <AD03>;
        alias <LatR> = <AD04>;
        alias <LatT> = <AD05>;
        alias <LatY> = <AD06>;
        alias <LatU> = <AD07>;
        alias <LatI> = <AD08>;
        alias <LatO> = <AD09>;
        alias <LatP> = <AD10>;
        alias <LatA> = <AC01>;
        alias <LatS> = <AC02>;
        alias <LatD> = <AC03>;
        alias <LatF> = <AC04>;
        alias <LatG> = <AC05>;
        alias <LatH> = <AC06>;
        alias <LatJ> = <AC07>;
        alias <LatK> = <AC08>;
        alias <LatL> = <AC09>;
        alias <LatZ> = <AB01>;
        alias <LatX> = <AB02>;
        alias <LatC> = <AB03>;
        alias <LatV> = <AB04>;
        alias <LatB> = <AB05>;
        alias <LatN> = <AB06>;
        alias <LatM> = <AB07>;
};

Section xkb_types

   xkb_types "complete" {

    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;

    type "ONE_LEVEL" {
        modifiers= none;
        level_name[Level1]= "Any";
    };
    type "TWO_LEVEL" {
        modifiers= Shift;
        map[Shift]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
    };
    type "ALPHABETIC" {
        modifiers= Shift+Lock;
        map[Shift]= Level2;
        map[Lock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Caps";
    };
    type "KEYPAD" {
        modifiers= Shift+NumLock;
        map[Shift]= Level2;
        map[NumLock]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Number";
    };
    type "SHIFT+ALT" {
        modifiers= Shift+Alt;
        map[Shift+Alt]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift+Alt";
    };
    type "PC_SUPER_LEVEL2" {
        modifiers= Mod4;
        map[Mod4]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Super";
    };
    type "PC_CONTROL_LEVEL2" {
        modifiers= Control;
        map[Control]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Control";
    };
    type "PC_LCONTROL_LEVEL2" {
        modifiers= LControl;
        map[LControl]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "LControl";
    };
    type "PC_RCONTROL_LEVEL2" {
        modifiers= RControl;
        map[RControl]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "RControl";
    };
    type "PC_ALT_LEVEL2" {
        modifiers= Alt;
        map[Alt]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "Alt";
    };
    type "PC_LALT_LEVEL2" {
        modifiers= LAlt;
        map[LAlt]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "LAlt";
    };
    type "PC_RALT_LEVEL2" {
        modifiers= RAlt;
        map[RAlt]= Level2;
        level_name[Level1]= "Base";
        level_name[Level2]= "RAlt";
    };
    type "CTRL+ALT" {
        modifiers= Shift+Control+Alt+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Control+Alt]= Level5;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "Ctrl+Alt";
    };
    type "LOCAL_EIGHT_LEVEL" {
        modifiers= Shift+Lock+Control+LevelThree;
        map[Shift+Lock]= Level1;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level4;
        map[Control]= Level5;
        map[Shift+Lock+Control]= Level5;
        map[Shift+Control]= Level6;
        map[Lock+Control]= Level6;
        map[Control+LevelThree]= Level7;
        map[Shift+Lock+Control+LevelThree]= Level7;
        map[Shift+Control+LevelThree]= Level8;
        map[Lock+Control+LevelThree]= Level8;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Level3";
        level_name[Level4]= "Shift Level3";
        level_name[Level5]= "Ctrl";
        level_name[Level6]= "Shift Ctrl";
        level_name[Level7]= "Level3 Ctrl";
        level_name[Level8]= "Shift Level3 Ctrl";
    };
     type "THREE_LEVEL" {
           modifiers= Shift+Mod3;
           map[Shift]= Level2;
           map[Mod3]= Level3;
           map[Shift+Mod3
	   ]= Level3;
           level_name[Level1]= "Base";
           level_name[Level2]= "Shift";
           level_name[Level3]= "Level3";
       };
     type "HYPER_TWO_LEVEL" {
           modifiers= Mod3;
           map[Mod3]= Level2;
           level_name[Level1]= "Base";
           level_name[Level2]= "Level2";
       };
     type "EIGHT_LEVEL" {
        modifiers= Shift+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_ALPHABETIC" {
        modifiers= Shift+Lock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level4;
        map[Shift+Lock+LevelThree]= Level3;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[Lock+LevelFive]= Level6;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[Lock+LevelThree+LevelFive]= Level8;
        map[Shift+Lock+LevelThree+LevelFive]= Level7;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_LEVEL_FIVE_LOCK" {
        modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[NumLock]= Level5;
        map[Shift+NumLock]= Level6;
        map[NumLock+LevelThree]= Level7;
        map[Shift+NumLock+LevelThree]= Level8;
        map[Shift+NumLock+LevelFive]= Level2;
        map[NumLock+LevelThree+LevelFive]= Level3;
        map[Shift+NumLock+LevelThree+LevelFive]= Level4;
        map[Shift+Lock]= Level2;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        map[Lock+LevelFive]= Level5;
        map[Shift+Lock+LevelFive]= Level6;
        map[Lock+LevelThree+LevelFive]= Level7;
        map[Shift+Lock+LevelThree+LevelFive]= Level8;
        map[Lock+NumLock]= Level5;
        map[Shift+Lock+NumLock]= Level6;
        map[Lock+NumLock+LevelThree]= Level7;
        map[Shift+Lock+NumLock+LevelThree]= Level8;
        map[Shift+Lock+NumLock+LevelFive]= Level2;
        map[Lock+NumLock+LevelThree+LevelFive]= Level3;
        map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_ALPHABETIC_LEVEL_FIVE_LOCK" {
        modifiers= Shift+Lock+NumLock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[NumLock]= Level5;
        map[Shift+NumLock]= Level6;
        map[NumLock+LevelThree]= Level7;
        map[Shift+NumLock+LevelThree]= Level8;
        map[Shift+NumLock+LevelFive]= Level2;
        map[NumLock+LevelThree+LevelFive]= Level3;
        map[Shift+NumLock+LevelThree+LevelFive]= Level4;
        map[Lock]= Level2;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        map[Lock+LevelFive]= Level5;
        map[Shift+Lock+LevelFive]= Level6;
        map[Lock+LevelThree+LevelFive]= Level7;
        map[Shift+Lock+LevelThree+LevelFive]= Level8;
        map[Lock+NumLock]= Level5;
        map[Shift+Lock+NumLock]= Level6;
        map[Lock+NumLock+LevelThree]= Level7;
        map[Shift+Lock+NumLock+LevelThree]= Level8;
        map[Lock+NumLock+LevelFive]= Level2;
        map[Lock+NumLock+LevelThree+LevelFive]= Level4;
        map[Shift+Lock+NumLock+LevelThree+LevelFive]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "EIGHT_LEVEL_SEMIALPHABETIC" {
        modifiers= Shift+Lock+LevelThree+LevelFive;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        map[LevelFive]= Level5;
        map[Shift+LevelFive]= Level6;
        map[Lock+LevelFive]= Level6;
        map[Shift+Lock+LevelFive]= Level6;
        map[LevelThree+LevelFive]= Level7;
        map[Shift+LevelThree+LevelFive]= Level8;
        map[Lock+LevelThree+LevelFive]= Level7;
        map[Shift+Lock+LevelThree+LevelFive]= Level8;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "X";
        level_name[Level6]= "X Shift";
        level_name[Level7]= "X Alt Base";
        level_name[Level8]= "X Shift Alt";
    };
    type "FOUR_LEVEL" {
        modifiers= Shift+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_ALPHABETIC" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level4;
        map[Shift+Lock+LevelThree]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_SEMIALPHABETIC" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_MIXED_KEYPAD" {
        modifiers= Shift+NumLock+LevelThree;
        map[Shift+NumLock]= Level1;
        map[NumLock]= Level2;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[NumLock+LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Shift+NumLock+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Number";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
    };
    type "FOUR_LEVEL_X" {
        modifiers= Shift+Control+Alt+LevelThree;
        map[LevelThree]= Level2;
        map[Shift+LevelThree]= Level3;
        map[Control+Alt]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Alt Base";
        level_name[Level3]= "Shift Alt";
        level_name[Level4]= "Ctrl+Alt";
    };
    type "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[Lock]= Level4;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "AltGr Base";
        level_name[Level4]= "Shift AltGr";
    };
    type "FOUR_LEVEL_PLUS_LOCK" {
        modifiers= Shift+Lock+LevelThree;
        map[Shift]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[Lock]= Level5;
        map[Shift+Lock]= Level2;
        map[Lock+LevelThree]= Level3;
        map[Shift+Lock+LevelThree]= Level4;
        level_name[Level1]= "Base";
        level_name[Level2]= "Shift";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Shift Alt";
        level_name[Level5]= "Lock";
    };
    type "FOUR_LEVEL_KEYPAD" {
        modifiers= Shift+NumLock+LevelThree;
        map[Shift]= Level2;
        map[NumLock]= Level2;
        map[LevelThree]= Level3;
        map[Shift+LevelThree]= Level4;
        map[NumLock+LevelThree]= Level4;
        map[Shift+NumLock+LevelThree]= Level3;
        level_name[Level1]= "Base";
        level_name[Level2]= "Number";
        level_name[Level3]= "Alt Base";
        level_name[Level4]= "Alt Number";
    };
};

Section xkb_compatibility

Interpret section

xkb_compatibility "complete" {

    virtual_modifiers NumLock,Alt,LevelThree,LAlt,RAlt,RControl,LControl,ScrollLock,LevelFive,AltGr,Meta,Super,Hyper;

    interpret.useModMapMods= AnyLevel;
    interpret.repeat= False;
    interpret.locking= False;
    interpret ISO_Level2_Latch+Exactly(Shift) {
        useModMapMods=level1;
        action= LatchMods(modifiers=Shift,clearLocks,latchToLock);
    };
    interpret Shift_Lock+AnyOf(Shift+Lock) {
        action= LockMods(modifiers=Shift);
    };
    interpret Num_Lock+AnyOf(all) {
        virtualModifier= NumLock;
        action= LockMods(modifiers=NumLock);
    };
    interpret ISO_Level3_Shift+AnyOf(all) {
        virtualModifier= LevelThree;
        useModMapMods=level1;
        action= SetMods(modifiers=LevelThree,clearLocks);
    };
    interpret ISO_Level3_Latch+AnyOf(all) {
        virtualModifier= LevelThree;
        useModMapMods=level1;
        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
    };
    interpret ISO_Level3_Lock+AnyOf(all) {
        virtualModifier= LevelThree;
        useModMapMods=level1;
        action= LockMods(modifiers=LevelThree);
    };
    interpret Alt_L+AnyOf(all) {
        virtualModifier= Alt;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Alt_R+AnyOf(all) {
        virtualModifier= Alt;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Meta_L+AnyOf(all) {
        virtualModifier= Meta;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Meta_R+AnyOf(all) {
        virtualModifier= Meta;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Super_L+AnyOf(all) {
        virtualModifier= Super;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Super_R+AnyOf(all) {
        virtualModifier= Super;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Hyper_L+AnyOf(all) {
        virtualModifier= Hyper;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Hyper_R+AnyOf(all) {
        virtualModifier= Hyper;
        action= SetMods(modifiers=modMapMods,clearLocks);
    };
    interpret Scroll_Lock+AnyOf(all) {
        virtualModifier= ScrollLock;
        action= LockMods(modifiers=modMapMods);
    };
    interpret ISO_Level5_Shift+AnyOf(all) {
        virtualModifier= LevelFive;
        useModMapMods=level1;
        action= SetMods(modifiers=LevelFive,clearLocks);
    };
    interpret ISO_Level5_Latch+AnyOf(all) {
        virtualModifier= LevelFive;
        useModMapMods=level1;
        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
    };
    interpret ISO_Level5_Lock+AnyOf(all) {
        virtualModifier= LevelFive;
        useModMapMods=level1;
        action= LockMods(modifiers=LevelFive);
    };
    interpret Mode_switch+AnyOfOrNone(all) {
        action= LatchGroup(group=2);
    };
    interpret ISO_Level3_Shift+AnyOfOrNone(all) {
        action= SetMods(modifiers=LevelThree,clearLocks);
    };
    interpret ISO_Level3_Latch+AnyOfOrNone(all) {
        action= LatchMods(modifiers=LevelThree,clearLocks,latchToLock);
    };
    interpret ISO_Level3_Lock+AnyOfOrNone(all) {
        action= LockMods(modifiers=LevelThree);
    };
    interpret Hiragana+AnyOfOrNone(all) {
        action= LatchGroup(group=3);
    };
    interpret ISO_Next_Group+AnyOfOrNone(all) {
        action= LatchGroup(group=3);
    };
    interpret ISO_Prev_Group+AnyOfOrNone(all) {
        virtualModifier= AltGr;
        useModMapMods=level1;
        action= LockGroup(group=-1);
    };
    interpret ISO_First_Group+AnyOfOrNone(all) {
        action= LockGroup(group=1);
    };
    interpret ISO_Last_Group+AnyOfOrNone(all) {
        action= LockGroup(group=2);
    };
    interpret KP_1+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+1);
    };
    interpret KP_End+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+1);
    };
    interpret KP_2+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=+1);
    };
    interpret KP_Down+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=+1);
    };
    interpret KP_3+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+1);
    };
    interpret KP_Next+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+1);
    };
    interpret KP_4+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+0);
    };
    interpret KP_Left+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+0);
    };
    interpret KP_6+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+0);
    };
    interpret KP_Right+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+0);
    };
    interpret KP_7+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=-1);
    };
    interpret KP_Home+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=-1);
    };
    interpret KP_8+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=-1);
    };
    interpret KP_Up+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+0,y=-1);
    };
    interpret KP_9+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=-1);
    };
    interpret KP_Prior+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=-1);
    };
    interpret KP_5+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default);
    };
    interpret KP_Begin+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default);
    };
    interpret KP_F2+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=1);
    };
    interpret KP_Divide+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=1);
    };
    interpret KP_F3+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=2);
    };
    interpret KP_Multiply+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=2);
    };
    interpret KP_F4+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=3);
    };
    interpret KP_Subtract+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=3);
    };
    interpret KP_Separator+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default,count=2);
    };
    interpret KP_Add+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default,count=2);
    };
    interpret KP_0+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=lock);
    };
    interpret KP_Insert+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=lock);
    };
    interpret KP_Decimal+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=unlock);
    };
    interpret KP_Delete+AnyOfOrNone(all) {
        repeat= True;
        action= LockPtrBtn(button=default,affect=unlock);
    };
    interpret F25+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=1);
    };
    interpret F26+AnyOfOrNone(all) {
        repeat= True;
        action= SetPtrDflt(affect=button,button=2);
    };
    interpret F27+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=-1);
    };
    interpret F29+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=-1);
    };
    interpret F31+AnyOfOrNone(all) {
        repeat= True;
        action= PtrBtn(button=default);
    };
    interpret F33+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=-1,y=+1);
    };
    interpret F35+AnyOfOrNone(all) {
        repeat= True;
        action= MovePtr(x=+1,y=+1);
    };
    interpret Pointer_Button_Dflt+AnyOfOrNone(all) {
        action= PtrBtn(button=default);
    };
    interpret Pointer_Button1+AnyOfOrNone(all) {
        action= PtrBtn(button=1);
    };
    interpret Pointer_Button2+AnyOfOrNone(all) {
        action= PtrBtn(button=2);
    };
    interpret Pointer_Button3+AnyOfOrNone(all) {
        action= PtrBtn(button=3);
    };
    interpret Pointer_DblClick_Dflt+AnyOfOrNone(all) {
        action= PtrBtn(button=default,count=2);
    };
    interpret Pointer_DblClick1+AnyOfOrNone(all) {
        action= PtrBtn(button=1,count=2);
    };
    interpret Pointer_DblClick2+AnyOfOrNone(all) {
        action= PtrBtn(button=2,count=2);
    };
    interpret Pointer_DblClick3+AnyOfOrNone(all) {
        action= PtrBtn(button=3,count=2);
    };
    interpret Pointer_Drag_Dflt+AnyOfOrNone(all) {
        action= LockPtrBtn(button=default,affect=both);
    };
    interpret Pointer_Drag1+AnyOfOrNone(all) {
        action= LockPtrBtn(button=1,affect=both);
    };
    interpret Pointer_Drag2+AnyOfOrNone(all) {
        action= LockPtrBtn(button=2,affect=both);
    };
    interpret Pointer_Drag3+AnyOfOrNone(all) {
        action= LockPtrBtn(button=3,affect=both);
    };
    interpret Pointer_EnableKeys+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeys);
    };
    interpret Pointer_Accelerate+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeysAccel);
    };
    interpret Pointer_DfltBtnNext+AnyOfOrNone(all) {
        action= SetPtrDflt(affect=button,button=+1);
    };
    interpret Pointer_DfltBtnPrev+AnyOfOrNone(all) {
        action= SetPtrDflt(affect=button,button=-1);
    };
    interpret AccessX_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=AccessXKeys);
    };
    interpret AccessX_Feedback_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=AccessXFeedback);
    };
    interpret RepeatKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=RepeatKeys);
    };
    interpret SlowKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=SlowKeys);
    };
    interpret BounceKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=BounceKeys);
    };
    interpret StickyKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=StickyKeys);
    };
    interpret MouseKeys_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeys);
    };
    interpret MouseKeys_Accel_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=MouseKeysAccel);
    };
    interpret Overlay1_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=Overlay1);
    };
    interpret Overlay2_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=Overlay2);
    };
    interpret AudibleBell_Enable+AnyOfOrNone(all) {
        action= LockControls(controls=AudibleBell);
    };
    interpret Terminate_Server+AnyOfOrNone(all) {
        action= Terminate();
    };
    interpret Alt_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Alt,clearLocks);
    };
    interpret Alt_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Alt,clearLocks);
    };
    interpret Meta_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Meta,clearLocks);
    };
    interpret Meta_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Meta,clearLocks);
    };
    interpret Super_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Super,clearLocks);
    };
    interpret Super_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Super,clearLocks);
    };
    interpret Hyper_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Hyper,clearLocks);
    };
    interpret Hyper_R+AnyOfOrNone(all) {
        action= SetMods(modifiers=Hyper,clearLocks);
    };
    interpret Shift_L+AnyOfOrNone(all) {
        action= SetMods(modifiers=Shift,clearLocks);
    };
    interpret XF86Switch_VT_1+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=1,!same);
    };
    interpret XF86Switch_VT_2+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=2,!same);
    };
    interpret XF86Switch_VT_3+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=3,!same);
    };
    interpret XF86Switch_VT_4+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=4,!same);
    };
    interpret XF86Switch_VT_5+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=5,!same);
    };
    interpret XF86Switch_VT_6+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=6,!same);
    };
    interpret XF86Switch_VT_7+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=7,!same);
    };
    interpret XF86Switch_VT_8+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=8,!same);
    };
    interpret XF86Switch_VT_9+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=9,!same);
    };
    interpret XF86Switch_VT_10+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=10,!same);
    };
    interpret XF86Switch_VT_11+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=11,!same);
    };
    interpret XF86Switch_VT_12+AnyOfOrNone(all) {
        repeat= True;
        action= SwitchScreen(screen=12,!same);
    };
    interpret XF86LogGrabInfo+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x47,data[3]=0x72,data[4]=0x62,data[5]=0x73,data[6]=0x00);
    };
    interpret XF86LogWindowTree+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x50,data[1]=0x72,data[2]=0x57,data[3]=0x69,data[4]=0x6e,data[5]=0x73,data[6]=0x00);
    };
    interpret XF86Next_VMode+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x2b,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
    };
    interpret XF86Prev_VMode+AnyOfOrNone(all) {
        repeat= True;
        action= Private(type=0x86,data[0]=0x2d,data[1]=0x56,data[2]=0x4d,data[3]=0x6f,data[4]=0x64,data[5]=0x65,data[6]=0x00);
    };
    interpret ISO_Level5_Shift+AnyOfOrNone(all) {
        action= SetMods(modifiers=LevelFive,clearLocks);
    };
    interpret ISO_Level5_Latch+AnyOfOrNone(all) {
        action= LatchMods(modifiers=LevelFive,clearLocks,latchToLock);
    };
    interpret ISO_Level5_Lock+AnyOfOrNone(all) {
        action= LockMods(modifiers=LevelFive);
    };
    interpret Caps_Lock+AnyOfOrNone(all) {
        action= LockMods(modifiers=Lock);
    };
    interpret Any+Exactly(Lock) {
        action= LockMods(modifiers=Lock);
    };
    interpret Any+AnyOf(all) {
         action= SetMods(modifiers=modMapMods,clearLocks);
    };

Indicators

This section defines special indicators for the second and third group. These are of course virtual indicators, but they can be reported using the xkbvleds tool that I patched

    indicator "Caps Lock" {
        whichModState = locked;
        modifiers= Lock;
    };
    indicator "Num Lock" {
        !allowExplicit;
        whichModState= locked;
        modifiers= NumLock;
    };
    indicator "Scroll Lock" {
        whichModState= locked;
        modifiers= ScrollLock;
    };
    indicator "Shift Lock" {
        !allowExplicit;
        whichModState= locked;
        modifiers= Shift;
    };
    indicator "Greek" {
        !allowExplicit;
        groups= 0x02;
    };
    indicator "Math" {
        !allowExplicit;
     	groups= 0x04;
    };
};

Section xkb_symbols

Group Switching

	 xkb_symbols "pc+us+inet(evdev)" {

	 name[Group1]="default";
	 name[Group2]="Greek";
	 name[Group3]="Math";
	 name[Group4]="Navigation";

	 key  <ESC> { type= "HYPER_TWO_LEVEL",
		     [          Escape, Hiragana ] };
	 key <SPCE> { type= "HYPER_TWO_LEVEL",
		     [           space, Mode_switch ] };
	 key <FK13> { type= "PC_CONTROL_LEVEL2",
           [ Mode_switch , Hiragana ] };
	 key <FK14> {         [ Hiragana ] };
   key <BKSP> { type= "HYPER_TWO_LEVEL",        [       BackSpace,        Delete ] };

Numbers

key <AE01> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               1,          exclam , F1],
    symbols[Group3]=[ U2081,U00B9 ]};
key <AE02> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               2,              at , F2],
    symbols[Group3]=[ U2082,U00B2 ]};
key <AE03> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               3,      numbersign , F3],
    symbols[Group3]=[ U2083,U00B3 ]};
key <AE04> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               4,          dollar , F4],
    symbols[Group3]=[ U2084, U2074]};
key <AE05> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               5,         percent , F5],
    symbols[Group3]=[ U2085, U2075]};
key <AE06> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               6,     asciicircum , F6],
    symbols[Group3]=[ U2086, U2076]};
key <AE07> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               7,       ampersand , F7],
    symbols[Group3]=[ U2087, U2077]};
key <AE08> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               8,        asterisk , F8],
    symbols[Group3]=[ U2088, U2078]};
key <AE09> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               9,       parenleft , F9],
    symbols[Group3]=[ U2089, U2079]};
key <AE10> {
    type[Group1]="THREE_LEVEL",
    type[Group3]="TWO_LEVEL",
        symbols[Group1]=[               0,      parenright , F10],
    symbols[Group3]=[ U2080, U2070]};

Symbols and brackets

	 key <AE11> {type="THREE_LEVEL",
       [           minus,      underscore, F11 ] };
	 key <AE12> {type="THREE_LEVEL",
       [           equal,            plus, F12 ] };
   key <AD11> {         [     bracketleft,       braceleft ] };
	 key <AD12> {         [    bracketright,      braceright ] };
   key <AC10> {         [       semicolon,           colon ] };
	 key <AC11> {         [      apostrophe,        quotedbl ] };
	 key <TLDE> {         [           grave,      asciitilde ] };
	 key <BKSL> {         [       backslash,             bar ] };
	 key <AB08> {symbols[Group1]=      [           comma,            less ],
               symbols[Group3]=[ U2282,U2284]     };
	 key <AB09> {symbols[Group1]=   [          period,         greater ],
                    symbols[Group3]=[ U2283,U2285]     };
	 key <AB10> {         [           slash,        question ] };
   key  <TAB> {         [           grave,      asciitilde ] };

Alphas

key <AD01> {
    type= "ALPHABETIC",
    symbols[Group1]= [               q,               Q ],
    symbols[Group2]= [               q,               Q ],
    symbols[Group3]= [               U2227,               U22C0 ]};
key <AD02> {
    type[Group1]= "ALPHABETIC",
    symbols[Group1]= [               w,               W ],
    symbols[Group2]= [               w,               W ],
    symbols[Group3]= [               U2228,               U22C1 ]};

key <AD02> {
    type[Group2]= "ALPHABETIC",
    symbols[Group2]= [		 U03C2,U03A2]    };
key <AD03> {
    type= "ALPHABETIC",
    symbols[Group1]= [               e,               E ],
    symbols[Group2]= [		 U03B5,U0395]

};
key <AD04> {
    type= "ALPHABETIC",
    symbols[Group1]= [               r,               R ],
    symbols[Group2]= [		 U03C1,U03A1]
};
key <AD05> {
    type= "ALPHABETIC",
    symbols[Group1]= [               t,               T ],
    symbols[Group2]= [		 U03C4,U03A4]
};
key <AD06> {
    type= "ALPHABETIC",
    symbols[Group1]= [               y,               Y ],
    symbols[Group2]= [		 U03C5,U03A5]
};
key <AD07> {
    type= "THREE_LEVEL",
    symbols[Group1]= [               u,               U,Prior ],
    symbols[Group2]= [		 U03B8,U0398, Prior],
    symbols[Group3]= [		 U2200,U2200, Prior]
 };
key <AD08> {
    type= "THREE_LEVEL",
    symbols[Group1]= [               i,               I,Up ],
    symbols[Group2]= [		 U03B9,U0399, Up],
    symbols[Group3]= [		 U221E,U222B, Up]
};
key <AD09> {
    type= "THREE_LEVEL",
    symbols[Group1]= [               o,               O,Next ],
    symbols[Group2]= [		 U03BF,U039F, Next],
    symbols[Group3]= [		 U2203,U2203, Next]
};
key <AD10> {
    type= "ALPHABETIC",
    symbols[Group1]= [               p,               P],
    symbols[Group2]= [		 U03C0,U03A0],
    symbols[Group3]= [		 U2202,U2207]
};
key <AC01> {
type= "ALPHABETIC",
    symbols[Group1]= [               a,               A ],
    symbols[Group2]= [               U03B1,U0391]
};
key <AC02> {
    type= "ALPHABETIC",
    symbols[Group1]= [               s,               S ],
    symbols[Group2]= [		 U03C3,U03A3]
};
key <AC03> {
    type= "ALPHABETIC",
    symbols[Group1]= [               d,               D ],
    symbols[Group2]= [		 U03B4,U0394]

};
key <AC04> {
    type= "ALPHABETIC",
    symbols[Group1]= [               f,               F ],
    symbols[Group2]= [		 U03C6,U03A6],
    symbols[Group3]= [		 U2208,U2209]
};
key <AC05> {
    type= "ALPHABETIC",
    symbols[Group1]= [               g,               G ],
    symbols[Group2]= [               U03B3,           U0393 ],
    symbols[Group3]= [		 U220B,U220C]
};
key <AC06> {
    type= "ALPHABETIC",
    symbols[Group1]= [               h,               H],
    symbols[Group2]= [		 U03B7,U0397]
};
key <AC07> {
    type= "THREE_LEVEL",
    symbols[Group1]= [               j,               J,Left ],
    symbols[Group2]= [               U03BE,U039E,Left ],
    symbols[Group3]= [ 		 U2190,U21D0,Left]
};
key <AC08> {
    type[Group1] = "THREE_LEVEL",
    type[Group2] = "TWO_LEVEL",
    type[Group3] = "TWO_LEVEL",
    symbols[Group1]= [               k,               K,Down ],
    symbols[Group2]= [		 U03BA,U039A],
    symbols[Group3]= [ 		 U2193,U21D3]

};
key <AC09> {
    type[Group1] = "THREE_LEVEL",
    type[Group2] = "TWO_LEVEL",
    type[Group3] = "TWO_LEVEL",
    symbols[Group1]= [               l,               L,Right ],
    symbols[Group2]= [		 U03BB,U039B],
    symbols[Group3]= [		 U2192,U21D2]
};
key <AB01> {
    type= "ALPHABETIC",
    symbols[Group1]= [               z,               Z ],
    symbols[Group2]= [		 U03B6,U0396]
};
key <AB02> {
    type= "ALPHABETIC",
    symbols[Group1]= [               x,               X ],
    symbols[Group2]= [		 U03C7,U03A7]
};
key <AB03> {
    type= "ALPHABETIC",
    symbols[Group1]= [               c,               C ],
    symbols[Group2]= [		 U03C8,U03A8]

};
key <AB04> {
    type= "ALPHABETIC",
    symbols[Group1]= [               v,               V ],
    symbols[Group2]= [		 U03C9,U03A9]
};
key <AB05> {
    type= "ALPHABETIC",
    symbols[Group1]= [               b,               B ],
    symbols[Group2]= [		 U03B2,U0392]
};
key <AB06> {
    type= "ALPHABETIC",
    symbols[Group1]= [               n,               N ],
    symbols[Group2]= [		 U03BD,U039D],
    symbols[Group3]= [		 U2264,U2266]
};
key <AB07> {
    type= "ALPHABETIC",
    symbols[Group1]= [               m,               M ],
    symbols[Group2]= [		 U03BC,U039C],
    symbols[Group3]= [		 U2265,U2267]
};

Function keys and leftovers

	 key <KPMU> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [     KP_Multiply,     KP_Multiply,     KP_Multiply,     KP_Multiply,   XF86ClearGrab ]
	 };
	 key <FK01> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F1,              F1,              F1,              F1, XF86Switch_VT_1 ]
	 };
	 key <FK02> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F2,              F2,              F2,              F2, XF86Switch_VT_2 ]
	 };
	 key <FK03> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F3,              F3,              F3,              F3, XF86Switch_VT_3 ]
	 };
	 key <FK04> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F4,              F4,              F4,              F4, XF86Switch_VT_4 ]
	 };
	 key <FK05> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F5,              F5,              F5,              F5, XF86Switch_VT_5 ]
	 };
	 key <FK06> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F6,              F6,              F6,              F6, XF86Switch_VT_6 ]
	 };
	 key <FK07> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F7,              F7,              F7,              F7, XF86Switch_VT_7 ]
	 };
	 key <FK08> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F8,              F8,              F8,              F8, XF86Switch_VT_8 ]
	 };
	 key <FK09> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [              F9,              F9,              F9,              F9, XF86Switch_VT_9 ]
	 };
	 key <FK10> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [             F10,             F10,             F10,             F10, XF86Switch_VT_10 ]
	 };
	 key <FK11> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [             F11,             F11,             F11,             F11, XF86Switch_VT_11 ]
	 };
	 key <FK12> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [             F12,             F12,             F12,             F12, XF86Switch_VT_12 ]
	 };
	 key <NMLK> {         [        Num_Lock ] };
	 key <SCLK> {         [     Scroll_Lock ] };
	 key  <KP7> {         [         KP_Home,            KP_7 ] };
	 key  <KP8> {         [           KP_Up,            KP_8 ] };
	 key  <KP9> {         [        KP_Prior,            KP_9 ] };
	 key <KPSU> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [     KP_Subtract,     KP_Subtract,     KP_Subtract,     KP_Subtract,  XF86Prev_VMode ]
	 };
	 key  <KP4> {         [         KP_Left,            KP_4 ] };
	 key  <KP5> {         [        KP_Begin,            KP_5 ] };
	 key  <KP6> {         [        KP_Right,            KP_6 ] };
	 key <KPAD> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [          KP_Add,          KP_Add,          KP_Add,          KP_Add,  XF86Next_VMode ]
	 };
	 key  <KP1> {         [          KP_End,            KP_1 ] };
	 key  <KP2> {         [         KP_Down,            KP_2 ] };
	 key  <KP3> {         [         KP_Next,            KP_3 ] };
	 key  <KP0> {         [       KP_Insert,            KP_0 ] };
	 key <KPDL> {         [       KP_Delete,      KP_Decimal ] };
	 key <LVL3> {         [ ISO_Level3_Shift ] };
	 key <LSGT> {
	     type= "FOUR_LEVEL",
	     symbols[Group1]= [            less,         greater,             bar,       brokenbar ]
	 };

	 key <KATA> {         [        Katakana ] };
	 key <HIRA> {         [        Hiragana ] };
	 key <HENK> {         [     Henkan_Mode ] };
	 key <HKTG> {         [ Hiragana_Katakana ] };
	 key <MUHE> {         [        Muhenkan ] };
	 key <KPEN> {         [        KP_Enter ] };
	 key <KPDV> {
	     type= "CTRL+ALT",
	     symbols[Group1]= [       KP_Divide,       KP_Divide,       KP_Divide,       KP_Divide,      XF86Ungrab ]
	 };
	 key <LNFD> {         [        Linefeed ] };
	 key <HOME> {         [            Home ] };
	 key   <UP> {         [              Up ] };
	 key <PGUP> {         [           Prior ] };
	 key <LEFT> {         [            Left ] };
	 key <RGHT> {         [           Right ] };
	 key  <END> {         [             End ] };
	 key <DOWN> {         [            Down ] };
	 key <PGDN> {         [            Next ] };
	 key  <INS> {         [          Insert ] };
	 key <DELE> {         [          Delete ] };
	 key <MUTE> {         [   XF86AudioMute ] };
	 key <VOL-> {         [ XF86AudioLowerVolume ] };
	 key <VOL+> {         [ XF86AudioRaiseVolume ] };
	 key <POWR> {         [    XF86PowerOff ] };
	 key <KPEQ> {         [        KP_Equal ] };
	 key <I126> {         [       plusminus ] };
	 key <PAUS> {
	     type= "PC_CONTROL_LEVEL2",
	     symbols[Group1]= [           Pause,           Break ]
	 };
	 key <I128> {         [     XF86LaunchA ] };
	 key <I129> {         [      KP_Decimal,      KP_Decimal ] };
	 key <HNGL> {         [          Hangul ] };
	 key <HJCV> {         [    Hangul_Hanja ] };
	 key <COMP> {         [            Menu ] };
	 key <STOP> {         [          Cancel ] };
	 key <AGAI> {         [            Redo ] };
	 key <PROP> {         [        SunProps ] };
	 key <UNDO> {         [            Undo ] };
	 key <FRNT> {         [        SunFront ] };
	 key <COPY> {         [        XF86Copy ] };
	 key <OPEN> {         [        XF86Open ] };
	 key <PAST> {         [       XF86Paste ] };
	 key <FIND> {         [            Find ] };
	 key  <CUT> {         [         XF86Cut ] };
	 key <HELP> {         [            Help ] };
	 key <I147> {         [      XF86MenuKB ] };
	 key <I148> {         [  XF86Calculator ] };
	 key <I150> {         [       XF86Sleep ] };
	 key <I151> {         [      XF86WakeUp ] };
	 key <I152> {         [    XF86Explorer ] };
	 key <I153> {         [        XF86Send ] };
	 key <I155> {         [        XF86Xfer ] };
	 key <I156> {         [     XF86Launch1 ] };
	 key <I157> {         [     XF86Launch2 ] };
	 key <I158> {         [         XF86WWW ] };
	 key <I159> {         [         XF86DOS ] };
	 key <I160> {         [ XF86ScreenSaver ] };
	 key <I161> {         [ XF86RotateWindows ] };
	 key <I162> {         [    XF86TaskPane ] };
	 key <I163> {         [        XF86Mail ] };
	 key <I164> {         [   XF86Favorites ] };
	 key <I165> {         [  XF86MyComputer ] };
	 key <I166> {         [        XF86Back ] };
	 key <I167> {         [     XF86Forward ] };
	 key <I169> {         [       XF86Eject ] };
	 key <I170> {         [       XF86Eject,       XF86Eject ] };
	 key <I171> {         [   XF86AudioNext ] };
	 key <I172> {         [   XF86AudioPlay,  XF86AudioPause ] };
	 key <I173> {         [   XF86AudioPrev ] };
	 key <I174> {         [   XF86AudioStop,       XF86Eject ] };
	 key <I175> {         [ XF86AudioRecord ] };
	 key <I176> {         [ XF86AudioRewind ] };
	 key <I177> {         [       XF86Phone ] };
	 key <I179> {         [       XF86Tools ] };
	 key <I180> {         [    XF86HomePage ] };
	 key <I181> {         [      XF86Reload ] };
	 key <I182> {         [       XF86Close ] };
	 key <I185> {         [    XF86ScrollUp ] };
	 key <I186> {         [  XF86ScrollDown ] };
	 key <I187> {         [       parenleft ] };
	 key <I188> {         [      parenright ] };
	 key <I189> {         [         XF86New ] };
	 key <I190> {         [            Redo ] };
	 key <FK15> {         [     F15 ] };
	 key <FK16> {         [     F16 ] };
	 key <FK17> {         [     F17 ] };
	 key <FK18> {         [ F18 ] };
	 key <FK20> {         [ XF86AudioMicMute ] };
	 key <FK21> {         [ XF86TouchpadToggle ] };
	 key <FK22> {         [  XF86TouchpadOn ] };
	 key <FK23> {         [ space] };
	 key <MDSW> {         [     Mode_switch ] };
	 key  <ALT> {         [        NoSymbol,           Alt_R ] };
	 key <META> {         [        NoSymbol,          Meta_L ] };
	 key <SUPR> {         [        NoSymbol,         Super_L ] };
	 key <HYPR> {         [        NoSymbol,         Hyper_L ] };
	 key <I208> {         [   XF86AudioPlay ] };
	 key <I209> {         [  XF86AudioPause ] };
	 key <I210> {         [     XF86Launch3 ] };
	 key <I211> {         [     XF86Launch4 ] };
	 key <I212> {         [     XF86LaunchB ] };
	 key <I213> {         [     XF86Suspend ] };
	 key <I214> {         [       XF86Close ] };
	 key <I215> {         [   XF86AudioPlay ] };
	 key <I216> {         [ XF86AudioForward ] };
	 key <I218> {         [           Print ] };
	 key <I220> {         [      XF86WebCam ] };
	 key <I223> {         [        XF86Mail ] };
	 key <I224> {         [   XF86Messenger ] };
	 key <I225> {         [      XF86Search ] };
	 key <I226> {         [          XF86Go ] };
	 key <I227> {         [     XF86Finance ] };
	 key <I228> {         [        XF86Game ] };
	 key <I229> {         [        XF86Shop ] };
	 key <I231> {         [          Cancel ] };
	 key <I232> {         [ XF86MonBrightnessDown ] };
	 key <I233> {         [ XF86MonBrightnessUp ] };
	 key <I234> {         [  XF86AudioMedia ] };
	 key <I235> {         [     XF86Display ] };
	 key <I236> {         [ XF86KbdLightOnOff ] };
	 key <I237> {         [ XF86KbdBrightnessDown ] };
	 key <I238> {         [ XF86KbdBrightnessUp ] };
	 key <I239> {         [        XF86Send ] };
	 key <I240> {         [       XF86Reply ] };
	 key <I241> {         [ XF86MailForward ] };
	 key <I242> {         [        XF86Save ] };
	 key <I243> {         [   XF86Documents ] };
	 key <I245> {         [   XF86Bluetooth ] };
	 key <I246> {         [        XF86WLAN ] };

xcape bindings

	 key <I247> {	 [ F13] };
	 key <I248> {	 [ Caps_Lock ]};
	 key <I249> { 	 [ Return ]};
	 key <I250> {	 [ Multi_key ]};
	 key <I253> {	 [ F14 ]};
	 key <LALT> {	 [ Tab , ISO_Left_Tab ]};
	 key <I244> {    [ Control_R ] };

Modifiers

This is for the lesser keyboards

    key <LFSH> {         [         Shift_L ] };
    key <RTSH> {         [         Shift_R ] };
    key <PRSC> {
        type= "PC_ALT_LEVEL2",
        symbols[Group1]= [           Super_R,         Sys_Req ]
    };
    key <RALT> {
        type= "TWO_LEVEL",
        symbols[Group1]= [           Alt_R,          Meta_R ]
    };
    key <I251> {	 [ Control_R ]};
    key <I252> {         [           Alt_L,          Meta_L ] };
    key <CAPS> {         [ 	     Control_L ] };
    key <RTRN> {         [       Control_L ] };
    key <LCTL> {         [       Hyper_L ] };
    key <RCTL> {         [       Hyper_R ] };
    key <LWIN> {         [         Super_L ] };
    key <RWIN> {         [         Super_R ] };

    modifier_map Shift { <LFSH> };
    modifier_map Shift { <RTSH> };
    modifier_map Control { <RTRN> };
    modifier_map Control { <CAPS> };
    modifier_map Control { <I251> };
    modifier_map Mod1 { <I252> };
    modifier_map Mod1 { <RALT> };
    modifier_map Mod1 { <META> };
    modifier_map Mod2 { <NMLK> };
    modifier_map Mod3 { <LCTL> };
    modifier_map Mod3 { <RCTL> };
    modifier_map Mod4 { <LWIN> };
    modifier_map Mod4 { <RWIN> };
    modifier_map Mod4 { <SUPR> };
    modifier_map Mod5 { <LVL3> };
    modifier_map Mod5 { <MDSW> };
    modifier_map Mod5 { <HYPR> };
};

And this is for the cadet

    key <LFSH> {         [         Shift_L ] };
    key <RTSH> {         [         Shift_R ] };
    key <PRSC> {
        type= "PC_ALT_LEVEL2",
        symbols[Group1]= [           Super_R,         Sys_Req ]
    };
    key <RALT> {
        type= "TWO_LEVEL",
        symbols[Group1]= [           Alt_R,          Meta_R ]
    };
    key <I251> {	 [ Control_R ]};
    key <I252> {         [           Alt_L,          Meta_L ] };
    key <CAPS> {         [ 	     Control_L ] };
    key <RTRN> {         [       Control_L ] };
    key <LCTL> {         [       Control_R ] };
    key <RCTL> {         [       Control_R] };
    key <LWIN> {         [         Super_L ] };
    key <RWIN> {         [         Super_R ] };

    modifier_map Shift { <LFSH> };
    modifier_map Shift { <RTSH> };
    modifier_map Control { <RTRN> };
    modifier_map Control { <CAPS> };
    modifier_map Control { <I251> };
    modifier_map Control { <I244> };
    modifier_map Control { <LCTL> };
    modifier_map Control { <RCTL> };
    modifier_map Mod1 { <I252> };
    modifier_map Mod1 { <RALT> };
    modifier_map Mod1 { <META> };
    modifier_map Mod2 { <NMLK> };
    modifier_map Mod4 { <LWIN> };
    modifier_map Mod4 { <RWIN> };
    modifier_map Mod4 { <SUPR> };
    modifier_map Mod5 { <LVL3> };
    modifier_map Mod5 { <MDSW> };
    modifier_map Mod5 { <HYPR> };
};

Section xkb_geometry

This section can be omitted and I am happy to do that

Close the definition of the keymap

}; //xkb_keymap
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment