Skip to content

[Keyboard] Add lesieber/zer0pad#26118

Open
lesieber wants to merge 3 commits intoqmk:masterfrom
lesieber:keyboard/lesieber/zer0pad
Open

[Keyboard] Add lesieber/zer0pad#26118
lesieber wants to merge 3 commits intoqmk:masterfrom
lesieber:keyboard/lesieber/zer0pad

Conversation

@lesieber
Copy link
Copy Markdown

Description

Adding support for the Zer0Pad, a 3x3 ortholinear macropad designed by Leon Sieber.

Types of Changes

  • New keyboard

Keyboard Information

  • Keyboard Name: Zer0Pad
  • Manufacturer: Leon Sieber
  • Maintainer: @lesieber
  • Hardware: Pro Micro (ATmega32U4)
  • Hardware Availability: Custom PCB (design files available on request)

Features

  • 9-key 3x3 ortholinear layout
  • 4 programmable layers with cycling via bottom-right key
  • VIA support for easy configuration
  • Raw HID support for companion app integration

Checklist

  • My code follows the code style of this project
  • I have tested the changes locally
  • I have read the CONTRIBUTING document
  • I have added keyboard-level readme.md

A 3x3 ortholinear macropad using Pro Micro with 4 layers and VIA support.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added keyboard keymap via Adds via keymap and/or updates keyboard for via support labels Mar 30, 2026
@zvecr zvecr added invalid pr_checklist_pending Needs changes as per the PR checklist labels Mar 30, 2026
Comment thread keyboards/lesieber/zer0pad/config.h Outdated
Comment thread keyboards/lesieber/zer0pad/keymaps/default/keymap.c
Comment thread keyboards/lesieber/zer0pad/keymaps/via/keymap.c Outdated
Comment thread keyboards/lesieber/zer0pad/zer0pad.c Outdated
Comment on lines +26 to +39
void eeconfig_init_user(void) {
// Initialize default layer names in EEPROM
const char* defaults[] = {"Base", "Numbers", "Functions", "Media"};
for (int i = 0; i < 4; i++) {
strncpy(layer_names[i], defaults[i], 15);
layer_names[i][15] = '\0';
}
eeconfig_update_user_datablock(layer_names);
}

void keyboard_post_init_user(void) {
// Load layer names from EEPROM
eeconfig_read_user_datablock(layer_names);
}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should be kb functions, not user functions.

Comment thread keyboards/lesieber/zer0pad/config.h Outdated
#define DYNAMIC_KEYMAP_LAYER_COUNT 4

// EEPROM for storing layer names (16 chars per layer x 4 layers = 64 bytes)
#define EECONFIG_USER_DATA_SIZE 64
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#define EECONFIG_USER_DATA_SIZE 64
#define EECONFIG_KB_DATA_SIZE 64

or

Suggested change
#define EECONFIG_USER_DATA_SIZE 64

Comment on lines +40 to +42
"dynamic_keymap": {
"layer_count": 4
},
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"dynamic_keymap": {
"layer_count": 4
},

"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": false,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"nkro": false,

Comment thread keyboards/lesieber/zer0pad/zer0pad.c Outdated
}

// Called when layer state changes
layer_state_t layer_state_set_user(layer_state_t state) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same here.

Comment thread keyboards/lesieber/zer0pad/zer0pad.c Outdated
}

// Handle raw HID commands from companion app / web configurator
void raw_hid_receive(uint8_t *data, uint8_t length) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a heads up, this will likely error out when VIA is enabled.

- Remove VIA keymap from qmk_firmware submission\n- Simplify default keymap to pristine single-layer layout\n- Drop redundant/default config entries\n- Remove custom keyboard code that conflicted with review guidance\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@lesieber
Copy link
Copy Markdown
Author

Thanks for the review — I've pushed the requested changes.

Addressed in this update:

  • removed VIA keymap content from the QMK PR
  • simplified keymaps/default/keymap.c to a pristine default map
  • removed redundant literal defaults from config/keyboard metadata
  • removed custom keyboard-side logic that was part of the rejected scope

VIA content is handled separately in the VIA repo PR:
the-via/keyboards#2533

Remove effectively empty config.h and rules.mk so qmk lint --strict no longer fails for lesieber/zer0pad.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@zvecr zvecr removed invalid via Adds via keymap and/or updates keyboard for via support pr_checklist_pending Needs changes as per the PR checklist labels Apr 22, 2026
Copy link
Copy Markdown
Member

@drashna drashna left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you set the dev board, it sets a number of things, including the controller, and bootloader. And makes it easier for converter support.

"cols": ["D1", "D0", "D4"],
"rows": ["C6", "D7", "E6"]
},
"processor": "atmega32u4",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"processor": "atmega32u4",

"manufacturer": "Leon Sieber",
"keyboard_name": "Zer0Pad",
"maintainer": "lesieber",
"bootloader": "caterina",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"bootloader": "caterina",
"development_board": "promicro",

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants