Skip to content

Instantly share code, notes, and snippets.

@rindeal
Last active May 13, 2024 01:28
Show Gist options
  • Save rindeal/1891455c258b22f3e31e1da8f9821c28 to your computer and use it in GitHub Desktop.
Save rindeal/1891455c258b22f3e31e1da8f9821c28 to your computer and use it in GitHub Desktop.
POSIX shell functions and CLI utility to print/list all XKB layouts and their variants including "exotic" ones. Much improved replacement for "localectl"'s "list-x11-keymap-layouts" and "list-x11-keymap-variants" commands.

XKB Layouts and Variants List

Welcome to the home of the ultimate tool for listing all XKB layouts and their variants, including those rare and "exotic" ones. This POSIX shell script and CLI utility is a much-improved alternative to "localectl"'s "list-x11-keymap-layouts" and "list-x11-keymap-variants" commands.

Versatile and Easy to Use

This script is designed with versatility in mind. It can be used in two ways:

  1. As a standalone script which acts as a CLI utility.
  2. As a module with functions that can be sourced and used inside some other script.

Download it!

To download the script using wget and make it executable, you can use the following commands:

wget https://gist.github.com/rindeal/1891455c258b22f3e31e1da8f9821c28/raw/19eb49eaf3d4c0e1fb36c850839c2087b9397de2/xkb-list-layouts-variants.sh
chmod +x xkb-list-layouts-variants.sh

Use It As a CLI Utility

You can use the script as a standalone CLI utility. Here's an example of how to list all layouts with descriptions:

./xkb-list-layouts-variants.sh

And here's how to list all variants including "exotic" ones:

./xkb-list-layouts-variants.sh LAYOUT_CODE
./xkb-list-layouts-variants.sh us
./xkb-list-layouts-variants.sh ru

Use It As a Sourced Module

You can also source the script in another script and use its functions. Here's an example:

source xkb-list-layouts-variants.sh
xkb_list_layouts
xkb_list_variants ru

In this example, xkb_list_layouts and xkb_list_variants are functions provided by the script that list layouts and variants, respectively.

#!/bin/sh
# SPDX-FileCopyrightText: ANNO DOMINI 2024 Jan Chren (rindeal) <dev.rindeal(a)gmail.com>
# SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only
# NOTE: Developed for xkbcli 1.5.0, might not work with later versions
#
# Upstream source: https://gist.github.com/rindeal/1891455c258b22f3e31e1da8f9821c28#file-xkb-list-layouts-variants-sh
# Download fresh version:
# wget https://gist.github.com/rindeal/1891455c258b22f3e31e1da8f9821c28/raw/e813564e61476f316ecd3fa0ee7ec763b08c7de8/xkb-list-layouts-variants.sh
# chmod +x xkb-list-layouts-variants.sh
#
# xkb_list_layouts()
#
# This function lists all the keyboard layouts available in the system. It uses
# the `xkbcli list` command, which lists available XKB models, layouts, variants
# and options. The output of this command is then piped to an AWK script.
#
# The AWK script works as follows:
# - It looks for lines containing 'layout:'. When it finds such a line, it
# extracts the layout name.
# - If the layout has already been processed (i.e., it's in the 'layouts' array),
# it skips to the next line.
# - Otherwise, it stores the layout name in the 'layouts' array and also in the
# 'layout' variable.
# - When it finds a line containing 'description:' and the 'layout' variable is
# not empty, it extracts the description.
# - It then prints the layout name and its description in a formatted string.
# - After printing, it empties the 'layout' variable to prepare for the next
# layout.
#
# Finally, the output of the AWK script is sorted and duplicate lines are removed
# with `sort -u`.
#
# Usage:
# xkb_list_layouts
#
# Output:
# Prints a list of keyboard layouts and their descriptions, one per line. Each
# line is in the format: "<layout> | <description>"
xkb_list_layouts()
{(
# Save AWK script in fd #3
exec 3<<'EOF'
layout && /description:/ {
match($0, /: *(.*)/, matches)
description = matches[1]
printf "%-6s | %s\n", layout, description
layout = ""
}
/layout:/ {
match($0, /: *'([^']+)'/, matches)
l = matches[1]
if ( layouts[l] )
next
layout = layouts[l] = l
}
EOF
xkbcli list --load-exotic | awk -f /dev/fd/3 | sort -u
)}
# xkb_list_variants(layout)
#
# This function lists all the variants of a given keyboard layout. It requires
# one argument, the name of the layout. If no argument is provided, it prints a
# usage message and returns 1.
#
# It uses the `xkbcli list --load-exotic` command to fetch all the exotic
# layouts. The output of this command is then piped to an AWK script.
#
# The AWK script works as follows:
# - In the BEGIN block, it constructs a pattern for the layout name and
# initializes the 'matched' flag to 0.
# - When it finds a line that matches the layout pattern, it sets the 'matched'
# flag to 1, and clears the 'variant' and 'description' variables.
# - When the 'matched' flag is set and it finds a line containing 'variant:', it
# extracts the variant name.
# - When the 'matched' flag is set and it finds a line containing 'description:',
# it extracts the description.
# - When the 'matched' flag is set and it finds a line starting with '-', it
# clears the 'matched' flag. If the 'variant' variable is not empty, it prints
# the variant name and its description in a formatted string.
#
# Finally, the output of the AWK script is sorted and duplicate lines are removed
# with `sort -u`.
#
# Usage:
# xkb_list_variants LAYOUT
#
# Output:
# Prints a list of variants for the given layout and their descriptions, one
# per line. Each line is in the format: "<variant> | <description>"
xkb_list_variants()
{(
test -n "$1" || { >&2 echo "Usage: xkb-list-variants LAYOUT"; return 1; }
# Save AWK script in fd #3
exec 3<<'EOF'
BEGIN {
layout_pattern = sprintf("^ *- *layout: *'%s'", layout)
matched=0
}
matched && /variant:/ {
match($0, /: *'([^']+)'/, matches)
variant = matches[1]
}
matched && /description:/ {
match($0, /: *(.+)/, matches)
description = matches[1]
}
matched && /^ *-/ {
matched = 0
if ( variant )
printf "%-24s | %s\n", variant, description
}
$0 ~ layout_pattern {
matched = 1
variant = ""
description = ""
next
}
EOF
xkbcli list --load-exotic | awk -v layout="$1" -f /dev/fd/3 | sort -u
)}
_xkb_list_layouts_variants__main()
{
if ! command -v xkbcli >/dev/null 2>&1
then
2>&1 echo "Error: Command not found. command='xkbcli'"
return 1
fi
# if incorrect arg count given
# or first arg starts with "-" (ie. some option, possibly "-h")
# print usage
if test $# -gt 1 || test "$(printf "%s" "$1" | cut -c 1)" = "-"
then
2>&1 echo "Usage:"
2>&1 echo " xkb-list-layouts-variants [OPTIONS] [LAYOUT]"
2>&1 echo
2>&1 echo "Options:"
2>&1 echo " -h, --help Show this help message and exit"
2>&1 echo
2>&1 echo "Arguments:"
2>&1 echo " LAYOUT Specify the layout for which to print all variants."
2>&1 echo " If no layout is specified, all layouts will be printed."
2>&1 echo
2>&1 echo "Description:"
2>&1 echo " This utility prints all keyboard layouts when run without arguments."
2>&1 echo " If a layout is specified as an argument, it prints all variants of"
2>&1 echo " that layout, including 'exotic' variants."
2>&1 echo
return 0
elif test $# -eq 0
then
xkb_list_layouts
return $?
elif test $# -eq 1
then
xkb_list_variants "$1"
return $?
else
2>&1 echo "unreachable"
exit 1
fi
}
# https://stackoverflow.com/a/28776166
_xkb_list_layouts_variants__is_sourced() {
if [ -n "$ZSH_VERSION" ] ; then
case $ZSH_EVAL_CONTEXT in *:file:*) return 0;; esac
else # Add additional POSIX-compatible shell names here, if needed.
case ${0##*/} in ash|-ash|dash|-dash|bash|-bash|ksh|-ksh|sh|-sh) return 0;; esac
fi
return 1 # NOT sourced.
}
if ! _xkb_list_layouts_variants__is_sourced
then
_xkb_list_layouts_variants__main "$@"
exit $?
fi
------------------------------------------------------------------------
Variants for layout: af - Dari
fa-olpc | Dari (Afghanistan, OLPC)
ps-olpc | Pashto (Afghanistan, OLPC)
ps | Pashto
uz-olpc | Uzbek (Afghanistan, OLPC)
uz | Uzbek (Afghanistan)
------------------------------------------------------------------------
Variants for layout: al - Albanian
plisi | Albanian (Plisi)
veqilharxhi | Albanian (Veqilharxhi)
------------------------------------------------------------------------
Variants for layout: am - Armenian
eastern-alt | Armenian (alt. eastern)
eastern | Armenian (eastern)
olpc-phonetic | Armenian (OLPC, phonetic)
phonetic-alt | Armenian (alt. phonetic)
phonetic | Armenian (phonetic)
western | Armenian (western)
------------------------------------------------------------------------
Variants for layout: apl - APL
apl2 | APL symbols (IBM APL2)
aplplusII | APL symbols (Manugistics APL*PLUS II)
aplx | APL symbols (APLX unified)
dyalog | APL symbols (Dyalog APL)
sax | APL symbols (SAX, Sharp APL for Unix)
unified | APL symbols (unified)
------------------------------------------------------------------------
Variants for layout: ara - Arabic
azerty | Arabic (AZERTY)
azerty_digits | Arabic (AZERTY, Eastern Arabic numerals)
basic_ext | Arabic (Arabic numerals, extensions in the 4th level)
basic_ext_digits | Arabic (Eastern Arabic numerals, extensions in the 4th level)
buckwalter | Arabic (Buckwalter)
digits | Arabic (Eastern Arabic numerals)
ergoarabic | Arabic (ErgoArabic)
mac | Arabic (Macintosh)
olpc | Arabic (OLPC)
qwerty | Arabic (QWERTY)
qwerty_digits | Arabic (QWERTY, Eastern Arabic numerals)
sun_type6 | Arabic (Sun Type 6/7)
uga | Ugaritic instead of Arabic
------------------------------------------------------------------------
Variants for layout: at - German (Austria)
mac | German (Austria, Macintosh)
nodeadkeys | German (Austria, no dead keys)
------------------------------------------------------------------------
Variants for layout: au - English (Australian)
------------------------------------------------------------------------
Variants for layout: az - Azerbaijani
cyrillic | Azerbaijani (Cyrillic)
------------------------------------------------------------------------
Variants for layout: ba - Bosnian
alternatequotes | Bosnian (with guillemets)
unicode | Bosnian (with Bosnian digraphs)
unicodeus | Bosnian (US, with Bosnian digraphs)
us | Bosnian (US)
------------------------------------------------------------------------
Variants for layout: bd - Bangla
probhat | Bangla (Probhat)
------------------------------------------------------------------------
Variants for layout: be - Belgian
iso-alternate | Belgian (ISO, alt.)
nodeadkeys | Belgian (no dead keys)
oss | Belgian (alt.)
oss_latin9 | Belgian (Latin-9 only, alt.)
sun_type6 | Belgian (Sun Type 6/7)
wang | Belgian (Wang 724 AZERTY)
------------------------------------------------------------------------
Variants for layout: bg - Bulgarian
bas_phonetic | Bulgarian (new phonetic)
bekl | Bulgarian (enhanced)
phonetic | Bulgarian (traditional phonetic)
------------------------------------------------------------------------
Variants for layout: bqn - BQN
------------------------------------------------------------------------
Variants for layout: brai - Braille
left_hand | Braille (left-handed)
left_hand_invert | Braille (left-handed inverted thumb)
right_hand | Braille (right-handed)
right_hand_invert | Braille (right-handed inverted thumb)
------------------------------------------------------------------------
Variants for layout: br - Portuguese (Brazil)
dvorak | Portuguese (Brazil, Dvorak)
nativo-epo | Esperanto (Brazil, Nativo)
nativo | Portuguese (Brazil, Nativo)
nativo-us | Portuguese (Brazil, Nativo for US keyboards)
nodeadkeys | Portuguese (Brazil, no dead keys)
sun_type6 | Portuguese (Brazil, Sun Type 6/7)
thinkpad | Portuguese (Brazil, IBM/Lenovo ThinkPad)
------------------------------------------------------------------------
Variants for layout: bt - Dzongkha
------------------------------------------------------------------------
Variants for layout: bw - Tswana
------------------------------------------------------------------------
Variants for layout: by - Belarusian
intl | Belarusian (intl.)
latin | Belarusian (Latin)
legacy | Belarusian (legacy)
phonetic | Belarusian (phonetic)
ru | Russian (Belarus)
------------------------------------------------------------------------
Variants for layout: ca - French (Canada)
eng | English (Canada)
fr-dvorak | French (Canada, Dvorak)
fr-legacy | French (Canada, legacy)
ike | Inuktitut
kut | Kutenai
multix | Canadian (CSA)
shs | Secwepemctsin
sun_type6 | Multilingual (Canada, Sun Type 6/7)
------------------------------------------------------------------------
Variants for layout: cd - French (Democratic Republic of the Congo)
------------------------------------------------------------------------
Variants for layout: ch - German (Switzerland)
de_mac | German (Switzerland, Macintosh)
de_nodeadkeys | German (Switzerland, no dead keys)
fr | French (Switzerland)
fr_mac | French (Switzerland, Macintosh)
fr_nodeadkeys | French (Switzerland, no dead keys)
legacy | German (Switzerland, legacy)
sun_type6_de | German (Switzerland, Sun Type 6/7)
sun_type6_fr | French (Switzerland, Sun Type 6/7)
------------------------------------------------------------------------
Variants for layout: cm - English (Cameroon)
azerty | Cameroon (AZERTY, intl.)
dvorak | Cameroon (Dvorak, intl.)
french | French (Cameroon)
mmuock | Mmuock
qwerty | Cameroon Multilingual (QWERTY, intl.)
------------------------------------------------------------------------
Variants for layout: cn - Chinese
altgr-pinyin | Hanyu Pinyin Letters (with AltGr dead keys)
mon_manchu_galik | Mongolian (Manchu Galik)
mon_todo_galik | Mongolian (Todo Galik)
mon_trad_galik | Mongolian (Galik)
mon_trad_manchu | Mongolian (Manchu)
mon_trad | Mongolian (Bichig)
mon_trad_todo | Mongolian (Todo)
mon_trad_xibe | Mongolian (Xibe)
tib_asciinum | Tibetan (with ASCII numerals)
tib | Tibetan
ug | Uyghur
------------------------------------------------------------------------
Variants for layout: custom - A user-defined custom Layout
------------------------------------------------------------------------
Variants for layout: cz - Czech
bksl | Czech (with <\|> key)
coder | Czech (coder)
colemak-ucw | Czech (US, Colemak, UCW support)
dvorak-ucw | Czech (US, Dvorak, UCW support)
prog | Czech (programming)
prog_typo | Czech (programming, typographic)
qwerty_bksl | Czech (QWERTY, extended backslash)
qwerty | Czech (QWERTY)
qwerty-mac | Czech (QWERTY, Macintosh)
rus | Russian (Czech, phonetic)
sun_type6 | Czech (Sun Type 6/7)
typo | Czech (typographic)
ucw | Czech (UCW, only accented letters)
------------------------------------------------------------------------
Variants for layout: de - German
adnw | German (Aus der Neo-Welt)
bone_eszett_home | German (Bone, eszett in the home row)
bone | German (Bone)
deadacute | German (dead acute)
deadgraveacute | German (dead grave acute)
deadtilde | German (dead tilde)
dsb | Lower Sorbian
dsb_qwertz | Lower Sorbian (QWERTZ)
dvorak | German (Dvorak)
e1 | German (E1)
e2 | German (E2)
hu | German (with Hungarian letters, no dead keys)
koy | German (KOY)
lld | German (Ladin)
mac | German (Macintosh)
mac_nodeadkeys | German (Macintosh, no dead keys)
neo | German (Neo 2)
neo_qwerty | German (Neo, QWERTY)
neo_qwertz | German (Neo, QWERTZ)
nodeadkeys | German (no dead keys)
pl | Polish (Germany, no dead keys)
qwerty | German (QWERTY)
ro_nodeadkeys | Romanian (Germany, no dead keys)
ro | Romanian (Germany)
ru-recom | Russian (Germany, recommended)
ru | Russian (Germany, phonetic)
ru-translit | Russian (Germany, transliteration)
sun_type6 | German (Sun Type 6/7)
T3 | German (T3)
tr | Turkish (Germany)
us | German (US)
------------------------------------------------------------------------
Variants for layout: dk - Danish
dvorak | Danish (Dvorak)
mac | Danish (Macintosh)
mac_nodeadkeys | Danish (Macintosh, no dead keys)
nodeadkeys | Danish (no dead keys)
sun_type6 | Danish (Sun Type 6/7)
winkeys | Danish (Windows)
------------------------------------------------------------------------
Variants for layout: dz - Berber (Algeria, Latin)
ar | Arabic (Algeria)
azerty-deadkeys | Kabyle (AZERTY, with dead keys)
ber | Berber (Algeria, Tifinagh)
qwerty-gb-deadkeys | Kabyle (QWERTY, UK, with dead keys)
qwerty-us-deadkeys | Kabyle (QWERTY, US, with dead keys)
------------------------------------------------------------------------
Variants for layout: ee - Estonian
dvorak | Estonian (Dvorak)
nodeadkeys | Estonian (no dead keys)
sun_type6 | Estonian (Sun Type 6/7)
us | Estonian (US)
------------------------------------------------------------------------
Variants for layout: eg - Coptic
------------------------------------------------------------------------
Variants for layout: epo - Esperanto
legacy | Esperanto (legacy)
------------------------------------------------------------------------
Variants for layout: es - Spanish
ast | Asturian (Spain, with bottom-dot H and L)
cat | Catalan (Spain, with middle-dot L)
deadtilde | Spanish (dead tilde)
dvorak | Spanish (Dvorak)
mac | Spanish (Macintosh)
nodeadkeys | Spanish (no dead keys)
sun_type6 | Spanish (Sun Type 6/7)
winkeys | Spanish (Windows)
------------------------------------------------------------------------
Variants for layout: et - Amharic
------------------------------------------------------------------------
Variants for layout: eu - EurKEY (US)
------------------------------------------------------------------------
Variants for layout: fi - Finnish
classic | Finnish (classic)
das | Finnish (DAS)
fidvorak | Finnish (Dvorak)
mac | Finnish (Macintosh)
nodeadkeys | Finnish (classic, no dead keys)
smi | Northern Saami (Finland)
sun_type6 | Finnish (Sun Type 6/7)
winkeys | Finnish (Windows)
------------------------------------------------------------------------
Variants for layout: fo - Faroese
nodeadkeys | Faroese (no dead keys)
------------------------------------------------------------------------
Variants for layout: fr - French
afnor | French (AZERTY, AFNOR)
azerty | French (AZERTY)
bepo_afnor | French (BEPO, AFNOR)
bepo | French (BEPO)
bepo_latin9 | French (BEPO, Latin-9 only)
bre | Breton (France)
dvorak | French (Dvorak)
geo | Georgian (France, AZERTY Tskapo)
latin9 | French (legacy, alt.)
latin9_nodeadkeys | French (legacy, alt., no dead keys)
mac | French (Macintosh)
nodeadkeys | French (no dead keys)
oci | Occitan
oss | French (alt.)
oss_latin9 | French (alt., Latin-9 only)
oss_nodeadkeys | French (alt., no dead keys)
sun_type6 | French (Sun Type 6/7)
us-alt | French (US with dead keys, alt.)
us-azerty | French (US, AZERTY)
us | French (US)
------------------------------------------------------------------------
Variants for layout: gb - English (UK)
colemak_dh | English (UK, Colemak-DH)
colemak | English (UK, Colemak)
dvorak | English (UK, Dvorak)
dvorakukp | English (UK, Dvorak, with UK punctuation)
extd | English (UK, extended, Windows)
gla | Scottish Gaelic
intl | English (UK, intl., with dead keys)
mac | English (UK, Macintosh)
mac_intl | English (UK, Macintosh, intl.)
pl | Polish (British keyboard)
sun_type6 | English (UK, Sun Type 6/7)
------------------------------------------------------------------------
Variants for layout: ge - Georgian
ergonomic | Georgian (ergonomic)
mess | Georgian (MESS)
os | Ossetian (Georgia)
ru | Russian (Georgia)
------------------------------------------------------------------------
Variants for layout: gh - English (Ghana)
akan | Akan
avn | Avatime
ewe | Ewe
fula | Fula
ga | Ga
generic | English (Ghana, multilingual)
gillbt | English (Ghana, GILLBT)
hausa | Hausa (Ghana)
------------------------------------------------------------------------
Variants for layout: gn - N'Ko (AZERTY)
------------------------------------------------------------------------
Variants for layout: gr - Greek
colemak | Greek (Colemak)
extended | Greek (extended)
nodeadkeys | Greek (no dead keys)
polytonic | Greek (polytonic)
simple | Greek (simple)
sun_type6 | Greek (Sun Type 6/7)
------------------------------------------------------------------------
Variants for layout: hr - Croatian
alternatequotes | Croatian (with guillemets)
unicode | Croatian (with Croatian digraphs)
unicodeus | Croatian (US, with Croatian digraphs)
us | Croatian (US)
------------------------------------------------------------------------
Variants for layout: hu - Hungarian
101_qwerty_comma_dead | Hungarian (QWERTY, 101-key, comma, dead keys)
101_qwerty_comma_nodead | Hungarian (QWERTY, 101-key, comma, no dead keys)
101_qwerty_dot_dead | Hungarian (QWERTY, 101-key, dot, dead keys)
101_qwerty_dot_nodead | Hungarian (QWERTY, 101-key, dot, no dead keys)
101_qwertz_comma_dead | Hungarian (QWERTZ, 101-key, comma, dead keys)
101_qwertz_comma_nodead | Hungarian (QWERTZ, 101-key, comma, no dead keys)
101_qwertz_dot_dead | Hungarian (QWERTZ, 101-key, dot, dead keys)
101_qwertz_dot_nodead | Hungarian (QWERTZ, 101-key, dot, no dead keys)
102_qwerty_comma_dead | Hungarian (QWERTY, 102-key, comma, dead keys)
102_qwerty_comma_nodead | Hungarian (QWERTY, 102-key, comma, no dead keys)
102_qwerty_dot_dead | Hungarian (QWERTY, 102-key, dot, dead keys)
102_qwerty_dot_nodead | Hungarian (QWERTY, 102-key, dot, no dead keys)
102_qwertz_comma_dead | Hungarian (QWERTZ, 102-key, comma, dead keys)
102_qwertz_comma_nodead | Hungarian (QWERTZ, 102-key, comma, no dead keys)
102_qwertz_dot_dead | Hungarian (QWERTZ, 102-key, dot, dead keys)
102_qwertz_dot_nodead | Hungarian (QWERTZ, 102-key, dot, no dead keys)
nodeadkeys | Hungarian (no dead keys)
oldhunlig | Old Hungarian (for ligatures)
oldhun | Old Hungarian
qwerty | Hungarian (QWERTY)
standard | Hungarian (standard)
------------------------------------------------------------------------
Variants for layout: id - Indonesian (Latin)
javanese | Javanese
melayu-phonetic | Indonesian (Arab Melayu, phonetic)
melayu-phoneticx | Indonesian (Arab Melayu, extended phonetic)
pegon-phonetic | Indonesian (Arab Pegon, phonetic)
------------------------------------------------------------------------
Variants for layout: ie - Irish
CloGaelach | CloGaelach
ogam_is434 | Ogham (IS434)
ogam | Ogham
UnicodeExpert | Irish (UnicodeExpert)
------------------------------------------------------------------------
Variants for layout: il - Hebrew
biblical | Hebrew (Biblical, Tiro)
biblicalSIL | Hebrew (Biblical, SIL phonetic)
lyx | Hebrew (lyx)
phonetic | Hebrew (phonetic)
------------------------------------------------------------------------
Variants for layout: in - Indian
ben_baishakhi | Bangla (India, Baishakhi)
ben | Bangla (India)
ben_bornona | Bangla (India, Bornona)
ben_gitanjali | Bangla (India, Gitanjali)
ben_inscript | Bangla (India, Baishakhi InScript)
ben_probhat | Bangla (India, Probhat)
bolnagri | Hindi (Bolnagri)
eeyek | Manipuri (Eeyek)
eng | English (India, with rupee)
guj | Gujarati
guj-kagapa | Gujarati (KaGaPa, phonetic)
guru | Punjabi (Gurmukhi)
hin-kagapa | Hindi (KaGaPa, phonetic)
hin-wx | Hindi (Wx)
iipa | Indic IPA
jhelum | Punjabi (Gurmukhi Jhelum)
kan-kagapa | Kannada (KaGaPa, phonetic)
kan | Kannada
mal_enhanced | Malayalam (enhanced InScript, with rupee)
mal_lalitha | Malayalam (Lalitha)
mal | Malayalam
marathi | Marathi (enhanced InScript)
mar-kagapa | Marathi (KaGaPa, phonetic)
modi-kagapa | Modi (KaGaPa phonetic)
olck | Ol Chiki
ori-bolnagri | Oriya (Bolnagri)
ori | Oriya
ori-wx | Oriya (Wx)
san-kagapa | Sanskrit (KaGaPa, phonetic)
san-misc | Sanskrit symbols
tamilnet_TAB | Tamil (TamilNet '99, TAB encoding)
tamilnet_tamilnumbers | Tamil (TamilNet '99 with Tamil numerals)
tamilnet | Tamil (TamilNet '99)
tamilnet_TSCII | Tamil (TamilNet '99, TSCII encoding)
tam | Tamil (InScript, with Arabic numerals)
tam_tamilnumbers | Tamil (InScript, with Tamil numerals)
tel-kagapa | Telugu (KaGaPa, phonetic)
tel-sarala | Telugu (Sarala)
tel | Telugu
urd-navees | Urdu (Navees)
urd-phonetic3 | Urdu (alt. phonetic)
urd-phonetic | Urdu (phonetic)
urd-winkeys | Urdu (Windows)
------------------------------------------------------------------------
Variants for layout: iq - Iraqi
ku_alt | Kurdish (Iraq, Latin Alt-Q)
ku_ara | Kurdish (Iraq, Arabic-Latin)
ku_f | Kurdish (Iraq, F)
ku | Kurdish (Iraq, Latin Q)
------------------------------------------------------------------------
Variants for layout: ir - Persian
ave | Avestan
azb | Azerbaijani (Iran)
ku_alt | Kurdish (Iran, Latin Alt-Q)
ku_ara | Kurdish (Iran, Arabic-Latin)
ku_f | Kurdish (Iran, F)
ku | Kurdish (Iran, Latin Q)
pes_keypad | Persian (with Persian keypad)
------------------------------------------------------------------------
Variants for layout: is - Icelandic
dvorak | Icelandic (Dvorak)
mac | Icelandic (Macintosh)
mac_legacy | Icelandic (Macintosh, legacy)
------------------------------------------------------------------------
Variants for layout: it - Italian
dvorak | Italian (Dvorak)
fur | Friulian (Italy)
geo | Georgian (Italy)
ibm | Italian (IBM 142)
intl | Italian (intl., with dead keys)
lld | Italian (Ladin)
mac | Italian (Macintosh)
nodeadkeys | Italian (no dead keys)
scn | Sicilian
sun_type6 | Italian (Sun Type 6/7)
us | Italian (US)
winkeys | Italian (Windows)
------------------------------------------------------------------------
Variants for layout: jp - Japanese
dvorak | Japanese (Dvorak)
kana86 | Japanese (Kana 86)
kana | Japanese (Kana)
mac | Japanese (Macintosh)
OADG109A | Japanese (OADG 109A)
sun_type6 | Japanese (Sun Type 6)
sun_type7 | Japanese (Sun Type 7, PC-compatible)
sun_type7_suncompat | Japanese (Sun Type 7, Sun-compatible)
------------------------------------------------------------------------
Variants for layout: ke - Swahili (Kenya)
kik | Kikuyu
------------------------------------------------------------------------
Variants for layout: kg - Kyrgyz
phonetic | Kyrgyz (phonetic)
------------------------------------------------------------------------
Variants for layout: kh - Khmer (Cambodia)
------------------------------------------------------------------------
Variants for layout: kr - Korean
kr104 | Korean (101/104-key compatible)
sun_type6 | Korean (Sun Type 6/7)
------------------------------------------------------------------------
Variants for layout: kz - Kazakh
ext | Kazakh (extended)
kazrus | Kazakh (with Russian)
latin | Kazakh (Latin)
ruskaz | Russian (Kazakhstan, with Kazakh)
------------------------------------------------------------------------
Variants for layout: la - Lao
stea | Lao (STEA)
------------------------------------------------------------------------
Variants for layout: latam - Spanish (Latin American)
colemak | Spanish (Latin American, Colemak)
deadtilde | Spanish (Latin American, dead tilde)
dvorak | Spanish (Latin American, Dvorak)
nodeadkeys | Spanish (Latin American, no dead keys)
------------------------------------------------------------------------
Variants for layout: lk - Sinhala (phonetic)
tam_TAB | Tamil (Sri Lanka, TamilNet '99, TAB encoding)
tam_unicode | Tamil (Sri Lanka, TamilNet '99)
us | Sinhala (US)
------------------------------------------------------------------------
Variants for layout: lt - Lithuanian
ibm | Lithuanian (IBM LST 1205-92)
lekpa | Lithuanian (LEKPa)
lekp | Lithuanian (LEKP)
ratise | Lithuanian (Ratise)
sgs | Samogitian
std | Lithuanian (standard)
sun_type6 | Lithuanian (Sun Type 6/7)
us_dvorak | Lithuanian (Dvorak)
us | Lithuanian (US)
------------------------------------------------------------------------
Variants for layout: lv - Latvian
adapted | Latvian (adapted)
apostrophecolemak | Latvian (Colemak, with apostrophe)
apostrophe-deadquotes | Latvian (apostrophe, dead quotes)
apostrophe | Latvian (apostrophe)
colemak | Latvian (Colemak)
dvorak | Latvian (Dvorak)
dvorakprogr | Latvian (programmer Dvorak)
ergonomic | Latvian (ergonomic, ŪGJRMV)
fkey | Latvian (F)
minuskeydvorak | Latvian (Dvorak, with minus)
minuskeydvorakprogr | Latvian (programmer Dvorak, with minus)
modern-cyr | Latvian (Modern Cyrillic)
modern | Latvian (Modern Latin)
sun_type6 | Latvian (Sun Type 6/7)
tilde | Latvian (tilde)
ykeydvorak | Latvian (Dvorak, with Y)
ykeydvorakprogr | Latvian (programmer Dvorak, with Y)
------------------------------------------------------------------------
Variants for layout: ma - Arabic (Morocco)
french | French (Morocco)
rif | Tarifit
tifinagh-alt | Berber (Morocco, Tifinagh alt.)
tifinagh-alt-phonetic | Berber (Morocco, Tifinagh phonetic, alt.)
tifinagh | Berber (Morocco, Tifinagh)
tifinagh-extended | Berber (Morocco, Tifinagh extended)
tifinagh-extended-phonetic | Berber (Morocco, Tifinagh extended phonetic)
tifinagh-phonetic | Berber (Morocco, Tifinagh phonetic)
------------------------------------------------------------------------
Variants for layout: mao - Maori
------------------------------------------------------------------------
Variants for layout: md - Moldavian
gag | Moldavian (Gagauz)
------------------------------------------------------------------------
Variants for layout: me - Montenegrin
cyrillicalternatequotes | Montenegrin (Cyrillic, with guillemets)
cyrillic | Montenegrin (Cyrillic)
cyrillicyz | Montenegrin (Cyrillic, ZE and ZHE swapped)
latinalternatequotes | Montenegrin (Latin, with guillemets)
latinunicode | Montenegrin (Latin, Unicode)
latinunicodeyz | Montenegrin (Latin, Unicode, QWERTY)
latinyz | Montenegrin (Latin, QWERTY)
------------------------------------------------------------------------
Variants for layout: mk - Macedonian
nodeadkeys | Macedonian (no dead keys)
------------------------------------------------------------------------
Variants for layout: ml - Bambara
fr-oss | French (Mali, alt.)
us-intl | English (Mali, US, intl.)
us-mac | English (Mali, US, Macintosh)
------------------------------------------------------------------------
Variants for layout: mm - Burmese
mnw-a1 | Mon (A1)
mnw | Mon
shn | Shan
zawgyi | Burmese Zawgyi
zgt | Shan (Zawgyi Tai)
------------------------------------------------------------------------
Variants for layout: mn - Mongolian
------------------------------------------------------------------------
Variants for layout: mt - Maltese
alt-gb | Maltese (UK, with AltGr overrides)
alt-us | Maltese (US, with AltGr overrides)
us | Maltese (US)
------------------------------------------------------------------------
Variants for layout: mv - Dhivehi
------------------------------------------------------------------------
Variants for layout: my - Malay (Jawi, Arabic Keyboard)
phonetic | Malay (Jawi, phonetic)
------------------------------------------------------------------------
Variants for layout: ng - English (Nigeria)
hausa | Hausa (Nigeria)
igbo | Igbo
yoruba | Yoruba
------------------------------------------------------------------------
Variants for layout: nl - Dutch
mac | Dutch (Macintosh)
std | Dutch (standard)
sun_type6 | Dutch (Sun Type 6/7)
us | Dutch (US)
------------------------------------------------------------------------
Variants for layout: no - Norwegian
colemak | Norwegian (Colemak)
dvorak | Norwegian (Dvorak)
mac_nodeadkeys | Norwegian (Macintosh, no dead keys)
mac | Norwegian (Macintosh)
nodeadkeys | Norwegian (no dead keys)
smi_nodeadkeys | Northern Saami (Norway, no dead keys)
smi | Northern Saami (Norway)
sun_type6 | Norwegian (Sun Type 6/7)
winkeys | Norwegian (Windows)
------------------------------------------------------------------------
Variants for layout: np - Nepali
------------------------------------------------------------------------
Variants for layout: ph - Filipino
capewell-dvorak-bay | Filipino (Capewell-Dvorak, Baybayin)
capewell-dvorak | Filipino (Capewell-Dvorak, Latin)
capewell-qwerf2k6-bay | Filipino (Capewell-QWERF 2006, Baybayin)
capewell-qwerf2k6 | Filipino (Capewell-QWERF 2006, Latin)
colemak-bay | Filipino (Colemak, Baybayin)
colemak | Filipino (Colemak, Latin)
dvorak-bay | Filipino (Dvorak, Baybayin)
dvorak | Filipino (Dvorak, Latin)
qwerty-bay | Filipino (QWERTY, Baybayin)
------------------------------------------------------------------------
Variants for layout: pk - Urdu (Pakistan)
ara | Arabic (Pakistan)
snd | Sindhi
urd-crulp | Urdu (Pakistan, CRULP)
urd-navees | Urdu (Pakistan, Navees)
urd-nla | Urdu (Pakistan, NLA)
------------------------------------------------------------------------
Variants for layout: pl - Polish
colemak_dh_ansi | Polish (Colemak-DH)
colemak_dh | Polish (Colemak-DH ISO)
colemak | Polish (Colemak)
csb | Kashubian
dvorak_altquotes | Polish (Dvorak, with Polish quotes on key 1)
dvorak | Polish (Dvorak)
dvorak_quotes | Polish (Dvorak, with Polish quotes on quotemark key)
dvp | Polish (programmer Dvorak)
glagolica | Polish (Glagolica)
intl | Polish (intl., with dead keys)
lefty | Polish (lefty)
legacy | Polish (legacy)
qwertz | Polish (QWERTZ)
ru_phonetic_dvorak | Russian (Poland, phonetic Dvorak)
sun_type6 | Polish (Sun Type 6/7)
szl | Silesian
------------------------------------------------------------------------
Variants for layout: pt - Portuguese
colemak | Portuguese (Colemak)
mac_nodeadkeys | Portuguese (Macintosh, no dead keys)
mac | Portuguese (Macintosh)
nativo-epo | Esperanto (Portugal, Nativo)
nativo | Portuguese (Nativo)
nativo-us | Portuguese (Nativo for US keyboards)
nodeadkeys | Portuguese (no dead keys)
sun_type6 | Portuguese (Sun Type 6/7)
------------------------------------------------------------------------
Variants for layout: ro - Romanian
crh_dobruja | Crimean Tatar (Dobruja Q)
ergonomic | Romanian (ergonomic Touchtype)
std | Romanian (standard)
sun_type6 | Romanian (Sun Type 6/7)
winkeys | Romanian (Windows)
------------------------------------------------------------------------
Variants for layout: rs - Serbian
alternatequotes | Serbian (Cyrillic, with guillemets)
combiningkeys | Serbian (combining accents instead of dead keys)
latinalternatequotes | Serbian (Latin, with guillemets)
latin | Serbian (Latin)
latinunicode | Serbian (Latin, Unicode)
latinunicodeyz | Serbian (Latin, Unicode, QWERTY)
latinyz | Serbian (Latin, QWERTY)
rue | Pannonian Rusyn
yz | Serbian (Cyrillic, ZE and ZHE swapped)
------------------------------------------------------------------------
Variants for layout: ru - Russian
ab | Abkhazian (Russia)
bak | Bashkirian
chm | Mari
chu | Church Slavonic
cv | Chuvash
cv_latin | Chuvash (Latin)
dos | Russian (DOS)
gost-14289-88 | Russian (GOST 14289-88)
gost-6431-75-48 | Russian (GOST 6431-75)
kom | Komi
legacy | Russian (legacy)
mac | Russian (Macintosh)
os_legacy | Ossetian (legacy)
os_winkeys | Ossetian (Windows)
phonetic_azerty | Russian (phonetic, AZERTY)
phonetic_dvorak | Russian (phonetic, Dvorak)
phonetic_fr | Russian (phonetic, French)
phonetic_mac | Russian (phonetic Macintosh)
phonetic | Russian (phonetic)
phonetic_winkeys | Russian (phonetic, Windows)
phonetic_YAZHERTY | Russian (phonetic, YAZHERTY)
prxn | Russian (Polyglot and Reactionary)
ruchey_en | Russian (engineering, EN)
ruchey_ru | Russian (engineering, RU)
rulemak | Russian (Rulemak, phonetic Colemak)
ruu | Russian (with Ukrainian-Belorussian layout)
sah | Yakut
srp | Serbian (Russia)
sun_type6 | Russian (Sun Type 6/7)
tt | Tatar
typewriter-legacy | Russian (typewriter, legacy)
typewriter | Russian (typewriter)
typo | Russian (typographic)
udm | Udmurt
unipunct | Russian (with US punctuation)
winkeys-p | Russian (Programmer)
xal | Kalmyk
------------------------------------------------------------------------
Variants for layout: se - Swedish
dvorak_a5 | Swedish (Dvorak A5)
dvorak | Swedish (Dvorak)
mac | Swedish (Macintosh)
nodeadkeys | Swedish (no dead keys)
ovd | Elfdalian (Swedish, with combining ogonek)
rus_nodeadkeys | Russian (Sweden, phonetic, no dead keys)
rus | Russian (Sweden, phonetic)
smi | Northern Saami (Sweden)
sun_type6 | Swedish (Sun Type 6/7)
svdvorak | Swedish (Svdvorak)
swl | Swedish Sign Language
us_dvorak | Swedish (Dvorak, intl.)
us | Swedish (US)
------------------------------------------------------------------------
Variants for layout: si - Slovenian
alternatequotes | Slovenian (with guillemets)
us | Slovenian (US)
------------------------------------------------------------------------
Variants for layout: sk - Slovak
acc | Slovak (ACC layout, only accented letters)
bksl | Slovak (extended backslash)
qwerty_bksl | Slovak (QWERTY, extended backslash)
qwerty | Slovak (QWERTY)
sun_type6 | Slovak (Sun Type 6/7)
------------------------------------------------------------------------
Variants for layout: sn - Wolof
------------------------------------------------------------------------
Variants for layout: sy - Arabic (Syria)
ku_alt | Kurdish (Syria, Latin Alt-Q)
ku_f | Kurdish (Syria, F)
ku | Kurdish (Syria, Latin Q)
syc_phonetic | Syriac (phonetic)
syc | Syriac
------------------------------------------------------------------------
Variants for layout: tg - French (Togo)
------------------------------------------------------------------------
Variants for layout: th - Thai
pat | Thai (Pattachote)
tis | Thai (TIS-820.2538)
------------------------------------------------------------------------
Variants for layout: tj - Tajik
legacy | Tajik (legacy)
------------------------------------------------------------------------
Variants for layout: tm - Turkmen
alt | Turkmen (Alt-Q)
------------------------------------------------------------------------
Variants for layout: trans - International Phonetic Alphabet
qwerty | International Phonetic Alphabet (QWERTY)
------------------------------------------------------------------------
Variants for layout: tr - Turkish
alt | Turkish (Alt-Q)
e | Turkish (E)
f | Turkish (F)
intl | Turkish (intl., with dead keys)
ku_alt | Kurdish (Turkey, Latin Alt-Q)
ku_f | Kurdish (Turkey, F)
ku | Kurdish (Turkey, Latin Q)
otf | Ottoman (F)
otkf | Old Turkic (F)
otk | Old Turkic
ot | Ottoman (Q)
sun_type6 | Turkish (Sun Type 6/7)
us | Turkish (Turkey, Latin Q, Swap i and ı)
------------------------------------------------------------------------
Variants for layout: tw - Taiwanese
indigenous | Taiwanese (indigenous)
saisiyat | Saisiyat (Taiwan)
------------------------------------------------------------------------
Variants for layout: tz - Swahili (Tanzania)
------------------------------------------------------------------------
Variants for layout: ua - Ukrainian
crh_alt | Crimean Tatar (Turkish Alt-Q)
crh | Crimean Tatar (Turkish Q)
crh_f | Crimean Tatar (Turkish F)
homophonic | Ukrainian (homophonic)
legacy | Ukrainian (legacy)
macOS | Ukrainian (macOS)
phonetic | Ukrainian (phonetic)
rstu_ru | Russian (Ukraine, standard RSTU)
rstu | Ukrainian (standard RSTU)
sun_type6 | Ukrainian (Sun Type 6/7)
typewriter | Ukrainian (typewriter)
winkeys | Ukrainian (Windows)
------------------------------------------------------------------------
Variants for layout: us - English (US)
3l-cros | English (3l, Chromebook)
3l-emacs | English (3l, emacs)
3l | English (3l)
altgr-intl | English (intl., with AltGr dead keys)
altgr-weur | English (Western European AltGr dead keys)
alt-intl | English (US, alt. intl.)
alt-intl-unicode | English (US, intl., AltGr Unicode combining, alt.)
ats | Atsina
carpalx-altgr-intl | English (Carpalx, intl., with AltGr dead keys)
carpalx | English (Carpalx)
carpalx-full-altgr-intl | English (Carpalx, full optimization, intl., with AltGr dead keys)
carpalx-full | English (Carpalx, full optimization)
carpalx-full-intl | English (Carpalx, full optimization, intl., with dead keys)
carpalx-intl | English (Carpalx, intl., with dead keys)
chr | Cherokee
colemak_dh | English (Colemak-DH)
colemak_dh_iso | English (Colemak-DH ISO)
colemak_dh_ortho | English (Colemak-DH Ortholinear)
colemak | English (Colemak)
crd | Coeur d'Alene Salish
cz_sk_de | Czech Slovak and German (US)
cz_sk_pl_de_es_fi_sv | Czech, Slovak, Polish, Spanish, Finnish, Swedish and German (US)
de_se_fi | German, Swedish and Finnish (US)
drix | English (Drix)
dvorak-alt-intl | English (Dvorak, alt. intl.)
dvorak-classic | English (classic Dvorak)
dvorak | English (Dvorak)
dvorak-intl | English (Dvorak, intl., with dead keys)
dvorak-l | English (Dvorak, left-handed)
dvorak-mac | English (Dvorak, Macintosh)
dvorak-r | English (Dvorak, right-handed)
dvp | English (programmer Dvorak)
euro | English (US, euro on 5)
haw | Hawaiian
hbs | Serbo-Croatian (US)
ibm238l | English (US, IBM Arabic 238_L)
intl | English (US, intl., with dead keys)
intl-unicode | English (US, intl., AltGr Unicode combining)
mac | English (Macintosh)
norman | English (Norman)
olpc2 | English (the divide/multiply toggle the layout)
rus | Russian (US, phonetic)
scn | Sicilian (US keyboard)
sun_type6 | English (US, Sun Type 6/7)
symbolic | English (US, Symbolic)
workman | English (Workman)
workman-intl | English (Workman, intl., with dead keys)
workman-p | English (Workman-P)
------------------------------------------------------------------------
Variants for layout: uz - Uzbek
latin | Uzbek (Latin)
------------------------------------------------------------------------
Variants for layout: vn - Vietnamese
aderty | Vietnamese (AÐERTY)
fr | Vietnamese (France)
qderty | Vietnamese (QĐERTY)
us | Vietnamese (US)
------------------------------------------------------------------------
Variants for layout: za - English (South Africa)
------------------------------------------------------------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment