Skip to main content

a cross-platform Keyboard Layout Maker

Project description

A text-based, cross-platform Keyboard Layout Maker.

Install

All you need is a Python environment:

pip install kalamine

If you get a UnicodeEncodeError on Windows, try specifying this environment variable before executing Kalamine:

$Env:PYTHONUTF8 = 1

Layout Generation

Draw your keyboard layout in one of the provided ASCII-art templates and include it in a TOML document:

name = "qwerty-ansi"
name8 = "q-ansi"
description = "QWERTY-US layout"
version = "1.0.0"
geometry = "ANSI"

base = '''
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓
│ ~   │ !   │ @   │ #   │ $   │ %   │ ^   │ &   │ *   │ (   │ )   │ _   │ +   ┃          ┃
│ `   │ 1   │ 2   │ 3   │ 4   │ 5   │ 6   │ 7   │ 8   │ 9   │ 0   │ -   │ =   ┃ ⌫        ┃
┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┯━━━━━━━┩
┃        ┃ Q   │ W   │ E   │ R   │ T   │ Y   │ U   │ I   │ O   │ P   │ {   │ }   │ |     │
┃ ↹      ┃     │     │     │     │     │     │     │     │     │     │ [   │ ]   │ \     │
┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┲━━━━┷━━━━━━━┪
┃         ┃ A   │ S   │ D   │ F   │ G   │ H   │ J   │ K   │ L   │ :   │ "   ┃            ┃
┃ ⇬       ┃     │     │     │     │     │     │     │     │     │ ;   │ '   ┃ ⏎          ┃
┣━━━━━━━━━┻━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┻━━━━━━━━━━━━┫
┃            ┃ Z   │ X   │ C   │ V   │ B   │ N   │ M   │ <   │ >   │ ?   ┃               ┃
┃ ⇧          ┃     │     │     │     │     │     │     │ ,   │ .   │ /   ┃ ⇧             ┃
┣━━━━━━━┳━━━━┻━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫
┃       ┃       ┃       ┃                                ┃       ┃       ┃       ┃       ┃
┃ Ctrl  ┃ super ┃ Alt   ┃ ␣                              ┃ Alt   ┃ super ┃ menu  ┃ Ctrl  ┃
┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛
'''

Build it:

kalamine layouts/ansi.toml

Get all keyboard drivers:

dist/
 ├─ q-ansi.klc         # Windows
 ├─ q-ansi.keylayout   # macOS
 ├─ q-ansi.xkb         # Linux (user)
 ├─ q-ansi.xkb_custom  # Linux (root)
 └─ q-ansi.json        # web

You can also ask for a single target by specifying the file extension:

kalamine ansi.toml --out q-ansi.xkb_custom

Layout Emulation

Your layout can be emulated in a browser — including dead keys and an AltGr layer, if any.

$ kalamine layouts/prog.toml --watch
Server started: http://localhost:8080

Open your browser, type in the input area, test your layout. Changes on your TOML file are not auto-detected yet, you’ll have to refresh the page manually.

watch.png

Press Ctrl-C when you’re done, and kalamine will write all platform-specific files.

Layout Installation

Windows

  • get a keyboard layout installer: MSKLC (freeware) or KbdEdit (shareware);

  • load the *.klc file with it;

  • run this installer to generate a setup program;

  • run the setup program;

  • the keyboard layout appears in the language bar.

macOS

  • copy your *.keylayout file into:

    • either ~/Library/Keyboard Layouts for the current user only,

    • or /Library/Keyboard Layouts for all users;

  • restart your session;

  • the keyboard layout appears in the “Language and Text” preferences, “Input Methods” tab.

Linux (root)

Recent versions of XKB allow one custom keyboard layout in root space:

sudo cp layout.xkb_custom /usr/share/X11/xkb/symbols/custom

Your keyboard layout will be listed as “Custom” in the keyboard settings.

On Xorg you can also select your keyboard layout from the command line:

setxkbmap custom  # select your keyboard layout
setxkbmap us      # get back to QWERTY

Linux (user)

On Linux, if the xkb/symbols/custom hack can’t be used, *.xkb keyboard descriptions can be applied in user-space with xkbcomp:

xkbcomp -w10 layout.xkb $DISPLAY

This has limitations:

  • the keyboard layout won’t show up in the keyboard settings

  • media keys might stop working

  • unlikely to work on Wayland

Again, setxkbmap can be used to get back to the standard us-qwerty layout:

setxkbmap us

XKalamine

xkalamine is a Linux-specific CLI tool for managing keyboard layouts with XKB.

# Apply a keyboard layout in user-space
# (equivalent to `xkbcomp -w10 layout.xkb $DISPLAY`)
xkalamine apply layout.toml

# Install a keyboard layout into /usr/share/X11/xkb
sudo xkalamine install layout.toml

# Uninstall Kalamine layouts from /usr/share/X11/xkb
sudo xkalamine remove us/prog     # remove the kalamine 'prog' layout
sudo xkalamine remove fr          # remove all kalamine layouts for French
sudo xkalamine remove "*"         # remove all kalamine layouts

# List available keyboard layouts
xkalamine list                    # list all kalamine layouts
xkalamine list fr                 # list all kalamine layouts for French
xkalamine list us --all           # list all layouts for US English
xkalamine list --all              # list all layouts, ordered by locale

Using xkalamine with sudo currently supposes kalamine has been installed as root (hopefully in a pyenv). Which really sucks, and we’re working on a better solution.

XKB is a tricky piece of software. The following resources might be helpful if you want to dig in:

Alternative

https://github.com/39aldo39/klfc

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kalamine-0.17.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

kalamine-0.17-py3-none-any.whl (37.9 kB view details)

Uploaded Python 3

File details

Details for the file kalamine-0.17.tar.gz.

File metadata

  • Download URL: kalamine-0.17.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for kalamine-0.17.tar.gz
Algorithm Hash digest
SHA256 4247b00e80329c5f6370404320b9f06775813dc316b4c67f55d38af6fb0ef173
MD5 b5cfe292fabf7d0521148bb2fb6b2273
BLAKE2b-256 86b399be9af07938a2bac63eb84db38348ef988ea535762159682cfa745bdd77

See more details on using hashes here.

File details

Details for the file kalamine-0.17-py3-none-any.whl.

File metadata

  • Download URL: kalamine-0.17-py3-none-any.whl
  • Upload date:
  • Size: 37.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for kalamine-0.17-py3-none-any.whl
Algorithm Hash digest
SHA256 142d84b002641deeed007d38e4d1c0bdb0609fbe32083e5c3af7fcd6970a0c89
MD5 9ca92b4128e9029cc657341cfa02a4b0
BLAKE2b-256 bd4d21359b5e665b9f61678129bf4e8b83f922476dd1effd393a0bce64474ec9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page