Key Modifiers
July 19, 2026 ยท View on GitHub
OverKeys supports richer key entries inside custom layouts so you can show a top label, track a different underlying key, and keep certain keys visually held. This is useful for layer-style layouts, modifier keys, and layouts that need two labels on the same key. This was greatly inspired from the key modifier support in caksoylar's keymap-drawer.
Overview
In userLayouts, each key can still be a plain string. You can also use an object with these fields:
t: Tracked key used for key press detection and shift mappingh: Top label shown near the top of the keytype: Optional key state hint; useheldto keep the key rendered as pressed
Plain string entries continue to work exactly as before, so you can mix both formats within the same layout.
Space as tracked key and shift as the top label.
NUM layer change key with type pressed
Example
{
"userLayouts": [
{
"name": "Layer",
"keys": [
["A", { "h": "Shift", "t": "T", "type": "held" }],
["B", "C"],
],
},
],
}
In this example:
Ais rendered as a normal key- The second key displays
Shiftat the top andTas the tracked key type: "held"keeps the key styled like it is active, useful for modifier keys or layer keys that should stay visually active
Setup Instructions
Turning the setting on
- Open OverKeys
- Right-click the OverKeys icon in the system tray
- Select Preferences
- Go to the Advanced tab
- Toggle Turn on advanced settings
- Toggle Use user layouts if you want the custom layout to be loaded
Using the Configuration File
- Right-click the OverKeys tray icon
- Select Preferences
- Go to the Advanced tab
- Click Open Config
- Edit the
userLayoutsarray using the object form where needed - Save the file
- Right-click the tray icon and click Reload config to apply changes
Behavior Notes
tcontrols the actual key OverKeys tracks for press state and alias/shift behaviorhis only visual and can be omitted when you do not need a separate top labelheldis useful for modifier or layer keys that should stay visually active
Troubleshooting
- If a modifier key does not display correctly, make sure the JSON object uses the exact field names
h,t, andtype - If the tracked key is missing, OverKeys falls back to the top label or the object value when possible
- If the label looks cramped, adjust the text sizes in the Text Settings page