3 releases

new 0.1.2 May 1, 2025
0.1.1 Apr 30, 2025
0.1.0 Apr 29, 2025

#179 in Hardware support

Download history 133/week @ 2025-04-25

133 downloads per month

MIT license

105KB
2K SLoC

okey

crates.io Build License: MIT Stars

okey

An advanced, easy-to-use key remapper for Linux written in Rust, inspired by QMK.

[!NOTE] This project is currently in its early stages of development. A more comprehensive documentation will be available soon.

Contents

  1. Features
  2. Installation
  3. Usage
  4. Configuration Schema
  5. License

Features

[!TIP] Click on the feature to expand the example configuration.

Easy-to-use: designed to be used as a systemd service, configured using simple YAML with IDE support (see schema).
# yaml-language-server: $schema=https://raw.githubusercontent.com/luckasRanarison/okey/refs/heads/master/schema/okey.json

keyboards:
  - name: "My keyboard"

    keys:
      KEY_X: KEY_Y

    combos:
      - keys: [KEY_D, KEY_F]
        action: KEY_LEFTCTRL

    tap_dances:
      KEY_CAPSLOCK:
        tap: KEY_TAB
        hold: KEY_MOMLAYER

    layers:
      momentary:
        modifier: KEY_MOMLAYER

        keys:
          KEY_O: KEY_K
Key remapping: change the default global key actions.
keyboards:
  - name: My keyboard

    keys:
      KEY_CAPSLOCK: KEY_TAB
      KEY_TAB: CUSTOM_KEYCODE # can be used to activate a layer or to trigger other actions
Macros: execute arbitrary key sequences with a single key stroke.
keyboards:
  - name: My keyboard

    keys:
      KEY_F1: [KEY_H, KEY_E, KEY_L, KEY_L, KEY_O] # executes simple key sequences (press + release)
      KEY_F2: { string: "Hi, you!" } # inserts an ASCII string
      KEY_F3: { env: FOO } # inserts the value of the environment variable
      KEY_F4: { unicode: 🙂👍 } # inserts unicode characters using CTRL + SHIFT + U + <code> + ENTER
      KEY_F5: { shell: "echo 'foo'", trim: true } # inserts shell script output

      KEY_F6: [
          { press: KEY_O },
          { hold: KEY_O },
          { delay: 1000 },
          { release: KEY_O },
          KEY_K, # press + release
        ] # executes detailed key sequences

      KEY_F7: [{ env: USERNAME }, { string: "@gmail.com" }] # all types of macro are composable
Combos: trigger an action when two or more keys are pressed simultaneously.
keyboards:
  - name: My keyboard

    combos:
      - keys: [KEY_D, KEY_F]
        action: LEFT_CTRL
Tap dance: overload keys by binding different actions when a key is pressed or held down.
keyboards:
  - name: My keyboard

    tap_dances:
      tap: KEY_S
      hold: KEY_LEFTSHIFT
      timeout: 250 # (default: 200ms)
Virtual layers: create custom layers, similar to holding Shift. It supports momentary, toggle and oneshoot layers.
keyboards:
  - name: "My keyboard"

    keys:
      KEY_TAB: KEY_ONELAYER # a custom keycode to activate the layer below

    tap_dances:
      KEY_CAPSLOCK:
        tap: KEY_TAB
        hold: KEY_MOMLAYER

    layers:
      momentary:
        modifier: KEY_MOMLAYER # type is momentary by default, active on hold

        keys:
          KEY_X: KEY_Y

      one:
        modifier:
          key: KEY_ONELAYER
          type: oneshoot # active for one keypress

        keys:
          KEY_O: KEY_K

      toggle:
        modifier:
          key: KEY_F12
          type: toggle # active until switched off

        keys:
          KEY_K: KEY_O

[!NOTE] The features are composable. For example, you can use a combo to trigger a tap dance.

Installation

[!IMPORTANT] The Rust toolchain is required to build the project.

There are currently no packaged binaries for specific distros, but you can download okey from the releases for install it with cargo:

cargo install okey-cli

You can also build the project from source using the following commands:

git clone --depth 1 https://github.com/luckasRanarison/okey/
cd okey && cargo install --path .

Usage

okey is designed to be used as a systemd service. It expects a configuration file at ~/.config/okey/config.yaml when installed at the user level, or at /etc/okey/config.yaml when installed with root priviledges (see the schema).

For simple testing, you can use the start command to activate keymaps.

okey start # using ~/.config/okey/config.yaml
okey start --config ./path/to/config/okey.yaml
okey start --config ./path/to/config/okey.yaml --daemon # to run as a daemon in the background

To use okey as sysmted a service at the user level, you can use the following commands:

okey.service (expand)
[Unit]
Description=Okey Service

[Service]
ExecStart=/usr/bin/okey start --systemd
Restart=on-failure
StandardOutput=journal
StandardError=journal
Nice=-20

[Install]
WantedBy=multi-user.target
okey service install # creates the okey.service file at ~/.config/systemd/
okey service start # shorthand for systemctl --user enable okey && systemctl --user start okey

okey service stop # shorthand for systemctl --user stop okey && systemctl --user disable okey
okey service restart # shorthand for systemctl --user restart okey
okey service status # shorthand for systemctl --user status okey
okey service uninstall # disables the service and remove the okey.service file

But to get access to higher priority settings and capabilities, it is recommended to install okey at the root level.

okey.service (expand)
[Unit]
Description=Okey Service

[Service]
ExecStart=/usr/bin/okey start --systemd
Restart=on-failure
StandardOutput=journal
StandardError=journal
Nice=-20
CPUSchedulingPolicy=rr
CPUSchedulingPriority=99
IOSchedulingClass=realtime
IOSchedulingPriority=0

[Install]
WantedBy=multi-user.target
sudo okey service install # creates the okey.service file at /etc/systemd/system/
sudo okey service start # shorthand for systemctl enable okey && systemctl start okey

Use okey --help to see all the available commands.

Configuration Schema

The configuration for okey is written in YAML, it defines how okey remaps keys and sets up advanced behaviors. Check out the examples folder for practical use cases.

[!TIP] If you are using yaml-language-server, you can get autocompletion and IDE support by adding the following at the top of your file:

# yaml-language-server: $schema=https://raw.githubusercontent.com/luckasRanarison/okey/refs/heads/master/schema/okey.json

Here's a breakdown of the schema:

defaults (optional)

Shared global settings, fields:

general

  • deferred_key_delay: Delay for keys following non-acknowledged special keys.

    Type: number

    Default: 10 (ms)

  • unicode_input_delay: Delay for inserting unicode codepoints with macro. (flushing)

    Type: number

    Default: 50 (ms)

  • event_poll_timeout: Controls the main event loop interval.

    Type: number

    Default: 1 (ms)

tap_dance

  • default_timeout: Fallback tap dance timeout.

    Type: number

    Default: 200 (ms)

combo

  • default_threshold: Window for acknowledging combos.

    Type: number

    Default: 50 (ms)

keyboards (array)

Per keyboard configuration.

Type aliases:

KeyCode (expand)

KeyCode

Shifted keycodes (expand)
  • KEY_EXCLAMATION
  • KEY_AT
  • KEY_HASH
  • KEY_DOLLARSIGN
  • KEY_PERCENT
  • KEY_CARET
  • KEY_AMPERSAND
  • KEY_STAR
  • KEY_LEFTPAREN
  • KEY_RIGHTPAREN
  • KEY_UNDERSCORE
  • KEY_PLUS
  • KEY_LEFTCURLY
  • KEY_RIGHTCURLY
  • KEY_COLON
  • KEY_DOUBLEQUOTE
  • KEY_LESS
  • KEY_GREATER
  • KEY_QUESTION
  • KEY_TILDE
  • KEY_PIPE

A custom string or one of:

  • KEY_RESERVED
  • KEY_ESC
  • KEY_1
  • KEY_2
  • KEY_3
  • KEY_4
  • KEY_5
  • KEY_6
  • KEY_7
  • KEY_8
  • KEY_9
  • KEY_0
  • KEY_MINUS
  • KEY_EQUAL
  • KEY_BACKSPACE
  • KEY_TAB
  • KEY_Q
  • KEY_W
  • KEY_E
  • KEY_R
  • KEY_T
  • KEY_Y
  • KEY_U
  • KEY_I
  • KEY_O
  • KEY_P
  • KEY_LEFTBRACE
  • KEY_RIGHTBRACE
  • KEY_ENTER
  • KEY_LEFTCTRL
  • KEY_A
  • KEY_S
  • KEY_D
  • KEY_F
  • KEY_G
  • KEY_H
  • KEY_J
  • KEY_K
  • KEY_L
  • KEY_SEMICOLON
  • KEY_APOSTROPHE
  • KEY_GRAVE
  • KEY_LEFTSHIFT
  • KEY_BACKSLASH
  • KEY_Z
  • KEY_X
  • KEY_C
  • KEY_V
  • KEY_B
  • KEY_N
  • KEY_M
  • KEY_COMMA
  • KEY_DOT
  • KEY_SLASH
  • KEY_RIGHTSHIFT
  • KEY_KPASTERISK
  • KEY_LEFTALT
  • KEY_SPACE
  • KEY_CAPSLOCK
  • KEY_F1
  • KEY_F2
  • KEY_F3
  • KEY_F4
  • KEY_F5
  • KEY_F6
  • KEY_F7
  • KEY_F8
  • KEY_F9
  • KEY_F10
  • KEY_NUMLOCK
  • KEY_SCROLLLOCK
  • KEY_KP7
  • KEY_KP8
  • KEY_KP9
  • KEY_KPMINUS
  • KEY_KP4
  • KEY_KP5
  • KEY_KP6
  • KEY_KPPLUS
  • KEY_KP1
  • KEY_KP2
  • KEY_KP3
  • KEY_KP0
  • KEY_KPDOT
  • KEY_ZENKAKUHANKAKU
  • KEY_102ND
  • KEY_F11
  • KEY_F12
  • KEY_RO
  • KEY_KATAKANA
  • KEY_HIRAGANA
  • KEY_HENKAN
  • KEY_KATAKANAHIRAGANA
  • KEY_MUHENKAN
  • KEY_KPJPCOMMA
  • KEY_KPENTER
  • KEY_RIGHTCTRL
  • KEY_KPSLASH
  • KEY_SYSRQ
  • KEY_RIGHTALT
  • KEY_LINEFEED
  • KEY_HOME
  • KEY_UP
  • KEY_PAGEUP
  • KEY_LEFT
  • KEY_RIGHT
  • KEY_END
  • KEY_DOWN
  • KEY_PAGEDOWN
  • KEY_INSERT
  • KEY_DELETE
  • KEY_MACRO
  • KEY_MUTE
  • KEY_VOLUMEDOWN
  • KEY_VOLUMEUP
  • KEY_POWER
  • KEY_KPEQUAL
  • KEY_KPPLUSMINUS
  • KEY_PAUSE
  • KEY_SCALE
  • KEY_KPCOMMA
  • KEY_HANGEUL
  • KEY_HANJA
  • KEY_YEN
  • KEY_LEFTMETA
  • KEY_RIGHTMETA
  • KEY_COMPOSE
  • KEY_STOP
  • KEY_AGAIN
  • KEY_PROPS
  • KEY_UNDO
  • KEY_FRONT
  • KEY_COPY
  • KEY_OPEN
  • KEY_PASTE
  • KEY_FIND
  • KEY_CUT
  • KEY_HELP
  • KEY_MENU
  • KEY_CALC
  • KEY_SETUP
  • KEY_SLEEP
  • KEY_WAKEUP
  • KEY_FILE
  • KEY_SENDFILE
  • KEY_DELETEFILE
  • KEY_XFER
  • KEY_PROG1
  • KEY_PROG2
  • KEY_WWW
  • KEY_MSDOS
  • KEY_COFFEE
  • KEY_DIRECTION
  • KEY_ROTATE_DISPLAY
  • KEY_CYCLEWINDOWS
  • KEY_MAIL
  • KEY_BOOKMARKS
  • KEY_COMPUTER
  • KEY_BACK
  • KEY_FORWARD
  • KEY_CLOSECD
  • KEY_EJECTCD
  • KEY_EJECTCLOSECD
  • KEY_NEXTSONG
  • KEY_PLAYPAUSE
  • KEY_PREVIOUSSONG
  • KEY_STOPCD
  • KEY_RECORD
  • KEY_REWIND
  • KEY_PHONE
  • KEY_ISO
  • KEY_CONFIG
  • KEY_HOMEPAGE
  • KEY_REFRESH
  • KEY_EXIT
  • KEY_MOVE
  • KEY_EDIT
  • KEY_SCROLLUP
  • KEY_SCROLLDOWN
  • KEY_KPLEFTPAREN
  • KEY_KPRIGHTPAREN
  • KEY_NEW
  • KEY_REDO
  • KEY_F13
  • KEY_F14
  • KEY_F15
  • KEY_F16
  • KEY_F17
  • KEY_F18
  • KEY_F19
  • KEY_F20
  • KEY_F21
  • KEY_F22
  • KEY_F23
  • KEY_F24
  • KEY_PLAYCD
  • KEY_PAUSECD
  • KEY_PROG3
  • KEY_PROG4
  • KEY_DASHBOARD
  • KEY_SUSPEND
  • KEY_CLOSE
  • KEY_PLAY
  • KEY_FASTFORWARD
  • KEY_BASSBOOST
  • KEY_PRINT
  • KEY_HP
  • KEY_CAMERA
  • KEY_SOUND
  • KEY_QUESTION
  • KEY_EMAIL
  • KEY_CHAT
  • KEY_SEARCH
  • KEY_CONNECT
  • KEY_FINANCE
  • KEY_SPORT
  • KEY_SHOP
  • KEY_ALTERASE
  • KEY_CANCEL
  • KEY_BRIGHTNESSDOWN
  • KEY_BRIGHTNESSUP
  • KEY_MEDIA
  • KEY_SWITCHVIDEOMODE
  • KEY_KBDILLUMTOGGLE
  • KEY_KBDILLUMDOWN
  • KEY_KBDILLUMUP
  • KEY_SEND
  • KEY_REPLY
  • KEY_FORWARDMAIL
  • KEY_SAVE
  • KEY_DOCUMENTS
  • KEY_BATTERY
  • KEY_BLUETOOTH
  • KEY_WLAN
  • KEY_UWB
  • KEY_UNKNOWN
  • KEY_VIDEO_NEXT
  • KEY_VIDEO_PREV
  • KEY_BRIGHTNESS_CYCLE
  • KEY_BRIGHTNESS_AUTO
  • KEY_DISPLAY_OFF
  • KEY_WWAN
  • KEY_RFKILL
  • KEY_MICMUTE
  • BTN_0
  • BTN_1
  • BTN_2
  • BTN_3
  • BTN_4
  • BTN_5
  • BTN_6
  • BTN_7
  • BTN_8
  • BTN_9
  • BTN_LEFT
  • BTN_RIGHT
  • BTN_MIDDLE
  • BTN_SIDE
  • BTN_EXTRA
  • BTN_FORWARD
  • BTN_BACK
  • BTN_TASK
  • BTN_TRIGGER
  • BTN_THUMB
  • BTN_THUMB2
  • BTN_TOP
  • BTN_TOP2
  • BTN_PINKIE
  • BTN_BASE
  • BTN_BASE2
  • BTN_BASE3
  • BTN_BASE4
  • BTN_BASE5
  • BTN_BASE6
  • BTN_DEAD
  • BTN_SOUTH
  • BTN_EAST
  • BTN_C
  • BTN_NORTH
  • BTN_WEST
  • BTN_Z
  • BTN_TL
  • BTN_TR
  • BTN_TL2
  • BTN_TR2
  • BTN_SELECT
  • BTN_START
  • BTN_MODE
  • BTN_THUMBL
  • BTN_THUMBR
  • BTN_TOOL_PEN
  • BTN_TOOL_RUBBER
  • BTN_TOOL_BRUSH
  • BTN_TOOL_PENCIL
  • BTN_TOOL_AIRBRUSH
  • BTN_TOOL_FINGER
  • BTN_TOOL_MOUSE
  • BTN_TOOL_LENS
  • BTN_TOOL_QUINTTAP
  • BTN_TOUCH
  • BTN_STYLUS
  • BTN_STYLUS2
  • BTN_TOOL_DOUBLETAP
  • BTN_TOOL_TRIPLETAP
  • BTN_TOOL_QUADTAP
  • BTN_GEAR_DOWN
  • BTN_GEAR_UP
  • KEY_OK
  • KEY_SELECT
  • KEY_GOTO
  • KEY_CLEAR
  • KEY_POWER2
  • KEY_OPTION
  • KEY_INFO
  • KEY_TIME
  • KEY_VENDOR
  • KEY_ARCHIVE
  • KEY_PROGRAM
  • KEY_CHANNEL
  • KEY_FAVORITES
  • KEY_EPG
  • KEY_PVR
  • KEY_MHP
  • KEY_LANGUAGE
  • KEY_TITLE
  • KEY_SUBTITLE
  • KEY_ANGLE
  • KEY_ZOOM
  • KEY_FULL_SCREEN
  • KEY_MODE
  • KEY_KEYBOARD
  • KEY_SCREEN
  • KEY_PC
  • KEY_TV
  • KEY_TV2
  • KEY_VCR
  • KEY_VCR2
  • KEY_SAT
  • KEY_SAT2
  • KEY_CD
  • KEY_TAPE
  • KEY_RADIO
  • KEY_TUNER
  • KEY_PLAYER
  • KEY_TEXT
  • KEY_DVD
  • KEY_AUX
  • KEY_MP3
  • KEY_AUDIO
  • KEY_VIDEO
  • KEY_DIRECTORY
  • KEY_LIST
  • KEY_MEMO
  • KEY_CALENDAR
  • KEY_RED
  • KEY_GREEN
  • KEY_YELLOW
  • KEY_BLUE
  • KEY_CHANNELUP
  • KEY_CHANNELDOWN
  • KEY_FIRST
  • KEY_LAST
  • KEY_AB
  • KEY_NEXT
  • KEY_RESTART
  • KEY_SLOW
  • KEY_SHUFFLE
  • KEY_BREAK
  • KEY_PREVIOUS
  • KEY_DIGITS
  • KEY_TEEN
  • KEY_TWEN
  • KEY_VIDEOPHONE
  • KEY_GAMES
  • KEY_ZOOMIN
  • KEY_ZOOMOUT
  • KEY_ZOOMRESET
  • KEY_WORDPROCESSOR
  • KEY_EDITOR
  • KEY_SPREADSHEET
  • KEY_GRAPHICSEDITOR
  • KEY_PRESENTATION
  • KEY_DATABASE
  • KEY_NEWS
  • KEY_VOICEMAIL
  • KEY_ADDRESSBOOK
  • KEY_MESSENGER
  • KEY_DISPLAYTOGGLE
  • KEY_SPELLCHECK
  • KEY_LOGOFF
  • KEY_DOLLAR
  • KEY_EURO
  • KEY_FRAMEBACK
  • KEY_FRAMEFORWARD
  • KEY_CONTEXT_MENU
  • KEY_MEDIA_REPEAT
  • KEY_10CHANNELSUP
  • KEY_10CHANNELSDOWN
  • KEY_IMAGES
  • KEY_PICKUP_PHONE
  • KEY_HANGUP_PHONE
  • KEY_DEL_EOL
  • KEY_DEL_EOS
  • KEY_INS_LINE
  • KEY_DEL_LINE
  • KEY_FN
  • KEY_FN_ESC
  • KEY_FN_F1
  • KEY_FN_F2
  • KEY_FN_F3
  • KEY_FN_F4
  • KEY_FN_F5
  • KEY_FN_F6
  • KEY_FN_F7
  • KEY_FN_F8
  • KEY_FN_F9
  • KEY_FN_F10
  • KEY_FN_F11
  • KEY_FN_F12
  • KEY_FN_1
  • KEY_FN_2
  • KEY_FN_D
  • KEY_FN_E
  • KEY_FN_F
  • KEY_FN_S
  • KEY_FN_B
  • KEY_BRL_DOT1
  • KEY_BRL_DOT2
  • KEY_BRL_DOT3
  • KEY_BRL_DOT4
  • KEY_BRL_DOT5
  • KEY_BRL_DOT6
  • KEY_BRL_DOT7
  • KEY_BRL_DOT8
  • KEY_BRL_DOT9
  • KEY_BRL_DOT10
  • KEY_NUMERIC_0
  • KEY_NUMERIC_1
  • KEY_NUMERIC_2
  • KEY_NUMERIC_3
  • KEY_NUMERIC_4
  • KEY_NUMERIC_5
  • KEY_NUMERIC_6
  • KEY_NUMERIC_7
  • KEY_NUMERIC_8
  • KEY_NUMERIC_9
  • KEY_NUMERIC_STAR
  • KEY_NUMERIC_POUND
  • KEY_NUMERIC_A
  • KEY_NUMERIC_B
  • KEY_NUMERIC_C
  • KEY_NUMERIC_D
  • KEY_CAMERA_FOCUS
  • KEY_WPS_BUTTON
  • KEY_TOUCHPAD_TOGGLE
  • KEY_TOUCHPAD_ON
  • KEY_TOUCHPAD_OFF
  • KEY_CAMERA_ZOOMIN
  • KEY_CAMERA_ZOOMOUT
  • KEY_CAMERA_UP
  • KEY_CAMERA_DOWN
  • KEY_CAMERA_LEFT
  • KEY_CAMERA_RIGHT
  • KEY_ATTENDANT_ON
  • KEY_ATTENDANT_OFF
  • KEY_ATTENDANT_TOGGLE
  • KEY_LIGHTS_TOGGLE
  • BTN_DPAD_UP
  • BTN_DPAD_DOWN
  • BTN_DPAD_LEFT
  • BTN_DPAD_RIGHT
  • KEY_ALS_TOGGLE
  • KEY_BUTTONCONFIG
  • KEY_TASKMANAGER
  • KEY_JOURNAL
  • KEY_CONTROLPANEL
  • KEY_APPSELECT
  • KEY_SCREENSAVER
  • KEY_VOICECOMMAND
  • KEY_ASSISTANT
  • KEY_KBD_LAYOUT_NEXT
  • KEY_BRIGHTNESS_MIN
  • KEY_BRIGHTNESS_MAX
  • KEY_KBDINPUTASSIST_PREV
  • KEY_KBDINPUTASSIST_NEXT
  • KEY_KBDINPUTASSIST_PREVGROUP
  • KEY_KBDINPUTASSIST_NEXTGROUP
  • KEY_KBDINPUTASSIST_ACCEPT
  • KEY_KBDINPUTASSIST_CANCEL
  • KEY_RIGHT_UP
  • KEY_RIGHT_DOWN
  • KEY_LEFT_UP
  • KEY_LEFT_DOWN
  • KEY_ROOT_MENU
  • KEY_MEDIA_TOP_MENU
  • KEY_NUMERIC_11
  • KEY_NUMERIC_12
  • KEY_AUDIO_DESC
  • KEY_3D_MODE
  • KEY_NEXT_FAVORITE
  • KEY_STOP_RECORD
  • KEY_PAUSE_RECORD
  • KEY_VOD
  • KEY_UNMUTE
  • KEY_FASTREVERSE
  • KEY_SLOWREVERSE
  • KEY_DATA
  • KEY_ONSCREEN_KEYBOARD
  • KEY_PRIVACY_SCREEN_TOGGLE
  • KEY_SELECTIVE_SCREENSHOT
  • BTN_TRIGGER_HAPPY1
  • BTN_TRIGGER_HAPPY2
  • BTN_TRIGGER_HAPPY3
  • BTN_TRIGGER_HAPPY4
  • BTN_TRIGGER_HAPPY5
  • BTN_TRIGGER_HAPPY6
  • BTN_TRIGGER_HAPPY7
  • BTN_TRIGGER_HAPPY8
  • BTN_TRIGGER_HAPPY9
  • BTN_TRIGGER_HAPPY10
  • BTN_TRIGGER_HAPPY11
  • BTN_TRIGGER_HAPPY12
  • BTN_TRIGGER_HAPPY13
  • BTN_TRIGGER_HAPPY14
  • BTN_TRIGGER_HAPPY15
  • BTN_TRIGGER_HAPPY16
  • BTN_TRIGGER_HAPPY17
  • BTN_TRIGGER_HAPPY18
  • BTN_TRIGGER_HAPPY19
  • BTN_TRIGGER_HAPPY20
  • BTN_TRIGGER_HAPPY21
  • BTN_TRIGGER_HAPPY22
  • BTN_TRIGGER_HAPPY23
  • BTN_TRIGGER_HAPPY24
  • BTN_TRIGGER_HAPPY25
  • BTN_TRIGGER_HAPPY26
  • BTN_TRIGGER_HAPPY27
  • BTN_TRIGGER_HAPPY28
  • BTN_TRIGGER_HAPPY29
  • BTN_TRIGGER_HAPPY30
  • BTN_TRIGGER_HAPPY31
  • BTN_TRIGGER_HAPPY32
  • BTN_TRIGGER_HAPPY33
  • BTN_TRIGGER_HAPPY34
  • BTN_TRIGGER_HAPPY35
  • BTN_TRIGGER_HAPPY36
  • BTN_TRIGGER_HAPPY37
  • BTN_TRIGGER_HAPPY38
  • BTN_TRIGGER_HAPPY39
  • BTN_TRIGGER_HAPPY40
KeyAction (expand)

KeyAction

A single keycode or a sequence of key events (macro).

Type: KeyCode | KeyEvent[]

Example: KEY_C, [KEY_H, { press: KEY_I }, { release: KEY_I }]

KeyEvent

To hold a key, a press event musy be preceding hold.

Type:

  • { press: KeyCode }
  • { hold: KeyCode }
  • { release: KeyCode }
  • { delay: number }: Input delay in milliseconds.
  • { string: string }: ASCII string.
  • { env: string }: Environment variable key.
  • { unicode: string }: Unicode string.
  • { shell: string }: Bash shell command.
  • KeyCode: Press + Release.
TapDance (expand)

TapDance

Tap dance entry configuration.

  • tap: Action on tap, on release below timeout.

    Type: KeyAction

  • hold: Action on hold, exceeded timeout.

    Type: KeyAction

  • timeout: When to consider as a hold.

    Type: number

    Default: 250 (ms)

Combo (expand)

Combo

Combo entry cobfiguration.

  • keys: Set of keys to activate the combo.

    Type: KeyCode[]

  • action: Action when keys are pressed/held at the same time.

    Type: KeyAction

Layer (expand)

Layer

Layer entry configuration.

  • modifier: Layer activation key and behavior.

    Type: KeyCode | { key: KeyCode; type?: "momentary" | "toggle" | "oneshoot" }

  • keys: Key mappings for the layer.

    Type: Record<KeyCode, KeyAction>

Fields:

name

Name of the keyboard as an input device, you can use okey device list --keyboard to find the name of a keyboard.

Type: string

keys (optional)

Key mappings for the main layer.

Type: Record<KeyCode, KeyAction>

tap_dances (optional)

Dual function keys on tap/hold.

Type: Record<KeyCode, TapDance>

combos (optional)

List of combo mappings.

Type: Combo[]

layers (optional)

Virtual layers (shift-like).

Type: Record<string, Layer>

License

MIT

Dependencies

~6–17MB
~187K SLoC