QMKにはキーボードをつないだ先のOSが何かを推定して返す機能がある。
WindowsとMacでキーマップを変えたい時などに非常に有用な機能で、OSによってControlキーとCommandキーを入れ替えるなどに使える。 起動時に実行されるkeyboard_post_init_user関数で、OSを判別してレイヤーを変えるわけだが、ドキュメントにも書いてあるようにこれが機能するまでには少し時間がかかる。 RP2040で試してみた結果、400msほど待ってからdetected_host_os()をコールすれば、レイヤー変更が実行された。
void keyboard_post_init_user(void) {
wait_ms(400);
switch (detected_host_os()) {
case OS_WINDOWS:
layer_move(_WIN);
break;
case OS_MACOS:
case OS_IOS:
layer_move(_MAC);
break;
case OS_LINUX:
layer_move(_WIN);
break;
default:
layer_move(_WIN);
}