[private]
default:
    @just --list

# compile moonlander matej keymap (artifact lands in firmware/)
moonlander:
    make -C qmk_upstream zsa/moonlander:matej QMK_USERSPACE={{justfile_directory()}}
    mkdir -p firmware
    mv -f zsa_moonlander_matej.bin firmware/
    rm -f qmk_upstream/zsa_moonlander_matej.bin

# compile + flash moonlander (polls until keyboard is in DFU mode; -d filter avoids the Cambridge DAC VID:PID collision)
flash-moonlander: moonlander
    until dfu-util -a 0 -d 0483:df11 -s 0x08000000:leave -D firmware/zsa_moonlander_matej.bin >/dev/null 2>&1; do sleep 0.5; done
    @echo "flashed"

# generate compile_commands.json for clangd / LSP
compdb:
    cd qmk_upstream && QMK_USERSPACE={{justfile_directory()}} qmk compile --compiledb -kb zsa/moonlander -km matej

# format C/H files in place
fmt:
    git ls-files '*.c' '*.h' | xargs --no-run-if-empty clang-format -i

# bump submodule(s) to latest tag
bump-qmk submodule="":
    #!/usr/bin/env bash
    set -e
    if [ -z "{{submodule}}" ]; then
        targets="qmk_upstream qmk_framework"
    else
        targets="{{submodule}}"
    fi
    for sm in $targets; do
        old=$(git -C $sm describe --tags --exact-match HEAD 2>/dev/null || git -C $sm rev-parse --short HEAD)
        git -C $sm fetch --tags --quiet
        new=$(git -C $sm tag --sort=-creatordate | head -1)
        git -C $sm checkout --quiet "$new"
        echo "bumped $sm from $old to $new"
    done
