QMK Firmwareのビルドと書き込みをWSL2とDockerでやる

gitはshallow cloneとsparse checkoutを活用してダウンロードを最小限にする。
dockerを使うことでビルド環境の構築をしない。
ファームウェアの書き込みはWSL2からavrdude.exeを呼んで行う。

参照

QMK Firmware

mkdir ~/qmk && cd ~/qmk

git clone --depth=1 --filter=blob:none --sparse https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
git sparse-checkout init --cone
git sparse-checkout add bin drivers lib quantum tmk_core util
git sparse-checkout add keyboards/7skb
git submodule update --init --recursive --depth=1

git switch -c ebith
cp -r keyboards/7skb/keymaps/default keyboards/7skb/keymaps/ebith

cd ~/qmk
tee build.sh << EOM > /dev/null
#!/usr/bin/env sh
docker run --rm -it -v $PWD/qmk_firmware:/qmk_firmware qmkfm/base_container /bin/bash -c 'cd /qmk_firmware && make 7skb:ebith'
EOM
chmod +x build.sh

avrdude

cd ~/qmk
git clone --depth=1 --filter=blob:none --sparse https://github.com/qmk/qmk_toolbox.git
git sparse-checkout init --cone
git sparse-checkout add common windows
chmod +x windows/QMK\ Toolbox/avrdude.exe

cd ~/qmk
tee write.sh << EOM > /dev/null
#!/usr/bin/env sh
TOOLBOXDIR=~/qmk/qmk_toolbox/
MODECMD='/mnt/c/Windows/System32/mode.com'

COMPORT1=$(${MODECMD}|grep -o 'COM[0-9]*')
COMPORT2=""
while [ "$COMPORT2" = "" ];do
  sleep 0.5
  printf "."
  COMPORT2=$(${MODECMD}|grep -v $COMPORT1 |grep -o 'COM[0-9]*')
done
echo $COMPORT2
${TOOLBOXDIR}windows/QMK\ Toolbox/avrdude.exe -C ${TOOLBOXDIR}common/avrdude.conf -c avr109 -p m32u4 -P ${COMPORT2} -U flash:w:$*
EOM
chmod +x write.sh

ビルドと書き込み

./build.sh
./write.sh qmk_firmware/7skb_rev1_ebith.hex # リセットする