XKEYBOARD-CONFIG(7)

๐Ÿ’ซ xkeyboard-config โ€” XKB data description files ๐Ÿ’ซ

okay bestie, so this is XKEYBOARD-CONFIG(7)</p> โ€” Miscellaneous Information Manual energy โ€” and it's literally the glow-up guide for your keyboard's whole personality. Let's get into it ๐ŸŽ€


โœจ NAME โœจ

xkeyboard-config</p> โ€” the XKB data description files. that's it, that's the name, she's iconic ๐Ÿ’…


๐ŸŒธ DESCRIPTION ๐ŸŒธ

okay so xkeyboard-config</p> ships the description files for the X Keyboard Extension (XKB) and for libxkbcommon. no cap, that's the whole job.

and like โ€” usually it's the desktop environment's moment to shine โœจ, because applying the configuration you asked for is typically their task. main character energy, honestly.

if you're running an X server you've got options too, bestie:

  • you can use the setxkbmap(1) tool to apply keyboard configuration at runtime ๐Ÿ”ฅ
  • or you can configure XKB settings in xorg.conf(5)

both valid, both slay, pick your vibe ๐Ÿซถ


๐Ÿฆ‹ XKB DATA FILES LOAD PATHS ๐Ÿฆ‹

so xkeyboard-config provides the XKB data files, and they're installed in:

/usr/share/xkeyboard-config-2

user-specific data files may live somewhere else, but โ€” and this is the tea โ˜• โ€” it depends on the tool whether those files actually get loaded. so don't come for me if your tool ghosts your custom path, okay? ๐Ÿ˜ญ

for example (fr fr), the libxkbcommon library will by default load XKB data files from the user's home directory ๐Ÿ . see the libxkbcommon documentation for the details, bestie โ€” that's where the fine print lives ๐Ÿ’œ


๐ŸŽ€ THE CUSTOM LAYOUT ๐ŸŽ€

okay this part is lowkey my fave because it's giving exclusive but not really ๐Ÿ’€

the "custom" layout is a layout that's listed as available to tools reading the data files โ€” but it's not actually provided by xkeyboard-config. she's on the guest list but she didn't bring the snacks, iykyk ๐Ÿ™ˆ

so what's the move? you, bestie, may save a layout specification in this file:

/usr/share/xkeyboard-config-2/symbols/custom

and then that layout will be available to most tools interacting with the xkeyboard-config data files. boom. your own lil layout, living her life ๐ŸŒˆ

this is primarily aimed at systems running X where additional lookup paths cannot easily be added. like, the system can't easily expand its friend group, so we're sneaking you in through the side door ๐Ÿงš

and because the "custom" layout is merely listed as available but not provided by xkeyboard-config, your layout will not be overwritten on updates ๐Ÿ‘‘โœจ โ€” yes bestie, she survives the update apocalypse. periodt. ๐Ÿ’–

lowkey the most important glow-up here: updates won't touch your custom file, so your work is safe. cherish her. ๐Ÿ“

โœจ MODELS โœจ

Okay bestie, so this is the big one โ€” the MODELS list. Every single one of these names is a model you can name-drop, and each one maps to a specific hunk of keyboard plastic and the way its keys are physically laid out. Think of it as a guest list: if your keyboard isn't on it, the party doesn't know it yet. ๐ŸŽ‰

No cap, there are a LOT of them. Go get a snack. ๐Ÿ“

  • pc86 โ€” Generic 86-key PC
  • pc101 โ€” Generic 101-key PC
  • pc102 โ€” Generic 102-key PC
  • pc104 โ€” Generic 104-key PC
  • pc104alt โ€” Generic 104-key PC with L-shaped Enter key
  • pc105 โ€” Generic 105-key PC
  • a4techKB21 โ€” A4Tech KB-21
  • a4techKBS8 โ€” A4Tech KBS-8
  • a4_rfkb23 โ€” A4Tech Wireless Desktop RFKB-23
  • airkey โ€” Acer AirKey V
  • acer_c300 โ€” Acer C300
  • acer_ferrari4k โ€” Acer Ferrari 4000
  • acer_laptop โ€” Acer laptop
  • scorpius โ€” Advance Scorpius KI
  • apple โ€” Apple
  • applealu_ansi โ€” Apple Aluminium (ANSI)
  • applealu_iso โ€” Apple Aluminium (ISO)
  • applealu_jis โ€” Apple Aluminium (JIS)
  • asus_laptop โ€” Asus laptop
  • azonaRF2300 โ€” Azona RF2300 Wireless Internet
  • benqx โ€” BenQ X-Touch
  • benqx730 โ€” BenQ X-Touch 730
  • benqx800 โ€” BenQ X-Touch 800
  • abnt2 โ€” Brazilian ABNT2
  • blackberry-key2 โ€” BlackBerry KEY2
  • brother โ€” Brother Internet
  • btc5090 โ€” BTC 5090
  • btc5113rf โ€” BTC 5113RF Multimedia
  • btc5126t โ€” BTC 5126T
  • btc6301urf โ€” BTC 6301URF
  • btc9000 โ€” BTC 9000
  • btc9000a โ€” BTC 9000A
  • btc9001ah โ€” BTC 9001AH
  • btc9019u โ€” BTC 9019U
  • btc9116u โ€” BTC 9116U Mini Wireless Internet and Gaming
  • cherryblue โ€” Cherry Blue Line CyBo@rd
  • cherrybluea โ€” Cherry Blue Line CyBo@rd (alt.)
  • cherrybunlim โ€” Cherry B.UNLIMITED
  • cherrycyboard โ€” Cherry CyBo@rd USB-Hub
  • cherrycmexpert โ€” Cherry CyMotion Expert
  • cymotionlinux โ€” Cherry CyMotion Master Linux
  • cherryblueb โ€” Cherry CyMotion Master XPress
  • chicony โ€” Chicony Internet
  • chicony9885 โ€” Chicony KB-9885
  • chicony0108 โ€” Chicony KU-0108
  • chicony0420 โ€” Chicony KU-0420
  • chromebook โ€” Chromebook
  • compalfl90 โ€” Compal FL90
  • armada โ€” Compaq Armada laptop
  • compaqeak8 โ€” Compaq Easy Access
  • compaqik7 โ€” Compaq Internet (7 keys)
  • compaqik13 โ€” Compaq Internet (13 keys)
  • compaqik18 โ€” Compaq Internet (18 keys)
  • ipaq โ€” Compaq iPaq
  • presario โ€” Compaq Presario laptop
  • creativedw7000 โ€” Creative Desktop Wireless 7000
  • dell โ€” Dell
  • dell101 โ€” Dell 101-key PC
  • latitude โ€” Dell Latitude laptop
  • inspiron โ€” Dell Inspiron 6000/8000 laptop
  • precision_m โ€” Dell Precision M laptop
  • dellm65 โ€” Dell Precision M65 laptop
  • dellsk8125 โ€” Dell SK-8125
  • dellsk8135 โ€” Dell SK-8135
  • dellusbmm โ€” Dell USB Multimedia
  • dexxa โ€” Dexxa Wireless Desktop
  • diamond โ€” Diamond 9801/9802
  • dtk2000 โ€” DTK2000
  • emachines โ€” eMachines m6800 laptop
  • ennyah_dkb1008 โ€” Ennyah DKB-1008
  • everex โ€” Everex STEPnote
  • fscaa1667g โ€” Fujitsu-Siemens Amilo laptop
  • genius โ€” Genius Comfy KB-16M/Multimedia KWD-910
  • geniuscomfy โ€” Genius Comfy KB-12e
  • geniuscomfy2 โ€” Genius Comfy KB-21e-Scroll
  • geniuskb19e โ€” Genius KB-19e NB
  • geniuskkb2050hs โ€” Genius KKB-2050HS
  • gyration โ€” Gyration
  • hhk โ€” Happy Hacking
  • hpi6 โ€” Hewlett-Packard Internet
  • hpmini110 โ€” Hewlett-Packard Mini 110 laptop
  • hpnx9020 โ€” Hewlett-Packard nx9020
  • hp5xx โ€” Hewlett-Packard Omnibook 500
  • hp500fa โ€” Hewlett-Packard Omnibook 500 FA
  • hp6000 โ€” Hewlett-Packard Omnibook 6000/6100
  • hpxe3gc โ€” Hewlett-Packard Omnibook XE3 GC
  • hpxe3gf โ€” Hewlett-Packard Omnibook XE3 GF
  • hpxt1000 โ€” Hewlett-Packard Omnibook XT1000
  • hpdv5 โ€” Hewlett-Packard Pavilion dv5
  • hpzt11xx โ€” Hewlett-Packard Pavilion ZT1100
  • hp250x โ€” Hewlett-Packard SK-2501 Multimedia
  • honeywell_euroboard โ€” Honeywell Euroboard
  • rapidaccess โ€” IBM Rapid Access
  • rapidaccess2 โ€” IBM Rapid Access II
  • ibm_spacesaver โ€” IBM Space Saver
  • thinkpad โ€” IBM ThinkPad 560Z/600/600E/A22E
  • thinkpad60 โ€” IBM ThinkPad R60/T60/R61/T61
  • thinkpadz60 โ€” IBM ThinkPad Z60m/Z60t/Z61m/Z61t
  • jp106 โ€” Japanese 106-key
  • flexpro โ€” Keytronic FlexPro
  • kinesis โ€” Kinesis
  • kr106 โ€” Korean 106-key
  • logitech_base โ€” Logitech
  • logiaccess โ€” Logitech Access
  • logicd โ€” Logitech Cordless Desktop
  • logicda โ€” Logitech Cordless Desktop (alt.)
  • logiex110 โ€” Logitech Cordless Desktop EX110
  • logicd_it โ€” Logitech Cordless Desktop iTouch
  • logiclx300 โ€” Logitech Cordless Desktop LX-300
  • logicd_nav โ€” Logitech Cordless Desktop Navigator
  • logicd_opt โ€” Logitech Cordless Desktop Optical
  • logidinovo โ€” Logitech diNovo
  • logidinovoedge โ€” Logitech diNovo Edge
  • logitech_g15 โ€” Logitech G15 extra keys via G15daemon
  • logiik โ€” Logitech Internet
  • logii350 โ€” Logitech Internet 350
  • logimel โ€” Logitech Internet 350
  • logicink โ€” Logitech Internet Navigator
  • itouch โ€” Logitech iTouch
  • logiitc โ€” Logitech iTouch Cordless Y-RB6
  • logiinkse โ€” Logitech iTouch Internet Navigator SE
  • logiinkseusb โ€” Logitech iTouch Internet Navigator SE USB
  • logiultrax โ€” Logitech Ultra-X
  • logiultraxc โ€” Logitech Ultra-X Cordless Media Desktop
  • mx1998 โ€” Memorex MX1998
  • mx2500 โ€” Memorex MX2500 EZ-Access
  • mx2750 โ€” Memorex MX2750
  • microsoftccurve2k โ€” Microsoft Comfort Curve 2000
  • microsoftinet โ€” Microsoft Internet
  • microsoftprose โ€” Microsoft Internet Pro (Swedish)
  • microsoft โ€” Microsoft Natural
  • microsoftelite โ€” Microsoft Natural Elite
  • microsoft4000 โ€” Microsoft Natural Ergonomic 4000
  • microsoft7000 โ€” Microsoft Natural Wireless Ergonomic 7000
  • microsoftpro โ€” Microsoft Natural Pro/Internet Pro
  • microsoftprousb โ€” Microsoft Natural Pro USB/Internet Pro

A few little moments I need to point at, because they're sending me:

  • pc104alt is the generic 104-key but with an L-shaped Enter key โ€” that's its whole personality and honestly, valid. ๐Ÿ‘‘
  • The Apple aluminium trio is a whole set: applealu_ansi, applealu_iso, applealu_jis โ€” three flavours of the same vibe, pick your regional icon. ๐ŸŽ
  • cherryblue, cherrybluea, and cherrycyboard all rock the CyBo@rd spelling with the @ โ€” do not "correct" it when you type it, the @ is load-bearing. ๐Ÿ’…
  • logii350 and logimel both list Logitech Internet 350 as their description. Not a typo on my end, both are right there. ๐Ÿซถ
  • logitech_g15 is described as Logitech G15 extra keys via G15daemon โ€” that daemon mention is literally part of the description, so it stays. โœจ
  • hhk = Happy Hacking, which is just the most main-character name in the entire list and I don't make the rules. ๐Ÿงš

That's the full model roster, every last one, in the same order as ever. ๐Ÿ’–

  • microsoftprooem โ€” Microsoft Natural Pro OEM ๐ŸŒธ
  • microsoftoffice โ€” Microsoft Office Keyboard
  • microsoftsurface โ€” Microsoft Surface
  • microsoftmult โ€” Microsoft Wireless Multimedia 1.0A
  • sk1300 โ€” NEC SK-1300
  • sk2500 โ€” NEC SK-2500
  • sk6200 โ€” NEC SK-6200
  • sk7100 โ€” NEC SK-7100
  • omnikey101 โ€” Northgate OmniKey 101
  • olpc โ€” OLPC โœจ
  • oretec โ€” Ortek Multimedia/Internet MCK-800
  • pc98 โ€” PC-98
  • ppkb โ€” PinePhone Keyboard ๐ŸŒˆ
  • propeller โ€” Propeller Voyager KTEZ-1000
  • qtronix โ€” QTronix Scorpius 98N+
  • samsung4500 โ€” Samsung SDM 4500P
  • samsung4510 โ€” Samsung SDM 4510P
  • sanwaskbkg3 โ€” Sanwa Supply SKB-KG3
  • silvercrest โ€” Silvercrest Multimedia Wireless
  • apex300 โ€” SteelSeries Apex 300 (Apex RAW) ๐Ÿ”ฅ
  • sun_type6_jp โ€” Sun Type 6 (Japanese)
  • sun_type6_jp_usb โ€” Sun Type 6 USB (Japanese)
  • sun_type6_unix_usb โ€” Sun Type 6 USB (Unix)
  • sun_type6_usb โ€” Sun Type 6/7 USB
  • sun_type6_euro_usb โ€” Sun Type 6/7 USB (European)
  • sun_type7_usb โ€” Sun Type 7 USB
  • sun_type7_euro_usb โ€” Sun Type 7 USB (European)
  • sun_type7_jp_usb โ€” Sun Type 7 USB (Japanese)/Japanese 106-key
  • sun_type7_unix_usb โ€” Sun Type 7 USB (Unix)
  • sp_inet โ€” Super Power Multimedia
  • sven โ€” SVEN Ergonomic 2500
  • sven303 โ€” SVEN Slim 303
  • symplon โ€” Symplon PaceBook tablet ๐Ÿ’…
  • targa_v811 โ€” Targa Visionary 811
  • toshiba_s3000 โ€” Toshiba Satellite S3000
  • teck227 โ€” Truly Ergonomic 227
  • teck229 โ€” Truly Ergonomic 229
  • trustda โ€” Trust Direct Access
  • trust_slimline โ€” Trust Slimline
  • trust โ€” Trust Wireless Classic
  • tm2020 โ€” TypeMatrix EZ-Reach 2020
  • tm2030PS2 โ€” TypeMatrix EZ-Reach 2030 PS2
  • tm2030USB โ€” TypeMatrix EZ-Reach 2030 USB
  • tm2030USB-102 โ€” TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)
  • tm2030USB-106 โ€” TypeMatrix EZ-Reach 2030 USB (106:JP mode)
  • unitekkb1925 โ€” Unitek KB-1925
  • vsonku306 โ€” ViewSonic KU-306 Internet
  • winbook โ€” Winbook Model XP5
  • yahoo โ€” Yahoo! Internet ๐Ÿฆ‹

And that's a wrap on the model roster โ€” like, that's the whole alphabet soup of keyboards the rules file knows about, bestie. If your board's name is in there, you're literally set. ๐Ÿ’–

๐ŸŒ LAYOUTS

okay bestie, this is the big one โ€” the master list of every layout and variant you can drop into ${layout}(${variant}) form. Each bullet is a base layout code, and the lil' indented ones under it are the variants (that's the (whatever) bit in the parens). Descriptions are right there next to each one so you know exactly what vibe you're typing in. No cap, it's a long list โ€” go get a snack. ๐Ÿ“


  • al โ€” Albanian
    • al(plisi) โ€” Albanian (Plisi)
    • al(veqilharxhi) โ€” Albanian (Veqilharxhi)
  • et โ€” Amharic
  • am โ€” Armenian
    • am(phonetic) โ€” Armenian (phonetic)
    • am(phonetic-alt) โ€” Armenian (alt. phonetic)
    • am(eastern) โ€” Armenian (eastern)
    • am(eastern-alt) โ€” Armenian (alt. eastern)
    • am(western) โ€” Armenian (western)
  • ara โ€” Arabic
    • ara(digits) โ€” Arabic (Eastern Arabic numerals)
    • ara(azerty) โ€” Arabic (AZERTY)
    • ara(azerty_digits) โ€” Arabic (AZERTY, Eastern Arabic numerals)
    • ara(buckwalter) โ€” Arabic (Buckwalter)
    • ara(mac) โ€” Arabic (Macintosh)
    • ara(mac-phonetic) โ€” Arabic (Macintosh, phonetic)
    • ara(olpc) โ€” Arabic (OLPC)
  • eg โ€” Arabic (Egypt)
  • iq โ€” Arabic (Iraq)
    • iq(ku) โ€” Kurdish (Iraq, Latin Q)
    • iq(ku_alt) โ€” Kurdish (Iraq, Latin Alt-Q)
    • iq(ku_f) โ€” Kurdish (Iraq, F)
    • iq(ku_ara) โ€” Kurdish (Iraq, Arabic-Latin)
  • ma โ€” Arabic (Morocco)
    • ma(tifinagh) โ€” Berber (Morocco, Tifinagh)
    • ma(tifinagh-alt) โ€” Berber (Morocco, Tifinagh alt.)
    • ma(tifinagh-alt-phonetic) โ€” Berber (Morocco, Tifinagh phonetic, alt.)
    • ma(tifinagh-extended) โ€” Berber (Morocco, Tifinagh extended)
    • ma(tifinagh-phonetic) โ€” Berber (Morocco, Tifinagh phonetic)
    • ma(tifinagh-extended-phonetic) โ€” Berber (Morocco, Tifinagh extended phonetic)
    • ma(french) โ€” French (Morocco)
    • ma(rif) โ€” Tarifit
  • sy โ€” Arabic (Syria)
    • sy(syc) โ€” Syriac
    • sy(syc_phonetic) โ€” Syriac (phonetic)
    • sy(ku) โ€” Kurdish (Syria, Latin Q)
    • sy(ku_alt) โ€” Kurdish (Syria, Latin Alt-Q)
    • sy(ku_f) โ€” Kurdish (Syria, F)
  • az โ€” Azerbaijani
    • az(cyrillic) โ€” Azerbaijani (Cyrillic)
    • az(standard) โ€” Azerbaijani (standard)
  • ml โ€” Bambara
    • ml(fr-oss) โ€” French (Mali, alt.)
    • ml(us-mac) โ€” English (Mali, US, Macintosh)
    • ml(us-intl) โ€” English (Mali, US, intl.)
  • bd โ€” Bangla
    • bd(probhat) โ€” Bangla (Probhat)
  • by โ€” Belarusian
    • by(legacy) โ€” Belarusian (legacy)
    • by(latin) โ€” Belarusian (Latin)
    • by(intl) โ€” Belarusian (intl.)
    • by(phonetic) โ€” Belarusian (phonetic)
    • by(typographic) โ€” Belarusian (typo.)
    • by(ru) โ€” Russian (Belarus)
  • be โ€” Belgian
    • be(oss) โ€” Belgian (alt.)
    • be(oss_latin9) โ€” Belgian (Latin-9 only, alt.)
    • be(iso-alternate) โ€” Belgian (ISO, alt.)
    • be(nodeadkeys) โ€” Belgian (no dead keys)
    • be(wang) โ€” Belgian (Wang 724 AZERTY)
  • dz โ€” Berber (Algeria, Latin)
    • dz(ber) โ€” Berber (Algeria, Tifinagh)
    • dz(azerty-deadkeys) โ€” Kabyle (AZERTY, with dead keys)
    • dz(qwerty-gb-deadkeys) โ€” Kabyle (QWERTY, UK, with dead keys)
    • dz(qwerty-us-deadkeys) โ€” Kabyle (QWERTY, US, with dead keys)
    • dz(ar) โ€” Arabic (Algeria)
  • ba โ€” Bosnian
    • ba(alternatequotes) โ€” Bosnian (with guillemets)
    • ba(unicode) โ€” Bosnian (with Bosnian digraphs)
    • ba(unicodeus) โ€” Bosnian (US, with Bosnian digraphs)

and yes the list keeps going, we're only like halfway down the alphabet ๐Ÿ’€ stay with me bestie ๐Ÿซถ

  • ba(us) โ€” Bosnian (US) ๐Ÿฆ‹

okay next up is the Braille corner of the keyboard world and it is so cool that these even exist ๐Ÿ’– five whole variants, one for each hand, and yes there's an "inverted thumb" option because of course there is:

  • brai โ€” Braille
  • brai(left_hand) โ€” Braille (one-handed, left)
  • brai(left_hand_invert) โ€” Braille (one-handed, left, inverted thumb)
  • brai(right_hand) โ€” Braille (one-handed, right)
  • brai(right_hand_invert) โ€” Braille (one-handed, right, inverted thumb)

then we slide into Bulgarian ๐Ÿ‡ง๐Ÿ‡ฌ and she has opinions about phonetics:

  • bg โ€” Bulgarian
  • bg(phonetic) โ€” Bulgarian (traditional phonetic)
  • bg(bas_phonetic) โ€” Bulgarian (new phonetic)
  • bg(bekl) โ€” Bulgarian (enhanced)

Burmese time, and this group is genuinely stacked โ€” scripts on scripts on scripts ๐Ÿ˜ญโœจ:

  • mm โ€” Burmese
  • mm(zawgyi) โ€” Burmese (Zawgyi)
  • mm(mara) โ€” Mara
  • mm(mnw) โ€” Mon
  • mm(mnw-a1) โ€” Mon (A1)
  • mm(shn) โ€” Shan
  • mm(zgt) โ€” Shan (Zawgyi)

Chinese, and bestie this one is a journey โ€” pinyin, Mongolian in like six different flavours, Tibetan, Uyghur, all chillin' under cn ๐Ÿ‘‘:

  • cn โ€” Chinese
  • cn(altgr-pinyin) โ€” Hanyu Pinyin Letters (with AltGr dead keys)
  • cn(mon_trad) โ€” Mongolian (Bichig)
  • cn(mon_trad_todo) โ€” Mongolian (Todo)
  • cn(mon_trad_xibe) โ€” Mongolian (Xibe)
  • cn(mon_trad_manchu) โ€” Mongolian (Manchu)
  • cn(mon_trad_galik) โ€” Mongolian (Galik)
  • cn(mon_todo_galik) โ€” Mongolian (Todo Galik)
  • cn(mon_manchu_galik) โ€” Mongolian (Manchu Galik)
  • cn(tib) โ€” Tibetan
  • cn(tib_asciinum) โ€” Tibetan (with ASCII numerals)
  • cn(ug) โ€” Uyghur

Croatian next โ€” guillemets, digraphs, the US crossover, the whole aesthetic ๐Ÿ’…:

  • hr โ€” Croatian
  • hr(alternatequotes) โ€” Croatian (with guillemets)
  • hr(unicode) โ€” Croatian (with Croatian digraphs)
  • hr(unicodeus) โ€” Croatian (US, with Croatian digraphs)
  • hr(us) โ€” Croatian (US)

Czech, and ngl this list goes hard โ€” QWERTY, QWERTZ, Windows, Mac, UCW, Dvorak, and a Russian phonetic one just vibing at the bottom ๐Ÿ”ฅ:

  • cz โ€” Czech
  • cz(bksl) โ€” Czech (extra backslash)
  • cz(qwerty) โ€” Czech (QWERTY)
  • cz(qwerty_bksl) โ€” Czech (QWERTY, extra backslash)
  • cz(winkeys) โ€” Czech (QWERTZ, Windows)
  • cz(winkeys-qwerty) โ€” Czech (QWERTY, Windows)
  • cz(qwerty-mac) โ€” Czech (QWERTY, Macintosh)
  • cz(ucw) โ€” Czech (UCW, only accented letters)
  • cz(dvorak-ucw) โ€” Czech (US, Dvorak, UCW support)
  • cz(rus) โ€” Russian (Czechia, phonetic)

Danish ๐Ÿ‡ฉ๐Ÿ‡ฐ โ€” she's got dead keys, no dead keys, Windows, Mac, Mac without dead keys, and a Dvorak moment:

  • dk โ€” Danish
  • dk(nodeadkeys) โ€” Danish (no dead keys)
  • dk(winkeys) โ€” Danish (Windows)
  • dk(mac) โ€” Danish (Macintosh)
  • dk(mac_nodeadkeys) โ€” Danish (Macintosh, no dead keys)
  • dk(dvorak) โ€” Danish (Dvorak)

Dari, and the OLPC variants are giving "one laptop per child" main character energy ๐ŸŽ€:

  • af โ€” Dari
  • af(ps) โ€” Pashto
  • af(uz) โ€” Uzbek (Afghanistan)
  • af(fa-olpc) โ€” Dari (Afghanistan, OLPC)
  • af(ps-olpc) โ€” Pashto (Afghanistan, OLPC)
  • af(uz-olpc) โ€” Uzbek (Afghanistan, OLPC)

  • mv โ€” Dhivehi ๐ŸŒธ

Dutch, short and sweet, love that for her:

  • nl โ€” Dutch
  • nl(us) โ€” Dutch (US)
  • nl(mac) โ€” Dutch (Macintosh)
  • nl(std) โ€” Dutch (standard)

  • bt โ€” Dzongkha โญ

  • au โ€” English (Australia) ๐Ÿฆ˜

Cameroon, and she brought the whole multilingual friend group with her ๐Ÿซถ:

  • cm โ€” English (Cameroon)
  • cm(french) โ€” French (Cameroon)
  • cm(qwerty) โ€” Cameroon Multilingual (QWERTY, intl.)
  • cm(azerty) โ€” Cameroon (AZERTY, intl.)
  • cm(dvorak) โ€” Cameroon (Dvorak, intl.)
  • cm(mmuock) โ€” Mmuock

Ghana, and this group is a whole language family reunion โ€” Akan, Avatime, Ewe, Fula, Ga, Hausa, all under gh:

  • gh โ€” English (Ghana)
  • gh(generic) โ€” English (Ghana, multilingual)
  • gh(gillbt) โ€” English (Ghana, GILLBT)
  • gh(akan) โ€” Akan
  • gh(avn) โ€” Avatime
  • gh(ewe) โ€” Ewe
  • gh(fula) โ€” Fula
  • gh(ga) โ€” Ga
  • gh(hausa) โ€” Hausa (Ghana)
  • nz โ€” English (New Zealand)
    • nz(mao) โ€” Maori

okay next up, Nigeria and South Africa, keep scrolling bestie we're getting through the whole alphabet ๐Ÿ’…

  • ng โ€” English (Nigeria)
    • ng(hausa) โ€” Hausa (Nigeria)
    • ng(igbo) โ€” Igbo
    • ng(yoruba) โ€” Yoruba

  • za โ€” English (South Africa)

  • gb โ€” English (UK)
    • gb(extd) โ€” English (UK, extended, Windows)
    • gb(intl) โ€” English (UK, intl., with dead keys)
    • gb(dvorak) โ€” English (UK, Dvorak)
    • gb(dvorakukp) โ€” English (UK, Dvorak, with UK punctuation)
    • gb(mac) โ€” English (UK, Macintosh)
    • gb(mac_intl) โ€” English (UK, Macintosh, intl.)
    • gb(colemak) โ€” English (UK, Colemak)
    • gb(colemak_dh) โ€” English (UK, Colemak-DH)
    • gb(gla) โ€” Scottish Gaelic
    • gb(pl) โ€” Polish (British keyboard)

and then there's the us one, which is literally the main character of this whole list โ€” look at all these variants, she ate and left no crumbs ๐Ÿ‘‘

  • us โ€” English (US)
    • us(euro) โ€” English (US, euro on 5)
    • us(intl) โ€” English (US, intl., with dead keys)
    • us(alt-intl) โ€” English (US, alt. intl.)
    • us(altgr-intl) โ€” English (intl., with AltGr dead keys)
    • us(mac) โ€” English (Macintosh, ABC, ANSI)
    • us(mac-iso) โ€” English (Macintosh, ABC, ISO)
    • us(colemak) โ€” English (Colemak)
    • us(colemak_dh) โ€” English (Colemak-DH)
    • us(colemak_dh_wide) โ€” English (Colemak-DH Wide)
    • us(colemak_dh_ortho) โ€” English (Colemak-DH Ortholinear)
    • us(colemak_dh_iso) โ€” English (Colemak-DH ISO)
    • us(colemak_dh_wide_iso) โ€” English (Colemak-DH Wide ISO)
    • us(dvorak) โ€” English (Dvorak)
    • us(dvorak-intl) โ€” English (Dvorak, intl., with dead keys)
    • us(dvorak-alt-intl) โ€” English (Dvorak, alt. intl.)
    • us(dvorak-l) โ€” English (Dvorak, one-handed, left)
    • us(dvorak-r) โ€” English (Dvorak, one-handed, right)
    • us(dvorak-classic) โ€” English (classic Dvorak)
    • us(dvp) โ€” English (programmer Dvorak)
    • us(dvorak-mac) โ€” English (Dvorak, Macintosh, ANSI)
    • us(dvorak-mac-iso) โ€” English (Dvorak, Macintosh, ISO)
    • us(norman) โ€” English (Norman)
    • us(symbolic) โ€” English (US, Symbolic)
    • us(workman) โ€” English (Workman)
    • us(workman-intl) โ€” English (Workman, intl., with dead keys)
    • us(olpc2) โ€” English (the divide/multiply toggle the layout)
    • us(chr) โ€” Cherokee
    • us(haw) โ€” Hawaiian
    • us(rus) โ€” Russian (US, phonetic)
    • us(hbs) โ€” Serbo-Croatian (US)

  • epo โ€” Esperanto
    • epo(legacy) โ€” Esperanto (legacy)

  • ee โ€” Estonian
    • ee(nodeadkeys) โ€” Estonian (no dead keys)
    • ee(dvorak) โ€” Estonian (Dvorak)
    • ee(us) โ€” Estonian (US)

  • fo โ€” Faroese
    • fo(nodeadkeys) โ€” Faroese (no dead keys)

  • ph โ€” Filipino
    • ph(qwerty-bay) โ€” Filipino (QWERTY, Baybayin)
    • ph(capewell-dvorak) โ€” Filipino (Capewell-Dvorak, Latin)
    • ph(capewell-dvorak-bay) โ€” Filipino (Capewell-Dvorak, Baybayin)
    • ph(capewell-qwerf2k6) โ€” Filipino (Capewell-QWERF 2006, Latin)
    • ph(capewell-qwerf2k6-bay) โ€” Filipino (Capewell-QWERF 2006, Baybayin)
    • ph(colemak) โ€” Filipino (Colemak, Latin)
    • ph(colemak-bay) โ€” Filipino (Colemak, Baybayin)
    • ph(dvorak) โ€” Filipino (Dvorak, Latin)
    • ph(dvorak-bay) โ€” Filipino (Dvorak, Baybayin)

  • fi โ€” Finnish
    • fi(winkeys) โ€” Finnish (Windows)
    • fi(classic) โ€” Finnish (classic)
    • fi(nodeadkeys) โ€” Finnish (classic, no dead keys)
    • fi(mac) โ€” Finnish (Macintosh)
    • fi(smi) โ€” Northern Saami (Finland)

  • fr โ€” French
    • fr(nodeadkeys) โ€” French (no dead keys)
    • fr(oss) โ€” French (alt.)
    • fr(oss_nodeadkeys) โ€” French (alt., no dead keys)
    • fr(oss_latin9) โ€” French (alt., Latin-9 only)
    • fr(latin9) โ€” French (legacy, alt.)
    • fr(latin9_nodeadkeys) โ€” French (legacy, alt., no dead keys)
    • fr(azerty) โ€” French (AZERTY)
    • fr(afnor) โ€” French (AZERTY, AFNOR)
    • fr(bepo) โ€” French (BEPO)
    • fr(bepo_latin9) โ€” French (BEPO, Latin-9 only)
    • fr(bepo_afnor) โ€” French (BEPO, AFNOR)
    • fr(dvorak) โ€” French (Dvorak)

โ€ฆand the fr fam wraps up like this, bestie:

  • fr(ergol) โ€” French (Ergoโ€‘L) โ€” the ergo girlies are obsessed ๐Ÿ’…
  • fr(ergol_iso) โ€” French (Ergoโ€‘L, ISO variant)
  • fr(mac) โ€” French (Macintosh)
  • fr(us) โ€” French (US)
  • fr(bre) โ€” Breton (France)
  • fr(oci) โ€” Occitan
  • fr(geo) โ€” Georgian (France, AZERTY Tskapo)

๐Ÿ‡จ๐Ÿ‡ฆ the ca girlies (yes there are several)

  • ca โ€” French (Canada)
  • ca(fr-dvorak) โ€” French (Canada, Dvorak)
  • ca(fr-legacy) โ€” French (Canada, legacy)
  • ca(multix) โ€” Canadian (CSA)
  • ca(eng) โ€” English (Canada) ๐Ÿ
  • ca(ike) โ€” Inuktitut

๐ŸŒ the little single-variant solo acts

  • cd โ€” French (Democratic Republic of the Congo)
  • tg โ€” French (Togo)

no variants, just vibes, and honestly? respect ๐Ÿซถ


๐Ÿ‡ฌ๐Ÿ‡ช ge, aka Georgian station

  • ge โ€” Georgian
  • ge(ergonomic) โ€” Georgian (ergonomic)
  • ge(mess) โ€” Georgian (MESS)
  • ge(os) โ€” Ossetian (Georgia)
  • ge(ru) โ€” Russian (Georgia)

๐Ÿ‡ฉ๐Ÿ‡ช de โ€” the German mothership, and she is huge

okay so de has main character energy and a million children, let's get through them all:

  • de โ€” German
  • de(deadacute) โ€” German (dead acute)
  • de(deadgraveacute) โ€” German (dead grave acute)
  • de(deadtilde) โ€” German (dead tilde)
  • de(nodeadkeys) โ€” German (no dead keys) โ€” for when the dead keys keep jumpscaring you ๐Ÿ˜ญ
  • de(e1) โ€” German (E1)
  • de(e2) โ€” German (E2)
  • de(T3) โ€” German (T3)
  • de(us) โ€” German (US)
  • de(dvorak) โ€” German (Dvorak)
  • de(mac) โ€” German (Macintosh)
  • de(mac_nodeadkeys) โ€” German (Macintosh, no dead keys)
  • de(neo) โ€” German (Neo 2)
  • de(qwerty) โ€” German (QWERTY)
  • de(dsb) โ€” Lower Sorbian
  • de(dsb_qwertz) โ€” Lower Sorbian (QWERTZ)
  • de(ro) โ€” Romanian (Germany)
  • de(ro_nodeadkeys) โ€” Romanian (Germany, no dead keys)
  • de(ru) โ€” Russian (Germany, phonetic)
  • de(tr) โ€” Turkish (Germany)

๐Ÿ‡ฆ๐Ÿ‡น at โ€” Austria said "we're also German, actually"

  • at โ€” German (Austria)
  • at(nodeadkeys) โ€” German (Austria, no dead keys)
  • at(mac) โ€” German (Austria, Macintosh)

๐Ÿ‡จ๐Ÿ‡ญ ch โ€” Switzerland, being multilingual and iconic as always

  • ch โ€” German (Switzerland)
  • ch(de_nodeadkeys) โ€” German (Switzerland, no dead keys)
  • ch(de_mac) โ€” German (Switzerland, Macintosh)
  • ch(legacy) โ€” German (Switzerland, legacy)
  • ch(fr) โ€” French (Switzerland)
  • ch(fr_nodeadkeys) โ€” French (Switzerland, no dead keys)
  • ch(fr_mac) โ€” French (Switzerland, Macintosh)

๐Ÿ‡ฌ๐Ÿ‡ท gr โ€” Greek

  • gr โ€” Greek
  • gr(simple) โ€” Greek (simple)
  • gr(nodeadkeys) โ€” Greek (no dead keys)
  • gr(polytonic) โ€” Greek (polytonic)

๐Ÿ‡ฎ๐Ÿ‡ฑ il โ€” Hebrew

  • il โ€” Hebrew
  • il(si2) โ€” Hebrew (SI-1452-2)
  • il(lyx) โ€” Hebrew (lyx)
  • il(phonetic) โ€” Hebrew (phonetic)
  • il(biblical) โ€” Hebrew (Biblical, Tiro)

๐Ÿ‡ญ๐Ÿ‡บ hu โ€” Hungarian, and she brought a spreadsheet of variants

bestie, the Hungarian list is lowkey iconic โ€” it's basically every combination of QWERTZ/QWERTY ร— 101/102-key ร— comma/dot ร— dead/nodead. And yes, every single one is in here. No skipping. ๐Ÿ˜ค

the basics first:

  • hu โ€” Hungarian
  • hu(standard) โ€” Hungarian (standard)
  • hu(nodeadkeys) โ€” Hungarian (no dead keys)
  • hu(qwerty) โ€” Hungarian (QWERTY)

then the 101-key squad:

  • hu(101_qwertz_comma_dead) โ€” Hungarian (QWERTZ, 101-key, comma, dead keys)
  • hu(101_qwertz_comma_nodead) โ€” Hungarian (QWERTZ, 101-key, comma, no dead keys)
  • hu(101_qwertz_dot_dead) โ€” Hungarian (QWERTZ, 101-key, dot, dead keys)
  • hu(101_qwertz_dot_nodead) โ€” Hungarian (QWERTZ, 101-key, dot, no dead keys)
  • hu(101_qwerty_comma_dead) โ€” Hungarian (QWERTY, 101-key, comma, dead keys)
  • hu(101_qwerty_comma_nodead) โ€” Hungarian (QWERTY, 101-key, comma, no dead keys)
  • hu(101_qwerty_dot_dead) โ€” Hungarian (QWERTY, 101-key, dot, dead keys)
  • hu(101_qwerty_dot_nodead) โ€” Hungarian (QWERTY, 101-key, dot, no dead keys)

and the 102-key squad, same energy:

  • hu(102_qwertz_comma_dead) โ€” Hungarian (QWERTZ, 102-key, comma, dead keys)
  • hu(102_qwertz_comma_nodead) โ€” Hungarian (QWERTZ, 102-key, comma, no dead keys)
  • hu(102_qwertz_dot_dead) โ€” Hungarian (QWERTZ, 102-key, dot, dead keys)
  • hu(102_qwertz_dot_nodead) โ€” Hungarian (QWERTZ, 102-key, dot, no dead keys)
  • hu(102_qwerty_comma_dead) โ€” Hungarian (QWERTY, 102-key, comma, dead keys)
  • hu(102_qwerty_comma_nodead) โ€” Hungarian (QWERTY, 102-key, comma, no dead keys)
  • hu(102_qwerty_dot_dead) โ€” Hungarian (QWERTY, 102-key, dot, dead keys)
  • hu(102_qwerty_dot_nodead) โ€” Hungarian (QWERTY, 102-key, dot, no dead keys)
ok and remember the notation bestie: hu(102_qwerty_dot_nodead) is just the layout hu plus the variant 102_qwerty_dot_nodead โ€” that's the whole pattern, every time. ๐ŸŽ€

๐Ÿ‡ฎ๐Ÿ‡ธ is โ€” Icelandic (and the is key code confusion is not my problem today)

  • is โ€” Icelandic
  • is(mac_legacy) โ€” Icelandic (Macintosh, legacy)
  • is(mac) โ€” Icelandic (Macintosh)
  • is(dvorak) โ€” Icelandic (Dvorak)

still in the India block btw โ€” this thing is long and we're not even done:

  • in โ€” Indian
  • in(asm-kagapa) โ€” Assamese (KaGaPa, phonetic)
  • in(ben) โ€” Bangla (India)
  • in(ben_probhat) โ€” Bangla (India, Probhat)
  • in(ben_baishakhi) โ€” Bangla (India, Baishakhi)
  • in(ben_bornona) โ€” Bangla (India, Bornona)
  • in(ben-kagapa) โ€” Bangla (India, KaGaPa, phonetic)
  • in(ben_gitanjali) โ€” Bangla (India, Gitanjali)
  • in(ben_inscript) โ€” Bangla (India, Baishakhi InScript)
  • in(eng) โ€” English (India, with rupee)
  • in(guj) โ€” Gujarati
  • in(guj-kagapa) โ€” Gujarati (KaGaPa, phonetic)
  • in(bolnagri) โ€” Hindi (Bolnagri)
  • in(hin-wx) โ€” Hindi (Wx)
  • in(hin-kagapa) โ€” Hindi (KaGaPa, phonetic)
  • in(kan) โ€” Kannada
  • in(kan-kagapa) โ€” Kannada (KaGaPa, phonetic)
  • in(mal) โ€” Malayalam
  • in(mal_lalitha) โ€” Malayalam (Lalitha)
  • in(mal_enhanced) โ€” Malayalam (enhanced InScript, with rupee)
  • in(mal_poorna) โ€” Malayalam (Poorna, extended InScript)
  • in(mara) โ€” Mara
  • in(mni) โ€” Manipuri (Meitei)
  • in(mar-kagapa) โ€” Marathi (KaGaPa, phonetic)
  • in(marathi) โ€” Marathi (enhanced InScript)
  • in(ori) โ€” Oriya
  • in(ori-bolnagri) โ€” Oriya (Bolnagri)
  • in(ori-wx) โ€” Oriya (Wx)
  • in(guru) โ€” Punjabi (Gurmukhi)
  • in(jhelum) โ€” Punjabi (Gurmukhi Jhelum)
  • in(san-kagapa) โ€” Sanskrit (KaGaPa, phonetic)
  • in(sat) โ€” Santali (Ol Chiki)
  • in(tamilnet) โ€” Tamil (TamilNet '99)
  • in(tamilnet_tamilnumbers) โ€” Tamil (TamilNet '99 with Tamil numerals)
  • in(tamilnet_TAB) โ€” Tamil (TamilNet '99, TAB encoding)
  • in(tamilnet_TSCII) โ€” Tamil (TamilNet '99, TSCII encoding)
  • in(tam) โ€” Tamil (InScript, with Arabic numerals)
  • in(tam_tamilnumbers) โ€” Tamil (InScript, with Tamil numerals)
  • in(tel) โ€” Telugu
  • in(tel-kagapa) โ€” Telugu (KaGaPa, phonetic)
  • in(tel-sarala) โ€” Telugu (Sarala)
  • in(urd-phonetic) โ€” Urdu (phonetic)
  • in(urd-phonetic3) โ€” Urdu (alt. phonetic)
  • in(urd-winkeys) โ€” Urdu (Windows)
  • in(iipa) โ€” Indic IPA

that in(iipa) one at the bottom is serving Indic IPA realness, slay.


๐Ÿ‡ฎ๐Ÿ‡ฉ Indonesian block, we move

  • id โ€” Indonesian (Latin)
  • id(melayu-phonetic) โ€” Indonesian (Arab Melayu, phonetic)
  • id(melayu-phoneticx) โ€” Indonesian (Arab Melayu, extended phonetic)
  • id(pegon-phonetic) โ€” Indonesian (Arab Pegon, phonetic)
  • id(javanese) โ€” Javanese

๐Ÿ‡ฎ๐Ÿ‡ช Irish, my beloved

  • ie โ€” Irish
  • ie(UnicodeExpert) โ€” Irish (UnicodeExpert)
  • ie(CloGaelach) โ€” CloGaelach
  • ie(ogam) โ€” Ogham
  • ie(ogam_is434) โ€” Ogham (IS434)

bestie the Ogham layouts are literally ancient-script energy, we love a historical moment ๐Ÿ’…

๐Ÿ‡ฎ๐Ÿ‡น Italian

  • it โ€” Italian
  • it(nodeadkeys) โ€” Italian (no dead keys)
  • it(winkeys) โ€” Italian (Windows)
  • it(mac) โ€” Italian (Macintosh)
  • it(us) โ€” Italian (US)
  • it(ibm) โ€” Italian (IBM 142)
  • it(fur) โ€” Friulian (Italy)
  • it(scn) โ€” Sicilian
  • it(geo) โ€” Georgian (Italy)

not it(geo) being Georgian but in Italy ๐Ÿ˜ญ the crossover episode nobody asked for but we're here for it.

๐Ÿ‡ฏ๐Ÿ‡ต Japanese

  • jp โ€” Japanese
  • jp(kana) โ€” Japanese (Kana)
  • jp(OADG109A) โ€” Japanese (OADG 109A)
  • jp(mac) โ€” Japanese (Macintosh)
  • jp(dvorak) โ€” Japanese (Dvorak)

๐Ÿ‡ฐ๐Ÿ‡ฟ Kazakh

  • kz โ€” Kazakh
  • kz(kazrus) โ€” Kazakh (with Russian)
  • kz(ext) โ€” Kazakh (extended)
  • kz(latin) โ€” Kazakh (Latin)
  • kz(ruskaz) โ€” Russian (Kazakhstan, with Kazakh)

heads up that kz(ruskaz) is filed under Russian, not Kazakh โ€” it's the Russian layout for Kazakhstan with Kazakh support. read the label, bestie ๐Ÿซถ

๐Ÿ‡ฐ๐Ÿ‡ญ Khmer

  • kh โ€” Khmer (Cambodia)

one (1) layout. iconic minimalist behaviour, we respect it. โœจ

๐Ÿ‡ฐ๐Ÿ‡ท Korean

  • kr โ€” Korean
  • kr(kr104) โ€” Korean (101/104-key compatible)

๐Ÿ‡ฐ๐Ÿ‡ฌ Kyrgyz

  • kg โ€” Kyrgyz
  • kg(phonetic) โ€” Kyrgyz (phonetic)

๐Ÿ‡ฑ๐Ÿ‡ฆ Lao

  • la โ€” Lao
  • la(stea) โ€” Lao (STEA)

๐Ÿ‡ฑ๐Ÿ‡ป Latvian โ€” okay this one has range

  • lv โ€” Latvian
  • lv(apostrophe) โ€” Latvian (apostrophe)
  • lv(tilde) โ€” Latvian (tilde)
  • lv(fkey) โ€” Latvian (F)
  • lv(modern) โ€” Latvian (Modern Latin)
  • lv(modern-cyr) โ€” Latvian (Modern Cyrillic)
  • lv(ergonomic) โ€” Latvian (ergonomic, ลชGJRMV)
  • lv(adapted) โ€” Latvian (adapted)

note the ลชGJRMV in lv(ergonomic) โ€” that's macron-U, G, J, R, M, V, and yes it's written exactly like that, don't come for me. Latvian really said "we have options" and honestly? correct. ๐ŸŒธ

๐Ÿ‡ฑ๐Ÿ‡น lt โ€” Lithuanian

  • lt โ€” Lithuanian, the plain one, no variant needed ๐Ÿ’…
  • lt(std) โ€” Lithuanian (standard)
  • lt(us) โ€” Lithuanian (US)
  • lt(ibm) โ€” Lithuanian (IBM)
  • lt(lekp) โ€” Lithuanian (LEKP)
  • lt(lekpa) โ€” Lithuanian (LEKPa)
  • lt(ratise) โ€” Lithuanian (Ratise)
  • lt(sgs) โ€” Samogitian

๐Ÿ‡ฒ๐Ÿ‡ฐ mk โ€” Macedonian

  • mk โ€” Macedonian
  • mk(nodeadkeys) โ€” Macedonian (no dead keys) โ€” for when dead keys are giving you grief ๐Ÿ˜ญ

๐Ÿ‡ฒ๐Ÿ‡พ my โ€” Malay (Jawi, Arabic Keyboard)

  • my โ€” Malay (Jawi, Arabic Keyboard)
  • my(phonetic) โ€” Malay (Jawi, phonetic)

๐Ÿ‡ฒ๐Ÿ‡น mt โ€” Maltese

  • mt โ€” Maltese
  • mt(us) โ€” Maltese (US)
  • mt(alt-us) โ€” Maltese (US, with AltGr overrides)
  • mt(alt-gb) โ€” Maltese (UK, with AltGr overrides)

๐Ÿ‡ฒ๐Ÿ‡ฉ md โ€” Moldavian

  • md โ€” Moldavian
  • md(gag) โ€” Gagauz (Moldova)

๐Ÿ‡ฒ๐Ÿ‡ณ mn โ€” Mongolian

  • mn โ€” Mongolian, that's it, one and done, no variants โœจ

๐Ÿ‡ฒ๐Ÿ‡ช me โ€” Montenegrin

  • me โ€” Montenegrin
  • me(cyrillic) โ€” Montenegrin (Cyrillic)
  • me(cyrillicyz) โ€” Montenegrin (Cyrillic, ZE and ZHE swapped)
  • me(cyrillicalternatequotes) โ€” Montenegrin (Cyrillic, with guillemets)
  • me(latinunicode) โ€” Montenegrin (Latin, Unicode)
  • me(latinyz) โ€” Montenegrin (Latin, QWERTY)
  • me(latinunicodeyz) โ€” Montenegrin (Latin, Unicode, QWERTY)
  • me(latinalternatequotes) โ€” Montenegrin (Latin, with guillemets)

๐Ÿ‡ณ๐Ÿ‡ต np โ€” Nepali

  • np โ€” Nepali, solo entry, she's lowkey iconic on her own ๐Ÿซถ

gn โ€” N'Ko (AZERTY)

  • gn โ€” N'Ko (AZERTY)

๐Ÿ‡ณ๐Ÿ‡ด no โ€” Norwegian

okay this one is stacked, bestie, buckle up ๐ŸŽ€

  • no โ€” Norwegian
  • no(nodeadkeys) โ€” Norwegian (no dead keys)
  • no(winkeys) โ€” Norwegian (Windows)
  • no(mac) โ€” Norwegian (Macintosh)
  • no(mac_nodeadkeys) โ€” Norwegian (Macintosh, no dead keys)
  • no(colemak) โ€” Norwegian (Colemak)
  • no(colemak_dh) โ€” Norwegian (Colemak-DH)
  • no(colemak_dh_wide) โ€” Norwegian (Colemak-DH Wide)
  • no(dvorak) โ€” Norwegian (Dvorak)
  • no(smi) โ€” Northern Saami (Norway)
  • no(smi_nodeadkeys) โ€” Northern Saami (Norway, no dead keys)

๐Ÿ‡ฎ๐Ÿ‡ท ir โ€” Persian

  • ir โ€” Persian
  • ir(pes_keypad) โ€” Persian (with Persian keypad) โ€” numeric keypad said "me too" ๐Ÿ”ฅ
  • ir(winkeys) โ€” Persian (Windows)
  • ir(azb) โ€” Azerbaijani (Iran)
  • ir(ku) โ€” Kurdish (Iran, Latin Q)
  • ir(ku_alt) โ€” Kurdish (Iran, Latin Alt-Q)
  • ir(ku_f) โ€” Kurdish (Iran, F)
  • ir(ku_ara) โ€” Kurdish (Iran, Arabic-Latin)

๐Ÿ‡ต๐Ÿ‡ฑ pl โ€” Polish

  • pl โ€” Polish
  • pl(legacy) โ€” Polish (legacy)
  • pl(qwertz) โ€” Polish (QWERTZ)
  • pl(dvorak) โ€” Polish (Dvorak)
  • pl(dvorak_quotes) โ€” Polish (Dvorak, with Polish quotes on quotemark key)
  • pl(dvorak_altquotes) โ€” Polish (Dvorak, with Polish quotes on key 1)
  • pl(dvp) โ€” Polish (programmer Dvorak)
  • pl(csb) โ€” Kashubian
  • pl(szl) โ€” Silesian
  • pl(ru_phonetic_dvorak) โ€” Russian (Poland, phonetic Dvorak)

๐Ÿ‡ต๐Ÿ‡น pt โ€” Portuguese

  • pt โ€” Portuguese
  • pt(nodeadkeys) โ€” Portuguese (no dead keys)
  • pt(mac) โ€” Portuguese (Macintosh)
  • pt(mac_nodeadkeys) โ€” Portuguese (Macintosh, no dead keys)
  • pt(nativo) โ€” Portuguese (Nativo)
  • pt(nativo-us) โ€” Portuguese (Nativo for US keyboards)
  • pt(nativo-epo) โ€” Esperanto (Portugal, Nativo) โ€” plot twist: Esperanto showed up ๐Ÿ‡ช๐Ÿ‡ธโœจ

๐Ÿ‡ง๐Ÿ‡ท br โ€” Portuguese (Brazil)

  • br โ€” Portuguese (Brazil)
  • br(nodeadkeys) โ€” Portuguese (Brazil, no dead keys)
  • br(dvorak) โ€” Portuguese (Brazil, Dvorak)
  • br(nativo) โ€” Portuguese (Brazil, Nativo)
  • br(nativo-us) โ€” Portuguese (Brazil, Nativo for US keyboards)
  • br(thinkpad) โ€” Portuguese (Brazil, IBM/Lenovo ThinkPad)
  • br(thinkpad_nodeadkeys) โ€” Portuguese (Brazil, IBM/Lenovo ThinkPad, no dead keys)
  • br(nativo-epo) โ€” Esperanto (Brazil, Nativo)
  • br(rus) โ€” Russian (Brazil, phonetic)

๐Ÿ‡ท๐Ÿ‡ด ro โ€” Romanian

  • ro โ€” Romanian
okay that's where this part cuts off, but ro has more variants coming, hold the thought ๐Ÿ’œ

Still in the layout list, bestie โ€” we're deep in the alphabet now and there's so much here. Keep scrolling, it's all right here ๐Ÿ’…


  • ro(std) โ€” Romanian (standard)
  • ro(winkeys) โ€” Romanian (Windows)

Okay so Russia came to serve โ€” this is the biggest cluster on the whole list, no cap ๐Ÿ‡ท๐Ÿ‡บโœจ

  • ru โ€” Russian
  • ru(phonetic) โ€” Russian (phonetic)
  • ru(phonetic_winkeys) โ€” Russian (phonetic, Windows)
  • ru(phonetic_YAZHERTY) โ€” Russian (phonetic, YAZHERTY)
  • ru(phonetic_azerty) โ€” Russian (phonetic, AZERTY)
  • ru(phonetic_dvorak) โ€” Russian (phonetic, Dvorak)
  • ru(typewriter) โ€” Russian (typewriter)
  • ru(ruchey_ru) โ€” Russian (engineering, RU)
  • ru(ruchey_en) โ€” Russian (engineering, EN)
  • ru(legacy) โ€” Russian (legacy)
  • ru(typewriter-legacy) โ€” Russian (typewriter, legacy)
  • ru(dos) โ€” Russian (DOS)
  • ru(mac) โ€” Russian (Macintosh)
  • ru(ab) โ€” Abkhazian (Russia)
  • ru(bak) โ€” Bashkirian
  • ru(cv) โ€” Chuvash
  • ru(cv_latin) โ€” Chuvash (Latin)
  • ru(xal) โ€” Kalmyk
  • ru(kom) โ€” Komi
  • ru(chm) โ€” Mari
  • ru(os_legacy) โ€” Ossetian (legacy)
  • ru(os_winkeys) โ€” Ossetian (Windows)
  • ru(srp) โ€” Serbian (Russia)
  • ru(tt) โ€” Tatar
  • ru(udm) โ€” Udmurt
  • ru(sah) โ€” Yakut
Notice how ru is doing double duty as a home base for a whole bunch of languages, not just Russian. That's the vibe โ€” one code, many friends ๐Ÿซถ

  • rs โ€” Serbian
  • rs(alternatequotes) โ€” Serbian (Cyrillic, with guillemets)
  • rs(yz) โ€” Serbian (Cyrillic, ZE and ZHE swapped)
  • rs(latin) โ€” Serbian (Latin)
  • rs(latinalternatequotes) โ€” Serbian (Latin, with guillemets)
  • rs(latinunicode) โ€” Serbian (Latin, Unicode)
  • rs(latinyz) โ€” Serbian (Latin, QWERTY)
  • rs(latinunicodeyz) โ€” Serbian (Latin, Unicode, QWERTY)
  • rs(rue) โ€” Pannonian Rusyn

  • lk โ€” Sinhala (phonetic)
  • lk(us) โ€” Sinhala (US)
  • lk(tam_unicode) โ€” Tamil (Sri Lanka, TamilNet '99)
  • lk(tam_TAB) โ€” Tamil (Sri Lanka, TamilNet '99, TAB encoding)

Slovak said "we have options" and honestly? Respect ๐ŸŽ€

  • sk โ€” Slovak
  • sk(bksl) โ€” Slovak (extra backslash)
  • sk(qwerty) โ€” Slovak (QWERTY)
  • sk(qwerty_bksl) โ€” Slovak (QWERTY, extra backslash)

  • si โ€” Slovenian
  • si(alternatequotes) โ€” Slovenian (with guillemets)
  • si(us) โ€” Slovenian (US)

  • es โ€” Spanish
  • es(nodeadkeys) โ€” Spanish (no dead keys)
  • es(deadtilde) โ€” Spanish (dead tilde)
  • es(winkeys) โ€” Spanish (Windows)
  • es(dvorak) โ€” Spanish (Dvorak)
  • es(ast) โ€” Asturian (Spain, with bottom-dot H and L)
  • es(cat) โ€” Catalan (Spain, with middle-dot L)

Latin American Spanish gets its own whole block, we love an independent queen ๐Ÿ‘‘

  • latam โ€” Spanish (Latin American)
  • latam(nodeadkeys) โ€” Spanish (Latin American, no dead keys)
  • latam(deadtilde) โ€” Spanish (Latin American, dead tilde)
  • latam(dvorak) โ€” Spanish (Latin American, Dvorak)
  • latam(colemak) โ€” Spanish (Latin American, Colemak)

  • ke โ€” Swahili (Kenya)
  • ke(kik) โ€” Kikuyu

  • tz โ€” Swahili (Tanzania)

Sweden really said "one of everything, please" ๐ŸŒธ

  • se โ€” Swedish
  • se(nodeadkeys) โ€” Swedish (no dead keys)
  • se(dvorak) โ€” Swedish (Dvorak)
  • se(us_dvorak) โ€” Swedish (Dvorak, intl.)
  • se(svdvorak) โ€” Swedish (Svdvorak)
  • se(colemak) โ€” Swedish (Colemak)
  • se(mac) โ€” Swedish (Macintosh)
  • se(us) โ€” Swedish (US)
  • se(swl) โ€” Swedish Sign Language
  • se(smi) โ€” Northern Saami (Sweden)
  • se(rus) โ€” Russian (Sweden, phonetic)

  • tw โ€” Taiwanese
  • tw(indigenous) โ€” Taiwanese (indigenous)
  • tw(saisiyat) โ€” Saisiyat (Taiwan)

  • tj โ€” Tajik
  • tj(legacy) โ€” Tajik (legacy)

  • th โ€” Thai
  • th(tis) โ€” Thai (TIS-820.2538)

And we're still going, obviously โ€” the layout list is a journey, not a destination. Next chunk coming right up ๐Ÿ’–

  • th(pat) โ€” Thai, but the Pattachote flavor
  • th(mnc) โ€” Thai, Manoonchai edition

  • bw โ€” Tswana, periodt

  • tm โ€” Turkmen
  • tm(alt) โ€” Turkmen, the Alt-Q arrangement

  • tr โ€” Turkish, the classic
  • tr(f) โ€” Turkish (F)
  • tr(e) โ€” Turkish (E)
  • tr(alt) โ€” Turkish (Alt-Q)
  • tr(intl) โ€” Turkish, international-style, with dead keys โœจ
  • tr(ku) โ€” Kurdish (Turkey, Latin Q)
  • tr(ku_f) โ€” Kurdish (Turkey, F)
  • tr(ku_alt) โ€” Kurdish (Turkey, Latin Alt-Q)

  • ua โ€” Ukrainian, standard issue ๐Ÿ’™๐Ÿ’›
  • ua(phonetic) โ€” Ukrainian (phonetic)
  • ua(typewriter) โ€” Ukrainian (typewriter), very vintage-girl of it
  • ua(winkeys) โ€” Ukrainian (Windows)
  • ua(winkeysenhanced) โ€” Ukrainian (Windows Enhanced)
  • ua(macOS) โ€” Ukrainian (macOS)
  • ua(legacy) โ€” Ukrainian (legacy)
  • ua(homophonic) โ€” Ukrainian (homophonic)
  • ua(crh) โ€” Crimean Tatar (Turkish Q)
  • ua(crh_f) โ€” Crimean Tatar (Turkish F)
  • ua(crh_alt) โ€” Crimean Tatar (Turkish Alt-Q)

  • pk โ€” Urdu (Pakistan)
  • pk(urd-crulp) โ€” Urdu (Pakistan, CRULP)
  • pk(urd-nla) โ€” Urdu (Pakistan, NLA)
  • pk(pak_urdu_phonetic) โ€” Urdu (Pak Urdu Phonetic)
  • pk(ara) โ€” Arabic (Pakistan)
  • pk(snd) โ€” Sindhi (M.B. Sindhi)
  • pk(brahui) โ€” Brahui (Pakistan)

  • uz โ€” Uzbek
  • uz(latin) โ€” Uzbek (Latin)

  • vn โ€” Vietnamese
  • vn(us) โ€” Vietnamese (US)
  • vn(fr) โ€” Vietnamese (France) ๐Ÿฅ–

  • sn โ€” Wolof

  • custom โ€” the user-defined custom Layout, aka you get to be the main character and build your own ๐ŸŽ€
fr fr bestie, that custom one is the one you pick when the built-in layouts just aren't giving what you need โ€” and yeah, it's literally called custom, no cap ๐Ÿ’…

โœจ OPTIONS โœจ

Okay bestie, this is the part where things get spicy โ€” the options list ๐Ÿ’…. Every one of these goes in as a value for XkbOptions (or the options field of your layout if you're doing the custom-layout thing), and they're how you tell your keyboard to do the little tricks you actually want. Not a summary of any of it, no skipping, we're going all the way through ๐Ÿซถ.


๐ŸŽ€ Switching to another layout

Your main character move: one key (or combo) and boom, you're in a whole different layout. Group switching, but make it fashion โœจ.

  • grp:switch โ€” Right Alt, but only while it's pressed ๐ŸŽ€
  • grp:lswitch โ€” Left Alt, while pressed
  • grp:lwin_switch โ€” Left Win, while pressed
  • grp:rwin_switch โ€” Right Win, while pressed
  • grp:win_switch โ€” Any Win key, while pressed
  • grp:menu_switch โ€” Menu, while pressed โ€” and Shift+Menu for the actual Menu
  • grp:caps_switch โ€” Caps Lock, while pressed โ€” with Alt+Caps Lock giving you the original Caps Lock action back ๐Ÿ™ˆ
  • grp:rctrl_switch โ€” Right Ctrl, while pressed
  • grp:toggle โ€” Right Alt (toggle, bestie โ€” not hold)
  • grp:lalt_toggle โ€” Left Alt
  • grp:caps_toggle โ€” Caps Lock
  • grp:shift_caps_toggle โ€” Shift+Caps Lock
  • grp:caps_select โ€” Caps Lock goes to the first layout; Shift+Caps Lock goes to the second layout
  • grp:win_menu_select โ€” Left Win โ†’ first layout; Right Win/Menu โ†’ second layout
  • grp:ctrl_select โ€” Left Ctrl โ†’ first layout; Right Ctrl โ†’ second layout
  • grp:alt_caps_toggle โ€” Alt+Caps Lock
  • grp:shifts_toggle โ€” Both Shifts together, iconic
  • grp:alts_toggle โ€” Both Alts together
  • grp:alt_altgr_toggle โ€” Both Alts together, and AltGr all by itself picks the third level
  • grp:ctrls_toggle โ€” Both Ctrls together
  • grp:ctrl_shift_toggle โ€” Ctrl+Shift
  • grp:lctrl_lshift_toggle โ€” Left Ctrl+Left Shift
  • grp:rctrl_rshift_toggle โ€” Right Ctrl+Right Shift
  • grp:ctrl_shift_toggle_bidir โ€” Left Ctrl+Left Shift goes to the previous layout, Right Ctrl + Right Shift goes to the next one ๐Ÿ”ฅ
  • grp:ctrl_alt_toggle โ€” Alt+Ctrl
  • grp:lctrl_lalt_toggle โ€” Left Alt+Left Ctrl
  • grp:rctrl_ralt_toggle โ€” Right Alt+Right Ctrl
  • grp:ctrl_alt_toggle_bidir โ€” Left Ctrl+Left Alt โ†’ previous layout, Right Ctrl + Right Alt โ†’ next layout
  • grp:alt_shift_toggle โ€” Alt+Shift
  • grp:lalt_lshift_toggle โ€” Left Alt+Left Shift
  • grp:ralt_rshift_toggle โ€” Right Alt+Right Shift
  • grp:alt_shift_toggle_bidir โ€” Left Alt+Left Shift โ†’ previous layout, Right Alt + Right Shift โ†’ next layout
  • grp:menu_toggle โ€” Menu
  • grp:lwin_toggle โ€” Left Win
  • grp:alt_space_toggle โ€” Alt+Space
  • grp:win_space_toggle โ€” Win+Space
  • grp:ctrl_space_toggle โ€” Ctrl+Space
  • grp:rwin_toggle โ€” Right Win
  • grp:lshift_toggle โ€” Left Shift
  • grp:rshift_toggle โ€” Right Shift
  • grp:lctrl_toggle โ€” Left Ctrl
  • grp:rctrl_toggle โ€” Right Ctrl
  • grp:sclk_toggle โ€” Scroll Lock
  • grp:lctrl_lwin_rctrl_menu โ€” Ctrl+Left Win โ†’ first layout; Ctrl+Menu โ†’ second layout
  • grp:lctrl_lwin_toggle โ€” Left Ctrl+Left Win

๐ŸŒธ Key to choose the 2nd level

Just the one legend here, and honestly? She ate ๐Ÿ“

  • lv2:lsgt_switch โ€” The "< >" key

๐Ÿฆ‹ Key to choose the 3rd level

This is the AltGr situation, basically. Third level, third vibe, third slay ๐Ÿ‘‘

  • lv3:switch โ€” Right Ctrl
  • lv3:menu_switch โ€” Menu
  • lv3:win_switch โ€” Any Win
  • lv3:lwin_switch โ€” Left Win
  • lv3:rwin_switch โ€” Right Win
  • lv3:alt_switch โ€” Any Alt
  • lv3:lalt_switch โ€” Left Alt
  • lv3:ralt_switch โ€” Right Alt
  • lv3:ralt_switch_multikey โ€” Right Alt, and Shift+Right Alt acts as Compose
  • lv3:ralt_alt โ€” Right Alt never chooses the 3rd level, periodt
  • lv3:enter_switch โ€” Enter on the keypad
  • lv3:caps_switch โ€” Caps Lock
  • lv3:caps_switch_capslock_with_ctrl โ€” Caps Lock, and Ctrl+Caps Lock gives you the original Caps Lock action
  • lv3:bksl_switch โ€” Backslash
  • lv3:lsgt_switch โ€” The "< >" key
  • lv3:caps_switch_latch โ€” Caps Lock; acts as a onetime lock when it's pressed together with another 3rd-level chooser ๐ŸŽ€
  • lv3:bksl_switch_latch โ€” Backslash; acts as a onetime lock when pressed together with another 3rd level chooser
  • lv3:lsgt_switch_latch โ€” The "< >" key; acts as a onetime lock when pressed together with another 3rd level chooser

๐Ÿ’œ Ctrl position

Where does Ctrl live in your heart? These options move it around, swap it, promote it, the whole glow-up ๐Ÿ’…

  • ctrl:nocaps โ€” Caps Lock as Ctrl
  • ctrl:lctrl_meta โ€” Left Ctrl as Meta
  • ctrl:swapcaps โ€” Swap Ctrl and Caps Lock
  • ctrl:grouptoggle_capscontrol โ€” Caps Lock as Ctrl, and Left Control switches to another layout
  • ctrl:hyper_capscontrol โ€” Caps Lock as Ctrl, Ctrl as Hyper
  • ctrl:ac_ctrl โ€” To the left of "A"
  • ctrl:aa_ctrl โ€” At the bottom left
  • ctrl:rctrl_ralt โ€” Right Ctrl as Right Alt
  • ctrl:ralt_rctrl โ€” Right Alt as Right Control
  • ctrl:menu_rctrl โ€” Menu as Right Ctrl
  • ctrl:swap_lalt_lctl โ€” Swap Left Alt with Left Ctrl
  • ctrl:swap_ralt_rctl โ€” Swap Right Alt with Right Ctrl
  • ctrl:swap_lwin_lctl โ€” Swap Left Win with Left Ctrl
  • ctrl:swap_rwin_rctl โ€” Swap Right Win with Right Ctrl
  • ctrl:swap_lalt_lctl_lwin โ€” Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt โ€” the full three-way trade, obsessed ๐Ÿ’€

๐Ÿ’ก Use keyboard LED to show alternative layout

okay so your keyboard has lil lights on it and you can make them do double duty โ€” press the LED to peep which layout group you're on โœจ

  • grp_led:num โ€” Num Lock
  • grp_led:caps โ€” Caps Lock
  • grp_led:scroll โ€” Scroll Lock

๐ŸŽ€ Use keyboard LED to indicate modifiers

same vibe, but the LED is telling you a modifier is currently held down ๐Ÿซถ

  • mod_led:compose โ€” Compose

๐Ÿ”ข Layout of numeric keypad

the numpad is having a whole identity crisis and honestly? valid. pick your fave ๐Ÿ’…

  • keypad:legacy โ€” Legacy
  • keypad:oss โ€” Unicode arrows and math operators
  • keypad:future โ€” Unicode arrows and math operators on default level
  • keypad:legacy_wang โ€” Legacy Wang 724
  • keypad:oss_wang โ€” Wang 724 keypad with Unicode arrows and math operators
  • keypad:future_wang โ€” Wang 724 keypad with Unicode arrows and math operators on default level
  • keypad:hex โ€” Hexadecimal
  • keypad:atm โ€” Phone and ATM style

๐Ÿ—‘๏ธ Numeric keypad Delete behavior

this one is about that one key on the numpad โ€” you know the one โ€” and what it actually spits out ๐Ÿ˜ญ

  • kpdl:dot โ€” Legacy key with dot
  • kpdl:comma โ€” Legacy key with comma
  • kpdl:dotoss โ€” Four-level key with dot
  • kpdl:dotoss_latin9 โ€” Four-level key with dot, Latin-9 only
  • kpdl:commaoss โ€” Four-level key with comma
  • kpdl:momayyezoss โ€” Four-level key with momayyez
  • kpdl:kposs โ€” Four-level key with abstract separators
  • kpdl:semi โ€” Semicolon on third level

๐Ÿ‘‘ Caps Lock behavior

the main character of this entire page, no cap. Caps Lock can be literally anything you want โ€” a Shift, an Esc, a Super, a whole menu button. go wild bestie ๐Ÿ”ฅ

  • caps:internal โ€” Caps Lock uses internal capitalization; Shift "pauses" Caps Lock
  • caps:internal_nocancel โ€” Caps Lock uses internal capitalization; Shift does not affect Caps Lock
  • caps:shift โ€” Caps Lock acts as Shift with locking; Shift "pauses" Caps Lock
  • caps:shift_nocancel โ€” Caps Lock acts as Shift with locking; Shift does not affect Caps Lock
  • caps:capslock โ€” Caps Lock toggles normal capitalization of alphabetic characters
  • caps:shiftlock โ€” Caps Lock toggles Shift Lock (affects all keys)
  • caps:swapescape โ€” Swap Esc and Caps Lock
  • caps:escape โ€” Make Caps Lock an additional Esc
  • caps:escape_shifted_capslock โ€” Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock
  • caps:backspace โ€” Make Caps Lock an additional Backspace
  • caps:return โ€” Make Caps Lock an additional Return key
  • caps:super โ€” Make Caps Lock an additional Super
  • caps:hyper โ€” Make Caps Lock an additional Hyper
  • caps:menu โ€” Make Caps Lock an additional Menu key
  • caps:numlock โ€” Make Caps Lock an additional Num Lock
  • caps:ctrl_shifted_capslock โ€” Make Caps Lock an additional Ctrl and Shift + Caps Lock the regular Caps Lock
  • caps:shift_shifted_capslock โ€” Make Caps Lock an additional Shift and Shift + Caps Lock the regular Caps Lock
  • caps:ctrl_modifier โ€” Make Caps Lock act as an additional Ctrl modifier, but keep identifying as Caps Lock
  • caps:digits_row โ€” Caps Lock gives digits on the digits row (Azerty layouts)
  • caps:digits_row_independent_lock โ€” Shift + Caps locks the digits on the digits row, Caps Lock alone behaves as usual (Azerty layouts)
  • caps:none โ€” Caps Lock is disabled

๐ŸŒธ Num Lock behavior

and finally, Num Lock gets to choose its own destiny too ๐Ÿฆ‹

  • numpad:numlock_only โ€” NumLock enables digits; Shift does not interact with NumLock
  • numpad:pc โ€” Shift and NumLock each enable digits; both together cancel (as in Classic XKB)
  • numpad:microsoft โ€” NumLock enables digits; Shift cancels NumLock but never enables digits (as in Windows)
  • numpad:mac โ€” Numeric keypad is independent of the NumLock state (as in macOS)
  • numpad:shift3 โ€” NumLock enables digits; NumLock+Shift enables auxiliary symbols when available, digits otherwise

โœจ Alt and Win behavior

okay so this is the group of options for everyone who's ever looked at their keyboard and gone "why is Alt like that" ๐Ÿ˜ญ these remap what Alt / Win / Meta / Menu / Super actually do, bestie:

  • altwin:menu โ€” gives the Menu key its standard behavior back
  • altwin:menu_win โ€” Menu is mapped to Win
  • altwin:meta_alt โ€” Alt and Meta both live on Alt
  • altwin:alt_win โ€” Alt is mapped to Win, plus the usual Alt stays put
  • altwin:ctrl_win โ€” Ctrl is mapped to Win, plus the usual Ctrl stays put
  • altwin:ctrl_rwin โ€” Ctrl is mapped to Right Win, plus the usual Ctrl stays put
  • altwin:ctrl_alt_win โ€” Ctrl is mapped to Alt, and Alt is mapped to Win
  • altwin:meta_win โ€” Meta is mapped to Win
  • altwin:left_meta_win โ€” Meta is mapped to Left Win
  • altwin:hyper_win โ€” Hyper is mapped to Win
  • altwin:alt_super_win โ€” Alt is mapped to Right Win, and Super is mapped to Menu
  • altwin:swap_lalt_lwin โ€” Left Alt and Left Win swap places ๐Ÿ”„
  • altwin:swap_ralt_rwin โ€” Right Alt and Right Win swap places ๐Ÿ”„
  • altwin:swap_alt_win โ€” Alt swaps with Win
  • altwin:prtsc_rwin โ€” Win is mapped to PrtSc, and the usual Win stays put

โœจ Position of Compose key

where do you want your Compose key to live, babe? pick a spot ๐Ÿ’… the -altgr versions mean it's on the 3rd level of that key:

  • compose:ralt โ€” Right Alt
  • compose:lwin โ€” Left Win
  • compose:lwin-altgr โ€” 3rd level of Left Win
  • compose:rwin โ€” Right Win
  • compose:rwin-altgr โ€” 3rd level of Right Win
  • compose:menu โ€” Menu
  • compose:menu-altgr โ€” 3rd level of Menu
  • compose:lctrl โ€” Left Ctrl
  • compose:lctrl-altgr โ€” 3rd level of Left Ctrl
  • compose:rctrl โ€” Right Ctrl
  • compose:rctrl-altgr โ€” 3rd level of Right Ctrl
  • compose:caps โ€” Caps Lock
  • compose:caps-altgr โ€” 3rd level of Caps Lock
  • compose:102 โ€” the < > key
  • compose:102-altgr โ€” 3rd level of the < > key
  • compose:paus โ€” Pause
  • compose:ins โ€” Insert
  • compose:prsc โ€” PrtSc
  • compose:sclk โ€” Scroll Lock

โœจ Compatibility options

the nostalgia corner ๐Ÿซถ these are the "make it work like the old days / like some other system" options โ€” and bestie, read the fine print, because a bunch of them conflict with other modifiers and that's not a vibe:

  • hyper:mod2 โ€” maps Hyper to Mod2 (conflict with NumLock ๐Ÿ˜ฌ)
  • hyper:mod3 โ€” maps Hyper to Mod3 (conflict with LevelFive ๐Ÿ˜ฌ)
  • hyper:mod4 โ€” maps Hyper to Mod4 (conflict with Super ๐Ÿ˜ฌ)
  • hyper:mod5 โ€” maps Hyper to Mod5 (conflict with LevelThree ๐Ÿ˜ฌ)
  • meta:mod2 โ€” maps Meta to Mod2 (conflict with NumLock ๐Ÿ˜ฌ)
  • meta:mod3 โ€” maps Meta to Mod3 (conflict with LevelFive ๐Ÿ˜ฌ)
  • meta:mod4 โ€” maps Meta to Mod4 (conflict with Super ๐Ÿ˜ฌ)
  • meta:mod5 โ€” maps Meta to Mod5 (conflict with LevelThree ๐Ÿ˜ฌ)
  • scrolllock:mod3 โ€” maps Scroll Lock to Mod3
  • srvrkeys:none โ€” special keys (Ctrl+Alt+<key>) get handled in a server
  • apple:alupckeys โ€” Apple Aluminium keyboards emulate Pause, PrtSc and Scroll Lock
  • apple:jp_oadg109a โ€” Japanese Apple keyboards emulate the OADG109A backslash
  • apple:jp_pc106 โ€” Japanese Apple keyboards emulate the PC106 backslash
  • shift:breaks_caps โ€” Shift cancels Caps Lock
  • misc:typo โ€” enables extra typographic characters โœจ
  • misc:apl โ€” enables APL overlay characters
  • shift:both_capslock โ€” both Shifts together enable Caps Lock
  • shift:both_capslock_cancel โ€” both Shifts together enable Caps Lock, and one Shift key disables it
  • shift:both_shiftlock โ€” both Shifts together enable Shift Lock
  • keypad:pointerkeys โ€” Shift + Num Lock enables PointerKeys
  • grab:break_actions โ€” allows breaking grabs with keyboard actions
โš ๏ธ okay real talk for a sec: grab:break_actions comes with a security risk warning attached. The manpage says it, i'm saying it, it's giving "do not casually ship this" ๐Ÿ’€
  • grab:debug โ€” allows grab and window tree logging

โœจ Currency signs

getting that bag ๐Ÿ’ธ literally โ€” here's where to stash your Euro and Rupee:

  • eurosign:e โ€” Euro on E, third level
  • eurosign:E โ€” Euro on E, fourth level
  • eurosign:2 โ€” Euro on 2
  • eurosign:4 โ€” Euro on 4
  • eurosign:5 โ€” Euro on 5
  • rupeesign:4 โ€” Rupee on 4

โœจ Key to choose the 5th level

fifth level?? yes bestie, keyboards go deeper than you think ๐Ÿ‘‘ these pick which key unlocks level 5, and the _lock ones also act as a one-time lock if you press them together with another 5th-level chooser:

  • lv5:caps_switch โ€” Caps Lock chooses the 5th level
  • lv5:lsgt_switch โ€” the < > key chooses the 5th level
  • lv5:ralt_switch โ€” Right Alt chooses the 5th level
  • lv5:menu_switch โ€” Menu chooses the 5th level
  • lv5:rctrl_switch โ€” Right Ctrl chooses the 5th level
  • lv5:lsgt_switch_lock โ€” the < > key chooses the 5th level and acts as a one-time lock if pressed with another 5th level chooser
  • lv5:ralt_switch_lock โ€” Right Alt chooses the 5th level and acts as a one-time lock if pressed with another 5th level chooser
  • lv5:lwin_switch_lock โ€” Left Win chooses the 5th level and acts as a one-time lock if pressed with another 5th level chooser
  • lv5:rwin_switch_lock โ€” Right Win chooses the 5th level and acts as a one-time lock if pressed with another 5th level chooser

โœจ Non-breaking space input

okay so this one is all about the humble space bar and its โœจfancyโœจ cousins โ€” non-breaking space, thin non-breaking space, zero-width non-joiner, zero-width joiner. pick your flavor at whatever level you want, bestie:

  • nbsp:none โ€” the usual space at any level
  • nbsp:level2 โ€” non-breaking space at the 2nd level
  • nbsp:level3 โ€” non-breaking space at the 3rd level
  • nbsp:level3n โ€” non-breaking space at the 3rd level, thin non-breaking space at the 4th level
  • nbsp:level4 โ€” non-breaking space at the 4th level
  • nbsp:level4n โ€” non-breaking space at the 4th level, thin non-breaking space at the 6th level
  • nbsp:level4nl โ€” non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)
  • nbsp:zwnj2 โ€” zero-width non-joiner at the 2nd level
  • nbsp:zwnj2zwj3 โ€” zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level
  • nbsp:zwnj2zwj3nb4 โ€” zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level
  • nbsp:zwnj2nb3 โ€” zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level
  • nbsp:zwnj2nb3zwj4 โ€” zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level
  • nbsp:zwnj2nb3nnb4 โ€” zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level
  • nbsp:zwnj3zwj4 โ€” zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level

that's a lot of invisible characters, i know ๐Ÿ˜ญ but like. some languages literally need them. respect it ๐Ÿ’…


๐ŸŒธ Japanese keyboard options

  • japan:kana_lock โ€” the Kana Lock key is locking
  • japan:nicola_f_bs โ€” NICOLA-F style Backspace
  • japan:hztg_escape โ€” make Zenkaku Hankaku an additional Esc

๐ŸŽ€ Korean Hangul/Hanja keys

  • korean:ralt_hangul โ€” make right Alt a Hangul key
  • korean:rctrl_hangul โ€” make right Ctrl a Hangul key
  • korean:ralt_hanja โ€” make right Alt a Hanja key
  • korean:rctrl_hanja โ€” make right Ctrl a Hanja key

๐Ÿฆ‹ Esperanto letters with superscripts

okay this is so niche and i'm obsessed โ€” it puts those Esperanto letters with superscripts at the corresponding key depending on which layout you're running:

  • esperanto:qwerty โ€” at the corresponding key in a QWERTY layout
  • esperanto:dvorak โ€” at the corresponding key in a Dvorak layout
  • esperanto:colemak โ€” at the corresponding key in a Colemak layout

๐Ÿ’œ Old Solaris keycodes compatibility

  • solaris:sun_compat โ€” Sun key compatibility

๐Ÿ’€ Key sequence to kill the X server

  • terminate:ctrl_alt_bksp โ€” Ctrl+Alt+Backspace
bestie, lowkey be careful with this one โ€” this is the "oops i nuked my whole X session" combo. historic. iconic. dangerous. ๐Ÿซถ

โญ Function keys

  • fkeys:basic_13-24 โ€” use F13-F24 as usual function keys

๐ŸŒˆ Miscellaneous options

  • custom:types โ€” use user-defined custom XKB types

๐Ÿงš FILES

here's where all the goods live, one per bullet, no cap:

  • /usr/share/xkeyboard-config-2/compat
  • /usr/share/xkeyboard-config-2/compiled
  • /usr/share/xkeyboard-config-2/geometry
  • /usr/share/xkeyboard-config-2/keycodes
  • /usr/share/xkeyboard-config-2/keymap
  • /usr/share/xkeyboard-config-2/rules
  • /usr/share/xkeyboard-config-2/semantics
  • /usr/share/xkeyboard-config-2/symbols
  • /usr/share/xkeyboard-config-2/types

๐ŸŒŸ SEE ALSO

  • setxkbmap(1) โ€” the actual tool that makes all of this happen, go read it next fr fr

and that's the whole page, bestie, we made it to the end ๐ŸŽ‰ go forth and have the most correct keyboard in the group chat ๐Ÿ’–

ciao for now โ€” this was X Version 11, xkeyboard-config 2.49, page XKEYBOARD-CONFIG(7) โœจ slay.

๐Ÿ“ฆ where this page comes from