├── layout.png
├── layout-special.png
├── evdev.xml
├── LICENSE
├── README.md
├── universal_en.xkb
└── universal_ru.xkb
/layout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ai/universal-layout/HEAD/layout.png
--------------------------------------------------------------------------------
/layout-special.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ai/universal-layout/HEAD/layout-special.png
--------------------------------------------------------------------------------
/evdev.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | universal_ru
8 | ru
9 | Russian Universal
10 |
11 | rus
12 |
13 |
14 |
15 |
16 |
17 | universal_en
18 | en
19 | English/Spanish/Catalan Universal
20 |
21 | eng
22 | spa
23 | cat
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright 2024 Andrey Sitnik
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Универсальная раскладка Ситника
2 |
3 | * **Немодальное переключение языка.** CapsLock — всегда
4 | на английский. Shift+CapsLock — всегда на русский.
5 | Светодиод CapsLock указывает на текущий язык.
6 | * **Общие знаки препинания.** `,` `.` `?` совпадают во всех раскладках.
7 | * **Английская раскладка без изменений.** В русской раскладке сдвинуты только 2
8 | буквы — Б и Ю.
9 | * Можно быстро вводить **типографические символы** — «правильные кавычки»,
10 | длинное тире и много других символы (15°C, м², ⅓, ≠, →, неразрывный пробел).
11 | * Можно вводить **испанский** и **каталонский** текст на английской
12 | ANSI-клавиатуре. Включая ¿, ¡, l·l.
13 |
14 |
16 |
17 |
19 |
20 |
21 | ## Мотивация
22 |
23 | Альтернативные раскладки — не для всех. Если вы не находите себя в списке ниже,
24 | то она вам не нужна.
25 |
26 | 1. Вы часто замечаете, что переключаетесь на английский,
27 | чтобы ввести пунктуацию.
28 | 2. Вы используете только свои клавиатуры для ввода русского текста —
29 | например, живёте заграницей.
30 | 3. Не хочется менять английскую раскладку — у вас есть клавиатура с английской
31 | гравировкой или вы планируете использовать чужие клавиатуры.
32 | 4. Вам иногда нужно вводить испанский или каталонский текст.
33 |
34 |
35 | ## Установка
36 |
37 | Установка не меняет глобальные файлы. Всё ставиться в `~/.config/` в директории
38 | пользователя.
39 |
40 | ```sh
41 | mkdir -p ~/.config/xkb/symbols/ ~/.config/xkb/rules/
42 | curl -o ~/.config/xkb/symbols/universal_en https://raw.githubusercontent.com/ai/universal-layout/main/universal_en.xkb
43 | curl -o ~/.config/xkb/symbols/universal_ru https://raw.githubusercontent.com/ai/universal-layout/main/universal_ru.xkb
44 | curl -o ~/.config/xkb/rules/evdev.xml https://raw.githubusercontent.com/ai/universal-layout/main/evdev.xml
45 | dconf write /org/gnome/desktop/input-sources/xkb-options "['grp_led:caps', 'lv3:ralt_switch', 'grp:shift_caps_switch']"
46 | ```
47 |
48 | Перезапустите систему.
49 |
50 | Выберите `Russian Universal` и `English/Spanish/Catalan Universal`
51 | в настройках клавиатуры.
52 |
53 |
54 | ## Альтернативы
55 |
56 | Проект вдохновлялся проектами:
57 |
58 | * [Раскладка Никиты Широкова](https://github.com/braindefender/universal-layout)
59 | * [Раскладка Никиты Прокопова](https://github.com/tonsky/Universal-Layout)
60 | * Встроенная в Линукс раскладка `misc:typo`, копия
61 | [Раскладки Бирмана](https://ilyabirman.ru/typography-layout/)
62 |
--------------------------------------------------------------------------------
/universal_en.xkb:
--------------------------------------------------------------------------------
1 | default partial alphanumeric_keys
2 | xkb_symbols "base" {
3 |
4 | name[Group1]= "English/Spanish/Catalan Universal";
5 |
6 | // 1st keyboard row
7 | key { [ grave, asciitilde, approxeq, dead_grave ] };
8 | key { [ 1, exclam, exclamdown, dead_acute ] };
9 | key { [ 2, at, twosuperior, onehalf ] };
10 | key { [ 3, numbersign, threesuperior, onethird ] };
11 | key { [ 4, dollar, EuroSign, onequarter ] };
12 | key { [ 5, percent, EuroSign, NoSymbol ] };
13 | key { [ 6, asciicircum, uparrow, NoSymbol ] };
14 | key { [ 7, ampersand, ampersand, NoSymbol ] };
15 | key { [ 8, asterisk, infinity, NoSymbol ] };
16 | key { [ 9, parenleft, leftarrow, NoSymbol ] };
17 | key { [ 0, parenright, rightarrow, NoSymbol ] };
18 | key { [ minus, underscore, emdash, endash ] };
19 | key { [ equal, plus, equal, plus ] };
20 |
21 | // 2nd keyboard row
22 | key { [ q, Q, NoSymbol, NoSymbol ] };
23 | key { [ w, W, NoSymbol, NoSymbol ] };
24 | key { [ e, E, eacute, Eacute ] };
25 | key { [ r, R, registered, NoSymbol ] };
26 | key { [ t, T, trademark, NoSymbol ] };
27 | key { [ y, Y, udiaeresis, Udiaeresis ] };
28 | key { [ u, U, uacute, Uacute ] };
29 | key { [ i, I, iacute, Iacute ] };
30 | key { [ o, O, oacute, Oacute ] };
31 | key { [ p, P, ellipsis, plusminus ] };
32 | key { [ bracketleft, braceleft, bracketleft, braceleft ] };
33 | key { [ bracketright, braceright, bracketright, braceright ] };
34 | key { [ backslash, bar, NoSymbol, NoSymbol ] };
35 |
36 | // 3rd keyboard row
37 | key { [ a, A, aacute, Aacute ] };
38 | key { [ s, S, NoSymbol, NoSymbol ] };
39 | key { [ d, D, degree, division ] };
40 | key { [ f, F, NoSymbol, ordfeminine ] };
41 | key { [ g, G, NoSymbol, NoSymbol ] };
42 | key { [ h, H, U20BD, NoSymbol ] };
43 | key { [ j, J, doublelowquotemark, singlelowquotemark ] };
44 | key { [ k, K, leftdoublequotemark, leftsinglequotemark ] };
45 | key { [ l, L, rightdoublequotemark, rightsinglequotemark ] };
46 | key { [ semicolon, colon, leftsinglequotemark, minutes ] };
47 | key { [ apostrophe, quotedbl, rightsinglequotemark, seconds ] };
48 | key { [ Return, Return, U21B5, U23CE ] };
49 |
50 | // 4th keyboard row
51 | key { [ z, Z, NoSymbol, NoSymbol ] };
52 | key { [ x, X, multiply, periodcentered ] };
53 | key { [ c, C, ccedilla, Ccedilla ] };
54 | key { [ v, V, downarrow, NoSymbol ] };
55 | key { [ b, B, NoSymbol, NoSymbol ] };
56 | key { [ n, N, U00F1, U00D1 ] };
57 | key { [ m, M, U2212, masculine ] };
58 | key { [ comma, less, guillemotleft, lessthanequal ] };
59 | key { [ period, greater, guillemotright, greaterthanequal ] };
60 | key { [ slash, question, questiondown, notequal ] };
61 |
62 | // 5th keyboard row
63 | key { [ space, space, nobreakspace, U202F ] };
64 | };
65 |
66 | // Other symbols
67 | // U2030 PER MILLE SIGN
68 | // U20BD RUBLE SIGN
69 | // U2212 MINUS SIGN
70 | // U202F NARROW NO-BREAK SPACE
71 | // U0308 COMBINING DIAERESIS
72 | // U21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
73 | // U23CE RETURN SYMBOL
74 | // U00F1 LATIN SMALL LETTER N WITH TILDE
75 | // U00D1 LATIN CAPITAL LETTER N WITH TILDE
76 |
77 | // Symbol names:
78 | // https://cgit.freedesktop.org/xorg/proto/x11proto/tree/keysymdef.h
79 |
--------------------------------------------------------------------------------
/universal_ru.xkb:
--------------------------------------------------------------------------------
1 | default partial alphanumeric_keys
2 | xkb_symbols "base" {
3 |
4 | name[Group1]= "Russian Universal";
5 |
6 | // 1st keyboard row
7 | key { [ Cyrillic_io, Cyrillic_IO, approxeq, dead_grave ] };
8 | key { [ 1, exclam, exclamdown, dead_acute ] };
9 | key { [ 2, at, twosuperior, onehalf ] };
10 | key { [ 3, numerosign, threesuperior, onethird ] };
11 | key { [ 4, dollar, EuroSign, onequarter ] };
12 | key { [ 5, percent, EuroSign, NoSymbol ] };
13 | key { [ 6, colon, uparrow, NoSymbol ] };
14 | key { [ 7, ampersand, ampersand, NoSymbol ] };
15 | key { [ 8, asterisk, infinity, NoSymbol ] };
16 | key { [ 9, parenleft, leftarrow, NoSymbol ] };
17 | key { [ 0, parenright, rightarrow, NoSymbol ] };
18 | key { [ minus, underscore, emdash, endash ] };
19 | key { [ Cyrillic_yu, Cyrillic_YU, equal, plus ] };
20 |
21 | // 2nd keyboard row
22 | key { [ Cyrillic_shorti, Cyrillic_SHORTI, NoSymbol, NoSymbol ] };
23 | key { [ Cyrillic_tse, Cyrillic_TSE, NoSymbol, NoSymbol ] };
24 | key { [ Cyrillic_u, Cyrillic_U, eacute, Eacute ] };
25 | key { [ Cyrillic_ka, Cyrillic_KA, registered, NoSymbol ] };
26 | key { [ Cyrillic_ie, Cyrillic_IE, trademark, NoSymbol ] };
27 | key { [ Cyrillic_en, Cyrillic_EN, udiaeresis, Udiaeresis ] };
28 | key { [ Cyrillic_ghe, Cyrillic_GHE, U0308, NoSymbol ] };
29 | key { [ Cyrillic_sha, Cyrillic_SHA, iacute, Iacute ] };
30 | key { [ Cyrillic_shcha, Cyrillic_SHCHA, oacute, Oacute ] };
31 | key { [ Cyrillic_ze, Cyrillic_ZE, ellipsis, plusminus ] };
32 | key { [ Cyrillic_ha, Cyrillic_HA, bracketleft, braceleft ] };
33 | key { [ Cyrillic_hardsign, Cyrillic_HARDSIGN, bracketright, braceright ] };
34 | key { [ Cyrillic_be, Cyrillic_BE, NoSymbol, NoSymbol ] };
35 |
36 | // 3rd keyboard row
37 | key { [ Cyrillic_ef, Cyrillic_EF, aacute, Aacute ] };
38 | key { [ Cyrillic_yeru, Cyrillic_YERU, NoSymbol, NoSymbol ] };
39 | key { [ Cyrillic_ve, Cyrillic_VE, degree, division ] };
40 | key { [ Cyrillic_a, Cyrillic_A, NoSymbol, ordfeminine ] };
41 | key { [ Cyrillic_pe, Cyrillic_PE, NoSymbol, NoSymbol ] };
42 | key { [ Cyrillic_er, Cyrillic_ER, U20BD, NoSymbol ] };
43 | key { [ Cyrillic_o, Cyrillic_O, doublelowquotemark, singlelowquotemark ] };
44 | key { [ Cyrillic_el, Cyrillic_EL, leftdoublequotemark, leftsinglequotemark ] };
45 | key { [ Cyrillic_de, Cyrillic_DE, rightdoublequotemark, rightsinglequotemark ] };
46 | key { [ Cyrillic_zhe, Cyrillic_ZHE, leftsinglequotemark, minutes ] };
47 | key { [ Cyrillic_e, Cyrillic_E, rightsinglequotemark, seconds ] };
48 | key { [ Return, Return, U21B5, U23CE ] };
49 |
50 | // 4th keyboard row
51 | key { [ Cyrillic_ya, Cyrillic_YA, NoSymbol, NoSymbol ] };
52 | key { [ Cyrillic_che, Cyrillic_CHE, multiply, periodcentered ] };
53 | key { [ Cyrillic_es, Cyrillic_ES, ccedilla, Ccedilla ] };
54 | key { [ Cyrillic_em, Cyrillic_EM, downarrow, NoSymbol ] };
55 | key { [ Cyrillic_i, Cyrillic_I, NoSymbol, NoSymbol ] };
56 | key { [ Cyrillic_te, Cyrillic_TE, U00F1, U00D1 ] };
57 | key { [ Cyrillic_softsign, Cyrillic_SOFTSIGN, U2212, masculine ] };
58 | key { [ comma, less, guillemotleft, lessthanequal ] };
59 | key { [ period, greater, guillemotright, greaterthanequal ] };
60 | key { [ slash, question, questiondown, notequal ] };
61 |
62 | // 5th keyboard row
63 | key { [ space, space, nobreakspace, U202F ] };
64 | };
65 |
66 | // Other symbols
67 | // U2030 PER MILLE SIGN
68 | // U20BD RUBLE SIGN
69 | // U2212 MINUS SIGN
70 | // U202F NARROW NO-BREAK SPACE
71 | // U0308 COMBINING DIAERESIS
72 | // U21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS
73 | // U23CE RETURN SYMBOL
74 | // U00F1 LATIN SMALL LETTER N WITH TILDE
75 | // U00D1 LATIN CAPITAL LETTER N WITH TILDE
76 |
77 | // Symbol names:
78 | // https://cgit.freedesktop.org/xorg/proto/x11proto/tree/keysymdef.h
79 |
--------------------------------------------------------------------------------