1
0

Compare commits

...

7 Commits

Author SHA1 Message Date
Jalal El Mansouri
709628dfb2 Honor BUILD_DIR in mass_compile.py (#25586) 2026-03-15 22:07:43 +11:00
Joel Challis
e5faeea94d Unit tests should not run when docs change (#26068) 2026-03-14 15:31:07 +00:00
vuvoth
7ec819eb22 docs: remove hardware link in Ferris Sweep README (#26069)
remove hardware link in Ferris Sweep readme

Corrected wording for Ferris sweep hardware description.
2026-03-14 07:30:14 -06:00
Brandon
7785e87029 Add nulldesignco/v1/nullpad (#26057) 2026-03-13 23:17:29 +00:00
Peter Cock
afb5335bf3 Switch missing default handler in OS detection docs (#26064)
Switch was missing default handler: control reaches end of non-void function

This warning gets treated as an error on Github Actions
2026-03-13 22:59:54 +00:00
Nick Brassel
9fd72b352b Extra bootstrap release package filtering. (#26039) 2026-03-12 21:05:24 +11:00
Joel Challis
7fe0c9c746 [CI] Build unit tests in parallel (#26058) 2026-03-11 16:43:02 +00:00
8 changed files with 188 additions and 11 deletions

View File

@@ -11,6 +11,7 @@ on:
pull_request:
paths:
- 'builddefs/**'
- '!builddefs/docsgen/**'
- 'quantum/**'
- 'platforms/**'
- 'tmk_core/**'
@@ -34,4 +35,4 @@ jobs:
run: pip3 install -r requirements-dev.txt
- name: Run tests
run: qmk test-c
run: qmk test-c -j $(nproc)

View File

@@ -136,6 +136,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
print_stored_setups();
}
return false;
default:
return true; // Process all other keycodes normally
}
}
```

View File

@@ -8,8 +8,7 @@ A split 34 keys column staggered keyboard named and decorated after the rustlang
* Hardware Supported:
* Ferris 0.1 (With atmega32u4 chip. Comes in 4 variants: base, low, high and compact)
* Ferris 0.2 (With stm32f072 chip. Comes in 4 variants: bling, mini, high and compact)
* Ferris sweep (With pro-micro. Comes in a couple of PCB edge cuts shapes, but with identical pinout)
* Hardware Availability: [Cuddly Keyboards](https://cuddlykeyboards.com)
* Ferris sweep (With pro-micro. Comes in a couple of PCB edge cut shapes, but with an identical pinout)
Make examples for this keyboard (after setting up your build environment):

View File

@@ -0,0 +1,126 @@
{
"manufacturer": "nulldesignco",
"keyboard_name": "nullpad",
"maintainer": "quark-works",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"matrix_pins": {
"cols": ["GP27", "GP28", "GP8", "GP10"],
"rows": ["GP12", "GP25", "GP11", "GP26", "GP9", "GP21"]
},
"processor": "RP2040",
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"flower_blooming": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"riverflow": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"starlight": true,
"starlight_dual_hue": true,
"starlight_dual_sat": true,
"typing_heatmap": true
},
"driver": "ws2812",
"layout": [
{"matrix": [5, 1], "x": 37, "y": 0, "flags": 4},
{"matrix": [3, 0], "x": 0, "y": 16, "flags": 4},
{"matrix": [3, 1], "x": 75, "y": 16, "flags": 4},
{"matrix": [3, 2], "x": 150, "y": 16, "flags": 4},
{"matrix": [4, 2], "x": 150, "y": 0, "flags": 4},
{"matrix": [4, 3], "x": 224, "y": 8, "flags": 4},
{"matrix": [2, 2], "x": 150, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 75, "y": 32, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 48, "flags": 4},
{"matrix": [1, 1], "x": 75, "y": 48, "flags": 4},
{"matrix": [1, 2], "x": 150, "y": 48, "flags": 4},
{"matrix": [2, 3], "x": 224, "y": 40, "flags": 4},
{"matrix": [0, 3], "x": 224, "y": 64, "flags": 4},
{"matrix": [0, 2], "x": 150, "y": 64, "flags": 4},
{"matrix": [0, 1], "x": 75, "y": 64, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 64, "flags": 4}
],
"sleep": true
},
"url": "https://nulldesignco.com/",
"usb": {
"device_version": "1.0.0",
"pid": "0x0011",
"vid": "0x6E6C"
},
"ws2812": {
"driver": "vendor",
"pin": "GP18"
},
"community_layouts": ["numpad_5x4"],
"layouts": {
"LAYOUT_numpad_5x4": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 1, "h": 2},
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [5, 1], "x": 0, "y": 4, "w": 2},
{"matrix": [4, 2], "x": 2, "y": 4},
{"matrix": [4, 3], "x": 3, "y": 3, "h": 2}
]
}
}
}

View File

@@ -0,0 +1,22 @@
// Copyright 2025 quark-works
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_numpad_5x4(
KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_P0, KC_PDOT, KC_PENT
)
};
bool rgb_matrix_indicators_user(void) {
if (host_keyboard_led_state().num_lock) {
rgb_matrix_set_color(16, 255, 0, 0);
}
return false;
}

View File

@@ -0,0 +1,27 @@
# nullpad v1
![sp](https://i.imgur.com/069rfPe.png)
Numpad tray mount PCB with RGB per key.
* Keyboard Maintainer: [Quark](https://github.com/quark-works)
* Hardware Supported: PCB
* Hardware Availability: https://nulldesignco.com/
Make example for this keyboard (after setting up your build environment):
make nulldesignco/nullpad/v1:default
Flashing example for this keyboard:
make nulldesignco/nullpad/v1:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (top left key or NumLock) and plug in the keyboard
* **Physical boot button**: Hold the button labeled as "BOOT" on the back of the board while you connect the keyboard to your computer.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -23,7 +23,7 @@ def mass_compile_targets(targets: List[BuildTarget], clean: bool, dry_run: bool,
os.environ.setdefault('SKIP_SCHEMA_VALIDATION', '1')
make_cmd = find_make()
builddir = Path(QMK_FIRMWARE) / '.build'
builddir = Path(env.get("BUILD_DIR")) if env.get("BUILD_DIR") is not None else Path(QMK_FIRMWARE) / '.build'
makefile = builddir / 'parallel_kb_builds.mk'
if dry_run:
@@ -71,8 +71,8 @@ print_failures: all_targets
command = target.compile_command(**env)
command[0] = '+@$(MAKE)' # Override the make so that we can use jobserver to handle parallelism
extra_args = '_'.join([f"{k}_{v}" for k, v in target.extra_args.items()])
build_log = f"{QMK_FIRMWARE}/.build/build.log.{os.getpid()}.{keyboard_safe}.{keymap_name}"
failed_log = f"{QMK_FIRMWARE}/.build/failed.log.{os.getpid()}.{keyboard_safe}.{keymap_name}"
build_log = f"{builddir}/build.log.{os.getpid()}.{keyboard_safe}.{keymap_name}"
failed_log = f"{builddir}/failed.log.{os.getpid()}.{keyboard_safe}.{keymap_name}"
target_suffix = ''
if len(extra_args) > 0:
build_log += f".{extra_args}"
@@ -101,9 +101,9 @@ all_targets: {target_filename}{target_suffix}_binary
# yapf: disable
f.write(
f"""\
@rm -rf "{QMK_FIRMWARE}/.build/{target_filename}.elf" 2>/dev/null || true
@rm -rf "{QMK_FIRMWARE}/.build/{target_filename}.map" 2>/dev/null || true
@rm -rf "{QMK_FIRMWARE}/.build/obj_{target_filename}" || true
@rm -rf "{builddir}/{target_filename}.elf" 2>/dev/null || true
@rm -rf "{builddir}/{target_filename}.map" 2>/dev/null || true
@rm -rf "{builddir}/obj_{target_filename}" || true
"""# noqa
)
# yapf: enable

View File

@@ -418,7 +418,7 @@ __EOT__
# Get the latest toolchain release from https://github.com/qmk/qmk_toolchains
local latest_toolchains_release=$(github_api_call repos/qmk/qmk_toolchains/releases/latest - | grep -oE '"tag_name": "[^"]+' | grep -oE '[^"]+$')
# Download the specific release asset with a matching keyword
local toolchain_url=$(github_api_call repos/qmk/qmk_toolchains/releases/tags/$latest_toolchains_release - | grep -oE '"browser_download_url": "[^"]+"' | grep -oE 'https://[^"]+' | grep $(fn_os)$(fn_arch))
local toolchain_url=$(github_api_call repos/qmk/qmk_toolchains/releases/tags/$latest_toolchains_release - | grep -oE '"browser_download_url": "[^"]+"' | grep -oE 'https://[^"]+' | grep -E "qmk_toolchains-.*$(fn_os)$(fn_arch)")
if [ -z "$toolchain_url" ]; then
echo "No toolchain found for this OS/Arch combination." >&2
exit 1
@@ -445,7 +445,7 @@ __EOT__
# Get the latest flashing tools release from https://github.com/qmk/qmk_flashutils
local latest_flashutils_release=$(github_api_call repos/qmk/qmk_flashutils/releases/latest - | grep -oE '"tag_name": "[^"]+' | grep -oE '[^"]+$')
# Download the specific release asset with a matching keyword
local flashutils_url=$(github_api_call repos/qmk/qmk_flashutils/releases/tags/$latest_flashutils_release - | grep -oE '"browser_download_url": "[^"]+"' | grep -oE 'https://[^"]+' | grep "$osarchvariant")
local flashutils_url=$(github_api_call repos/qmk/qmk_flashutils/releases/tags/$latest_flashutils_release - | grep -oE '"browser_download_url": "[^"]+"' | grep -oE 'https://[^"]+' | grep -E "qmk_flashutils-.*$osarchvariant")
if [ -z "$flashutils_url" ]; then
echo "No flashing tools found for this OS/Arch combination." >&2
exit 1