├── 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 | --------------------------------------------------------------------------------