Find it on the official website of Karabiner-Elements at external JSON generators.
Creating configuration files for Karabiner-Elements can be challenging. With Karabiner-Human-Config (KHC), you can effortlessly generate your own configuration files using human-readable/understandable syntax.
Just create a new konfig.json file:
- Don't hold back on the comments.
- Can use custom aliases like
capshypercmdctrletc. - Can specify
taetc as manipulator key's aliases. - Easily prefix flags and delays like
100easily, if needed. - Use
$for shell command. - Just use the app's name like
Visual Studio Code.
{
// direct
"caps": { "t": "hyper", "a": "100 caps" },
"hyper spacebar": "cmd spacebar",
// group
"fn": {
"_self": { "t": "fn", "a": "cmd tab" },
"spacebar": "cmd spacebar",
"v": "$ open -a 'Visual Studio Code'"
},
// application group
"Visual Studio Code": {
"fn tilde": "ctrl tilde"
}
}And run the following command:
npx karabiner-human-configAnd voila! From 10-15 lines to 170+ lines of configuration in just a few seconds.
Generated: karabiner.json
{
"global": {
"show_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"rules": [
{
"manipulators": [
{
"type": "basic",
"description": "caps",
"from": {
"key_code": "caps_lock"
},
"to": [
{
"key_code": "left_shift",
"modifiers": [
"left_command",
"left_control",
"left_option"
]
}
],
"to_if_alone": [
{
"key_code": "caps_lock",
"hold_down_milliseconds": 100
}
]
}
]
},
{
"manipulators": [
{
"type": "basic",
"description": "hyper spacebar",
"from": {
"key_code": "spacebar",
"modifiers": {
"mandatory": [
"left_command",
"left_control",
"left_option",
"left_shift"
]
}
},
"to": [
{
"key_code": "spacebar",
"modifiers": [
"left_command"
]
}
]
}
]
},
{
"manipulators": [
{
"type": "basic",
"description": "fn",
"from": {
"key_code": "fn"
},
"to": [
{
"key_code": "fn"
}
],
"to_if_alone": [
{
"key_code": "tab",
"modifiers": [
"left_command"
]
}
]
}
]
},
{
"manipulators": [
{
"type": "basic",
"description": "fn spacebar",
"from": {
"key_code": "spacebar",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "spacebar",
"modifiers": [
"left_command"
]
}
]
}
]
},
{
"manipulators": [
{
"type": "basic",
"description": "fn v",
"from": {
"key_code": "v",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"shell_command": "open -a 'Visual Studio Code'"
}
]
}
]
},
{
"manipulators": [
{
"type": "basic",
"description": "visual studio code fn tilde",
"from": {
"key_code": "grave_accent_and_tilde",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"key_code": "grave_accent_and_tilde",
"modifiers": [
"left_control"
]
}
],
"conditions": [
{
"type": "frontmost_application_if",
"bundle_identifiers": [
"^com\\.microsoft\\.VSCode$"
]
}
]
}
]
}
]
},
"name": "nrjdalal",
"selected": true,
"virtual_hid_keyboard": {
"keyboard_type_v2": "ansi"
}
}
]
}
The generated configuration will be saved in karabiner.json in the same directory.
Bonus: If you wish to checkout my personal configuration, you can find it here. And what it generates here.
- CLI Usage
- Types of Addressing
- Advanced Usage for From Events
- Advanced Usage for To Events
- Alias
- Future Considerations
Version:
[email protected]
Usage:
$ karabiner-human-config [options]
Options:
-i, --input Input file path (default: konfig.json)
-o, --output Output file path (default: karabiner.json)
-v, --version Display version number
-h, --help Display help message
Author:
Neeraj Dalal <[email protected]> (https://nrjdalal.com)
npx karabiner-human-configYou can use either/both of the options.
npx karabiner-human-config -i konfig.json -o karabiner.jsonDon't hold back on the comments. They are your best friend. KHC will strip them out before generating the configuration.
Use string values if there's only to event. In case of multiple events, use object values. Read more at specifying multiple events.
{
"hyper spacebar": "cmd spacebar",
"caps": { "t": "hyper", "a": "100 caps" }
}Instead of repeating the same key beginning, use group keys.
{
- "fn": { "t": "fn", "a": "cmd tab" },
- "fn spacebar": "cmd spacebar",
- "fn v": "$ open -a 'Visual Studio Code'",
+ "fn": {
+ "_self": { "t": "fn", "a": "cmd tab" },
+ "spacebar": "cmd spacebar",
+ "v": "$ open -a 'Visual Studio Code'"
+ }
}Note: Currently, _self is required to create a group key.
Use application names if you want to specify key mappings for a specific application. Don't worry about finding bundle identifiers, just use the app name.
{
"Visual Studio Code": {
"fn tilde": "ctrl tilde"
}
}Use | to specify optional modifiers.
{
- "fn spacebar: "cmd spacebar"
+ "fn spacebar | any": "cmd spacebar"
}Generated: karabiner.json
{
"global": {
"show_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"rules": [
{
"manipulators": [
{
"type": "basic",
"description": "fn spacebar | any",
"from": {
"key_code": "spacebar",
"modifiers": {
"mandatory": [
"fn"
],
"optional": [
"any"
]
}
},
"to": [
{
"key_code": "spacebar",
"modifiers": [
"left_command"
]
}
]
}
]
}
]
},
"name": "nrjdalal",
"selected": true,
"virtual_hid_keyboard": {
"keyboard_type_v2": "ansi"
}
}
]
}
Use $ to specify a shell command.
{
- "fn spacebar": "cmd spacebar"
+ "fn spacebar": "$ open -a 'Google Chrome'"
}Generated: karabiner.json
{
"global": {
"show_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"rules": [
{
"manipulators": [
{
"type": "basic",
"description": "fn spacebar",
"from": {
"key_code": "spacebar",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"shell_command": "open -a 'Google Chrome'"
}
]
}
]
}
]
},
"name": "nrjdalal",
"selected": true,
"virtual_hid_keyboard": {
"keyboard_type_v2": "ansi"
}
}
]
}
Prefix with lazy, repeat, halt to set flags. Or number to specify a delay.
{
- "fn spacebar": "cmd spacebar"
+ "fn spacebar": "100 lazy repeat halt cmd spacebar"
}Generated: karabiner.json
{
"global": {
"show_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"rules": [
{
"manipulators": [
{
"type": "basic",
"description": "fn spacebar",
"from": {
"key_code": "spacebar",
"modifiers": {
"mandatory": [
"fn"
]
}
},
"to": [
{
"lazy": true,
"repeat": true,
"halt": true,
"hold_down_milliseconds": 100,
"key_code": "spacebar",
"modifiers": [
"left_command"
]
}
]
}
]
}
]
},
"name": "nrjdalal",
"selected": true,
"virtual_hid_keyboard": {
"keyboard_type_v2": "ansi"
}
}
]
}
Instead of strings, use objects like { to: ..., to_if_alone: ... } to specify multiple to events.
{
- "fn spacebar": "cmd spacebar"
+ "fn": { "to": "fn", "to_if_alone": "cmd tab" }
}Generated: karabiner.json
{
"global": {
"show_in_menu_bar": false
},
"profiles": [
{
"complex_modifications": {
"rules": [
{
"manipulators": [
{
"type": "basic",
"description": "fn",
"from": {
"key_code": "fn"
},
"to": [
{
"key_code": "fn"
}
],
"to_if_alone": [
{
"key_code": "tab",
"modifiers": [
"left_command"
]
}
]
}
]
}
]
},
"name": "nrjdalal",
"selected": true,
"virtual_hid_keyboard": {
"keyboard_type_v2": "ansi"
}
}
]
}
hyperforleft_command left_control left_option left_shiftleft_commandascmdlcmdl_cmdleft_cmdlcommandl_command
Check and add custom-aliases.ts for more.
tfortoaforto_if_alonehforto_if_held_down
Check and add manipulator-keys.ts for more.
- You tell me, I just got to know about Karabiner-Elements two days before publishing this on Feb 07, 2025.