QMK はほぼ無制限に設定可能です。可能なところはいかなるところでも、やりすぎな程、ユーザーがコードサイズを犠牲にしてでも彼らのキーボードをカスタマイズをすることを許しています。ただし、このレベルの柔軟性により設定が困難になります。
QMK には主に2種類の設定ファイルがあります- config.h
と rules.mk
。これらのファイルは QMK の様々なレベルに存在し、同じ種類の全てのファイルは最終的な設定を構築するために組み合わされます。最低の優先度から最高の優先度までのレベルは以下の通りです:
QMK での全ての利用可能な設定にはデフォルトがあります。その設定がキーボード、フォルダ、あるいはキーマップレべルで設定されない場合、これが使用される設定です。
このレベルにはキーボード全体に適用される設定オプションが含まれています。一部の設定は、リビジョンあるいはほとんどのキーマップで変更されません。他の設定はこのキーボードのデフォルトに過ぎず、フォルダあるいはキーマップによって上書きされる可能性があります。
一部のキーボードには、異なるハードウェア構成のためのフォルダとサブフォルダがあります。ほとんどのキーボードは深さ1のフォルダのみですが、QMK は最大深さ5のフォルダの構造をサポートします。各フォルダは、最終的な設定に組み込まれる独自の config.h
と rules.mk
ファイルを持つことができます。
このレベルには特定のキーマップのための全てのオプションが含まれています。以前の定義を上書きしたい場合は、#undef <variable>
を使って定義を解除し、エラー無しで再定義することができます。
config.h
ファイルこれは最初に include されるものの 1 つである C ヘッダファイルで、プロジェクト全体(もし含まれる場合)にわたって持続します。多くの変数をここで設定し、他の場所からアクセスすることができます。config.h
ファイルでは、以下のもの以外の、他の config.h
ファイルやその他のファイルの include をしないでください:
#include "config_common.h"
#define VENDOR_ID 0x1234
#define PRODUCT_ID 0x5678
#define DEVICE_VER 0
#define MANUFACTURER Me
#define PRODUCT Board
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
#define MATRIX_ROW_PINS { D0, D5, B5, B6 }
#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
#define MATRIX_IO_DELAY 30
#define UNUSED_PINS { D1, D2, D3, B1, B2, B3 }
#define MATRIX_HAS_GHOST
#define DIODE_DIRECTION COL2ROW
#define DIRECT_PINS { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }
#define AUDIO_VOICES
#define C4_AUDIO
#define AUDIO_PIN C4
を使ってください#define C5_AUDIO
#define AUDIO_PIN C5
を使ってください#define C6_AUDIO
#define AUDIO_PIN C6
を使ってください#define B5_AUDIO
AUDIO_PIN
で C
ピンを有効にしている場合は、#define AUDIO_PIN_ALT B5
を使い、そうでなければ #define AUDIO_PIN B5
を使います。#define B6_AUDIO
AUDIO_PIN
で C
ピンを有効にしている場合は、#define AUDIO_PIN_ALT B6
を使い、そうでなければ #define AUDIO_PIN B6
を使います。#define B7_AUDIO
AUDIO_PIN
で C
ピンを有効にしている場合は、#define AUDIO_PIN_ALT B7
を使い、そうでなければ #define AUDIO_PIN B7
を使います。#define BACKLIGHT_PIN B7
#define BACKLIGHT_LEVELS 3
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6
#define DEBOUNCE 5
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
#define USB_MAX_POWER_CONSUMPTION 500
#define USB_POLLING_INTERVAL_MS 10
#define USB_SUSPEND_WAKEUP_DELAY 200
#define F_SCL 100000L
400000L
ですが、split_common
を使っているキーボードは別でデフォルトは 100000L
です。これらのオプションを定義すると、関連する機能が無効になり、コードサイズを節約できます。
#define NO_DEBUG
#define NO_PRINT
#define NO_ACTION_LAYER
#define NO_ACTION_TAPPING
#define NO_ACTION_ONESHOT
#define NO_ACTION_MACRO
MACRO()
、action_get_macro()
(非推奨) を使う古い形式のマクロ処理を無効にします#define NO_ACTION_FUNCTION
fn_actions
、action_function()
(非推奨) を使う古い形式の関数処理を無効にしますこれらのオプションを定義すると、関連する機能が有効になり、コードサイズが大きくなるかもしれません。
#define FORCE_NKRO
#define STRICT_LAYER_RELEASE
#define TAPPING_TERM 200
#define TAPPING_TERM_PER_KEY
TAPPING_TERM
設定の処理を有効にします#define RETRO_TAPPING
#define RETRO_TAPPING_PER_KEY
RETRO_TAPPING
設定の処理を有効にします#define TAPPING_TOGGLE 2
#define PERMISSIVE_HOLD
TAPPING_TERM
にヒットしていなくても、リリースする前に別のキーが押されると、タップとホールドキーがホールドを引き起こします#define PERMISSIVE_HOLD_PER_KEY
PERMISSIVE_HOLD
設定の処理を有効にします#define IGNORE_MOD_TAP_INTERRUPT
TAPPING_TERM
を適用することで、ホールド時に他のキーに変換するキーを使ってローリングコンボ (zx) をすることができるようにします#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
IGNORE_MOD_TAP_INTERRUPT
設定の処理を有効にします#define TAPPING_FORCE_HOLD
TT
あるいは One Shot Tap Toggle)#define TAPPING_FORCE_HOLD_PER_KEY
TAPPING_FORCE_HOLD
設定処理を有効にします。#define LEADER_TIMEOUT 300
LEADER_PER_KEY_TIMING
オプションを有効にすると良いでしょう。これは各キーがタップされた後でタイムアウトを再設定します。#define LEADER_PER_KEY_TIMING
#define LEADER_KEY_STRICT_KEY_PROCESSING
KC_A
を使いたい場合は MT(MOD_CTL, KC_A)
を指定する必要があります。#define ONESHOT_TIMEOUT 300
#define ONESHOT_TAP_TOGGLE 2
#define QMK_KEYS_PER_SCAN 4
process_record()
経由で1つのキーイベントのみが送信されます。これはほとんどのタイピングにほとんど影響しませんが、多くのコードを入力しているか、走査レートが最初から遅い場合、キーイベントの処理に多少の遅延が生じる可能性があります。それぞれのプレスとリリースは別のイベントです。スキャン時間が 1ms 程度のキーボードの場合、とても高速なタイピストでさえ、実際にキーボードから数 ms 以上の遅延を発生させるのに必要な 500 キーストロークを1秒間に生成することはないでしょう。しかし、3~4ms の走査時間でコードを入力している場合はどうでしょうか?おそらくこれが必要です。#define COMBO_COUNT 2
#define COMBO_TERM 200
TAPPING_TERM
です。#define TAP_CODE_DELAY 100
register_code
と unregister_code
の間の遅延を設定します。値はミリ秒です。#define TAP_HOLD_CAPS_DELAY 80
KC_CAPSLOCK
を使う時にタップホールドキー (LT
, MT
) に遅延を設定します。この値はミリ秒で、定義されていない場合はデフォルトは80msです。macOS については、これを200以上に設定すると良いでしょう。#define RGB_DI_PIN D7
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_LAYERS
#define RGBLIGHT_MAX_LAYERS
#define RGBLIGHT_LAYER_BLINK
#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
#define RGBLED_NUM 12
#define RGBLIGHT_SPLIT
#define RGBLED_SPLIT { 6, 6 }
RGB_DI_PIN
に直接配線されている接続されている LED の数#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 25
#define RGBLIGHT_VAL_STEP 12
#define RGBW
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 60
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_WHEEL_DELAY 0
分割キーボード固有のオプション。あなたの rules.mk に 'SPLIT_KEYBOARD = yes' が有ることを確認してください。
SPLIT_TRANSPORT = custom
1つ覚えておかなければならないことは、USB ポートが接続されている側が常にマスター側であるということです。USB に接続されていない側はスレーブです。
分割キーボードの左右を設定するには、幾つかの異なる方法があります (優先度の順にリストされています):
SPLIT_HAND_PIN
を設定します: 左右を決定するためにピンを読み込みます。ピンが high の場合、それが左側です。low であれば、その半分側が右側であると決定されます。EE_HANDS
を設定し、各半分に eeprom-lefthand.eep
/eeprom-righthand.eep
を書き込みます
:dfu-split-left
/:dfu-split-right
を使うことができます:avrdude-split-left
/:avrdude-split-right
を使ってください:dfu-util-split-left
/:dfu-util-split-right
を使ってくださいMASTER_RIGHT
を設定します: USB ポートに差し込まれた側はマスター側で右側であると決定されます(デフォルトの逆)#define SPLIT_HAND_PIN B7
B7
を使っているピンに置き換えます。これはオプションで、SPLIT_HAND_PIN
が未定義のままである場合、EE_HANDS メソッドまたは標準の Let's Splitが使っている MASTER_LEFT / MASTER_RIGHT 定義をまだ使うことができます。#define SPLIT_HAND_MATRIX_GRID <out_pin>,<in_pin>
#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT
が定義されている場合は、ローレベルの時に右側と決定されます。#define EE_HANDS
(SPLIT_HAND_PIN
と SPLIT_HAND_MATRIX_GRID
が定義されていない場合のみ動作します)
eeprom-lefthand.eep
/eeprom-righthand.eep
がそれぞれの半分に書き込まれた後で、EEPROM 内に格納されている左右の設定の値を読み込みます。#define MASTER_RIGHT
#define USE_I2C
#define SOFT_SERIAL_PIN D0
D0
あるいは D1
,D2
,D3
,E6
。#define MATRIX_ROW_PINS_RIGHT { <row pins> }
#define MATRIX_COL_PINS_RIGHT { <col pins> }
MATRIX_ROW_PINS_RIGHT
/MATRIX_COL_PINS_RIGHT
を定義することができます。現在のところ、MATRIX_ROW_PINS
のサイズは MATRIX_ROW_PINS_RIGHT
と同じでなければならず、列の定義も同様です。#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }
DIRECT_PINS_RIGHT
を定義することができます。現在のところ、DIRECT_PINS
のサイズは DIRECT_PINS_RIGHT
と同じでなければなりません。#define RGBLED_SPLIT { 6, 6 }
#define SELECT_SOFT_SERIAL_SPEED <speed>
(デフォルトの速度は1です)
#define SPLIT_USB_DETECT
#define SPLIT_USB_TIMEOUT 2000
SPLIT_USB_DETECT
を使う時のマスタ/スレーブを検出する場合の最大タイムアウト#define SPLIT_USB_TIMEOUT_POLL 10
SPLIT_USB_DETECT
を使う時のマスタ/スレーブを検出する場合のポーリング頻度rules.mk
ファイルこれは、トップレベルの Makefile
から include される make ファイルです。これは特定の機能を有効または無効にするだけでなく、コンパイルする MCU に関する情報を設定するために使われます。
DEFAULT_FOLDER
FIRMWARE_FORMAT
qmk_firmware
フォルダにコピーされる形式 (bin, hex) を定義します。SRC
LIB_SRC
LIB_SRC
で指定されたファイルは、SRC
で指定されたファイルの後にリンクされます。SRC += a.c
LIB_SRC += lib_b.c
SRC += c.c
LIB_SRC += lib_d.c
リンク順は以下の通りです。
... a.o c.o ... lib_b.a lib_d.a ...
LAYOUTS
LTO_ENABLE
MCU = atmega32u4
F_CPU = 16000000
ARCH = AVR8
F_USB = $(F_CPU)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
BOOTLOADER = atmel-dfu
と以下のオプション:
atmel-dfu
lufa-dfu
qmk-dfu
halfkay
caterina
bootloadHID
USBasp
これらを使って特定の機能のビルドを有効または無効にします。有効にすればするほどファームウェアが大きくなり、MCU には大きすぎるファームウェアを構築するリスクがあります。
BOOTMAGIC_ENABLE
MOUSEKEY_ENABLE
EXTRAKEY_ENABLE
CONSOLE_ENABLE
COMMAND_ENABLE
COMBO_ENABLE
NKRO_ENABLE
AUDIO_ENABLE
RGBLIGHT_ENABLE
LEADER_ENABLE
MIDI_ENABLE
UNICODE_ENABLE
BLUETOOTH
SPLIT_KEYBOARD
CUSTOM_MATRIX
DEBOUNCE_TYPE
WAIT_FOR_USB
NO_USB_STARTUP_CHECK
USB 経由でサービスを提供するために、QMK は USB エンドポイントを使う必要があります。 これらは有限なリソースです: 各マイクロコントローラは特定の数しか持ちません。 これは一緒に有効にできる機能を制限します。 利用可能なエンドポイントを超えると、ビルドエラーをひきおこします。
以下の機能は個別のエンドポイントを必要とするかもしれません:
MOUSEKEY_ENABLE
EXTRAKEY_ENABLE
CONSOLE_ENABLE
NKRO_ENABLE
MIDI_ENABLE
RAW_ENABLE
VIRTSER_ENABLE
エンドポイントの使用率を向上させるために、HID 機能を組み合わせて1つのエンドポイントを使うようにすることができます。
デフォルトでは、MOUSEKEY
、EXTRAKEY
および NKRO
が単一のエンドポイントに結合されます。
基本キーボード機能も、KEYBOARD_SHARED_EP = yes
を設定することで同じエンドポイントに結合することができます。
これによりもう1つのエンドポイントが解放されますが、一部の BIOS ではブートキーボードプロトコルの切り替えを実装しないため、キーボードが動作しなくなるかもしれません。
マウスの結合も、ブートマウス互換性を破壊します。
この機能が必要な場合は、MOUSE_SHARED_EP = no
を設定することで、マウスを結合しないようにすることができます。