Compare commits

...

6 commits

Author SHA1 Message Date
Nick Brassel
127c664647
Backport GitHub Copilot instructions. (#25953)
Some checks failed
Update API Data / api_data (push) Waiting to run
CI Build Major Branch / Determine concurrency (push) Waiting to run
CI Build Major Branch / Compile keymap default (push) Blocked by required conditions
CI Build Major Branch / Compile keymap xap (push) Blocked by required conditions
CI Build Major Branch / Consolidation (push) Blocked by required conditions
CLI CI / test (push) Waiting to run
Update develop after master merge / develop_update (push) Waiting to run
Lint Format / lint (push) Waiting to run
Regenerate Files / regen (push) Waiting to run
Unit Tests / test (push) Waiting to run
Generate Docs / generate (push) Has been cancelled
2026-01-15 11:47:35 +11:00
Joel Challis
7d66c11f37
Lint default dynamic keymap layer count (#25948) 2026-01-13 16:48:59 +11:00
Joel Challis
e391793f73
Remove binary symbols from keymaps (#25947) 2026-01-11 18:15:14 +00:00
Álvaro A. Volpato
70c36c6c97
First support for KKC Wily (#25852) 2026-01-11 09:47:23 -08:00
Thanh Son Tran
56a2e332e1
Update tyson60 pid (#25935)
* Update support S6xty5

* Delete chconf.h

* Update manufacturer, community layout for hhkb

* Update layout

* fix row index

* Update tyson60s

* Update community layout and layout name

* Update remove rgb test mode

* Update capslock led

* Apply suggestions from code review

Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>

* Remove deprecated s6xty5

* Update tyson60 product id

---------

Co-authored-by: Trần Thanh Sơn <son.tt1@teko.vn>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2026-01-10 08:01:15 +08:00
dependabot[bot]
e31384babf
Bump JamesIves/github-pages-deploy-action from 4.7.6 to 4.8.0 (#25943)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.6 to 4.8.0.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.6...v4.8.0)

---
updated-dependencies:
- dependency-name: JamesIves/github-pages-deploy-action
  dependency-version: 4.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-09 19:50:23 +00:00
18 changed files with 941 additions and 6 deletions

430
.github/copilot-instructions.md vendored Normal file
View file

@ -0,0 +1,430 @@
---
applyTo: "**"
excludeAgent:
- "coding-agent"
---
# GitHub Copilot Instructions for QMK Pull Request Review
This document provides automated review guidance based on the [QMK PR Checklist](https://docs.qmk.fm/pr_checklist) and it is intended only for use by GitHub Copilot code-review agent during pull request reviews.
## General PR Requirements
### Branch and Submission Standards
- **Source Branch Policy**: Verify PR is NOT submitted from submitter's own `master` branch
- Flag if submitter is using their own `master` branch as source
- Suggest using feature branches instead for cleaner fork management
- **Target Branch Policy**:
- **New keyboard additions**`master` branch (new folders under `keyboards/`)
- **All other changes**`develop` branch:
- Keyboard updates, refactors, or moves
- Core code changes
- Data-driven configuration migrations
- Any modifications to existing keyboards
- **PR Scope**: PRs should contain the smallest set of modifications for a single change
- Flag PRs that modify multiple keyboards simultaneously
- Suggest splitting large PRs into focused, incremental changes
- **Merge Conflicts**: Check for unresolved merge conflicts
### File Naming and Structure
- **Lowercase Requirement**: All new directories and filenames must be lowercase
- Exception: Upstream sources with original uppercase (LUFA, ChibiOS)
- Exception: Core files with valid justification
- **Reject**: Board designer preference for uppercase is NOT valid justification
### License Headers
- **Required**: Valid license headers on all `*.c` and `*.h` files
- **Recommended**: GPL2/GPL3 for consistency
- **Format**: Check for proper GPL2+ header or SPDX identifier
```c
// Copyright 2024 Your Name (@yourgithub)
// SPDX-License-Identifier: GPL-2.0-or-later
```
- **Exception**: Simple assignment-only `rules.mk` files don't need headers
- **Flag**: Missing or ambiguous license headers (blocks merge)
### QMK Best Practices
- **Include Guards**: Use `#pragma once` instead of `#ifndef` guards in headers
- **Abstractions Required**: No low-level GPIO/I2C/SPI functions
- Must use QMK abstractions (flag direct hardware access)
- **Timing Functions**:
- Use `wait_ms()` instead of `_delay_ms()`
- Remove `#include <util/delay.h>`
- Use `timer_read()`, `timer_read32()` from `timer.h`
- **New Abstractions**: If proposing new abstraction, suggest:
1. Prototype in own keyboard first
2. Discuss with QMK Collaborators on Discord
3. Refactor as separate core change
4. Remove the keyboard-specific implementation from board
---
## Keymap PR Reviews
**Scope**: These rules apply to files within `keyboards/*/keymaps/*` subdirectories.
### Note on Personal Keymaps
- **Policy Change**: Personal keymap submissions no longer accepted
- **Permitted**: Vendor-specific keymaps only
- Naming convention: `default_${vendor}` (e.g., `default_clueboard`)
- Can be more feature-rich than stock `default` keymaps
### Keymap Code Standards
- **Includes**: `#include QMK_KEYBOARD_H` preferred over specific board files
- **Enums**: Prefer layer enums to `#define`s
- **Custom Keycodes**: First entry must be `QK_USER`
- **Formatting**: Check spacing alignment on commas and keycodes (spaces, not tabs)
- **VIA**: Keymaps should NOT enable VIA
- VIA keymaps belong in [VIA QMK Userspace](https://github.com/the-via/qmk_userspace_via)
---
## Keyboard PR Reviews
**Scope**: These rules apply to keyboard-level files in `keyboards/*` directories, excluding files within the `keymaps/` subdirectories. This includes:
- `info.json` or `keyboard.json` (keyboard root or variant level)
- `readme.md` (keyboard level)
- `rules.mk` (keyboard level)
- `config.h` (keyboard level, not keymap level)
- `<keyboard>.c` and `<keyboard>.h` files
- Hardware configuration files (`halconf.h`, `mcuconf.h`, `chconf.h`)
### Branch Targeting
- **New Keyboards**: Target `master` branch
- New additions to `keyboards/` folder submit to `master`
- **Keyboard Moves**: Must target `develop` branch
- Check `data/mappings/keyboard_aliases.hjson` is updated for moves
- **Keyboard Updates/Refactors**: Must target `develop` to reduce merge conflicts
- **Data Driven Migration**: Must target `develop`
### info.json and keyboard.json Requirements
- **Data-Driven Configuration**: Encourage maximum use of `info.json` and `keyboard.json` schema features
- **Schema Validation**: All `info.json` and `keyboard.json` files must validate against `data/schemas/keyboard.jsonschema`
- Use QMK CLI: `qmk lint -kb <keyboard_name>` to validate
- Schema defines required fields, data types, and valid values
- Check for schema validation errors before submitting PR
- **Mandatory Elements**:
- Valid URL
- Valid maintainer
- Valid USB VID/PID and device version
- Displays correctly in Configurator (Ctrl+Shift+I to preview)
- `layout` definitions include matrix positions
- Standard layout definitions where applicable
- Community Layout macro names when applicable
- Microcontroller and bootloader specified
- Diode direction (if not using direct pins)
- **Layout Naming**:
- Single layout: Use `LAYOUT` or community layout name
- Multiple layouts: Include `LAYOUT_all` + alternate names
- Prefer community layout names (e.g., `LAYOUT_tkl_ansi`, `LAYOUT_ortho_4x4`)
- **Configuration in info.json or keyboard.json** (when applicable):
- Direct pin configuration
- Backlight, Split keyboard, Encoder, Bootmagic configs
- LED Indicator, RGB Light, RGB Matrix configs
- **Format**: Run `qmk format-json -i` before submitting
### USB VID/PID Uniqueness
VID+PID combination must be unique across all keyboards. Individual VID or PID values can be reused with different partners.
**Validation Steps:**
1. Extract VID and PID from keyboard.json/info.json in the PR
2. Search for existing usage: `grep -r '"vid".*"0xVVVV"' keyboards/ --include="*.json" | grep -l '"pid".*"0xPPPP"'`
3. If results found: Check if BOTH VID AND PID match in same file
- Both match = **COLLISION** - request different PID
- Only one matches = **OK** - different keyboards can share individual values
4. For keyboard variants/revisions under same keyboard folder:
- Different PID recommended for functionally different variants
- Same PID acceptable if revisions only differ in hardware routing/pin assignments
**Quick Reference:**
- Same PID + Different VID = Valid
- Same VID + Different PID = Valid
- Same VID + Same PID = Invalid
**Review Response:**
For collision:
```
VID+PID collision: 0xVVVV:0xPPPP already used by keyboards/[path]/file.json
+Please assign a different PID. VID can remain the same.
```
For uniqueness confirmed:
```
VID+PID validation: 0xVVVV:0xPPPP is unique (no collisions found)
```
### readme.md Requirements
- **Template**: Must follow [official template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)
- **Flash Command**: Present with `:flash` at end
- **Hardware Link**: Valid availability link (unless handwired)
- Private groupbuys acceptable
- One-off prototypes will be questioned
- Open-source should link to files
- **Reset Instructions**: Clear bootloader mode instructions
- **Images Required**:
- Keyboard and PCB photos preferred
- Must be hosted externally (imgur, etc.)
- Direct image links required (not preview pages)
- Example: `https://i.imgur.com/vqgE7Ok.jpg` not `https://imgur.com/vqgE7Ok`
### rules.mk Standards
- **Removed Items**:
- `MIDI_ENABLE`, `FAUXCLICKY_ENABLE`, `HD44780_ENABLE`
- Size comments like `(-/+size)`
- Alternate bootloader lists if one specified
- MCU parameter re-definitions matching defaults in `mcu_selection.mk`
- **Comment Updates**: Change bootloader comments to generic
- **Forbidden Features at Keyboard Level** (these belong in keymap-level `rules.mk` only):
- `COMBO_ENABLE`
- `ENCODER_MAP_ENABLE`
### config.h Standards (Keyboard Level)
- **Prohibited**:
- `#define DESCRIPTION`
- Magic Key Options, MIDI Options, HD44780 configuration
- User preference `#define`s (belong in keymap)
- Re-defining default values (`DEBOUNCE`, RGB settings)
- Copy/pasted comment blocks explaining features
- Commented-out unused defines
- `#include "config_common.h"`
- `#define MATRIX_ROWS/COLS` (unless custom matrix)
- **Minimal Code**: Only critical board boot code required
- **No Vial**: Vial-related files/changes not accepted
### Keyboard Implementation Files
#### `<keyboard>.c`
- **Remove Empty Functions**: Delete empty or commented-out weak-defined functions
- `xxxx_xxxx_kb()`, `xxxx_xxxx_user()` implementations
- **Migration**: `matrix_init_board()``keyboard_pre_init_kb()`
- **Custom Matrix**: Use `lite` variant when possible for standard debounce
- `CUSTOM_MATRIX = lite` preferred
- Full custom matrix (`yes`) requires justification
- **LED Indicators**: Prefer Configuration Options over custom `led_update_*()` implementations
- **Hardware Configuration**: Basic functionality for OLED, encoders, etc. at keyboard level
#### `<keyboard>.h`
- **Include**: `#include "quantum.h"` at top
- **Layout Macros**: Move to `info.json` or `keyboard.json` (no longer in header)
### Default Keymap Standards
**Scope**: These rules specifically apply to files within `keyboards/*/keymaps/default/` directories.
- **Pristine Requirement**: Bare minimum clean slate
- No custom keycodes
- No advanced features (non-exhaustive list of examples: tap dance, macros)
- Basic mod taps and home row mods acceptable when necessary
- Standard layouts preferred -- see examples in `layouts/default/` and `layouts/community/`
- **Removed Examples**: Delete `QMKBEST`/`QMKURL` macros
- **Tri Layer**: Use Tri Layer feature instead of manual `layer_on/off()` + `update_tri_layer()`
- **Encoder Map**: Use encoder map feature, `encoder_update_user()` may not be present
- **No VIA**: Default keymap should not enable VIA
- **Additional Keymaps**: Example/bells-and-whistles keymaps acceptable in same PR (separate from default)
### Prohibited Files
- **No VIA JSON**: Belongs in [VIA Keyboard Repo](https://github.com/the-via/keyboards)
- **No KLE JSON**: Not used within QMK
- **No Cross-Keyboard Sources**: Don't include files from other keyboard vendors
- Exception: Core files (e.g., `drivers/sensors/pmw3360.c`)
- Use of vendor-specific code (e.g., `wilba_tech/wt_main.c`) only when keyboard exists in the same enclosing vendor folder (e.g. a `wilba_tech` keyboard)
- Multi-board code is candidate for core refactoring when intended for use by multiple vendors
### Wireless Keyboards
- **Policy**: Wireless/Bluetooth PRs rejected without complete wireless code
- Wireless code may not include anything resembling precompiled data such as `*.a` files or other libraries
- Firmware blobs are not permitted in raw form or as compiled C-style arrays either.
- GPL2+ license requires full source disclosure
- Historically abused for VIA compatibility without releasing sources
- PRs without wireless capability will be held indefinitely
- Existing merged wireless boards from same vendor held until sources provided
### ChibiOS-Specific Requirements
- **Board Definitions**: Strong preference for existing ChibiOS board definitions
- Use equivalent Nucleo boards when possible
- Example: STM32L082KZ can use `BOARD = ST_NUCLEO64_L073RZ`
- QMK is eliminating custom board definitions due to maintenance burden
- **New Board Definitions**:
- Must NOT be embedded in keyboard PR
- Submit as separate Core PR
- `board.c` must have standard `__early_init()` and empty `boardInit()`
- Migrate code intended for `__early_init()` → keyboard-local `early_hardware_init_pre/post()`
- Migrate code intended for `boardInit()` → keyboard-local `board_init()`
---
## Core PR Reviews
### Targeting and Scope
- **Branch**: All core PRs must target `develop` branch
- **Single Focus**: Smallest set of changes per PR
- PRs with multiple areas will be asked to split
- Keyboard/keymap changes only if affecting base builds or default-like keymaps
- Keymap modifications (non-default) should be followup PR after core merge
- Large refactoring PRs affecting other keymaps raised separately
### Testing Requirements
- **New Hardware Support**: Requires test keyboard under `keyboards/handwired/onekey`
- New MCUs: Add child keyboard targeting new MCU for build verification
- New hardware (displays, matrix, peripherals): Provide associated keymap
- Exception: If existing keymap can leverage functionality (consult Collaborators)
- **Callbacks**: New `_kb`/`_user` callbacks must return `bool` for user override
- **Unit Tests**: Strongly recommended, may be required
- Critical code areas (keycode pipeline) will require tests
- Boost confidence in current and future correctness
### Code Quality
- **Subjective Review**: Other requirements at QMK Collaborators' discretion
- **Documentation**: Core changes should be well-documented
---
## Automated Review Checklist
When reviewing PRs, check the following systematically:
### File Changes Review
1. **License headers** on all C/H files (GPL2+ preferred, others must be GPL2+ compatible, SPDX format preferred)
2. **File naming** lowercase (flag exceptions needing justification)
3. **Include guards** use `#pragma once`
4. **No low-level hardware access** (GPIO, I2C, SPI direct register writes)
5. **Timing abstractions** (`wait_ms()`, `timer_read()` usage)
### info.json and keyboard.json Validation
1. **Schema Compliance**: `keyboard.json` and `info.json` files validate against `data/schemas/keyboard.jsonschema`
- Both files are identical syntax, however the `keyboard.json` dictates a buildable target, `info.json` does not
- Run `qmk lint -kb <keyboard>` to check schema validation
- Check for proper data types (strings, integers, arrays, objects)
- Verify required fields are present
- Ensure enum values match allowed options in schema
2. All mandatory fields present and valid
3. `qmk format-json -i` has been run (formats and validates)
4. Layout macros moved from headers
5. Community layout names used where applicable
### rules.mk Cleanup
1. Deprecated features removed
2. No size comments
3. No keymap-only features at keyboard level
4. No redundant MCU parameter definitions
### config.h Cleanup
1. No `DESCRIPTION`, `config_common.h`, or prohibited includes
2. No default value re-definitions
3. No commented-out defines or feature documentation blocks
4. No user preference defines at keyboard level
### Keymap Quality
1. Default keymaps are pristine (no custom keycodes/advanced features)
2. No `QMKBEST`/`QMKURL` macros
3. Encoder map feature used instead of `encoder_update_user()`
4. Tri Layer feature used for multi-layer access
5. No VIA enabled in default keymap
### Documentation
1. readme.md follows template
2. Flash command present with `:flash`
3. Reset instructions clear
4. External image hosting (direct links)
5. Valid hardware availability link
### Code Organization
1. Empty weak-defined functions removed from `<keyboard>.c`
2. Proper migration of init functions
3. No cross-vendor source files
4. No VIA/KLE JSON files
### Branch and Scope
1. Not submitted from submitter's own `master` branch (use feature branches)
2. PR is focused on single change
3. Targets correct branch:
- `master` for new keyboard additions
- `develop` for keyboard updates/refactors/moves and core changes
4. No merge conflicts
---
## Review Response Templates
### For source master branch usage:
```
⚠️ This PR appears to be submitted from your own `master` branch. For future PRs, we recommend using feature branches instead of committing to your `master`. This makes it easier to keep your fork updated and manage multiple PRs.
See: [Best Practices: Your Fork's Master](https://docs.qmk.fm/newbs_git_using_your_master_branch)
```
### For incorrect target branch:
```
❌ This PR targets the wrong branch:
- **New keyboard additions** should target `master`
- **Keyboard updates/refactors/moves** should target `develop`
- **Core changes** should target `develop`
Please change the target branch accordingly.
```
### For missing license headers:
```
❌ Missing GPL-compatible license headers on the following files:
- [list files]
Please add GPL2+ headers (GPL2/GPL3 recommended). Example:
\`\`\`c
// Copyright 2024 Your Name (@yourgithub)
// SPDX-License-Identifier: GPL-2.0-or-later
\`\`\`
```
### For non-lowercase filenames:
```
❌ The following files/directories must be lowercase:
- [list files]
Exception: Only valid if from upstream sources (LUFA, ChibiOS) or justified by core consistency.
```
### For config.h violations:
```
⚠️ Found prohibited config.h elements:
- [list specific issues: DESCRIPTION, default value re-definitions, etc.]
Please remove these and refer to [Data Driven Configuration](https://docs.qmk.fm/data_driven_config).
```
### For info.json or keyboard.json issues:
```
⚠️ info.json or keyboard.json needs attention:
- [list missing mandatory fields]
- Please run: \`qmk format-json -i path/to/info.json\` (or keyboard.json)
- Validate with: \`qmk lint -kb <keyboard_name>\`
```
### For schema validation errors:
```
❌ Schema validation failed for info.json or keyboard.json:
- [list specific validation errors from schema]
- Check `data/schemas/keyboard.jsonschema` for valid field definitions
- Common issues:
- Invalid data types (e.g., string instead of integer)
- Missing required fields
- Invalid enum values
- Incorrectly formatted pin definitions
```
### For non-pristine default keymap:
```
⚠️ Default keymap should be pristine (clean slate for users):
- Remove: [custom keycodes/tap dance/macros/etc.]
- Keep it minimal with standard layouts where possible
Consider moving advanced features to a separate example keymap.
```
---
## Notes for GitHub Copilot
- Focus reviews on **objective checklist items** that can be automatically verified
- Flag **definite violations** with ❌
- Suggest improvements for **recommendations** with ⚠️
- **Provide specific file/line references** when flagging issues
- **Link to relevant QMK documentation** for each issue
- **Prioritize blocking issues** (license, merge conflicts, branch policy)
- **Be constructive**: Suggest fixes, not just problems
- **Acknowledge trade-offs**: Some guidelines have valid exceptions
This is meant as a **first-pass review** to catch common issues before human review. Complex architectural decisions, code quality, and subjective assessments still require human QMK Collaborator review.

View file

@ -57,7 +57,7 @@ jobs:
- name: Deploy - name: Deploy
if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }} if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }}
uses: JamesIves/github-pages-deploy-action@v4.7.6 uses: JamesIves/github-pages-deploy-action@v4.8.0
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
branch: gh-pages branch: gh-pages

View file

@ -11,6 +11,9 @@
"on_state": 1 "on_state": 1
}, },
"debounce": 5, "debounce": 5,
"dynamic_keymap": {
"layer_count": 4
},
"features": { "features": {
"command": false, "command": false,
"console": false "console": false

View file

@ -333,6 +333,17 @@
} }
} }
}, },
"dynamic_keymap": {
"type": "object",
"properties": {
"eeprom_max_addr": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"layer_count": {
"type": "integer",
"minimum": 1,
"maximum": 32
}
}
},
"eeprom": { "eeprom": {
"properties": { "properties": {
"driver": {"type": "string"}, "driver": {"type": "string"},

View file

@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
), ),
/* LOWER /* LOWER
* ,-------------------------------------------. ,-----------------------------------------. * ,-------------------------------------------. ,-----------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
* |--------+------+------+------+------+------| |------+------+------+------+------+------| * |--------+------+------+------+------+------| |------+------+------+------+------+------|
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
* |--------+------+------+------+------+------| |------+------+------+------+------+------| * |--------+------+------+------+------+------| |------+------+------+------+------+------|
@ -78,7 +78,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------| * |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* |------+------+------+------+------+------| |------+------+------+------+------+------| * |------+------+------+------+------+------| |------+------+------+------+------+------|
* | F1 | F2 | F3 | F4 | F5 | F6 |-------. ,-------| | Left | Down | Up |Right | | * | F1 | F2 | F3 | F4 | F5 | F6 |-------. ,-------| | Left | Down | Up |Right | |
* |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
* | F7 | F8 | F9 | F10 | F11 | F12 |-------| |-------| + | - | = | [ | ] | \ | * | F7 | F8 | F9 | F10 | F11 | F12 |-------| |-------| + | - | = | [ | ] | \ |
* `-----------------------------------------/ / \ \-----------------------------------------' * `-----------------------------------------/ / \ \-----------------------------------------'

View file

@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* LOWER /* LOWER
* QWERTY * QWERTY
* ,--------------------------------------------. ,----------------------------------------------. * ,--------------------------------------------. ,----------------------------------------------.
* | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
* |---------+------+------+------+------+------| |------+------+------+------+------+-----------| * |---------+------+------+------+------+------| |------+------+------+------+------+-----------|
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
* |---------+------+------+------+------+------| |------+------+------+------+------+-----------| * |---------+------+------+------+------+------| |------+------+------+------+------+-----------|
@ -74,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |---------+------+------+------+------+------| |------+------+------+------+------+-----------| * |---------+------+------+------+------+------| |------+------+------+------+------+-----------|
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* |---------+------+------+------+------+------| |------+------+------+------+------+-----------| * |---------+------+------+------+------+------| |------+------+------+------+------+-----------|
* | F1 | F2 | F3 | F4 | F5 | F6 |---------------. ,---------------| Left | Down | Up |Right | ; | | * | F1 | F2 | F3 | F4 | F5 | F6 |---------------. ,---------------| Left | Down | Up |Right | ; | |
* |---------+------+------+------+------+------| [ | [ | | [ | [ |------+------+------+------+------+-----------| * |---------+------+------+------+------+------| [ | [ | | [ | [ |------+------+------+------+------+-----------|
* | F7 | F8 | F9 | F10 | F11 | F12 |------|--------| |-------|-------| + | - | = | [ | ] | \ | * | F7 | F8 | F9 | F10 | F11 | F12 |------|--------| |-------|-------| + | - | = | [ | ] | \ |
* `--------------------------------------------| / \ |----------------------------------------------' * `--------------------------------------------| / \ |----------------------------------------------'

View file

@ -34,7 +34,7 @@
}, },
"usb": { "usb": {
"device_version": "0.0.1", "device_version": "0.0.1",
"pid": "0x5336", "pid": "0x3633",
"vid": "0x5453" "vid": "0x5453"
}, },
"ws2812": { "ws2812": {

20
keyboards/wily/info.json Normal file
View file

@ -0,0 +1,20 @@
{
"manufacturer": "KKC",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0x5750",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"mousekey": true,
"extrakey": true,
"nkro": true
},
"build": {
"lto": true
},
"diode_direction": "COL2ROW",
"processor": "STM32F411",
"bootloader": "stm32-dfu"
}

26
keyboards/wily/readme.md Normal file
View file

@ -0,0 +1,26 @@
# KKC Wily
The Wily is a 65% keyboard by Keyote Key Company.
* Keyboard Maintainer: [gondolindrim](https://github.com/gondolindrim)
* Hardware Supported: three PCB variants (solderable, hotswap with Tsangan bottom row, hotswap with default bottom row), both based on STM32F072
* Hardware Availability: not yet available for purchase as of november 2025.
Make example for this keyboard (after setting up your build environment):
make wily/<version>:default
Where `<version>` can be either `wily_s` , `wily_h625` or `wily_h700`. Flashing example for this keyboard:
make wily/<version>: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 (Escape) and plug in the keyboard
* **Physical reset button**: press and hold the button on the back of the PCB for five seconds
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View file

@ -0,0 +1,90 @@
{
"keyboard_name": "Keyote Wily-H625",
"usb": {
"pid": "0x5053",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["A15", "B10", "C15", "C14", "C13", "B1", "B0", "A7", "A6", "A5", "B14", "B13", "B12", "A4", "A3"],
"rows": ["A0", "B8", "B3", "B5", "B9"]
},
"layouts": {
"LAYOUT": {
"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":[0,4], "x":4, "y":0},
{"matrix":[0,5], "x":5, "y":0},
{"matrix":[0,6], "x":6, "y":0},
{"matrix":[0,7], "x":7, "y":0},
{"matrix":[0,8], "x":8, "y":0},
{"matrix":[0,9], "x":9, "y":0},
{"matrix":[0,10], "x":10, "y":0},
{"matrix":[0,11], "x":11, "y":0},
{"matrix":[0,12], "x":12, "y":0},
{"matrix":[0,13], "x":13, "y":0},
{"matrix":[0,14], "x":14, "y":0},
{"matrix":[1,14], "x":15, "y":0},
{"matrix":[1,0], "x":0, "y":1, "w":1.5},
{"matrix":[1,1], "x":1.5, "y":1},
{"matrix":[1,2], "x":2.5, "y":1},
{"matrix":[1,3], "x":3.5, "y":1},
{"matrix":[1,4], "x":4.5, "y":1},
{"matrix":[1,5], "x":5.5, "y":1},
{"matrix":[1,6], "x":6.5, "y":1},
{"matrix":[1,7], "x":7.5, "y":1},
{"matrix":[1,8], "x":8.5, "y":1},
{"matrix":[1,9], "x":9.5, "y":1},
{"matrix":[1,10], "x":10.5, "y":1},
{"matrix":[1,11], "x":11.5, "y":1},
{"matrix":[1,12], "x":12.5, "y":1},
{"matrix":[1,13], "x":13.5, "y":1, "w":1.5},
{"matrix":[2,14], "x":15 , "y":1},
{"matrix":[2,0], "x":0 , "y":2},
{"matrix":[2,1], "x":1.75 , "y":2},
{"matrix":[2,2], "x":2.75 , "y":2},
{"matrix":[2,3], "x":3.75, "y":2},
{"matrix":[2,4], "x":4.75, "y":2},
{"matrix":[2,5], "x":5.75, "y":2},
{"matrix":[2,6], "x":6.75, "y":2},
{"matrix":[2,7], "x":7.75, "y":2},
{"matrix":[2,8], "x":8.75, "y":2},
{"matrix":[2,9], "x":9.75, "y":2},
{"matrix":[2,10], "x":10.75, "y":2},
{"matrix":[2,11], "x":11.75, "y":2},
{"matrix":[2,12], "x":12.75, "y":2, "w":2.25},
{"matrix":[2,13], "x":15 , "y":2},
{"matrix":[3,0], "x":0 , "y":3, "w":2.25},
{"matrix":[3,2], "x":2.25, "y":3},
{"matrix":[3,3], "x":3.25, "y":3},
{"matrix":[3,4], "x":4.25, "y":3},
{"matrix":[3,5], "x":5.25, "y":3},
{"matrix":[3,6], "x":6.25, "y":3},
{"matrix":[3,7], "x":7.25, "y":3},
{"matrix":[3,8], "x":8.25, "y":3},
{"matrix":[3,9], "x":9.25, "y":3},
{"matrix":[3,10], "x":10.25 , "y":3},
{"matrix":[3,11], "x":11.25, "y":3},
{"matrix":[3,12], "x":12.25, "y":3, "w":1.75},
{"matrix":[3,13], "x":14, "y":3},
{"matrix":[3,14], "x":15, "y":3},
{"matrix":[4,0], "x":0 , "y":4, "w":1.25},
{"matrix":[4,1], "x":1.25, "y":4, "w":1.25},
{"matrix":[4,2], "x":2.5 , "y":4, "w":1.25},
{"matrix":[4,6], "x":3.75, "y":4, "w":6.25},
{"matrix":[4,8], "x":10, "y":4},
{"matrix":[4,9], "x":11, "y":4},
{"matrix":[4,10], "x":12, "y":4},
{"matrix":[4,12], "x":13, "y":4},
{"matrix":[4,13], "x":14, "y":4},
{"matrix":[4,14], "x":15, "y":4}
]
}
}
}

View file

@ -0,0 +1,34 @@
/* Copyright 2025 Gondolindrim
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#define LT1GUI LT(1, KC_RGUI)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_DEL ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_END ,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, LT1GUI , KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View file

@ -0,0 +1,89 @@
{
"keyboard_name": "Keyote Wily-H700",
"usb": {
"pid": "0x5052",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["A15", "B10", "C15", "C14", "C13", "B1", "B0", "A7", "A6", "A5", "B14", "B13", "B12", "A4", "A3"],
"rows": ["A0", "B8", "B3", "B5", "B9"]
},
"layouts": {
"LAYOUT": {
"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":[0,4], "x":4, "y":0},
{"matrix":[0,5], "x":5, "y":0},
{"matrix":[0,6], "x":6, "y":0},
{"matrix":[0,7], "x":7, "y":0},
{"matrix":[0,8], "x":8, "y":0},
{"matrix":[0,9], "x":9, "y":0},
{"matrix":[0,10], "x":10, "y":0},
{"matrix":[0,11], "x":11, "y":0},
{"matrix":[0,12], "x":12, "y":0},
{"matrix":[0,13], "x":13, "y":0},
{"matrix":[0,14], "x":14, "y":0},
{"matrix":[1,14], "x":15, "y":0},
{"matrix":[1,0], "x":0, "y":1, "w":1.5},
{"matrix":[1,1], "x":1.5, "y":1},
{"matrix":[1,2], "x":2.5, "y":1},
{"matrix":[1,3], "x":3.5, "y":1},
{"matrix":[1,4], "x":4.5, "y":1},
{"matrix":[1,5], "x":5.5, "y":1},
{"matrix":[1,6], "x":6.5, "y":1},
{"matrix":[1,7], "x":7.5, "y":1},
{"matrix":[1,8], "x":8.5, "y":1},
{"matrix":[1,9], "x":9.5, "y":1},
{"matrix":[1,10], "x":10.5, "y":1},
{"matrix":[1,11], "x":11.5, "y":1},
{"matrix":[1,12], "x":12.5, "y":1},
{"matrix":[1,13], "x":13.5, "y":1, "w":1.5},
{"matrix":[2,14], "x":15 , "y":1},
{"matrix":[2,0], "x":0 , "y":2},
{"matrix":[2,1], "x":1.75 , "y":2},
{"matrix":[2,2], "x":2.75 , "y":2},
{"matrix":[2,3], "x":3.75, "y":2},
{"matrix":[2,4], "x":4.75, "y":2},
{"matrix":[2,5], "x":5.75, "y":2},
{"matrix":[2,6], "x":6.75, "y":2},
{"matrix":[2,7], "x":7.75, "y":2},
{"matrix":[2,8], "x":8.75, "y":2},
{"matrix":[2,9], "x":9.75, "y":2},
{"matrix":[2,10], "x":10.75, "y":2},
{"matrix":[2,11], "x":11.75, "y":2},
{"matrix":[2,12], "x":12.75, "y":2, "w":2.25},
{"matrix":[2,13], "x":15 , "y":2},
{"matrix":[3,0], "x":0 , "y":3, "w":2.25},
{"matrix":[3,2], "x":2.25, "y":3},
{"matrix":[3,3], "x":3.25, "y":3},
{"matrix":[3,4], "x":4.25, "y":3},
{"matrix":[3,5], "x":5.25, "y":3},
{"matrix":[3,6], "x":6.25, "y":3},
{"matrix":[3,7], "x":7.25, "y":3},
{"matrix":[3,8], "x":8.25, "y":3},
{"matrix":[3,9], "x":9.25, "y":3},
{"matrix":[3,10], "x":10.25 , "y":3},
{"matrix":[3,11], "x":11.25, "y":3},
{"matrix":[3,12], "x":12.25, "y":3, "w":1.75},
{"matrix":[3,13], "x":14, "y":3},
{"matrix":[3,14], "x":15, "y":3},
{"matrix":[4,0], "x":0 , "y":4, "w":1.5},
{"matrix":[4,1], "x":1, "y":4},
{"matrix":[4,2], "x":2.5 , "y":4, "w":1.5},
{"matrix":[4,6], "x":4, "y":4, "w":7},
{"matrix":[4,9], "x":11, "y":4},
{"matrix":[4,10], "x":12, "y":4},
{"matrix":[4,12], "x":13, "y":4},
{"matrix":[4,13], "x":14, "y":4},
{"matrix":[4,14], "x":15, "y":4}
]
}
}
}

View file

@ -0,0 +1,34 @@
/* Copyright 2025 Gondolindrim
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#define LT1GUI LT(1, KC_RGUI)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_DEL ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_END ,
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , LT1GUI , KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View file

@ -0,0 +1,21 @@
/* Copyright 2025 Gondolindrim
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define BACKLIGHT_PWM_DRIVER PWMD3
#define BACKLIGHT_PWM_CHANNEL 4
#define BACKLIGHT_PWM_PAL_MOPDE 2

View file

@ -0,0 +1,21 @@
/* Copyright 2025 Gondolindrim
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View file

@ -0,0 +1,100 @@
{
"keyboard_name": "Keyote Wily-S",
"usb": {
"pid": "0x5051",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["A15", "B10", "C15", "C14", "C13", "B1", "B0", "A7", "A6", "A5", "B14", "B13", "B12", "A4", "A3"],
"rows": ["A0", "B8", "B3", "B5", "B9"]
},
"features": {
"backlight": true
},
"backlight": {
"pin": "B4",
"levels": 20,
"as_caps_lock": true
},
"layouts": {
"LAYOUT": {
"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":[0,4], "x":4, "y":0},
{"matrix":[0,5], "x":5, "y":0},
{"matrix":[0,6], "x":6, "y":0},
{"matrix":[0,7], "x":7, "y":0},
{"matrix":[0,8], "x":8, "y":0},
{"matrix":[0,9], "x":9, "y":0},
{"matrix":[0,10], "x":10, "y":0},
{"matrix":[0,11], "x":11, "y":0},
{"matrix":[0,12], "x":12, "y":0},
{"matrix":[0,13], "x":13, "y":0},
{"matrix":[0,14], "x":14, "y":0},
{"matrix":[1,14], "x":15, "y":0},
{"matrix":[1,0], "x":0, "y":1, "w":1.5},
{"matrix":[1,1], "x":1.5, "y":1},
{"matrix":[1,2], "x":2.5, "y":1},
{"matrix":[1,3], "x":3.5, "y":1},
{"matrix":[1,4], "x":4.5, "y":1},
{"matrix":[1,5], "x":5.5, "y":1},
{"matrix":[1,6], "x":6.5, "y":1},
{"matrix":[1,7], "x":7.5, "y":1},
{"matrix":[1,8], "x":8.5, "y":1},
{"matrix":[1,9], "x":9.5, "y":1},
{"matrix":[1,10], "x":10.5, "y":1},
{"matrix":[1,11], "x":11.5, "y":1},
{"matrix":[1,12], "x":12.5, "y":1},
{"matrix":[1,13], "x":13.5, "y":1, "w":1.5},
{"matrix":[2,14], "x":15 , "y":1},
{"matrix":[2,0], "x":0 , "y":2},
{"matrix":[2,1], "x":1.75 , "y":2},
{"matrix":[2,2], "x":2.75 , "y":2},
{"matrix":[2,3], "x":3.75, "y":2},
{"matrix":[2,4], "x":4.75, "y":2},
{"matrix":[2,5], "x":5.75, "y":2},
{"matrix":[2,6], "x":6.75, "y":2},
{"matrix":[2,7], "x":7.75, "y":2},
{"matrix":[2,8], "x":8.75, "y":2},
{"matrix":[2,9], "x":9.75, "y":2},
{"matrix":[2,10], "x":10.75, "y":2},
{"matrix":[2,11], "x":11.75, "y":2},
{"matrix":[4,11], "x":12.75, "y":2},
{"matrix":[2,12], "x":13.75, "y":2, "w":1.25},
{"matrix":[2,13], "x":15 , "y":2},
{"matrix":[3,0], "x":0 , "y":3, "w":1.25},
{"matrix":[3,1], "x":1.25, "y":3},
{"matrix":[3,2], "x":2.25, "y":3},
{"matrix":[3,3], "x":3.25, "y":3},
{"matrix":[3,4], "x":4.25, "y":3},
{"matrix":[3,5], "x":5.25, "y":3},
{"matrix":[3,6], "x":6.25, "y":3},
{"matrix":[3,7], "x":7.25, "y":3},
{"matrix":[3,8], "x":8.25, "y":3},
{"matrix":[3,9], "x":9.25, "y":3},
{"matrix":[3,10], "x":10.25 , "y":3},
{"matrix":[3,11], "x":11.25, "y":3},
{"matrix":[3,12], "x":12.25, "y":3, "w":1.75},
{"matrix":[3,13], "x":14, "y":3},
{"matrix":[3,14], "x":15, "y":3},
{"matrix":[4,0], "x":0 , "y":4, "w":1.25},
{"matrix":[4,1], "x":1.25, "y":4, "w":1.25},
{"matrix":[4,2], "x":2.5 , "y":4, "w":1.25},
{"matrix":[4,6], "x":3.75, "y":4, "w":6.25},
{"matrix":[4,8], "x":10, "y":4},
{"matrix":[4,9], "x":11, "y":4},
{"matrix":[4,10], "x":12, "y":4},
{"matrix":[4,12], "x":13, "y":4},
{"matrix":[4,13], "x":14, "y":4},
{"matrix":[4,14], "x":15, "y":4}
]
}
}
}

View file

@ -0,0 +1,34 @@
/* Copyright 2025 Gondolindrim
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#define LT1GUI LT(1, KC_RGUI)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( /* Base */
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_DEL ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT , KC_END ,
KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, LT1GUI , KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT(
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View file

@ -0,0 +1,22 @@
/* Copyright 2025 Gondolindrim
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_PWM_USE_TIM3
#define STM32_PWM_USE_TIM3 TRUE