Compare commits

...

10 Commits

Author SHA1 Message Date
ba0d96fc9d my dactyl-cc configuration
Some checks failed
Automatic Approve / automatic_approve (push) Has been cancelled
Update API Data / api_data (push) Has been cancelled
CI Build Major Branch / Determine concurrency (push) Has been cancelled
CI Build Major Branch / Compile keymap default (push) Has been cancelled
CI Build Major Branch / Consolidation (push) Has been cancelled
CLI CI / test (push) Has been cancelled
Update develop after master merge / develop_update (push) Has been cancelled
Lint Format / lint (push) Has been cancelled
Regenerate Files / regen (push) Has been cancelled
Unit Tests / test (push) Has been cancelled
2025-07-29 02:18:49 -07:00
Joel Challis
36c3f4deba [docs] Align more keyboard placeholders (#25510) 2025-07-23 13:08:48 +01:00
Joel Challis
74d64c7f43 [docs] Align keyboard and keymap placeholders (#25509) 2025-07-23 04:33:37 +01:00
Brandon
7098252252 Add null65ansi keyboard (#25464) 2025-07-17 18:09:17 +01:00
Brandon
16ffaa6482 Add null65iso keyboard (#25465) 2025-07-17 18:09:01 +01:00
Jack Sangdahl
86badb394e Enable correct SPI peripheral dilemma/3x5_2/assembled (#25479)
Initial
2025-07-12 19:38:32 -06:00
Joel Challis
c7a24a441f Add zip to .gitignore (#25483) 2025-07-12 16:56:32 +01:00
Jon Henry Fernandez
9e757bc2ec [Keyboard] Add togkey/pad_pocket (#25470)
* Initial Source for Pad Pocket

* Added Tap Dance and Combo Configurations

* Updated LED Count

* Updated read me

* Updated Readme

* -Removed config.h file
- Added tap dance and combos to keymap level
- Removed tap dance and combos from keyboard.json
- Fixed conflict with submodules

* Fixed Formatting
2025-07-11 21:29:16 -06:00
TweyHugs
c3773d9c35 [Keyboard] Add cloud_macro (#24904)
* Added cloud_macro to keyboards folder

* Update readme.md

* Update readme.md

* Update readme.md

* Add files via upload

* Update keyboards/cloud_macro/keyboard.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/cloud_macro/keymaps/default/keymap.c

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/cloud_macro/keyboard.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update keyboards/cloud_macro/keyboard.json

Co-authored-by: Joel Challis <git@zvecr.com>

* Update readme.md

* Update keyboards/cloud_macro/readme.md

Co-authored-by: Thanh Son Tran <62438883+trnthsn@users.noreply.github.com>

* Update keyboards/cloud_macro/keyboard.json

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/cloud_macro/keymaps/default/keymap.c

Co-authored-by: jack <jack@pngu.org>

* Update keyboards/cloud_macro/readme.md

Co-authored-by: jack <jack@pngu.org>

* Update readme.md

* Update readme.md

reverting description to KB2040

---------

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Thanh Son Tran <62438883+trnthsn@users.noreply.github.com>
Co-authored-by: jack <jack@pngu.org>
2025-07-11 10:51:45 -06:00
Andrew Cooney
87e5df1b9e Changes to the Stenography documentation page. (#25426) 2025-07-10 12:02:08 +01:00
41 changed files with 897 additions and 52 deletions

1
.gitignore vendored
View File

@@ -64,6 +64,7 @@ build/
cmake-build-debug
CMakeLists.txt
*.pdf
*.zip
# Let these ones be user specific, since we have so many different configurations
*.code-workspace

View File

@@ -17,12 +17,12 @@ qmk compile [-c] <configuratorExport.json>
**Usage for Keymaps**:
```
qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] [--compiledb] -kb <keyboard_name> -km <keymap_name>
qmk compile [-c] [-e <var>=<value>] [-j <num_jobs>] [--compiledb] -kb <keyboard> -km <keymap>
```
**Usage in Keyboard Directory**:
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>`
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap>`
```
qmk compile
```
@@ -30,7 +30,7 @@ qmk compile
**Usage for building all keyboards that support a specific keymap**:
```
qmk compile -kb all -km <keymap_name>
qmk compile -kb all -km <keymap>
```
**Example**:
@@ -62,7 +62,7 @@ $ qmk compile
Must be under `qmk_firmware/layouts/`, and in a keymap folder.
```
qmk compile -kb <keyboard_name>
qmk compile -kb <keyboard>
```
**Example**:
@@ -77,11 +77,11 @@ $ qmk compile -kb dz60
It is possible to speed up compilation by adding the `-j`/`--parallel` flag.
```
qmk compile -j <num_jobs> -kb <keyboard_name>
qmk compile -j <num_jobs> -kb <keyboard>
```
The `num_jobs` argument determines the maximum number of jobs that can be used. Setting it to zero will enable parallel compilation without limiting the maximum number of jobs.
```
qmk compile -j 0 -kb <keyboard_name>
qmk compile -j 0 -kb <keyboard>
```
**Compilation Database**:
@@ -120,7 +120,7 @@ qmk flash [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>] <configurat
**Usage for Keymaps**:
```
qmk flash -kb <keyboard_name> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>]
qmk flash -kb <keyboard> -km <keymap_name> [-bl <bootloader>] [-c] [-e <var>=<value>] [-j <num_jobs>]
```
**Usage for pre-compiled firmwares**:

View File

@@ -44,7 +44,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const aw20216s_led_t PROGMEM g_aw20216s_leds[AW20216S_LED_COUNT] = {

View File

@@ -37,7 +37,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3218_led_t PROGMEM g_is31fl3218_leds[IS31FL3218_LED_COUNT] = {

View File

@@ -50,7 +50,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3236_led_t PROGMEM g_is31fl3236_leds[IS31FL3236_LED_COUNT] = {

View File

@@ -120,7 +120,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3729_led_t PROGMEM g_is31fl3729_leds[IS31FL3729_LED_COUNT] = {

View File

@@ -61,7 +61,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3731_led_t PROGMEM g_is31fl3731_leds[IS31FL3731_LED_COUNT] = {

View File

@@ -145,7 +145,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3733_led_t PROGMEM g_is31fl3733_leds[IS31FL3733_LED_COUNT] = {

View File

@@ -129,7 +129,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3736_led_t PROGMEM g_is31fl3736_leds[IS31FL3736_LED_COUNT] = {

View File

@@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3737_led_t PROGMEM g_is31fl3737_leds[IS31FL3737_LED_COUNT] = {

View File

@@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3741_led_t PROGMEM g_is31fl3741_leds[IS31FL3741_LED_COUNT] = {

View File

@@ -117,7 +117,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3742a_led_t PROGMEM g_is31fl3742a_leds[IS31FL3742A_LED_COUNT] = {

View File

@@ -127,7 +127,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3743a_led_t PROGMEM g_is31fl3743a_leds[IS31FL3743A_LED_COUNT] = {

View File

@@ -127,7 +127,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3745_led_t PROGMEM g_is31fl3745_leds[IS31FL3745_LED_COUNT] = {

View File

@@ -132,7 +132,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const is31fl3746a_led_t PROGMEM g_is31fl3746a_leds[IS31FL3746A_LED_COUNT] = {

View File

@@ -52,7 +52,7 @@ Depending on the ChibiOS board configuration, you may need to [enable and config
## LED Mapping {#led-mapping}
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboardname>.c`:
In order to use this driver, each output must be mapped to an LED index, by adding the following to your `<keyboard>.c`:
```c
const snled27351_led_t PROGMEM g_snled27351_leds[SNLED27351_LED_COUNT] = {

View File

@@ -4,6 +4,14 @@
The [Open Steno Project](https://www.openstenoproject.org/) has built an open-source program called Plover that provides real-time translation of steno strokes into words and commands. It has an established dictionary and supports
## Steno Support in QMK
There are three ways that QMK keyboards can support steno, with varying degrees of configuration required:
1. Plover with [Arpeggiation](https://plover.wiki/index.php/Glossary#Arpeggiate) requires no changes to any keyboard and is supported by QMK as well as any other QWERTY keyboard.
2. Plover with [NKRO](https://plover.wiki/index.php/Using_a_standard_keyboard_with_Plover#NKRO). If your keyboard supports NKRO in hardware and you have NKRO enabled as a USB endpoint, you can chord with the keyboard. Many devices will arrive stock like this and will require no changes.
3. Steno Machine Protocols. This requires the most configuration, but this has the advantage of allowing you to use your keyboard keys normally (either on another layer or another piece of hardware) without enabling and disabling your steno software.
## Plover with QWERTY Keyboard {#plover-with-qwerty-keyboard}
Plover can work with any standard QWERTY keyboard, although it is more efficient if the keyboard supports NKRO (n-key rollover) to allow Plover to see all the pressed keys at once. An example keymap for Plover can be found in `planck/keymaps/default`. Switching to the `PLOVER` layer adjusts the position of the keyboard to support the number bar.
@@ -14,14 +22,14 @@ You may also need to adjust your layout, either in QMK or in Plover, if you have
## Plover with Steno Protocol {#plover-with-steno-protocol}
Plover also understands the language of several steno machines. QMK can speak a couple of these languages: TX Bolt and GeminiPR. An example layout can be found in `planck/keymaps/steno`.
Plover also understands the language of several steno machines. QMK can speak a couple of these languages: TX Bolt and GeminiPR. An example layout can be found in `splitography/keymaps/default`.
When QMK speaks to Plover over a steno protocol, Plover will not use the keyboard as input. This means that you can switch back and forth between a standard keyboard and your steno keyboard, or even switch layers from Plover to standard and back without needing to activate/deactivate Plover.
In this mode, Plover expects to speak with a steno machine over a serial port so QMK will present itself to the operating system as a virtual serial port in addition to a keyboard.
::: info
Note: Due to hardware limitations, you might not be able to run both a virtual serial port and mouse emulation at the same time.
Due to hardware limitations, you might not be able to run both a virtual serial port and other features (mouse keys, NKRO, or MIDI support) at the same time. You will likely encounter a compile time error if this is the case. Disable those other features as necessary.
:::
::: warning
@@ -156,7 +164,7 @@ At the end of this scenario given as an example, `chord` would have five bits se
## Keycode Reference {#keycode-reference}
::: info
Note: TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both.
TX Bolt does not support the full set of keys. The TX Bolt implementation in QMK will map the GeminiPR keys to the nearest TX Bolt key so that one key map will work for both.
:::
|GeminiPR|TX Bolt|Steno Key|

View File

@@ -19,8 +19,8 @@ Within the folder `keyboards`, its subfolder `handwired` and its vendor and manu
* `config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`.
* `info.json`: The file used for setting layout for QMK Configurator. See [Configurator Support](reference_configurator_support) for more information.
* `readme.md`: A brief overview of the keyboard.
* `<keyboardName>.h`: This file is where the keyboard layout is defined against the keyboard's switch matrix.
* `<keyboardName>.c`: This file is where you can find custom code for the keyboard.
* `<keyboard>.h`: This file is where the keyboard layout is defined against the keyboard's switch matrix.
* `<keyboard>.c`: This file is where you can find custom code for the keyboard.
For more information on project structure, see [QMK Keyboard Guidelines](hardware_keyboard_guidelines).

View File

@@ -1,8 +1,8 @@
# More Detailed `make` Instructions
The full syntax of the `make` command is `<keyboard_folder>:<keymap>:<target>`, where:
The full syntax of the `make` command is `<keyboard>:<keymap>:<target>`, where:
* `<keyboard_folder>` is the path of the keyboard, for example `planck`
* `<keyboard>` is the path of the keyboard, for example `planck`
* Use `all` to compile all keyboards
* Specify the path to compile a revision, for example `planck/rev4` or `planck/rev3`
* If the keyboard doesn't have any folders, it can be left out

View File

@@ -71,8 +71,8 @@ Your keyboard should be located in `qmk_firmware/keyboards/` and the folder name
* `keyboard.json` (or `info.json`)
* `config.h`
* `rules.mk`
* `<keyboard_name>.c`
* `<keyboard_name>.h`
* `<keyboard>.c`
* `<keyboard>.h`
### `readme.md`
@@ -203,7 +203,7 @@ The `post_rules.mk` file can interpret `features` of a keyboard-level before `co
See `build_keyboard.mk` and `common_features.mk` for more details.
:::
### `<keyboard_name.c>`
### `<keyboard>.c`
This file should contain C code required for the functionality of your keyboard, for example hardware initialisation code, OLED display code, and so on. This file should only contain code necessary for the keyboard to work, and *not* things that should be left to the end user to configure in their keymap. This file is automatically included in compilation if it exists. This is not a required file.
@@ -214,9 +214,9 @@ The following functions are typically defined in this file:
* `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
* `bool led_update_kb(led_t led_state)`
### `<keyboard_name.h>`
### `<keyboard>.h`
This file can contain function prototypes for custom functions and other header file code utilised by `<keyboard_name>.c`. The `<keyboard_name>.c` file should include this file. This is not a required file.
This file can contain function prototypes for custom functions and other header file code utilised by `<keyboard>.c`. The `<keyboard>.c` file should include this file. This is not a required file.
## Image/Hardware Files

View File

@@ -33,7 +33,7 @@ qmk new-keymap
If you did not configure your environment, or you have multiple keyboards, you can specify a keyboard name:
```sh
qmk new-keymap -kb <keyboard_name>
qmk new-keymap -kb <keyboard>
```
Look at the output from that command, you should see something like this:

View File

@@ -60,7 +60,7 @@ open .
The firmware file always follows this naming format:
```
<keyboard_name>_<keymap_name>.{bin,hex}
<keyboard>_<keymap>.{bin,hex}
```
For example, the `planck/rev5` with a `default` keymap will have this filename:

View File

@@ -2,7 +2,7 @@
The information contained in `info.json` is combined with the `config.h` and `rules.mk` files, dynamically generating the necessary configuration for your keyboard at compile time. It is also used by the [QMK API](https://github.com/qmk/qmk_api), and contains the information [QMK Configurator](https://config.qmk.fm/) needs to display a representation of your keyboard. Its key/value pairs are ruled by the [`data/schemas/keyboard.jsonschema`](https://github.com/qmk/qmk_firmware/blob/master/data/schemas/keyboard.jsonschema) file. To learn more about the why and how of the schema file see the [Data Driven Configuration](data_driven_config) page.
You can create `info.json` files at every level under `qmk_firmware/keyboards/<keyboard_name>`. These files are combined, with more specific files overriding keys in less specific files. This means you do not need to duplicate your metadata information. For example, `qmk_firmware/keyboards/clueboard/info.json` specifies information common to all Clueboard products, such as `manufacturer` and `maintainer`, while `qmk_firmware/keyboards/clueboard/66/info.json` contains more specific information about Clueboard 66%.
You can create `info.json` files at every level under `qmk_firmware/keyboards/<keyboard>`. These files are combined, with more specific files overriding keys in less specific files. This means you do not need to duplicate your metadata information. For example, `qmk_firmware/keyboards/clueboard/info.json` specifies information common to all Clueboard products, such as `manufacturer` and `maintainer`, while `qmk_firmware/keyboards/clueboard/66/info.json` contains more specific information about Clueboard 66%.
## General Metadata {#general-metadata}

View File

@@ -19,5 +19,5 @@
#include_next <mcuconf.h>
#undef RP_SPI_USE_SPI1
#define RP_SPI_USE_SPI1 TRUE
#undef RP_SPI_USE_SPI0
#define RP_SPI_USE_SPI0 TRUE

View File

@@ -0,0 +1,33 @@
{
"manufacturer": "Trey Wax",
"keyboard_name": "cloud_macro",
"maintainer": "TweyHugs",
"development_board": "kb2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true
},
"matrix_pins": {
"direct":[
["GP2", "GP3", "GP4", "GP5", "GP6"]
]
},
"usb": {
"device_version": "1.0.0",
"pid": "0x0000",
"vid": "0xFEED"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0}
]
}
}
}

View File

@@ -0,0 +1,8 @@
// Copyright 2023 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(KC_1, KC_2, KC_3, KC_4, KC_5)
};

View File

@@ -0,0 +1,27 @@
# cloud_macro
![cloud_macro](https://i.imgur.com/n0PMttQ.jpeg)
A 5 key macropad in the shape of a cloud
* Keyboard Maintainer: [Trey Wax](https://github.com/TweyHugs)
* Hardware Supported: Adafruit KB2040
* Hardware Availability: *https://circuitrey.carrd.co/*
Make example for this keyboard (after setting up your build environment):
make cloud_macro:default
Flashing example for this keyboard:
make cloud_macro: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

@@ -3,6 +3,8 @@
"manufacturer": "mjohns",
"url": "https://github.com/mjohns/dactyl-cc",
"maintainer": "qmk",
"bootloader": "rp2040",
"processor": "RP2040",
"usb": {
"vid": "0x444E",
"pid": "0x1407",
@@ -16,17 +18,22 @@
"nkro": false
},
"matrix_pins": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F6", "F7", "B1", "B3", "B2", "B6"]
"rows": ["GP29", "GP28", "GP27", "GP26", "GP15", "GP14"],
"cols": ["GP3", "GP4", "GP5", "GP6", "GP7", "GP2"]
},
"diode_direction": "COL2ROW",
"split": {
"enabled": true,
"handedness": {
"pin": "GP13"
},
"serial": {
"pin": "D0"
"driver": "vendor"
},
"transport": {
"watchdog": true
}
},
"development_board": "promicro",
"diode_direction": "COL2ROW",
"layouts": {
"LAYOUT": {
"layout": [
@@ -36,7 +43,7 @@
{"matrix": [0, 3], "x": 3.25, "y": 0},
{"matrix": [0, 4], "x": 4.25, "y": 0.1},
{"matrix": [0, 5], "x": 5.25, "y": 0.1},
{"matrix": [6, 0], "x": 11.25, "y": 0.1},
{"matrix": [6, 1], "x": 12.25, "y": 0.1},
{"matrix": [6, 2], "x": 13.25, "y": 0},

View File

@@ -0,0 +1,37 @@
// Copyright 2022 mjohns
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* Enables This makes it easier for fast typists to use dual-function keys */
#define PERMISSIVE_HOLD
/* mouse config */
#define MOUSEKEY_DELAY 0
// Lowering MOUSEKEY_INTERVAL raises the cursor speed significantly, you may want to lower MOUSEKEY_MAX_SPEED (default: 10)
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_MAX_SPEED 7
#define MOUSEKEY_WHEEL_DELAY 0
/* layer config */
#define TAPPING_TOGGLE 1
/* disable action features */
// #define NO_ACTION_LAYER
// #define NO_ACTION_TAPPING
// #define NO_ACTION_ONESHOT
// Serial config
// #define SERIAL_USART_TX_PIN GP0 // USART TX pin
// #define SERIAL_USART_RX_PIN GP1 // USART RX pin
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U
#define SERIAL_USART_FULL_DUPLEX
#define SERIAL_USART_TX_PIN GP0
#define SERIAL_USART_RX_PIN GP1

View File

@@ -0,0 +1,42 @@
// Copyright 2022 mjohns
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
BASE,
NAV
};
// TODO: add a "SPECIAL" layer
#define CTL_ESC LCTL_T(KC_ESC)
#define CTL_CAP LCTL_T(KC_CAPS)
#define ALT_BSP LALT_T(KC_BSPC)
#define LT_SCLN LT(NAV, KC_SCLN)
#define RGUI_SPC RGUI_T(KC_SPC)
#define MINS_LGUI LGUI_T(KC_MINS)
#define EQL_LALT LALT_T(KC_EQL)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
CTL_CAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
MINS_LGUI, EQL_LALT, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_DOWN,
TT(NAV), KC_DEL, KC_PGUP, KC_RCTL,
KC_BSPC, CTL_ESC, KC_LGUI, KC_PGDN, KC_ENT, RGUI_SPC,
KC_LALT, KC_RALT
),
[NAV] = LAYOUT(
QK_BOOT, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_BRIU, KC_P7, KC_P8, KC_P9, KC_NO, QK_BOOT,
_______, KC_VOLU, KC_WBAK, KC_MS_U, KC_WFWD, KC_WH_U, KC_BRID, KC_P4, KC_P5, KC_P6, KC_PMNS, _______,
_______, KC_VOLD, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_PPLS, KC_P1, KC_P2, KC_P3, KC_PSLS, _______,
KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_NO, KC_PAST, KC_PCMM, KC_P0, KC_PDOT, KC_PENT, _______,
KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
_______, _______, KC_HOME, _______,
KC_BTN1, KC_BTN2, _______, KC_END, _______, _______,
_______, ALT_BSP
)
};

View File

@@ -19,14 +19,14 @@
"split": {
"enabled": true,
"handedness": {
"pin": "GP22"
},
"serial": {
"driver": "vendor"
},
"transport": {
"watchdog": true
}
"pin": "GP13"
},
"serial": {
"driver": "vendor"
},
"transport": {
"watchdog": true
}
},
"diode_direction": "COL2ROW",
"matrix_pins": {

View File

@@ -0,0 +1,237 @@
{
"manufacturer": "nulldesignco",
"keyboard_name": "null65ansi",
"maintainer": "quark-works",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0x6E6C",
"pid": "0x0001",
"device_version": "1.0.0"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"ws2812": {
"pin": "GP18",
"driver": "vendor"
},
"rgb_matrix": {
"max_brightness": 90,
"center_point": [120,32],
"sleep": true,
"driver": "ws2812",
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"flower_blooming": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"riverflow": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"starlight": true,
"starlight_dual_hue": true,
"starlight_dual_sat": true,
"typing_heatmap": true
},
"layout": [
{"matrix": [4, 5], "x": 102, "y": 64, "flags": 4},
{"matrix": [4, 9], "x": 102, "y": 64, "flags": 4},
{"matrix": [4, 10], "x": 160, "y": 64, "flags": 4},
{"matrix": [4, 11], "x": 176, "y": 64, "flags": 4},
{"matrix": [4, 12], "x": 192, "y": 64, "flags": 4},
{"matrix": [4, 13], "x": 208, "y": 64, "flags": 4},
{"matrix": [4, 14], "x": 240, "y": 64, "flags": 4},
{"matrix": [3, 14], "x": 240, "y": 48, "flags": 4},
{"matrix": [3, 13], "x": 224, "y": 48, "flags": 4},
{"matrix": [3, 12], "x": 202, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 180, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 164, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 148, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 132, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 116, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 100, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 84, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 68, "y": 48, "flags": 4},
{"matrix": [3, 2], "x": 52, "y": 48, "flags": 4},
{"matrix": [3, 1], "x": 36, "y": 48, "flags": 4},
{"matrix": [4, 2], "x": 42, "y": 64, "flags": 4},
{"matrix": [4, 1], "x": 22, "y": 64, "flags": 4},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 4},
{"matrix": [3, 0], "x": 10, "y": 48, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 60, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 76, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 92, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 108, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 124, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 140, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 156, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 172, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 188, "y": 32, "flags": 4},
{"matrix": [2, 13], "x": 214, "y": 32, "flags": 4},
{"matrix": [2, 14], "x": 240, "y": 32, "flags": 4},
{"matrix": [1, 14], "x": 240, "y": 16, "flags": 4},
{"matrix": [1, 13], "x": 220, "y": 16, "flags": 4},
{"matrix": [1, 12], "x": 200, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 184, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 168, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 152, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 136, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 120, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 104, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 88, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 72, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 56, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 40, "y": 16, "flags": 4},
{"matrix": [1, 1], "x": 24, "y": 16, "flags": 4},
{"matrix": [1, 0], "x": 4, "y": 16, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 80, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 96, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 112, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 128, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 144, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 160, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 176, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 192, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 216, "y": 0, "flags": 4},
{"matrix": [0, 14], "x": 240, "y": 0, "flags": 4}
]
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"rows": ["GP4", "GP3", "GP2", "GP17", "GP15"],
"cols": ["GP28", "GP27", "GP29", "GP0", "GP1", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5"]
},
"url": "https://nulldesignco.com/",
"community_layouts": ["65_ansi"],
"layouts": {
"LAYOUT_65_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": [0, 13], "w": 2, "x": 13, "y": 0 },
{ "matrix": [0, 14], "x": 15, "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": [1, 14], "x": 15, "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, 13], "w": 2.25, "x": 12.75, "y": 2 },
{ "matrix": [2, 14], "x": 15, "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": [3, 14], "x": 15, "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, 5], "w": 6.25, "x": 3.75, "y": 4 },
{ "matrix": [4, 9], "x": 10, "y": 4 },
{ "matrix": [4, 10], "x": 11, "y": 4 },
{ "matrix": [4, 11], "x": 12, "y": 4 },
{ "matrix": [4, 12], "x": 13, "y": 4 },
{ "matrix": [4, 13], "x": 14, "y": 4 },
{ "matrix": [4, 14], "x": 15, "y": 4 }
]
}
}
}

View File

@@ -0,0 +1,22 @@
// Copyright 2025 quark-works
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_65_ansi(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};
bool rgb_matrix_indicators_user(void) {
if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(24, 255, 0, 0);
}
return false;
}

View File

@@ -0,0 +1,27 @@
# null65ansi v1
![sp](https://i.imgur.com/zO7Jlwj.png)
65% tray mount PCB with RGB per key.
* Keyboard Maintainer: [Quark](https://github.com/quark-works)
* Hardware Supported: PCB
* Hardware Availability: https://nulldesignco.com/
Make example for this keyboard (after setting up your build environment):
make nulldesignco/null65ansi/v1:default
Flashing example for this keyboard:
make nulldesignco/null65ansi/v1: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 boot button**: Hold the button labeled as "BOOT" on the back of the board or short the two pads on the front while you connect the keyboard to your computer.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,240 @@
{
"manufacturer": "nulldesignco",
"keyboard_name": "null65iso",
"maintainer": "quark-works",
"processor": "RP2040",
"bootloader": "rp2040",
"usb": {
"vid": "0x6E6C",
"pid": "0x0010",
"device_version": "1.0.0"
},
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true
},
"ws2812": {
"pin": "GP18",
"driver": "vendor"
},
"rgb_matrix": {
"max_brightness": 90,
"center_point": [120,32],
"sleep": true,
"driver": "ws2812",
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"flower_blooming": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"riverflow": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"starlight": true,
"starlight_dual_hue": true,
"starlight_dual_sat": true,
"typing_heatmap": true
},
"layout": [
{"matrix": [4, 6], "x": 102, "y": 64, "flags": 4},
{"matrix": [4, 9], "x": 102, "y": 64, "flags": 4},
{"matrix": [4, 10], "x": 160, "y": 64, "flags": 4},
{"matrix": [4, 11], "x": 176, "y": 64, "flags": 4},
{"matrix": [4, 12], "x": 192, "y": 64, "flags": 4},
{"matrix": [4, 13], "x": 208, "y": 64, "flags": 4},
{"matrix": [4, 14], "x": 240, "y": 64, "flags": 4},
{"matrix": [3, 14], "x": 240, "y": 48, "flags": 4},
{"matrix": [3, 13], "x": 224, "y": 48, "flags": 4},
{"matrix": [3, 12], "x": 202, "y": 48, "flags": 4},
{"matrix": [3, 11], "x": 180, "y": 48, "flags": 4},
{"matrix": [3, 10], "x": 164, "y": 48, "flags": 4},
{"matrix": [3, 9], "x": 148, "y": 48, "flags": 4},
{"matrix": [3, 8], "x": 132, "y": 48, "flags": 4},
{"matrix": [3, 7], "x": 116, "y": 48, "flags": 4},
{"matrix": [3, 6], "x": 100, "y": 48, "flags": 4},
{"matrix": [3, 5], "x": 84, "y": 48, "flags": 4},
{"matrix": [3, 4], "x": 68, "y": 48, "flags": 4},
{"matrix": [3, 3], "x": 52, "y": 48, "flags": 4},
{"matrix": [3, 2], "x": 36, "y": 48, "flags": 4},
{"matrix": [4, 2], "x": 42, "y": 64, "flags": 4},
{"matrix": [4, 1], "x": 22, "y": 64, "flags": 4},
{"matrix": [4, 0], "x": 2, "y": 64, "flags": 4},
{"matrix": [3, 1], "x": 20, "y": 48, "flags": 4},
{"matrix": [3, 0], "x": 2, "y": 48, "flags": 4},
{"matrix": [2, 0], "x": 6, "y": 32, "flags": 4},
{"matrix": [2, 1], "x": 28, "y": 32, "flags": 4},
{"matrix": [2, 2], "x": 44, "y": 32, "flags": 4},
{"matrix": [2, 3], "x": 60, "y": 32, "flags": 4},
{"matrix": [2, 4], "x": 76, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 92, "y": 32, "flags": 4},
{"matrix": [2, 6], "x": 108, "y": 32, "flags": 4},
{"matrix": [2, 7], "x": 124, "y": 32, "flags": 4},
{"matrix": [2, 8], "x": 140, "y": 32, "flags": 4},
{"matrix": [2, 9], "x": 156, "y": 32, "flags": 4},
{"matrix": [2, 10], "x": 172, "y": 32, "flags": 4},
{"matrix": [2, 11], "x": 188, "y": 32, "flags": 4},
{"matrix": [2, 12], "x": 214, "y": 32, "flags": 4},
{"matrix": [2, 14], "x": 240, "y": 32, "flags": 4},
{"matrix": [1, 14], "x": 240, "y": 16, "flags": 4},
{"matrix": [1, 13], "x": 220, "y": 24, "flags": 4},
{"matrix": [1, 12], "x": 200, "y": 16, "flags": 4},
{"matrix": [1, 11], "x": 184, "y": 16, "flags": 4},
{"matrix": [1, 10], "x": 168, "y": 16, "flags": 4},
{"matrix": [1, 9], "x": 152, "y": 16, "flags": 4},
{"matrix": [1, 8], "x": 136, "y": 16, "flags": 4},
{"matrix": [1, 7], "x": 120, "y": 16, "flags": 4},
{"matrix": [1, 6], "x": 104, "y": 16, "flags": 4},
{"matrix": [1, 5], "x": 88, "y": 16, "flags": 4},
{"matrix": [1, 4], "x": 72, "y": 16, "flags": 4},
{"matrix": [1, 3], "x": 56, "y": 16, "flags": 4},
{"matrix": [1, 2], "x": 40, "y": 16, "flags": 4},
{"matrix": [1, 1], "x": 24, "y": 16, "flags": 4},
{"matrix": [1, 0], "x": 4, "y": 16, "flags": 4},
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 16, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 32, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 48, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 64, "y": 0, "flags": 4},
{"matrix": [0, 5], "x": 80, "y": 0, "flags": 4},
{"matrix": [0, 6], "x": 96, "y": 0, "flags": 4},
{"matrix": [0, 7], "x": 112, "y": 0, "flags": 4},
{"matrix": [0, 8], "x": 128, "y": 0, "flags": 4},
{"matrix": [0, 9], "x": 144, "y": 0, "flags": 4},
{"matrix": [0, 10], "x": 160, "y": 0, "flags": 4},
{"matrix": [0, 11], "x": 176, "y": 0, "flags": 4},
{"matrix": [0, 12], "x": 192, "y": 0, "flags": 4},
{"matrix": [0, 13], "x": 216, "y": 0, "flags": 4},
{"matrix": [0, 14], "x": 240, "y": 0, "flags": 4}
]
},
"diode_direction": "COL2ROW",
"matrix_pins": {
"rows": ["GP4", "GP3", "GP2", "GP17", "GP15"],
"cols": ["GP28", "GP27", "GP29", "GP0", "GP1", "GP14", "GP13", "GP12", "GP11", "GP10", "GP9", "GP8", "GP7", "GP6", "GP5"]
},
"url": "https://nulldesignco.com/",
"community_layouts": ["65_iso"],
"layouts": {
"LAYOUT_65_iso": {
"layout": [
{ "matrix": [0, 0], "x": 0, "y": 0 },
{ "matrix": [0, 1], "x": 1, "y": 0 },
{ "matrix": [0, 2], "x": 2, "y": 0 },
{ "matrix": [0, 3], "x": 3, "y": 0 },
{ "matrix": [0, 4], "x": 4, "y": 0 },
{ "matrix": [0, 5], "x": 5, "y": 0 },
{ "matrix": [0, 6], "x": 6, "y": 0 },
{ "matrix": [0, 7], "x": 7, "y": 0 },
{ "matrix": [0, 8], "x": 8, "y": 0 },
{ "matrix": [0, 9], "x": 9, "y": 0 },
{ "matrix": [0, 10], "x": 10, "y": 0 },
{ "matrix": [0, 11], "x": 11, "y": 0 },
{ "matrix": [0, 12], "x": 12, "y": 0 },
{ "matrix": [0, 13], "w": 2, "x": 13, "y": 0 },
{ "matrix": [0, 14], "x": 15, "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, 14], "x": 15, "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], "x": 12.75, "y": 2 },
{ "matrix": [1, 13], "w": 1.25, "x": 13.75, "y": 1, "h": 2 },
{ "matrix": [2, 14], "x": 15, "y": 2 },
{ "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
{ "matrix": [3, 1], "x": 1.25, "y": 3 },
{ "matrix": [3, 2], "x": 2.25, "y": 3 },
{ "matrix": [3, 3], "x": 3.25, "y": 3 },
{ "matrix": [3, 4], "x": 4.25, "y": 3 },
{ "matrix": [3, 5], "x": 5.25, "y": 3 },
{ "matrix": [3, 6], "x": 6.25, "y": 3 },
{ "matrix": [3, 7], "x": 7.25, "y": 3 },
{ "matrix": [3, 8], "x": 8.25, "y": 3 },
{ "matrix": [3, 9], "x": 9.25, "y": 3 },
{ "matrix": [3, 10], "x": 10.25, "y": 3 },
{ "matrix": [3, 11], "x": 11.25, "y": 3 },
{ "matrix": [3, 12], "w": 1.75, "x": 12.25, "y": 3 },
{ "matrix": [3, 13], "x": 14, "y": 3 },
{ "matrix": [3, 14], "x": 15, "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], "x": 10, "y": 4 },
{ "matrix": [4, 10], "x": 11, "y": 4 },
{ "matrix": [4, 11], "x": 12, "y": 4 },
{ "matrix": [4, 12], "x": 13, "y": 4 },
{ "matrix": [4, 13], "x": 14, "y": 4 },
{ "matrix": [4, 14], "x": 15, "y": 4 }
]
}
}
}

View File

@@ -0,0 +1,22 @@
// Copyright 2025 quark-works
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_65_iso(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_HOME,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
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_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
)
};
bool rgb_matrix_indicators_user(void) {
if (host_keyboard_led_state().caps_lock) {
rgb_matrix_set_color(25, 255, 0, 0);
}
return false;
}

View File

@@ -0,0 +1,27 @@
# null65iso v1
![sp](https://i.imgur.com/dypoXbB.png)
65% tray mount PCB with RGB per key.
* Keyboard Maintainer: [Quark](https://github.com/quark-works)
* Hardware Supported: PCB
* Hardware Availability: https://nulldesignco.com/
Make example for this keyboard (after setting up your build environment):
make nulldesignco/null65iso/v1:default
Flashing example for this keyboard:
make nulldesignco/null65iso/v1: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 boot button**: Hold the button labeled as "BOOT" on the back of the board or short the two pads on the front while you connect the keyboard to your computer.
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,49 @@
{
"manufacturer": "TogKey",
"keyboard_name": "Pad Pocket",
"maintainer": "togkey86",
"development_board": "promicro_rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"rgblight": true
},
"matrix_pins": {
"cols": ["GP29", "GP22"],
"rows": ["GP26"]
},
"rgblight": {
"animations": {
"alternating": true,
"breathing": true,
"christmas": true,
"knight": true,
"rainbow_mood": true,
"rainbow_swirl": true,
"snake": true,
"static_gradient": true,
"twinkle": true
},
"hue_steps": 10,
"led_count": 2
},
"url": "https://togkey.com/products/togkey-pad-pocket",
"usb": {
"device_version": "1.0.0",
"pid": "0x8688",
"vid": "0xFEED"
},
"ws2812": {
"driver": "vendor",
"pin": "GP21"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0}
]
}
}
}

View File

@@ -0,0 +1,29 @@
// Copyright 2025 TogKey
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
//Tap Dances
enum {
TD_VOLDOWN_MEDIAPREV,
TD_VOLUP_MEDIANEXT
};
tap_dance_action_t tap_dance_actions[] = {
[TD_VOLDOWN_MEDIAPREV] = ACTION_TAP_DANCE_DOUBLE(KC_AUDIO_VOL_DOWN, KC_MEDIA_PREV_TRACK),
[TD_VOLUP_MEDIANEXT] = ACTION_TAP_DANCE_DOUBLE(KC_AUDIO_VOL_UP, KC_MEDIA_NEXT_TRACK)
};
//Combos
const uint16_t PROGMEM media_combo[] = {TD(TD_VOLDOWN_MEDIAPREV), TD(TD_VOLUP_MEDIANEXT), COMBO_END};
combo_t key_combos[] = {
COMBO(media_combo, KC_MEDIA_PLAY_PAUSE)
};
//Keymap
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
TD(TD_VOLDOWN_MEDIAPREV), TD(TD_VOLUP_MEDIANEXT)
)
};

View File

@@ -0,0 +1,2 @@
COMBO_ENABLE = yes
TAP_DANCE_ENABLE = yes

View File

@@ -0,0 +1,27 @@
# pad_pocket
![pad_pocket](https://i.imgur.com/yCrqAe5.jpeg)
A simple 2-Key Macropad Keychain based off an RP2040 Development Board and a custom PCB that is pre-programmed to control media.
* Keyboard Maintainer: [Jon Henry](https://github.com/togkey86)
* Hardware Supported: Togkey Pad Pocket/Duo PCB, RP2040 Pro Micro Development Board
* Hardware Availability: (https://togkey.com)
Make example for this keyboard (after setting up your build environment):
make togkey/pad_pocket:default
Flashing example for this keyboard:
make togkey/pad_pocket: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 (The left key closest to the USB Port) 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