diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 0000000000..ee51380bd5 --- /dev/null +++ b/.github/copilot-instructions.md @@ -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 ` + - 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) +- `.c` and `.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 ` 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 + +#### `.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 + +#### `.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 ` 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 `.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 \` +``` + +### 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. diff --git a/.github/workflows/auto_approve.yml b/.github/workflows/auto_approve.yml index d526db397c..a68d7c63ed 100644 --- a/.github/workflows/auto_approve.yml +++ b/.github/workflows/auto_approve.yml @@ -4,7 +4,7 @@ permissions: {} on: schedule: - - cron: "*/5 * * * *" + - cron: "*/30 * * * *" jobs: automatic_approve: diff --git a/.github/workflows/bootstrap_testing.yml b/.github/workflows/bootstrap_testing.yml index c80d89a218..42c8720486 100644 --- a/.github/workflows/bootstrap_testing.yml +++ b/.github/workflows/bootstrap_testing.yml @@ -4,20 +4,41 @@ on: push: branches: [master, develop, xap] paths: - - "util/env-bootstrap.sh" - - ".github/workflows/bootstrap_testing.yml" + - 'util/env-bootstrap.sh' + - '.github/workflows/bootstrap_testing.yml' pull_request: paths: - - "util/env-bootstrap.sh" - - ".github/workflows/bootstrap_testing.yml" + - 'util/env-bootstrap.sh' + - '.github/workflows/bootstrap_testing.yml' workflow_dispatch: permissions: contents: read jobs: + prep: + runs-on: ubuntu-latest + + outputs: + any_changed: ${{ steps.file_changes.outputs.any_changed }} + + steps: + - name: Get changed files + id: file_changes + if: ${{ github.event_name == 'pull_request' }} + uses: tj-actions/changed-files@v47 + with: + use_rest_api: true + files: | + util/env-bootstrap.sh + .github/workflows/bootstrap_testing.yml + bootstrap-test-linux: name: Bootstrap (Linux) + + needs: prep + if: ${{ github.event_name != 'pull_request' || needs.prep.outputs.any_changed == 'true' }} + runs-on: ubuntu-latest strategy: @@ -163,6 +184,10 @@ jobs: bootstrap-test-macos: name: Bootstrap (macOS) + + needs: prep + if: ${{ github.event_name != 'pull_request' || needs.prep.outputs.any_changed == 'true' }} + strategy: fail-fast: false matrix: @@ -208,6 +233,9 @@ jobs: bootstrap-test-windows: name: Bootstrap (Windows) + needs: prep + if: ${{ github.event_name != 'pull_request' || needs.prep.outputs.any_changed == 'true' }} + strategy: fail-fast: false matrix: diff --git a/.github/workflows/ci_build_major_branch_keymap.yml b/.github/workflows/ci_build_major_branch_keymap.yml index 3b2db843a9..57593b1a1b 100644 --- a/.github/workflows/ci_build_major_branch_keymap.yml +++ b/.github/workflows/ci_build_major_branch_keymap.yml @@ -105,7 +105,12 @@ jobs: continue-on-error: true run: | export NCPUS=$(( $(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null) -1 )) - qmk mass-compile -t -j $NCPUS -e DUMP_CI_METADATA=yes $(jq -r '.["${{ matrix.target }}"].targets' targets.json) || touch .failed + targets=$(jq -r '.["${{ matrix.target }}"].targets' targets.json | tr ' ' '\n' | sort) + if [ -z "${targets}" ]; then + echo "Zero build targets detected" + exit 0 + fi + qmk mass-compile -t -j $NCPUS -e DUMP_CI_METADATA=yes $targets || touch .failed - name: Upload binaries uses: actions/upload-artifact@v6 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 8a0229f873..104b19892b 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -57,7 +57,7 @@ jobs: - name: Deploy 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: token: ${{ secrets.GITHUB_TOKEN }} branch: gh-pages diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index ec5e04804d..342b8907c6 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -31,7 +31,7 @@ jobs: with: use_rest_api: true - - name: Print info + - name: Print git info run: | git rev-parse --short HEAD echo ${{ github.event.pull_request.base.sha }} @@ -57,7 +57,7 @@ jobs: if [[ $KEYMAP_ONLY -gt 0 ]]; then echo "linting ${KB}" - qmk lint --keyboard ${KB} && qmk info -l --keyboard ${KB} + qmk lint --strict --keyboard ${KB} && qmk info -l --keyboard ${KB} exit_code=$(($exit_code + $?)) fi done @@ -78,10 +78,37 @@ jobs: fi exit $exit_code - - name: Verify keyboard aliases + - name: Reset git repo if: always() shell: 'bash {0}' run: | git reset --hard git clean -xfd + + - name: Verify keyboard targets + if: always() + shell: 'bash {0}' + run: | + exit_code=0 + + for file in $(find keyboards/ -name rules.mk | grep -v /keymaps/ | grep -v /common/ | grep -v /lib/); do + dir=$(dirname $file) + + $(find $dir -name keyboard.json -exec false {} +) + if [[ $? == 0 ]]; then + echo "$dir::Legacy target detected" + + ((++exit_code)) + fi + done + + if [[ $exit_code -gt 255 ]]; then + exit 255 + fi + exit $exit_code + + - name: Verify keyboard aliases + if: always() + shell: 'bash {0}' + run: | qmk ci-validate-aliases diff --git a/.gitignore b/.gitignore index 6ec26d3876..e9aaf0b27b 100644 --- a/.gitignore +++ b/.gitignore @@ -65,6 +65,8 @@ cmake-build-debug CMakeLists.txt *.pdf *.zip +.env +.envrc # Let these ones be user specific, since we have so many different configurations *.code-workspace diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson index 8a0c93e5ac..cd4a127844 100644 --- a/data/mappings/info_config.hjson +++ b/data/mappings/info_config.hjson @@ -196,7 +196,7 @@ // Split Keyboard "SOFT_SERIAL_PIN": {"info_key": "split.serial.pin"}, - "SELECT_SOFT_SERIAL_SPEED": {"info_key": "split.serial.speed"}, + "SELECT_SOFT_SERIAL_SPEED": {"info_key": "split.serial.speed", "value_type": "int"}, "SPLIT_HAND_MATRIX_GRID": {"info_key": "split.handedness.matrix_grid", "value_type": "array", "to_c": false}, "SPLIT_HAND_PIN": {"info_key": "split.handedness.pin"}, "SPLIT_USB_DETECT": {"info_key": "split.usb_detect.enabled", "value_type": "flag"}, diff --git a/data/mappings/info_defaults.hjson b/data/mappings/info_defaults.hjson index d1f1579c55..fd59dacac0 100644 --- a/data/mappings/info_defaults.hjson +++ b/data/mappings/info_defaults.hjson @@ -11,6 +11,9 @@ "on_state": 1 }, "debounce": 5, + "dynamic_keymap": { + "layer_count": 4 + }, "features": { "command": false, "console": false diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 900f736dea..64976f6304 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -334,6 +334,17 @@ } } }, + "dynamic_keymap": { + "type": "object", + "properties": { + "eeprom_max_addr": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "layer_count": { + "type": "integer", + "minimum": 1, + "maximum": 32 + } + } + }, "eeprom": { "properties": { "driver": {"type": "string"}, diff --git a/docs/drivers/ws2812.md b/docs/drivers/ws2812.md index 0c26ec6248..1d70113897 100644 --- a/docs/drivers/ws2812.md +++ b/docs/drivers/ws2812.md @@ -292,7 +292,7 @@ Set the color of a single LED. This function does not immediately update the LED --- -### `void ws812_set_color_all(uint8_t red, uint8_t green, uint8_t blue)` {#api-ws2812-set-color-all} +### `void ws2812_set_color_all(uint8_t red, uint8_t green, uint8_t blue)` {#api-ws2812-set-color-all} Set the color of all LEDs. diff --git a/docs/tap_hold.md b/docs/tap_hold.md index 2aa628c535..3e88a7a5c2 100644 --- a/docs/tap_hold.md +++ b/docs/tap_hold.md @@ -604,6 +604,20 @@ Or if the two keys are on opposite hands and the `PERMISSIVE_HOLD` option is enabled, this will produce `C` with `SFT_T(KC_A)` settled as held when that `KC_C` is released. +As an exception to the opposite hands rule, Chordal Hold supports combining +multiple same-side modifiers within the tapping term. This is useful for +multi-mod hotkeys like Ctrl + Shift + V. For instance with Chordal Hold together +with either Permissive Hold or Hold On Other Key Press, the following input +results in Ctrl + Shift + V being sent, supposing `J` and `K` are on the right +hand side and `V` is on the left hand side: + +- `SFT_T(KC_J)` Down +- `CTL_T(KC_K)` Down +- `KC_V` Down +- `KC_V` Up +- `SFT_T(KC_J)` Up +- `CTL_T(KC_K)` Up + ### Chordal Hold Handedness Determining whether keys are on the same or opposite hands involves defining the @@ -779,7 +793,7 @@ Do not use `MOD_xxx` constants like `MOD_LSFT` or `MOD_RALT`, since they're 5-bi [Auto Shift](features/auto_shift) has its own version of `retro tapping` called `retro shift`. It is extremely similar to `retro tapping`, but holding the key past `AUTO_SHIFT_TIMEOUT` results in the value it sends being shifted. Other configurations also affect it differently; see [here](features/auto_shift#retro-shift) for more information. -### Speculative Hold +## Speculative Hold Speculative Hold makes mod-tap keys more responsive by applying the modifier instantly on keydown, before the tap-hold decision is made. This is especially useful for actions like Shift+Click with a mouse, which can feel laggy with standard mod-taps. @@ -820,4 +834,4 @@ Well, it's simple really: customization. But specifically, it depends on how you ## Why are there no `*_kb` or `*_user` functions?! -Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum- or keyboard-level function. Only user-level functions are useful here, so there is no need to mark them as such. \ No newline at end of file +Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum- or keyboard-level function. Only user-level functions are useful here, so there is no need to mark them as such. diff --git a/keyboards/aleblazer/zodiark/readme.md b/keyboards/aleblazer/zodiark/readme.md index 392744dede..a27ed94f8a 100644 --- a/keyboards/aleblazer/zodiark/readme.md +++ b/keyboards/aleblazer/zodiark/readme.md @@ -2,7 +2,7 @@ ![Zodiark Split](https://i.imgur.com/49O8aowl.jpg) -A split keyboard with 5x7 including a thumbcluster, encoders on each side, per key RGB, and 2x I2C headers per side, supporiting 1.3"/.96" 128x64 OLEDs (the 1.3" is an SSH1106 OLED, refer to QMK documentation for limitations), .91" 128x32 OLEDs. +A split keyboard with 5x7 including a thumbcluster, encoders on each side, per key RGB, and 2x I2C headers per side, supporting 1.3"/.96" 128x64 OLEDs (the 1.3" is an SH1106 OLED, refer to QMK documentation for limitations) and .91" 128x32 OLEDs. * Keyboard Maintainer: [Aleblazer](https://github.com/Aleblazer/), [Discord Link](https://discord.gg/BCSbXwskVt) * Hardware Supported: Pro Micro and derivatives diff --git a/keyboards/dmqdesign/spin/keyboard.json b/keyboards/dmqdesign/spin/keyboard.json index dd3cbaa838..374fb7d7de 100644 --- a/keyboards/dmqdesign/spin/keyboard.json +++ b/keyboards/dmqdesign/spin/keyboard.json @@ -49,19 +49,19 @@ {"matrix": [0, 0], "x": 0, "y": 0}, {"matrix": [1, 0], "x": 1, "y": 0}, {"matrix": [2, 0], "x": 2, "y": 0}, - {"matrix": [2, 4], "x": 3.5, "y": 0}, + {"matrix": [2, 4], "x": 3.5, "y": 0, "encoder": 0}, {"matrix": [0, 1], "x": 0, "y": 1}, {"matrix": [1, 1], "x": 1, "y": 1}, {"matrix": [2, 1], "x": 2, "y": 1}, - {"matrix": [1, 4], "x": 3.5, "y": 1.5}, + {"matrix": [1, 4], "x": 3.5, "y": 1.5, "encoder": 1}, {"matrix": [0, 2], "x": 0, "y": 2}, {"matrix": [1, 2], "x": 1, "y": 2}, {"matrix": [2, 2], "x": 2, "y": 2}, - {"matrix": [0, 4], "x": 3.5, "y": 3}, + {"matrix": [0, 4], "x": 3.5, "y": 3, "encoder": 2}, {"matrix": [0, 3], "x": 0, "y": 3}, {"matrix": [1, 3], "x": 1, "y": 3}, {"matrix": [2, 3], "x": 2, "y": 3} diff --git a/keyboards/ergodox_ez/readme.md b/keyboards/ergodox_ez/readme.md index 59a2840fd0..08bfc91d15 100644 --- a/keyboards/ergodox_ez/readme.md +++ b/keyboards/ergodox_ez/readme.md @@ -25,7 +25,7 @@ If you have `ORYX_CONFIGURATOR` defined in your keymap's `config.h`, this enable ### Indicator LEDs -You can use the `LED_LEVEL` keycode to cycle through the brightness levels for the LEDs on the top right of the keyboard. These settings are saved in eeprom (persistant memory). +You can use the `LED_LEVEL` keycode to cycle through the brightness levels for the LEDs on the top right of the keyboard. These settings are saved in eeprom (persistent memory). Alternatively, you can set the brightness by calling the following functions: diff --git a/keyboards/fatotesa/keyboard.json b/keyboards/fatotesa/keyboard.json index 3013e8b812..f300daa8ce 100644 --- a/keyboards/fatotesa/keyboard.json +++ b/keyboards/fatotesa/keyboard.json @@ -32,9 +32,9 @@ "rows": ["B6", "E6", "D4", "D7", "B4", "B5"] } }, - "bootmagic": { - "matrix": [4, 1] - } + }, + "bootmagic": { + "matrix": [4, 1] }, "matrix_pins": { "cols": ["F5", "F6", "F7", "B1", "B3", "B2", "B6", null], @@ -43,7 +43,7 @@ "usb": { "device_version": "1.0.0", "pid": "0x0000", - "vid": "0xFEED" + "vid": "0x5347" }, "layouts": { "LAYOUT": { diff --git a/keyboards/fatotesa/keymaps/default/keymap.c b/keyboards/fatotesa/keymaps/default/keymap.c index 1f6aa80488..a9fadb4142 100644 --- a/keyboards/fatotesa/keymaps/default/keymap.c +++ b/keyboards/fatotesa/keymaps/default/keymap.c @@ -13,18 +13,20 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [0] = LAYOUT( - KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_END, KC_INSERT, KC_DELETE, KC_KB_MUTE, - KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, - LT(1, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_ENTER, - KC_LEFT_CTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_BACKSLASH, - KC_LEFT_SHIFT, KC_LEFT_ANGLE_BRACKET, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT, - CW_TOGG, KC_LWIN, KC_LEFT_ALT, KC_BACKSPACE, KC_LEFT_ALT, KC_SPACE, KC_RIGHT_ALT, KC_RIGHT_CTRL, KC_NO, KC_NO - ), + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_END, KC_INSERT, KC_DELETE, KC_KB_MUTE, + KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_ENTER, + OSM(MOD_LCTL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_BACKSLASH, + OSM(MOD_LSFT), KC_LEFT_ANGLE_BRACKET, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, OSM(MOD_RSFT), + CW_TOGG, OSM(MOD_LGUI), KC_LEFT_ALT, MO(1), OSM(MOD_LALT), KC_SPACE, OSM(MOD_RALT), KC_RIGHT_CTRL, KC_NO, KC_NO + ), + [1] = LAYOUT( - _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, - _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______ - )}; + QK_REBOOT, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, + _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/ivndbt/ows/keyboard.json b/keyboards/ivndbt/ows/keyboard.json new file mode 100644 index 0000000000..f36c67a42e --- /dev/null +++ b/keyboards/ivndbt/ows/keyboard.json @@ -0,0 +1,74 @@ +{ + "keyboard_name": "OWS", + "manufacturer": "ivndbt", + "url": "https://github.com/ivndbt/obiwanstenobit", + "maintainer": "ivndbt", + "usb": { + "vid": "0x6961", + "pid": "0x3033", + "device_version": "0.1.1" + }, + "development_board": "promicro_rp2040", + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP4", "GP5", "GP6", "GP8", "GP7", "GP22", "GP26", "GP21", "GP23", "GP20"], + "rows": ["GP9", "GP28", "GP27"] + }, + "features": { + "bootmagic": true, + "nkro": true, + "steno": true, + "mousekey": false, + "extrakey": true + }, + "host": { + "default": { + "nkro": true + } + }, + "stenography": { + "enabled": true, + "protocol": "geminipr" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [2, 8], "x": 0, "y": 0}, + {"matrix": [0, 9], "x": 1, "y": 0}, + {"matrix": [0, 8], "x": 2, "y": 0}, + {"matrix": [0, 7], "x": 3, "y": 0}, + {"matrix": [0, 6], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + + {"matrix": [0, 0], "x": 8, "y": 0}, + {"matrix": [0, 1], "x": 9, "y": 0}, + {"matrix": [0, 2], "x": 10, "y": 0}, + {"matrix": [0, 3], "x": 11, "y": 0}, + {"matrix": [0, 4], "x": 12, "y": 0}, + {"matrix": [2, 3], "x": 13, "y": 0}, + + {"matrix": [2, 9], "x": 0, "y": 1}, + {"matrix": [1, 9], "x": 1, "y": 1}, + {"matrix": [1, 8], "x": 2, "y": 1}, + {"matrix": [1, 7], "x": 3, "y": 1}, + {"matrix": [1, 6], "x": 4, "y": 1}, + {"matrix": [1, 5], "x": 5, "y": 1}, + + {"matrix": [1, 0], "x": 8, "y": 1}, + {"matrix": [1, 1], "x": 9, "y": 1}, + {"matrix": [1, 2], "x": 10, "y": 1}, + {"matrix": [1, 3], "x": 11, "y": 1}, + {"matrix": [1, 4], "x": 12, "y": 1}, + {"matrix": [2, 4], "x": 13, "y": 1}, + + {"matrix": [2, 7], "x": 3, "y": 3}, + {"matrix": [2, 6], "x": 4, "y": 3}, + {"matrix": [2, 5], "x": 5, "y": 3}, + + {"matrix": [2, 0], "x": 8, "y": 3}, + {"matrix": [2, 1], "x": 9, "y": 3}, + {"matrix": [2, 2], "x": 10, "y": 3} + ] + } + } +} diff --git a/keyboards/ivndbt/ows/keymaps/default/keymap.c b/keyboards/ivndbt/ows/keymaps/default/keymap.c new file mode 100644 index 0000000000..19d484e952 --- /dev/null +++ b/keyboards/ivndbt/ows/keymaps/default/keymap.c @@ -0,0 +1,49 @@ +// Copyright 2026 ivndbt +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +// Layers declarations +enum layers { + _PLOVER, + _LOWER, + _RAISE, + _CONTROL, + _QWERTY +}; + +#define LOWER TL_LOWR +#define RAISE TL_UPPR +#define QWERTY TG(_QWERTY) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_PLOVER] = LAYOUT( + LOWER, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR, + RAISE, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR, + STN_N1, STN_A, STN_O, STN_E, STN_U, STN_N2 + ), + +[_LOWER] = LAYOUT( + _______, _______, _______, _______, _______, KC_DEL, KC_ESC, _______, KC_UP, _______, KC_PGUP, _______, + _______, _______, _______, _______, _______, _______, KC_TAB, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, + _______, _______, _______, KC_HOME, KC_END, _______ + ), + +[_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______, + _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT + ), + +[_CONTROL] = LAYOUT( + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QWERTY, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_RBT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + ), + +[_QWERTY] = LAYOUT( + KC_BSPC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, QWERTY, + KC_SPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_Z, KC_ENT, + KC_X, KC_C, KC_V, KC_B, KC_N, KC_M + ) +}; diff --git a/keyboards/ivndbt/ows/keymaps/default/readme.md b/keyboards/ivndbt/ows/keymaps/default/readme.md new file mode 100644 index 0000000000..79cd68eb08 --- /dev/null +++ b/keyboards/ivndbt/ows/keymaps/default/readme.md @@ -0,0 +1,6 @@ +# OWS usage + +OWS is meant to be use with [Plover](https://opensteno.org/plover/) via the GeminiPR steno protocol.\ +To get started, make sure to follow the setup guide described in the [Plover Wiki](https://plover.wiki/index.php/Setting_up_a_hobbyist_writer_with_Plover) for hobbyist writers. + +For an in-depth look at its features, please visit the [project repository](https://github.com/ivndbt/obiwanstenobit). diff --git a/keyboards/ivndbt/ows/keymaps/default/rules.mk b/keyboards/ivndbt/ows/keymaps/default/rules.mk new file mode 100644 index 0000000000..7c9bf212a6 --- /dev/null +++ b/keyboards/ivndbt/ows/keymaps/default/rules.mk @@ -0,0 +1 @@ +TRI_LAYER_ENABLE = yes diff --git a/keyboards/ivndbt/ows/readme.md b/keyboards/ivndbt/ows/readme.md new file mode 100644 index 0000000000..278c10f0ed --- /dev/null +++ b/keyboards/ivndbt/ows/readme.md @@ -0,0 +1,32 @@ +# OWS + +Open-source steno keyboard with a pseudo-split layout, designed to be compact, portable, and cost-effective. + +![OWS](https://i.imgur.com/OKkenaR.jpeg "OWS v1 prototype") + +* Keyboard maintainer: [ivndbt](https://github.com/ivndbt) +* Hardware supported: Pro Micro RP2040 +* Hardware Availability: OWS is open-source, check the [project repository](https://github.com/ivndbt/obiwanstenobit) + +Make example for this keyboard (after setting up your build environment): + + make ivndbt/ows:default + +Flashing example for this keyboard: + + make ivndbt/ows: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 + +1. There are 4 ways to enter the bootloader: + + * **Physical reset button**: Double tap the `RST` button located on the back of the Controller PCB. + * **Physical boot button**: Hold the `BOOT` button as you plug the RP2040 + * **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top-left key on the right-hand Main PCB) while plugging in the keyboard. + * **Keycode in layout**: Press the key assigned to `QK_BOOT` if it is available + +2. Wait for the OS to detect the device +3. Copy the `.uf2` file to the new USB disk or flash via QMK CLI +4. Wait for the keyboard to become available \ No newline at end of file diff --git a/keyboards/keebio/foldkb/rev2_1/config.h b/keyboards/keebio/foldkb/rev2_1/config.h new file mode 100644 index 0000000000..d28027392d --- /dev/null +++ b/keyboards/keebio/foldkb/rev2_1/config.h @@ -0,0 +1,17 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* Defines for the split keyboard setup */ +#define SERIAL_USART_TX_PIN A9 +#define SERIAL_USART_RX_PIN A10 +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_PIN_SWAP + +#define USB_VBUS_PIN A7 + +/* Defines for the RGB matrix */ +#define WS2812_PWM_DRIVER PWMD3 +#define WS2812_PWM_CHANNEL 3 +#define WS2812_DMAMUX_ID STM32_DMAMUX1_TIM3_UP diff --git a/keyboards/keebio/foldkb/rev2_1/halconf.h b/keyboards/keebio/foldkb/rev2_1/halconf.h new file mode 100644 index 0000000000..ce1dfd06d7 --- /dev/null +++ b/keyboards/keebio/foldkb/rev2_1/halconf.h @@ -0,0 +1,10 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_SERIAL TRUE + +#define HAL_USE_PWM TRUE + +#include_next diff --git a/keyboards/keebio/foldkb/rev2_1/keyboard.json b/keyboards/keebio/foldkb/rev2_1/keyboard.json new file mode 100644 index 0000000000..fc2eafe431 --- /dev/null +++ b/keyboards/keebio/foldkb/rev2_1/keyboard.json @@ -0,0 +1,279 @@ +{ + "keyboard_name": "FoldKB Rev. 2.1", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "A4", "pin_b": "A3"} + ] + }, + "features": { + "bootmagic": true, + "encoder": true, + "extrakey": true, + "mousekey": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["A6", "A15", "B3", "B4", "B5", "B6", "B7", "F0"], + "rows": ["A5", "A0", "A1", "A2", "F1"] + }, + "processor": "STM32G431", + "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, + "starlight_smooth": true, + "typing_heatmap": true + }, + "driver": "ws2812", + "layout": [ + {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4}, + {"matrix": [0, 2], "x": 31, "y": 0, "flags": 4}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 4}, + {"matrix": [0, 4], "x": 59, "y": 0, "flags": 4}, + {"matrix": [0, 5], "x": 72, "y": 0, "flags": 4}, + {"matrix": [0, 6], "x": 86, "y": 0, "flags": 4}, + {"matrix": [0, 7], "x": 100, "y": 0, "flags": 4}, + {"matrix": [1, 7], "x": 100, "y": 16, "flags": 4}, + {"matrix": [1, 6], "x": 86, "y": 16, "flags": 4}, + {"matrix": [1, 5], "x": 72, "y": 16, "flags": 4}, + {"matrix": [1, 4], "x": 59, "y": 16, "flags": 4}, + {"matrix": [1, 3], "x": 45, "y": 16, "flags": 4}, + {"matrix": [1, 2], "x": 28, "y": 16, "flags": 4}, + {"matrix": [2, 2], "x": 26, "y": 32, "flags": 4}, + {"matrix": [2, 3], "x": 45, "y": 32, "flags": 4}, + {"matrix": [2, 4], "x": 59, "y": 32, "flags": 4}, + {"matrix": [2, 5], "x": 72, "y": 32, "flags": 4}, + {"matrix": [2, 6], "x": 86, "y": 32, "flags": 4}, + {"matrix": [2, 7], "x": 100, "y": 32, "flags": 4}, + {"matrix": [3, 7], "x": 100, "y": 48, "flags": 4}, + {"matrix": [3, 6], "x": 86, "y": 48, "flags": 4}, + {"matrix": [3, 5], "x": 72, "y": 48, "flags": 4}, + {"matrix": [3, 4], "x": 59, "y": 48, "flags": 4}, + {"matrix": [3, 3], "x": 45, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 22, "y": 48, "flags": 4}, + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4}, + {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4}, + {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4}, + {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4}, + {"matrix": [4, 2], "x": 22, "y": 64, "flags": 4}, + {"matrix": [4, 3], "x": 40, "y": 64, "flags": 4}, + {"matrix": [4, 4], "x": 57, "y": 64, "flags": 4}, + {"matrix": [4, 5], "x": 72, "y": 64, "flags": 4}, + {"matrix": [4, 6], "x": 86, "y": 64, "flags": 4}, + {"matrix": [4, 7], "x": 100, "y": 64, "flags": 4}, + {"x": 93, "y": 48, "flags": 2}, + {"x": 65, "y": 64, "flags": 2}, + {"x": 31, "y": 64, "flags": 2}, + {"x": 10, "y": 64, "flags": 2}, + {"x": 0, "y": 24, "flags": 2}, + {"x": 24, "y": 0, "flags": 2}, + {"x": 65, "y": 0, "flags": 2}, + {"x": 90, "y": 8, "flags": 2}, + {"matrix": [5, 7], "x": 221, "y": 0, "flags": 4}, + {"matrix": [5, 6], "x": 207, "y": 0, "flags": 4}, + {"matrix": [5, 5], "x": 193, "y": 0, "flags": 4}, + {"matrix": [5, 4], "x": 179, "y": 0, "flags": 4}, + {"matrix": [5, 3], "x": 165, "y": 0, "flags": 4}, + {"matrix": [5, 2], "x": 152, "y": 0, "flags": 4}, + {"matrix": [5, 1], "x": 138, "y": 0, "flags": 4}, + {"matrix": [5, 0], "x": 124, "y": 0, "flags": 4}, + {"matrix": [6, 0], "x": 124, "y": 16, "flags": 4}, + {"matrix": [6, 1], "x": 138, "y": 16, "flags": 4}, + {"matrix": [6, 2], "x": 152, "y": 16, "flags": 4}, + {"matrix": [6, 3], "x": 165, "y": 16, "flags": 4}, + {"matrix": [6, 4], "x": 179, "y": 16, "flags": 4}, + {"matrix": [6, 5], "x": 193, "y": 16, "flags": 4}, + {"matrix": [6, 6], "x": 207, "y": 16, "flags": 4}, + {"matrix": [6, 7], "x": 224, "y": 16, "flags": 4}, + {"matrix": [7, 7], "x": 215, "y": 32, "flags": 4}, + {"matrix": [7, 5], "x": 193, "y": 32, "flags": 4}, + {"matrix": [7, 4], "x": 179, "y": 32, "flags": 4}, + {"matrix": [7, 3], "x": 165, "y": 32, "flags": 4}, + {"matrix": [7, 2], "x": 152, "y": 32, "flags": 4}, + {"matrix": [7, 1], "x": 138, "y": 32, "flags": 4}, + {"matrix": [7, 0], "x": 124, "y": 32, "flags": 4}, + {"matrix": [8, 0], "x": 124, "y": 48, "flags": 4}, + {"matrix": [8, 1], "x": 138, "y": 48, "flags": 4}, + {"matrix": [8, 2], "x": 152, "y": 48, "flags": 4}, + {"matrix": [8, 3], "x": 165, "y": 48, "flags": 4}, + {"matrix": [8, 4], "x": 179, "y": 48, "flags": 4}, + {"matrix": [8, 5], "x": 198, "y": 48, "flags": 4}, + {"matrix": [8, 7], "x": 217, "y": 48, "flags": 4}, + {"matrix": [9, 7], "x": 215, "y": 64, "flags": 4}, + {"matrix": [9, 5], "x": 198, "y": 64, "flags": 4}, + {"matrix": [9, 4], "x": 181, "y": 64, "flags": 4}, + {"matrix": [9, 3], "x": 164, "y": 64, "flags": 4}, + {"matrix": [9, 1], "x": 145, "y": 64, "flags": 4}, + {"matrix": [9, 0], "x": 136, "y": 64, "flags": 4}, + {"matrix": [9, 0], "x": 126, "y": 64, "flags": 4}, + {"x": 121, "y": 56, "flags": 2}, + {"x": 152, "y": 64, "flags": 2}, + {"x": 207, "y": 64, "flags": 2}, + {"x": 224, "y": 52, "flags": 2}, + {"x": 224, "y": 12, "flags": 2}, + {"x": 196, "y": 0, "flags": 2}, + {"x": 159, "y": 0, "flags": 2}, + {"x": 124, "y": 8, "flags": 2} + ], + "max_brightness": 120, + "sleep": true, + "split_count": [44, 45] + }, + "split": { + "bootmagic": { + "matrix": [5, 7] + }, + "enabled": true, + "handedness": { + "pin": "A8" + }, + "matrix_pins": { + "right": { + "cols": ["A6", "A5", "A4", "A3", "A2", "B5", "B6", "B7"], + "rows": ["A15", "B3", "B4", "A0", "A1"] + } + }, + "serial": { + "driver": "usart" + }, + "transport": { + "sync": { + "matrix_state": true + } + } + }, + "usb": { + "device_version": "2.0.0", + "pid": "0x2358" + }, + "ws2812": { + "driver": "pwm", + "pin": "B0" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1.25, "y": 0}, + {"matrix": [0, 2], "x": 2.25, "y": 0}, + {"matrix": [0, 3], "x": 3.25, "y": 0}, + {"matrix": [0, 4], "x": 4.25, "y": 0}, + {"matrix": [0, 5], "x": 5.25, "y": 0}, + {"matrix": [0, 6], "x": 6.25, "y": 0}, + {"matrix": [0, 7], "x": 7.25, "y": 0}, + {"matrix": [5, 0], "x": 9, "y": 0}, + {"matrix": [5, 1], "x": 10, "y": 0}, + {"matrix": [5, 2], "x": 11, "y": 0}, + {"matrix": [5, 3], "x": 12, "y": 0}, + {"matrix": [5, 4], "x": 13, "y": 0}, + {"matrix": [5, 5], "x": 14, "y": 0}, + {"matrix": [5, 6], "x": 15, "y": 0}, + {"matrix": [5, 7], "x": 16, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 2], "x": 1.75, "y": 1, "w": 1.5}, + {"matrix": [1, 3], "x": 3.25, "y": 1}, + {"matrix": [1, 4], "x": 4.25, "y": 1}, + {"matrix": [1, 5], "x": 5.25, "y": 1}, + {"matrix": [1, 6], "x": 6.25, "y": 1}, + {"matrix": [1, 7], "x": 7.25, "y": 1}, + {"matrix": [6, 0], "x": 9, "y": 1}, + {"matrix": [6, 1], "x": 10, "y": 1}, + {"matrix": [6, 2], "x": 11, "y": 1}, + {"matrix": [6, 3], "x": 12, "y": 1}, + {"matrix": [6, 4], "x": 13, "y": 1}, + {"matrix": [6, 5], "x": 14, "y": 1}, + {"matrix": [6, 6], "x": 15, "y": 1}, + {"matrix": [6, 7], "x": 16, "y": 1, "w": 1.5}, + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 2], "x": 1.5, "y": 2, "w": 1.75}, + {"matrix": [2, 3], "x": 3.25, "y": 2}, + {"matrix": [2, 4], "x": 4.25, "y": 2}, + {"matrix": [2, 5], "x": 5.25, "y": 2}, + {"matrix": [2, 6], "x": 6.25, "y": 2}, + {"matrix": [2, 7], "x": 7.25, "y": 2}, + {"matrix": [7, 0], "x": 9, "y": 2}, + {"matrix": [7, 1], "x": 10, "y": 2}, + {"matrix": [7, 2], "x": 11, "y": 2}, + {"matrix": [7, 3], "x": 12, "y": 2}, + {"matrix": [7, 4], "x": 13, "y": 2}, + {"matrix": [7, 5], "x": 14, "y": 2}, + {"matrix": [7, 7], "x": 15, "y": 2, "w": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 2], "x": 1, "y": 3, "w": 2.25}, + {"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": [8, 0], "x": 9, "y": 3}, + {"matrix": [8, 1], "x": 10, "y": 3}, + {"matrix": [8, 2], "x": 11, "y": 3}, + {"matrix": [8, 3], "x": 12, "y": 3}, + {"matrix": [8, 4], "x": 13, "y": 3}, + {"matrix": [8, 5], "x": 14, "y": 3, "w": 1.75}, + {"matrix": [8, 7], "x": 15.75, "y": 3}, + {"matrix": [4, 0], "x": 0, "y": 4}, + {"matrix": [4, 2], "x": 1.5, "y": 4, "w": 1.25}, + {"matrix": [4, 3], "x": 2.75, "y": 4, "w": 1.25}, + {"matrix": [4, 4], "x": 4, "y": 4, "w": 1.25}, + {"matrix": [4, 5], "x": 5.25, "y": 4}, + {"matrix": [4, 6], "x": 6.25, "y": 4}, + {"matrix": [4, 7], "x": 7.25, "y": 4}, + {"matrix": [9, 0], "x": 9, "y": 4, "w": 1.25}, + {"matrix": [9, 1], "x": 10.25, "y": 4, "w": 1.5}, + {"matrix": [9, 3], "x": 11.75, "y": 4, "w": 1.25}, + {"matrix": [9, 4], "x": 13, "y": 4, "w": 1.25}, + {"matrix": [9, 5], "x": 14.25, "y": 4, "w": 1.25}, + {"matrix": [9, 7], "x": 15.5, "y": 4, "w": 1.25} + ] + } + } +} diff --git a/keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c b/keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c new file mode 100644 index 0000000000..bf3f325446 --- /dev/null +++ b/keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c @@ -0,0 +1,21 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT( + KC_MUTE, KC_ESC, KC_GRV, 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_HOME, 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_END, 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_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_PGDN, KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL + ), + [1] = LAYOUT( + KC_MUTE, QK_BOOT, KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, KC_DEL, + RM_TOGG, _______, RM_SATD, RM_SATU, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, + RM_NEXT, _______, RM_VALD, RM_VALU, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, + KC_VOLU, _______, RM_HUED, RM_HUEU, _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______, + KC_VOLD, _______, RM_SPDD, RM_SPDU, _______, _______, _______, _______, KC_0, _______, _______, _______, _______ + ), +}; diff --git a/keyboards/keebio/foldkb/rev2_1/mcuconf.h b/keyboards/keebio/foldkb/rev2_1/mcuconf.h new file mode 100644 index 0000000000..77847f5b2c --- /dev/null +++ b/keyboards/keebio/foldkb/rev2_1/mcuconf.h @@ -0,0 +1,14 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +/* enable USART1, used for split comms */ +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +/* enable TIM3, used for RGB LED PWM driver */ +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE diff --git a/keyboards/keebio/foldkb/rev2_1/rev2_1.c b/keyboards/keebio/foldkb/rev2_1/rev2_1.c new file mode 100644 index 0000000000..0fc47b1483 --- /dev/null +++ b/keyboards/keebio/foldkb/rev2_1/rev2_1.c @@ -0,0 +1,29 @@ +// Copyright 2025 Keebio (@keebio) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "quantum.h" + +void keyboard_pre_init_kb(void) { + // Disable the PD peripheral in pre-init because its pins are being used in the matrix: + PWR->CR3 |= PWR_CR3_UCPD_DBDIS; + // Call the corresponding _user() function (see https://docs.qmk.fm/#/custom_quantum_functions) + keyboard_pre_init_user(); +} + +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { return false; } + if (index == 0) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } else if (index == 1) { + if (clockwise) { + tap_code(KC_PGDN); + } else { + tap_code(KC_PGUP); + } + } + return false; +} diff --git a/keyboards/keycapsss/kimiko/rev1/keymaps/default/keymap.c b/keyboards/keycapsss/kimiko/rev1/keymaps/default/keymap.c index c61fdfc03a..5834ef9c26 100644 --- a/keyboards/keycapsss/kimiko/rev1/keymaps/default/keymap.c +++ b/keyboards/keycapsss/kimiko/rev1/keymaps/default/keymap.c @@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ), /* 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 | * |--------+------+------+------+------+------| |------+------+------+------+------+------| @@ -78,7 +78,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |------+------+------+------+------+------| |------+------+------+------+------+------| * | ` | 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 |-------| |-------| + | - | = | [ | ] | \ | * `-----------------------------------------/ / \ \-----------------------------------------' diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c b/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c index a569beed22..4050a038d3 100644 --- a/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c +++ b/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c @@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* LOWER * 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 | * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| @@ -74,7 +74,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| * | ` | 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 |------|--------| |-------|-------| + | - | = | [ | ] | \ | * `--------------------------------------------| / \ |----------------------------------------------' diff --git a/keyboards/mechanicalkeyboards/point65/config.h b/keyboards/mechanicalkeyboards/point65/config.h new file mode 100644 index 0000000000..31ba8c3f90 --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/config.h @@ -0,0 +1,24 @@ +/* Copyright 2024 Sebastiaan Swinkels @ BeanBoards + * + * 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 . + */ + +#pragma once + +/* Double tap the side button to enter bootloader */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U + +/* couple of defaults */ +#define RGB_INDICATOR_POS_OFFSET 48 /* Indicator LEDs additional brightness */ diff --git a/keyboards/mechanicalkeyboards/point65/hotswap/hotswap.c b/keyboards/mechanicalkeyboards/point65/hotswap/hotswap.c new file mode 100644 index 0000000000..1da89f6f2d --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/hotswap/hotswap.c @@ -0,0 +1,62 @@ +/* Copyright 2024 Sebastiaan Swinkels @ BeanBoards + * + * 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 . + */ + + #include "quantum.h" + + enum point65_layers { + _QWERTY, + _FUNCTION +}; + +bool rgb_matrix_indicators_kb(void) { + if (!rgb_matrix_indicators_user()){ + return false; + } + + hsv_t hsv = {0, 255, 255}; + + // Light up ESC RGB LED when _FUNCTION layer is accessed + if ((get_highest_layer(layer_state|default_layer_state)) == _FUNCTION){ + hsv.h = 43; + hsv.s = 105; + hsv.v = 255; + + if (hsv.v > rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET) { + hsv.v = rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET; + } + rgb_t rgb = hsv_to_rgb(hsv); + + rgb_matrix_set_color(0, rgb.r, rgb.g, rgb.b); + } + // end layer function + + // capslock indicator + if (host_keyboard_led_state().caps_lock) { + hsv.h = 43; + hsv.s = 105; + hsv.v = 255; + + if (hsv.v > rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET) { + hsv.v = rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET; + } + rgb_t rgb = hsv_to_rgb(hsv); + + rgb_matrix_set_color(1, rgb.r, rgb.g, rgb.b); + } + // end capslock function + + return false; +} diff --git a/keyboards/mechanicalkeyboards/point65/hotswap/keyboard.json b/keyboards/mechanicalkeyboards/point65/hotswap/keyboard.json new file mode 100644 index 0000000000..f988fb0423 --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/hotswap/keyboard.json @@ -0,0 +1,95 @@ +{ + "keyboard_name": "Point 65 Hotswap", + "matrix_pins": { + "rows": ["GP24", "GP22", "GP21", "GP19", "GP25"] + }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 255}, + {"matrix": [2, 0], "x": 0, "y": 32, "flags": 255} + ] + }, + "url": "https://mechanicalkeyboards.com/products/mk-point65-keyboard-kit?variant=49803723735340", + "usb": { + "pid": "0xC0F5" + }, + "ws2812": { + "pin": "GP23" + }, + "community_layouts": ["65_ansi_blocker", "65_ansi_blocker_tsangan"], + "layout_aliases": { + "LAYOUT_all": "LAYOUT_65_ansi_blocker" + }, + "layouts": { + "LAYOUT_65_ansi_blocker_tsangan": { + "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, "w": 2}, + {"matrix": [0, 15], "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": [1, 15], "x": 15, "y": 1}, + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"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, 15], "x": 15, "y": 2}, + {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [3, 1], "x": 2.25, "y": 3}, + {"matrix": [3, 2], "x": 3.25, "y": 3}, + {"matrix": [3, 3], "x": 4.25, "y": 3}, + {"matrix": [3, 4], "x": 5.25, "y": 3}, + {"matrix": [3, 5], "x": 6.25, "y": 3}, + {"matrix": [3, 6], "x": 7.25, "y": 3}, + {"matrix": [3, 7], "x": 8.25, "y": 3}, + {"matrix": [3, 8], "x": 9.25, "y": 3}, + {"matrix": [3, 9], "x": 10.25, "y": 3}, + {"matrix": [3, 10], "x": 11.25, "y": 3}, + {"matrix": [3, 11], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [3, 14], "x": 14, "y": 3}, + {"matrix": [3, 15], "x": 15, "y": 3}, + {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5}, + {"matrix": [4, 1], "x": 1.5, "y": 4}, + {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5}, + {"matrix": [4, 5], "x": 4, "y": 4, "w": 7}, + {"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5}, + {"matrix": [4, 13], "x": 13, "y": 4}, + {"matrix": [4, 14], "x": 14, "y": 4}, + {"matrix": [4, 15], "x": 15, "y": 4} + ] + } + } +} diff --git a/keyboards/mechanicalkeyboards/point65/hotswap/keymaps/default/keymap.c b/keyboards/mechanicalkeyboards/point65/hotswap/keymaps/default/keymap.c new file mode 100644 index 0000000000..8441ae3830 --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/hotswap/keymaps/default/keymap.c @@ -0,0 +1,39 @@ +/* Copyright 2024 Sebastiaan Swinkels @ BeanBoards + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +enum point65_layers { + _QWERTY, + _FUNCTION +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_all( + KC_ESC, 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_HOME, + 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_PGUP, + 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_PGDN, + 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNCTION), KC_LEFT, KC_DOWN, KC_RIGHT + ), + [_FUNCTION] = LAYOUT_all( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, + NK_TOGG, RM_TOGG, RM_VALU, KC_NO, RM_HUEU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, RM_PREV, RM_VALD, RM_NEXT, RM_HUED, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_MPLY, KC_VOLU, KC_TRNS, + KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT + ) +}; diff --git a/keyboards/mechanicalkeyboards/point65/hotswap/keymaps/default_7u/keymap.c b/keyboards/mechanicalkeyboards/point65/hotswap/keymaps/default_7u/keymap.c new file mode 100644 index 0000000000..b290fa0ac6 --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/hotswap/keymaps/default_7u/keymap.c @@ -0,0 +1,39 @@ +/* Copyright 2024 Sebastiaan Swinkels @ BeanBoards + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +enum point65_layers { + _QWERTY, + _FUNCTION +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_65_ansi_blocker_tsangan( + KC_ESC, 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_HOME, + 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_PGUP, + 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_PGDN, + 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FUNCTION), KC_LEFT, KC_DOWN, KC_RIGHT + ), + [_FUNCTION] = LAYOUT_65_ansi_blocker_tsangan( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, + NK_TOGG, RM_TOGG, RM_VALU, KC_NO, RM_HUEU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, RM_PREV, RM_VALD, RM_NEXT, RM_HUED, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_MPLY, KC_VOLU, KC_TRNS, + KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT + ) +}; diff --git a/keyboards/mechanicalkeyboards/point65/hotswap_rgb/hotswap_rgb.c b/keyboards/mechanicalkeyboards/point65/hotswap_rgb/hotswap_rgb.c new file mode 100644 index 0000000000..ec2e9f28ba --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/hotswap_rgb/hotswap_rgb.c @@ -0,0 +1,62 @@ +/* Copyright 2024 Sebastiaan Swinkels @ BeanBoards + * + * 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 . + */ + + #include "quantum.h" + + enum point65_layers { + _QWERTY, + _FUNCTION +}; + +bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { + if (!rgb_matrix_indicators_user()){ + return false; + } + + hsv_t hsv = {0, 255, 255}; + + // Light up ESC RGB LED when _FUNCTION layer is accessed + if ((get_highest_layer(layer_state|default_layer_state)) == _FUNCTION){ + hsv.h = 43; + hsv.s = 105; + hsv.v = 255; + + if (hsv.v > rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET) { + hsv.v = rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET; + } + rgb_t rgb = hsv_to_rgb(hsv); + + rgb_matrix_set_color(0, rgb.r, rgb.g, rgb.b); + } + // end layer function + + // capslock indicator + if (host_keyboard_led_state().caps_lock) { + hsv.h = 43; + hsv.s = 105; + hsv.v = 255; + + if (hsv.v > rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET) { + hsv.v = rgb_matrix_get_val() + RGB_INDICATOR_POS_OFFSET; + } + rgb_t rgb = hsv_to_rgb(hsv); + + rgb_matrix_set_color(30, rgb.r, rgb.g, rgb.b); + } + // end capslock function + + return false; +} diff --git a/keyboards/mechanicalkeyboards/point65/hotswap_rgb/keyboard.json b/keyboards/mechanicalkeyboards/point65/hotswap_rgb/keyboard.json new file mode 100644 index 0000000000..55f206fe12 --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/hotswap_rgb/keyboard.json @@ -0,0 +1,85 @@ +{ + "keyboard_name": "Point 65 Hotswap RGB", + "matrix_pins": { + "rows": ["GP24", "GP23", "GP22", "GP21", "GP25"] + }, + "rgb_matrix": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0, "flags": 255}, + {"matrix": [0, 1], "x": 15, "y": 0, "flags": 255}, + {"matrix": [0, 2], "x": 30, "y": 0, "flags": 255}, + {"matrix": [0, 3], "x": 45, "y": 0, "flags": 255}, + {"matrix": [0, 4], "x": 60, "y": 0, "flags": 255}, + {"matrix": [0, 5], "x": 75, "y": 0, "flags": 255}, + {"matrix": [0, 6], "x": 89, "y": 0, "flags": 255}, + {"matrix": [0, 7], "x": 104, "y": 0, "flags": 255}, + {"matrix": [0, 8], "x": 119, "y": 0, "flags": 255}, + {"matrix": [0, 9], "x": 134, "y": 0, "flags": 255}, + {"matrix": [0, 10], "x": 149, "y": 0, "flags": 255}, + {"matrix": [0, 11], "x": 164, "y": 0, "flags": 255}, + {"matrix": [0, 12], "x": 179, "y": 0, "flags": 255}, + {"matrix": [0, 13], "x": 201, "y": 0, "flags": 255}, + {"matrix": [0, 15], "x": 224, "y": 0, "flags": 255}, + {"matrix": [1, 15], "x": 224, "y": 16, "flags": 255}, + {"matrix": [1, 13], "x": 205, "y": 16, "flags": 255}, + {"matrix": [1, 12], "x": 187, "y": 16, "flags": 255}, + {"matrix": [1, 11], "x": 172, "y": 16, "flags": 255}, + {"matrix": [1, 10], "x": 157, "y": 16, "flags": 255}, + {"matrix": [1, 9], "x": 142, "y": 16, "flags": 255}, + {"matrix": [1, 8], "x": 127, "y": 16, "flags": 255}, + {"matrix": [1, 7], "x": 112, "y": 16, "flags": 255}, + {"matrix": [1, 6], "x": 97, "y": 16, "flags": 255}, + {"matrix": [1, 5], "x": 82, "y": 16, "flags": 255}, + {"matrix": [1, 4], "x": 67, "y": 16, "flags": 255}, + {"matrix": [1, 3], "x": 52, "y": 16, "flags": 255}, + {"matrix": [1, 2], "x": 37, "y": 16, "flags": 255}, + {"matrix": [1, 1], "x": 23, "y": 16, "flags": 255}, + {"matrix": [1, 0], "x": 4, "y": 16, "flags": 255}, + {"matrix": [2, 0], "x": 6, "y": 32, "flags": 255}, + {"matrix": [2, 1], "x": 26, "y": 32, "flags": 255}, + {"matrix": [2, 2], "x": 41, "y": 32, "flags": 255}, + {"matrix": [2, 3], "x": 56, "y": 32, "flags": 255}, + {"matrix": [2, 4], "x": 71, "y": 32, "flags": 255}, + {"matrix": [2, 5], "x": 86, "y": 32, "flags": 255}, + {"matrix": [2, 6], "x": 101, "y": 32, "flags": 255}, + {"matrix": [2, 7], "x": 116, "y": 32, "flags": 255}, + {"matrix": [2, 8], "x": 131, "y": 32, "flags": 255}, + {"matrix": [2, 9], "x": 145, "y": 32, "flags": 255}, + {"matrix": [2, 10], "x": 160, "y": 32, "flags": 255}, + {"matrix": [2, 11], "x": 175, "y": 32, "flags": 255}, + {"matrix": [2, 12], "x": 200, "y": 32, "flags": 255}, + {"matrix": [2, 15], "x": 224, "y": 32, "flags": 255}, + {"matrix": [3, 15], "x": 224, "y": 48, "flags": 255}, + {"matrix": [3, 14], "x": 209, "y": 48, "flags": 255}, + {"matrix": [3, 11], "x": 188, "y": 48, "flags": 255}, + {"matrix": [3, 10], "x": 168, "y": 48, "flags": 255}, + {"matrix": [3, 9], "x": 153, "y": 48, "flags": 255}, + {"matrix": [3, 8], "x": 138, "y": 48, "flags": 255}, + {"matrix": [3, 7], "x": 123, "y": 48, "flags": 255}, + {"matrix": [3, 6], "x": 108, "y": 48, "flags": 255}, + {"matrix": [3, 5], "x": 93, "y": 48, "flags": 255}, + {"matrix": [3, 4], "x": 78, "y": 48, "flags": 255}, + {"matrix": [3, 3], "x": 63, "y": 48, "flags": 255}, + {"matrix": [3, 2], "x": 49, "y": 48, "flags": 255}, + {"matrix": [3, 1], "x": 34, "y": 48, "flags": 255}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 255}, + {"matrix": [4, 0], "x": 2, "y": 64, "flags": 255}, + {"matrix": [4, 1], "x": 20, "y": 64, "flags": 255}, + {"matrix": [4, 2], "x": 39, "y": 64, "flags": 255}, + {"matrix": [4, 5], "x": 95, "y": 64, "flags": 255}, + {"matrix": [4, 9], "x": 151, "y": 64, "flags": 255}, + {"matrix": [4, 10], "x": 170, "y": 64, "flags": 255}, + {"matrix": [4, 13], "x": 194, "y": 64, "flags": 255}, + {"matrix": [4, 14], "x": 209, "y": 64, "flags": 255}, + {"matrix": [4, 15], "x": 224, "y": 64, "flags": 255} + ] + }, + "url": "https://mechanicalkeyboards.com/products/mk-point65-keyboard-kit?variant=49803723538732", + "usb": { + "pid": "0xC0F6" + }, + "ws2812": { + "pin": "GP19" + }, + "community_layouts": ["65_ansi_blocker"] +} diff --git a/keyboards/mechanicalkeyboards/point65/hotswap_rgb/keymaps/default/keymap.c b/keyboards/mechanicalkeyboards/point65/hotswap_rgb/keymaps/default/keymap.c new file mode 100644 index 0000000000..e11e75c1f9 --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/hotswap_rgb/keymaps/default/keymap.c @@ -0,0 +1,39 @@ +/* Copyright 2024 Sebastiaan Swinkels @ BeanBoards + * + * 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 . + */ + +#include QMK_KEYBOARD_H + +enum point65_layers { + _QWERTY, + _FUNCTION +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_65_ansi_blocker( + KC_ESC, 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_HOME, + 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_PGUP, + 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_PGDN, + 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_END, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FUNCTION), KC_LEFT, KC_DOWN, KC_RIGHT + ), + [_FUNCTION] = LAYOUT_65_ansi_blocker( + KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_NO, + NK_TOGG, RM_TOGG, RM_VALU, KC_NO, RM_HUEU, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, RM_PREV, RM_VALD, RM_NEXT, RM_HUED, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_MPLY, KC_VOLU, KC_TRNS, + KC_NO, KC_NO, KC_NO, KC_TRNS, KC_NO, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT + ) +}; diff --git a/keyboards/mechanicalkeyboards/point65/info.json b/keyboards/mechanicalkeyboards/point65/info.json new file mode 100644 index 0000000000..c1ab9322a7 --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/info.json @@ -0,0 +1,145 @@ +{ + "manufacturer": "Mechanical Keyboards", + "maintainer": "C44Supra", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "nkro": true, + "rgb_matrix": true + }, + "matrix_pins": { + "cols": ["GP28", "GP27", "GP26", "GP29", "GP0", "GP11", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5", "GP4", "GP3", "GP2", "GP1"] + }, + "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, + "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, + "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, + "typing_heatmap": true + }, + "driver": "ws2812", + "max_brightness": 128 + }, + "usb": { + "device_version": "1.0.0", + "vid": "0x4242" + }, + "ws2812": { + "driver": "vendor" + }, + "layouts": { + "LAYOUT_65_ansi_blocker": { + "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, "w": 2}, + {"matrix": [0, 15], "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": [1, 15], "x": 15, "y": 1}, + {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"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, 15], "x": 15, "y": 2}, + {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25}, + {"matrix": [3, 1], "x": 2.25, "y": 3}, + {"matrix": [3, 2], "x": 3.25, "y": 3}, + {"matrix": [3, 3], "x": 4.25, "y": 3}, + {"matrix": [3, 4], "x": 5.25, "y": 3}, + {"matrix": [3, 5], "x": 6.25, "y": 3}, + {"matrix": [3, 6], "x": 7.25, "y": 3}, + {"matrix": [3, 7], "x": 8.25, "y": 3}, + {"matrix": [3, 8], "x": 9.25, "y": 3}, + {"matrix": [3, 9], "x": 10.25, "y": 3}, + {"matrix": [3, 10], "x": 11.25, "y": 3}, + {"matrix": [3, 11], "x": 12.25, "y": 3, "w": 1.75}, + {"matrix": [3, 14], "x": 14, "y": 3}, + {"matrix": [3, 15], "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, 5], "x": 3.75, "y": 4, "w": 6.25}, + {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [4, 13], "x": 13, "y": 4}, + {"matrix": [4, 14], "x": 14, "y": 4}, + {"matrix": [4, 15], "x": 15, "y": 4} + ] + } + } +} diff --git a/keyboards/mechanicalkeyboards/point65/readme.md b/keyboards/mechanicalkeyboards/point65/readme.md new file mode 100644 index 0000000000..7a50f6793d --- /dev/null +++ b/keyboards/mechanicalkeyboards/point65/readme.md @@ -0,0 +1,31 @@ +# Mechanical Keyboards Point65 + +![Mechanical Keyboards Point65](https://i.imgur.com/lTEwGBR.png) +## Description +A 65% keyboard by [Mechanical Keyboards](https://mechanicalkeyboards.com) available as either multi layout hotswap, or hotswap with RGB per key backlight. + +* Keyboard Maintainer: [C44Supra](https://github.com/C44Supra) +* Hardware Supported: MK Point65 hotswap, MK Point65 hotswap RGB +* Hardware Availability: [MK Point65 Keyboard Kit](https://mechanicalkeyboards.com/products/mk-point65-keyboard-kit) + +## Firmware building +**Hotswap with 6.25U layout:** + + make mechanicalkeyboards/point65/hotswap:default + +**Hotswap with 7U layout:** + + make mechanicalkeyboards/point65/hotswap:default_7u + +**Hotswap RGB:** + + make mechanicalkeyboards/point65/hotswap_rgb:default + +## Bootloader and Flashing: +The keyboard can be flashed with new firmware by entering the bootloader in one of the following ways: +- Bootmagic reset: unplug the keyboard, press and hold the top left key, plug the keyboard back in, and then release the top left key +- Physical reset button: Remove the space bar and double press the reset button twice in short succession + +Once the keyboard enters bootloader mode, it will present itself as a removable device called `RPI-RP2`. Copy / drag the new firmware file to the `RPI-RP2` drive to flash the new firmware onto the keyboard. + +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). \ No newline at end of file diff --git a/keyboards/slothie60/keyboard.json b/keyboards/slothie60/keyboard.json new file mode 100644 index 0000000000..2c3404efcb --- /dev/null +++ b/keyboards/slothie60/keyboard.json @@ -0,0 +1,244 @@ +{ + "manufacturer": "makkomise", + "keyboard_name": "slothie60", + "maintainer": "makkomise", + "bootloader": "stm32-dfu", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "matrix_pins": { + "cols": ["A10", "B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"], + "rows": ["A8", "B15", "B14", "B13", "B12"] + }, + "processor": "STM32F072", + "rgblight": { + "animations": { + "alternating": true, + "breathing": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "static_gradient": true, + "twinkle": true + }, + "led_count": 16, + "sleep": true + }, + "url": "https://github.com/makkomise/slothie60", + "usb": { + "device_version": "1.0.1", + "pid": "0x0002", + "vid": "0x7362" + }, + "ws2812": { + "pin": "A15" + }, + "community_layouts": ["60_iso"], + "layouts": { + "LAYOUT_60_iso": { + "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, "w": 2}, + {"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": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"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}, + {"matrix": [1, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 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": 2.75}, + {"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, 10], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25}, + {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25} + ] + }, + "LAYOUT_60_iso_split_rshift": { + "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, "w": 2}, + {"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": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"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}, + {"matrix": [1, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 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": [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, 10], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25}, + {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25} + ] + }, + "LAYOUT_all": { + "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, "w": 2}, + {"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": [2, 0], "x": 0, "y": 2, "w": 1.75}, + {"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}, + {"matrix": [1, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 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": [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": 6.5, "y": 4, "w": 6.25}, + {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25}, + {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25}, + {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25} + ] + } + } +} diff --git a/keyboards/slothie60/keymaps/60_iso/keymap.c b/keyboards/slothie60/keymaps/60_iso/keymap.c new file mode 100644 index 0000000000..36cbed2dfd --- /dev/null +++ b/keyboards/slothie60/keymaps/60_iso/keymap.c @@ -0,0 +1,23 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + //main layer + [0] = LAYOUT_60_iso( + 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_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_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_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_LCTL, KC_LGUI, KC_LALT, LT(1, KC_SPC), KC_RALT, KC_RGUI, KC_APP, KC_RCTL + ), + //fn1-layer + [1] = LAYOUT_60_iso( + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/slothie60/keymaps/60_iso_split_rshift/keymap.c b/keyboards/slothie60/keymaps/60_iso_split_rshift/keymap.c new file mode 100644 index 0000000000..5d8601a35f --- /dev/null +++ b/keyboards/slothie60/keymaps/60_iso_split_rshift/keymap.c @@ -0,0 +1,23 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + //main layer + [0] = LAYOUT_60_iso_split_rshift( + 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_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_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_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, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL + ), + //fn1-layer + [1] = LAYOUT_60_iso_split_rshift( + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/slothie60/keymaps/default/keymap.c b/keyboards/slothie60/keymaps/default/keymap.c new file mode 100644 index 0000000000..94e7287008 --- /dev/null +++ b/keyboards/slothie60/keymaps/default/keymap.c @@ -0,0 +1,23 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + //main layer + [0] = LAYOUT_all( + 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_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_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_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, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL + ), + //fn1-layer + [1] = LAYOUT_all( + QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, + _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; diff --git a/keyboards/slothie60/readme.md b/keyboards/slothie60/readme.md new file mode 100644 index 0000000000..d29aa45bd1 --- /dev/null +++ b/keyboards/slothie60/readme.md @@ -0,0 +1,26 @@ +# slothie60 + +![slothie60](https://i.imgur.com/vXrQs6w.png) + +*60% ISO keyboard, support for GH60-cases, RGB underglow.* + +* Keyboard Maintainer: [makkomise](https://github.com/makkomise) +* Hardware Availability: [github/makkomise/slothie60](https://github.com/makkomise/slothie60) + +Make example for this keyboard (after setting up your build environment): + + make slothie60:default + +Flashing example for this keyboard: + + make slothie60: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 (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB +* **Keycode in layout**: Press FN + Esc \ No newline at end of file diff --git a/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c b/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c deleted file mode 100644 index 756eb06506..0000000000 --- a/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.c +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright 2020 tominabox1 - * - * 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 . - */ -#include QMK_KEYBOARD_H - -enum layers { - _BASE, - _NUM_SYM, - _NAV -}; - -#define KC_NUM_SPC LT(_NUM_SYM, KC_SPC) -#define KC_GA LGUI_T(KC_A) -#define KC_AS LALT_T(KC_S) -#define KC_CD LCTL_T(KC_D) -#define KC_SF LSFT_T(KC_F) -#define KC_SJ RSFT_T(KC_J) -#define KC_CK RCTL_T(KC_K) -#define KC_AL RALT_T(KC_L) -#define KC_GSCLN RGUI_T(KC_SCLN) - -// clang-format off -const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { - [_BASE] = LAYOUT( - KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MPLY, KC_Y, KC_U, KC_I, KC_O, KC_P, - KC_GA, KC_AS, KC_CD, KC_SF, KC_G, KC_H, KC_SJ, KC_CK, KC_AL, KC_GSCLN, - KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, - KC_LCTL, KC_ENT, KC_NUM_SPC, MO(_NAV) - ), - - [_NUM_SYM] = LAYOUT( - KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_6, KC_7, KC_8, KC_9, KC_0, - KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_EQUAL, KC_MINS, - KC_BSLS,KC_LCBR, KC_LBRC, KC_LPRN, KC_UNDS, KC_RPRN, KC_RBRC, KC_RCBR, KC_DOT, KC_GRV, - KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS - ), - - [_NAV] = LAYOUT( - QK_BOOT, _______, AG_NORM, AG_SWAP, DB_TOGG, KC_TRNS, KC_GRV, KC_PGDN, KC_UP, KC_PGUP, KC_SCLN, - RM_TOGG, RM_HUEU, RM_SATU, RM_VALU, KC_NO, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, - RM_NEXT, RM_HUED, RM_SATD, RM_VALD, KC_NO, KC_MINS, KC_INT1, KC_COMM, KC_DOT, KC_BSLS, - KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS - ) -}; -// clang-format on - -#if defined(ENCODER_MAP_ENABLE) -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [_BASE] = {ENCODER_CCW_CW(KC_MNXT, KC_MPRV) }, - [_NUM_SYM] = { ENCODER_CCW_CW(MS_WHLD, MS_WHLU) }, - [_NAV] = { ENCODER_CCW_CW(KC_PGDN, KC_PGUP) } -}; -#endif - -#ifdef COMBO_ENABLE -enum combo_events { - COMBO_BSPC, - COMBO_NUMBAK, - COMBO_TAB, - COMBO_ESC, - COMBO_DEL, -}; - -const uint16_t PROGMEM combo_bspc[] = {KC_O, KC_P, COMBO_END}; -const uint16_t PROGMEM combo_numbak[] = {KC_0, KC_9, COMBO_END}; -const uint16_t PROGMEM combo_tab[] = {KC_Q, KC_W, COMBO_END}; -const uint16_t PROGMEM combo_esc[] = {KC_E, KC_W, COMBO_END}; -const uint16_t PROGMEM combo_del[] = {KC_MINS, KC_EQL, COMBO_END}; - -combo_t key_combos[] = { - [COMBO_BSPC] = COMBO(combo_bspc, KC_BSPC), - [COMBO_NUMBAK] = COMBO(combo_numbak, KC_BSPC), - [COMBO_TAB] = COMBO(combo_tab, KC_TAB), - [COMBO_ESC] = COMBO(combo_esc, KC_ESC), - [COMBO_DEL] = COMBO(combo_del, KC_DEL) -}; -#endif - -#ifdef OLED_ENABLE - -// Add additional layer names here if desired. Only first 5 characters will be copied to display. -const char PROGMEM layer_base[] = "BASE"; -const char PROGMEM layer_num_sym[] = " SYM"; -const char PROGMEM layer_nav[] = " NAV"; -// Add layer name variables to array here. Make sure these are in order. -const char* const PROGMEM layer_names[] = { - layer_base, - layer_num_sym, - layer_nav -}; - -static char oled_layer_buf[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -static layer_state_t top_layer_cache; - -/* BEGIN STANDARD QMK FUNCTIONS */ -bool oled_task_user(void) { - oled_write_raw_P(lechiffre_logo, sizeof(lechiffre_logo)); - // Renders the current keyboard state (layer, lock, caps, scroll, etc); - oled_set_cursor(0, 3); - oled_write_P(oled_section_break, false); - render_layer_status(oled_layer_buf); - oled_write_P(oled_section_break, false); - render_mod_status(get_mods() | get_oneshot_mods()); - oled_write_P(oled_section_break, false); - render_keylock_status(host_keyboard_led_state()); - oled_write_P(oled_section_break, false); - render_keylogger_status(); - - return false; -} - -bool process_record_user(uint16_t keycode, keyrecord_t* record) { - if (record->event.pressed) { - add_keylog(keycode, record); - } - - return true; -} - -// If we don't force an update during initialization, the layer name buffer will start out blank. -layer_state_t default_layer_state_set_user(layer_state_t state) { - update_layer_namebuf(get_highest_layer(state), true); - return state; -} -layer_state_t layer_state_set_user(layer_state_t state) { - update_layer_namebuf(get_highest_layer(state | default_layer_state), false); - return state; -} - -/* END STANDARD QMK FUNCTIONS */ -/* BEGIN CUSTOM HELPER FUNCTION FOR OLED */ -// Avoid excessive copying by only updating the layer name buffer when the layer changes -void update_layer_namebuf(layer_state_t layer, bool force_update) { - if (force_update || layer != top_layer_cache) { - top_layer_cache = layer; - if (layer < ARRAY_SIZE(layer_names)) { - memcpy_P(oled_layer_buf, pgm_read_ptr(&layer_names[layer]), ARRAY_SIZE(oled_layer_buf) - 1); - } else { - memcpy(oled_layer_buf, get_u8_str(layer, ' '), ARRAY_SIZE(oled_layer_buf) - 1); - } - } -} -#endif diff --git a/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.json b/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.json new file mode 100644 index 0000000000..252db21f5d --- /dev/null +++ b/keyboards/tominabox1/le_chiffre/keymaps/default/keymap.json @@ -0,0 +1,36 @@ +{ + "keyboard": "tominabox1/le_chiffre", + "keymap": "default", + "config": { + "features": { + "encoder_map": true + } + }, + "layout": "LAYOUT", + "layers": [ + [ + "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_MPLY", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", + "LGUI_T(KC_A)", "LALT_T(KC_S)", "LCTL_T(KC_D)", "LSFT_T(KC_F)", "KC_G", "KC_H", "RSFT_T(KC_J)", "RCTL_T(KC_K)", "RALT_T(KC_L)", "RGUI_T(KC_SCLN)", + "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", + "KC_LCTL", "KC_ENT", "LT(1, KC_SPC)", "MO(2)" + ], + [ + "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_TRNS", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", + "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_EQUAL", "KC_MINS", + "KC_BSLS", "KC_LCBR", "KC_LBRC", "KC_LPRN", "KC_UNDS", "KC_RPRN", "KC_RBRC", "KC_RCBR", "KC_DOT", "KC_GRV", + "KC_CAPS", "KC_TRNS", "KC_TRNS", "KC_TRNS" + ], + [ + "QK_BOOT", "KC_TRNS", "AG_NORM", "AG_SWAP", "DB_TOGG", "KC_TRNS", "KC_GRV", "KC_PGDN", "KC_UP", "KC_PGUP", + "KC_SCLN", "RM_TOGG", "RM_HUEU", "RM_SATU", "RM_VALU", "KC_NO", "KC_HOME", "KC_LEFT", "KC_DOWN", "KC_RGHT", + "KC_END", "RM_NEXT", "RM_HUED", "RM_SATD", "RM_VALD", "KC_NO", "KC_MINS", "KC_INT1", "KC_COMM", "KC_DOT", "KC_BSLS", + "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" + ] + + ], + "encoders": [ + [{"ccw": "KC_MNXT", "cw": "KC_MPRV"}], + [{"ccw": "MS_WHLD", "cw": "MS_WHLU"}], + [{"ccw": "KC_PGDN", "cw": "KC_PGUP"}] + ] +} diff --git a/keyboards/tominabox1/le_chiffre/keymaps/default/rules.mk b/keyboards/tominabox1/le_chiffre/keymaps/default/rules.mk deleted file mode 100644 index cbd8b4aa81..0000000000 --- a/keyboards/tominabox1/le_chiffre/keymaps/default/rules.mk +++ /dev/null @@ -1,2 +0,0 @@ -COMBO_ENABLE = yes -ENCODER_MAP_ENABLE = yes diff --git a/keyboards/trnthsn/tyson60/info.json b/keyboards/trnthsn/tyson60/info.json index 6f4df15d99..27e10a1333 100644 --- a/keyboards/trnthsn/tyson60/info.json +++ b/keyboards/trnthsn/tyson60/info.json @@ -34,7 +34,7 @@ }, "usb": { "device_version": "0.0.1", - "pid": "0x5336", + "pid": "0x3633", "vid": "0x5453" }, "ws2812": { diff --git a/keyboards/trnthsn/tyson88/config.h b/keyboards/trnthsn/tyson88/config.h new file mode 100644 index 0000000000..8ab8c1a85f --- /dev/null +++ b/keyboards/trnthsn/tyson88/config.h @@ -0,0 +1,9 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define WS2812_SPI_DRIVER SPID2 +#define WS2812_SPI_MOSI_PAL_MODE 0 +#define WS2812_SPI_SCK_PAL_MODE 0 +#define WS2812_SPI_SCK_PIN B13 diff --git a/keyboards/trnthsn/tyson88/halconf.h b/keyboards/trnthsn/tyson88/halconf.h new file mode 100644 index 0000000000..afed4392fb --- /dev/null +++ b/keyboards/trnthsn/tyson88/halconf.h @@ -0,0 +1,9 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_SPI TRUE + +#include_next + diff --git a/keyboards/trnthsn/tyson88/info.json b/keyboards/trnthsn/tyson88/info.json new file mode 100644 index 0000000000..8818e20008 --- /dev/null +++ b/keyboards/trnthsn/tyson88/info.json @@ -0,0 +1,143 @@ +{ + "manufacturer": "Tyson.Keebs", + "keyboard_name": "Tyson88", + "maintainer": "trnthsn", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgblight": true + }, + "indicators": { + "caps_lock": "A5" + }, + "matrix_pins": { + "cols": ["A9", "A8", "B14", "B12", "B11", "B10", "B1", "B0", "A7", "A4", "A3", "A2", "A1", "A0", "A10", "C15", "C14"], + "rows": ["A15", "B3", "B4", "A6", "B6", "B5"] + }, + "rgblight": { + "animations": { + "alternating": true, + "breathing": true, + "christmas": true, + "knight": true, + "rainbow_mood": true, + "rainbow_swirl": true, + "snake": true, + "static_gradient": true, + "twinkle": true + }, + "default": { + "animation": "rainbow_swirl" + }, + "led_count": 30 + }, + "usb": { + "device_version": "0.0.1", + "pid": "0x6F38", + "vid": "0x5453" + }, + "ws2812": { + "driver": "spi", + "pin": "B15" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1.25, "y": 0}, + {"matrix": [0, 2], "x": 2.25, "y": 0}, + {"matrix": [0, 3], "x": 3.25, "y": 0}, + {"matrix": [0, 4], "x": 4.25, "y": 0}, + {"matrix": [0, 5], "x": 5.5, "y": 0}, + {"matrix": [0, 6], "x": 6.5, "y": 0}, + {"matrix": [0, 7], "x": 7.5, "y": 0}, + {"matrix": [0, 8], "x": 8.5, "y": 0}, + {"matrix": [0, 9], "x": 9.75, "y": 0}, + {"matrix": [0, 10], "x": 10.75, "y": 0}, + {"matrix": [0, 11], "x": 11.75, "y": 0}, + {"matrix": [0, 12], "x": 12.75, "y": 0}, + {"matrix": [3, 14], "x": 14, "y": 0}, + {"matrix": [0, 14], "x": 15.25, "y": 0}, + {"matrix": [0, 15], "x": 16.25, "y": 0}, + {"matrix": [0, 16], "x": 17.25, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1.25}, + {"matrix": [1, 1], "x": 1, "y": 1.25}, + {"matrix": [1, 2], "x": 2, "y": 1.25}, + {"matrix": [1, 3], "x": 3, "y": 1.25}, + {"matrix": [1, 4], "x": 4, "y": 1.25}, + {"matrix": [1, 5], "x": 5, "y": 1.25}, + {"matrix": [1, 6], "x": 6, "y": 1.25}, + {"matrix": [1, 7], "x": 7, "y": 1.25}, + {"matrix": [1, 8], "x": 8, "y": 1.25}, + {"matrix": [1, 9], "x": 9, "y": 1.25}, + {"matrix": [1, 10], "x": 10, "y": 1.25}, + {"matrix": [1, 11], "x": 11, "y": 1.25}, + {"matrix": [1, 12], "x": 12, "y": 1.25}, + {"matrix": [0, 13], "x": 13, "y": 1.25}, + {"matrix": [1, 13], "x": 14, "y": 1.25}, + {"matrix": [1, 14], "x": 15.25, "y": 1.25}, + {"matrix": [1, 15], "x": 16.25, "y": 1.25}, + {"matrix": [1, 16], "x": 17.25, "y": 1.25}, + {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5}, + {"matrix": [2, 1], "x": 1.5, "y": 2.25}, + {"matrix": [2, 2], "x": 2.5, "y": 2.25}, + {"matrix": [2, 3], "x": 3.5, "y": 2.25}, + {"matrix": [2, 4], "x": 4.5, "y": 2.25}, + {"matrix": [2, 5], "x": 5.5, "y": 2.25}, + {"matrix": [2, 6], "x": 6.5, "y": 2.25}, + {"matrix": [2, 7], "x": 7.5, "y": 2.25}, + {"matrix": [2, 8], "x": 8.5, "y": 2.25}, + {"matrix": [2, 9], "x": 9.5, "y": 2.25}, + {"matrix": [2, 10], "x": 10.5, "y": 2.25}, + {"matrix": [2, 11], "x": 11.5, "y": 2.25}, + {"matrix": [2, 12], "x": 12.5, "y": 2.25}, + {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5}, + {"matrix": [2, 14], "x": 15.25, "y": 2.25}, + {"matrix": [2, 15], "x": 16.25, "y": 2.25}, + {"matrix": [2, 16], "x": 17.25, "y": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75}, + {"matrix": [3, 1], "x": 1.75, "y": 3.25}, + {"matrix": [3, 2], "x": 2.75, "y": 3.25}, + {"matrix": [3, 3], "x": 3.75, "y": 3.25}, + {"matrix": [3, 4], "x": 4.75, "y": 3.25}, + {"matrix": [3, 5], "x": 5.75, "y": 3.25}, + {"matrix": [3, 6], "x": 6.75, "y": 3.25}, + {"matrix": [3, 7], "x": 7.75, "y": 3.25}, + {"matrix": [3, 8], "x": 8.75, "y": 3.25}, + {"matrix": [3, 9], "x": 9.75, "y": 3.25}, + {"matrix": [3, 10], "x": 10.75, "y": 3.25}, + {"matrix": [3, 11], "x": 11.75, "y": 3.25}, + {"matrix": [3, 12], "x": 12.75, "y": 3.25}, + {"matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25}, + {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25}, + {"matrix": [4, 1], "x": 1.25, "y": 4.25}, + {"matrix": [4, 2], "x": 2.25, "y": 4.25}, + {"matrix": [4, 3], "x": 3.25, "y": 4.25}, + {"matrix": [4, 4], "x": 4.25, "y": 4.25}, + {"matrix": [4, 5], "x": 5.25, "y": 4.25}, + {"matrix": [4, 6], "x": 6.25, "y": 4.25}, + {"matrix": [4, 7], "x": 7.25, "y": 4.25}, + {"matrix": [4, 8], "x": 8.25, "y": 4.25}, + {"matrix": [4, 9], "x": 9.25, "y": 4.25}, + {"matrix": [4, 10], "x": 10.25, "y": 4.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4.25}, + {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75}, + {"matrix": [4, 13], "x": 14, "y": 4.25}, + {"matrix": [4, 15], "x": 16.25, "y": 4.25}, + {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5}, + {"matrix": [5, 1], "x": 1.5, "y": 5.25}, + {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5}, + {"matrix": [5, 7], "x": 4, "y": 5.25, "w": 7}, + {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5}, + {"matrix": [5, 12], "x": 12.5, "y": 5.25}, + {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5}, + {"matrix": [5, 14], "x": 15.25, "y": 5.25}, + {"matrix": [5, 15], "x": 16.25, "y": 5.25}, + {"matrix": [5, 16], "x": 17.25, "y": 5.25} + ] + } + } +} diff --git a/keyboards/trnthsn/tyson88/keymaps/default/keymap.c b/keyboards/trnthsn/tyson88/keymaps/default/keymap.c new file mode 100644 index 0000000000..510bfdd490 --- /dev/null +++ b/keyboards/trnthsn/tyson88/keymaps/default/keymap.c @@ -0,0 +1,40 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + // ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐ + // │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │Prs│Srk│Ps │ + // └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘ + // ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ + // │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ ` │Bsp│ │Ins│Hm │PgU│ + // ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤ + // │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + // ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬────┤ └───┴───┴───┘ + // │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │Ent │ + // ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐ + // │Sft │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Fn │ │ ↑ │ + // ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐ + // │Ctrl │Win│Alt │ │Alt │Win│Ctrl │ │ ← │ ↓ │ → │ + // └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘ + + + [0] = LAYOUT( + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MPLY, KC_PSCR, KC_SCRL, KC_PAUS, + KC_GRV, 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_GRV, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, + 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_DEL, KC_END, KC_PGDN, + 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_BSLS, KC_ENT, + KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; diff --git a/keyboards/trnthsn/tyson88/mcuconf.h b/keyboards/trnthsn/tyson88/mcuconf.h new file mode 100644 index 0000000000..d131af9fdf --- /dev/null +++ b/keyboards/trnthsn/tyson88/mcuconf.h @@ -0,0 +1,9 @@ +// Copyright 2025 Tyson.Keebs +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef STM32_SPI_USE_SPI2 +#define STM32_SPI_USE_SPI2 TRUE diff --git a/keyboards/trnthsn/tyson88/readme.md b/keyboards/trnthsn/tyson88/readme.md new file mode 100644 index 0000000000..5a6ea20a8b --- /dev/null +++ b/keyboards/trnthsn/tyson88/readme.md @@ -0,0 +1,27 @@ +# Tyson88 + +![trnthsn/tyson88](https://live.staticflickr.com/65535/54832182554_a1b1edfb7d_b.jpg) + +A TKL keyboard PCB compatible F13 layout. + +* Keyboard Maintainer: [Trnthsn](https://github.com/trnthsn) +* Hardware Supported: STM32, Tyson88 +* Hardware Availability: [ThanhSon.Mech](https://www.facebook.com/ThanhSon.mech) + +Make example for this keyboard (after setting up your build environment): + + make trnthsn/tyson88/stm32f103:default + +Flashing example for this keyboard: + + make trnthsn/tyson88/stm32f103: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 (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/trnthsn/tyson88/stm32f072/keyboard.json b/keyboards/trnthsn/tyson88/stm32f072/keyboard.json new file mode 100644 index 0000000000..8bba6f5d5d --- /dev/null +++ b/keyboards/trnthsn/tyson88/stm32f072/keyboard.json @@ -0,0 +1,4 @@ +{ + "processor": "STM32F072", + "bootloader": "stm32-dfu" +} diff --git a/keyboards/trnthsn/tyson88/stm32f103/keyboard.json b/keyboards/trnthsn/tyson88/stm32f103/keyboard.json new file mode 100644 index 0000000000..4dc77604c4 --- /dev/null +++ b/keyboards/trnthsn/tyson88/stm32f103/keyboard.json @@ -0,0 +1,4 @@ +{ + "processor": "STM32F103", + "bootloader": "uf2boot" +} diff --git a/keyboards/wily/info.json b/keyboards/wily/info.json new file mode 100644 index 0000000000..9bba2de910 --- /dev/null +++ b/keyboards/wily/info.json @@ -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" +} diff --git a/keyboards/wily/readme.md b/keyboards/wily/readme.md new file mode 100644 index 0000000000..e70ac11a16 --- /dev/null +++ b/keyboards/wily/readme.md @@ -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/:default + +Where `` can be either `wily_s` , `wily_h625` or `wily_h700`. Flashing example for this keyboard: + + make wily/: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 + diff --git a/keyboards/wily/wily_h625/keyboard.json b/keyboards/wily/wily_h625/keyboard.json new file mode 100644 index 0000000000..915c3459aa --- /dev/null +++ b/keyboards/wily/wily_h625/keyboard.json @@ -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} + ] + } + } +} diff --git a/keyboards/wily/wily_h625/keymaps/default/keymap.c b/keyboards/wily/wily_h625/keymaps/default/keymap.c new file mode 100644 index 0000000000..36c2eda7b9 --- /dev/null +++ b/keyboards/wily/wily_h625/keymaps/default/keymap.c @@ -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 . + */ +#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 +) +}; diff --git a/keyboards/wily/wily_h700/keyboard.json b/keyboards/wily/wily_h700/keyboard.json new file mode 100644 index 0000000000..1dfe3d24a4 --- /dev/null +++ b/keyboards/wily/wily_h700/keyboard.json @@ -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} + ] + } + } +} diff --git a/keyboards/wily/wily_h700/keymaps/default/keymap.c b/keyboards/wily/wily_h700/keymaps/default/keymap.c new file mode 100644 index 0000000000..0929de8fa3 --- /dev/null +++ b/keyboards/wily/wily_h700/keymaps/default/keymap.c @@ -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 . + */ +#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 +) +}; diff --git a/keyboards/wily/wily_s/config.h b/keyboards/wily/wily_s/config.h new file mode 100644 index 0000000000..580f722f15 --- /dev/null +++ b/keyboards/wily/wily_s/config.h @@ -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 . +*/ + +#pragma once + +#define BACKLIGHT_PWM_DRIVER PWMD3 +#define BACKLIGHT_PWM_CHANNEL 4 +#define BACKLIGHT_PWM_PAL_MOPDE 2 diff --git a/keyboards/tominabox1/le_chiffre/keymaps/default/config.h b/keyboards/wily/wily_s/halconf.h similarity index 88% rename from keyboards/tominabox1/le_chiffre/keymaps/default/config.h rename to keyboards/wily/wily_s/halconf.h index 8f0df1847a..6c98f31f9b 100644 --- a/keyboards/tominabox1/le_chiffre/keymaps/default/config.h +++ b/keyboards/wily/wily_s/halconf.h @@ -1,4 +1,4 @@ -/* Copyright 2020 tominabox1 +/* 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 @@ -13,6 +13,9 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ + #pragma once -#define COMBO_TERM 30 +#define HAL_USE_PWM TRUE + +#include_next diff --git a/keyboards/wily/wily_s/keyboard.json b/keyboards/wily/wily_s/keyboard.json new file mode 100644 index 0000000000..a6df026ef3 --- /dev/null +++ b/keyboards/wily/wily_s/keyboard.json @@ -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} + ] + } + } +} diff --git a/keyboards/wily/wily_s/keymaps/default/keymap.c b/keyboards/wily/wily_s/keymaps/default/keymap.c new file mode 100644 index 0000000000..22c0188c30 --- /dev/null +++ b/keyboards/wily/wily_s/keymaps/default/keymap.c @@ -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 . + */ +#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 +) +}; diff --git a/keyboards/wily/wily_s/mcuconf.h b/keyboards/wily/wily_s/mcuconf.h new file mode 100644 index 0000000000..a9bbcfc62c --- /dev/null +++ b/keyboards/wily/wily_s/mcuconf.h @@ -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 . + */ + +#pragma once + +#include_next + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE diff --git a/lib/python/qmk/cli/doctor/check.py b/lib/python/qmk/cli/doctor/check.py index 8a13cb0832..a717bcb591 100644 --- a/lib/python/qmk/cli/doctor/check.py +++ b/lib/python/qmk/cli/doctor/check.py @@ -152,8 +152,10 @@ def _check_avr_gcc_installation(): def _check_avrdude_version(): - last_line = ESSENTIAL_BINARIES['avrdude']['output'].split('\n')[-2] - version_number = last_line.split()[2][:-1] + lines = ESSENTIAL_BINARIES['avrdude']['output'].split('\n') + # avrdude version text is currently not translated, however we fall back to old behaviour of assuming a line + version_line = next((line for line in lines if 'version' in line), lines[-2]) + version_number = version_line.split()[2][:-1] cli.log.info('Found avrdude version %s', version_number) return CheckStatus.OK diff --git a/lib/python/qmk/cli/doctor/linux.py b/lib/python/qmk/cli/doctor/linux.py index f0850d4e64..c99cc6baea 100644 --- a/lib/python/qmk/cli/doctor/linux.py +++ b/lib/python/qmk/cli/doctor/linux.py @@ -87,7 +87,7 @@ def check_udev_rules(): line = line.strip() if not line.startswith("#") and len(line): current_rules.add(line) - except PermissionError: + except (PermissionError, FileNotFoundError): cli.log.debug("Failed to read: %s", rule_file) # Check if the desired rules are among the currently present rules diff --git a/lib/python/qmk/cli/generate/keymap_h.py b/lib/python/qmk/cli/generate/keymap_h.py index a3aaa405c0..10be16391a 100644 --- a/lib/python/qmk/cli/generate/keymap_h.py +++ b/lib/python/qmk/cli/generate/keymap_h.py @@ -43,6 +43,13 @@ def generate_keymap_h(cli): keymap_h_lines = [GPL2_HEADER_C_LIKE, GENERATED_HEADER_C_LIKE, '#pragma once', '// clang-format off'] + # Allow a potential keymap level keymap.h for items like user defined keycode aliases used within a keymap.json keymap + keymap_h_lines += [ + '#if __has_include_next("keymap.h")', + '# include_next "keymap.h"', + '#endif', + ] + keymap_json = parse_configurator_json(cli.args.filename) if 'keycodes' in keymap_json and keymap_json['keycodes'] is not None: diff --git a/lib/python/qmk/cli/new/keymap.py b/lib/python/qmk/cli/new/keymap.py index 4d19a726a4..fe4871adab 100755 --- a/lib/python/qmk/cli/new/keymap.py +++ b/lib/python/qmk/cli/new/keymap.py @@ -126,7 +126,7 @@ def new_keymap(cli): return False if not validate_keymap_name(user_name): - cli.log.error('Keymap names must contain only {fg_cyan}a-z{fg_reset}, {fg_cyan}0-9{fg_reset} and {fg_cyan}_{fg_reset}! Please choose a different name.') + cli.log.error(f'Keymap name {{fg_cyan}}{user_name}{{fg_reset}} must contain only {{fg_cyan}}a-z{{fg_reset}}, {{fg_cyan}}0-9{{fg_reset}} and {{fg_cyan}}_{{fg_reset}}! Please choose a different name.') return False if keymap_path_new.exists(): diff --git a/lib/python/qmk/path.py b/lib/python/qmk/path.py index 1739689adf..3b8bafbd4e 100644 --- a/lib/python/qmk/path.py +++ b/lib/python/qmk/path.py @@ -177,5 +177,17 @@ class FileType(argparse.FileType): """normalize and check exists otherwise magic strings like '-' for stdin resolve to bad paths """ + # TODO: This should not return both Path and TextIOWrapper as consumers + # assume that they can call Path.as_posix without checking type + + # Handle absolute paths and relative paths to CWD norm = normpath(string) - return norm if norm.exists() else super().__call__(string) + if norm.exists(): + return norm + + # Handle relative paths to QMK_HOME + relative = Path(string) + if relative.exists(): + return relative + + return super().__call__(string) diff --git a/quantum/action_layer.c b/quantum/action_layer.c index 5828dcb824..0a088ab5f0 100644 --- a/quantum/action_layer.c +++ b/quantum/action_layer.c @@ -60,7 +60,7 @@ static void default_layer_state_set(layer_state_t state) { * Print out the hex value of the 32-bit default layer state, as well as the value of the highest bit. */ void default_layer_debug(void) { - ac_dprintf("%08hX(%u)", default_layer_state, get_highest_layer(default_layer_state)); + ac_dprintf("%08lX(%u)", (uint32_t)default_layer_state, get_highest_layer(default_layer_state)); } /** \brief Default Layer Set @@ -231,7 +231,7 @@ void layer_xor(layer_state_t state) { * Print out the hex value of the 32-bit layer state, as well as the value of the highest bit. */ void layer_debug(void) { - ac_dprintf("%08hX(%u)", layer_state, get_highest_layer(layer_state)); + ac_dprintf("%08lX(%u)", (uint32_t)layer_state, get_highest_layer(layer_state)); } #endif diff --git a/quantum/keycodes.h b/quantum/keycodes.h index e5a64d9a71..132eb79c6e 100644 --- a/quantum/keycodes.h +++ b/quantum/keycodes.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_belgian.h b/quantum/keymap_extras/keymap_belgian.h index b41ed9d20b..55f33a0bd3 100644 --- a/quantum/keymap_extras/keymap_belgian.h +++ b/quantum/keymap_extras/keymap_belgian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_bepo.h b/quantum/keymap_extras/keymap_bepo.h index c0bb703ecc..c664d0e6b1 100644 --- a/quantum/keymap_extras/keymap_bepo.h +++ b/quantum/keymap_extras/keymap_bepo.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_brazilian_abnt2.h b/quantum/keymap_extras/keymap_brazilian_abnt2.h index 267b5490c9..aaff90adea 100644 --- a/quantum/keymap_extras/keymap_brazilian_abnt2.h +++ b/quantum/keymap_extras/keymap_brazilian_abnt2.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_canadian_french.h b/quantum/keymap_extras/keymap_canadian_french.h index df9c73c016..8cec09af12 100644 --- a/quantum/keymap_extras/keymap_canadian_french.h +++ b/quantum/keymap_extras/keymap_canadian_french.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h index 4b42457396..c2daed7e64 100644 --- a/quantum/keymap_extras/keymap_canadian_multilingual.h +++ b/quantum/keymap_extras/keymap_canadian_multilingual.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_colemak.h b/quantum/keymap_extras/keymap_colemak.h index a4fc77e80f..e6ffa551b8 100644 --- a/quantum/keymap_extras/keymap_colemak.h +++ b/quantum/keymap_extras/keymap_colemak.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_croatian.h b/quantum/keymap_extras/keymap_croatian.h index cdc032a9eb..33bcd590df 100644 --- a/quantum/keymap_extras/keymap_croatian.h +++ b/quantum/keymap_extras/keymap_croatian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_czech.h b/quantum/keymap_extras/keymap_czech.h index cae16cdb9f..f23a5728b5 100644 --- a/quantum/keymap_extras/keymap_czech.h +++ b/quantum/keymap_extras/keymap_czech.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_czech_mac_ansi.h b/quantum/keymap_extras/keymap_czech_mac_ansi.h index bdfda933b0..4b613c8827 100644 --- a/quantum/keymap_extras/keymap_czech_mac_ansi.h +++ b/quantum/keymap_extras/keymap_czech_mac_ansi.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_czech_mac_iso.h b/quantum/keymap_extras/keymap_czech_mac_iso.h index 9c05d8dae0..97b5addb7e 100644 --- a/quantum/keymap_extras/keymap_czech_mac_iso.h +++ b/quantum/keymap_extras/keymap_czech_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_danish.h b/quantum/keymap_extras/keymap_danish.h index 1f1ee90e23..1907c34dd8 100644 --- a/quantum/keymap_extras/keymap_danish.h +++ b/quantum/keymap_extras/keymap_danish.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h index 5cb2c4564a..aa74064507 100644 --- a/quantum/keymap_extras/keymap_dvorak.h +++ b/quantum/keymap_extras/keymap_dvorak.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_dvorak_fr.h b/quantum/keymap_extras/keymap_dvorak_fr.h index d01bf7fec7..55c568f6e5 100644 --- a/quantum/keymap_extras/keymap_dvorak_fr.h +++ b/quantum/keymap_extras/keymap_dvorak_fr.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_dvorak_programmer.h b/quantum/keymap_extras/keymap_dvorak_programmer.h index f17900105f..547c61676a 100644 --- a/quantum/keymap_extras/keymap_dvorak_programmer.h +++ b/quantum/keymap_extras/keymap_dvorak_programmer.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_estonian.h b/quantum/keymap_extras/keymap_estonian.h index 5fbeedcbe9..4cdc6085e1 100644 --- a/quantum/keymap_extras/keymap_estonian.h +++ b/quantum/keymap_extras/keymap_estonian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_eurkey.h b/quantum/keymap_extras/keymap_eurkey.h index 5a13d48163..9e0a5a40f6 100644 --- a/quantum/keymap_extras/keymap_eurkey.h +++ b/quantum/keymap_extras/keymap_eurkey.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_farsi.h b/quantum/keymap_extras/keymap_farsi.h index e115d9c1c0..1f47a95511 100644 --- a/quantum/keymap_extras/keymap_farsi.h +++ b/quantum/keymap_extras/keymap_farsi.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_finnish.h b/quantum/keymap_extras/keymap_finnish.h index cb21da9962..332ce2641f 100644 --- a/quantum/keymap_extras/keymap_finnish.h +++ b/quantum/keymap_extras/keymap_finnish.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_french.h b/quantum/keymap_extras/keymap_french.h index d4352c6481..5f26b3a338 100644 --- a/quantum/keymap_extras/keymap_french.h +++ b/quantum/keymap_extras/keymap_french.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_french_afnor.h b/quantum/keymap_extras/keymap_french_afnor.h index 8e6905cc01..17c82197b8 100644 --- a/quantum/keymap_extras/keymap_french_afnor.h +++ b/quantum/keymap_extras/keymap_french_afnor.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_french_mac_iso.h b/quantum/keymap_extras/keymap_french_mac_iso.h index ad9d280f2a..4bbec33f13 100644 --- a/quantum/keymap_extras/keymap_french_mac_iso.h +++ b/quantum/keymap_extras/keymap_french_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_german.h b/quantum/keymap_extras/keymap_german.h index bc98daa2fd..df51038b66 100644 --- a/quantum/keymap_extras/keymap_german.h +++ b/quantum/keymap_extras/keymap_german.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_german_mac_iso.h b/quantum/keymap_extras/keymap_german_mac_iso.h index ba3143c570..634a047548 100644 --- a/quantum/keymap_extras/keymap_german_mac_iso.h +++ b/quantum/keymap_extras/keymap_german_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_greek.h b/quantum/keymap_extras/keymap_greek.h index fb2f02a04f..3ee958935c 100644 --- a/quantum/keymap_extras/keymap_greek.h +++ b/quantum/keymap_extras/keymap_greek.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_hebrew.h b/quantum/keymap_extras/keymap_hebrew.h index 5d1d4a29c6..e54aaf1116 100644 --- a/quantum/keymap_extras/keymap_hebrew.h +++ b/quantum/keymap_extras/keymap_hebrew.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_hungarian.h b/quantum/keymap_extras/keymap_hungarian.h index 27236553e8..5be7be5a94 100644 --- a/quantum/keymap_extras/keymap_hungarian.h +++ b/quantum/keymap_extras/keymap_hungarian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_icelandic.h b/quantum/keymap_extras/keymap_icelandic.h index 409be27b77..451819c283 100644 --- a/quantum/keymap_extras/keymap_icelandic.h +++ b/quantum/keymap_extras/keymap_icelandic.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_irish.h b/quantum/keymap_extras/keymap_irish.h index 587467bcbe..ff1bb0efa3 100644 --- a/quantum/keymap_extras/keymap_irish.h +++ b/quantum/keymap_extras/keymap_irish.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_italian.h b/quantum/keymap_extras/keymap_italian.h index 9fd7f1b15c..a7d05b3674 100644 --- a/quantum/keymap_extras/keymap_italian.h +++ b/quantum/keymap_extras/keymap_italian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_italian_mac_ansi.h b/quantum/keymap_extras/keymap_italian_mac_ansi.h index 9ef38c0d87..5ef67a1485 100644 --- a/quantum/keymap_extras/keymap_italian_mac_ansi.h +++ b/quantum/keymap_extras/keymap_italian_mac_ansi.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_italian_mac_iso.h b/quantum/keymap_extras/keymap_italian_mac_iso.h index e80cfa450c..376c97684b 100644 --- a/quantum/keymap_extras/keymap_italian_mac_iso.h +++ b/quantum/keymap_extras/keymap_italian_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_japanese.h b/quantum/keymap_extras/keymap_japanese.h index 55df86e16d..1839cb6b40 100644 --- a/quantum/keymap_extras/keymap_japanese.h +++ b/quantum/keymap_extras/keymap_japanese.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_korean.h b/quantum/keymap_extras/keymap_korean.h index 7bf64c4841..a2ea15dc48 100644 --- a/quantum/keymap_extras/keymap_korean.h +++ b/quantum/keymap_extras/keymap_korean.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_latvian.h b/quantum/keymap_extras/keymap_latvian.h index 4d60c45163..590106bb3c 100644 --- a/quantum/keymap_extras/keymap_latvian.h +++ b/quantum/keymap_extras/keymap_latvian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_lithuanian_azerty.h b/quantum/keymap_extras/keymap_lithuanian_azerty.h index e88cc75e07..078dc87eb8 100644 --- a/quantum/keymap_extras/keymap_lithuanian_azerty.h +++ b/quantum/keymap_extras/keymap_lithuanian_azerty.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_lithuanian_qwerty.h b/quantum/keymap_extras/keymap_lithuanian_qwerty.h index 3321615c1e..2a0b8696ab 100644 --- a/quantum/keymap_extras/keymap_lithuanian_qwerty.h +++ b/quantum/keymap_extras/keymap_lithuanian_qwerty.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_neo2.h b/quantum/keymap_extras/keymap_neo2.h index 5d10f19fd5..8c6e8a08d1 100644 --- a/quantum/keymap_extras/keymap_neo2.h +++ b/quantum/keymap_extras/keymap_neo2.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_nordic.h b/quantum/keymap_extras/keymap_nordic.h index 3a11b29fc8..8381e97e3e 100644 --- a/quantum/keymap_extras/keymap_nordic.h +++ b/quantum/keymap_extras/keymap_nordic.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_norman.h b/quantum/keymap_extras/keymap_norman.h index d47c2ff8a7..09329fa109 100644 --- a/quantum/keymap_extras/keymap_norman.h +++ b/quantum/keymap_extras/keymap_norman.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_norwegian.h b/quantum/keymap_extras/keymap_norwegian.h index 021b8c3b9c..915a4edeec 100644 --- a/quantum/keymap_extras/keymap_norwegian.h +++ b/quantum/keymap_extras/keymap_norwegian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_plover.h b/quantum/keymap_extras/keymap_plover.h index e7facfd623..3c501d7587 100644 --- a/quantum/keymap_extras/keymap_plover.h +++ b/quantum/keymap_extras/keymap_plover.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_plover_dvorak.h b/quantum/keymap_extras/keymap_plover_dvorak.h index 5c8a4f9ada..ef7a058203 100644 --- a/quantum/keymap_extras/keymap_plover_dvorak.h +++ b/quantum/keymap_extras/keymap_plover_dvorak.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_polish.h b/quantum/keymap_extras/keymap_polish.h index e5e48097f7..59b1488c1f 100644 --- a/quantum/keymap_extras/keymap_polish.h +++ b/quantum/keymap_extras/keymap_polish.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_portuguese.h b/quantum/keymap_extras/keymap_portuguese.h index 44abaf6537..1dbfc083ab 100644 --- a/quantum/keymap_extras/keymap_portuguese.h +++ b/quantum/keymap_extras/keymap_portuguese.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_portuguese_mac_iso.h b/quantum/keymap_extras/keymap_portuguese_mac_iso.h index f2d04440fb..44c27f6098 100644 --- a/quantum/keymap_extras/keymap_portuguese_mac_iso.h +++ b/quantum/keymap_extras/keymap_portuguese_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_romanian.h b/quantum/keymap_extras/keymap_romanian.h index 9a7239e032..9e58129a4a 100644 --- a/quantum/keymap_extras/keymap_romanian.h +++ b/quantum/keymap_extras/keymap_romanian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_russian.h b/quantum/keymap_extras/keymap_russian.h index b756a657df..2591989e88 100644 --- a/quantum/keymap_extras/keymap_russian.h +++ b/quantum/keymap_extras/keymap_russian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_russian_typewriter.h b/quantum/keymap_extras/keymap_russian_typewriter.h index 45fb1ede04..d0c15913ca 100644 --- a/quantum/keymap_extras/keymap_russian_typewriter.h +++ b/quantum/keymap_extras/keymap_russian_typewriter.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_serbian.h b/quantum/keymap_extras/keymap_serbian.h index 202322b591..2770ca29a2 100644 --- a/quantum/keymap_extras/keymap_serbian.h +++ b/quantum/keymap_extras/keymap_serbian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_serbian_latin.h b/quantum/keymap_extras/keymap_serbian_latin.h index e863aa4ed8..4f9749f452 100644 --- a/quantum/keymap_extras/keymap_serbian_latin.h +++ b/quantum/keymap_extras/keymap_serbian_latin.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_slovak.h b/quantum/keymap_extras/keymap_slovak.h index f5848a6aaf..6bede22ba7 100644 --- a/quantum/keymap_extras/keymap_slovak.h +++ b/quantum/keymap_extras/keymap_slovak.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_slovenian.h b/quantum/keymap_extras/keymap_slovenian.h index 502f06ad64..ad9ce22f33 100644 --- a/quantum/keymap_extras/keymap_slovenian.h +++ b/quantum/keymap_extras/keymap_slovenian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_spanish.h b/quantum/keymap_extras/keymap_spanish.h index dc23aea639..1c84ba947d 100644 --- a/quantum/keymap_extras/keymap_spanish.h +++ b/quantum/keymap_extras/keymap_spanish.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_spanish_dvorak.h b/quantum/keymap_extras/keymap_spanish_dvorak.h index e19a84b7e5..c9c1a7066f 100644 --- a/quantum/keymap_extras/keymap_spanish_dvorak.h +++ b/quantum/keymap_extras/keymap_spanish_dvorak.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_spanish_latin_america.h b/quantum/keymap_extras/keymap_spanish_latin_america.h index 57329d20cd..404cbcbe19 100644 --- a/quantum/keymap_extras/keymap_spanish_latin_america.h +++ b/quantum/keymap_extras/keymap_spanish_latin_america.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish.h b/quantum/keymap_extras/keymap_swedish.h index a50f8af30d..ced83e0a7f 100644 --- a/quantum/keymap_extras/keymap_swedish.h +++ b/quantum/keymap_extras/keymap_swedish.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_mac_ansi.h b/quantum/keymap_extras/keymap_swedish_mac_ansi.h index 642c161dab..a2d8a5437d 100644 --- a/quantum/keymap_extras/keymap_swedish_mac_ansi.h +++ b/quantum/keymap_extras/keymap_swedish_mac_ansi.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_mac_iso.h b/quantum/keymap_extras/keymap_swedish_mac_iso.h index 50387364cf..0338a9944f 100644 --- a/quantum/keymap_extras/keymap_swedish_mac_iso.h +++ b/quantum/keymap_extras/keymap_swedish_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h b/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h index be1581bb3d..46187f4d17 100644 --- a/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h +++ b/quantum/keymap_extras/keymap_swedish_pro_mac_ansi.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h b/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h index d50213f987..29878371cb 100644 --- a/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h +++ b/quantum/keymap_extras/keymap_swedish_pro_mac_iso.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swiss_de.h b/quantum/keymap_extras/keymap_swiss_de.h index 4ebdb5c610..7f74b30432 100644 --- a/quantum/keymap_extras/keymap_swiss_de.h +++ b/quantum/keymap_extras/keymap_swiss_de.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_swiss_fr.h b/quantum/keymap_extras/keymap_swiss_fr.h index 11fcc6536d..ada1837c94 100644 --- a/quantum/keymap_extras/keymap_swiss_fr.h +++ b/quantum/keymap_extras/keymap_swiss_fr.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_turkish_f.h b/quantum/keymap_extras/keymap_turkish_f.h index bbdaa3af25..f863c9036b 100644 --- a/quantum/keymap_extras/keymap_turkish_f.h +++ b/quantum/keymap_extras/keymap_turkish_f.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_turkish_q.h b/quantum/keymap_extras/keymap_turkish_q.h index d3fa00d7ae..7396fb3d20 100644 --- a/quantum/keymap_extras/keymap_turkish_q.h +++ b/quantum/keymap_extras/keymap_turkish_q.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_uk.h b/quantum/keymap_extras/keymap_uk.h index 7490af6cf6..6a43f4669f 100644 --- a/quantum/keymap_extras/keymap_uk.h +++ b/quantum/keymap_extras/keymap_uk.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_ukrainian.h b/quantum/keymap_extras/keymap_ukrainian.h index 78e39f8c75..3ceb4b8134 100644 --- a/quantum/keymap_extras/keymap_ukrainian.h +++ b/quantum/keymap_extras/keymap_ukrainian.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us.h b/quantum/keymap_extras/keymap_us.h index b6e380ab23..5357be038c 100644 --- a/quantum/keymap_extras/keymap_us.h +++ b/quantum/keymap_extras/keymap_us.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us_extended.h b/quantum/keymap_extras/keymap_us_extended.h index 4262a7c44e..08dc45c5cd 100644 --- a/quantum/keymap_extras/keymap_us_extended.h +++ b/quantum/keymap_extras/keymap_us_extended.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us_international.h b/quantum/keymap_extras/keymap_us_international.h index adc7051fe4..247ab02778 100644 --- a/quantum/keymap_extras/keymap_us_international.h +++ b/quantum/keymap_extras/keymap_us_international.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_us_international_linux.h b/quantum/keymap_extras/keymap_us_international_linux.h index db315968d6..e9d5bde808 100644 --- a/quantum/keymap_extras/keymap_us_international_linux.h +++ b/quantum/keymap_extras/keymap_us_international_linux.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_workman.h b/quantum/keymap_extras/keymap_workman.h index 727e44512c..8a37a14265 100644 --- a/quantum/keymap_extras/keymap_workman.h +++ b/quantum/keymap_extras/keymap_workman.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/keymap_extras/keymap_workman_zxcvm.h b/quantum/keymap_extras/keymap_workman_zxcvm.h index 4655af60d6..1ec111245e 100644 --- a/quantum/keymap_extras/keymap_workman_zxcvm.h +++ b/quantum/keymap_extras/keymap_workman_zxcvm.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/rgb_matrix/animations/typing_heatmap_anim.h b/quantum/rgb_matrix/animations/typing_heatmap_anim.h index 0606738891..77d79cf1af 100644 --- a/quantum/rgb_matrix/animations/typing_heatmap_anim.h +++ b/quantum/rgb_matrix/animations/typing_heatmap_anim.h @@ -32,7 +32,7 @@ void process_rgb_matrix_typing_heatmap(uint8_t row, uint8_t col) { if (i_row == row && i_col == col) { g_rgb_frame_buffer[row][col] = qadd8(g_rgb_frame_buffer[row][col], RGB_MATRIX_TYPING_HEATMAP_INCREASE_STEP); } else { -# define LED_DISTANCE(led_a, led_b) sqrt16(((int16_t)(led_a.x - led_b.x) * (int16_t)(led_a.x - led_b.x)) + ((int16_t)(led_a.y - led_b.y) * (int16_t)(led_a.y - led_b.y))) +# define LED_DISTANCE(led_a, led_b) sqrt16(((int32_t)(led_a.x - led_b.x) * (int32_t)(led_a.x - led_b.x)) + ((int32_t)(led_a.y - led_b.y) * (int32_t)(led_a.y - led_b.y))) uint8_t distance = LED_DISTANCE(g_led_config.point[g_led_config.matrix_co[row][col]], g_led_config.point[g_led_config.matrix_co[i_row][i_col]]); # undef LED_DISTANCE if (distance <= RGB_MATRIX_TYPING_HEATMAP_SPREAD) { diff --git a/quantum/rgblight/rgblight_breathe_table.h b/quantum/rgblight/rgblight_breathe_table.h index 5a8181c7d4..648e1bbaec 100644 --- a/quantum/rgblight/rgblight_breathe_table.h +++ b/quantum/rgblight/rgblight_breathe_table.h @@ -1,4 +1,4 @@ -// Copyright 2025 QMK +// Copyright 2026 QMK // SPDX-License-Identifier: GPL-2.0-or-later /******************************************************************************* diff --git a/quantum/send_string/send_string.c b/quantum/send_string/send_string.c index 602f24dabe..6471d5140c 100644 --- a/quantum/send_string/send_string.c +++ b/quantum/send_string/send_string.c @@ -281,6 +281,10 @@ void send_nibble(uint8_t number) { } } +#if defined(__AVR_ATmega32U4__) +# include +#endif + void tap_random_base64(void) { #if defined(__AVR_ATmega32U4__) uint8_t key = (TCNT0 + TCNT1 + TCNT3 + TCNT4) % 64; diff --git a/util/env-bootstrap.sh b/util/env-bootstrap.sh index 6b0497ffae..07020ea371 100755 --- a/util/env-bootstrap.sh +++ b/util/env-bootstrap.sh @@ -230,7 +230,7 @@ __EOT__ *debian* | *ubuntu*) echo "zstd build-essential clang-format diffutils wget unzip zip libhidapi-hidraw0 dos2unix git" ;; *fedora*) echo "zstd clang diffutils which gcc git wget unzip zip hidapi dos2unix libusb-devel libusb1-devel libusb-compat-0.1-devel libusb0-devel git epel-release" ;; *suse*) echo "zstd clang diffutils wget unzip zip libhidapi-hidraw0 dos2unix git libusb-1_0-devel gzip which" ;; - *gentoo*) echo "zstd diffutils wget unzip zip dev-libs/hidapi dos2unix dev-vcs/git dev-libs/libusb app-arch/gzip which" ;; + *gentoo*) echo "zstd sys-apps/diffutils wget unzip zip dev-libs/hidapi dos2unix dev-vcs/git dev-libs/libusb app-arch/gzip which" ;; *) echo >&2 echo "Sorry, we don't recognize your distribution." >&2