1// Based on http://www.sci.kz/~sairan/keyboard/kzkbd.html
2// Baurzhan Ismagulov <ibr@radix50.net>
3//
4
5// TODO:
6// 1. AltGr with TLDE and LSGT.
7// 2. Dead key for ruskaz and kazrus.
8// 3. Ctrl + <key>.
9// 4. Alt-Tab.
10
11// RST KazSSR 903-90
12// levels 3 and 4 are non-standard extensions
13default partial alphanumeric_keys
14xkb_symbols "basic" {
15
16    name[Group1] = "Kazakh";
17
18key.type[group1] = "FOUR_LEVEL";
19
20    key <TLDE> { [ parenleft,               parenright,              Cyrillic_io, Cyrillic_IO ] };
21    key <AE01> { [ quotedbl,      exclam ] };
22    key <AE06> { [ comma,                   semicolon ] };
23    key <AE07> { [ period,                  colon ] };
24    key <BKSL> { [ backslash,               slash ] };
25    key <AB10> { [ numerosign,              question ] };
26    key <LSGT> { [ less,                    greater,                 bar,         brokenbar ] };
27
28key.type[group1] = "ALPHABETIC";
29
30    key <AE02> { [ Cyrillic_schwa,          Cyrillic_SCHWA ] };
31    key <AE03> { [ Ukrainian_i,             Ukrainian_I ] };
32    key <AE04> { [ Cyrillic_en_descender,   Cyrillic_EN_descender ] };
33    key <AE05> { [ Cyrillic_ghe_bar,        Cyrillic_GHE_bar ] };
34    key <AE08> { [ Cyrillic_u_straight,     Cyrillic_U_straight ] };
35    key <AE09> { [ Cyrillic_u_straight_bar, Cyrillic_U_straight_bar ] };
36    key <AE10> { [ Cyrillic_ka_descender,   Cyrillic_KA_descender ] };
37    key <AE11> { [ Cyrillic_o_bar,          Cyrillic_O_bar ] };
38    key <AE12> { [ Cyrillic_shha,           Cyrillic_SHHA ] };
39
40    key <AD01> { [ Cyrillic_shorti,         Cyrillic_SHORTI ] };
41    key <AD02> { [ Cyrillic_tse,            Cyrillic_TSE ] };
42    key <AD03> { [ Cyrillic_u,              Cyrillic_U ] };
43    key <AD04> { [ Cyrillic_ka,             Cyrillic_KA ] };
44    key <AD05> { [ Cyrillic_ie,             Cyrillic_IE ] };
45    key <AD06> { [ Cyrillic_en,             Cyrillic_EN ] };
46    key <AD07> { [ Cyrillic_ghe,            Cyrillic_GHE ] };
47    key <AD08> { [ Cyrillic_sha,            Cyrillic_SHA ] };
48    key <AD09> { [ Cyrillic_shcha,          Cyrillic_SHCHA ] };
49    key <AD10> { [ Cyrillic_ze,             Cyrillic_ZE ] };
50    key <AD11> { [ Cyrillic_ha,             Cyrillic_HA ] };
51    key <AD12> { [ Cyrillic_hardsign,       Cyrillic_HARDSIGN ] };
52    key <AC01> { [ Cyrillic_ef,             Cyrillic_EF ] };
53    key <AC02> { [ Cyrillic_yeru,           Cyrillic_YERU ] };
54    key <AC03> { [ Cyrillic_ve,             Cyrillic_VE ] };
55    key <AC04> { [ Cyrillic_a,              Cyrillic_A ] };
56    key <AC05> { [ Cyrillic_pe,             Cyrillic_PE ] };
57    key <AC06> { [ Cyrillic_er,             Cyrillic_ER ] };
58    key <AC07> { [ Cyrillic_o,              Cyrillic_O ] };
59    key <AC08> { [ Cyrillic_el,             Cyrillic_EL ] };
60    key <AC09> { [ Cyrillic_de,             Cyrillic_DE ] };
61    key <AC10> { [ Cyrillic_zhe,            Cyrillic_ZHE ] };
62    key <AC11> { [ Cyrillic_e,              Cyrillic_E ] };
63    key <AB01> { [ Cyrillic_ya,             Cyrillic_YA ] };
64    key <AB02> { [ Cyrillic_che,            Cyrillic_CHE ] };
65    key <AB03> { [ Cyrillic_es,             Cyrillic_ES ] };
66    key <AB04> { [ Cyrillic_em,             Cyrillic_EM ] };
67    key <AB06> { [ Cyrillic_te,             Cyrillic_TE ] };
68    key <AB05> { [ Cyrillic_i,              Cyrillic_I ] };
69    key <AB07> { [ Cyrillic_softsign,       Cyrillic_SOFTSIGN ] };
70    key <AB08> { [ Cyrillic_be,             Cyrillic_BE ] };
71    key <AB09> { [ Cyrillic_yu,             Cyrillic_YU ] };
72};
73
74// Kikkarin KZ1
75partial alphanumeric_keys
76xkb_symbols "ruskaz" {
77
78    name[Group1] = "Russian (Kazakhstan, with Kazakh)";
79
80key.type[group1] = "FOUR_LEVEL";
81
82    key	<AE01> { [ 1,                       exclam ] };
83    key	<AE02> { [ 2,                       quotedbl,                at ] };
84    key	<AE03> { [ 3,                       numerosign,              numbersign ] };
85    key	<AE04> { [ 4,                       semicolon,               dollar ] };
86    key	<AE05> { [ 5,                       percent ] };
87    key	<AE06> { [ 6,                       colon,                   asciicircum ] };
88    key	<AE07> { [ 7,                       question,                ampersand ] };
89    key	<AE08> { [ 8,                       asterisk ] };
90    key	<AE09> { [ 9,                       parenleft ] };
91    key	<AE10> { [ 0,                       parenright ] };
92    key	<AE11> { [ minus,                   underscore ] };
93    key	<AE12> { [ equal,                   plus ] };
94    key	<BKSL> { [ backslash,               slash,                   bar ] };
95    key	<AB10> { [ period,                  comma,                   slash,                   question ] };
96    key <LSGT> { [ less,                    greater,                 bar,                     brokenbar ] };
97
98key.type[group1] = "FOUR_LEVEL_ALPHABETIC";
99
100    key	<TLDE> { [ Cyrillic_io,             Cyrillic_IO ] };
101    key	<AD01> { [ Cyrillic_shorti,         Cyrillic_SHORTI,         Cyrillic_u_straight_bar, Cyrillic_U_straight_bar ] };
102    key	<AD02> { [ Cyrillic_tse,            Cyrillic_TSE ] };
103    key	<AD03> { [ Cyrillic_u,              Cyrillic_U,              Cyrillic_u_straight,     Cyrillic_U_straight ] };
104    key	<AD04> { [ Cyrillic_ka,             Cyrillic_KA,             Cyrillic_ka_descender,   Cyrillic_KA_descender ] };
105    key	<AD05> { [ Cyrillic_ie,             Cyrillic_IE,             Cyrillic_io,             Cyrillic_IO ] };
106    key	<AD06> { [ Cyrillic_en,             Cyrillic_EN,             Cyrillic_en_descender,   Cyrillic_EN_descender ] };
107    key	<AD07> { [ Cyrillic_ghe,            Cyrillic_GHE,            Cyrillic_ghe_bar,        Cyrillic_GHE_bar ] };
108    key	<AD08> { [ Cyrillic_sha,            Cyrillic_SHA ] };
109    key	<AD09> { [ Cyrillic_shcha,          Cyrillic_SHCHA ] };
110    key	<AD10> { [ Cyrillic_ze,             Cyrillic_ZE ] };
111    key	<AD11> { [ Cyrillic_ha,             Cyrillic_HA,             Cyrillic_shha,           Cyrillic_SHHA ] };
112    key	<AD12> { [ Cyrillic_hardsign,       Cyrillic_HARDSIGN ] };
113    key	<AC01> { [ Cyrillic_ef,             Cyrillic_EF ] };
114    key	<AC02> { [ Cyrillic_yeru,           Cyrillic_YERU ] };
115    key	<AC03> { [ Cyrillic_ve,             Cyrillic_VE ] };
116    key	<AC04> { [ Cyrillic_a,              Cyrillic_A,              Cyrillic_schwa,          Cyrillic_SCHWA ] };
117    key	<AC05> { [ Cyrillic_pe,             Cyrillic_PE ] };
118    key	<AC06> { [ Cyrillic_er,             Cyrillic_ER ] };
119    key	<AC07> { [ Cyrillic_o,              Cyrillic_O,              Cyrillic_o_bar,          Cyrillic_O_bar ] };
120    key	<AC08> { [ Cyrillic_el,             Cyrillic_EL ] };
121    key	<AC09> { [ Cyrillic_de,             Cyrillic_DE ] };
122    key	<AC10> { [ Cyrillic_zhe,            Cyrillic_ZHE ] };
123    key	<AC11> { [ Cyrillic_e,              Cyrillic_E ] };
124    key	<AB01> { [ Cyrillic_ya,             Cyrillic_YA ] };
125    key	<AB02> { [ Cyrillic_che,            Cyrillic_CHE ] };
126    key	<AB03> { [ Cyrillic_es,             Cyrillic_ES ] };
127    key	<AB04> { [ Cyrillic_em,             Cyrillic_EM ] };
128    key	<AB06> { [ Cyrillic_te,             Cyrillic_TE ] };
129    key	<AB05> { [ Cyrillic_i,              Cyrillic_I,              Ukrainian_i,             Ukrainian_I ] };
130    key	<AB07> { [ Cyrillic_softsign,       Cyrillic_SOFTSIGN ] };
131    key	<AB08> { [ Cyrillic_be,             Cyrillic_BE ] };
132    key	<AB09> { [ Cyrillic_yu,             Cyrillic_YU ] };
133};
134
135// Kikkarin KZ2
136partial alphanumeric_keys
137xkb_symbols "kazrus" {
138
139    name[Group1] = "Kazakh (with Russian)";
140
141key.type[group1] = "FOUR_LEVEL";
142
143    key	<AE01> { [ 1,                       exclam ] };
144    key	<AE02> { [ 2,                       quotedbl,                at ] };
145    key	<AE03> { [ 3,                       numerosign,              numbersign ] };
146    key	<AE04> { [ 4,                       semicolon,               dollar ] };
147    key	<AE05> { [ 5,                       percent ] };
148    key	<AE06> { [ 6,                       colon,                   asciicircum ] };
149    key	<AE07> { [ 7,                       question,                ampersand ] };
150    key	<AE08> { [ 8,                       asterisk ] };
151    key	<AE09> { [ 9,                       parenleft ] };
152    key	<AE10> { [ 0,                       parenright ] };
153    key	<AE11> { [ minus,                   underscore ] };
154    key	<AE12> { [ equal,                   plus ] };
155    key	<BKSL> { [ backslash,               slash,                   bar ] };
156    key	<AB10> { [ period,                  comma,                   slash,                   question ] };
157    key <LSGT> { [ less,                    greater,                 bar,                     brokenbar ] };
158
159key.type[group1] = "FOUR_LEVEL_ALPHABETIC";
160
161    key	<TLDE> { [ Cyrillic_io,             Cyrillic_IO ] };
162    key	<AD01> { [ Cyrillic_shorti,         Cyrillic_SHORTI ] };
163    key	<AD02> { [ Cyrillic_en_descender,   Cyrillic_EN_descender,   Cyrillic_tse,            Cyrillic_TSE ] };
164    key	<AD03> { [ Cyrillic_u,              Cyrillic_U ] };
165    key	<AD04> { [ Cyrillic_ka,             Cyrillic_KA,             Cyrillic_ka_descender,    Cyrillic_KA_descender ] };
166    key	<AD05> { [ Cyrillic_ie,             Cyrillic_IE,             Cyrillic_io,             Cyrillic_IO ] };
167    key	<AD06> { [ Cyrillic_en,             Cyrillic_EN ] };
168    key	<AD07> { [ Cyrillic_ghe,            Cyrillic_GHE ] };
169    key	<AD08> { [ Cyrillic_sha,            Cyrillic_SHA ] };
170    key	<AD09> { [ Cyrillic_ghe_bar,        Cyrillic_GHE_bar,        Cyrillic_shcha,          Cyrillic_SHCHA ] };
171    key	<AD10> { [ Cyrillic_ze,             Cyrillic_ZE ] };
172    key	<AD11> { [ Cyrillic_ha,             Cyrillic_HA,             Cyrillic_shha,           Cyrillic_SHHA ] };
173    key	<AD12> { [ Cyrillic_u_straight_bar, Cyrillic_U_straight_bar, Cyrillic_hardsign,       Cyrillic_HARDSIGN ] };
174    key	<AC01> { [ Cyrillic_o_bar,          Cyrillic_O_bar,          Cyrillic_ef,             Cyrillic_EF ] };
175    key	<AC02> { [ Cyrillic_yeru,           Cyrillic_YERU ] };
176    key	<AC03> { [ Cyrillic_ka_descender,   Cyrillic_KA_descender,   Cyrillic_ve,             Cyrillic_VE ] };
177    key	<AC04> { [ Cyrillic_a,              Cyrillic_A ] };
178    key	<AC05> { [ Cyrillic_pe,             Cyrillic_PE ] };
179    key	<AC06> { [ Cyrillic_er,             Cyrillic_ER ] };
180    key	<AC07> { [ Cyrillic_o,              Cyrillic_O ] };
181    key	<AC08> { [ Cyrillic_el,             Cyrillic_EL ] };
182    key	<AC09> { [ Cyrillic_de,             Cyrillic_DE ] };
183    key	<AC10> { [ Cyrillic_zhe,            Cyrillic_ZHE ] };
184    key	<AC11> { [ Cyrillic_schwa,          Cyrillic_SCHWA,          Cyrillic_e,              Cyrillic_E ] };
185    key	<AB01> { [ Cyrillic_ya,             Cyrillic_YA ] };
186    key	<AB02> { [ Ukrainian_i,             Ukrainian_I,             Cyrillic_che,            Cyrillic_CHE ] };
187    key	<AB03> { [ Cyrillic_es,             Cyrillic_ES ] };
188    key	<AB04> { [ Cyrillic_em,             Cyrillic_EM ] };
189    key	<AB06> { [ Cyrillic_te,             Cyrillic_TE ] };
190    key	<AB05> { [ Cyrillic_i,              Cyrillic_I ] };
191    key	<AB07> { [ Cyrillic_u_straight,     Cyrillic_U_straight,     Cyrillic_softsign,       Cyrillic_SOFTSIGN ] };
192    key	<AB08> { [ Cyrillic_be,             Cyrillic_BE ] };
193    key	<AB09> { [ Cyrillic_yu,             Cyrillic_YU ] };
194};
195
196partial alphanumeric_keys
197xkb_symbols "olpc" {
198
199// Contact: Walter Bender <walter@laptop.org>
200
201// We moved the Cyrillic IO off of the Tilde Key as an Alt-GR character
202// and moved it onto the Backslash key, making Backslash and Bar available
203// through the Latin side of the keyboard.
204
205   include "kz(basic)"
206
207   key <TLDE> { [ parenleft,               parenright ] };
208   key <BKSL> { [ Cyrillic_io,             Cyrillic_IO ] };
209
210   include "group(olpc)"
211};
212
213partial alphanumeric_keys
214xkb_symbols "ext" {
215
216// Levels 3 and 4 represent main keyboard's numeric part of US layout,
217// parens are duplicated for consistency.
218
219    include "kz(basic)"
220    name[Group1] = "Kazakh (extended)";
221
222key.type[group1] = "FOUR_LEVEL_ALPHABETIC";
223
224    key <TLDE> { [ Cyrillic_io,             Cyrillic_IO,             grave,  asciitilde ] };
225    key <AE01> { [ quotedbl,                exclam,                  1,      exclam ] };
226    key <AE02> { [ Cyrillic_schwa,          Cyrillic_SCHWA,          2,      at ] };
227    key <AE03> { [ Ukrainian_i,             Ukrainian_I,             3,      numbersign ] };
228    key <AE04> { [ Cyrillic_en_descender,   Cyrillic_EN_descender,   4,      dollar ] };
229    key <AE05> { [ Cyrillic_ghe_bar,        Cyrillic_GHE_bar,        5,      percent ] };
230    key <AE06> { [ comma,                   semicolon,               6,      asciicircum ] };
231    key <AE07> { [ period,                  colon,                   7,      ampersand ] };
232    key <AE08> { [ Cyrillic_u_straight,     Cyrillic_U_straight,     8,      asterisk ] };
233    key <AE09> { [ Cyrillic_u_straight_bar, Cyrillic_U_straight_bar, 9,      parenleft ] };
234    key <AE10> { [ Cyrillic_ka_descender,   Cyrillic_KA_descender,   0,      parenright ] };
235    key <AE11> { [ Cyrillic_o_bar,          Cyrillic_O_bar,          minus,  underscore  ] };
236    key <AE12> { [ Cyrillic_shha,           Cyrillic_SHHA,           equal,  plus ] };
237    key <BKSL> { [ backslash,               slash,                   bar,    brokenbar ] };
238    key <AD11> { [ Cyrillic_ha,             Cyrillic_HA,             bracketleft,  braceleft ] };
239    key <AD12> { [ Cyrillic_hardsign,       Cyrillic_HARDSIGN,       bracketright, braceright ] };
240    key <AC11> { [ Cyrillic_e,              Cyrillic_E,              apostrophe ] };
241    key <AB08> { [ Cyrillic_be,             Cyrillic_BE,             less    ] };
242    key <AB09> { [ Cyrillic_yu,             Cyrillic_YU,             greater ] };
243
244   include "level3(ralt_switch)"
245};
246
247// Kazakh Latin (based on Kazakh alphabet version of 2018)
248// levels 3 and 4 are non-standard extensions
249partial alphanumeric_keys
250xkb_symbols "latin" {
251
252// Contact: Galym Kerimbekov <housegregory299@gmail.com>
253
254    name[Group1] = "Kazakh (Latin)";
255
256key.type[group1] = "FOUR_LEVEL";
257
258    key <TLDE> { [ parenleft,               parenright ] };
259    key <AE01> { [ quotedbl,                exclam ] };
260    key <AE06> { [ comma,                   semicolon ] };
261    key <AE07> { [ period,                  colon ] };
262    key <BKSL> { [ backslash,               slash ] };
263    key <AB10> { [ numerosign,              question ] };
264    key <LSGT> { [ less,                    greater,                 bar,         brokenbar ] };
265
266key.type[group1] = "ALPHABETIC";
267
268    key <AE02> { [ aacute,                  Aacute ] };
269    key <AE03> { [ iacute,                  Iacute ] };
270    key <AE04> { [ nacute,                  Nacute ] };
271    key <AE05> { [ U01F5,                   U01F4 ] }; // gG with acute
272    key <AE08> { [ uacute,                  Uacute ] };
273    key <AE09> { [ yacute,                  Yacute ] };
274    key <AE10> { [ oacute,                  Oacute ] };
275    key <AE11> { [ sacute,                  Sacute ] };
276    key <AE12> { [ cacute,                  Cacute ] };
277
278    key <AD01> { [ q,                       Q ] };
279    key <AD02> { [ w,                       W ] };
280    key <AD03> { [ e,                       E ] };
281    key <AD04> { [ r,                       R ] };
282    key <AD05> { [ t,                       T ] };
283    key <AD06> { [ y,                       Y ] };
284    key <AD07> { [ u,                       U ] };
285    key <AD08> { [ i,                       I ] };
286    key <AD09> { [ o,                       O ] };
287    key <AD10> { [ p,                       P ] };
288    key <AC01> { [ a,                       A ] };
289    key <AC02> { [ s,                       S ] };
290    key <AC03> { [ d,                       D ] };
291    key <AC04> { [ f,                       F ] };
292    key <AC05> { [ g,                       G ] };
293    key <AC06> { [ h,                       H ] };
294    key <AC07> { [ j,                       J ] };
295    key <AC08> { [ k,                       K ] };
296    key <AC09> { [ l,                       L ] };
297    key <AB01> { [ z,                       Z ] };
298    key <AB02> { [ x,                       X ] };
299    key <AB03> { [ c,                       C ] };
300    key <AB04> { [ v,                       M ] };
301    key <AB05> { [ b,                       B ] };
302    key <AB06> { [ n,                       N ] };
303    key <AB07> { [ m,                       M ] };
304};
305