forked from mirror/qmk_firmware
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
863b308519 | ||
|
|
127c664647 | ||
|
|
7d66c11f37 | ||
|
|
e391793f73 | ||
|
|
70c36c6c97 | ||
|
|
56a2e332e1 | ||
|
|
e31384babf | ||
|
|
a0b15d08bc | ||
|
|
3d591a2000 | ||
|
|
1e683923e1 | ||
|
|
3194862502 | ||
|
|
8c035c2116 | ||
|
|
91a9f9e492 | ||
|
|
ddeaa26fef | ||
|
|
f3a16ef21d | ||
|
|
99b5b9ab7f | ||
|
|
6a5610a8be | ||
|
|
acbeec29da | ||
|
|
7e35cdda8a | ||
|
|
dba60e2e65 | ||
|
|
c68281b353 | ||
|
|
84d44e6188 | ||
|
|
54e8fad959 | ||
|
|
2c847b0350 | ||
|
|
e1c869b8da | ||
|
|
9e0118172f | ||
|
|
4f9582da26 | ||
|
|
2e68ddc826 | ||
|
|
c1fedab457 | ||
|
|
2929448605 | ||
|
|
b39661de96 | ||
|
|
ff75bce86a | ||
|
|
0881e0867b | ||
|
|
e6e66a9f2e | ||
|
|
e2d19eda57 | ||
|
|
73a6496516 | ||
|
|
c8f6e6a936 | ||
|
|
a86322e4a7 | ||
|
|
505e5c7033 | ||
|
|
107812ceef | ||
|
|
de8f05b4c3 |
430
.github/copilot-instructions.md
vendored
Normal file
430
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,430 @@
|
||||
---
|
||||
applyTo: "**"
|
||||
excludeAgent:
|
||||
- "coding-agent"
|
||||
---
|
||||
# GitHub Copilot Instructions for QMK Pull Request Review
|
||||
This document provides automated review guidance based on the [QMK PR Checklist](https://docs.qmk.fm/pr_checklist) and it is intended only for use by GitHub Copilot code-review agent during pull request reviews.
|
||||
|
||||
## General PR Requirements
|
||||
|
||||
### Branch and Submission Standards
|
||||
- **Source Branch Policy**: Verify PR is NOT submitted from submitter's own `master` branch
|
||||
- Flag if submitter is using their own `master` branch as source
|
||||
- Suggest using feature branches instead for cleaner fork management
|
||||
- **Target Branch Policy**:
|
||||
- **New keyboard additions** → `master` branch (new folders under `keyboards/`)
|
||||
- **All other changes** → `develop` branch:
|
||||
- Keyboard updates, refactors, or moves
|
||||
- Core code changes
|
||||
- Data-driven configuration migrations
|
||||
- Any modifications to existing keyboards
|
||||
- **PR Scope**: PRs should contain the smallest set of modifications for a single change
|
||||
- Flag PRs that modify multiple keyboards simultaneously
|
||||
- Suggest splitting large PRs into focused, incremental changes
|
||||
- **Merge Conflicts**: Check for unresolved merge conflicts
|
||||
|
||||
### File Naming and Structure
|
||||
- **Lowercase Requirement**: All new directories and filenames must be lowercase
|
||||
- Exception: Upstream sources with original uppercase (LUFA, ChibiOS)
|
||||
- Exception: Core files with valid justification
|
||||
- **Reject**: Board designer preference for uppercase is NOT valid justification
|
||||
|
||||
### License Headers
|
||||
- **Required**: Valid license headers on all `*.c` and `*.h` files
|
||||
- **Recommended**: GPL2/GPL3 for consistency
|
||||
- **Format**: Check for proper GPL2+ header or SPDX identifier
|
||||
```c
|
||||
// Copyright 2024 Your Name (@yourgithub)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
```
|
||||
- **Exception**: Simple assignment-only `rules.mk` files don't need headers
|
||||
- **Flag**: Missing or ambiguous license headers (blocks merge)
|
||||
|
||||
### QMK Best Practices
|
||||
- **Include Guards**: Use `#pragma once` instead of `#ifndef` guards in headers
|
||||
- **Abstractions Required**: No low-level GPIO/I2C/SPI functions
|
||||
- Must use QMK abstractions (flag direct hardware access)
|
||||
- **Timing Functions**:
|
||||
- Use `wait_ms()` instead of `_delay_ms()`
|
||||
- Remove `#include <util/delay.h>`
|
||||
- Use `timer_read()`, `timer_read32()` from `timer.h`
|
||||
- **New Abstractions**: If proposing new abstraction, suggest:
|
||||
1. Prototype in own keyboard first
|
||||
2. Discuss with QMK Collaborators on Discord
|
||||
3. Refactor as separate core change
|
||||
4. Remove the keyboard-specific implementation from board
|
||||
|
||||
---
|
||||
|
||||
## Keymap PR Reviews
|
||||
|
||||
**Scope**: These rules apply to files within `keyboards/*/keymaps/*` subdirectories.
|
||||
|
||||
### Note on Personal Keymaps
|
||||
- **Policy Change**: Personal keymap submissions no longer accepted
|
||||
- **Permitted**: Vendor-specific keymaps only
|
||||
- Naming convention: `default_${vendor}` (e.g., `default_clueboard`)
|
||||
- Can be more feature-rich than stock `default` keymaps
|
||||
|
||||
### Keymap Code Standards
|
||||
- **Includes**: `#include QMK_KEYBOARD_H` preferred over specific board files
|
||||
- **Enums**: Prefer layer enums to `#define`s
|
||||
- **Custom Keycodes**: First entry must be `QK_USER`
|
||||
- **Formatting**: Check spacing alignment on commas and keycodes (spaces, not tabs)
|
||||
- **VIA**: Keymaps should NOT enable VIA
|
||||
- VIA keymaps belong in [VIA QMK Userspace](https://github.com/the-via/qmk_userspace_via)
|
||||
|
||||
---
|
||||
|
||||
## Keyboard PR Reviews
|
||||
|
||||
**Scope**: These rules apply to keyboard-level files in `keyboards/*` directories, excluding files within the `keymaps/` subdirectories. This includes:
|
||||
- `info.json` or `keyboard.json` (keyboard root or variant level)
|
||||
- `readme.md` (keyboard level)
|
||||
- `rules.mk` (keyboard level)
|
||||
- `config.h` (keyboard level, not keymap level)
|
||||
- `<keyboard>.c` and `<keyboard>.h` files
|
||||
- Hardware configuration files (`halconf.h`, `mcuconf.h`, `chconf.h`)
|
||||
|
||||
### Branch Targeting
|
||||
- **New Keyboards**: Target `master` branch
|
||||
- New additions to `keyboards/` folder submit to `master`
|
||||
- **Keyboard Moves**: Must target `develop` branch
|
||||
- Check `data/mappings/keyboard_aliases.hjson` is updated for moves
|
||||
- **Keyboard Updates/Refactors**: Must target `develop` to reduce merge conflicts
|
||||
- **Data Driven Migration**: Must target `develop`
|
||||
|
||||
### info.json and keyboard.json Requirements
|
||||
- **Data-Driven Configuration**: Encourage maximum use of `info.json` and `keyboard.json` schema features
|
||||
- **Schema Validation**: All `info.json` and `keyboard.json` files must validate against `data/schemas/keyboard.jsonschema`
|
||||
- Use QMK CLI: `qmk lint -kb <keyboard_name>` to validate
|
||||
- Schema defines required fields, data types, and valid values
|
||||
- Check for schema validation errors before submitting PR
|
||||
- **Mandatory Elements**:
|
||||
- Valid URL
|
||||
- Valid maintainer
|
||||
- Valid USB VID/PID and device version
|
||||
- Displays correctly in Configurator (Ctrl+Shift+I to preview)
|
||||
- `layout` definitions include matrix positions
|
||||
- Standard layout definitions where applicable
|
||||
- Community Layout macro names when applicable
|
||||
- Microcontroller and bootloader specified
|
||||
- Diode direction (if not using direct pins)
|
||||
- **Layout Naming**:
|
||||
- Single layout: Use `LAYOUT` or community layout name
|
||||
- Multiple layouts: Include `LAYOUT_all` + alternate names
|
||||
- Prefer community layout names (e.g., `LAYOUT_tkl_ansi`, `LAYOUT_ortho_4x4`)
|
||||
- **Configuration in info.json or keyboard.json** (when applicable):
|
||||
- Direct pin configuration
|
||||
- Backlight, Split keyboard, Encoder, Bootmagic configs
|
||||
- LED Indicator, RGB Light, RGB Matrix configs
|
||||
- **Format**: Run `qmk format-json -i` before submitting
|
||||
|
||||
### USB VID/PID Uniqueness
|
||||
VID+PID combination must be unique across all keyboards. Individual VID or PID values can be reused with different partners.
|
||||
**Validation Steps:**
|
||||
1. Extract VID and PID from keyboard.json/info.json in the PR
|
||||
2. Search for existing usage: `grep -r '"vid".*"0xVVVV"' keyboards/ --include="*.json" | grep -l '"pid".*"0xPPPP"'`
|
||||
3. If results found: Check if BOTH VID AND PID match in same file
|
||||
- Both match = **COLLISION** - request different PID
|
||||
- Only one matches = **OK** - different keyboards can share individual values
|
||||
4. For keyboard variants/revisions under same keyboard folder:
|
||||
- Different PID recommended for functionally different variants
|
||||
- Same PID acceptable if revisions only differ in hardware routing/pin assignments
|
||||
**Quick Reference:**
|
||||
- Same PID + Different VID = Valid
|
||||
- Same VID + Different PID = Valid
|
||||
- Same VID + Same PID = Invalid
|
||||
**Review Response:**
|
||||
For collision:
|
||||
```
|
||||
VID+PID collision: 0xVVVV:0xPPPP already used by keyboards/[path]/file.json
|
||||
+Please assign a different PID. VID can remain the same.
|
||||
```
|
||||
For uniqueness confirmed:
|
||||
```
|
||||
VID+PID validation: 0xVVVV:0xPPPP is unique (no collisions found)
|
||||
```
|
||||
|
||||
### readme.md Requirements
|
||||
- **Template**: Must follow [official template](https://github.com/qmk/qmk_firmware/blob/master/data/templates/keyboard/readme.md)
|
||||
- **Flash Command**: Present with `:flash` at end
|
||||
- **Hardware Link**: Valid availability link (unless handwired)
|
||||
- Private groupbuys acceptable
|
||||
- One-off prototypes will be questioned
|
||||
- Open-source should link to files
|
||||
- **Reset Instructions**: Clear bootloader mode instructions
|
||||
- **Images Required**:
|
||||
- Keyboard and PCB photos preferred
|
||||
- Must be hosted externally (imgur, etc.)
|
||||
- Direct image links required (not preview pages)
|
||||
- Example: `https://i.imgur.com/vqgE7Ok.jpg` not `https://imgur.com/vqgE7Ok`
|
||||
|
||||
### rules.mk Standards
|
||||
- **Removed Items**:
|
||||
- `MIDI_ENABLE`, `FAUXCLICKY_ENABLE`, `HD44780_ENABLE`
|
||||
- Size comments like `(-/+size)`
|
||||
- Alternate bootloader lists if one specified
|
||||
- MCU parameter re-definitions matching defaults in `mcu_selection.mk`
|
||||
- **Comment Updates**: Change bootloader comments to generic
|
||||
- **Forbidden Features at Keyboard Level** (these belong in keymap-level `rules.mk` only):
|
||||
- `COMBO_ENABLE`
|
||||
- `ENCODER_MAP_ENABLE`
|
||||
|
||||
### config.h Standards (Keyboard Level)
|
||||
- **Prohibited**:
|
||||
- `#define DESCRIPTION`
|
||||
- Magic Key Options, MIDI Options, HD44780 configuration
|
||||
- User preference `#define`s (belong in keymap)
|
||||
- Re-defining default values (`DEBOUNCE`, RGB settings)
|
||||
- Copy/pasted comment blocks explaining features
|
||||
- Commented-out unused defines
|
||||
- `#include "config_common.h"`
|
||||
- `#define MATRIX_ROWS/COLS` (unless custom matrix)
|
||||
- **Minimal Code**: Only critical board boot code required
|
||||
- **No Vial**: Vial-related files/changes not accepted
|
||||
|
||||
### Keyboard Implementation Files
|
||||
|
||||
#### `<keyboard>.c`
|
||||
- **Remove Empty Functions**: Delete empty or commented-out weak-defined functions
|
||||
- `xxxx_xxxx_kb()`, `xxxx_xxxx_user()` implementations
|
||||
- **Migration**: `matrix_init_board()` → `keyboard_pre_init_kb()`
|
||||
- **Custom Matrix**: Use `lite` variant when possible for standard debounce
|
||||
- `CUSTOM_MATRIX = lite` preferred
|
||||
- Full custom matrix (`yes`) requires justification
|
||||
- **LED Indicators**: Prefer Configuration Options over custom `led_update_*()` implementations
|
||||
- **Hardware Configuration**: Basic functionality for OLED, encoders, etc. at keyboard level
|
||||
|
||||
#### `<keyboard>.h`
|
||||
- **Include**: `#include "quantum.h"` at top
|
||||
- **Layout Macros**: Move to `info.json` or `keyboard.json` (no longer in header)
|
||||
|
||||
### Default Keymap Standards
|
||||
|
||||
**Scope**: These rules specifically apply to files within `keyboards/*/keymaps/default/` directories.
|
||||
|
||||
- **Pristine Requirement**: Bare minimum clean slate
|
||||
- No custom keycodes
|
||||
- No advanced features (non-exhaustive list of examples: tap dance, macros)
|
||||
- Basic mod taps and home row mods acceptable when necessary
|
||||
- Standard layouts preferred -- see examples in `layouts/default/` and `layouts/community/`
|
||||
- **Removed Examples**: Delete `QMKBEST`/`QMKURL` macros
|
||||
- **Tri Layer**: Use Tri Layer feature instead of manual `layer_on/off()` + `update_tri_layer()`
|
||||
- **Encoder Map**: Use encoder map feature, `encoder_update_user()` may not be present
|
||||
- **No VIA**: Default keymap should not enable VIA
|
||||
- **Additional Keymaps**: Example/bells-and-whistles keymaps acceptable in same PR (separate from default)
|
||||
|
||||
### Prohibited Files
|
||||
- **No VIA JSON**: Belongs in [VIA Keyboard Repo](https://github.com/the-via/keyboards)
|
||||
- **No KLE JSON**: Not used within QMK
|
||||
- **No Cross-Keyboard Sources**: Don't include files from other keyboard vendors
|
||||
- Exception: Core files (e.g., `drivers/sensors/pmw3360.c`)
|
||||
- Use of vendor-specific code (e.g., `wilba_tech/wt_main.c`) only when keyboard exists in the same enclosing vendor folder (e.g. a `wilba_tech` keyboard)
|
||||
- Multi-board code is candidate for core refactoring when intended for use by multiple vendors
|
||||
|
||||
### Wireless Keyboards
|
||||
- **Policy**: Wireless/Bluetooth PRs rejected without complete wireless code
|
||||
- Wireless code may not include anything resembling precompiled data such as `*.a` files or other libraries
|
||||
- Firmware blobs are not permitted in raw form or as compiled C-style arrays either.
|
||||
- GPL2+ license requires full source disclosure
|
||||
- Historically abused for VIA compatibility without releasing sources
|
||||
- PRs without wireless capability will be held indefinitely
|
||||
- Existing merged wireless boards from same vendor held until sources provided
|
||||
|
||||
### ChibiOS-Specific Requirements
|
||||
- **Board Definitions**: Strong preference for existing ChibiOS board definitions
|
||||
- Use equivalent Nucleo boards when possible
|
||||
- Example: STM32L082KZ can use `BOARD = ST_NUCLEO64_L073RZ`
|
||||
- QMK is eliminating custom board definitions due to maintenance burden
|
||||
- **New Board Definitions**:
|
||||
- Must NOT be embedded in keyboard PR
|
||||
- Submit as separate Core PR
|
||||
- `board.c` must have standard `__early_init()` and empty `boardInit()`
|
||||
- Migrate code intended for `__early_init()` → keyboard-local `early_hardware_init_pre/post()`
|
||||
- Migrate code intended for `boardInit()` → keyboard-local `board_init()`
|
||||
|
||||
---
|
||||
|
||||
## Core PR Reviews
|
||||
|
||||
### Targeting and Scope
|
||||
- **Branch**: All core PRs must target `develop` branch
|
||||
- **Single Focus**: Smallest set of changes per PR
|
||||
- PRs with multiple areas will be asked to split
|
||||
- Keyboard/keymap changes only if affecting base builds or default-like keymaps
|
||||
- Keymap modifications (non-default) should be followup PR after core merge
|
||||
- Large refactoring PRs affecting other keymaps raised separately
|
||||
|
||||
### Testing Requirements
|
||||
- **New Hardware Support**: Requires test keyboard under `keyboards/handwired/onekey`
|
||||
- New MCUs: Add child keyboard targeting new MCU for build verification
|
||||
- New hardware (displays, matrix, peripherals): Provide associated keymap
|
||||
- Exception: If existing keymap can leverage functionality (consult Collaborators)
|
||||
- **Callbacks**: New `_kb`/`_user` callbacks must return `bool` for user override
|
||||
- **Unit Tests**: Strongly recommended, may be required
|
||||
- Critical code areas (keycode pipeline) will require tests
|
||||
- Boost confidence in current and future correctness
|
||||
|
||||
### Code Quality
|
||||
- **Subjective Review**: Other requirements at QMK Collaborators' discretion
|
||||
- **Documentation**: Core changes should be well-documented
|
||||
|
||||
---
|
||||
|
||||
## Automated Review Checklist
|
||||
|
||||
When reviewing PRs, check the following systematically:
|
||||
|
||||
### File Changes Review
|
||||
1. **License headers** on all C/H files (GPL2+ preferred, others must be GPL2+ compatible, SPDX format preferred)
|
||||
2. **File naming** lowercase (flag exceptions needing justification)
|
||||
3. **Include guards** use `#pragma once`
|
||||
4. **No low-level hardware access** (GPIO, I2C, SPI direct register writes)
|
||||
5. **Timing abstractions** (`wait_ms()`, `timer_read()` usage)
|
||||
|
||||
### info.json and keyboard.json Validation
|
||||
1. **Schema Compliance**: `keyboard.json` and `info.json` files validate against `data/schemas/keyboard.jsonschema`
|
||||
- Both files are identical syntax, however the `keyboard.json` dictates a buildable target, `info.json` does not
|
||||
- Run `qmk lint -kb <keyboard>` to check schema validation
|
||||
- Check for proper data types (strings, integers, arrays, objects)
|
||||
- Verify required fields are present
|
||||
- Ensure enum values match allowed options in schema
|
||||
2. All mandatory fields present and valid
|
||||
3. `qmk format-json -i` has been run (formats and validates)
|
||||
4. Layout macros moved from headers
|
||||
5. Community layout names used where applicable
|
||||
|
||||
### rules.mk Cleanup
|
||||
1. Deprecated features removed
|
||||
2. No size comments
|
||||
3. No keymap-only features at keyboard level
|
||||
4. No redundant MCU parameter definitions
|
||||
|
||||
### config.h Cleanup
|
||||
1. No `DESCRIPTION`, `config_common.h`, or prohibited includes
|
||||
2. No default value re-definitions
|
||||
3. No commented-out defines or feature documentation blocks
|
||||
4. No user preference defines at keyboard level
|
||||
|
||||
### Keymap Quality
|
||||
1. Default keymaps are pristine (no custom keycodes/advanced features)
|
||||
2. No `QMKBEST`/`QMKURL` macros
|
||||
3. Encoder map feature used instead of `encoder_update_user()`
|
||||
4. Tri Layer feature used for multi-layer access
|
||||
5. No VIA enabled in default keymap
|
||||
|
||||
### Documentation
|
||||
1. readme.md follows template
|
||||
2. Flash command present with `:flash`
|
||||
3. Reset instructions clear
|
||||
4. External image hosting (direct links)
|
||||
5. Valid hardware availability link
|
||||
|
||||
### Code Organization
|
||||
1. Empty weak-defined functions removed from `<keyboard>.c`
|
||||
2. Proper migration of init functions
|
||||
3. No cross-vendor source files
|
||||
4. No VIA/KLE JSON files
|
||||
|
||||
### Branch and Scope
|
||||
1. Not submitted from submitter's own `master` branch (use feature branches)
|
||||
2. PR is focused on single change
|
||||
3. Targets correct branch:
|
||||
- `master` for new keyboard additions
|
||||
- `develop` for keyboard updates/refactors/moves and core changes
|
||||
4. No merge conflicts
|
||||
|
||||
---
|
||||
|
||||
## Review Response Templates
|
||||
|
||||
### For source master branch usage:
|
||||
```
|
||||
⚠️ This PR appears to be submitted from your own `master` branch. For future PRs, we recommend using feature branches instead of committing to your `master`. This makes it easier to keep your fork updated and manage multiple PRs.
|
||||
|
||||
See: [Best Practices: Your Fork's Master](https://docs.qmk.fm/newbs_git_using_your_master_branch)
|
||||
```
|
||||
|
||||
### For incorrect target branch:
|
||||
```
|
||||
❌ This PR targets the wrong branch:
|
||||
- **New keyboard additions** should target `master`
|
||||
- **Keyboard updates/refactors/moves** should target `develop`
|
||||
- **Core changes** should target `develop`
|
||||
|
||||
Please change the target branch accordingly.
|
||||
```
|
||||
|
||||
### For missing license headers:
|
||||
```
|
||||
❌ Missing GPL-compatible license headers on the following files:
|
||||
- [list files]
|
||||
|
||||
Please add GPL2+ headers (GPL2/GPL3 recommended). Example:
|
||||
\`\`\`c
|
||||
// Copyright 2024 Your Name (@yourgithub)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
\`\`\`
|
||||
```
|
||||
|
||||
### For non-lowercase filenames:
|
||||
```
|
||||
❌ The following files/directories must be lowercase:
|
||||
- [list files]
|
||||
|
||||
Exception: Only valid if from upstream sources (LUFA, ChibiOS) or justified by core consistency.
|
||||
```
|
||||
|
||||
### For config.h violations:
|
||||
```
|
||||
⚠️ Found prohibited config.h elements:
|
||||
- [list specific issues: DESCRIPTION, default value re-definitions, etc.]
|
||||
|
||||
Please remove these and refer to [Data Driven Configuration](https://docs.qmk.fm/data_driven_config).
|
||||
```
|
||||
|
||||
### For info.json or keyboard.json issues:
|
||||
```
|
||||
⚠️ info.json or keyboard.json needs attention:
|
||||
- [list missing mandatory fields]
|
||||
- Please run: \`qmk format-json -i path/to/info.json\` (or keyboard.json)
|
||||
- Validate with: \`qmk lint -kb <keyboard_name>\`
|
||||
```
|
||||
|
||||
### For schema validation errors:
|
||||
```
|
||||
❌ Schema validation failed for info.json or keyboard.json:
|
||||
- [list specific validation errors from schema]
|
||||
- Check `data/schemas/keyboard.jsonschema` for valid field definitions
|
||||
- Common issues:
|
||||
- Invalid data types (e.g., string instead of integer)
|
||||
- Missing required fields
|
||||
- Invalid enum values
|
||||
- Incorrectly formatted pin definitions
|
||||
```
|
||||
|
||||
### For non-pristine default keymap:
|
||||
```
|
||||
⚠️ Default keymap should be pristine (clean slate for users):
|
||||
- Remove: [custom keycodes/tap dance/macros/etc.]
|
||||
- Keep it minimal with standard layouts where possible
|
||||
|
||||
Consider moving advanced features to a separate example keymap.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes for GitHub Copilot
|
||||
|
||||
- Focus reviews on **objective checklist items** that can be automatically verified
|
||||
- Flag **definite violations** with ❌
|
||||
- Suggest improvements for **recommendations** with ⚠️
|
||||
- **Provide specific file/line references** when flagging issues
|
||||
- **Link to relevant QMK documentation** for each issue
|
||||
- **Prioritize blocking issues** (license, merge conflicts, branch policy)
|
||||
- **Be constructive**: Suggest fixes, not just problems
|
||||
- **Acknowledge trade-offs**: Some guidelines have valid exceptions
|
||||
|
||||
This is meant as a **first-pass review** to catch common issues before human review. Complex architectural decisions, code quality, and subjective assessments still require human QMK Collaborator review.
|
||||
2
.github/workflows/auto_approve.yml
vendored
2
.github/workflows/auto_approve.yml
vendored
@@ -4,7 +4,7 @@ permissions: {}
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "*/5 * * * *"
|
||||
- cron: "*/30 * * * *"
|
||||
|
||||
jobs:
|
||||
automatic_approve:
|
||||
|
||||
50
.github/workflows/bootstrap_testing.yml
vendored
50
.github/workflows/bootstrap_testing.yml
vendored
@@ -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:
|
||||
@@ -141,6 +162,12 @@ jobs:
|
||||
bash /home/testuser/qmk_firmware/util/env-bootstrap.sh
|
||||
"
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo -u testuser bash -c "
|
||||
/home/testuser/.local/share/uv/tools/qmk/bin/python -m pip install -r /home/testuser/qmk_firmware/requirements.txt
|
||||
"
|
||||
|
||||
- name: Test QMK CLI
|
||||
run: |
|
||||
sudo -u testuser bash -c "
|
||||
@@ -157,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:
|
||||
@@ -185,6 +216,10 @@ jobs:
|
||||
export CONFIRM=1
|
||||
sh ./util/env-bootstrap.sh
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
$HOME/.local/share/uv/tools/qmk/bin/python -m pip install -r requirements.txt
|
||||
|
||||
- name: Test QMK CLI
|
||||
run: |
|
||||
# Add QMK CLI to PATH (bootstrap script installs it to ~/.local/bin on macOS)
|
||||
@@ -198,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:
|
||||
@@ -235,6 +273,10 @@ jobs:
|
||||
export CONFIRM=1
|
||||
sh ./util/env-bootstrap.sh
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
/opt/uv/tools/qmk/Scripts/python -m pip install -r requirements.txt
|
||||
|
||||
- name: Test QMK CLI
|
||||
run: |
|
||||
# Add QMK CLI to PATH (bootstrap script installs it to /opt/uv/tools/bin on Windows MSYS2)
|
||||
|
||||
10
.github/workflows/ci_build_major_branch.yml
vendored
10
.github/workflows/ci_build_major_branch.yml
vendored
@@ -35,11 +35,6 @@ jobs:
|
||||
slice_length: ${{ steps.generate_slice_length.outputs.slice_length }}
|
||||
|
||||
steps:
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y jq
|
||||
|
||||
- name: Disable safe.directory check
|
||||
run: |
|
||||
git config --global --add safe.directory '*'
|
||||
@@ -47,6 +42,9 @@ jobs:
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Determine concurrency
|
||||
id: generate_slice_length
|
||||
run: |
|
||||
@@ -87,7 +85,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Download firmwares
|
||||
uses: actions/download-artifact@v6
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
pattern: firmware-*
|
||||
path: .
|
||||
|
||||
@@ -27,11 +27,6 @@ jobs:
|
||||
targets: ${{ steps.generate_targets.outputs.targets }}
|
||||
|
||||
steps:
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y jq
|
||||
|
||||
- name: Disable safe.directory check
|
||||
run: |
|
||||
git config --global --add safe.directory '*'
|
||||
@@ -39,6 +34,9 @@ jobs:
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Generate build targets
|
||||
id: generate_targets
|
||||
run: |
|
||||
@@ -62,7 +60,7 @@ jobs:
|
||||
echo "targets=$(jq -c 'keys' targets.json)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Upload targets json
|
||||
uses: actions/upload-artifact@v5
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: targets-${{ inputs.keymap }}
|
||||
path: targets.json
|
||||
@@ -79,11 +77,6 @@ jobs:
|
||||
target: ${{ fromJson(needs.generate_targets.outputs.targets) }}
|
||||
|
||||
steps:
|
||||
- name: Install prerequisites
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y jq
|
||||
|
||||
- name: Disable safe.directory check
|
||||
run: |
|
||||
git config --global --add safe.directory '*'
|
||||
@@ -91,8 +84,11 @@ jobs:
|
||||
- name: Checkout QMK Firmware
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Get target definitions
|
||||
uses: actions/download-artifact@v6
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: targets-${{ inputs.keymap }}
|
||||
path: .
|
||||
@@ -109,10 +105,15 @@ 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@v5
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: firmware-${{ inputs.keymap }}-${{ matrix.target }}
|
||||
if-no-files-found: ignore
|
||||
@@ -139,14 +140,14 @@ jobs:
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Download firmwares
|
||||
uses: actions/download-artifact@v6
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
pattern: firmware-${{ inputs.keymap }}-*
|
||||
path: .
|
||||
merge-multiple: true
|
||||
|
||||
- name: Upload all firmwares
|
||||
uses: actions/upload-artifact@v5
|
||||
uses: actions/upload-artifact@v6
|
||||
with:
|
||||
name: firmware-${{ inputs.keymap }}
|
||||
if-no-files-found: ignore
|
||||
|
||||
1
.github/workflows/cli.yml
vendored
1
.github/workflows/cli.yml
vendored
@@ -30,5 +30,6 @@ jobs:
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run tests
|
||||
run: qmk pytest
|
||||
|
||||
34
.github/workflows/develop_docs.yml
vendored
Normal file
34
.github/workflows/develop_docs.yml
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
name: Generate Develop Docs
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- develop
|
||||
paths:
|
||||
- 'builddefs/docsgen/**'
|
||||
- 'tmk_core/**'
|
||||
- 'quantum/**'
|
||||
- 'platforms/**'
|
||||
- 'docs/**'
|
||||
- '.github/workflows/docs.yml'
|
||||
|
||||
jobs:
|
||||
generate:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Deploy Develop
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware' }}
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
github-token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
script: |
|
||||
const result = await github.rest.actions.createWorkflowDispatch({
|
||||
owner: 'qmk',
|
||||
repo: 'qmk_docs_devel',
|
||||
workflow_id: 'develop.yml',
|
||||
ref: 'main',
|
||||
})
|
||||
7
.github/workflows/docs.yml
vendored
7
.github/workflows/docs.yml
vendored
@@ -35,9 +35,10 @@ jobs:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Install nvm
|
||||
run: |
|
||||
apt-get update && apt-get install -y rsync doxygen
|
||||
# install nvm
|
||||
touch $HOME/.bashrc
|
||||
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
|
||||
|
||||
@@ -56,7 +57,7 @@ jobs:
|
||||
|
||||
- name: Deploy
|
||||
if: ${{ github.event_name == 'push' && github.repository == 'qmk/qmk_firmware' }}
|
||||
uses: JamesIves/github-pages-deploy-action@v4.7.4
|
||||
uses: JamesIves/github-pages-deploy-action@v4.8.0
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: gh-pages
|
||||
|
||||
2
.github/workflows/format_push.yml
vendored
2
.github/workflows/format_push.yml
vendored
@@ -47,7 +47,7 @@ jobs:
|
||||
git config user.email 'hello@qmk.fm'
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware'}}
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
|
||||
3
.github/workflows/regen.yml
vendored
3
.github/workflows/regen.yml
vendored
@@ -21,6 +21,9 @@ jobs:
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run qmk generators
|
||||
run: |
|
||||
util/regen.sh
|
||||
|
||||
5
.github/workflows/regen_push.yml
vendored
5
.github/workflows/regen_push.yml
vendored
@@ -21,6 +21,9 @@ jobs:
|
||||
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run qmk generators
|
||||
run: |
|
||||
util/regen.sh
|
||||
@@ -34,7 +37,7 @@ jobs:
|
||||
git config user.email 'hello@qmk.fm'
|
||||
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
uses: peter-evans/create-pull-request@v8
|
||||
if: ${{ github.repository == 'qmk/qmk_firmware'}}
|
||||
with:
|
||||
token: ${{ secrets.QMK_BOT_TOKEN }}
|
||||
|
||||
2
.github/workflows/unit_test.yml
vendored
2
.github/workflows/unit_test.yml
vendored
@@ -29,7 +29,9 @@ jobs:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- name: Run tests
|
||||
run: qmk test-c
|
||||
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -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
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
"on_state": 1
|
||||
},
|
||||
"debounce": 5,
|
||||
"dynamic_keymap": {
|
||||
"layer_count": 4
|
||||
},
|
||||
"features": {
|
||||
"command": false,
|
||||
"console": false
|
||||
|
||||
@@ -333,6 +333,17 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"dynamic_keymap": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"eeprom_max_addr": {"$ref": "./definitions.jsonschema#/unsigned_int"},
|
||||
"layer_count": {
|
||||
"type": "integer",
|
||||
"minimum": 1,
|
||||
"maximum": 32
|
||||
}
|
||||
}
|
||||
},
|
||||
"eeprom": {
|
||||
"properties": {
|
||||
"driver": {"type": "string"},
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
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.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||

|
||||
|
||||
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
|
||||
|
||||
336
keyboards/chickenman/kami65/keyboard.json
Normal file
336
keyboards/chickenman/kami65/keyboard.json
Normal file
@@ -0,0 +1,336 @@
|
||||
{
|
||||
"manufacturer": "Chickenman",
|
||||
"keyboard_name": "Kami65",
|
||||
"maintainer": "MaiTheSan",
|
||||
"bootloader": "stm32-dfu",
|
||||
"diode_direction": "COL2ROW",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true,
|
||||
"rgblight": true
|
||||
},
|
||||
"indicators": {
|
||||
"caps_lock": "B12",
|
||||
"on_state": 0
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["A10", "A0", "A9", "C13", "A1", "A2", "B11", "B10", "B1", "B0", "A7", "A6", "A5", "A4", "C14"],
|
||||
"rows": ["B4", "A15", "A3", "A8", "B14"]
|
||||
},
|
||||
"processor": "STM32F072",
|
||||
"rgblight": {
|
||||
"animations": {
|
||||
"alternating": true,
|
||||
"breathing": true,
|
||||
"christmas": true,
|
||||
"knight": true,
|
||||
"rainbow_mood": true,
|
||||
"rainbow_swirl": true,
|
||||
"snake": true,
|
||||
"static_gradient": true,
|
||||
"twinkle": true
|
||||
},
|
||||
"led_count": 24,
|
||||
"sleep": true
|
||||
},
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"pid": "0x00A1",
|
||||
"vid": "0xC41C"
|
||||
},
|
||||
"ws2812": {
|
||||
"pin": "B15"
|
||||
},
|
||||
"layout_aliases": {
|
||||
"LAYOUT_all": "LAYOUT_65_ansi_blocker_split_bs"
|
||||
},
|
||||
"community_layouts": ["65_ansi_blocker", "65_ansi_blocker_split_bs", "65_ansi_blocker_tsangan", "65_ansi_blocker_tsangan_split_bs"],
|
||||
"layouts": {
|
||||
"LAYOUT_65_ansi_blocker": {
|
||||
"layout": [
|
||||
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"label": "K02", "matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"label": "K03", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "K04", "matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"label": "K05", "matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"label": "K06", "matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"label": "K07", "matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"label": "K08", "matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"label": "K09", "matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"label": "K0A", "matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"label": "K0B", "matrix": [0, 11], "x": 11, "y": 0},
|
||||
{"label": "K0C", "matrix": [0, 12], "x": 12, "y": 0},
|
||||
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
|
||||
{"label": "K0E", "matrix": [0, 14], "x": 15, "y": 0},
|
||||
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
|
||||
{"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
|
||||
{"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
|
||||
{"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
|
||||
{"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
|
||||
{"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
|
||||
{"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
|
||||
{"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
|
||||
{"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
|
||||
{"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
|
||||
{"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
|
||||
{"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
|
||||
{"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
|
||||
{"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
|
||||
{"label": "K1E", "matrix": [1, 14], "x": 15, "y": 1},
|
||||
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
|
||||
{"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
|
||||
{"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
|
||||
{"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
|
||||
{"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
|
||||
{"label": "K2E", "matrix": [2, 14], "x": 15, "y": 2},
|
||||
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
|
||||
{"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
|
||||
{"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
|
||||
{"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
|
||||
{"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
|
||||
{"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
|
||||
{"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
|
||||
{"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
|
||||
{"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
|
||||
{"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
|
||||
{"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
|
||||
{"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
|
||||
{"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
|
||||
{"label": "K3E", "matrix": [3, 14], "x": 15, "y": 3},
|
||||
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
|
||||
{"label": "K41", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
|
||||
{"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
|
||||
{"label": "K46", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
|
||||
{"label": "K4A", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
|
||||
{"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
|
||||
{"label": "K4C", "matrix": [4, 12], "x": 13, "y": 4},
|
||||
{"label": "K4D", "matrix": [4, 13], "x": 14, "y": 4},
|
||||
{"label": "K4E", "matrix": [4, 14], "x": 15, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_65_ansi_blocker_split_bs": {
|
||||
"layout": [
|
||||
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"label": "K02", "matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"label": "K03", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "K04", "matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"label": "K05", "matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"label": "K06", "matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"label": "K07", "matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"label": "K08", "matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"label": "K09", "matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"label": "K0A", "matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"label": "K0B", "matrix": [0, 11], "x": 11, "y": 0},
|
||||
{"label": "K0C", "matrix": [0, 12], "x": 12, "y": 0},
|
||||
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 0},
|
||||
{"label": "K2D", "matrix": [2, 13], "x": 14, "y": 0},
|
||||
{"label": "K0E", "matrix": [0, 14], "x": 15, "y": 0},
|
||||
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
|
||||
{"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
|
||||
{"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
|
||||
{"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
|
||||
{"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
|
||||
{"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
|
||||
{"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
|
||||
{"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
|
||||
{"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
|
||||
{"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
|
||||
{"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
|
||||
{"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
|
||||
{"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
|
||||
{"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
|
||||
{"label": "K1E", "matrix": [1, 14], "x": 15, "y": 1},
|
||||
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
|
||||
{"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
|
||||
{"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
|
||||
{"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
|
||||
{"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
|
||||
{"label": "K2E", "matrix": [2, 14], "x": 15, "y": 2},
|
||||
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
|
||||
{"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
|
||||
{"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
|
||||
{"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
|
||||
{"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
|
||||
{"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
|
||||
{"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
|
||||
{"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
|
||||
{"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
|
||||
{"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
|
||||
{"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
|
||||
{"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
|
||||
{"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
|
||||
{"label": "K3E", "matrix": [3, 14], "x": 15, "y": 3},
|
||||
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
|
||||
{"label": "K41", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
|
||||
{"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
|
||||
{"label": "K46", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
|
||||
{"label": "K4A", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
|
||||
{"label": "K4B", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
|
||||
{"label": "K4C", "matrix": [4, 12], "x": 13, "y": 4},
|
||||
{"label": "K4D", "matrix": [4, 13], "x": 14, "y": 4},
|
||||
{"label": "K4E", "matrix": [4, 14], "x": 15, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_65_ansi_blocker_tsangan": {
|
||||
"layout": [
|
||||
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"label": "K02", "matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"label": "K03", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "K04", "matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"label": "K05", "matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"label": "K06", "matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"label": "K07", "matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"label": "K08", "matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"label": "K09", "matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"label": "K0A", "matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"label": "K0B", "matrix": [0, 11], "x": 11, "y": 0},
|
||||
{"label": "K0C", "matrix": [0, 12], "x": 12, "y": 0},
|
||||
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 0, "w": 2},
|
||||
{"label": "K0E", "matrix": [0, 14], "x": 15, "y": 0},
|
||||
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
|
||||
{"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
|
||||
{"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
|
||||
{"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
|
||||
{"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
|
||||
{"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
|
||||
{"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
|
||||
{"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
|
||||
{"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
|
||||
{"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
|
||||
{"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
|
||||
{"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
|
||||
{"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
|
||||
{"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
|
||||
{"label": "K1E", "matrix": [1, 14], "x": 15, "y": 1},
|
||||
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
|
||||
{"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
|
||||
{"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
|
||||
{"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
|
||||
{"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
|
||||
{"label": "K2E", "matrix": [2, 14], "x": 15, "y": 2},
|
||||
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
|
||||
{"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
|
||||
{"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
|
||||
{"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
|
||||
{"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
|
||||
{"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
|
||||
{"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
|
||||
{"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
|
||||
{"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
|
||||
{"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
|
||||
{"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
|
||||
{"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
|
||||
{"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
|
||||
{"label": "K3E", "matrix": [3, 14], "x": 15, "y": 3},
|
||||
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
|
||||
{"label": "K41", "matrix": [4, 1], "x": 1.5, "y": 4},
|
||||
{"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
|
||||
{"label": "K46", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
|
||||
{"label": "K4B", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
|
||||
{"label": "K4C", "matrix": [4, 12], "x": 13, "y": 4},
|
||||
{"label": "K4D", "matrix": [4, 13], "x": 14, "y": 4},
|
||||
{"label": "K4E", "matrix": [4, 14], "x": 15, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_65_ansi_blocker_tsangan_split_bs": {
|
||||
"layout": [
|
||||
{"label": "K00", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "K01", "matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"label": "K02", "matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"label": "K03", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "K04", "matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"label": "K05", "matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"label": "K06", "matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"label": "K07", "matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"label": "K08", "matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"label": "K09", "matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"label": "K0A", "matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"label": "K0B", "matrix": [0, 11], "x": 11, "y": 0},
|
||||
{"label": "K0C", "matrix": [0, 12], "x": 12, "y": 0},
|
||||
{"label": "K0D", "matrix": [0, 13], "x": 13, "y": 0},
|
||||
{"label": "K0D", "matrix": [2, 13], "x": 14, "y": 0},
|
||||
{"label": "K0E", "matrix": [0, 14], "x": 15, "y": 0},
|
||||
{"label": "K10", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
|
||||
{"label": "K11", "matrix": [1, 1], "x": 1.5, "y": 1},
|
||||
{"label": "K12", "matrix": [1, 2], "x": 2.5, "y": 1},
|
||||
{"label": "K13", "matrix": [1, 3], "x": 3.5, "y": 1},
|
||||
{"label": "K14", "matrix": [1, 4], "x": 4.5, "y": 1},
|
||||
{"label": "K15", "matrix": [1, 5], "x": 5.5, "y": 1},
|
||||
{"label": "K16", "matrix": [1, 6], "x": 6.5, "y": 1},
|
||||
{"label": "K17", "matrix": [1, 7], "x": 7.5, "y": 1},
|
||||
{"label": "K18", "matrix": [1, 8], "x": 8.5, "y": 1},
|
||||
{"label": "K19", "matrix": [1, 9], "x": 9.5, "y": 1},
|
||||
{"label": "K1A", "matrix": [1, 10], "x": 10.5, "y": 1},
|
||||
{"label": "K1B", "matrix": [1, 11], "x": 11.5, "y": 1},
|
||||
{"label": "K1C", "matrix": [1, 12], "x": 12.5, "y": 1},
|
||||
{"label": "K1D", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
|
||||
{"label": "K1E", "matrix": [1, 14], "x": 15, "y": 1},
|
||||
{"label": "K20", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"label": "K21", "matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"label": "K22", "matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"label": "K23", "matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"label": "K24", "matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"label": "K25", "matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"label": "K26", "matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"label": "K27", "matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"label": "K28", "matrix": [2, 8], "x": 8.75, "y": 2},
|
||||
{"label": "K29", "matrix": [2, 9], "x": 9.75, "y": 2},
|
||||
{"label": "K2A", "matrix": [2, 10], "x": 10.75, "y": 2},
|
||||
{"label": "K2B", "matrix": [2, 11], "x": 11.75, "y": 2},
|
||||
{"label": "K2C", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
|
||||
{"label": "K2E", "matrix": [2, 14], "x": 15, "y": 2},
|
||||
{"label": "K30", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
|
||||
{"label": "K32", "matrix": [3, 2], "x": 2.25, "y": 3},
|
||||
{"label": "K33", "matrix": [3, 3], "x": 3.25, "y": 3},
|
||||
{"label": "K34", "matrix": [3, 4], "x": 4.25, "y": 3},
|
||||
{"label": "K35", "matrix": [3, 5], "x": 5.25, "y": 3},
|
||||
{"label": "K36", "matrix": [3, 6], "x": 6.25, "y": 3},
|
||||
{"label": "K37", "matrix": [3, 7], "x": 7.25, "y": 3},
|
||||
{"label": "K38", "matrix": [3, 8], "x": 8.25, "y": 3},
|
||||
{"label": "K39", "matrix": [3, 9], "x": 9.25, "y": 3},
|
||||
{"label": "K3A", "matrix": [3, 10], "x": 10.25, "y": 3},
|
||||
{"label": "K3B", "matrix": [3, 11], "x": 11.25, "y": 3},
|
||||
{"label": "K3C", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
|
||||
{"label": "K3D", "matrix": [3, 13], "x": 14, "y": 3},
|
||||
{"label": "K3E", "matrix": [3, 14], "x": 15, "y": 3},
|
||||
{"label": "K40", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
|
||||
{"label": "K41", "matrix": [4, 1], "x": 1.5, "y": 4},
|
||||
{"label": "K42", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
|
||||
{"label": "K46", "matrix": [4, 6], "x": 4, "y": 4, "w": 7},
|
||||
{"label": "K4B", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
|
||||
{"label": "K4C", "matrix": [4, 12], "x": 13, "y": 4},
|
||||
{"label": "K4D", "matrix": [4, 13], "x": 14, "y": 4},
|
||||
{"label": "K4E", "matrix": [4, 14], "x": 15, "y": 4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
49
keyboards/chickenman/kami65/keymaps/default/keymap.c
Normal file
49
keyboards/chickenman/kami65/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,49 @@
|
||||
// Copyright 2023 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
||||
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│Hom│
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
|
||||
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgU│
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgD│
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │Ctrl│GUI │Alt │ │ Alt│ Fn│ │ ← │ ↓ │ → │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[0] = 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_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(1), KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
|
||||
* │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Del│Del│ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
|
||||
* │ │ │ │ │ │ │Ins│ │ │ │ │PSc│Scr│Pause│ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ │ │ │ │ │ │ │Mut│Vl-│Vl+│ │ │ │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[1] = 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_DEL, UG_TOGG,
|
||||
_______, _______, _______, _______, _______, _______, KC_INS, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, UG_PREV,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, UG_NEXT,
|
||||
_______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
27
keyboards/chickenman/kami65/readme.md
Normal file
27
keyboards/chickenman/kami65/readme.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Kami65
|
||||
|
||||

|
||||
|
||||
A 65% keyboard.
|
||||
|
||||
* Keyboard Maintainer: [Mai The San](https://github.com/maithesan)
|
||||
* Hardware Supported: Kami65 Keyboard
|
||||
* Hardware Availability: [UCSD GB](https://www.instagram.com/p/C1BD0RZsttm/)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make chickenman/kami65:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make chickenman/kami65: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 top left key 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
|
||||
96
keyboards/dj505/picofx/keyboard.json
Normal file
96
keyboards/dj505/picofx/keyboard.json
Normal file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"manufacturer": "dj505",
|
||||
"keyboard_name": "PicoFX",
|
||||
"maintainer": "jjc1138",
|
||||
"bootloader": "rp2040",
|
||||
"bootloader_instructions": "Hold down the BOOTSEL button on the microcontroller when connecting the USB cable",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"extrakey": true,
|
||||
"rgb_matrix": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"direct": [
|
||||
["GP19", null, "GP6", "GP27", null, "GP0"],
|
||||
[null, "GP10", null, null, "GP2", null],
|
||||
["GP21", null, "GP8", "GP17", null, "GP4"],
|
||||
["GP14", "GP15", null, null, null, null]
|
||||
]
|
||||
},
|
||||
"processor": "RP2040",
|
||||
"rgb_matrix": {
|
||||
"animations": {
|
||||
"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_splash": true,
|
||||
"splash": true
|
||||
},
|
||||
"driver": "ws2812",
|
||||
"layout": [
|
||||
{"x": 0, "y": 64, "flags": 2},
|
||||
{"x": 0, "y": 0, "flags": 2},
|
||||
{"x": 112, "y": 0, "flags": 2},
|
||||
{"x": 112, "y": 64, "flags": 2},
|
||||
{"x": 224, "y": 64, "flags": 2},
|
||||
{"x": 224, "y": 0, "flags": 2}
|
||||
],
|
||||
"sleep": true
|
||||
},
|
||||
"url": "https://github.com/dj505/PicoFX",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"pid": "0x4658",
|
||||
"vid": "0xFEED"
|
||||
},
|
||||
"ws2812": {
|
||||
"driver": "vendor",
|
||||
"pin": "GP22"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label": "P1 UL", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "P1 UR", "matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"label": "P2 UL", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "P2 UR", "matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"label": "P1 CN", "matrix": [1, 1], "x": 1, "y": 1},
|
||||
{"label": "P2 CN", "matrix": [1, 4], "x": 4, "y": 1},
|
||||
{"label": "P1 DL", "matrix": [2, 0], "x": 0, "y": 2},
|
||||
{"label": "P1 DR", "matrix": [2, 2], "x": 2, "y": 2},
|
||||
{"label": "P2 DL", "matrix": [2, 3], "x": 3, "y": 2},
|
||||
{"label": "P2 DR", "matrix": [2, 5], "x": 5, "y": 2},
|
||||
{"label": "Service", "matrix": [3, 0], "x": 6.5, "y": 0.5},
|
||||
{"label": "Test", "matrix": [3, 1], "x": 6.5, "y": 1.5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
26
keyboards/dj505/picofx/keymaps/allinone/keymap.json
Normal file
26
keyboards/dj505/picofx/keymaps/allinone/keymap.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"keyboard": "dj505/picofx",
|
||||
"keymap": "allinone",
|
||||
"layout": "LAYOUT",
|
||||
"layers": [
|
||||
[
|
||||
"KC_Q", "KC_E", "KC_TAB", "KC_UP",
|
||||
|
||||
"KC_X", "KC_G",
|
||||
|
||||
"KC_A", "KC_D", "KC_SPC", "KC_DOWN",
|
||||
|
||||
"LT(1,KC_ESC)", "KC_ENT"
|
||||
],
|
||||
|
||||
[
|
||||
"KC_F1", "KC_F2", "KC_F5", "KC_F6",
|
||||
|
||||
"KC_TRNS", "KC_TRNS",
|
||||
|
||||
"KC_F3", "KC_F4", "KC_F7", "KC_F8",
|
||||
|
||||
"KC_TRNS", "QK_BOOT"
|
||||
]
|
||||
]
|
||||
}
|
||||
21
keyboards/dj505/picofx/keymaps/allinone/readme.md
Normal file
21
keyboards/dj505/picofx/keymaps/allinone/readme.md
Normal file
@@ -0,0 +1,21 @@
|
||||
# PicoFX All-in-one Keymap
|
||||
|
||||
The 'allinone' keymap puts most of the buttons that you need for navigating the Pump It Up Rise menus in the main mode. If you configure the game to use those buttons for gameplay as well, then you can play the game and navigate most of the menus without having to switch modes.
|
||||
|
||||
```
|
||||
Q E Tab Up
|
||||
X G
|
||||
A D Space Down
|
||||
|
||||
Service: Esc when tapped, or temporarily activates the mode below when held
|
||||
Test: Enter
|
||||
```
|
||||
|
||||
When Service is held the buttons have these meanings instead:
|
||||
```
|
||||
F1 F2 F5 F6
|
||||
- -
|
||||
F3 F4 F7 F8
|
||||
|
||||
Test: Bootloader mode
|
||||
```
|
||||
16
keyboards/dj505/picofx/keymaps/default/keymap.json
Normal file
16
keyboards/dj505/picofx/keymaps/default/keymap.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"keyboard": "dj505/picofx",
|
||||
"keymap": "default",
|
||||
"layout": "LAYOUT",
|
||||
"layers": [
|
||||
[
|
||||
"KC_Q", "KC_E", "KC_R", "KC_Y",
|
||||
|
||||
"KC_S", "KC_G",
|
||||
|
||||
"KC_Z", "KC_C", "KC_V", "KC_N",
|
||||
|
||||
"KC_ESC", "KC_ENT"
|
||||
]
|
||||
]
|
||||
}
|
||||
12
keyboards/dj505/picofx/keymaps/default/readme.md
Normal file
12
keyboards/dj505/picofx/keymaps/default/readme.md
Normal file
@@ -0,0 +1,12 @@
|
||||
# PicoFX Default Keymap
|
||||
|
||||
The default keymap matches the 'Basic 2' preset in Pump It Up Rise. In the game's options menu, navigate to the keyboard settings and press '2' (on your normal computer keyboard) to apply the matching preset.
|
||||
|
||||
```
|
||||
Q E R Y
|
||||
S G
|
||||
Z C V N
|
||||
|
||||
Service: Escape
|
||||
Test: Enter
|
||||
```
|
||||
36
keyboards/dj505/picofx/keymaps/menumode/keymap.json
Normal file
36
keyboards/dj505/picofx/keymaps/menumode/keymap.json
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"keyboard": "dj505/picofx",
|
||||
"keymap": "default",
|
||||
"layout": "LAYOUT",
|
||||
"layers": [
|
||||
[
|
||||
"KC_Q", "KC_E", "KC_R", "KC_Y",
|
||||
|
||||
"KC_S", "KC_G",
|
||||
|
||||
"KC_Z", "KC_C", "KC_V", "KC_N",
|
||||
|
||||
"MO(2)", "TG(1)"
|
||||
],
|
||||
|
||||
[
|
||||
"KC_Q", "KC_E", "KC_TAB", "KC_UP",
|
||||
|
||||
"KC_ESC", "KC_ENT",
|
||||
|
||||
"KC_LEFT", "KC_RGHT", "KC_SPC", "KC_DOWN",
|
||||
|
||||
"LT(2,KC_F1)", "KC_TRNS"
|
||||
],
|
||||
|
||||
[
|
||||
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
|
||||
|
||||
"KC_TRNS", "KC_TRNS",
|
||||
|
||||
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
|
||||
|
||||
"KC_TRNS", "QK_BOOT"
|
||||
]
|
||||
]
|
||||
}
|
||||
28
keyboards/dj505/picofx/keymaps/menumode/readme.md
Normal file
28
keyboards/dj505/picofx/keymaps/menumode/readme.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# PicoFX Menu Mode Keymap
|
||||
|
||||
The 'menumode' keymap is like the 'default' keymap in that it matches the 'Basic 2' preset in Pump It Up Rise, but it also includes the ability the toggle into a menu mode that provides most of the keys you need to navigate the game's menus.
|
||||
|
||||
In the game's options menu, navigate to the keyboard settings and press '2' (on your normal computer keyboard) to apply the 'Basic 2' preset.
|
||||
|
||||
The keymap in normal mode:
|
||||
```
|
||||
Q E R Y
|
||||
S G
|
||||
Z C V N
|
||||
|
||||
Test: Toggle to menu mode
|
||||
```
|
||||
|
||||
And when in menu mode:
|
||||
```
|
||||
Q E Tab Up
|
||||
Esc Enter
|
||||
Left Right Space Down
|
||||
|
||||
Service: F1
|
||||
Test: Toggle back to game mode
|
||||
```
|
||||
|
||||
It might take a little bit of practice to remember where everything is in menu mode. The rule of thumb is that the layout roughly corresponds to where those controls appear on the game's song selection screen.
|
||||
|
||||
In either mode, holding the Service button and pressing the Test button will put the controller into bootloader mode for installing new firmware versions.
|
||||
34
keyboards/dj505/picofx/readme.md
Normal file
34
keyboards/dj505/picofx/readme.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# dj505/picofx
|
||||
|
||||

|
||||
|
||||
PicoFX: A compact keyboard-style controller for the *Pump It Up* rhythm game series. This firmware is intended for using the controller with the [Pump It Up Rise](https://store.steampowered.com/app/2756930/PUMP_IT_UP_RISE/) home version of the game.
|
||||
|
||||
* Hardware Supported: [PicoFX](https://github.com/dj505/PicoFX)
|
||||
* Keyboard Maintainer: [jjc1138](https://github.com/jjc1138)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make dj505/picofx:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make dj505/picofx: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).
|
||||
|
||||
## Keymaps
|
||||
|
||||
There are three keymaps provided, or you can build your own using the instructions below.
|
||||
|
||||
* [default](keymaps/default/readme.md)
|
||||
* [menumode](keymaps/menumode/readme.md)
|
||||
* [allinone](keymaps/allinone/readme.md)
|
||||
|
||||
### Bootloader
|
||||
|
||||
Put the controller in bootloader mode in one of three ways:
|
||||
|
||||
* **Physical reset button**: Hold down the BOOTSEL button on the microcontroller when connecting the USB cable.
|
||||
* **Bootmagic reset**: If a version of this firmware is already installed, hold down the top-left button on the keyboard when connecting the USB cable.
|
||||
* **Keycode in keymap**: If a version of this firmware is already installed with the 'menumode' or 'allinone' keymap, hold down the Service button and press the Test button. Or press a button mapped to `QK_BOOT` in your own keymap.
|
||||
187
keyboards/dotlen/queue/keyboard.json
Normal file
187
keyboards/dotlen/queue/keyboard.json
Normal file
@@ -0,0 +1,187 @@
|
||||
{
|
||||
"manufacturer": "DotLen",
|
||||
"keyboard_name": "Queue.Len()",
|
||||
"maintainer": "lental",
|
||||
"bootloader": "atmel-dfu",
|
||||
"build": {
|
||||
"lto": true
|
||||
},
|
||||
"diode_direction": "COL2ROW",
|
||||
"encoder": {
|
||||
"rotary": [
|
||||
{"pin_a": "B0", "pin_b": "B7"}
|
||||
]
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"encoder": true,
|
||||
"extrakey": true,
|
||||
"nkro": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7", "F7", "F6", "F5", "F4", "F1", "F0", "E6"],
|
||||
"rows": ["D5", "D3", "D2", "D1", "D0"]
|
||||
},
|
||||
"processor": "atmega32u4",
|
||||
"url": "https://github.com/lental/keyboard-firmware",
|
||||
"usb": {
|
||||
"device_version": "0.0.1",
|
||||
"pid": "0x000A",
|
||||
"vid": "0xFACE"
|
||||
},
|
||||
"layout_aliases": {
|
||||
"LAYOUT_all": "LAYOUT_triple_space"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT_standard_space": {
|
||||
"layout": [
|
||||
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
|
||||
{"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
|
||||
{"label": "backspace", "matrix": [0, 13], "x": 13, "y": 0},
|
||||
{"label": "split", "matrix": [0, 14], "x": 14, "y": 0},
|
||||
{"label": "rotary", "matrix": [2, 14], "x": 15, "y": 0, "encoder":0},
|
||||
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
|
||||
{"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
|
||||
{"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
|
||||
{"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
|
||||
{"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
|
||||
{"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
|
||||
{"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
|
||||
{"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
|
||||
{"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
|
||||
{"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
|
||||
{"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
|
||||
{"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
|
||||
{"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
|
||||
{"label": "Bksp", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
|
||||
{"label": "pgup", "matrix": [1, 14], "x": 15, "y": 1},
|
||||
{"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
|
||||
{"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
|
||||
{"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
|
||||
{"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
|
||||
{"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
|
||||
{"label": "pgup", "matrix": [2, 13], "x": 15, "y": 2},
|
||||
{"label": "split", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
|
||||
{"label": "Shift", "matrix": [3, 1], "x": 1.25, "y": 3, "w": 1},
|
||||
{"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
|
||||
{"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
|
||||
{"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
|
||||
{"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
|
||||
{"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
|
||||
{"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
|
||||
{"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
|
||||
{"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
|
||||
{"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
|
||||
{"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
|
||||
{"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
|
||||
{"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
|
||||
{"label": "pgup", "matrix": [3, 14], "x": 15, "y": 3},
|
||||
{"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
|
||||
{"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
|
||||
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
|
||||
{"matrix": [4, 3], "x": 3.75, "y": 4, "w": 6.25},
|
||||
{"label": "Alt", "matrix": [4, 6], "x": 10, "y": 4},
|
||||
{"label": "Win", "matrix": [4, 7], "x": 11, "y": 4},
|
||||
{"label": "Ctrl", "matrix": [4, 8], "x": 12, "y": 4},
|
||||
{"label": "left", "matrix": [4, 12], "x": 13, "y": 4},
|
||||
{"label": "down", "matrix": [4, 13], "x": 14, "y": 4},
|
||||
{"label": "right", "matrix": [4, 14], "x": 15, "y": 4}
|
||||
]
|
||||
},
|
||||
"LAYOUT_triple_space": {
|
||||
"layout": [
|
||||
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
|
||||
{"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
|
||||
{"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
|
||||
{"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
|
||||
{"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
|
||||
{"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
|
||||
{"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
|
||||
{"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
|
||||
{"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
|
||||
{"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
|
||||
{"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
|
||||
{"label": "backspace", "matrix": [0, 13], "x": 13, "y": 0},
|
||||
{"label": "split", "matrix": [0, 14], "x": 14, "y": 0},
|
||||
{"label": "rotary", "matrix": [2, 14], "x": 15, "y": 0, "encoder":0},
|
||||
{"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
|
||||
{"label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1},
|
||||
{"label": "W", "matrix": [1, 2], "x": 2.5, "y": 1},
|
||||
{"label": "E", "matrix": [1, 3], "x": 3.5, "y": 1},
|
||||
{"label": "R", "matrix": [1, 4], "x": 4.5, "y": 1},
|
||||
{"label": "T", "matrix": [1, 5], "x": 5.5, "y": 1},
|
||||
{"label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1},
|
||||
{"label": "U", "matrix": [1, 7], "x": 7.5, "y": 1},
|
||||
{"label": "I", "matrix": [1, 8], "x": 8.5, "y": 1},
|
||||
{"label": "O", "matrix": [1, 9], "x": 9.5, "y": 1},
|
||||
{"label": "P", "matrix": [1, 10], "x": 10.5, "y": 1},
|
||||
{"label": "{", "matrix": [1, 11], "x": 11.5, "y": 1},
|
||||
{"label": "}", "matrix": [1, 12], "x": 12.5, "y": 1},
|
||||
{"label": "Bksp", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
|
||||
{"label": "pgup", "matrix": [1, 14], "x": 15, "y": 1},
|
||||
{"label": "Caps Lock", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
|
||||
{"label": "A", "matrix": [2, 1], "x": 1.75, "y": 2},
|
||||
{"label": "S", "matrix": [2, 2], "x": 2.75, "y": 2},
|
||||
{"label": "D", "matrix": [2, 3], "x": 3.75, "y": 2},
|
||||
{"label": "F", "matrix": [2, 4], "x": 4.75, "y": 2},
|
||||
{"label": "G", "matrix": [2, 5], "x": 5.75, "y": 2},
|
||||
{"label": "H", "matrix": [2, 6], "x": 6.75, "y": 2},
|
||||
{"label": "J", "matrix": [2, 7], "x": 7.75, "y": 2},
|
||||
{"label": "K", "matrix": [2, 8], "x": 8.75, "y": 2},
|
||||
{"label": "L", "matrix": [2, 9], "x": 9.75, "y": 2},
|
||||
{"label": ":", "matrix": [2, 10], "x": 10.75, "y": 2},
|
||||
{"label": "\"", "matrix": [2, 11], "x": 11.75, "y": 2},
|
||||
{"label": "Enter", "matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
|
||||
{"label": "pgup", "matrix": [2, 13], "x": 15, "y": 2},
|
||||
{"label": "split", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
|
||||
{"label": "Shift", "matrix": [3, 1], "x": 1.25, "y": 3, "w": 1},
|
||||
{"label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3},
|
||||
{"label": "X", "matrix": [3, 3], "x": 3.25, "y": 3},
|
||||
{"label": "C", "matrix": [3, 4], "x": 4.25, "y": 3},
|
||||
{"label": "V", "matrix": [3, 5], "x": 5.25, "y": 3},
|
||||
{"label": "B", "matrix": [3, 6], "x": 6.25, "y": 3},
|
||||
{"label": "N", "matrix": [3, 7], "x": 7.25, "y": 3},
|
||||
{"label": "M", "matrix": [3, 8], "x": 8.25, "y": 3},
|
||||
{"label": "<", "matrix": [3, 9], "x": 9.25, "y": 3},
|
||||
{"label": ">", "matrix": [3, 10], "x": 10.25, "y": 3},
|
||||
{"label": "?", "matrix": [3, 11], "x": 11.25, "y": 3},
|
||||
{"label": "Shift", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
|
||||
{"label": "Up", "matrix": [3, 13], "x": 14, "y": 3},
|
||||
{"label": "pgup", "matrix": [3, 14], "x": 15, "y": 3},
|
||||
{"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
|
||||
{"label": "Win", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
|
||||
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
|
||||
{"matrix": [4, 3], "x": 3.75, "y": 4, "w": 2.25},
|
||||
{"matrix": [4, 4], "x": 6, "y": 4, "w": 1.25},
|
||||
{"matrix": [4, 5], "x": 7.25, "y": 4, "w": 2.75},
|
||||
{"label": "Alt", "matrix": [4, 6], "x": 10, "y": 4},
|
||||
{"label": "Win", "matrix": [4, 7], "x": 11, "y": 4},
|
||||
{"label": "Ctrl", "matrix": [4, 8], "x": 12, "y": 4},
|
||||
{"label": "left", "matrix": [4, 12], "x": 13, "y": 4},
|
||||
{"label": "down", "matrix": [4, 13], "x": 14, "y": 4},
|
||||
{"label": "right", "matrix": [4, 14], "x": 15, "y": 4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
41
keyboards/dotlen/queue/keymaps/default/keymap.c
Normal file
41
keyboards/dotlen/queue/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,41 @@
|
||||
// Copyright 2025 lental
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layers {
|
||||
_BL,
|
||||
_FL,
|
||||
_AL
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_BL] = LAYOUT_all(
|
||||
KC_GRAVE, 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_MUTE,
|
||||
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, MO(_FL), KC_Z , KC_X, KC_C , KC_V , KC_B, KC_N , KC_M , KC_COMM, KC_DOT, KC_SLASH, KC_RSFT , KC_UP, KC_DEL,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC,KC_SPC, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
|
||||
|
||||
[_FL] = LAYOUT_all(
|
||||
KC_TRNS, 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_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(_AL),
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ),
|
||||
|
||||
[_AL] = LAYOUT_all(
|
||||
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, KC_TRNS )
|
||||
|
||||
};
|
||||
|
||||
#ifdef ENCODER_MAP_ENABLE
|
||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
|
||||
[_BL] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
|
||||
[_FL] = { ENCODER_CCW_CW(_______, _______)},
|
||||
[_AL] = { ENCODER_CCW_CW(_______, _______)}
|
||||
};
|
||||
#endif
|
||||
28
keyboards/dotlen/queue/readme.md
Normal file
28
keyboards/dotlen/queue/readme.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Queue.len()
|
||||
|
||||

|
||||
|
||||
A 65% keyboard with multiple layout support.
|
||||
|
||||
* Keyboard Maintainer: [Lental](https://github.com/lental)
|
||||
* Hardware Supported: Custom PCB
|
||||
* Hardware Availability: Private Group Buy
|
||||
* Keyboard Layout Editor [Link](https://www.keyboard-layout-editor.com/#/gists/d54fc38f606ce3e990a88044e9b71858)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make dotlen/queue:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make dotlen/queue: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
|
||||
@@ -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": {
|
||||
|
||||
@@ -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, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"mousekey": true
|
||||
},
|
||||
"qmk": {
|
||||
"locking": {
|
||||
@@ -25,6 +25,11 @@
|
||||
"diode_direction": "COL2ROW",
|
||||
"split": {
|
||||
"enabled": true,
|
||||
"matrix_pins": {
|
||||
"right": {
|
||||
"cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B6"]
|
||||
}
|
||||
},
|
||||
"serial": {
|
||||
"pin": "D0"
|
||||
}
|
||||
@@ -42,14 +47,14 @@
|
||||
{"matrix": [0, 6], "x": 6, "y": 0},
|
||||
{"matrix": [0, 7], "x": 7, "y": 0},
|
||||
|
||||
{"matrix": [6, 7], "x": 17, "y": 0.5},
|
||||
{"matrix": [6, 6], "x": 16, "y": 0.5},
|
||||
{"matrix": [6, 5], "x": 15, "y": 0.5},
|
||||
{"matrix": [6, 4], "x": 14, "y": 0},
|
||||
{"matrix": [6, 3], "x": 13, "y": 0},
|
||||
{"matrix": [6, 2], "x": 12, "y": 0},
|
||||
{"matrix": [6, 1], "x": 11, "y": 0},
|
||||
{"matrix": [6, 0], "x": 10, "y": 0},
|
||||
{"matrix": [6, 1], "x": 11, "y": 0},
|
||||
{"matrix": [6, 2], "x": 12, "y": 0},
|
||||
{"matrix": [6, 3], "x": 13, "y": 0},
|
||||
{"matrix": [6, 4], "x": 14, "y": 0},
|
||||
{"matrix": [6, 5], "x": 15, "y": 0.5},
|
||||
{"matrix": [6, 6], "x": 16, "y": 0.5},
|
||||
{"matrix": [6, 7], "x": 17, "y": 0.5},
|
||||
|
||||
{"matrix": [1, 0], "x": 0, "y": 1.5},
|
||||
{"matrix": [1, 1], "x": 1, "y": 1.5},
|
||||
@@ -60,14 +65,14 @@
|
||||
{"matrix": [1, 6], "x": 6, "y": 1},
|
||||
{"matrix": [1, 7], "x": 7, "y": 1},
|
||||
|
||||
{"matrix": [7, 7], "x": 17, "y": 1.5},
|
||||
{"matrix": [7, 6], "x": 16, "y": 1.5},
|
||||
{"matrix": [7, 5], "x": 15, "y": 1.5},
|
||||
{"matrix": [7, 4], "x": 14, "y": 1},
|
||||
{"matrix": [7, 3], "x": 13, "y": 1},
|
||||
{"matrix": [7, 2], "x": 12, "y": 1},
|
||||
{"matrix": [7, 1], "x": 11, "y": 1},
|
||||
{"matrix": [7, 0], "x": 10, "y": 1},
|
||||
{"matrix": [7, 1], "x": 11, "y": 1},
|
||||
{"matrix": [7, 2], "x": 12, "y": 1},
|
||||
{"matrix": [7, 3], "x": 13, "y": 1},
|
||||
{"matrix": [7, 4], "x": 14, "y": 1},
|
||||
{"matrix": [7, 5], "x": 15, "y": 1.5},
|
||||
{"matrix": [7, 6], "x": 16, "y": 1.5},
|
||||
{"matrix": [7, 7], "x": 17, "y": 1.5},
|
||||
|
||||
{"matrix": [2, 0], "x": 0, "y": 2.5},
|
||||
{"matrix": [2, 1], "x": 1, "y": 2.5},
|
||||
@@ -78,14 +83,14 @@
|
||||
{"matrix": [2, 6], "x": 6, "y": 2},
|
||||
{"matrix": [2, 7], "x": 7, "y": 2},
|
||||
|
||||
{"matrix": [8, 7], "x": 17, "y": 2.5},
|
||||
{"matrix": [8, 6], "x": 16, "y": 2.5},
|
||||
{"matrix": [8, 5], "x": 15, "y": 2.5},
|
||||
{"matrix": [8, 4], "x": 14, "y": 2},
|
||||
{"matrix": [8, 3], "x": 13, "y": 2},
|
||||
{"matrix": [8, 2], "x": 12, "y": 2},
|
||||
{"matrix": [8, 1], "x": 11, "y": 2},
|
||||
{"matrix": [8, 0], "x": 10, "y": 2},
|
||||
{"matrix": [8, 1], "x": 11, "y": 2},
|
||||
{"matrix": [8, 2], "x": 12, "y": 2},
|
||||
{"matrix": [8, 3], "x": 13, "y": 2},
|
||||
{"matrix": [8, 4], "x": 14, "y": 2},
|
||||
{"matrix": [8, 5], "x": 15, "y": 2.5},
|
||||
{"matrix": [8, 6], "x": 16, "y": 2.5},
|
||||
{"matrix": [8, 7], "x": 17, "y": 2.5},
|
||||
|
||||
{"matrix": [3, 0], "x": 0, "y": 3.5},
|
||||
{"matrix": [3, 1], "x": 1, "y": 3.5},
|
||||
@@ -95,41 +100,41 @@
|
||||
{"matrix": [3, 5], "x": 5, "y": 3},
|
||||
{"matrix": [3, 6], "x": 6, "y": 3},
|
||||
|
||||
{"matrix": [9, 6], "x": 17, "y": 3.5},
|
||||
{"matrix": [9, 5], "x": 16, "y": 3.5},
|
||||
{"matrix": [9, 4], "x": 15, "y": 3.5},
|
||||
{"matrix": [9, 3], "x": 14, "y": 3},
|
||||
{"matrix": [9, 2], "x": 13, "y": 3},
|
||||
{"matrix": [9, 1], "x": 12, "y": 3},
|
||||
{"matrix": [9, 0], "x": 11, "y": 3},
|
||||
{"matrix": [9, 1], "x": 11, "y": 3},
|
||||
{"matrix": [9, 2], "x": 12, "y": 3},
|
||||
{"matrix": [9, 3], "x": 13, "y": 3},
|
||||
{"matrix": [9, 4], "x": 14, "y": 3},
|
||||
{"matrix": [9, 5], "x": 15, "y": 3.5},
|
||||
{"matrix": [9, 6], "x": 16, "y": 3.5},
|
||||
{"matrix": [9, 7], "x": 17, "y": 3.5},
|
||||
|
||||
{"matrix": [4, 1], "x": 1, "y": 4.5},
|
||||
{"matrix": [4, 2], "x": 2, "y": 4.5},
|
||||
{"matrix": [4, 3], "x": 3, "y": 4},
|
||||
{"matrix": [4, 4], "x": 4, "y": 4},
|
||||
|
||||
{"matrix": [10, 4], "x": 14, "y": 4},
|
||||
{"matrix": [10, 3], "x": 13, "y": 4},
|
||||
{"matrix": [10, 2], "x": 12, "y": 5},
|
||||
{"matrix": [10, 1], "x": 11, "y": 5},
|
||||
{"matrix": [10, 4], "x": 14, "y": 4},
|
||||
{"matrix": [10, 5], "x": 15, "y": 4.5},
|
||||
{"matrix": [10, 6], "x": 16, "y": 4.5},
|
||||
|
||||
{"matrix": [4, 5], "x": 4.5, "y": 5},
|
||||
{"matrix": [4, 6], "x": 5.5, "y": 5},
|
||||
|
||||
{"matrix": [10, 6], "x": 14.5, "y": 4.5},
|
||||
{"matrix": [10, 5], "x": 15.5, "y": 4.5},
|
||||
{"matrix": [10, 1], "x": 11.5, "y": 5},
|
||||
{"matrix": [10, 2], "x": 12.5, "y": 5},
|
||||
|
||||
{"matrix": [5, 5], "x": 5, "y": 6},
|
||||
{"matrix": [5, 6], "x": 6, "y": 6},
|
||||
|
||||
{"matrix": [11, 6], "x": 12, "y": 6},
|
||||
{"matrix": [11, 5], "x": 11, "y": 6},
|
||||
{"matrix": [11, 1], "x": 11, "y": 6},
|
||||
{"matrix": [11, 2], "x": 12, "y": 6},
|
||||
|
||||
{"matrix": [5, 3], "x": 5, "y": 7},
|
||||
{"matrix": [5, 4], "x": 6, "y": 7},
|
||||
|
||||
{"matrix": [11, 4], "x": 12, "y": 7},
|
||||
{"matrix": [11, 3], "x": 11, "y": 7}
|
||||
{"matrix": [11, 3], "x": 11, "y": 7},
|
||||
{"matrix": [11, 4], "x": 12, "y": 7}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
268
keyboards/handwired/fabiclawz/alpha_fs/keyboard.json
Normal file
268
keyboards/handwired/fabiclawz/alpha_fs/keyboard.json
Normal file
@@ -0,0 +1,268 @@
|
||||
{
|
||||
"manufacturer": "FabiClawZ",
|
||||
"keyboard_name": "handwired/fabiclawz/alpha_fs",
|
||||
"maintainer": "FFS2309",
|
||||
"bootloader": "rp2040",
|
||||
"diode_direction": "COL2ROW",
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"extrakey": true,
|
||||
"mousekey": true,
|
||||
"nkro": true,
|
||||
"rgb_matrix": true
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10"],
|
||||
"rows": ["GP14", "GP15", "GP16", "GP17", "GP18", "GP19", "GP20", "GP21", "GP22", "GP26"]
|
||||
},
|
||||
"processor": "RP2040",
|
||||
"rgb_matrix": {
|
||||
"animations": {
|
||||
"breathing": true,
|
||||
"cycle_all": true,
|
||||
"cycle_left_right": true,
|
||||
"multisplash": true,
|
||||
"solid_reactive_simple": true,
|
||||
"typing_heatmap": true
|
||||
},
|
||||
"driver": "ws2812",
|
||||
"layout": [
|
||||
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 1], "x": 13, "y": 0, "flags": 1},
|
||||
{"matrix": [9, 1], "x": 24, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 2], "x": 34, "y": 0, "flags": 1},
|
||||
{"matrix": [9, 2], "x": 45, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 3], "x": 57, "y": 0, "flags": 1},
|
||||
{"matrix": [9, 3], "x": 68, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 4], "x": 78, "y": 0, "flags": 1},
|
||||
{"matrix": [9, 4], "x": 89, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 5], "x": 102, "y": 0, "flags": 1},
|
||||
{"matrix": [9, 5], "x": 112, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 6], "x": 123, "y": 0, "flags": 1},
|
||||
{"matrix": [9, 6], "x": 133, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 7], "x": 146, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 8], "x": 159, "y": 0, "flags": 1},
|
||||
{"matrix": [7, 8], "x": 169, "y": 0, "flags": 1},
|
||||
{"matrix": [8, 8], "x": 180, "y": 0, "flags": 1},
|
||||
{"matrix": [9, 8], "x": 193, "y": 0, "flags": 1},
|
||||
{"matrix": [0, 10], "x": 203, "y": 0, "flags": 1},
|
||||
{"matrix": [1, 10], "x": 214, "y": 0, "flags": 1},
|
||||
{"matrix": [2, 10], "x": 224, "y": 0, "flags": 1},
|
||||
{"matrix": [1, 0], "x": 0, "y": 15, "flags": 1},
|
||||
{"matrix": [1, 1], "x": 10, "y": 15, "flags": 4},
|
||||
{"matrix": [8, 1], "x": 21, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 2], "x": 31, "y": 15, "flags": 4},
|
||||
{"matrix": [8, 2], "x": 42, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 3], "x": 52, "y": 15, "flags": 4},
|
||||
{"matrix": [8, 3], "x": 63, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 4], "x": 73, "y": 15, "flags": 4},
|
||||
{"matrix": [8, 4], "x": 83, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 5], "x": 94, "y": 15, "flags": 4},
|
||||
{"matrix": [8, 5], "x": 104, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 6], "x": 115, "y": 15, "flags": 4},
|
||||
{"matrix": [8, 6], "x": 125, "y": 15, "flags": 4},
|
||||
{"matrix": [1, 7], "x": 141, "y": 15, "flags": 1},
|
||||
{"matrix": [1, 8], "x": 159, "y": 15, "flags": 1},
|
||||
{"matrix": [6, 8], "x": 169, "y": 15, "flags": 1},
|
||||
{"matrix": [5, 8], "x": 180, "y": 15, "flags": 1},
|
||||
{"matrix": [3, 10], "x": 193, "y": 15, "flags": 8},
|
||||
{"matrix": [4, 10], "x": 203, "y": 15, "flags": 4},
|
||||
{"matrix": [5, 10], "x": 214, "y": 15, "flags": 4},
|
||||
{"matrix": [6, 10], "x": 224, "y": 15, "flags": 4},
|
||||
{"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
|
||||
{"matrix": [2, 1], "x": 16, "y": 27, "flags": 4},
|
||||
{"matrix": [7, 1], "x": 26, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 2], "x": 36, "y": 27, "flags": 4},
|
||||
{"matrix": [7, 2], "x": 47, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 3], "x": 57, "y": 27, "flags": 4},
|
||||
{"matrix": [7, 3], "x": 68, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 4], "x": 78, "y": 27, "flags": 4},
|
||||
{"matrix": [7, 4], "x": 89, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 5], "x": 99, "y": 27, "flags": 4},
|
||||
{"matrix": [7, 5], "x": 109, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 6], "x": 120, "y": 27, "flags": 4},
|
||||
{"matrix": [7, 6], "x": 130, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 7], "x": 147, "y": 20, "flags": 1},
|
||||
{"matrix": [2, 8], "x": 159, "y": 27, "flags": 1},
|
||||
{"matrix": [3, 8], "x": 169, "y": 27, "flags": 1},
|
||||
{"matrix": [4, 8], "x": 180, "y": 27, "flags": 1},
|
||||
{"matrix": [0, 9], "x": 193, "y": 27, "flags": 4},
|
||||
{"matrix": [1, 9], "x": 203, "y": 27, "flags": 4},
|
||||
{"matrix": [2, 9], "x": 214, "y": 27, "flags": 4},
|
||||
{"matrix": [7, 10], "x": 224, "y": 34, "flags": 4},
|
||||
{"matrix": [3, 0], "x": 4, "y": 40, "flags": 8},
|
||||
{"matrix": [3, 1], "x": 18, "y": 40, "flags": 4},
|
||||
{"matrix": [6, 1], "x": 29, "y": 40, "flags": 4},
|
||||
{"matrix": [3, 2], "x": 39, "y": 40, "flags": 4},
|
||||
{"matrix": [6, 2], "x": 50, "y": 40, "flags": 4},
|
||||
{"matrix": [3, 3], "x": 60, "y": 40, "flags": 4},
|
||||
{"matrix": [6, 3], "x": 70, "y": 40, "flags": 4},
|
||||
{"matrix": [3, 4], "x": 81, "y": 40, "flags": 4},
|
||||
{"matrix": [6, 4], "x": 91, "y": 40, "flags": 4},
|
||||
{"matrix": [3, 5], "x": 102, "y": 40, "flags": 4},
|
||||
{"matrix": [6, 5], "x": 112, "y": 40, "flags": 4},
|
||||
{"matrix": [3, 6], "x": 123, "y": 40, "flags": 4},
|
||||
{"matrix": [6, 6], "x": 133, "y": 40, "flags": 4},
|
||||
{"matrix": [5, 9], "x": 193, "y": 40, "flags": 4},
|
||||
{"matrix": [4, 9], "x": 203, "y": 40, "flags": 4},
|
||||
{"matrix": [3, 9], "x": 214, "y": 40, "flags": 4},
|
||||
{"matrix": [4, 0], "x": 1, "y": 52, "flags": 1},
|
||||
{"matrix": [4, 1], "x": 13, "y": 52, "flags": 4},
|
||||
{"matrix": [5, 1], "x": 23, "y": 52, "flags": 4},
|
||||
{"matrix": [4, 2], "x": 34, "y": 52, "flags": 4},
|
||||
{"matrix": [5, 2], "x": 44, "y": 52, "flags": 4},
|
||||
{"matrix": [4, 3], "x": 55, "y": 52, "flags": 4},
|
||||
{"matrix": [5, 3], "x": 65, "y": 52, "flags": 4},
|
||||
{"matrix": [4, 4], "x": 76, "y": 52, "flags": 4},
|
||||
{"matrix": [5, 4], "x": 86, "y": 52, "flags": 4},
|
||||
{"matrix": [4, 5], "x": 69, "y": 52, "flags": 4},
|
||||
{"matrix": [5, 5], "x": 107, "y": 52, "flags": 4},
|
||||
{"matrix": [4, 6], "x": 117, "y": 52, "flags": 4},
|
||||
{"matrix": [5, 6], "x": 137, "y": 52, "flags": 1},
|
||||
{"matrix": [3, 7], "x": 169, "y": 52, "flags": 1},
|
||||
{"matrix": [6, 9], "x": 193, "y": 52, "flags": 4},
|
||||
{"matrix": [7, 9], "x": 203, "y": 52, "flags": 4},
|
||||
{"matrix": [8, 9], "x": 214, "y": 52, "flags": 4},
|
||||
{"matrix": [8, 10], "x": 224, "y": 58, "flags": 1},
|
||||
{"matrix": [5, 0], "x": 1, "y": 64, "flags": 1},
|
||||
{"matrix": [6, 0], "x": 14, "y": 64, "flags": 1},
|
||||
{"matrix": [7, 0], "x": 27, "y": 64, "flags": 1},
|
||||
{"matrix": [8, 0], "x": 66, "y": 64, "flags": 4},
|
||||
{"matrix": [9, 0], "x": 105, "y": 64, "flags": 1},
|
||||
{"matrix": [9, 7], "x": 118, "y": 64, "flags": 1},
|
||||
{"matrix": [8, 7], "x": 131, "y": 64, "flags": 1},
|
||||
{"matrix": [7, 7], "x": 145, "y": 64, "flags": 1},
|
||||
{"matrix": [6, 7], "x": 159, "y": 64, "flags": 1},
|
||||
{"matrix": [5, 7], "x": 169, "y": 64, "flags": 1},
|
||||
{"matrix": [4, 7], "x": 180, "y": 64, "flags": 1},
|
||||
{"matrix": [9, 9], "x": 198, "y": 64, "flags": 4},
|
||||
{"matrix": [9, 10], "x": 214, "y": 64, "flags": 1}
|
||||
]
|
||||
},
|
||||
"url": "https://github.com/FFS2309/alpha_fs_keyboard",
|
||||
"usb": {
|
||||
"device_version": "1.0.0",
|
||||
"pid": "0x0001",
|
||||
"vid": "0x4643"
|
||||
},
|
||||
"ws2812": {
|
||||
"driver": "vendor",
|
||||
"pin": "GP11"
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
|
||||
{"label": "F1", "matrix": [0, 1], "x": 1.25, "y": 0},
|
||||
{"label": "F2", "matrix": [9, 1], "x": 2.25, "y": 0},
|
||||
{"label": "F3", "matrix": [0, 2], "x": 3.25, "y": 0},
|
||||
{"label": "F4", "matrix": [9, 2], "x": 4.25, "y": 0},
|
||||
{"label": "F5", "matrix": [0, 3], "x": 5.5, "y": 0},
|
||||
{"label": "F6", "matrix": [9, 3], "x": 6.5, "y": 0},
|
||||
{"label": "F7", "matrix": [0, 4], "x": 7.5, "y": 0},
|
||||
{"label": "F8", "matrix": [9, 4], "x": 8.5, "y": 0},
|
||||
{"label": "F9", "matrix": [0, 5], "x": 9.75, "y": 0},
|
||||
{"label": "F10", "matrix": [9, 5], "x": 10.75, "y": 0},
|
||||
{"label": "F11", "matrix": [0, 6], "x": 11.75, "y": 0},
|
||||
{"label": "F12", "matrix": [9, 6], "x": 12.75, "y": 0},
|
||||
{"label": "Extra1", "matrix": [0, 7], "x": 14, "y": 0},
|
||||
{"label": "PrtSc", "matrix": [0, 8], "x": 15.25, "y": 0},
|
||||
{"label": "Scroll Lock", "matrix": [7, 8], "x": 16.25, "y": 0},
|
||||
{"label": "Pause", "matrix": [8, 8], "x": 17.25, "y": 0},
|
||||
{"label": "Extra2", "matrix": [9, 8], "x": 18.5, "y": 0},
|
||||
{"label": "Extra3", "matrix": [0, 10], "x": 19.5, "y": 0},
|
||||
{"label": "Extra4", "matrix": [1, 10], "x": 20.5, "y": 0},
|
||||
{"label": "Extra5", "matrix": [2, 10], "x": 21.5, "y": 0},
|
||||
{"label": "^", "matrix": [1, 0], "x": 0, "y": 1.5},
|
||||
{"label": "1", "matrix": [1, 1], "x": 1, "y": 1.5},
|
||||
{"label": "2", "matrix": [8, 1], "x": 2, "y": 1.5},
|
||||
{"label": "3", "matrix": [1, 2], "x": 3, "y": 1.5},
|
||||
{"label": "4", "matrix": [8, 2], "x": 4, "y": 1.5},
|
||||
{"label": "5", "matrix": [1, 3], "x": 5, "y": 1.5},
|
||||
{"label": "6", "matrix": [8, 3], "x": 6, "y": 1.5},
|
||||
{"label": "7", "matrix": [1, 4], "x": 7, "y": 1.5},
|
||||
{"label": "8", "matrix": [8, 4], "x": 8, "y": 1.5},
|
||||
{"label": "9", "matrix": [1, 5], "x": 9, "y": 1.5},
|
||||
{"label": "0", "matrix": [8, 5], "x": 10, "y": 1.5},
|
||||
{"label": "\u00df", "matrix": [1, 6], "x": 11, "y": 1.5},
|
||||
{"label": "\u00b4", "matrix": [8, 6], "x": 12, "y": 1.5},
|
||||
{"label": "Backspace", "matrix": [1, 7], "x": 13, "y": 1.5, "w": 2},
|
||||
{"label": "Insert", "matrix": [1, 8], "x": 15.25, "y": 1.5},
|
||||
{"label": "Home", "matrix": [6, 8], "x": 16.25, "y": 1.5},
|
||||
{"label": "PgUp", "matrix": [5, 8], "x": 17.25, "y": 1.5},
|
||||
{"label": "Num Lock", "matrix": [3, 10], "x": 18.5, "y": 1.5},
|
||||
{"label": "/", "matrix": [4, 10], "x": 19.5, "y": 1.5},
|
||||
{"label": "*", "matrix": [5, 10], "x": 20.5, "y": 1.5},
|
||||
{"label": "-", "matrix": [6, 10], "x": 21.5, "y": 1.5},
|
||||
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
|
||||
{"label": "Q", "matrix": [2, 1], "x": 1.5, "y": 2.5},
|
||||
{"label": "W", "matrix": [7, 1], "x": 2.5, "y": 2.5},
|
||||
{"label": "E", "matrix": [2, 2], "x": 3.5, "y": 2.5},
|
||||
{"label": "R", "matrix": [7, 2], "x": 4.5, "y": 2.5},
|
||||
{"label": "T", "matrix": [2, 3], "x": 5.5, "y": 2.5},
|
||||
{"label": "Y", "matrix": [7, 3], "x": 6.5, "y": 2.5},
|
||||
{"label": "U", "matrix": [2, 4], "x": 7.5, "y": 2.5},
|
||||
{"label": "I", "matrix": [7, 4], "x": 8.5, "y": 2.5},
|
||||
{"label": "O", "matrix": [2, 5], "x": 9.5, "y": 2.5},
|
||||
{"label": "P", "matrix": [7, 5], "x": 10.5, "y": 2.5},
|
||||
{"label": "{", "matrix": [2, 6], "x": 11.5, "y": 2.5},
|
||||
{"label": "}", "matrix": [7, 6], "x": 12.5, "y": 2.5},
|
||||
{"label": "Enter", "matrix": [2, 7], "x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
|
||||
{"label": "Delete", "matrix": [2, 8], "x": 15.25, "y": 2.5},
|
||||
{"label": "End", "matrix": [3, 8], "x": 16.25, "y": 2.5},
|
||||
{"label": "PgDn", "matrix": [4, 8], "x": 17.25, "y": 2.5},
|
||||
{"label": "7", "matrix": [0, 9], "x": 18.5, "y": 2.5},
|
||||
{"label": "8", "matrix": [1, 9], "x": 19.5, "y": 2.5},
|
||||
{"label": "9", "matrix": [2, 9], "x": 20.5, "y": 2.5},
|
||||
{"label": "+", "matrix": [7, 10], "x": 21.5, "y": 2.5, "h": 2},
|
||||
{"label": "Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
|
||||
{"label": "A", "matrix": [3, 1], "x": 1.75, "y": 3.5},
|
||||
{"label": "S", "matrix": [6, 1], "x": 2.75, "y": 3.5},
|
||||
{"label": "D", "matrix": [3, 2], "x": 3.75, "y": 3.5},
|
||||
{"label": "F", "matrix": [6, 2], "x": 4.75, "y": 3.5},
|
||||
{"label": "G", "matrix": [3, 3], "x": 5.75, "y": 3.5},
|
||||
{"label": "H", "matrix": [6, 3], "x": 6.75, "y": 3.5},
|
||||
{"label": "J", "matrix": [3, 4], "x": 7.75, "y": 3.5},
|
||||
{"label": "K", "matrix": [6, 4], "x": 8.75, "y": 3.5},
|
||||
{"label": "L", "matrix": [3, 5], "x": 9.75, "y": 3.5},
|
||||
{"label": ":", "matrix": [6, 5], "x": 10.75, "y": 3.5},
|
||||
{"label": "@", "matrix": [3, 6], "x": 11.75, "y": 3.5},
|
||||
{"label": "~", "matrix": [6, 6], "x": 12.75, "y": 3.5},
|
||||
{"label": "4", "matrix": [5, 9], "x": 18.5, "y": 3.5},
|
||||
{"label": "5", "matrix": [4, 9], "x": 19.5, "y": 3.5},
|
||||
{"label": "6", "matrix": [3, 9], "x": 20.5, "y": 3.5},
|
||||
{"label": "Shift", "matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
|
||||
{"label": "|", "matrix": [4, 1], "x": 1.25, "y": 4.5},
|
||||
{"label": "Z", "matrix": [5, 1], "x": 2.25, "y": 4.5},
|
||||
{"label": "X", "matrix": [4, 2], "x": 3.25, "y": 4.5},
|
||||
{"label": "C", "matrix": [5, 2], "x": 4.25, "y": 4.5},
|
||||
{"label": "V", "matrix": [4, 3], "x": 5.25, "y": 4.5},
|
||||
{"label": "B", "matrix": [5, 3], "x": 6.25, "y": 4.5},
|
||||
{"label": "N", "matrix": [4, 4], "x": 7.25, "y": 4.5},
|
||||
{"label": "M", "matrix": [5, 4], "x": 8.25, "y": 4.5},
|
||||
{"label": "<", "matrix": [4, 5], "x": 9.25, "y": 4.5},
|
||||
{"label": ">", "matrix": [5, 5], "x": 10.25, "y": 4.5},
|
||||
{"label": "?", "matrix": [4, 6], "x": 11.25, "y": 4.5},
|
||||
{"label": "Shift", "matrix": [5, 6], "x": 12.25, "y": 4.5, "w": 2.75},
|
||||
{"label": "\u2191", "matrix": [3, 7], "x": 16.25, "y": 4.5},
|
||||
{"label": "1", "matrix": [6, 9], "x": 18.5, "y": 4.5},
|
||||
{"label": "2", "matrix": [7, 9], "x": 19.5, "y": 4.5},
|
||||
{"label": "3", "matrix": [8, 9], "x": 20.5, "y": 4.5},
|
||||
{"label": "Enter", "matrix": [8, 10], "x": 21.5, "y": 4.5, "h": 2},
|
||||
{"label": "Ctrl", "matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
|
||||
{"label": "Win", "matrix": [6, 0], "x": 1.25, "y": 5.5, "w": 1.25},
|
||||
{"label": "Alt", "matrix": [7, 0], "x": 2.5, "y": 5.5, "w": 1.25},
|
||||
{"matrix": [8, 0], "x": 3.75, "y": 5.5, "w": 6.25},
|
||||
{"label": "AltGr", "matrix": [9, 0], "x": 10, "y": 5.5, "w": 1.25},
|
||||
{"label": "Win", "matrix": [9, 7], "x": 11.25, "y": 5.5, "w": 1.25},
|
||||
{"label": "Menu", "matrix": [8, 7], "x": 12.5, "y": 5.5, "w": 1.25},
|
||||
{"label": "Ctrl", "matrix": [7, 7], "x": 13.75, "y": 5.5, "w": 1.25},
|
||||
{"label": "\u2190", "matrix": [6, 7], "x": 15.25, "y": 5.5},
|
||||
{"label": "\u2193", "matrix": [5, 7], "x": 16.25, "y": 5.5},
|
||||
{"label": "\u2192", "matrix": [4, 7], "x": 17.25, "y": 5.5},
|
||||
{"label": "0", "matrix": [9, 9], "x": 18.5, "y": 5.5, "w": 2},
|
||||
{"label": ".", "matrix": [9, 10], "x": 20.5, "y": 5.5}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
// Copyright 2025 Fabian Felix Selbach (@FFS2309)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[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, RM_TOGG, KC_PSCR, KC_SCRL, KC_PAUS, RM_NEXT, RM_PREV, RM_VALU, RM_VALD,
|
||||
|
||||
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_INS, KC_HOME, KC_PGUP, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
|
||||
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_ENT, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
|
||||
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_P4, KC_P5, KC_P6,
|
||||
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_P1, KC_P2, KC_P3, KC_PENT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
|
||||
)
|
||||
};
|
||||
28
keyboards/handwired/fabiclawz/alpha_fs/readme.md
Normal file
28
keyboards/handwired/fabiclawz/alpha_fs/readme.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# handwired/fabiclawz/alpha_fs
|
||||
|
||||

|
||||
|
||||
My first keyboard with custom PCB, originally designed for the Milk-V duo series of RISC-V MCUs with pin compatibility with the Raspberry Pi Pico used in this
|
||||
case for QMK.
|
||||
|
||||
* Keyboard Maintainer: [Fabian Felix Selbach](https://github.com/FFS2309)
|
||||
* Hardware Supported: Raspberry Pi Pico, Custom PCB
|
||||
* Hardware Availability: [Hardware design files](https://github.com/FFS2309/alpha_fs_keyboard)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make handwired/fabiclawz/alpha_fs:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make handwired/fabiclawz/alpha_fs: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**: Briefly press the button on the back of the Pi Pico if available
|
||||
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
|
||||
17
keyboards/keebio/foldkb/rev2_1/config.h
Normal file
17
keyboards/keebio/foldkb/rev2_1/config.h
Normal file
@@ -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
|
||||
10
keyboards/keebio/foldkb/rev2_1/halconf.h
Normal file
10
keyboards/keebio/foldkb/rev2_1/halconf.h
Normal file
@@ -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 <halconf.h>
|
||||
279
keyboards/keebio/foldkb/rev2_1/keyboard.json
Normal file
279
keyboards/keebio/foldkb/rev2_1/keyboard.json
Normal file
@@ -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}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
21
keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c
Normal file
21
keyboards/keebio/foldkb/rev2_1/keymaps/default/keymap.c
Normal file
@@ -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, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
14
keyboards/keebio/foldkb/rev2_1/mcuconf.h
Normal file
14
keyboards/keebio/foldkb/rev2_1/mcuconf.h
Normal file
@@ -0,0 +1,14 @@
|
||||
// Copyright 2025 Keebio (@keebio)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include_next <mcuconf.h>
|
||||
|
||||
/* 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
|
||||
29
keyboards/keebio/foldkb/rev2_1/rev2_1.c
Normal file
29
keyboards/keebio/foldkb/rev2_1/rev2_1.c
Normal file
@@ -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;
|
||||
}
|
||||
@@ -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 |-------| |-------| + | - | = | [ | ] | \ |
|
||||
* `-----------------------------------------/ / \ \-----------------------------------------'
|
||||
|
||||
@@ -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 |------|--------| |-------|-------| + | - | = | [ | ] | \ |
|
||||
* `--------------------------------------------| / \ |----------------------------------------------'
|
||||
|
||||
33
keyboards/ploopyco/nano_2/config.h
Normal file
33
keyboards/ploopyco/nano_2/config.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/* Copyright 2024 Colin Lam (Ploopy Corporation)
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define UNUSABLE_PINS \
|
||||
{ GP1, GP3, GP4, GP6, GP8, GP10, GP14, GP16, GP18, GP20, GP22, GP24, GP25, GP26, GP27, GP28, GP29 }
|
||||
|
||||
#define MOUSE_EXTENDED_REPORT
|
||||
|
||||
#define PLOOPY_DRAGSCROLL_MOMENTARY
|
||||
#define PLOOPY_DRAGSCROLL_DIVISOR_H 64.0
|
||||
#define PLOOPY_DRAGSCROLL_DIVISOR_V 64.0
|
||||
|
||||
#define PAW3222_CS_PIN GP5
|
||||
#define PAW3222_MOTION_PIN GP9
|
||||
#define PAW3222_SPI_DIVISOR 64
|
||||
#define SPI_SCK_PIN GP2
|
||||
#define SPI_MISO_PIN GP0
|
||||
#define SPI_MOSI_PIN GP7
|
||||
27
keyboards/ploopyco/nano_2/info.json
Normal file
27
keyboards/ploopyco/nano_2/info.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"keyboard_name": "Ploopy Nano 2 Trackball",
|
||||
"manufacturer": "Ploopy Corporation",
|
||||
"url": "www.ploopy.co",
|
||||
"maintainer": "ploopyco",
|
||||
"usb": {
|
||||
"vid": "0x5043",
|
||||
"pid": "0x4CE5",
|
||||
"device_version": "0.0.1",
|
||||
"max_power": 100
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"extrakey": true,
|
||||
"nkro": true,
|
||||
"pointing_device": true
|
||||
},
|
||||
"processor": "RP2040",
|
||||
"bootloader": "rp2040",
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"x": 0, "y": 0, "matrix": [0, 0]}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
23
keyboards/ploopyco/nano_2/keymaps/default/keymap.c
Normal file
23
keyboards/ploopyco/nano_2/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,23 @@
|
||||
/* Copyright 2021 Colin Lam (Ploopy Corporation)
|
||||
* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <drashna@live.com>
|
||||
* Copyright 2019 Sunjun Kim
|
||||
* Copyright 2019 Hiroyuki Okada
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT( DRAG_SCROLL )
|
||||
};
|
||||
38
keyboards/ploopyco/nano_2/readme.md
Normal file
38
keyboards/ploopyco/nano_2/readme.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# Ploopy Nano 2 Trackball
|
||||
|
||||

|
||||
|
||||
It's a DIY, QMK Powered Trackball...Nano!
|
||||
|
||||
* Maintainer: [PloopyCo](https://github.com/ploopyco)
|
||||
* Key contributors: [Drashna Jael're](https://github.com/drashna/), [Germ](https://github.com/germ/)
|
||||
* Hardware Supported: RP2040
|
||||
* Hardware Availability: [Store](https://ploopy.co/nano-2), [GitHub](https://github.com/ploopyco)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make ploopyco/nano_2/rev2_003:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make ploopyco/nano_2/rev2_003:default:flash
|
||||
|
||||
# Building Firmware
|
||||
|
||||
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).
|
||||
|
||||
# Triggering the Bootloader
|
||||
|
||||
[Do you see those two golden holes in the board](https://ploopy.co/wp-content/uploads/2023/11/boot.jpg)? Those are called **vias**. They act exactly like a switch does. Right now, that switch is OFF. However, if you take a paperclip or a pair of metal tweezers and touch those two vias, the two vias will form an electrical connection. Effectively, that switch turns ON.
|
||||
|
||||
Go ahead and connect the two vias, and then (while the vias are connected) plug in the Nano 2 board into your computer.
|
||||
|
||||
The computer should recognise that a mass storage device was just plugged in. Once this is done, you should be able to drag and drop files onto the Nano 2 board, as if the board was a USB drive. Feel free to remove the tweezers or paperclip at this point.
|
||||
|
||||
If you want to upload a new firmware file (a ".uf2" file, like "nano-2-awesome-version.uf2" or something), just drag it into the folder, and it'll automatically install on the Nano 2 board and restart itself, in normal operating mode. You're done!
|
||||
|
||||
**TIP**: If your firmware is in some kind of strange state and uploading new firmware isn't fixing it, try uploading [a flash nuke](https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython/circuitpython#flash-resetting-uf2-3083182) to the Nano 2 board before flashing the new firmware. It wipes the memory of the Nano 2 board completely clean, which can help clear a few types of errors.
|
||||
|
||||
# Customizing your Ploopy Nano 2
|
||||
|
||||
You can find customziation options [here](../readme.md).
|
||||
7
keyboards/ploopyco/nano_2/rev2_003/keyboard.json
Normal file
7
keyboards/ploopyco/nano_2/rev2_003/keyboard.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"matrix_pins": {
|
||||
"direct": [
|
||||
["GP17"]
|
||||
]
|
||||
}
|
||||
}
|
||||
1
keyboards/ploopyco/nano_2/rev2_003/readme.md
Normal file
1
keyboards/ploopyco/nano_2/rev2_003/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
See the main readme for more details. This is just here for when future revisions of the board are released.
|
||||
1
keyboards/ploopyco/nano_2/rules.mk
Normal file
1
keyboards/ploopyco/nano_2/rules.mk
Normal file
@@ -0,0 +1 @@
|
||||
POINTING_DEVICE_DRIVER = paw3222
|
||||
@@ -34,7 +34,7 @@
|
||||
},
|
||||
"usb": {
|
||||
"device_version": "0.0.1",
|
||||
"pid": "0x5336",
|
||||
"pid": "0x3633",
|
||||
"vid": "0x5453"
|
||||
},
|
||||
"ws2812": {
|
||||
|
||||
20
keyboards/wily/info.json
Normal file
20
keyboards/wily/info.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manufacturer": "KKC",
|
||||
"maintainer": "Gondolindrim",
|
||||
"usb": {
|
||||
"vid": "0x5750",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"features": {
|
||||
"bootmagic": true,
|
||||
"mousekey": true,
|
||||
"extrakey": true,
|
||||
"nkro": true
|
||||
},
|
||||
"build": {
|
||||
"lto": true
|
||||
},
|
||||
"diode_direction": "COL2ROW",
|
||||
"processor": "STM32F411",
|
||||
"bootloader": "stm32-dfu"
|
||||
}
|
||||
26
keyboards/wily/readme.md
Normal file
26
keyboards/wily/readme.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# KKC Wily
|
||||
|
||||
The Wily is a 65% keyboard by Keyote Key Company.
|
||||
|
||||
* Keyboard Maintainer: [gondolindrim](https://github.com/gondolindrim)
|
||||
* Hardware Supported: three PCB variants (solderable, hotswap with Tsangan bottom row, hotswap with default bottom row), both based on STM32F072
|
||||
* Hardware Availability: not yet available for purchase as of november 2025.
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make wily/<version>:default
|
||||
|
||||
Where `<version>` can be either `wily_s` , `wily_h625` or `wily_h700`. Flashing example for this keyboard:
|
||||
|
||||
make wily/<version>:default:flash
|
||||
|
||||
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
|
||||
|
||||
## Bootloader
|
||||
|
||||
Enter the bootloader in 3 ways:
|
||||
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Escape) and plug in the keyboard
|
||||
* **Physical reset button**: press and hold the button on the back of the PCB for five seconds
|
||||
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
|
||||
|
||||
90
keyboards/wily/wily_h625/keyboard.json
Normal file
90
keyboards/wily/wily_h625/keyboard.json
Normal file
@@ -0,0 +1,90 @@
|
||||
{
|
||||
"keyboard_name": "Keyote Wily-H625",
|
||||
"usb": {
|
||||
"pid": "0x5053",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["A15", "B10", "C15", "C14", "C13", "B1", "B0", "A7", "A6", "A5", "B14", "B13", "B12", "A4", "A3"],
|
||||
"rows": ["A0", "B8", "B3", "B5", "B9"]
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"matrix":[0,0], "x":0, "y":0},
|
||||
{"matrix":[0,1], "x":1, "y":0},
|
||||
{"matrix":[0,2], "x":2, "y":0},
|
||||
{"matrix":[0,3], "x":3, "y":0},
|
||||
{"matrix":[0,4], "x":4, "y":0},
|
||||
{"matrix":[0,5], "x":5, "y":0},
|
||||
{"matrix":[0,6], "x":6, "y":0},
|
||||
{"matrix":[0,7], "x":7, "y":0},
|
||||
{"matrix":[0,8], "x":8, "y":0},
|
||||
{"matrix":[0,9], "x":9, "y":0},
|
||||
{"matrix":[0,10], "x":10, "y":0},
|
||||
{"matrix":[0,11], "x":11, "y":0},
|
||||
{"matrix":[0,12], "x":12, "y":0},
|
||||
{"matrix":[0,13], "x":13, "y":0},
|
||||
{"matrix":[0,14], "x":14, "y":0},
|
||||
{"matrix":[1,14], "x":15, "y":0},
|
||||
|
||||
{"matrix":[1,0], "x":0, "y":1, "w":1.5},
|
||||
{"matrix":[1,1], "x":1.5, "y":1},
|
||||
{"matrix":[1,2], "x":2.5, "y":1},
|
||||
{"matrix":[1,3], "x":3.5, "y":1},
|
||||
{"matrix":[1,4], "x":4.5, "y":1},
|
||||
{"matrix":[1,5], "x":5.5, "y":1},
|
||||
{"matrix":[1,6], "x":6.5, "y":1},
|
||||
{"matrix":[1,7], "x":7.5, "y":1},
|
||||
{"matrix":[1,8], "x":8.5, "y":1},
|
||||
{"matrix":[1,9], "x":9.5, "y":1},
|
||||
{"matrix":[1,10], "x":10.5, "y":1},
|
||||
{"matrix":[1,11], "x":11.5, "y":1},
|
||||
{"matrix":[1,12], "x":12.5, "y":1},
|
||||
{"matrix":[1,13], "x":13.5, "y":1, "w":1.5},
|
||||
{"matrix":[2,14], "x":15 , "y":1},
|
||||
|
||||
{"matrix":[2,0], "x":0 , "y":2},
|
||||
{"matrix":[2,1], "x":1.75 , "y":2},
|
||||
{"matrix":[2,2], "x":2.75 , "y":2},
|
||||
{"matrix":[2,3], "x":3.75, "y":2},
|
||||
{"matrix":[2,4], "x":4.75, "y":2},
|
||||
{"matrix":[2,5], "x":5.75, "y":2},
|
||||
{"matrix":[2,6], "x":6.75, "y":2},
|
||||
{"matrix":[2,7], "x":7.75, "y":2},
|
||||
{"matrix":[2,8], "x":8.75, "y":2},
|
||||
{"matrix":[2,9], "x":9.75, "y":2},
|
||||
{"matrix":[2,10], "x":10.75, "y":2},
|
||||
{"matrix":[2,11], "x":11.75, "y":2},
|
||||
{"matrix":[2,12], "x":12.75, "y":2, "w":2.25},
|
||||
{"matrix":[2,13], "x":15 , "y":2},
|
||||
|
||||
{"matrix":[3,0], "x":0 , "y":3, "w":2.25},
|
||||
{"matrix":[3,2], "x":2.25, "y":3},
|
||||
{"matrix":[3,3], "x":3.25, "y":3},
|
||||
{"matrix":[3,4], "x":4.25, "y":3},
|
||||
{"matrix":[3,5], "x":5.25, "y":3},
|
||||
{"matrix":[3,6], "x":6.25, "y":3},
|
||||
{"matrix":[3,7], "x":7.25, "y":3},
|
||||
{"matrix":[3,8], "x":8.25, "y":3},
|
||||
{"matrix":[3,9], "x":9.25, "y":3},
|
||||
{"matrix":[3,10], "x":10.25 , "y":3},
|
||||
{"matrix":[3,11], "x":11.25, "y":3},
|
||||
{"matrix":[3,12], "x":12.25, "y":3, "w":1.75},
|
||||
{"matrix":[3,13], "x":14, "y":3},
|
||||
{"matrix":[3,14], "x":15, "y":3},
|
||||
|
||||
{"matrix":[4,0], "x":0 , "y":4, "w":1.25},
|
||||
{"matrix":[4,1], "x":1.25, "y":4, "w":1.25},
|
||||
{"matrix":[4,2], "x":2.5 , "y":4, "w":1.25},
|
||||
{"matrix":[4,6], "x":3.75, "y":4, "w":6.25},
|
||||
{"matrix":[4,8], "x":10, "y":4},
|
||||
{"matrix":[4,9], "x":11, "y":4},
|
||||
{"matrix":[4,10], "x":12, "y":4},
|
||||
{"matrix":[4,12], "x":13, "y":4},
|
||||
{"matrix":[4,13], "x":14, "y":4},
|
||||
{"matrix":[4,14], "x":15, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
34
keyboards/wily/wily_h625/keymaps/default/keymap.c
Normal file
34
keyboards/wily/wily_h625/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2025 Gondolindrim
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
#define LT1GUI LT(1, KC_RGUI)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT( /* Base */
|
||||
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_DEL ,
|
||||
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
|
||||
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_END ,
|
||||
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS ,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, LT1GUI , KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
};
|
||||
89
keyboards/wily/wily_h700/keyboard.json
Normal file
89
keyboards/wily/wily_h700/keyboard.json
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
"keyboard_name": "Keyote Wily-H700",
|
||||
"usb": {
|
||||
"pid": "0x5052",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["A15", "B10", "C15", "C14", "C13", "B1", "B0", "A7", "A6", "A5", "B14", "B13", "B12", "A4", "A3"],
|
||||
"rows": ["A0", "B8", "B3", "B5", "B9"]
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"matrix":[0,0], "x":0, "y":0},
|
||||
{"matrix":[0,1], "x":1, "y":0},
|
||||
{"matrix":[0,2], "x":2, "y":0},
|
||||
{"matrix":[0,3], "x":3, "y":0},
|
||||
{"matrix":[0,4], "x":4, "y":0},
|
||||
{"matrix":[0,5], "x":5, "y":0},
|
||||
{"matrix":[0,6], "x":6, "y":0},
|
||||
{"matrix":[0,7], "x":7, "y":0},
|
||||
{"matrix":[0,8], "x":8, "y":0},
|
||||
{"matrix":[0,9], "x":9, "y":0},
|
||||
{"matrix":[0,10], "x":10, "y":0},
|
||||
{"matrix":[0,11], "x":11, "y":0},
|
||||
{"matrix":[0,12], "x":12, "y":0},
|
||||
{"matrix":[0,13], "x":13, "y":0},
|
||||
{"matrix":[0,14], "x":14, "y":0},
|
||||
{"matrix":[1,14], "x":15, "y":0},
|
||||
|
||||
{"matrix":[1,0], "x":0, "y":1, "w":1.5},
|
||||
{"matrix":[1,1], "x":1.5, "y":1},
|
||||
{"matrix":[1,2], "x":2.5, "y":1},
|
||||
{"matrix":[1,3], "x":3.5, "y":1},
|
||||
{"matrix":[1,4], "x":4.5, "y":1},
|
||||
{"matrix":[1,5], "x":5.5, "y":1},
|
||||
{"matrix":[1,6], "x":6.5, "y":1},
|
||||
{"matrix":[1,7], "x":7.5, "y":1},
|
||||
{"matrix":[1,8], "x":8.5, "y":1},
|
||||
{"matrix":[1,9], "x":9.5, "y":1},
|
||||
{"matrix":[1,10], "x":10.5, "y":1},
|
||||
{"matrix":[1,11], "x":11.5, "y":1},
|
||||
{"matrix":[1,12], "x":12.5, "y":1},
|
||||
{"matrix":[1,13], "x":13.5, "y":1, "w":1.5},
|
||||
{"matrix":[2,14], "x":15 , "y":1},
|
||||
|
||||
{"matrix":[2,0], "x":0 , "y":2},
|
||||
{"matrix":[2,1], "x":1.75 , "y":2},
|
||||
{"matrix":[2,2], "x":2.75 , "y":2},
|
||||
{"matrix":[2,3], "x":3.75, "y":2},
|
||||
{"matrix":[2,4], "x":4.75, "y":2},
|
||||
{"matrix":[2,5], "x":5.75, "y":2},
|
||||
{"matrix":[2,6], "x":6.75, "y":2},
|
||||
{"matrix":[2,7], "x":7.75, "y":2},
|
||||
{"matrix":[2,8], "x":8.75, "y":2},
|
||||
{"matrix":[2,9], "x":9.75, "y":2},
|
||||
{"matrix":[2,10], "x":10.75, "y":2},
|
||||
{"matrix":[2,11], "x":11.75, "y":2},
|
||||
{"matrix":[2,12], "x":12.75, "y":2, "w":2.25},
|
||||
{"matrix":[2,13], "x":15 , "y":2},
|
||||
|
||||
{"matrix":[3,0], "x":0 , "y":3, "w":2.25},
|
||||
{"matrix":[3,2], "x":2.25, "y":3},
|
||||
{"matrix":[3,3], "x":3.25, "y":3},
|
||||
{"matrix":[3,4], "x":4.25, "y":3},
|
||||
{"matrix":[3,5], "x":5.25, "y":3},
|
||||
{"matrix":[3,6], "x":6.25, "y":3},
|
||||
{"matrix":[3,7], "x":7.25, "y":3},
|
||||
{"matrix":[3,8], "x":8.25, "y":3},
|
||||
{"matrix":[3,9], "x":9.25, "y":3},
|
||||
{"matrix":[3,10], "x":10.25 , "y":3},
|
||||
{"matrix":[3,11], "x":11.25, "y":3},
|
||||
{"matrix":[3,12], "x":12.25, "y":3, "w":1.75},
|
||||
{"matrix":[3,13], "x":14, "y":3},
|
||||
{"matrix":[3,14], "x":15, "y":3},
|
||||
|
||||
{"matrix":[4,0], "x":0 , "y":4, "w":1.5},
|
||||
{"matrix":[4,1], "x":1, "y":4},
|
||||
{"matrix":[4,2], "x":2.5 , "y":4, "w":1.5},
|
||||
{"matrix":[4,6], "x":4, "y":4, "w":7},
|
||||
{"matrix":[4,9], "x":11, "y":4},
|
||||
{"matrix":[4,10], "x":12, "y":4},
|
||||
{"matrix":[4,12], "x":13, "y":4},
|
||||
{"matrix":[4,13], "x":14, "y":4},
|
||||
{"matrix":[4,14], "x":15, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
34
keyboards/wily/wily_h700/keymaps/default/keymap.c
Normal file
34
keyboards/wily/wily_h700/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2025 Gondolindrim
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
#define LT1GUI LT(1, KC_RGUI)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT( /* Base */
|
||||
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_DEL ,
|
||||
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
|
||||
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , KC_END ,
|
||||
KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS ,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , LT1GUI , KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
};
|
||||
21
keyboards/wily/wily_s/config.h
Normal file
21
keyboards/wily/wily_s/config.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* Copyright 2025 Gondolindrim
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define BACKLIGHT_PWM_DRIVER PWMD3
|
||||
#define BACKLIGHT_PWM_CHANNEL 4
|
||||
#define BACKLIGHT_PWM_PAL_MOPDE 2
|
||||
21
keyboards/wily/wily_s/halconf.h
Normal file
21
keyboards/wily/wily_s/halconf.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/* Copyright 2025 Gondolindrim
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define HAL_USE_PWM TRUE
|
||||
|
||||
#include_next <halconf.h>
|
||||
100
keyboards/wily/wily_s/keyboard.json
Normal file
100
keyboards/wily/wily_s/keyboard.json
Normal file
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"keyboard_name": "Keyote Wily-S",
|
||||
"usb": {
|
||||
"pid": "0x5051",
|
||||
"device_version": "0.0.1"
|
||||
},
|
||||
"matrix_pins": {
|
||||
"cols": ["A15", "B10", "C15", "C14", "C13", "B1", "B0", "A7", "A6", "A5", "B14", "B13", "B12", "A4", "A3"],
|
||||
"rows": ["A0", "B8", "B3", "B5", "B9"]
|
||||
},
|
||||
"features": {
|
||||
"backlight": true
|
||||
},
|
||||
"backlight": {
|
||||
"pin": "B4",
|
||||
"levels": 20,
|
||||
"as_caps_lock": true
|
||||
},
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"matrix":[0,0], "x":0, "y":0},
|
||||
{"matrix":[0,1], "x":1, "y":0},
|
||||
{"matrix":[0,2], "x":2, "y":0},
|
||||
{"matrix":[0,3], "x":3, "y":0},
|
||||
{"matrix":[0,4], "x":4, "y":0},
|
||||
{"matrix":[0,5], "x":5, "y":0},
|
||||
{"matrix":[0,6], "x":6, "y":0},
|
||||
{"matrix":[0,7], "x":7, "y":0},
|
||||
{"matrix":[0,8], "x":8, "y":0},
|
||||
{"matrix":[0,9], "x":9, "y":0},
|
||||
{"matrix":[0,10], "x":10, "y":0},
|
||||
{"matrix":[0,11], "x":11, "y":0},
|
||||
{"matrix":[0,12], "x":12, "y":0},
|
||||
{"matrix":[0,13], "x":13, "y":0},
|
||||
{"matrix":[0,14], "x":14, "y":0},
|
||||
{"matrix":[1,14], "x":15, "y":0},
|
||||
|
||||
{"matrix":[1,0], "x":0, "y":1, "w":1.5},
|
||||
{"matrix":[1,1], "x":1.5, "y":1},
|
||||
{"matrix":[1,2], "x":2.5, "y":1},
|
||||
{"matrix":[1,3], "x":3.5, "y":1},
|
||||
{"matrix":[1,4], "x":4.5, "y":1},
|
||||
{"matrix":[1,5], "x":5.5, "y":1},
|
||||
{"matrix":[1,6], "x":6.5, "y":1},
|
||||
{"matrix":[1,7], "x":7.5, "y":1},
|
||||
{"matrix":[1,8], "x":8.5, "y":1},
|
||||
{"matrix":[1,9], "x":9.5, "y":1},
|
||||
{"matrix":[1,10], "x":10.5, "y":1},
|
||||
{"matrix":[1,11], "x":11.5, "y":1},
|
||||
{"matrix":[1,12], "x":12.5, "y":1},
|
||||
{"matrix":[1,13], "x":13.5, "y":1, "w":1.5},
|
||||
{"matrix":[2,14], "x":15 , "y":1},
|
||||
|
||||
{"matrix":[2,0], "x":0 , "y":2},
|
||||
{"matrix":[2,1], "x":1.75 , "y":2},
|
||||
{"matrix":[2,2], "x":2.75 , "y":2},
|
||||
{"matrix":[2,3], "x":3.75, "y":2},
|
||||
{"matrix":[2,4], "x":4.75, "y":2},
|
||||
{"matrix":[2,5], "x":5.75, "y":2},
|
||||
{"matrix":[2,6], "x":6.75, "y":2},
|
||||
{"matrix":[2,7], "x":7.75, "y":2},
|
||||
{"matrix":[2,8], "x":8.75, "y":2},
|
||||
{"matrix":[2,9], "x":9.75, "y":2},
|
||||
{"matrix":[2,10], "x":10.75, "y":2},
|
||||
{"matrix":[2,11], "x":11.75, "y":2},
|
||||
{"matrix":[4,11], "x":12.75, "y":2},
|
||||
{"matrix":[2,12], "x":13.75, "y":2, "w":1.25},
|
||||
{"matrix":[2,13], "x":15 , "y":2},
|
||||
|
||||
{"matrix":[3,0], "x":0 , "y":3, "w":1.25},
|
||||
{"matrix":[3,1], "x":1.25, "y":3},
|
||||
{"matrix":[3,2], "x":2.25, "y":3},
|
||||
{"matrix":[3,3], "x":3.25, "y":3},
|
||||
{"matrix":[3,4], "x":4.25, "y":3},
|
||||
{"matrix":[3,5], "x":5.25, "y":3},
|
||||
{"matrix":[3,6], "x":6.25, "y":3},
|
||||
{"matrix":[3,7], "x":7.25, "y":3},
|
||||
{"matrix":[3,8], "x":8.25, "y":3},
|
||||
{"matrix":[3,9], "x":9.25, "y":3},
|
||||
{"matrix":[3,10], "x":10.25 , "y":3},
|
||||
{"matrix":[3,11], "x":11.25, "y":3},
|
||||
{"matrix":[3,12], "x":12.25, "y":3, "w":1.75},
|
||||
{"matrix":[3,13], "x":14, "y":3},
|
||||
{"matrix":[3,14], "x":15, "y":3},
|
||||
|
||||
{"matrix":[4,0], "x":0 , "y":4, "w":1.25},
|
||||
{"matrix":[4,1], "x":1.25, "y":4, "w":1.25},
|
||||
{"matrix":[4,2], "x":2.5 , "y":4, "w":1.25},
|
||||
{"matrix":[4,6], "x":3.75, "y":4, "w":6.25},
|
||||
{"matrix":[4,8], "x":10, "y":4},
|
||||
{"matrix":[4,9], "x":11, "y":4},
|
||||
{"matrix":[4,10], "x":12, "y":4},
|
||||
{"matrix":[4,12], "x":13, "y":4},
|
||||
{"matrix":[4,13], "x":14, "y":4},
|
||||
{"matrix":[4,14], "x":15, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
34
keyboards/wily/wily_s/keymaps/default/keymap.c
Normal file
34
keyboards/wily/wily_s/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,34 @@
|
||||
/* Copyright 2025 Gondolindrim
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
#define LT1GUI LT(1, KC_RGUI)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT( /* Base */
|
||||
QK_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_DEL ,
|
||||
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
|
||||
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT , KC_END ,
|
||||
KC_LSFT, KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS ,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, LT1GUI , KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
|
||||
)
|
||||
};
|
||||
22
keyboards/wily/wily_s/mcuconf.h
Normal file
22
keyboards/wily/wily_s/mcuconf.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/* Copyright 2025 Gondolindrim
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include_next <mcuconf.h>
|
||||
|
||||
#undef STM32_PWM_USE_TIM3
|
||||
#define STM32_PWM_USE_TIM3 TRUE
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2025 QMK
|
||||
// Copyright 2026 QMK
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
/*******************************************************************************
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user