Álvaro Ramírez
Keychron K3 Pro: F1-F12 as default macOS keys
After resetting my Keychron K3 Pro, my F1 to F12 keys were no longer my default macOS keys. The entire row was defaulting to macOS's special keys (i.e. Mission Control, Launch Pad, Volume, etc). At first, I thought I may just need to revisit the macOS setting "Use F1, F2, etc keys as standard function keys", yet toggling the setting made no difference.
Turns out, I had remapped those keys long ago and simply forgot about it. Factory resetting my keyboard got rid of this customization. This post is a reminder for my future self, and anyone else looking to remap their F1-F12 keys.
Save your current layout
Via https://usevia.app, I saved my current keyboard layout (the out-of-box layout) and named it k3_pro_ansi_white(before).json
.
Apply your changes
I made a second copy of the layout and named it k3_pro_ansi_white(after).json
. In this new file, I located the two layers (first and second) and simply swapped the two row chunks using a text editor.
The diff looks a little something like this:
--- k3_pro_ansi_white(before).json 2025-02-20 09:44:03 +++ k3_pro_ansi_white(after).json 2025-02-20 09:43:59 @@ -5,18 +5,18 @@ "layers": [ [ "KC_ESC", - "KC_BRID", - "KC_BRIU", - "CUSTOM(4)", - "CUSTOM(5)", - "BL_DEC", - "BL_INC", - "KC_MPRV", - "KC_MPLY", - "KC_MNXT", - "KC_MUTE", - "KC_VOLD", - "KC_VOLU", + "KC_F1", + "KC_F2", + "KC_F3", + "KC_F4", + "KC_F5", + "KC_F6", + "KC_F7", + "KC_F8", + "KC_F9", + "KC_F10", + "KC_F11", + "KC_F12", "CUSTOM(8)", "KC_DEL", "BL_STEP", @@ -103,18 +103,18 @@ ], [ "KC_TRNS", - "KC_F1", - "KC_F2", - "KC_F3", - "KC_F4", - "KC_F5", - "KC_F6", - "KC_F7", - "KC_F8", - "KC_F9", - "KC_F10", - "KC_F11", - "KC_F12", + "KC_BRID", + "KC_BRIU", + "CUSTOM(4)", + "CUSTOM(5)", + "BL_DEC", + "BL_INC", + "KC_MPRV", + "KC_MPLY", + "KC_MNXT", + "KC_MUTE", + "KC_VOLD", + "KC_VOLU", "KC_TRNS", "KC_TRNS", "BL_TOGG",
Similarly, here's side-by-side look via Emacs ediff:
Load your modified layout
Now that we have k3_pro_ansi_white(after).json
with our changes, all that's left is loading through https://usevia.app. You are now done.
While F1-F12 keys should now be available by default. To access your macOS special keys use the fn
key.
Enjoy your F1-F12 default keys!
Final k3_pro_ansi_white(after).json
If keen to see the entire content of k3_pro_ansi_white(after).json
, here it is:
{ "name": "Keychron K3 Pro ANSI White", "vendorProductId": 875823667, "macros": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""], "layers": [ [ "KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "CUSTOM(8)", "KC_DEL", "BL_STEP", "KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_NO", "KC_PGUP", "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_NO", "KC_PGDN", "KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NO", "KC_ENT", "KC_NO", "KC_HOME", "KC_LSFT", "KC_NO", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_NO", "KC_RSFT", "KC_UP", "KC_END", "KC_LCTL", "CUSTOM(0)", "CUSTOM(2)", "KC_NO", "KC_NO", "KC_NO", "KC_SPC", "KC_NO", "KC_NO", "KC_NO", "CUSTOM(3)", "MO(1)", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT" ], [ "KC_TRNS", "KC_BRID", "KC_BRIU", "CUSTOM(4)", "CUSTOM(5)", "BL_DEC", "BL_INC", "KC_MPRV", "KC_MPLY", "KC_MNXT", "KC_MUTE", "KC_VOLD", "KC_VOLU", "KC_TRNS", "KC_TRNS", "BL_TOGG", "KC_TRNS", "CUSTOM(11)", "CUSTOM(12)", "CUSTOM(13)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "BL_TOGG", "BL_STEP", "BL_INC", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "BL_DEC", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "CUSTOM(14)", "MAGIC_TOGGLE_NKRO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" ], [ "KC_ESC", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_PSCR", "KC_DEL", "BL_STEP", "KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC", "KC_NO", "KC_PGUP", "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS", "KC_NO", "KC_PGDN", "KC_CAPS", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NO", "KC_ENT", "KC_NO", "KC_HOME", "KC_LSFT", "KC_NO", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_NO", "KC_RSFT", "KC_UP", "KC_END", "KC_LCTL", "KC_LGUI", "KC_LALT", "KC_NO", "KC_NO", "KC_NO", "KC_SPC", "KC_NO", "KC_NO", "KC_NO", "KC_RALT", "MO(3)", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT" ], [ "KC_TRNS", "KC_BRID", "KC_BRIU", "CUSTOM(6)", "CUSTOM(7)", "BL_DEC", "BL_INC", "KC_MPRV", "KC_MPLY", "KC_MNXT", "KC_MUTE", "KC_VOLD", "KC_VOLU", "KC_TRNS", "KC_TRNS", "BL_TOGG", "KC_TRNS", "CUSTOM(11)", "CUSTOM(12)", "CUSTOM(13)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "BL_TOGG", "BL_STEP", "BL_INC", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "BL_DEC", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "CUSTOM(14)", "MAGIC_TOGGLE_NKRO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_NO", "KC_NO", "KC_NO", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" ] ], "encoders": [] }