[Bug] `qmk c2json` does not include `users` directory in qmk userpsace
#25,630 opened on Sep 7, 2025
Description
Describe the Bug
Hello,
I am not sure whether this is a bug or a feature request.
I am using a qmk userspace to share layouts between my two ZSA keyboards. I will take the voyager as an example but the issue occurs for both keyboards. The keymap file is in the keyboard/zsa/voyager directory. It includes a layers.h file defined my users directory.
qmk compile works without issues. However, qmk c2json (which I wanted to user with keymap-drawer) gives an error because cpp cannot find the layers.h file.
➜ qmk --verbose c2json -kb zsa/voyager -km vandalt
☐ Running command: ['cpp', '/home/vandal/repos/perso/qmk-keymap/keyboards/zsa/voyager/keymaps/vandalt/keymap.c']
☐ The C pre-processor ran into a fatal error: /home/vandal/repos/perso/qmk-keymap/keyboards/zsa/voyager/keymaps/vandalt/keymap.c:2:10: fatal error: layers.h: No such file or directory
☒ Something went wrong. Try to use --no-cpp.
Use the CLI in verbose mode to find out more.
Using --no-cpp fixes the issue, but will not expand anything defined in the layers.h file.
➜ qmk --verbose c2json -kb zsa/voyager -km vandalt --no-cpp
{"keyboard": "zsa/voyager", "keymap": "vandalt", "layout": "LAYOUT_WRAPPER", "layers": [["VANDALT_BASE_LAYER"], ["VANDALT_SYM_LAYER"], ["VANDALT_NAV_LAYER"], ["VANDALT_MOUSE_LAYER"], ["VANDALT_NOMOD_LAYER"]]}
To use cpp and have the layers expanded, it seems the fix would be to include the userspace when running cpp. Adding "-I/path/to/users/vandalt" to the list on the line referenced below fixes the issue.
I would be happy to send a PR for this, but I was not sure what the best way to include any userspace directory was. Also happy for someone else with more knowledge of the codebase to implement this instead of me if that is easier.
Link to my keymap: https://github.com/vandalt/qmk-keymap/tree/fix-c2json-modularity
Keyboard Used
zsa/voyager
Link to product page (if applicable)
Operating System
Linux
qmk doctor Output
Ψ QMK Doctor is checking your environment.
Ψ CLI version: 1.1.7
Ψ QMK home: /home/vandal/repos/perso/qmk_firmware
Ψ Detected Linux (Fedora Linux 42 (Workstation Edition)).
⚠ Missing or outdated udev rules for 'atmel-dfu' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'kiibohd' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'stm32-dfu' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'apm32-dfu' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'gd32v-dfu' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'wb32-dfu' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'at32-dfu' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'bootloadhid' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'usbasploader' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'usbtinyisp' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'md-boot' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Detected ModemManager without the necessary udev rules. Please either disable it or set the appropriate udev rules if you are using a Pro Micro.
⚠ Missing or outdated udev rules for 'caterina' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
⚠ Missing or outdated udev rules for 'hid-bootloader' boards. Run 'sudo cp /home/vandal/repos/perso/qmk_firmware/util/udev/50-qmk.rules /etc/udev/rules.d/'.
Ψ Testing userspace candidate: /home/vandal/repos/perso/qmk-keymap -- Valid `qmk.json`
Ψ QMK userspace: /home/vandal/repos/perso/qmk-keymap
Ψ Userspace enabled: True
Ψ Git branch: c2json-include-userspace
Ψ Repo version: 0.29.12
Ψ - Latest c2json-include-userspace: 2025-09-07 15:28:35 -0400 (74e4578d7a) -- WIP: Include my userspace as a temporary fix for cpp and c2json
Ψ - Latest upstream/master: 2025-09-08 02:25:17 +0900 (20e7906c80) -- Add new keyboard "Palmbrain" (#25377)
Ψ - Latest upstream/develop: 2025-09-07 17:25:52 +0000 (e01313e7d0) -- Merge remote-tracking branch 'origin/master' into develop
Ψ - Common ancestor with upstream/master: 2025-08-06 21:15:03 +0100 (1a58fce043) -- Bump actions/download-artifact from 4 to 5 (#25545)
Ψ - Common ancestor with upstream/develop: 2025-08-06 21:15:03 +0100 (1a58fce043) -- Bump actions/download-artifact from 4 to 5 (#25545)
Ψ CLI installed in virtualenv.
Ψ All dependencies are installed.
Ψ Found arm-none-eabi-gcc version 15.1.0
Ψ Successfully compiled using arm-none-eabi-gcc
Ψ Successfully tested arm-none-eabi-binutils using arm-none-eabi-size
Ψ Found avr-gcc version 14.2.0
Ψ Successfully compiled using avr-gcc
Ψ Successfully tested avr-binutils using avr-size
Ψ Found avrdude version 8.0
Ψ Found dfu-programmer version 1.1.0
Ψ Found dfu-util version 0.11
Ψ Submodules are up to date.
Ψ Submodule status:
Ψ - lib/chibios: 2025-05-15 08:25:11 +0000 -- (8bd61b8043)
Ψ - lib/chibios-contrib: 2025-01-08 21:03:31 +0100 -- (3ac181e4)
Ψ - lib/googletest: 2021-06-11 06:37:43 -0700 -- (e2239ee6)
Ψ - lib/lufa: 2022-08-26 12:09:55 +1000 -- (549b97320)
Ψ - lib/vusb: 2022-06-13 09:18:17 +1000 -- (819dbc1)
Ψ - lib/printf: 2022-06-29 23:59:58 +0300 -- (c2e3b4e)
Ψ - lib/pico-sdk: 2025-04-20 21:24:29 +1000 -- (d0c5cac)
Ψ - lib/lvgl: 2022-04-11 04:44:53 -0600 -- (e19410f8)
Ψ QMK is ready to go, but minor problems were found
Is AutoHotKey / Karabiner installed
- AutoHotKey (Windows)
- Karabiner (macOS)
Other keyboard-related software installed
No response
Additional Context
No response