Documentation on Keychron customization can be hard to find. Most information is spread across different sources, e.g. reddit, some of it is outdated, and some of it is wrong.
Therefore, I decided to document my findings here.
⚠️ I am by no means an expert on this topic. Proceed at your own risk.
Using Keychron Launcher
You can achieve some advanced key mappings with the Keychron Launcher. You don’t always need QMK or Tap Dance.
Mod Tap
With Mod Tap you can assign a key to act as a modifier while held and as a normal key when tapped.
A modifier is for example shift
or control
.
An example how I use Mod Tap: When I press the semicolon
key, it acts as semicolon
.
But when I hold down the semicolon
key, it acts as control
and I can comfortably press, for example, control-a
.
Another example are home row mods.
You can also specify more than one modifier to hold down; for example, you could use this to build a hyper-key when holding capslock
.
(“hyper” means the combination of control
, option
, command
, and shift
.)
To use Mod Tap with the Keychron Launcher, do the following:
- Select the key you want to use
- In the bottom menu, select “custom”, then “any”
- Here, you can put in a QMK function, in this case
MT()
For my
semicolon
example, I would put inMT(MOD_LCTL, KC_SCLN)
.
Read the Mod Tap documentation to find out more, for example how to combine modifiers (e.g. MOD_LCTL | MOD_LSFT
).
Be sure to review the “Caveats” section.
⚠️ Currently, the
kc
argument ofMT()
is limited to the basic keycode set.
Layer Tap
With Layer Tap you can assign a key to act as a layer switch while held and as a normal key when tapped.
An example how I use Layer Tap: When I press the capslock
key, it acts as escape
.
But when I hold the capslock
key, it activates another layer where I have hjkl
mapped to the arrow keys.
To use Layer Tap with the Keychron Launcher, do the following:
- Select the key you want to use
- In the bottom menu, select “custom”, then “any”
- Here, you can put in a QMK function, in this case
LT()
For my
capslock
example, I would put inLT(2, KC_CAPS)
.
Read the Layers documentation to find out more about layers. Be sure to review the “Caveats” section.
Using QMK
To use QMK with the Keychron Q1 Max, you need to fork Keychron’s fork of QMK. For example, my fork is located here.
When you set up your QMK environment, you can run qmk setup
with the -H <path_to_repo>
flag to point to your local clone of your own QMK fork of Keychron’s fork.
It will print a minor warning that upstream isn’t set to the original QMK repo, but you can decide ignore that if your upstream is Keychron’s fork.
Keychron’s QMK repo includes custom branches for their keyboards.
For example, the Q1 Max is in the wireless_playground
branch.
You find your keyboard under keyboards/keychron/
.
Each keyboard has its own readme, which also explains how to build and flash the firmware. For example, to flash the Q1 Max firmware, you can run the following command from the repository root:
|
|
- If you use an iso or jis layout, replace
ansi_encoder
withiso_encoder
orjis_encoder
- If you created your own keymap, replace
default
with your keymap’s name
To put the Q1 Max into bootloader mode, hold the esc
key while plugging in its cable.
Adding A Layer
Within the ansi_encoder
directory:
keymaps/<keymap>/keymap.c
: add identifier toenum layers
keymaps/<keymap>/keymap.c
: add layer tokeymaps
arraykeymaps/<keymap>/keymap.c
: add layer toencoder_map
(at bottom)config.h
: Add or update the#define DYNAMIC_KEYMAP_LAYER_COUNT 4
line to reflect the correct number of layers; you can add it below#pragma once
, but make sure it exists only once
Knob As Mouse Wheel
To use the knob as a mouse wheel, modify the encoder_map
in keymaps/<keymap>/keymap.c
as follows (for the Mac base layer):
|
|
This way, turning the knob counter-clockwise scrolls up and turning it clockwise scrolls down.