
Security News
Feross on TBPN: How North Korea Hijacked Axios
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.
[!NOTE]
This package is an alias for karabiner-human-config.
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:
caps hyper cmd ctrl etc.t a etc as manipulator key's aliases.100 easily, if needed.$ for shell command.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-config
And voila! From 10-15 lines to 170+ lines of configuration in just a few seconds.
{
"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.
Version:
karabiner-human-config@x.x.x
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 <admin@nrjdalal.com> (https://nrjdalal.com)
npx karabiner-human-config
You can use either/both of the options.
npx karabiner-human-config -i konfig.json -o karabiner.json
Don'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"
}
{
"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'"
}
{
"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"
}
{
"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" }
}
{
"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"
}
}
]
}
hyper for left_command left_control left_option left_shiftleft_command as cmd lcmd l_cmd left_cmd lcommand l_commandCheck and add custom-aliases.ts for more.
t for toa for to_if_aloneh for to_if_held_downCheck and add manipulator-keys.ts for more.
FAQs
The easiest way to write Karabiner-Elements configuration files, ever!
We found that khc demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.

Security News
OpenSSF has issued a high-severity advisory warning open source developers of an active Slack-based campaign using impersonation to deliver malware.

Research
/Security News
Malicious packages published to npm, PyPI, Go Modules, crates.io, and Packagist impersonate developer tooling to fetch staged malware, steal credentials and wallets, and enable remote access.