1
0

Compare commits

...

25 Commits

Author SHA1 Message Date
Joel Challis
54e8fad959 Ignore merge commits on bootstrap testing PRs (#25884) 2025-12-19 02:23:29 +00:00
Joel Challis
2c847b0350 Consistently install branch specific dependencies in CI (#25874) 2025-12-15 00:21:06 +00:00
dependabot[bot]
e1c869b8da Bump actions/download-artifact from 6 to 7 (#25873)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-12 21:16:52 +00:00
dependabot[bot]
9e0118172f Bump actions/upload-artifact from 5 to 6 (#25872)
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-12 20:11:19 +00:00
Joel Challis
4f9582da26 Install branch specific dependencies as part of bootstrap testing (#25871) 2025-12-12 18:30:46 +00:00
Joshua Diamond
2e68ddc826 Fix broken compilation when OS_DETECTION_DEBUG_ENABLE is defined (#25869)
Fix include in os_detection (broken in https://github.com/qmk/qmk_firmware/pull/24356)
2025-12-12 18:17:42 +00:00
dependabot[bot]
c1fedab457 Bump peter-evans/create-pull-request from 7 to 8 (#25868)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7 to 8.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7...v8)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 19:12:17 +00:00
dependabot[bot]
2929448605 Bump JamesIves/github-pages-deploy-action from 4.7.5 to 4.7.6 (#25867)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.5 to 4.7.6.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.5...v4.7.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-10 19:11:25 +00:00
dependabot[bot]
b39661de96 Bump JamesIves/github-pages-deploy-action from 4.7.4 to 4.7.5 (#25865)
Bumps [JamesIves/github-pages-deploy-action](https://github.com/jamesives/github-pages-deploy-action) from 4.7.4 to 4.7.5.
- [Release notes](https://github.com/jamesives/github-pages-deploy-action/releases)
- [Commits](https://github.com/jamesives/github-pages-deploy-action/compare/v4.7.4...v4.7.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-09 19:16:07 +00:00
dependabot[bot]
ff75bce86a Bump actions/github-script from 6 to 8 (#25866)
Bumps [actions/github-script](https://github.com/actions/github-script) from 6 to 8.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v6...v8)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-09 19:15:23 +00:00
Sắn
0881e0867b Add support for Kami65 PCB (#24604)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2025-12-08 20:06:24 -08:00
Philip
e6e66a9f2e Update dactyl_manuform 5x8 keyboard.json (#24778) 2025-12-08 19:33:02 -08:00
lental
e2d19eda57 Add queue.len() keyboard (#24823)
Co-authored-by: Joel Challis <git@zvecr.com>
2025-12-08 19:30:39 -08:00
Joel Challis
73a6496516 Trigger develop docs rebuild on push (#25863) 2025-12-09 00:21:25 +00:00
Joel Challis
c8f6e6a936 Revert "Trigger develop docs rebuild on push" (#25862)
Revert "Trigger develop docs rebuild on push (#25860)"

This reverts commit a86322e4a7.
2025-12-08 22:55:58 +00:00
Joel Challis
a86322e4a7 Trigger develop docs rebuild on push (#25860) 2025-12-08 22:26:14 +00:00
ploopyco
505e5c7033 Add new mouse "Ploopy Nano 2 Trackball" (#25762) 2025-12-08 14:24:42 -08:00
Jon Colverson
107812ceef [Keyboard] Add PicoFX (#25704) 2025-12-08 20:31:24 +00:00
Fabian Felix Selbach
de8f05b4c3 [Keyboard] Add support for Alpha FS (#25756) 2025-12-08 20:21:12 +00:00
psych3r
08e5fcfdf4 Fix USER_PATH resolution on case-insensitive filesystems (#25853)
When QMK_USERSPACE is empty, the wildcard check in build_keyboard.mk
incorrectly matches user home directories on case-insensitive filesystems
(macOS/Windows), causing USER_PATH to resolve to an absolute path instead
of a relative path.

This only affects users whose username matches their user directory name
(e.g., username 'psycher' with home '/Users/psycher' and QMK user dir
'users/psycher').

Fix by checking if QMK_USERSPACE is non-empty before performing the
wildcard check.
2025-12-05 22:25:48 +00:00
Ivan Gromov
1322922c42 Add kt356 Mini (#25781)
Co-authored-by: Joel Challis <git@zvecr.com>
2025-12-04 12:42:53 -08:00
Ivan Gromov
16dde871d7 Add kt60HS-T v3 (#25822) 2025-12-04 12:42:33 -08:00
Jacek Królikowski
d39015a401 [DOCS] Add keycodes to info.json docs. More precise matrix masking info (#25801) 2025-12-04 12:15:43 +00:00
sigman
bf0b88c423 Adapt MIUNI32 keyboard for VIA configurator (#25803) 2025-12-04 12:14:37 +00:00
tyler
d4f04fe850 Simplify docs for Key Overrides config (#25787) 2025-12-04 12:13:20 +00:00
49 changed files with 2243 additions and 85 deletions

View File

@@ -4,20 +4,42 @@ 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
if: ${{ github.event_name == 'pull_request' }}
outputs:
any_changed: ${{ steps.file_changes.outputs.any_changed }}
steps:
- name: Get changed files
id: file_changes
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 +163,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 +185,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 +217,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 +234,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 +274,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)

View File

@@ -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: .

View File

@@ -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: .
@@ -112,7 +108,7 @@ jobs:
qmk mass-compile -t -j $NCPUS -e DUMP_CI_METADATA=yes $(jq -r '.["${{ matrix.target }}"].targets' targets.json) || 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 +135,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

View File

@@ -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
View 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',
})

View File

@@ -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.7.6
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: gh-pages

View File

@@ -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 }}

View File

@@ -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

View File

@@ -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 }}

View File

@@ -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

View File

@@ -474,8 +474,10 @@ ifneq ($(wildcard $(QMK_USERSPACE)),)
endif
# If the equivalent users directory exists in userspace, use that in preference to anything currently in the main repo
ifneq ($(wildcard $(QMK_USERSPACE)/$(USER_PATH)),)
USER_PATH := $(QMK_USERSPACE)/$(USER_PATH)
ifneq ($(QMK_USERSPACE),)
ifneq ($(wildcard $(QMK_USERSPACE)/$(USER_PATH)),)
USER_PATH := $(QMK_USERSPACE)/$(USER_PATH)
endif
endif
# Pull in user level rules.mk

View File

@@ -14,7 +14,7 @@ You can use key overrides in a similar way to momentary layer/fn keys to activat
To enable this feature, you need to add `KEY_OVERRIDE_ENABLE = yes` to your `rules.mk`.
Then, in your `keymap.c` file, you'll need to define the array `key_overrides`, which defines all key overrides to be used. Each override is a value of type `key_override_t`. The array `key_overrides`contains pointers to `key_override_t` values (`const key_override_t **`).
Then, in your `keymap.c` file, you'll need to define the `key_overrides` config. See below for more details.
## Creating Key Overrides {#creating-key-overrides}

View File

@@ -327,6 +327,21 @@ Configures the [LED Indicators](features/led_indicators) feature.
* `scroll_lock` <Badge type="info">Pin</Badge>
* The GPIO pin connected to the Scroll Lock LED.
## (Custom) Keycodes {#keycodes}
Defines [custom keycodes](custom_quantum_functions#definining-a-new-keycode) for use within keymaps.
* `keycodes` <Badge type="info">Array: Object</Badge>
* A list of keycode objects.
* `key` <Badge type="info">String</Badge> <Badge>Required</Badge>
* The enum name of the custom keycode.
* Example: `LAYER_CHANGE_BEEP_ON`
* `label` <Badge type="info">String</Badge>
* A short description of the custom keycode.
* `aliases` <Badge type="info">Array: String</Badge>
* A list of shortened names for the custom keycode.
* Example: `["LCBON", "LCB_ON"]`
## Layouts {#layouts}
The `layouts` portion of the dictionary contains several nested dictionaries. The outer layer consists of QMK layout names, for example `LAYOUT_60_ansi` or `LAYOUT_60_iso`.
@@ -513,7 +528,7 @@ Configures the [LED Matrix](features/led_matrix) feature.
* The amount of time to wait between row/col selection and col/row pin reading, in microseconds.
* Default: `30` (30 µs)
* `masked` <Badge type="info">Boolean</Badge>
* Whether configured intersections should be ignored.
* Whether unconfigured intersections should be ignored.
* Default: `false`
* `rows` <Badge type="info">Array: Pin</Badge>
* A list of GPIO pins connected to the matrix rows.

View 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}
]
}
}
}

View 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, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,27 @@
# Kami65
![Kami65](https://i.imgur.com/SwXfDcr.png)
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

View 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}
]
}
}
}

View 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"
]
]
}

View 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
```

View 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"
]
]
}

View 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
```

View 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"
]
]
}

View 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.

View File

@@ -0,0 +1,34 @@
# dj505/picofx
![PicoFX controller](https://i.imgur.com/YNsJPg0.png)
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.

View 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}
]
}
}
}

View 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

View File

@@ -0,0 +1,28 @@
# Queue.len()
![Queue.len()](https://i.imgur.com/8JKbm6P.png)
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

View File

@@ -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}
]
}
}

View 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}
]
}
}
}

View File

@@ -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
)
};

View File

@@ -0,0 +1,28 @@
# handwired/fabiclawz/alpha_fs
![handwired/fabiclawz/alpha_fs](https://i.imgur.com/FOOmKXN.jpeg)
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

View File

@@ -0,0 +1,299 @@
{
"manufacturer": "keyten",
"keyboard_name": "kt356 Mini",
"maintainer": "key10iq",
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"usb": {
"vid": "0xEB69",
"pid": "0x6008",
"device_version": "0.0.1"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"rows": ["B4", "B5", "A6", "B10", "B11"],
"cols": ["A15", "F1", "F0", "C14", "A3", "C13", "B1", "B9", "A4", "B8", "B0", "B7", "A7", "B6"]
},
"indicators": {
"caps_lock": "A14"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_ansi_tsangan_split_bs_rshift"
],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_60_ansi_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi": {
"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": [2, 13], "w": 2, "x": 13, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "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], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
{ "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
{ "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [0, 10], "x": 10, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [0, 12], "x": 12, "y": 0 },
{ "matrix": [0, 13], "x": 13, "y": 0 },
{ "matrix": [2, 13], "x": 14, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "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], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
{ "matrix": [3, 13], "x": 14, "y": 3 },
{ "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
{ "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
{ "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
{ "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
{ "matrix": [4, 11], "w": 1.25, "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [0, 10], "x": 10, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [0, 12], "x": 12, "y": 0 },
{ "matrix": [2, 13], "w": 2, "x": 13, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "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], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 2.75, "x": 12.25, "y": 3 },
{ "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
{ "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
{ "matrix": [4, 11], "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
]
},
"LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [0, 10], "x": 10, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [0, 12], "x": 12, "y": 0 },
{ "matrix": [0, 13], "x": 13, "y": 0 },
{ "matrix": [2, 13], "x": 14, "y": 0 },
{ "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
{ "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], "w": 1.5, "x": 13.5, "y": 1 },
{ "matrix": [2, 0], "w": 1.75, "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], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 2.25, "y": 3 },
{ "matrix": [3, 2], "x": 3.25, "y": 3 },
{ "matrix": [3, 3], "x": 4.25, "y": 3 },
{ "matrix": [3, 4], "x": 5.25, "y": 3 },
{ "matrix": [3, 5], "x": 6.25, "y": 3 },
{ "matrix": [3, 6], "x": 7.25, "y": 3 },
{ "matrix": [3, 7], "x": 8.25, "y": 3 },
{ "matrix": [3, 8], "x": 9.25, "y": 3 },
{ "matrix": [3, 9], "x": 10.25, "y": 3 },
{ "matrix": [3, 10], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
{ "matrix": [3, 13], "x": 14, "y": 3 },
{ "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
{ "matrix": [4, 1], "x": 1.5, "y": 4 },
{ "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
{ "matrix": [4, 6], "w": 7, "x": 4, "y": 4 },
{ "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
{ "matrix": [4, 11], "x": 12.5, "y": 4 },
{ "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
]
}
}
}

View File

@@ -0,0 +1,24 @@
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_ansi_split_bs_rshift(
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_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
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_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_APP, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_split_bs_rshift(
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,27 @@
# keyten kt356 Mini
Replacement PCB for the OTD (and UTD) 356 Mini keyboard.
![kt356 Mini image](https://live.staticflickr.com/65535/54907825962_65a650ce4c_b.jpg)
* Keyboard Maintainer: [keyten](https://github.com/key10iq)
* Hardware Supported: keyten kt356 Mini
* Hardware Availability: private GB
Make example for this keyboard (after setting up your build environment):
make keyten/kt356_mini:default
Flashing example for this keyboard:
make keyten/kt356_mini: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
* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
* Physical reset button: Hold the button on the back of the PCB

View File

@@ -1,4 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
// Copyright 2025 key10iq
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
@@ -13,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[1] = LAYOUT_60_ansi_tsangan_split_bs_rshift(
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,
QK_BOOT, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,

View File

@@ -2,7 +2,7 @@
60% MX Hot-Swap Tsangan PCB
![kt60HS-T image](https://i.imgur.com/vM32aoX.jpeg)
![kt60HS-T image](https://live.staticflickr.com/65535/54942233930_c83933dd23_b.jpg)
Supports:
1. Split Backspace
@@ -10,7 +10,8 @@ Supports:
There are two versions of the PCB available.
|Version| Features |
|-------|-------------------------------------------|
|v1 |Blue/Purple PCB / ARM STM32F401 controller |
|v2 |Purple PCB / ARM STM32F072 controller |
|Version| Features |
|-------|---------------------------------------------------------|
|v1 |Blue/Purple PCB / ARM STM32F401 controller |
|v2 |Purple PCB / ARM STM32F072 controller |
|v3 |Purple PCB / ARM STM32F072 controller, different routing |

View File

@@ -0,0 +1,282 @@
{
"bootloader": "stm32-dfu",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["A3", "A4", "B12", "B15", "A7", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14"],
"rows": ["B13", "B14", "A5", "A6", "B0"]
},
"processor": "STM32F072",
"usb": {
"device_version": "3.0.0",
"pid": "0x6010"
},
"community_layouts": [
"60_ansi_wkl_split_bs_rshift",
"60_hhkb",
"60_ansi_tsangan_split_bs_rshift"
],
"layout_aliases": {
"LAYOUT_all": "LAYOUT_60_ansi_tsangan_split_bs_rshift"
},
"layouts": {
"LAYOUT_60_ansi_wkl_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 13], "x": 14, "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, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"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": [2, 13], "x": 14, "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, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4}
]
},
"LAYOUT_60_ansi_tsangan_split_bs_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 13], "x": 14, "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, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_ansi_tsangan_split_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [2, 13], "x": 13, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
{"matrix": [1, 1], "x": 1.5, "y": 1},
{"matrix": [1, 2], "x": 2.5, "y": 1},
{"matrix": [1, 3], "x": 3.5, "y": 1},
{"matrix": [1, 4], "x": 4.5, "y": 1},
{"matrix": [1, 5], "x": 5.5, "y": 1},
{"matrix": [1, 6], "x": 6.5, "y": 1},
{"matrix": [1, 7], "x": 7.5, "y": 1},
{"matrix": [1, 8], "x": 8.5, "y": 1},
{"matrix": [1, 9], "x": 9.5, "y": 1},
{"matrix": [1, 10], "x": 10.5, "y": 1},
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
{"matrix": [2, 3], "x": 3.75, "y": 2},
{"matrix": [2, 4], "x": 4.75, "y": 2},
{"matrix": [2, 5], "x": 5.75, "y": 2},
{"matrix": [2, 6], "x": 6.75, "y": 2},
{"matrix": [2, 7], "x": 7.75, "y": 2},
{"matrix": [2, 8], "x": 8.75, "y": 2},
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
{"matrix": [2, 12], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
{"matrix": [3, 3], "x": 4.25, "y": 3},
{"matrix": [3, 4], "x": 5.25, "y": 3},
{"matrix": [3, 5], "x": 6.25, "y": 3},
{"matrix": [3, 6], "x": 7.25, "y": 3},
{"matrix": [3, 7], "x": 8.25, "y": 3},
{"matrix": [3, 8], "x": 9.25, "y": 3},
{"matrix": [3, 9], "x": 10.25, "y": 3},
{"matrix": [3, 10], "x": 11.25, "y": 3},
{"matrix": [4, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"matrix": [4, 10], "x": 11, "y": 4, "w": 1.5},
{"matrix": [4, 11], "x": 12.5, "y": 4},
{"matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,27 @@
# keyten kt60HS-T V3
60% MX Hot-Swap Tsangan PCB
![kt60HS-T image](https://live.staticflickr.com/65535/54942233930_c83933dd23_b.jpg)
* Keyboard Maintainer: [keyten](https://github.com/key10iq)
* Hardware Supported: keyten kt60HS-T V3
* Hardware Availability: private GB
Make example for this keyboard (after setting up your build environment):
make keyten/kt60hs_t/v3:default
Flashing example for this keyboard:
make keyten/kt60hs_t/v3: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
* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
* Physical reset button: Hold the button on the back of the PCB

View File

@@ -3,8 +3,8 @@
"manufacturer": "Bigtuna.io",
"maintainer": "qmk",
"usb": {
"vid": "0xFEED",
"pid": "0x6060",
"vid": "0x41FA",
"pid": "0xAAEF",
"device_version": "0.0.1"
},
"rgblight": {
@@ -80,8 +80,8 @@
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2, "w": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2, "w": 2},
{"matrix": [2, 6], "x": 6, "y": 2},
{"matrix": [2, 7], "x": 7, "y": 2},
{"matrix": [2, 8], "x": 8, "y": 2},

View File

@@ -1,3 +1,18 @@
/* Copyright 2025 BigTuna.io
*
* 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] = {

View 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

View 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]}
]
}
}
}

View 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 )
};

View File

@@ -0,0 +1,38 @@
# Ploopy Nano 2 Trackball
![Ploopyco Trackball Nano 2](https://cdn.ploopy.co/nano2-media-assets/site-photos/_MG_2495.jpg)
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).

View File

@@ -0,0 +1,7 @@
{
"matrix_pins": {
"direct": [
["GP17"]
]
}
}

View File

@@ -0,0 +1 @@
See the main readme for more details. This is just here for when future revisions of the board are released.

View File

@@ -0,0 +1 @@
POINTING_DEVICE_DRIVER = paw3222

View File

@@ -23,7 +23,7 @@
#endif
#ifdef OS_DETECTION_DEBUG_ENABLE
# include "eeconfig.h"
# include "nvm_eeprom_eeconfig_internal.h"
# include "eeprom.h"
# include "print.h"

View File

@@ -230,7 +230,7 @@ __EOT__
*debian* | *ubuntu*) echo "zstd build-essential clang-format diffutils wget unzip zip libhidapi-hidraw0 dos2unix git" ;;
*fedora*) echo "zstd clang diffutils which gcc git wget unzip zip hidapi dos2unix libusb-devel libusb1-devel libusb-compat-0.1-devel libusb0-devel git epel-release" ;;
*suse*) echo "zstd clang diffutils wget unzip zip libhidapi-hidraw0 dos2unix git libusb-1_0-devel gzip which" ;;
*gentoo*) echo "zstd diffutils wget unzip zip dev-libs/hidapi dos2unix dev-vcs/git dev-libs/libusb app-arch/gzip which" ;;
*gentoo*) echo "zstd sys-apps/diffutils wget unzip zip dev-libs/hidapi dos2unix dev-vcs/git dev-libs/libusb app-arch/gzip which" ;;
*)
echo >&2
echo "Sorry, we don't recognize your distribution." >&2