VIAやRemapのZMK版であるZMK Studioに対応したファームウェアを作る

準備

該当するキーボードのzmk-configのリポジトリをcloneしてくる

tree
./
├── build.yaml
├── config/
   ├── boards/
   └── shields/
       └── osprey-remix/
           ├── Kconfig.defconfig
           ├── Kconfig.shield
           ├── osprey-remix.conf
           ├── osprey-remix.dtsi
           ├── osrpey-remix.overlay
           └── osrpey-remix.zmk.yml
   ├── info.json
   ├── osprey-remix.conf
   ├── osrpey-remix.keymap
   └── west.yml
└── README.md
        

ビルドにスニペットを使用する

ZMK Studio使用するUSB通信のエンドポイントを有効化する

build.yaml
---
include:
  - board: nice_nano_v2
    shield: osrpey-remix
    snippet: studio-rpc-usb-uart
    artifact-name: osprey-remix-zmk

ZMK Studioを有効化する

configに次の設定を書く

config/osprey-remix.conf
CONFIG_ZMK_STUDIO=y
CONFIG_ZMK_STUDIO_LOCKING=n

Physical Layoutを定義する

ドキュメントを読むとQMK JSONから変換するように書いてあるが、変換ツールが上手く起動しなかった

zmk/app/dts/layouts/common at main · zmkfirmware/zmk · GitHub
からコピペして適当に修正して使った

config/boards/shields/osprey-remix/osprey-remix.dtsi
#include <dt-bindings/zmk/matrix_transform.h>
#include <physical_layouts.dtsi>
 
/ {
    chosen {
        zmk,physical-layout = &osprey_physical_layout;
    };
 
    osprey_physical_layout: osprey_physical_layout {
        compatible = "zmk,physical-layout";
        display-name = "Osprey";
        transform = <&default_transform>;
        kscan = <&kscan0>;
 
        keys  //                     w   h    x    y     rot    rx    ry
            = <&key_physical_attrs 100 100    0    0       0     0     0>
            , ...
            ;
    };
 
    ...
};