Skip to content

Instantly share code, notes, and snippets.

@jamietre
Last active June 17, 2025 19:41
Show Gist options
  • Select an option

  • Save jamietre/6457204045dce85476a693d21142edc3 to your computer and use it in GitHub Desktop.

Select an option

Save jamietre/6457204045dce85476a693d21142edc3 to your computer and use it in GitHub Desktop.
Karabiner Elements config to map home/end keys to PC-like behavior on MacOS X
{
"title": "MacOS -> PC Shortcuts",
"rules": [
{
"description": "Top/bottom of document (ctrl+home/ctrl+end)",
"manipulators": [
{
"type": "basic",
"from": <%= from("home", ["command"], ["any"]) %>,
"to": <%= to([["up_arrow", ["left_command"]]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
},
{
"type": "basic",
"from": <%= from("end", ["command"], ["any"]) %>,
"to": <%= to([["down_arrow", ["left_command"]]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
}
]
},
{
"description": "Home/end keys to the beginning/end line",
"manipulators": [
{
"type": "basic",
"from": <%= from("home", [], ["any"]) %>,
"to": <%= to([["a", ["left_control"]]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
},
{
"type": "basic",
"from": <%= from("end", [], ["any"]) %>,
"to": <%= to([["e", ["right_control"]]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
}
]
},
{
"description": "Move by word (command+right/command+left)",
"manipulators": [
{
"type": "basic",
"from": <%= from("right_arrow", ["command"], ["any"]) %>,
"to": <%= to([["right_arrow", ["left_option"]]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
},
{
"type": "basic",
"from": <%= from("left_arrow", ["command"], ["any"]) %>,
"to": <%= to([["left_arrow", ["left_option"]]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
}
]
},
{
"description": "Swap Control <-> Command unless in virtual machine/remote desktop",
"manipulators": [
{
"type": "basic",
"from": <%= from("left_control", [], ["any"]) %>,
"to": <%= to([["left_command"]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
},
{
"type": "basic",
"from": <%= from("left_command", [], ["any"]) %>,
"to": <%= to([["left_control"]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
},
{
"type": "basic",
"from": <%= from("right_control", [], ["any"]) %>,
"to": <%= to([["right_command"]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
},
{
"type": "basic",
"from": <%= from("right_command", [], ["any"]) %>,
"to": <%= to([["right_control"]]) %>,
"conditions": [ <%= frontmost_application_unless(["remote_desktop", "virtual_machine"]) %> ]
}
]
}
]
}
@feather-jmalone

Copy link
Copy Markdown

the home/end keys on my logitech mx keyboard were driving me insane on my mac (11.5.2 big sur). for example, when editing a web-based textarea like this one, the home and end keys would act like page up and page down, making the whole webpage suddenly jolt up or down instead of just moving the inline cursor to the start or end of the line.

needless to say i really appreciate this snippet and the discussion! i followed the original instructions, accounted for the .json.erb file extension, and was able to reconfigure the keys in just a few minutes. thank you!

@monkpit

monkpit commented Mar 22, 2022

Copy link
Copy Markdown

Note that (as of this writing) the docs folder has changed to be named public. So, you have to put pc-rules.json.erb in src/json and then the output will be in public/json/pc-rules.json.

@jamietre

Copy link
Copy Markdown
Author

Note that (as of this writing) the docs folder has changed to be named public. So, you have to put pc-rules.json.erb in src/json and then the output will be in public/json/pc-rules.json.

Updated with the old version there too for historical purposes. I don't use a mac anymore at work so I can't test anything ;)

@abondarev84

Copy link
Copy Markdown

can anybody that already ran this post the resulting json please?

@herself

herself commented Feb 16, 2024

Copy link
Copy Markdown

As of writing, this doesn't seem to work. Looks like the original repo lost its ability to compile ruby template files...
The workaround I ended up with is to simply use the "PC-Style Shortcuts" that can be imported into Karabiner from its own UI. They have all the shortcuts included in this gist.

@gregsheremeta

Copy link
Copy Markdown

use the "PC-Style Shortcuts" that can be imported into Karabiner from its own UI. They have all the shortcuts included in this gist.

thanks, this worked great for me too.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment