1
0

Compare commits

..

47 Commits

Author SHA1 Message Date
ikorihn
4345d34cf2 Fix build error when Automatic Mouse Layer is enabled (#22229) 2023-10-08 19:43:09 +01:00
Joel Challis
7ca652ce6d Flag vial keymaps in 'qmk lint' (#22227) 2023-10-08 12:45:13 +01:00
Brian
06d123de62 Adding BriianPowell Discipline Keyboard Layout Updates (#21474) 2023-10-08 01:36:05 +11:00
noahbei
b768d74b2b Update vid for printedpad (#22215) 2023-10-07 15:00:46 +01:00
era
69c1790dce Klein_HS PCB support (#22203) 2023-10-06 17:31:08 -07:00
James Young
63b48f5096 Move orphaned Yugo-M files (#22211)
Moves files that were left behind by #14996.

[bugfix]
2023-10-06 01:34:14 +01:00
Nick Brassel
127560ae22 Add qmk ci-validate-aliases (#22205) 2023-10-06 10:34:23 +11:00
noahbei
92873cc14f Add printedpad keyboard (#21202)
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-10-04 21:55:49 -07:00
studiokestra
2a8b3a809d Add Line TKL keyboard (#22172)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2023-10-04 21:53:41 -07:00
lalalademaxiya1
8f757eece8 Add Keychron Q1 Version 2 (#20416)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: adophoxia <100170946+adophoxia@users.noreply.github.com>
Co-authored-by: Adophoxia <andyao1528@gmail.com>
2023-10-04 21:51:16 -07:00
Etienne Collin
aaebb0a231 Add Wave keyboard (#22054)
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-10-04 21:47:34 -07:00
xia0
9f31783249 Added 3dp660 oled keyboard (#20591)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
Co-authored-by: xia0 <xiao@morgan.net.au>
2023-10-04 21:45:27 -07:00
leyew
a58f86812c [Keyboard] Add qwertyqop60hs (#22164)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2023-10-04 21:02:26 -07:00
thompson-ele
22fbbbb1cc [Keyboard] Add SP-111 v2 keyboard (#21652)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: jack <0x6a73@protonmail.com>
2023-10-04 20:56:26 -07:00
gskygithub
7603a464cd Add keyboard Projectd/75/Projectd_75_ansi (#21628)
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: gksygithub <106651989+gksygithub@users.noreply.github.com>
2023-10-04 20:49:43 -07:00
Álvaro A. Volpato
d33f9ec86b Add Acheron Themis and its variants (#22142)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-10-04 20:35:24 -07:00
James Young
6e93b59f61 Monstargear XO87 Soldered: correct layout data (#22199)
Correct key positions on the bottom row for `LAYOUT_tkl_ansi_tsangan`.

[chore]
2023-10-04 11:17:01 +01:00
yuezp
5485d5023e Add the Split67 keyboard PCB (#22107)
Co-authored-by: “yuezp” <“yuezpchn@126.com”>
2023-10-03 21:02:42 -07:00
Coom
d9fa80c0b0 Added /handwired/ziyoulang_k3_mod (#21965)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-10-03 20:40:57 -07:00
Joel Challis
a638f6e5aa Fix minimum python version references (#22191) 2023-10-04 01:19:04 +01:00
Syenasweta
bc5d407bf7 [Keyboard] Add SyenaKeyboards (#22168)
Co-authored-by: Syenasweta <syenasweta@gmail.com>
2023-10-03 01:34:06 -06:00
Sergey Fedorov
f33881b1da Add Soulstone keyboard (#22093) 2023-10-03 01:27:00 -06:00
Joel Challis
997a6747ee Miscellaneous fixes for recently merged keyboards (#22179) 2023-10-02 11:49:53 +01:00
casuanoob
1b7a538353 Bastard Keyboards: Add support for Dilemma Max (4x6_4) (#22064)
* tentatively add dilemma 4x6_4 WIP untested 
PR by Casuanoob.

Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-10-01 18:55:54 +01:00
フィルターペーパー
8813bdf5dd Remove rosetta instructions for Apple Silicon (#22174) 2023-09-30 22:33:57 -07:00
Brian Low
c23d873e1a keyboards: Add support for Sofle Choc (#16736)
Co-developed-by: Brian Low <github@brianlow.com>
Co-developed-by: duese <duese@users.noreply.github.com>

Co-authored-by: Thomas Weißschuh <thomas@t-8ch.de>
2023-09-30 19:15:47 +01:00
Andrew Kannan
b404d5e9e4 Add Brutalv2 60 Keyboard (#22094)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2023-09-29 19:43:40 -07:00
Moritz Plattner
cfb4bb9b98 teleport/native: switch from wrongly used user to kb function, boost matrix scan rate (#21172)
* enable LTO

* change from _user to _kb function

* switch matrix io delay to nops, add opt=3 for higher scan rates

* disable console which was enabled for testing but collides with endpoint used by VIA

* switched from opt=3 to opt=2

* Update keyboards/teleport/native/native.c

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

* slightly upped debounce, as some testers had chatter with async + default debounce

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2023-09-29 12:19:03 +01:00
James Young
ab1e851e7d 4pplet Eagle/Viper Rep Rev.A Layout Additions II (#22161) 2023-09-29 00:30:59 -07:00
DOIO2022
5626a9282c Add KB12 keyboard (#21605)
Co-authored-by: Pablo Martínez <58857054+elpekenin@users.noreply.github.com>
Co-authored-by: Less/Rikki <86894501+lesshonor@users.noreply.github.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-09-28 23:42:45 -07:00
DUILCHOI
daea202bfd add linworks fave60 (#20796)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Ryan <fauxpark@gmail.com>
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
2023-09-28 23:39:15 -07:00
James Young
f214ee7f3a Rura66 Layout Data (#22155)
* Friendly-format `info.json`

[style]

* Update layout data

- separate keyboard halves
- add vertical stagger

[refactor]
2023-09-28 21:55:14 -07:00
James Young
0edc68f7cd HnahKB Freyr Layout Additions (#22150)
* Add layout/matrix diagram

[docs]

* Add `LAYOUT_tkl_ansi_split_bs_rshift`

[enhancement]

* Add `LAYOUT_tkl_ansi_tsangan_split_bs_rshift`

[enhancement]

* Add `LAYOUT_tkl_ansi_tsangan`

[enhancement]

* Add `LAYOUT_tkl_ansi_wkl_split_bs_rshift`

[enhancement]

* Add `LAYOUT_tkl_ansi_wkl`

[enhancement]

* Add `LAYOUT_tkl_iso_split_bs_rshift`

[enhancement]

* Add `LAYOUT_tkl_iso_tsangan_split_bs_rshift`

[enhancement]

* Add `LAYOUT_tkl_iso_tsangan`

[enhancement]

* Add `LAYOUT_tkl_iso_wkl_split_bs_rshift`

[enhancement]

* Add `LAYOUT_tkl_iso_wkl`

[enhancement]

* Extend Community Layout support

Add as supported layouts:

- `tkl_ansi_split_bs_rshift`
- `tkl_ansi_tsangan`
- `tkl_ansi_tsangan_split_bs_rshift`
- `tkl_iso_split_bs_rshift`
- `tkl_iso_tsangan`
- `tkl_iso_tsangan_split_bs_rshift`

[enhancement]
2023-09-28 21:34:30 -07:00
Nick Brassel
c5706ef791 Allow for qmk mass-compile all:<keymap> (#22116)
Co-authored-by: Joel Challis <git@zvecr.com>
2023-09-29 06:48:20 +10:00
Nick Brassel
fb0c64a567 Allow inline generation of compile_commands.json while doing a qmk compile, using --compiledb (#21549) 2023-09-28 11:48:58 +01:00
Joel Challis
0ecb03ad47 Drop V2 production updates (#22147) 2023-09-27 03:57:57 +01:00
Joel Challis
25c850e762 Add support for YMD75 V4 - ISO (#22128) 2023-09-27 00:49:07 +01:00
Joel Challis
351b5cd2cd Initial support for CSTM80 (#22137) 2023-09-27 00:48:42 +01:00
Idan Kamara
ca9664b1ac [Keyboard] Add spankbd, 3x5+3 split keyboard (#22003) 2023-09-26 12:06:18 -06:00
Duncan Sutherland
46c1e7351e rastersoft/minitkl layout corrections (#22130) 2023-09-25 23:17:47 -07:00
Yanfei Guo
17ae28f0e4 Fix doc for programmable buttons. (#22136)
Co-authored-by: Yanfei Guo <yguo@anl.gov>
2023-09-25 23:17:20 -07:00
Nick Brassel
8d9c770a81 Fix entry into bootloader for STM32G431. (#22138) 2023-09-26 12:20:32 +10:00
Ikko Eltociear Ashimine
6eb2e43a8d Fix typo in oled_driver (#22134)
betwen -> between
2023-09-25 20:40:27 +01:00
Joy Lee
2fad45132f Added more rgb effects for rpk-001 keyboard (#22120) 2023-09-25 10:45:48 +01:00
spbgzh
538978b782 Add zoom98 (#22062)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Joel Challis <git@zvecr.com>
2023-09-24 22:13:00 -07:00
Ross Montsinger
7e923580a5 Add Palmetto PCB (#21955) 2023-09-24 20:33:55 -07:00
dependabot[bot]
0c4bd1ccdc Bump tj-actions/changed-files from 38 to 39 (#21923)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-25 13:00:34 +10:00
344 changed files with 18354 additions and 519 deletions

View File

@@ -35,7 +35,7 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v38
uses: tj-actions/changed-files@v39
- name: Run qmk formatters
shell: 'bash {0}'

View File

@@ -27,7 +27,7 @@ jobs:
- name: Get changed files
id: file_changes
uses: tj-actions/changed-files@v38
uses: tj-actions/changed-files@v39
- name: Print info
run: |
@@ -74,31 +74,10 @@ jobs:
fi
exit $exit_code
- name: Verify at most one added keyboard
- name: Verify keyboard aliases
if: always()
shell: 'bash {0}'
run: |
git reset --hard
git clean -xfd
# Get the keyboard list and count for the target branch
git checkout -f ${{ github.base_ref }}
git pull --ff-only
QMK_KEYBOARDS_BASE=$(qmk list-keyboards)
QMK_KEYBOARDS_BASE_COUNT=$(qmk list-keyboards | wc -l)
# Get the keyboard list and count for the PR
git checkout -f ${{ github.head_ref }}
git merge --no-commit --squash ${{ github.base_ref }}
QMK_KEYBOARDS_PR=$(qmk list-keyboards)
QMK_KEYBOARDS_PR_COUNT=$(qmk list-keyboards | wc -l)
echo "::group::Keyboards changes in this PR"
diff -d -U 0 <(echo "$QMK_KEYBOARDS_BASE") <(echo "$QMK_KEYBOARDS_PR") | grep -vE '^(---|\+\+\+|@@)' | sed -e 's@^-@Removed: @g' -e 's@^+@ Added: @g'
echo "::endgroup::"
if [[ $QMK_KEYBOARDS_PR_COUNT -gt $(($QMK_KEYBOARDS_BASE_COUNT + 1)) ]]; then
echo "More than one keyboard added in this PR -- see the PR Checklist."
echo "::error::More than one keyboard added in this PR -- see the PR Checklist."
exit 1
fi
qmk ci-validate-aliases

3
.gitignore vendored
View File

@@ -108,5 +108,6 @@ compile_commands.json
.clangd/
.cache/
# VIA(L) json files that don't belong in QMK repo
# VIA(L) files that don't belong in QMK repo
via*.json
/keyboards/**/keymaps/vial/*

View File

@@ -4,6 +4,13 @@
// "target": "<keyboard_folder>"
// }
//
/* This list of aliases is for testing purposes -- ensures "linked list" recursive traversal works correctly. */
"_test_a": { "target": "_test_b" },
"_test_b": { "target": "_test_c" },
"_test_c": { "target": "planck/rev6" },
/* The main list of aliases for moved keyboards within QMK. */
"2_milk": {
"target": "spaceman/2_milk"
},
@@ -35,7 +42,7 @@
"target": "amjkeyboard/amjpad"
},
"angel64": {
"target": "angel64/alpha"
"target": "kakunpc/angel64/alpha"
},
"ashpil/modelm_usbc": {
"target": "ibm/model_m/ashpil_usbc"
@@ -47,10 +54,10 @@
"target": "viktus/at101_bh"
},
"atom47/rev2": {
"target": "maartenwut/atom47/rev2"
"target": "evyd13/atom47/rev2"
},
"atom47/rev3": {
"target": "maartenwut/atom47/rev3"
"target": "evyd13/atom47/rev3"
},
"bakeneko60": {
"target": "kkatano/bakeneko60"
@@ -65,7 +72,7 @@
"target": "bear_face/v1"
},
"bm16a": {
"target": "kprepublic/bm16a"
"target": "kprepublic/bm16a/v1"
},
"bm16s": {
"target": "kprepublic/bm16s"
@@ -77,16 +84,16 @@
"target": "kprepublic/bm43a"
},
"bm60poker": {
"target": "kprepublic/bm60poker"
"target": "kprepublic/bm60hsrgb_poker/rev1"
},
"bm60rgb": {
"target": "kprepublic/bm60rgb"
"target": "kprepublic/bm60hsrgb/rev1"
},
"bm60rgb_iso": {
"target": "kprepublic/bm60rgb_iso"
"target": "kprepublic/bm60hsrgb_iso/rev1"
},
"bm68rgb": {
"target": "kprepublic/bm68rgb"
"target": "kprepublic/bm68hsrgb/rev1"
},
"bpiphany/pegasushoof": {
"target": "bpiphany/pegasushoof/2013"
@@ -140,7 +147,10 @@
"target": "jagdpietr/drakon"
},
"durgod/k320": {
"target": "durgod/k3x0/k320"
"target": "durgod/k320/base"
},
"durgod/k3x0/k320": {
"target": "durgod/k320/base"
},
"durgod/hades": {
"target": "durgod/dgk6x/hades_ansi"
@@ -269,7 +279,7 @@
"target": "idb/idb_60"
},
"idobo": {
"target": "idobao/id75"
"target": "idobao/id75/v1"
},
"jacky_studio/piggy60": {
"target": "jacky_studio/piggy60/rev1"
@@ -401,7 +411,7 @@
"target": "mechlovin/adelais/rgb_led/rev1"
},
"mechlovin/adelais/standard_led": {
"target": "mechlovin/adelais/standard_led/rev2"
"target": "mechlovin/adelais/standard_led/arm/rev2"
},
"mechlovin/delphine": {
"target": "mechlovin/delphine/mono_led"
@@ -455,10 +465,10 @@
"target": "pabile/p20/ver1"
},
"pancake/feather": {
"target": "spaceman/pancake/feather"
"target": "spaceman/pancake/rev1/feather"
},
"pancake/promicro": {
"target": "spaceman/pancake/promicro"
"target": "spaceman/pancake/rev1/promicro"
},
"peiorisboards/ixora": {
"target": "coarse/ixora"
@@ -467,7 +477,7 @@
"target": "dm9records/plaid"
},
"plain60": {
"target": "maartenwut/plain60"
"target": "evyd13/plain60"
},
"ploopyco/trackball": {
"target": "ploopyco/trackball/rev1_005"
@@ -503,10 +513,10 @@
"target": "wilba_tech/rama_works_u80_a"
},
"ramonimbao/herringbone": {
"target": "ramonimbao/herringbone/v1"
"target": "rmi_kb/herringbone/v1"
},
"ramonimbao/mona": {
"target": "ramonimbao/mona/v1"
"target": "rmi_kb/mona/v1"
},
"rgbkb/pan": {
"target": "rgbkb/pan/rev1/32a"
@@ -542,10 +552,10 @@
"target": "tkw/stoutgat/v1"
},
"suihankey": {
"target": "suihankey/split/alpha"
"target": "kakunpc/suihankey/split/alpha"
},
"ta65": {
"target": "maartenwut/ta65"
"target": "evyd13/ta65"
},
"tartan": {
"target": "dm9records/tartan"
@@ -563,13 +573,13 @@
"target": "matthewdias/txuu"
},
"underscore33": {
"target": "underscore33/rev1"
"target": "tominabox1/underscore33/rev1"
},
"vinta": {
"target": "coarse/vinta"
},
"wasdat": {
"target": "maartenwut/wasdat"
"target": "evyd13/wasdat"
},
"westfoxtrot/cypher": {
"target": "westfoxtrot/cypher/rev1"
@@ -581,10 +591,10 @@
"target": "xiudi/xd002"
},
"xd004": {
"target": "xiudi/xd004"
"target": "xiudi/xd004/v1"
},
"xd60": {
"target": "xiudi/xd60"
"target": "xiudi/xd60/rev2"
},
"xd68": {
"target": "xiudi/xd68"
@@ -831,7 +841,7 @@
"target": "kagizaraya/halberd"
},
"handwired/hillside/0_1": {
"target": "handwired/hillside/48"
"target": "hillside/48/0_1"
},
"hecomi/alpha": {
"target": "takashiski/hecomi/alpha"
@@ -843,10 +853,10 @@
"target": "bpiphany/hid_liber"
},
"id67/default_rgb": {
"target": "idobao/id67/default_rgb"
"target": "idobao/id67"
},
"id67/rgb": {
"target": "idobao/id67/rgb"
"target": "idobao/id67"
},
"id80": {
"target": "idobao/id80/v2/ansi"
@@ -1236,7 +1246,7 @@
"target": "marksard/treadstone48/rev2"
},
"tronguylabs/m122_3270": {
"target": "ibm/model_m_122/m122_3270"
"target": "ibm/model_m_122/m122_3270/teensy"
},
"ua62": {
"target": "nacly/ua62"
@@ -1290,7 +1300,7 @@
"target": "ydkb/yd68"
},
"ymd75": {
"target": "ymdk/ymd75"
"target": "ymdk/ymd75/rev1"
},
"ymd96": {
"target": "ymdk/ymd96"

View File

@@ -6,7 +6,7 @@ The QMK CLI makes building and working with QMK keyboards easier. We have provid
### Requirements :id=requirements
QMK requires Python 3.6 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
QMK requires Python 3.7 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
### Install Using Homebrew (macOS, some Linux) :id=install-using-homebrew
@@ -20,7 +20,7 @@ qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build
### Install Using pip :id=install-using-easy_install-or-pip
If your system is not listed above you can install QMK manually. First ensure that you have Python 3.6 (or later) installed and have installed pip. Then install QMK with this command:
If your system is not listed above you can install QMK manually. First ensure that you have Python 3.7 (or later) installed and have installed pip. Then install QMK with this command:
```
python3 -m pip install qmk

View File

@@ -44,7 +44,7 @@ def hello(cli):
First we import the `cli` object from `milc`. This is how we interact with the user and control the script's behavior. We use `@cli.argument()` to define a command line flag, `--name`. This also creates a configuration variable named `hello.name` (and the corresponding `user.name`) which the user can set so they don't have to specify the argument. The `cli.subcommand()` decorator designates this function as a subcommand. The name of the subcommand will be taken from the name of the function.
Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
Once inside our function we find a typical "Hello, World!" program. We use `cli.log` to access the underlying [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects), whose behavior is user controllable. We also access the value for name supplied by the user as `cli.config.hello.name`. The value for `cli.config.hello.name` will be determined by looking at the `--name` argument supplied by the user, if not provided it will use the value in the `qmk.ini` config file, and if neither of those is provided it will fall back to the default supplied in the `cli.argument()` decorator.
# User Interaction
@@ -56,13 +56,13 @@ There are two main methods for outputting text in a subcommand- `cli.log` and `c
You can use special tokens to colorize your text, to make it easier to understand the output of your program. See [Colorizing Text](#colorizing-text) below.
Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.6/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
Both of these methods support built-in string formatting using python's [printf style string format operations](https://docs.python.org/3.7/library/stdtypes.html#old-string-formatting). You can use tokens such as `%s` and `%d` within your text strings then pass the values as arguments. See our Hello, World program above for an example.
You should never use the format operator (`%`) directly, always pass values as arguments.
### Logging (`cli.log`)
The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.6/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
The `cli.log` object gives you access to a [Logger Object](https://docs.python.org/3.7/library/logging.html#logger-objects). We have configured our log output to show the user a nice emoji for each log level (or the log level name if their terminal does not support unicode.) This way the user can tell at a glance which messages are most important when something goes wrong.
The default log level is `INFO`. If the user runs `qmk -v <subcommand>` the default log level will be set to `DEBUG`.

View File

@@ -317,7 +317,7 @@ At the time of this writing our tests are not very comprehensive. Looking at the
## Integration Tests
Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.6/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
Integration tests can be found in `lib/python/qmk/tests/test_cli_commands.py`. This is where CLI commands are actually run and their overall behavior is verified. We use [`subprocess`](https://docs.python.org/3.7/library/subprocess.html#module-subprocess) to launch each CLI command and a combination of checking output and returncode to determine if the right thing happened.
## Unit Tests

View File

@@ -399,7 +399,7 @@ void oled_scroll_set_area(uint8_t start_line, uint8_t end_line);
// Sets scroll speed, 0-7, fastest to slowest. Default is three.
// Does not take effect until scrolling is either started or restarted
// the ssd1306 supports 8 speeds with the delay
// listed below betwen each frame of the scrolling effect
// listed below between each frame of the scrolling effect
// 0=2, 1=3, 2=4, 3=5, 4=25, 5=64, 6=128, 7=256
void oled_scroll_set_speed(uint8_t speed);

View File

@@ -2,7 +2,7 @@
Programmable Buttons are keys that have no predefined meaning. This means they can be processed on the host side by custom software without the operating system trying to interpret them.
The keycodes are emitted according to the HID Telephony Device page (`0x0B`), Programmable Button usage (`0x07`). On Linux (> 5.14) they are handled automatically and translated to `KEY_MACRO#` keycodes (up to `KEY_MACRO30`).
The keycodes are emitted according to the HID Telephony Device page (`0x0B`), Programmable Button usage (`0x09`). On Linux (> 5.14) they are handled automatically and translated to `KEY_MACRO#` keycodes (up to `KEY_MACRO30`).
?> Currently there is no known support in Windows or macOS. It may be possible to write a custom HID driver to receive these usages, but this is out of the scope of the QMK documentation.

View File

@@ -56,7 +56,7 @@ QMK maintains a Homebrew tap and formula which will automatically install the CL
You will need to install Homebrew. Follow the instructions on https://brew.sh.
!> **NOTE:** If you are using Apple Silicon, such as the M1, you will need to install a rosetta compatible version of Homebrew. This version does not override the base Homebrew. This can be done by running `arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"`. See here: [Rosetta-compatible Homebrew](https://stackoverflow.com/questions/64882584/how-to-run-the-homebrew-installer-under-rosetta-2-on-m1-macbook)
?> If you are using an Apple Silicon machine, the installation process will take significantly longer because GitHub actions do not have native runners to build binary packages for the ARM and AVR toolchains.
#### Installation
@@ -64,10 +64,6 @@ Install the QMK CLI by running:
brew install qmk/qmk/qmk
Install the QMK CLI on an Apple Silicon Mac by running:
arch -x86_64 brew install qmk/qmk/qmk
### ** Linux/WSL **
?> **Note for WSL users**: By default, the installation process will clone the QMK repository into your WSL home directory, but if you have cloned manually, ensure that it is located inside the WSL instance instead of the Windows filesystem (ie. not in `/mnt`), as accessing it is currently [extremely slow](https://github.com/microsoft/WSL/issues/4197).

View File

@@ -454,7 +454,7 @@ void oled_scroll_set_area(uint8_t start_line, uint8_t end_line);
// Sets scroll speed, 0-7, fastest to slowest. Default is three.
// Does not take effect until scrolling is either started or restarted
// the ssd1306 supports 8 speeds with the delay
// listed below betwen each frame of the scrolling effect
// listed below between each frame of the scrolling effect
// 0=2, 1=3, 2=4, 3=5, 4=25, 5=64, 6=128, 7=256
void oled_scroll_set_speed(uint8_t speed);

View File

@@ -41,6 +41,16 @@
},
"processor": "STM32F072",
"bootloader": "stm32-dfu",
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_tsangan_hhkb",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan"
],
"layouts": {
"LAYOUT_all": {
"layout": [
@@ -115,6 +125,75 @@
{"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "#", "matrix": [1, 1], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
{"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
{"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
{"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
{"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
{"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
{"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
{"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
{"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
{"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
{"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
{"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
{"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
{"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
{"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
{"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
{"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
{"label": "|", "matrix": [5, 6], "x": 13.5, "y": 1, "w": 1.5},
{"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
{"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
{"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
{"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
{"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
{"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
{"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
{"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
{"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
{"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
{"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
{"label": "\"", "matrix": [5, 5], "x": 11.75, "y": 2},
{"label": "Enter", "matrix": [7, 6], "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
{"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
{"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
{"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
{"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
{"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
{"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
{"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
{"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
{"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
{"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
{"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
{"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.25},
{"label": "Space", "matrix": [9, 3], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
{"label": "Menu", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
{"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
@@ -186,6 +265,74 @@
{"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "#", "matrix": [1, 1], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
{"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
{"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
{"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
{"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
{"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
{"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
{"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
{"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
{"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
{"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
{"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
{"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
{"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
{"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
{"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
{"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
{"label": "|", "matrix": [5, 6], "x": 13.5, "y": 1, "w": 1.5},
{"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
{"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
{"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
{"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
{"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
{"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
{"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
{"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
{"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
{"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
{"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
{"label": "\"", "matrix": [5, 5], "x": 11.75, "y": 2},
{"label": "Enter", "matrix": [7, 6], "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 2.25},
{"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
{"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
{"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
{"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
{"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
{"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
{"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
{"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
{"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
{"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
{"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [9, 0], "x": 1.5, "y": 4},
{"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [9, 3], "x": 4, "y": 4, "w": 7},
{"label": "Alt", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4},
{"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
@@ -323,6 +470,288 @@
{"label": "GUI", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [9, 5], "x": 12.5, "y": 4}
]
},
"LAYOUT_60_iso": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
{"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
{"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
{"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
{"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
{"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
{"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
{"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
{"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
{"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
{"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
{"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
{"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
{"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
{"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
{"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
{"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
{"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
{"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
{"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
{"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
{"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
{"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
{"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
{"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
{"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
{"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
{"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
{"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
{"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
{"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
{"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
{"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
{"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
{"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
{"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
{"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
{"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
{"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
{"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
{"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
{"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
{"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.25},
{"label": "Space", "matrix": [9, 3], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
{"label": "Menu", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
{"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
{"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
{"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
{"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
{"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
{"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
{"label": "|", "matrix": [1, 6], "x": 13, "y": 0},
{"label": "Backspace", "matrix": [3, 6], "x": 14, "y": 0},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
{"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
{"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
{"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
{"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
{"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
{"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
{"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
{"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
{"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
{"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
{"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
{"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
{"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
{"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
{"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
{"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
{"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
{"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
{"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
{"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
{"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
{"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
{"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
{"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
{"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
{"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
{"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
{"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
{"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
{"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
{"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
{"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
{"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
{"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
{"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
{"label": "Fn", "matrix": [9, 6], "x": 14, "y": 3},
{"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [9, 0], "x": 1.25, "y": 4, "w": 1.25},
{"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.25},
{"label": "Space", "matrix": [9, 3], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [9, 4], "x": 10, "y": 4, "w": 1.25},
{"label": "Menu", "matrix": [8, 5], "x": 11.25, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4, "w": 1.25},
{"label": "Ctrl", "matrix": [8, 6], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
{"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
{"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
{"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
{"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
{"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
{"label": "Backspace", "matrix": [3, 6], "x": 13, "y": 0, "w": 2},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
{"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
{"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
{"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
{"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
{"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
{"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
{"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
{"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
{"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
{"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
{"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
{"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
{"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
{"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
{"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
{"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
{"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
{"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
{"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
{"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
{"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
{"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
{"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
{"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
{"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
{"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
{"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
{"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
{"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
{"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
{"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
{"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
{"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
{"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
{"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [9, 0], "x": 1.5, "y": 4},
{"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [9, 3], "x": 4, "y": 4, "w": 7},
{"label": "Alt", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4},
{"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [1, 0], "x": 1, "y": 0},
{"label": "\"", "matrix": [0, 1], "x": 2, "y": 0},
{"label": "\u00a3", "matrix": [1, 1], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 2], "x": 4, "y": 0},
{"label": "%", "matrix": [1, 2], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 3], "x": 6, "y": 0},
{"label": "&", "matrix": [1, 3], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 4], "x": 8, "y": 0},
{"label": "(", "matrix": [1, 4], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 5], "x": 10, "y": 0},
{"label": "_", "matrix": [1, 5], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 6], "x": 12, "y": 0},
{"label": "|", "matrix": [1, 6], "x": 13, "y": 0},
{"label": "Backspace", "matrix": [3, 6], "x": 14, "y": 0},
{"label": "Tab", "matrix": [2, 0], "x": 0, "y": 1, "w": 1.5},
{"label": "Q", "matrix": [3, 0], "x": 1.5, "y": 1},
{"label": "W", "matrix": [2, 1], "x": 2.5, "y": 1},
{"label": "E", "matrix": [3, 1], "x": 3.5, "y": 1},
{"label": "R", "matrix": [2, 2], "x": 4.5, "y": 1},
{"label": "T", "matrix": [3, 2], "x": 5.5, "y": 1},
{"label": "Y", "matrix": [2, 3], "x": 6.5, "y": 1},
{"label": "U", "matrix": [3, 3], "x": 7.5, "y": 1},
{"label": "I", "matrix": [2, 4], "x": 8.5, "y": 1},
{"label": "O", "matrix": [3, 4], "x": 9.5, "y": 1},
{"label": "P", "matrix": [2, 5], "x": 10.5, "y": 1},
{"label": "{", "matrix": [3, 5], "x": 11.5, "y": 1},
{"label": "}", "matrix": [2, 6], "x": 12.5, "y": 1},
{"label": "Caps Lock", "matrix": [4, 0], "x": 0, "y": 2, "w": 1.75},
{"label": "A", "matrix": [5, 0], "x": 1.75, "y": 2},
{"label": "S", "matrix": [4, 1], "x": 2.75, "y": 2},
{"label": "D", "matrix": [5, 1], "x": 3.75, "y": 2},
{"label": "F", "matrix": [4, 2], "x": 4.75, "y": 2},
{"label": "G", "matrix": [5, 2], "x": 5.75, "y": 2},
{"label": "H", "matrix": [4, 3], "x": 6.75, "y": 2},
{"label": "J", "matrix": [5, 3], "x": 7.75, "y": 2},
{"label": "K", "matrix": [4, 4], "x": 8.75, "y": 2},
{"label": "L", "matrix": [5, 4], "x": 9.75, "y": 2},
{"label": ":", "matrix": [4, 5], "x": 10.75, "y": 2},
{"label": "@", "matrix": [5, 5], "x": 11.75, "y": 2},
{"label": "~", "matrix": [4, 6], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [7, 6], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [6, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [7, 0], "x": 1.25, "y": 3},
{"label": "Z", "matrix": [6, 1], "x": 2.25, "y": 3},
{"label": "X", "matrix": [7, 1], "x": 3.25, "y": 3},
{"label": "C", "matrix": [6, 2], "x": 4.25, "y": 3},
{"label": "V", "matrix": [7, 2], "x": 5.25, "y": 3},
{"label": "B", "matrix": [6, 3], "x": 6.25, "y": 3},
{"label": "N", "matrix": [7, 3], "x": 7.25, "y": 3},
{"label": "M", "matrix": [6, 4], "x": 8.25, "y": 3},
{"label": "<", "matrix": [7, 4], "x": 9.25, "y": 3},
{"label": ">", "matrix": [6, 5], "x": 10.25, "y": 3},
{"label": "?", "matrix": [7, 5], "x": 11.25, "y": 3},
{"label": "Shift", "matrix": [6, 6], "x": 12.25, "y": 3, "w": 1.75},
{"label": "Fn", "matrix": [9, 6], "x": 14, "y": 3},
{"label": "Ctrl", "matrix": [8, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [9, 0], "x": 1.5, "y": 4},
{"label": "Alt", "matrix": [9, 1], "x": 2.5, "y": 4, "w": 1.5},
{"label": "Space", "matrix": [9, 3], "x": 4, "y": 4, "w": 7},
{"label": "Alt", "matrix": [8, 5], "x": 11, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [9, 5], "x": 12.5, "y": 4},
{"label": "Ctrl", "matrix": [8, 6], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -2,7 +2,7 @@
```
┌───────┐
2u Backspace │36?
2u Backspace │36
└───────┘
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│00 │10 │01 │11 │02 │12 │03 │13 │04 │14 │05 │15 │06 │16 │36 │
@@ -19,6 +19,6 @@
│60 │ 2.25u LShift 2.75u RShift │66 │
└────────┘ └──────────┘
┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
│80 │90 │91 │93 │85 │95 │86 │ Tsangan/WKL/HHKB
│80 │90 │91 │93 │85 │95 │86 │ Tsangan/HHKB
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
```

View File

@@ -0,0 +1,25 @@
/* Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
*
* 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 "quantum.h"
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
led_state.caps_lock ? rgblight_setrgb_at(0xAA,0xAA,0xAA,0) : rgblight_setrgb_at(0x00,0x00,0x00,0) ;
}
return res;
}

View File

@@ -0,0 +1,33 @@
/*
Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
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 LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
#define RGBLED_NUM 1
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WEAR_LEVELING_LOGICAL_SIZE 4096
#define WEAR_LEVELING_BACKING_SIZE 8192

View File

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

View File

@@ -0,0 +1,136 @@
{
"keyboard_name": "Themis 87H Rev. Alpha",
"usb": {
"pid": "0x5448",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["A8" ,"C9" ,"C8" ,"B14","B12","B10","B1" ,"B0" ,"A7" ,"A6" ,"A5" ,"A4" ,"C5" ,"C7" ,"B3" ,"A2" ,"C12","D2" ],
"rows": ["A15","A10","C6" ,"C4" ,"A3" ,"A1" ,"C11","C10","B4"]
},
"features": {
"bootmagic": true,
"lto": true,
"mousekey": true,
"extrakey": true,
"console": false,
"backlight": false,
"rgblight": true,
"audio": false,
"encoder": false,
"nkro": true
},
"diode_direction": "COL2ROW",
"ws2812": {
"pin": "B15"
},
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"community_layouts": ["tkl_ansi"],
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{"label":"Escape", "matrix": [0, 0], "x": 0, "y": 0},
{"label":"F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label":"F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label":"F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label":"F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label":"F5", "matrix": [0, 5], "x": 6.5, "y": 0},
{"label":"F6", "matrix": [0, 6], "x": 7.5, "y": 0},
{"label":"F7", "matrix": [0, 7], "x": 8.5, "y": 0},
{"label":"F8", "matrix": [0, 8], "x": 9.5, "y": 0},
{"label":"F9", "matrix": [0, 9], "x": 11, "y": 0},
{"label":"F10", "matrix": [0, 10], "x": 12, "y": 0},
{"label":"F11", "matrix": [0, 11], "x": 13, "y": 0},
{"label":"F12", "matrix": [0, 12], "x": 14, "y": 0},
{"label":"Print Screen", "matrix": [6, 14], "x": 15.25, "y": 0},
{"label":"Scroll Lock", "matrix": [6, 17], "x": 16.25, "y": 0},
{"label":"Pause", "matrix": [6, 16], "x": 17.25, "y": 0},
{"label":"`~", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label":"1!", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label":"2@", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label":"3#", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label":"4$", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label":"5%", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label":"6^", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label":"7&", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label":"8*", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label":"9(", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label":"0)", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label":"-_", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label":"=+", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label":"Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label":"Insert", "matrix": [7, 14], "x": 15.25, "y": 1.25},
{"label":"Home", "matrix": [7, 17], "x": 16.25, "y": 1.25},
{"label":"Page Up","matrix": [7, 16], "x": 17.25, "y": 1.25},
{"label":"Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label":"Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label":"W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label":"E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label":"R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label":"T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label":"Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label":"U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label":"I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label":"O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label":"P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label":"[{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label":"]}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label":"\\|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label":"Delete", "matrix": [8, 14], "x": 15.25, "y": 2.25},
{"label":"End", "matrix": [8, 17], "x": 16.25, "y": 2.25},
{"label":"Page Down", "matrix": [8, 16], "x": 17.25, "y": 2.25},
{"label":"Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label":"A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label":"S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label":"D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label":"F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label":"G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label":"H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label":"J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label":"K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label":"L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label":";:", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label":"\'\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label":"Enter", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
{"label":"Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label":"Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label":"X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label":"C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label":"V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label":"B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label":"N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label":"M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label":",<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label":".>", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label":"/?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label":"Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
{"label":"Up", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label":"LCtrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
{"label":"Lwin", "matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
{"label":"LAlt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
{"label":"Space", "matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
{"label":"RAlt", "matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
{"label":"RWin", "matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
{"label":"MO(1)", "matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
{"label":"RCtrl", "matrix": [5, 12], "x": 13.75, "y": 5.25, "w": 1.25},
{"label":"Left", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label":"Down", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label":"Right", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
}
}
}

View File

@@ -0,0 +1,37 @@
/*
Copyright 2020 Álvaro "Gondolindrim" Volpato <alvaro.volpato@usp.br>
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_tkl_ansi(
KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN ,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_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, KC_UP ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi(
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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,37 @@
/*
Copyright 2020 Álvaro "Gondolindrim" Volpato <alvaro.volpato@usp.br>
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_tkl_ansi(
KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN ,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_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, KC_UP ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, MO(1) , KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi(
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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,25 @@
/* Copyright 2020 QMK
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_PWM_USE_ADVANCED
#define STM32_PWM_USE_ADVANCED TRUE
#undef STM32_PWM_USE_TIM1
#define STM32_PWM_USE_TIM1 TRUE

View File

View File

@@ -0,0 +1,25 @@
/* Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
*
* 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 "quantum.h"
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
led_state.caps_lock ? rgblight_setrgb_at(0xAA,0xAA,0xAA,0) : rgblight_setrgb_at(0x00,0x00,0x00,0) ;
}
return res;
}

View File

@@ -0,0 +1,33 @@
/*
Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
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 LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
#define RGBLED_NUM 1
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WEAR_LEVELING_LOGICAL_SIZE 4096
#define WEAR_LEVELING_BACKING_SIZE 8192

View File

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

View File

@@ -0,0 +1,135 @@
{
"keyboard_name": "Themis 87H-T-SC Rev. Alpha",
"usb": {
"pid": "0x5449",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["A8" ,"C9" ,"C8" ,"B14","B12","B10","B1" ,"B0" ,"A7" ,"A6" ,"A5" ,"A4" ,"C5" ,"C7" ,"B3" ,"A2" ,"C12","D2" ],
"rows": ["A15","A10","C6" ,"C4" ,"A3" ,"A1" ,"C11","C10","B4"]
},
"features": {
"bootmagic": true,
"lto": true,
"mousekey": true,
"extrakey": true,
"console": false,
"backlight": false,
"rgblight": true,
"audio": false,
"encoder": false,
"nkro": true
},
"diode_direction": "COL2ROW",
"ws2812": {
"pin": "B15"
},
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"community_layouts": ["tkl_ansi_tsangan"],
"layouts": {
"LAYOUT_tkl_ansi_tsangan": {
"layout": [
{"label":"Escape", "matrix": [0, 0], "x": 0, "y": 0},
{"label":"F1", "matrix": [0, 1], "x": 2, "y": 0},
{"label":"F2", "matrix": [0, 2], "x": 3, "y": 0},
{"label":"F3", "matrix": [0, 3], "x": 4, "y": 0},
{"label":"F4", "matrix": [0, 4], "x": 5, "y": 0},
{"label":"F5", "matrix": [0, 6], "x": 6.5, "y": 0},
{"label":"F6", "matrix": [0, 7], "x": 7.5, "y": 0},
{"label":"F7", "matrix": [0, 8], "x": 8.5, "y": 0},
{"label":"F8", "matrix": [0, 9], "x": 9.5, "y": 0},
{"label":"F9", "matrix": [0, 10], "x": 11, "y": 0},
{"label":"F10", "matrix": [0, 11], "x": 12, "y": 0},
{"label":"F11", "matrix": [0, 12], "x": 13, "y": 0},
{"label":"F12", "matrix": [0, 13], "x": 14, "y": 0},
{"label":"Print Screen", "matrix": [6, 14], "x": 15.25, "y": 0},
{"label":"Scroll Lock", "matrix": [6, 17], "x": 16.25, "y": 0},
{"label":"Pause", "matrix": [6, 16], "x": 17.25, "y": 0},
{"label":"`~", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label":"1!", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label":"2@", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label":"3#", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label":"4$", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label":"5%", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label":"6^", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label":"7&", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label":"8*", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label":"9(", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label":"0)", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label":"-_", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label":"=+", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label":"Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label":"Insert", "matrix": [7, 14], "x": 15.25, "y": 1.25},
{"label":"Home", "matrix": [7, 17], "x": 16.25, "y": 1.25},
{"label":"Page Up","matrix": [7, 16], "x": 17.25, "y": 1.25},
{"label":"Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label":"Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label":"W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label":"E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label":"R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label":"T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label":"Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label":"U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label":"I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label":"O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label":"P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label":"[{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label":"]}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label":"\\|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label":"Delete", "matrix": [8, 14], "x": 15.25, "y": 2.25},
{"label":"End", "matrix": [8, 17], "x": 16.25, "y": 2.25},
{"label":"Page Down", "matrix": [8, 16], "x": 17.25, "y": 2.25},
{"label":"Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label":"A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label":"S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label":"D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label":"F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label":"G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label":"H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label":"J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label":"K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label":"L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label":";:", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label":"\'\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label":"Enter", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
{"label":"Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label":"Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label":"X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label":"C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label":"V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label":"B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label":"N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label":"M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label":",<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label":".>", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label":"/?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label":"Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
{"label":"Up", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label":"LCtrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label":"Lwin", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label":"LAlt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label":"Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 6.25},
{"label":"RAlt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
{"label":"RWin", "matrix": [5, 11], "x": 12.5, "y": 5.25},
{"label":"RCtrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
{"label":"Left", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label":"Down", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label":"Right", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
}
}
}

View File

@@ -0,0 +1,37 @@
/*
Copyright 2023 Gondolindrim
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_ansi_tsangan(
KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN ,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_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, KC_UP ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi_tsangan(
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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,37 @@
/*
Copyright 2023 Gondolindrim
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_ansi_tsangan(
KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN ,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_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, KC_UP ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi_tsangan(
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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 @@
VIA_ENABLE = yes

View File

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

View File

View File

@@ -0,0 +1,25 @@
/* Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
*
* 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 "quantum.h"
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
led_state.caps_lock ? rgblight_setrgb_at(0xAA,0xAA,0xAA,0) : rgblight_setrgb_at(0x00,0x00,0x00,0) ;
}
return res;
}

View File

@@ -0,0 +1,33 @@
/*
Copyright 2023 Gondolindrim <gondolindrim@acheronproject.com>
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 LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
#define RGBLED_NUM 1
#define WS2812_PWM_COMPLEMENTARY_OUTPUT
#define WS2812_PWM_DRIVER PWMD1
#define WS2812_PWM_CHANNEL 3
#define WS2812_PWM_PAL_MODE 1
#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
#define WS2812_DMA_CHANNEL 6
#define WEAR_LEVELING_LOGICAL_SIZE 4096
#define WEAR_LEVELING_BACKING_SIZE 8192

View File

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

View File

@@ -0,0 +1,137 @@
{
"keyboard_name": "Themis 88H-T-SC Rev. Alpha",
"usb": {
"pid": "0x5450",
"device_version": "0.0.1"
},
"matrix_pins": {
"cols": ["A8" ,"C9" ,"C8" ,"B14","B12","B10","B1" ,"B0" ,"A7" ,"A6" ,"A5" ,"A4" ,"C5" ,"C7" ,"B3" ,"A2" ,"C12","D2" ],
"rows": ["A15","A10","C6" ,"C4" ,"A3" ,"A1" ,"C11","C10","B4"]
},
"features": {
"bootmagic": true,
"lto": true,
"mousekey": true,
"extrakey": true,
"console": false,
"backlight": false,
"rgblight": true,
"audio": false,
"encoder": false,
"nkro": true
},
"diode_direction": "COL2ROW",
"ws2812": {
"pin": "B15"
},
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"community_layouts": ["tkl_f13_ansi_tsangan"],
"layouts": {
"LAYOUT_tkl_f13_ansi_tsangan": {
"layout": [
{"label":"Escape", "matrix": [0, 0], "x": 0, "y": 0},
{"label":"F1", "matrix": [0, 1], "x": 1.25, "y": 0},
{"label":"F2", "matrix": [0, 2], "x": 2.25, "y": 0},
{"label":"F3", "matrix": [0, 3], "x": 3.25, "y": 0},
{"label":"F4", "matrix": [0, 4], "x": 4.25, "y": 0},
{"label":"F5", "matrix": [0, 5], "x": 5.5, "y": 0},
{"label":"F6", "matrix": [0, 6], "x": 6.5, "y": 0},
{"label":"F7", "matrix": [0, 7], "x": 7.5, "y": 0},
{"label":"F8", "matrix": [0, 8], "x": 8.5, "y": 0},
{"label":"F9", "matrix": [0, 9], "x": 9.75, "y": 0},
{"label":"F10", "matrix": [0, 10], "x": 10.75, "y": 0},
{"label":"F11", "matrix": [0, 11], "x": 11.75, "y": 0},
{"label":"F12", "matrix": [0, 12], "x": 12.75, "y": 0},
{"label":"F13", "matrix": [0, 13], "x": 14, "y": 0},
{"label":"Print Screen", "matrix": [6, 14], "x": 15.25, "y": 0},
{"label":"Scroll Lock", "matrix": [6, 17], "x": 16.25, "y": 0},
{"label":"Pause", "matrix": [6, 16], "x": 17.25, "y": 0},
{"label":"`~", "matrix": [1, 0], "x": 0, "y": 1.25},
{"label":"1!", "matrix": [1, 1], "x": 1, "y": 1.25},
{"label":"2@", "matrix": [1, 2], "x": 2, "y": 1.25},
{"label":"3#", "matrix": [1, 3], "x": 3, "y": 1.25},
{"label":"4$", "matrix": [1, 4], "x": 4, "y": 1.25},
{"label":"5%", "matrix": [1, 5], "x": 5, "y": 1.25},
{"label":"6^", "matrix": [1, 6], "x": 6, "y": 1.25},
{"label":"7&", "matrix": [1, 7], "x": 7, "y": 1.25},
{"label":"8*", "matrix": [1, 8], "x": 8, "y": 1.25},
{"label":"9(", "matrix": [1, 9], "x": 9, "y": 1.25},
{"label":"0)", "matrix": [1, 10], "x": 10, "y": 1.25},
{"label":"-_", "matrix": [1, 11], "x": 11, "y": 1.25},
{"label":"=+", "matrix": [1, 12], "x": 12, "y": 1.25},
{"label":"Backspace", "matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
{"label":"Insert", "matrix": [7, 14], "x": 15.25, "y": 1.25},
{"label":"Home", "matrix": [7, 17], "x": 16.25, "y": 1.25},
{"label":"Page Up","matrix": [7, 16], "x": 17.25, "y": 1.25},
{"label":"Tab", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
{"label":"Q", "matrix": [2, 1], "x": 1.5, "y": 2.25},
{"label":"W", "matrix": [2, 2], "x": 2.5, "y": 2.25},
{"label":"E", "matrix": [2, 3], "x": 3.5, "y": 2.25},
{"label":"R", "matrix": [2, 4], "x": 4.5, "y": 2.25},
{"label":"T", "matrix": [2, 5], "x": 5.5, "y": 2.25},
{"label":"Y", "matrix": [2, 6], "x": 6.5, "y": 2.25},
{"label":"U", "matrix": [2, 7], "x": 7.5, "y": 2.25},
{"label":"I", "matrix": [2, 8], "x": 8.5, "y": 2.25},
{"label":"O", "matrix": [2, 9], "x": 9.5, "y": 2.25},
{"label":"P", "matrix": [2, 10], "x": 10.5, "y": 2.25},
{"label":"[{", "matrix": [2, 11], "x": 11.5, "y": 2.25},
{"label":"]}", "matrix": [2, 12], "x": 12.5, "y": 2.25},
{"label":"\\|", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
{"label":"Delete", "matrix": [8, 14], "x": 15.25, "y": 2.25},
{"label":"End", "matrix": [8, 17], "x": 16.25, "y": 2.25},
{"label":"Page Down", "matrix": [8, 16], "x": 17.25, "y": 2.25},
{"label":"Caps Lock", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
{"label":"A", "matrix": [3, 1], "x": 1.75, "y": 3.25},
{"label":"S", "matrix": [3, 2], "x": 2.75, "y": 3.25},
{"label":"D", "matrix": [3, 3], "x": 3.75, "y": 3.25},
{"label":"F", "matrix": [3, 4], "x": 4.75, "y": 3.25},
{"label":"G", "matrix": [3, 5], "x": 5.75, "y": 3.25},
{"label":"H", "matrix": [3, 6], "x": 6.75, "y": 3.25},
{"label":"J", "matrix": [3, 7], "x": 7.75, "y": 3.25},
{"label":"K", "matrix": [3, 8], "x": 8.75, "y": 3.25},
{"label":"L", "matrix": [3, 9], "x": 9.75, "y": 3.25},
{"label":";:", "matrix": [3, 10], "x": 10.75, "y": 3.25},
{"label":"\'\"", "matrix": [3, 11], "x": 11.75, "y": 3.25},
{"label":"Enter", "matrix": [3, 12], "x": 12.75, "y": 3.25, "w": 2.25},
{"label":"Shift", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
{"label":"Z", "matrix": [4, 2], "x": 2.25, "y": 4.25},
{"label":"X", "matrix": [4, 3], "x": 3.25, "y": 4.25},
{"label":"C", "matrix": [4, 4], "x": 4.25, "y": 4.25},
{"label":"V", "matrix": [4, 5], "x": 5.25, "y": 4.25},
{"label":"B", "matrix": [4, 6], "x": 6.25, "y": 4.25},
{"label":"N", "matrix": [4, 7], "x": 7.25, "y": 4.25},
{"label":"M", "matrix": [4, 8], "x": 8.25, "y": 4.25},
{"label":",<", "matrix": [4, 9], "x": 9.25, "y": 4.25},
{"label":".>", "matrix": [4, 10], "x": 10.25, "y": 4.25},
{"label":"/?", "matrix": [4, 11], "x": 11.25, "y": 4.25},
{"label":"Shift", "matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
{"label":"Up", "matrix": [4, 15], "x": 16.25, "y": 4.25},
{"label":"LCtrl", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"label":"Lwin", "matrix": [5, 1], "x": 1.5, "y": 5.25},
{"label":"LAlt", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
{"label":"Space", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 6.25},
{"label":"RAlt", "matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
{"label":"RWin", "matrix": [5, 11], "x": 12.5, "y": 5.25},
{"label":"RCtrl", "matrix": [5, 12], "x": 13.5, "y": 5.25, "w": 1.5},
{"label":"Left", "matrix": [5, 14], "x": 15.25, "y": 5.25},
{"label":"Down", "matrix": [5, 15], "x": 16.25, "y": 5.25},
{"label":"Right", "matrix": [5, 16], "x": 17.25, "y": 5.25}
]
}
}
}

View File

@@ -0,0 +1,37 @@
/*
Copyright 2023 Gondolindrim
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_f13_ansi_tsangan(
KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_F13, KC_PSCR, KC_SCRL, KC_PAUS ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN ,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_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, KC_UP ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_f13_ansi_tsangan(
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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,37 @@
/*
Copyright 2023 Gondolindrim
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_f13_ansi_tsangan(
KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_F13, KC_PSCR, KC_SCRL, KC_PAUS ,
KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS , KC_HOME, KC_PGUP ,
KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN ,
KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_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, KC_UP ,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_f13_ansi_tsangan(
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, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 @@
VIA_ENABLE = yes

View File

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

View File

View File

@@ -0,0 +1,8 @@
{
"manufacturer": "AcheronProject",
"url": "",
"maintainer": "Gondolindrim",
"usb": {
"vid": "0xAC11"
}
}

View File

@@ -0,0 +1,23 @@
# Acheron Themis QMK firmware
![themis](https://i.imgur.com/kwemOsJh.png)
The Themis is Acheron Project's open-source, freely available tenkeyless (TKL) keyboard Printed Circuit Boards (PCB) which features:
- No LED lighting
- Solderless ("hotswap") MX switches support
- Fixed layout for each variant
* Keyboard Maintainer: [Gondolindrim](https://github.com/Gondolindrim)
* Hardware Supported: open-source PCB using the [Joker template](https://acheronproject.com/joker_mcus/joker/). First units were manufactured using STM32F4x1 microcontroller;
* Hardware Availability: open-source PCBs
In order to flash this PCB, first build the default layout (after setting up your build environment):
make acheron/themis/<revision>:default
After building or downloading the firmware, put the PCB into DFU mode by holding the reset button for at least five seconds and upload the firmware onto the microcontroller through a utility like `dfu-util` or QMK Toolbox. Alternatively, you can build and flash using:
make acheron/themis/<revision>: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).

View File

@@ -0,0 +1,59 @@
/**
* Copyright 2020 Christopher Courtney <drashna@live.com> (@drashna)
* Copyright 2021 Quentin LEBASTARD <qlebastard@gmail.com>
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
* Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Publicw 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 "quantum.h"
#ifdef SWAP_HANDS_ENABLE
const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
/* Left hand, matrix positions */
{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}},
{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}},
/* Right hand, matrix positions */
{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}}
};
# ifdef ENCODER_MAP_ENABLE
const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0};
# endif
#endif
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) {
return false;
}
switch (index) {
case 0: // Left-half encoder, mouse scroll.
tap_code(clockwise ? KC_MS_WH_DOWN : KC_MS_WH_UP);
break;
case 1: // Right-half encoder, volume control.
tap_code(clockwise ? KC_AUDIO_VOL_UP : KC_AUDIO_VOL_DOWN);
break;
}
return true;
}
#endif // ENCODER_ENABLE

View File

@@ -0,0 +1,54 @@
/**
* Copyright 2022 Charly Delay <charly@codesink.dev> (@0xcharly)
* Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* 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
/* Handedness. */
#define SPLIT_HAND_PIN GP29
#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left.
/* VBUS detection. */
#define USB_VBUS_PIN GP19
/* CRC. */
#define CRC8_USE_TABLE
#define CRC8_OPTIMIZE_SPEED
/* Cirque trackpad over SPI. */
#define SPI_DRIVER SPID0
#define SPI_SCK_PIN GP22
#define SPI_MOSI_PIN GP23
#define SPI_MISO_PIN GP20
#define POINTING_DEVICE_CS_PIN GP21
#undef CIRQUE_PINNACLE_DIAMETER_MM
#define CIRQUE_PINNACLE_DIAMETER_MM 40
/* Reset. */
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
/* RGB matrix support. */
#define SPLIT_TRANSPORT_MIRROR
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
// Startup values.
#define RGB_MATRIX_DEFAULT_VAL 64
#define RGB_MATRIX_DEFAULT_SPD 32

View File

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

View File

@@ -0,0 +1,266 @@
{
"keyboard_name": "Dilemma Max",
"usb": {
"device_version": "1.0.0",
"pid": "0x1837"
},
"processor": "RP2040",
"bootloader": "rp2040",
"board": "GENERIC_RP_RP2040",
"matrix_pins": {
"cols": ["GP14", "GP8", "GP9", "GP7", "GP6", "GP28"],
"rows": ["GP15", "GP4", "GP5", "GP27", "GP26"]
},
"diode_direction": "ROW2COL",
"split": {
"enabled": true,
"soft_serial_pin": "GP1",
"bootmagic": {
"matrix": [5, 0]
}
},
"encoder": {
"enabled" : true,
"rotary" : [
{"pin_a": "GP25", "pin_b": "GP24"}
]
},
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"caps_word": true,
"tri_layer": true
},
"ws2812": {
"pin": "GP10",
"driver": "vendor"
},
"rgb_matrix": {
"driver": "ws2812",
"split_count": [52, 52],
"max_brightness": 176,
"center_point": [112, 28],
"animations": {
"solid_color": true,
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{"x": 81, "y": 4, "flags": 2},
{"x": 65, "y": 2, "flags": 2},
{"x": 40, "y": 0, "flags": 2},
{"x": 29, "y": 9, "flags": 2},
{"x": 16, "y": 9, "flags": 2},
{"x": 0, "y": 16, "flags": 2},
{"x": 0, "y": 29, "flags": 2},
{"x": 0, "y": 40, "flags": 2},
{"x": 5, "y": 50, "flags": 2},
{"x": 17, "y": 49, "flags": 2},
{"x": 28, "y": 44, "flags": 2},
{"x": 40, "y": 43, "flags": 2},
{"x": 49, "y": 51, "flags": 2},
{"x": 62, "y": 53, "flags": 2},
{"x": 73, "y": 56, "flags": 2},
{"x": 85, "y": 59, "flags": 2},
{"x": 100, "y": 64, "flags": 2},
{"x": 106, "y": 55, "flags": 2},
{"x": 107, "y": 45, "flags": 2},
{"x": 91, "y": 51, "flags": 2},
{"x": 94, "y": 40, "flags": 2},
{"x": 108, "y": 33, "flags": 2},
{"x": 106, "y": 25, "flags": 2},
{"x": 108, "y": 16, "flags": 2},
{"matrix": [0, 5], "x": 75, "y": 10, "flags": 4},
{"matrix": [0, 4], "x": 62, "y": 9, "flags": 4},
{"matrix": [0, 3], "x": 49, "y": 6, "flags": 4},
{"matrix": [0, 2], "x": 35, "y": 10, "flags": 4},
{"matrix": [0, 1], "x": 22, "y": 16, "flags": 4},
{"matrix": [0, 0], "x": 9, "y": 16, "flags": 1},
{"matrix": [1, 0], "x": 9, "y": 27, "flags": 1},
{"matrix": [1, 1], "x": 22, "y": 27, "flags": 4},
{"matrix": [1, 2], "x": 35, "y": 20, "flags": 4},
{"matrix": [1, 3], "x": 49, "y": 17, "flags": 4},
{"matrix": [1, 4], "x": 62, "y": 19, "flags": 4},
{"matrix": [1, 5], "x": 75, "y": 21, "flags": 4},
{"matrix": [2, 5], "x": 75, "y": 31, "flags": 4},
{"matrix": [2, 4], "x": 62, "y": 30, "flags": 4},
{"matrix": [2, 3], "x": 49, "y": 27, "flags": 4},
{"matrix": [2, 2], "x": 35, "y": 31, "flags": 4},
{"matrix": [2, 1], "x": 22, "y": 37, "flags": 4},
{"matrix": [2, 0], "x": 9, "y": 37, "flags": 1},
{"matrix": [3, 0], "x": 9, "y": 48, "flags": 1},
{"matrix": [3, 1], "x": 22, "y": 48, "flags": 4},
{"matrix": [3, 2], "x": 35, "y": 41, "flags": 4},
{"matrix": [3, 3], "x": 49, "y": 38, "flags": 4},
{"matrix": [3, 4], "x": 62, "y": 40, "flags": 4},
{"matrix": [3, 5], "x": 75, "y": 42, "flags": 4},
{"matrix": [4, 3], "x": 54, "y": 51, "flags": 4},
{"matrix": [4, 1], "x": 68, "y": 53, "flags": 4},
{"matrix": [4, 2], "x": 81, "y": 57, "flags": 4},
{"matrix": [4, 4], "x": 92, "y": 64, "flags": 4},
{"x": 143, "y": 4, "flags": 2},
{"x": 159, "y": 2, "flags": 2},
{"x": 184, "y": 0, "flags": 2},
{"x": 195, "y": 9, "flags": 2},
{"x": 208, "y": 9, "flags": 2},
{"x": 224, "y": 16, "flags": 2},
{"x": 224, "y": 29, "flags": 2},
{"x": 224, "y": 40, "flags": 2},
{"x": 219, "y": 50, "flags": 2},
{"x": 207, "y": 49, "flags": 2},
{"x": 196, "y": 44, "flags": 2},
{"x": 184, "y": 43, "flags": 2},
{"x": 176, "y": 51, "flags": 2},
{"x": 162, "y": 53, "flags": 2},
{"x": 151, "y": 56, "flags": 2},
{"x": 139, "y": 59, "flags": 2},
{"x": 124, "y": 64, "flags": 2},
{"x": 118, "y": 55, "flags": 2},
{"x": 117, "y": 45, "flags": 2},
{"x": 133, "y": 51, "flags": 2},
{"x": 130, "y": 40, "flags": 2},
{"x": 116, "y": 33, "flags": 2},
{"x": 118, "y": 25, "flags": 2},
{"x": 116, "y": 16, "flags": 2},
{"matrix": [5, 5], "x": 149, "y": 10, "flags": 4},
{"matrix": [5, 4], "x": 162, "y": 9, "flags": 4},
{"matrix": [5, 3], "x": 175, "y": 6, "flags": 4},
{"matrix": [5, 2], "x": 189, "y": 10, "flags": 4},
{"matrix": [5, 1], "x": 202, "y": 16, "flags": 4},
{"matrix": [5, 0], "x": 215, "y": 16, "flags": 1},
{"matrix": [6, 0], "x": 215, "y": 27, "flags": 1},
{"matrix": [6, 1], "x": 202, "y": 27, "flags": 4},
{"matrix": [6, 2], "x": 189, "y": 20, "flags": 4},
{"matrix": [6, 3], "x": 175, "y": 17, "flags": 4},
{"matrix": [6, 4], "x": 162, "y": 19, "flags": 4},
{"matrix": [6, 5], "x": 149, "y": 21, "flags": 4},
{"matrix": [7, 5], "x": 149, "y": 31, "flags": 4},
{"matrix": [7, 4], "x": 162, "y": 30, "flags": 4},
{"matrix": [7, 3], "x": 175, "y": 27, "flags": 4},
{"matrix": [7, 2], "x": 189, "y": 31, "flags": 4},
{"matrix": [7, 1], "x": 202, "y": 37, "flags": 4},
{"matrix": [7, 0], "x": 215, "y": 37, "flags": 1},
{"matrix": [8, 0], "x": 215, "y": 48, "flags": 1},
{"matrix": [8, 1], "x": 202, "y": 48, "flags": 4},
{"matrix": [8, 2], "x": 189, "y": 41, "flags": 4},
{"matrix": [8, 3], "x": 175, "y": 38, "flags": 4},
{"matrix": [8, 4], "x": 162, "y": 40, "flags": 4},
{"matrix": [8, 5], "x": 149, "y": 42, "flags": 4},
{"matrix": [9, 4], "x": 170, "y": 51, "flags": 4},
{"matrix": [9, 2], "x": 156, "y": 53, "flags": 4},
{"matrix": [9, 1], "x": 143, "y": 57, "flags": 4},
{"matrix": [9, 3], "x": 132, "y": 64, "flags": 4}
]
},
"layouts": {
"LAYOUT": {
"layout": [
{"label":"L00", "matrix": [0, 0], "x":0, "y":0},
{"label":"L01", "matrix": [0, 1], "x":1, "y":0},
{"label":"L02", "matrix": [0, 2], "x":2, "y":0},
{"label":"L03", "matrix": [0, 3], "x":3, "y":0},
{"label":"L04", "matrix": [0, 4], "x":4, "y":0},
{"label":"L05", "matrix": [0, 5], "x":5, "y":0},
{"label":"R05", "matrix": [5, 5], "x":8, "y":0},
{"label":"R04", "matrix": [5, 4], "x":9, "y":0},
{"label":"R03", "matrix": [5, 3], "x":10, "y":0},
{"label":"R02", "matrix": [5, 2], "x":11, "y":0},
{"label":"R01", "matrix": [5, 1], "x":12, "y":0},
{"label":"R00", "matrix": [5, 0], "x":13, "y":0},
{"label":"L10", "matrix": [1, 0], "x":0, "y":1},
{"label":"L11", "matrix": [1, 1], "x":1, "y":1},
{"label":"L12", "matrix": [1, 2], "x":2, "y":1},
{"label":"L13", "matrix": [1, 3], "x":3, "y":1},
{"label":"L14", "matrix": [1, 4], "x":4, "y":1},
{"label":"L15", "matrix": [1, 5], "x":5, "y":1},
{"label":"R15", "matrix": [6, 5], "x":8, "y":1},
{"label":"R14", "matrix": [6, 4], "x":9, "y":1},
{"label":"R13", "matrix": [6, 3], "x":10, "y":1},
{"label":"R12", "matrix": [6, 2], "x":11, "y":1},
{"label":"R11", "matrix": [6, 1], "x":12, "y":1},
{"label":"R10", "matrix": [6, 0], "x":13, "y":1},
{"label":"L20", "matrix": [2, 0], "x":0, "y":2},
{"label":"L21", "matrix": [2, 1], "x":1, "y":2},
{"label":"L22", "matrix": [2, 2], "x":2, "y":2},
{"label":"L23", "matrix": [2, 3], "x":3, "y":2},
{"label":"L24", "matrix": [2, 4], "x":4, "y":2},
{"label":"L25", "matrix": [2, 5], "x":5, "y":2},
{"label":"R25", "matrix": [7, 5], "x":8, "y":2},
{"label":"R24", "matrix": [7, 4], "x":9, "y":2},
{"label":"R23", "matrix": [7, 3], "x":10, "y":2},
{"label":"R22", "matrix": [7, 2], "x":11, "y":2},
{"label":"R21", "matrix": [7, 1], "x":12, "y":2},
{"label":"R20", "matrix": [7, 0], "x":13, "y":2},
{"label":"L30", "matrix": [3, 0], "x":0, "y":3},
{"label":"L31", "matrix": [3, 1], "x":1, "y":3},
{"label":"L32", "matrix": [3, 2], "x":2, "y":3},
{"label":"L33", "matrix": [3, 3], "x":3, "y":3},
{"label":"L34", "matrix": [3, 4], "x":4, "y":3},
{"label":"L35", "matrix": [3, 5], "x":5, "y":3},
{"label":"R35", "matrix": [8, 5], "x":8, "y":3},
{"label":"R34", "matrix": [8, 4], "x":9, "y":3},
{"label":"R33", "matrix": [8, 3], "x":10, "y":3},
{"label":"R32", "matrix": [8, 2], "x":11, "y":3},
{"label":"R31", "matrix": [8, 1], "x":12, "y":3},
{"label":"R30", "matrix": [8, 0], "x":13, "y":3},
{"label":"L43", "matrix": [4, 3], "x":2.5, "y":4},
{"label":"L41", "matrix": [4, 1], "x":3.5, "y":4},
{"label":"L42", "matrix": [4, 2], "x":4.5, "y":4},
{"label":"L44", "matrix": [4, 4], "x":5.5, "y":4},
{"label":"R44", "matrix": [9, 4], "x":7.5, "y":4},
{"label":"R42", "matrix": [9, 2], "x":8.5, "y":4},
{"label":"R41", "matrix": [9, 1], "x":9.5, "y":4},
{"label":"R43", "matrix": [9, 3], "x":10.5, "y":4}
]
}
}
}

View File

@@ -0,0 +1,73 @@
/**
* Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
* Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* 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
enum dilemma_keymap_layers {
LAYER_BASE = 0,
LAYER_LOWER,
LAYER_RAISE,
};
#define LOWER MO(LAYER_LOWER)
#define RAISE MO(LAYER_RAISE)
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LALT,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
KC_LALT, KC_BSPC, KC_SPC, LOWER, RAISE, KC_ENT, KC_DEL, KC_LGUI
// ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
),
[LAYER_LOWER] = LAYOUT(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_RBRC, XXXXXXX,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
RGB_TOG, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PEQL,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR, QK_BOOT, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PDOT,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______
// ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
),
[LAYER_RAISE] = LAYOUT(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_MPLY, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, KC_MUTE,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_MPRV, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
_______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX
// ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
),
};
// clang-format on

View File

@@ -0,0 +1,2 @@
# Dilemma Max (4x6+4) default keymap

View File

@@ -0,0 +1,20 @@
/**
* Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
* Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* 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 DYNAMIC_KEYMAP_LAYER_COUNT 8

View File

@@ -0,0 +1,132 @@
/**
* Copyright 2021 Charly Delay <charly@codesink.dev> (@0xcharly)
* Copyright 2023 casuanoob <casuanoob@hotmail.com> (@casuanoob)
*
* 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
enum dilemma_keymap_layers {
LAYER_BASE = 0,
LAYER_LOWER,
LAYER_RAISE,
LAYER_POINTER,
};
// Automatically enable sniping-mode on the pointer layer.
// #define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
#define LOWER MO(LAYER_LOWER)
#define RAISE MO(LAYER_RAISE)
#define PT_Z LT(LAYER_POINTER, KC_Z)
#define PT_SLSH LT(LAYER_POINTER, KC_SLSH)
#ifndef POINTING_DEVICE_ENABLE
# define DRGSCRL KC_NO
# define DPI_MOD KC_NO
# define S_D_MOD KC_NO
# define SNIPING KC_NO
#endif // !POINTING_DEVICE_ENABLE
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_LCTL, PT_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, PT_SLSH, KC_LALT,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
KC_LALT, KC_BSPC, KC_SPC, LOWER, RAISE, KC_ENT, KC_DEL, KC_MUTE
// ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
),
[LAYER_LOWER] = LAYOUT(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_RBRC, XXXXXXX,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
RGB_TOG, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PEQL,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
RGB_RMOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PDOT,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX
// ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
),
[LAYER_RAISE] = LAYOUT(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_MPLY, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, KC_MUTE,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
KC_MPRV, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX
// ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
),
[LAYER_POINTER] = LAYOUT(
// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DPI_MOD, S_D_MOD, S_D_MOD, DPI_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, XXXXXXX,
// ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤
XXXXXXX, _______, DRGSCRL, SNIPING, EE_CLR, QK_BOOT, QK_BOOT, EE_CLR, SNIPING, DRGSCRL, _______, XXXXXXX,
// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯
XXXXXXX, KC_BTN2, KC_BTN1, KC_BTN3, KC_BTN3, KC_BTN1, KC_BTN2, XXXXXXX
// ╰───────────────────────────────────╯ ╰───────────────────────────────────╯
),
};
// clang-format on
#ifdef POINTING_DEVICE_ENABLE
# ifdef DILEMMA_AUTO_SNIPING_ON_LAYER
layer_state_t layer_state_set_user(layer_state_t state) {
dilemma_set_pointer_sniping_enabled(layer_state_cmp(state, DILEMMA_AUTO_SNIPING_ON_LAYER));
return state;
}
# endif // DILEMMA_AUTO_SNIPING_ON_LAYER
#endif // POINTING_DEVICE_ENABLEE
#ifdef RGB_MATRIX_ENABLE
// Forward-declare this helper function since it is defined in rgb_matrix.c.
void rgb_matrix_update_pwm_buffers(void);
#endif
#ifdef ENCODER_MAP_ENABLE
// clang-format off
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[LAYER_BASE] = {ENCODER_CCW_CW(KC_WH_U, KC_WH_D), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[LAYER_LOWER] = {ENCODER_CCW_CW(KC_UP, KC_DOWN), ENCODER_CCW_CW(KC_LEFT, KC_RGHT)},
[LAYER_RAISE] = {ENCODER_CCW_CW(KC_PGUP, KC_PGDN), ENCODER_CCW_CW(KC_VOLU, KC_VOLD)},
[LAYER_POINTER] = {ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI)},
};
// clang-format on
#endif // ENCODER_MAP_ENABLE
void shutdown_user(void) {
#ifdef RGB_MATRIX_ENABLE
rgb_matrix_sethsv_noeeprom(HSV_RED);
rgb_matrix_update_pwm_buffers();
#endif // RGB_MATRIX_ENABLE
}

View File

@@ -0,0 +1,47 @@
# Dilemma Max `via` keymap
The Dilemma Max `via` keymap is based on the original [Dactyl Manuform](../../../../../handwired/dactyl_manuform) default keymap, with some features and changes specific to the Dilemma.
This layout also supports VIA.
## Customizing the keymap
### Dynamic DPI scaling
Use the following keycodes to change the default DPI:
- `POINTER_DEFAULT_DPI_FORWARD`: increases the DPI; decreases when shifted;
- `POINTER_DEFAULT_DPI_REVERSE`: decreases the DPI; increases when shifted.
There's a maximum of 16 possible values for the sniping mode DPI. See the [Dilemma documentation](../../README.md) for more information.
Use the following keycodes to change the sniping mode DPI:
- `POINTER_SNIPING_DPI_FORWARD`: increases the DPI; decreases when shifted;
- `POINTER_SNIPING_DPI_REVERSE`: decreases the DPI; increases when shifted.
There's a maximum of 4 possible values for the sniping mode DPI. See the [Dilemma documentation](../../README.md) for more information.
### Drag-scroll
Use the `DRAGSCROLL_MODE` keycode to enable drag-scroll on hold. Use the `DRAGSCROLL_TOGGLE` keycode to enable/disable drag-scroll on key press.
### Circular scroll
By default, the firmware is configured to enable the circular scroll feature on Cirque trackpad.
To disable this, add the following to your keymap:
```c
#undef POINTING_DEVICE_GESTURES_SCROLL_ENABLE
```
### Sniping
Use the `SNIPING_MODE` keycode to enable sniping mode on hold. Use the `SNIPING_TOGGLE` keycode to enable/disable sniping mode on key press.
Change the value of `DILEMMA_AUTO_SNIPING_ON_LAYER` to automatically enable sniping mode on layer change. By default, sniping mode is enabled on the pointer layer:
```c
#define DILEMMA_AUTO_SNIPING_ON_LAYER LAYER_POINTER
```

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes

View File

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

View File

@@ -0,0 +1,5 @@
# Dilemma Max (4x6+4)
This keyboard is an upsized version of the [3x5+3 Dilemma](../3x5_3/).
The Dilemma Max is available at [bastardkb.com](https://bastardkb.com).

View File

@@ -0,0 +1,4 @@
SERIAL_DRIVER = vendor
POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi

View File

@@ -1,16 +1,21 @@
# Dilemma
A very small keyboard made for ergonomic enthusiasts.
A family of split keyboards with embedded RP2040 controllers, support for Cirque GlidePoint circle trackpads, and SPI + I2C breakouts for other peripherals
- Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/)
- Hardware Supported: RP2040-based controller (_eg._ Splinky, Elite-c, ...)
- Hardware Supported: [Bastardkb Dilemma](https://github.com/Bastardkb/Dilemma)
- Hardware Availability: [Bastardkb.com](https://bastardkb.com/)
A pre-assembled version (with embedded controller) is also available.
A DIY version of the 3x5_2 PCB with promicro compatible footprint is also available.
Make example for this keyboard (after setting up your build environment):
make bastardkb/dilemma/3x5_2/splinky:default
make bastardkb/dilemma/3x5_2/assembled:default
make bastardkb/dilemma/3x5_3:default
make bastardkb/dilemma/4x6_4:default
Flashing example for this keyboard:
make bastardkb/dilemma/3x5_3:default:flash
make bastardkb/dilemma/4x6_4:default:flash
See the [keyboard build instructions](http://docs.bastardkb.com/)

View File

@@ -0,0 +1,10 @@
// Copyright 2023 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
#define PICO_XOSC_STARTUP_DELAY_MULTIPLIER 64

View File

@@ -0,0 +1,700 @@
{
"manufacturer": "CannonKeys",
"keyboard_name": "Brutal V2 60",
"maintainer": "awkannan",
"bootloader": "rp2040",
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"indicators": {
"caps_lock": "GP12",
"on_state": 0
},
"matrix_pins": {
"cols": ["GP3", "GP2", "GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP21", "GP20", "GP19", "GP18"],
"rows": ["GP4", "GP5", "GP13", "GP14", "GP10"]
},
"processor": "RP2040",
"url": "https://cannonkeys.com",
"usb": {
"device_version": "0.0.1",
"pid": "0x000B",
"vid": "0xCA04"
},
"community_layouts": [
"60_ansi",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_tsangan_hhkb",
"60_hhkb",
"60_iso",
"60_iso_split_bs_rshift",
"60_iso_tsangan"
],
"layouts": {
"LAYOUT_all": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
{"matrix": [0, 2], "x": 2, "y": 0},
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
{"matrix": [0, 6], "x": 6, "y": 0},
{"matrix": [0, 7], "x": 7, "y": 0},
{"matrix": [0, 8], "x": 8, "y": 0},
{"matrix": [0, 9], "x": 9, "y": 0},
{"matrix": [0, 10], "x": 10, "y": 0},
{"matrix": [0, 11], "x": 11, "y": 0},
{"matrix": [0, 12], "x": 12, "y": 0},
{"matrix": [0, 13], "x": 13, "y": 0},
{"matrix": [2, 12], "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, 13], "x": 12.75, "y": 2, "w": 2.25},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"matrix": [3, 1], "x": 1.25, "y": 3},
{"matrix": [3, 2], "x": 2.25, "y": 3},
{"matrix": [3, 3], "x": 3.25, "y": 3},
{"matrix": [3, 4], "x": 4.25, "y": 3},
{"matrix": [3, 5], "x": 5.25, "y": 3},
{"matrix": [3, 6], "x": 6.25, "y": 3},
{"matrix": [3, 7], "x": 7.25, "y": 3},
{"matrix": [3, 8], "x": 8.25, "y": 3},
{"matrix": [3, 9], "x": 9.25, "y": 3},
{"matrix": [3, 10], "x": 10.25, "y": 3},
{"matrix": [3, 11], "x": 11.25, "y": 3},
{"matrix": [3, 12], "x": 12.25, "y": 3, "w": 1.75},
{"matrix": [3, 13], "x": 14, "y": 3},
{"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
{"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "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, "w": 2},
{"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": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"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, 13], "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"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, 13], "x": 12.25, "y": 3, "w": 2.75},
{"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, 6], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"label": "Fn", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
{"label": "Del", "matrix": [2, 12], "x": 14, "y": 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": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"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, 13], "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"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": "Fn", "matrix": [3, 13], "x": 14, "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, 6], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"label": "Fn", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_ansi_tsangan": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "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, "w": 2},
{"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": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"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, 13], "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"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, 13], "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
{"label": "Del", "matrix": [2, 12], "x": 14, "y": 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": "|", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"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, 13], "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"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": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
{"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_hhkb": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "|", "matrix": [0, 13], "x": 13, "y": 0},
{"label": "~", "matrix": [2, 12], "x": 14, "y": 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": "Bspc", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
{"label": "Ctrl", "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, 13], "x": 12.75, "y": 2, "w": 2.25},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"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": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
{"label": "Alt", "matrix": [4, 1], "x": 1.5, "y": 4},
{"label": "Win", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"label": "Win", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"label": "Alt", "matrix": [4, 12], "x": 12.5, "y": 4}
]
},
"LAYOUT_60_iso": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "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, "w": 2},
{"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": "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": "|", "matrix": [1, 13], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
{"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, 13], "x": 12.25, "y": 3, "w": 2.75},
{"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, 6], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"label": "Fn", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
{"label": "Del", "matrix": [2, 12], "x": 14, "y": 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": "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": "|", "matrix": [1, 13], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
{"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": "Fn", "matrix": [3, 13], "x": 14, "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, 6], "x": 3.75, "y": 4, "w": 6.25},
{"label": "Alt", "matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
{"label": "Win", "matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
{"label": "Fn", "matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
]
},
"LAYOUT_60_iso_tsangan": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "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, "w": 2},
{"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": "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": "|", "matrix": [1, 13], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
{"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, 13], "x": 12.25, "y": 3, "w": 2.75},
{"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
},
"LAYOUT_60_iso_tsangan_split_bs_rshift": {
"layout": [
{"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
{"label": "!", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "@", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "#", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "$", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "%", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "^", "matrix": [0, 6], "x": 6, "y": 0},
{"label": "&", "matrix": [0, 7], "x": 7, "y": 0},
{"label": "*", "matrix": [0, 8], "x": 8, "y": 0},
{"label": "(", "matrix": [0, 9], "x": 9, "y": 0},
{"label": ")", "matrix": [0, 10], "x": 10, "y": 0},
{"label": "_", "matrix": [0, 11], "x": 11, "y": 0},
{"label": "+", "matrix": [0, 12], "x": 12, "y": 0},
{"label": "Bksp", "matrix": [0, 13], "x": 13, "y": 0},
{"label": "Del", "matrix": [2, 12], "x": 14, "y": 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": "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": "|", "matrix": [1, 13], "x": 12.75, "y": 2},
{"label": "Enter", "matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"label": "Shift", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
{"label": "|", "matrix": [3, 1], "x": 1.25, "y": 3},
{"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": "Fn", "matrix": [3, 13], "x": 14, "y": 3},
{"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 1], "x": 1.5, "y": 4},
{"label": "Alt", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
{"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
{"label": "Alt", "matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
{"label": "Win", "matrix": [4, 12], "x": 12.5, "y": 4},
{"label": "Ctrl", "matrix": [4, 13], "x": 13.5, "y": 4, "w": 1.5}
]
}
}
}

View File

@@ -0,0 +1,36 @@
// Copyright 2023 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
_BASE,
_FN1,
_FN2,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_all(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN2),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
),
[_FN1] = 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, QK_BOOT
),
[_FN2] = 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_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_HOME, KC_PGDN, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, DB_TOGG, QK_BOOT
)
};

View File

@@ -0,0 +1,36 @@
// Copyright 2023 Andrew Kannan
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
enum layers {
_BASE,
_FN1,
_FN2,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT_all(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_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_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN2),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FN1), KC_RCTL
),
[_FN1] = 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_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, QK_BOOT
),
[_FN2] = 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_PGUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, KC_HOME, KC_PGDN, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, DB_TOGG, QK_BOOT
)
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -0,0 +1,24 @@
# Brutal v2 60
Brutal v2 60 Keyboard
Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
Hardware Supported: RP2040
Make example for this keyboard (after setting up your build environment):
make cannonkeys/brutalv2_60:default
Flashing example for this keyboard:
make cannonkeys/brutalv2_60: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**: Hold the "BOOTMODE" button on the back of the PCB and briefly press the "RESET" button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1 @@
# This file intentionally left blank

View File

@@ -30,68 +30,28 @@ enum discpline_keycodes {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* QWERTY: Default Layer
* ,--------------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backs| `~|
* |---------------------------------------------------------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
* |---------------------------------------------------------------|
* |Fn/CL | A| S| D| F| G| H| J| K| L| ;| '| Enter|PgU|
* |---------------------------------------------------------------|
* |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
* |---------------------------------------------------------------|
* |Ctrl|Gui |Alt | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
* `---------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_65_ansi(
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_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_DEL,
FN_ESC, 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_HOME,
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, KC_RGUI, KC_RCTL,KC_LEFT, KC_DOWN, KC_RGHT
),
/* Workman
* ,---------------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Backs| `~|
* |---------------------------------------------------------------|
* |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| Del|
* |---------------------------------------------------------------|
* |Fn/CL | A| S| H| T| G| Y| N| E| O| I| '| Enter| PgU|
* |---------------------------------------------------------------|
* |Shift | Z| X| M| C| V| K| L| ,| .| /|Shift |Up| PgD|
* |---------------------------------------------------------------|
* |Ctrl|Alt |Gui | Space |Gui |Alt |Ctrl| |Lef|Dow|Rig|
* `---------------------------------------------------------------'
*/
[_WORKMAN] = LAYOUT_65_ansi(
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_GRV,
KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
FN_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
[_QWERTY] = LAYOUT_65_ansi(
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_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
FN_ESC, 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_HOME,
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, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_WORKMAN] = LAYOUT_65_ansi(
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_GRV,
KC_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
FN_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, KC_ENT, KC_HOME,
KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
/* Function
* ,---------------------------------------------------------------.
* |RST| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| | |
* |---------------------------------------------------------------|
* | | | | | | | | | | | | | | |INS|
* |---------------------------------------------------------------|
* | | | | | | | | | | | | | |HME|
* |---------------------------------------------------------------|
* | | | | | | | | | | | | | |VL+|END|
* |---------------------------------------------------------------|
* | | | | PLY/PS | | | | |PRV|VL-|NXT|
* `---------------------------------------------------------------'
*/
[_FUNC] = LAYOUT_65_ansi(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______, QK_BOOT,
_______,KC_WH_U,KC_BTN1,KC_MS_U,KC_BTN2,_______,_______,AG_NORM,AG_SWAP,QWERTY,WORKMAN,_______,_______,_______, KC_INS,
_______,KC_WH_D,KC_MS_L,KC_MS_D,KC_MS_R,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP,
_______,KC_WH_L,KC_BTN3,KC_WH_R,_______,_______,_______,_______,_______,_______,_______, _______,KC_VOLU, KC_PGDN,
_______,_______,_______, KC_MPLY, _______,_______,_______,KC_MPRV,KC_VOLD, KC_MNXT
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, QK_BOOT,
KC_TRNS, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, AG_NORM, AG_SWAP, QWERTY, WORKMAN, KC_TRNS, KC_INS,
KC_TRNS, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP,
KC_TRNS, KC_WH_L, KC_BTN3, KC_WH_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_PGDN,
KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
),
};

View File

@@ -0,0 +1,69 @@
/* Copyright 2022 DOIO
* Copyright 2022 DOIO2022 <https://github.com/DOIO2022>
*
* 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
/* RGB Matrix config */
#define RGB_MATRIX_LED_COUNT 12
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_UP_DOWN
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
/* RGB Matrix effect */
#define ENABLE_RGB_MATRIX_ALPHAS_MODS
#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_BREATHING
#define ENABLE_RGB_MATRIX_BAND_SAT
#define ENABLE_RGB_MATRIX_BAND_VAL
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
#define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
#define ENABLE_RGB_MATRIX_RAINDROPS
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
#define ENABLE_RGB_MATRIX_HUE_BREATHING
#define ENABLE_RGB_MATRIX_HUE_PENDULUM
#define ENABLE_RGB_MATRIX_HUE_WAVE
#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH

View File

@@ -0,0 +1,78 @@
{
"keyboard_name": "KB12-01",
"manufacturer": "DOIO",
"url": "",
"maintainer": "DOIO2022",
"usb": {
"vid": "0xD010",
"pid": "0x1201",
"device_version": "0.0.1"
},
"rgb_matrix": {
"driver": "ws2812"
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
{"matrix": [0, 1], "x": 75, "y": 0, "flags": 4},
{"matrix": [0, 2], "x": 150, "y": 0, "flags": 4},
{"matrix": [0, 3], "x": 224, "y": 0, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 32, "flags": 4},
{"matrix": [1, 1], "x": 75, "y": 32, "flags": 4},
{"matrix": [1, 2], "x": 150, "y": 32, "flags": 4},
{"matrix": [1, 3], "x": 224, "y": 32, "flags": 4},
{"matrix": [2, 0], "x": 0, "y": 64, "flags": 4},
{"matrix": [2, 1], "x": 75, "y": 64, "flags": 4},
{"matrix": [2, 2], "x": 150, "y": 64, "flags": 4},
{"matrix": [2, 3], "x": 224, "y": 64, "flags": 4}
],
"max_brightness": 200
},
"matrix_pins": {
"cols": ["B14", "B13", "B12", "B0", "A7"],
"rows": ["B3", "B4", "B9"]
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
"layer_count": 6
},
"encoder": {
"rotary": [
{"pin_a": "B5", "pin_b": "B6"}
]
},
"ws2812": {
"pin": "A10"
},
"processor": "STM32F103",
"bootloader": "stm32duino",
"features": {
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true,
"rgb_matrix": true,
"encoder": true
},
"layouts": {
"LAYOUT": {
"layout": [
{ "matrix": [0, 4], "x": 0, "y": 0 },
{ "matrix": [0, 0], "x": 3.25, "y": 0 },
{ "matrix": [0, 1], "x": 4.25, "y": 0 },
{ "matrix": [0, 2], "x": 5.25, "y": 0 },
{ "matrix": [0, 3], "x": 6.25, "y": 0 },
{ "matrix": [1, 0], "x": 7.75, "y": 0 },
{ "matrix": [1, 1], "x": 8.75, "y": 0 },
{ "matrix": [1, 2], "x": 9.75, "y": 0 },
{ "matrix": [1, 3], "x": 10.75, "y": 0 },
{ "matrix": [2, 0], "x": 12.25, "y": 0 },
{ "matrix": [2, 1], "x": 13.25, "y": 0 },
{ "matrix": [2, 2], "x": 14.25, "y": 0 },
{ "matrix": [2, 3], "x": 15.25, "y": 0 }
]
}
}
}

View File

@@ -0,0 +1,55 @@
/* Copyright 2022 DOIO
* Copyright 2022 DOIO2022 <https://github.com/DOIO2022>
*
* 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
enum layer_names {
_LAY0,
_LAY1,
_LAY2,
_LAY3,
_LAY4,
_LAY5
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAY0] = LAYOUT(
TO(1), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12),
[_LAY1] = LAYOUT(
TO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY2] = LAYOUT(
TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY3] = LAYOUT(
TO(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY4] = LAYOUT(
TO(5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY5] = LAYOUT(
TO(0), RGB_TOG, RGB_MOD, RGB_SPI, RGB_SPD, RGB_SAI, RGB_SAD, RGB_HUI, RGB_HUD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_LAY0] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
[_LAY1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY4] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY5] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
};
#endif

View File

@@ -0,0 +1,55 @@
/* Copyright 2022 DOIO
* Copyright 2022 DOIO2022 <https://github.com/DOIO2022>
*
* 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
enum layer_names {
_LAY0,
_LAY1,
_LAY2,
_LAY3,
_LAY4,
_LAY5
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LAY0] = LAYOUT(
TO(1), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12),
[_LAY1] = LAYOUT(
TO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY2] = LAYOUT(
TO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY3] = LAYOUT(
TO(4), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY4] = LAYOUT(
TO(5), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
[_LAY5] = LAYOUT(
TO(0), RGB_TOG, RGB_MOD, RGB_SPI, RGB_SPD, RGB_SAI, RGB_SAD, RGB_HUI, RGB_HUD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_LAY0] = { ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
[_LAY1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY4] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
[_LAY5] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
};
#endif

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
ENCODER_MAP_ENABLE = yes

View File

@@ -0,0 +1,24 @@
# doio/kb12
QMK for DOIO Knob 12% .
* Keyboard Maintainer: DOIO2022
* Hardware Supported: DOIO Knob 12%
Make example for this keyboard (after setting up your build environment):
make doio/kb12:default
Flashing example for this keyboard:
make doio/kb12:default:flash
See the build [environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1 @@
# This file intentionally left blank

View File

@@ -21,7 +21,6 @@
#define ISSI_PWM_FREQUENCY 0b010 // 26k
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_VAL 100
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS

View File

@@ -105,6 +105,7 @@
},
"rgb_matrix": {
"driver": "is31fl3733",
"max_brightness": 191,
"animations": {
"alphas_mods": true,
"gradient_up_down": true,

View File

@@ -0,0 +1,8 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <board.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000U

View File

@@ -0,0 +1,22 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define I2C1_SCL_PIN B8
#define I2C1_SDA_PIN B9
#define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10101000
#define EXTERNAL_EEPROM_WP_PIN B7
#define EEPROM_I2C_24LC256
#define DRIVER_ADDR_1 0b1010000
#define DRIVER_ADDR_2 0b1011111
#define DRIVER_COUNT 2
#define RGB_MATRIX_LED_COUNT 88
#define ISSI_PWM_FREQUENCY 0b010 // 26k
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_CAPS_LOCK_INDEX 48

View File

@@ -0,0 +1,96 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#ifdef RGB_MATRIX_ENABLE
# include "rgb_matrix.h"
const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = {
{ 0, E_1, D_1, F_1 },
{ 0, E_2, D_2, F_2 },
{ 0, E_3, D_3, F_3 },
{ 0, E_4, D_4, F_4 },
{ 0, E_5, D_5, F_5 },
{ 0, E_6, D_6, F_6 },
{ 0, E_7, D_7, F_7 },
{ 0, E_8, D_8, F_8 },
{ 0, E_9, D_9, F_9 },
{ 0, E_10, D_10, F_10 },
{ 0, E_11, D_11, F_11 },
{ 0, E_12, D_12, F_12 },
{ 0, E_13, D_13, F_13 },
{ 0, E_14, D_14, F_14 },
{ 0, E_15, D_15, F_15 },
{ 0, E_16, D_16, F_16 },
{ 0, H_1, G_1, I_1 },
{ 0, H_2, G_2, I_2 },
{ 0, H_3, G_3, I_3 },
{ 0, H_4, G_4, I_4 },
{ 0, H_5, G_5, I_5 },
{ 0, H_6, G_6, I_6 },
{ 0, H_7, G_7, I_7 },
{ 0, H_8, G_8, I_8 },
{ 0, H_9, G_9, I_9 },
{ 0, H_10, G_10, I_10 },
{ 0, H_11, G_11, I_11 },
{ 0, H_12, G_12, I_12 },
{ 0, H_13, G_13, I_13 },
{ 0, H_14, G_14, I_14 },
{ 0, H_15, G_15, I_15 },
{ 0, H_16, G_16, I_16 },
{ 0, K_1, J_1, L_1 },
{ 0, K_2, J_2, L_2 },
{ 0, K_3, J_3, L_3 },
{ 0, K_4, J_4, L_4 },
{ 0, K_5, J_5, L_5 },
{ 0, K_6, J_6, L_6 },
{ 0, K_7, J_7, L_7 },
{ 0, K_8, J_8, L_8 },
{ 0, K_9, J_9, L_9 },
{ 0, K_10, J_10, L_10 },
{ 0, K_11, J_11, L_11 },
{ 0, K_12, J_12, L_12 },
{ 0, K_13, J_13, L_13 },
{ 0, K_14, J_14, L_14 },
{ 0, K_15, J_15, L_15 },
{ 0, K_16, J_16, L_16 },
{ 1, B_1, A_1, C_1 },
{ 1, B_2, A_2, C_2 },
{ 1, B_3, A_3, C_3 },
{ 1, B_4, A_4, C_4 },
{ 1, B_5, A_5, C_5 },
{ 1, B_6, A_6, C_6 },
{ 1, B_7, A_7, C_7 },
{ 1, B_8, A_8, C_8 },
{ 1, B_9, A_9, C_9 },
{ 1, B_10, A_10, C_10 },
{ 1, B_11, A_11, C_11 },
{ 1, B_12, A_12, C_12 },
{ 1, B_13, A_13, C_13 },
{ 1, B_14, A_14, C_14 },
{ 1, B_15, A_15, C_15 },
{ 1, B_16, A_16, C_16 },
{ 1, E_1, D_1, F_1 },
{ 1, E_2, D_2, F_2 },
{ 1, E_3, D_3, F_3 },
{ 1, E_4, D_4, F_4 },
{ 1, E_5, D_5, F_5 },
{ 1, E_6, D_6, F_6 },
{ 1, E_7, D_7, F_7 },
{ 1, E_8, D_8, F_8 },
{ 1, E_9, D_9, F_9 },
{ 1, E_10, D_10, F_10 },
{ 1, E_11, D_11, F_11 },
{ 1, E_12, D_12, F_12 },
{ 1, E_13, D_13, F_13 },
{ 1, H_1, G_1, I_1 },
{ 1, H_2, G_2, I_2 },
{ 1, H_3, G_3, I_3 },
{ 1, H_4, G_4, I_4 },
{ 1, H_5, G_5, I_5 },
{ 1, H_6, G_6, I_6 },
{ 1, H_7, G_7, I_7 },
{ 1, H_8, G_8, I_8 },
{ 1, H_9, G_9, I_9 },
{ 1, H_10, G_10, I_10 },
{ 1, H_11, G_11, I_11 },
};
#endif

View File

@@ -0,0 +1,7 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_I2C TRUE
#include_next <halconf.h>

View File

@@ -0,0 +1,272 @@
{
"keyboard_name": "CSTM80",
"manufacturer": "Drop Inc.",
"maintainer": "zvecr",
"processor": "STM32F303",
"bootloader": "tinyuf2",
"diode_direction": "COL2ROW",
"matrix_pins": {
"cols": ["C15", "C14", "C13", "C12", "C11", "C10", "C9", "C8", "C7", "C6", "C5", "C4", "C3", "C2", "C1", "C0", "D2"],
"rows": ["B15", "B14", "B13", "B12", "B11", "B10"]
},
"usb": {
"vid": "0x359B",
"pid": "0x0004",
"device_version": "1.0.0"
},
"eeprom": {
"driver": "i2c"
},
"features": {
"rgb_matrix": true,
"bootmagic": true,
"command": false,
"console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
},
"community_layouts": ["tkl_f13_ansi"],
"layouts": {
"LAYOUT_tkl_f13_ansi": {
"layout": [
{ "matrix": [0, 0], "label":"Esc", "x":0, "y":0},
{ "matrix": [0, 1], "label":"F1", "x":1.25, "y":0},
{ "matrix": [0, 2], "label":"F2", "x":2.25, "y":0},
{ "matrix": [0, 3], "label":"F3", "x":3.25, "y":0},
{ "matrix": [0, 4], "label":"F4", "x":4.25, "y":0},
{ "matrix": [0, 5], "label":"F5", "x":5.5, "y":0},
{ "matrix": [0, 6], "label":"F6", "x":6.5, "y":0},
{ "matrix": [0, 7], "label":"F7", "x":7.5, "y":0},
{ "matrix": [0, 8], "label":"F8", "x":8.5, "y":0},
{ "matrix": [0, 9], "label":"F9", "x":9.75, "y":0},
{ "matrix": [0, 10], "label":"F10", "x":10.75, "y":0},
{ "matrix": [0, 11], "label":"F11", "x":11.75, "y":0},
{ "matrix": [0, 12], "label":"F12", "x":12.75, "y":0},
{ "matrix": [0, 13], "label":"F13", "x":14, "y":0},
{ "matrix": [0, 14], "label":"PrtSc", "x":15.25, "y":0},
{ "matrix": [0, 15], "label":"ScrLk", "x":16.25, "y":0},
{ "matrix": [0, 16], "label":"Pause", "x":17.25, "y":0},
{ "matrix": [1, 0], "label":"~", "x":0, "y":1.25},
{ "matrix": [1, 1], "label":"!", "x":1, "y":1.25},
{ "matrix": [1, 2], "label":"@", "x":2, "y":1.25},
{ "matrix": [1, 3], "label":"#", "x":3, "y":1.25},
{ "matrix": [1, 4], "label":"$", "x":4, "y":1.25},
{ "matrix": [1, 5], "label":"%", "x":5, "y":1.25},
{ "matrix": [1, 6], "label":"^", "x":6, "y":1.25},
{ "matrix": [1, 7], "label":"&", "x":7, "y":1.25},
{ "matrix": [1, 8], "label":"*", "x":8, "y":1.25},
{ "matrix": [1, 9], "label":"(", "x":9, "y":1.25},
{ "matrix": [1, 10], "label":")", "x":10, "y":1.25},
{ "matrix": [1, 11], "label":"_", "x":11, "y":1.25},
{ "matrix": [1, 12], "label":"+", "x":12, "y":1.25},
{ "matrix": [1, 13], "label":"Bksp", "x":13, "y":1.25, "w":2},
{ "matrix": [1, 14], "label":"Insert", "x":15.25, "y":1.25},
{ "matrix": [1, 15], "label":"Home", "x":16.25, "y":1.25},
{ "matrix": [1, 16], "label":"Page Up", "x":17.25, "y":1.25},
{ "matrix": [2, 0], "label":"Tab", "x":0, "y":2.25, "w":1.5},
{ "matrix": [2, 1], "label":"Q", "x":1.5, "y":2.25},
{ "matrix": [2, 2], "label":"W", "x":2.5, "y":2.25},
{ "matrix": [2, 3], "label":"E", "x":3.5, "y":2.25},
{ "matrix": [2, 4], "label":"R", "x":4.5, "y":2.25},
{ "matrix": [2, 5], "label":"T", "x":5.5, "y":2.25},
{ "matrix": [2, 6], "label":"Y", "x":6.5, "y":2.25},
{ "matrix": [2, 7], "label":"U", "x":7.5, "y":2.25},
{ "matrix": [2, 8], "label":"I", "x":8.5, "y":2.25},
{ "matrix": [2, 9], "label":"O", "x":9.5, "y":2.25},
{ "matrix": [2, 10], "label":"P", "x":10.5, "y":2.25},
{ "matrix": [2, 11], "label":"{", "x":11.5, "y":2.25},
{ "matrix": [2, 12], "label":"}", "x":12.5, "y":2.25},
{ "matrix": [2, 13], "label":"|", "x":13.5, "y":2.25, "w":1.5},
{ "matrix": [2, 14], "label":"Delete", "x":15.25, "y":2.25},
{ "matrix": [2, 15], "label":"End", "x":16.25, "y":2.25},
{ "matrix": [2, 16], "label":"Page Dn", "x":17.25, "y":2.25},
{ "matrix": [3, 0], "label":"CapsLk", "x":0, "y":3.25, "w":1.75},
{ "matrix": [3, 1], "label":"A", "x":1.75, "y":3.25},
{ "matrix": [3, 2], "label":"S", "x":2.75, "y":3.25},
{ "matrix": [3, 3], "label":"D", "x":3.75, "y":3.25},
{ "matrix": [3, 4], "label":"F", "x":4.75, "y":3.25},
{ "matrix": [3, 5], "label":"G", "x":5.75, "y":3.25},
{ "matrix": [3, 6], "label":"H", "x":6.75, "y":3.25},
{ "matrix": [3, 7], "label":"J", "x":7.75, "y":3.25},
{ "matrix": [3, 8], "label":"K", "x":8.75, "y":3.25},
{ "matrix": [3, 9], "label":"L", "x":9.75, "y":3.25},
{ "matrix": [3, 10], "label":":", "x":10.75, "y":3.25},
{ "matrix": [3, 11], "label":"\"", "x":11.75, "y":3.25},
{ "matrix": [3, 13], "label":"Enter", "x":12.75, "y":3.25, "w":2.25},
{ "matrix": [4, 0], "label":"Shift", "x":0, "y":4.25, "w":2.25},
{ "matrix": [4, 1], "label":"Z", "x":2.25, "y":4.25},
{ "matrix": [4, 2], "label":"X", "x":3.25, "y":4.25},
{ "matrix": [4, 3], "label":"C", "x":4.25, "y":4.25},
{ "matrix": [4, 4], "label":"V", "x":5.25, "y":4.25},
{ "matrix": [4, 5], "label":"B", "x":6.25, "y":4.25},
{ "matrix": [4, 6], "label":"N", "x":7.25, "y":4.25},
{ "matrix": [4, 7], "label":"M", "x":8.25, "y":4.25},
{ "matrix": [4, 8], "label":"<", "x":9.25, "y":4.25},
{ "matrix": [4, 9], "label":">", "x":10.25, "y":4.25},
{ "matrix": [4, 10], "label":"?", "x":11.25, "y":4.25},
{ "matrix": [4, 12], "label":"Shift", "x":12.25, "y":4.25, "w":2.75},
{ "matrix": [4, 15], "label":"\u2191", "x":16.25, "y":4.25},
{ "matrix": [5, 0], "label":"Ctrl", "x":0, "y":5.25, "w":1.25},
{ "matrix": [5, 1], "label":"Win", "x":1.25, "y":5.25, "w":1.25},
{ "matrix": [5, 2], "label":"Alt", "x":2.5, "y":5.25, "w":1.25},
{ "matrix": [5, 6], "label":" ", "x":3.75, "y":5.25, "w":6.25},
{ "matrix": [5, 10], "label":"Alt", "x":10, "y":5.25, "w":1.25},
{ "matrix": [5, 11], "label":"Fn", "x":11.25, "y":5.25, "w":1.25},
{ "matrix": [5, 12], "label":"Menu", "x":12.5, "y":5.25, "w":1.25},
{ "matrix": [5, 13], "label":"Ctrl", "x":13.75, "y":5.25, "w":1.25},
{ "matrix": [5, 14], "label":"\u2190", "x":15.25, "y":5.25},
{ "matrix": [5, 15], "label":"\u2193", "x":16.25, "y":5.25},
{ "matrix": [5, 16], "label":"\u2192", "x":17.25, "y":5.25}
]
}
},
"rgb_matrix": {
"driver": "is31fl3733",
"animations": {
"alphas_mods": true,
"gradient_up_down": true,
"gradient_left_right": true,
"breathing": true,
"band_sat": true,
"band_val": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_up_down": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"rainbow_moving_chevron": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"dual_beacon": true,
"rainbow_beacon": true,
"rainbow_pinwheels": true,
"raindrops": true,
"jellybean_raindrops": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"pixel_fractal": true,
"pixel_flow": true,
"pixel_rain": true,
"typing_heatmap": true,
"digital_rain": true,
"solid_reactive_simple": true,
"solid_reactive": true,
"solid_reactive_wide": true,
"solid_reactive_multiwide": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_nexus": true,
"solid_reactive_multinexus": true,
"splash": true,
"multisplash": true,
"solid_splash": true,
"solid_multisplash": true
},
"layout": [
{ "flags": 4, "matrix": [0, 0], "x": 6, "y": 8 },
{ "flags": 4, "matrix": [0, 1], "x": 21, "y": 8 },
{ "flags": 4, "matrix": [0, 2], "x": 33, "y": 8 },
{ "flags": 4, "matrix": [0, 3], "x": 45, "y": 8 },
{ "flags": 4, "matrix": [0, 4], "x": 57, "y": 8 },
{ "flags": 4, "matrix": [0, 5], "x": 74, "y": 8 },
{ "flags": 4, "matrix": [0, 6], "x": 86, "y": 8 },
{ "flags": 4, "matrix": [0, 7], "x": 98, "y": 8 },
{ "flags": 4, "matrix": [0, 8], "x": 110, "y": 8 },
{ "flags": 4, "matrix": [0, 9], "x": 125, "y": 8 },
{ "flags": 4, "matrix": [0, 10], "x": 137, "y": 8 },
{ "flags": 4, "matrix": [0, 11], "x": 150, "y": 8 },
{ "flags": 4, "matrix": [0, 12], "x": 161, "y": 8 },
{ "flags": 4, "matrix": [0, 13], "x": 176, "y": 8 },
{ "flags": 4, "matrix": [0, 14], "x": 192, "y": 8 },
{ "flags": 4, "matrix": [0, 15], "x": 204, "y": 8 },
{ "flags": 4, "matrix": [1, 0], "x": 6, "y": 21 },
{ "flags": 4, "matrix": [1, 1], "x": 18, "y": 21 },
{ "flags": 4, "matrix": [1, 2], "x": 37, "y": 21 },
{ "flags": 4, "matrix": [1, 3], "x": 43, "y": 21 },
{ "flags": 4, "matrix": [1, 4], "x": 55, "y": 21 },
{ "flags": 4, "matrix": [1, 5], "x": 67, "y": 21 },
{ "flags": 4, "matrix": [1, 6], "x": 79, "y": 21 },
{ "flags": 4, "matrix": [1, 7], "x": 92, "y": 21 },
{ "flags": 4, "matrix": [1, 8], "x": 104, "y": 21 },
{ "flags": 4, "matrix": [1, 9], "x": 116, "y": 21 },
{ "flags": 4, "matrix": [1, 10], "x": 128, "y": 21 },
{ "flags": 4, "matrix": [1, 11], "x": 141, "y": 21 },
{ "flags": 4, "matrix": [1, 12], "x": 153, "y": 21 },
{ "flags": 4, "matrix": [1, 13], "x": 171, "y": 21 },
{ "flags": 4, "matrix": [1, 14], "x": 192, "y": 21 },
{ "flags": 4, "matrix": [1, 15], "x": 204, "y": 21 },
{ "flags": 4, "matrix": [2, 0], "x": 9, "y": 31 },
{ "flags": 4, "matrix": [2, 1], "x": 24, "y": 31 },
{ "flags": 4, "matrix": [2, 2], "x": 36, "y": 31 },
{ "flags": 4, "matrix": [2, 3], "x": 48, "y": 31 },
{ "flags": 4, "matrix": [2, 4], "x": 61, "y": 31 },
{ "flags": 4, "matrix": [2, 5], "x": 73, "y": 31 },
{ "flags": 4, "matrix": [2, 6], "x": 86, "y": 31 },
{ "flags": 4, "matrix": [2, 7], "x": 98, "y": 31 },
{ "flags": 4, "matrix": [2, 8], "x": 110, "y": 31 },
{ "flags": 4, "matrix": [2, 9], "x": 122, "y": 31 },
{ "flags": 4, "matrix": [2, 10], "x": 134, "y": 31 },
{ "flags": 4, "matrix": [2, 11], "x": 146, "y": 31 },
{ "flags": 4, "matrix": [2, 12], "x": 159, "y": 31 },
{ "flags": 4, "matrix": [2, 13], "x": 174, "y": 31 },
{ "flags": 4, "matrix": [2, 14], "x": 192, "y": 31 },
{ "flags": 4, "matrix": [2, 15], "x": 204, "y": 31 },
{ "flags": 4, "matrix": [3, 0], "x": 11, "y": 41 },
{ "flags": 4, "matrix": [3, 1], "x": 27, "y": 41 },
{ "flags": 4, "matrix": [3, 2], "x": 40, "y": 41 },
{ "flags": 4, "matrix": [3, 3], "x": 52, "y": 41 },
{ "flags": 4, "matrix": [3, 4], "x": 64, "y": 41 },
{ "flags": 4, "matrix": [3, 5], "x": 76, "y": 41 },
{ "flags": 4, "matrix": [3, 6], "x": 88, "y": 41 },
{ "flags": 4, "matrix": [3, 7], "x": 100, "y": 41 },
{ "flags": 4, "matrix": [3, 8], "x": 113, "y": 41 },
{ "flags": 4, "matrix": [3, 9], "x": 124, "y": 41 },
{ "flags": 4, "matrix": [3, 10], "x": 137, "y": 41 },
{ "flags": 4, "matrix": [3, 11], "x": 150, "y": 41 },
{ "flags": 4, "matrix": [3, 12], "x": 170, "y": 41 },
{ "flags": 4, "matrix": [0, 16], "x": 217, "y": 8 },
{ "flags": 4, "matrix": [1, 16], "x": 217, "y": 21 },
{ "flags": 4, "matrix": [2, 16], "x": 217, "y": 31 },
{ "flags": 4, "matrix": [4, 0], "x": 13, "y": 51 },
{ "flags": 4, "matrix": [4, 1], "x": 34, "y": 51 },
{ "flags": 4, "matrix": [4, 2], "x": 45, "y": 51 },
{ "flags": 4, "matrix": [4, 3], "x": 58, "y": 51 },
{ "flags": 4, "matrix": [4, 4], "x": 70, "y": 51 },
{ "flags": 4, "matrix": [4, 5], "x": 82, "y": 51 },
{ "flags": 4, "matrix": [4, 6], "x": 94, "y": 51 },
{ "flags": 4, "matrix": [4, 7], "x": 107, "y": 51 },
{ "flags": 4, "matrix": [4, 8], "x": 119, "y": 51 },
{ "flags": 4, "matrix": [4, 9], "x": 131, "y": 51 },
{ "flags": 4, "matrix": [4, 10], "x": 143, "y": 51 },
{ "flags": 4, "matrix": [4, 12], "x": 166, "y": 51 },
{ "flags": 4, "matrix": [4, 15], "x": 204, "y": 51 },
{ "flags": 4, "matrix": [5, 0], "x": 8, "y": 61 },
{ "flags": 4, "matrix": [5, 1], "x": 23, "y": 61 },
{ "flags": 4, "matrix": [5, 2], "x": 38, "y": 61 },
{ "flags": 4, "matrix": [5, 6], "x": 84, "y": 61 },
{ "flags": 4, "matrix": [5, 10], "x": 129, "y": 61 },
{ "flags": 4, "matrix": [5, 11], "x": 144, "y": 61 },
{ "flags": 4, "matrix": [5, 12], "x": 160, "y": 61 },
{ "flags": 4, "matrix": [5, 13], "x": 175, "y": 61 },
{ "flags": 4, "matrix": [5, 14], "x": 192, "y": 61 },
{ "flags": 4, "matrix": [5, 15], "x": 204, "y": 61 },
{ "flags": 4, "matrix": [5, 16], "x": 217, "y": 61 }
]
}
}

View File

@@ -0,0 +1,38 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
* │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13││PSc│Scr│Pse│
* └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp││Ins│Hom│PgU│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ ││Del│End│PgD│
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
* │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl││ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
*/
[0] = LAYOUT_tkl_f13_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_f13_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,_______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EE_CLR, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,5 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define DYNAMIC_KEYMAP_LAYER_COUNT 8

View File

@@ -0,0 +1,38 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
* │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13││PSc│Scr│Pse│
* └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp││Ins│Hom│PgU│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ ││Del│End│PgD│
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
* │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl││ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
*/
[0] = LAYOUT_tkl_f13_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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, KC_UP,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_f13_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______,
_______, RGB_TOG, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_MOD, RGB_VAD, RGB_SPD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,_______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, EE_CLR, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@@ -0,0 +1,14 @@
// Copyright 2023 Massdrop, Inc.
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#include_next <mcuconf.h>
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 16
#undef STM32_PREDIV_VALUE
#define STM32_PREDIV_VALUE 2
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

View File

@@ -0,0 +1,24 @@
# CSTM80
The CSTM80 is a tenkeyless keyboard with customizable switch plates and weights, as well as a magnetically attached top case.
* Keyboard Maintainer: [zvecr](https://github.com/zvecr)
* Hardware Availability: [Drop CSTM80 Mechanical Keyboard](https://drop.com/buy/drop-cstm80-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
make drop/cstm80:default
Flashing example for this keyboard:
make drop/cstm80: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**: Quickly double tap the button located under the spacebar
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

@@ -0,0 +1,4 @@
UF2_DEVICE_TYPE_ID = 0x8bfa7750
UF2CONV_ARGS = --device-type $(UF2_DEVICE_TYPE_ID)
SRC += lib/common.c

View File

@@ -21,7 +21,6 @@
#define ISSI_PWM_FREQUENCY 0b010 // 26k
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_VAL 100
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS

View File

@@ -125,6 +125,7 @@
},
"rgb_matrix": {
"driver": "is31fl3733",
"max_brightness": 191,
"animations": {
"alphas_mods": true,
"gradient_up_down": true,

View File

@@ -5,17 +5,15 @@
# include "quantum.h"
# include "rgb_matrix.h"
# define LED_FLAG_ANY_SWITCH (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR)
# ifdef RGB_MATRIX_CAPS_LOCK_INDEX
bool rgb_matrix_indicators_kb(void) {
if (!rgb_matrix_indicators_user()) {
return false;
}
if (host_keyboard_led_state().caps_lock) {
if (host_keyboard_led_state().caps_lock && (rgb_matrix_get_flags() != LED_FLAG_NONE)) {
rgb_matrix_set_color(RGB_MATRIX_CAPS_LOCK_INDEX, RGB_WHITE);
} else if ((rgb_matrix_get_flags() & LED_FLAG_ANY_SWITCH) == 0) {
} else if (rgb_matrix_get_flags() == LED_FLAG_UNDERGLOW) {
rgb_matrix_set_color(RGB_MATRIX_CAPS_LOCK_INDEX, RGB_OFF);
}
return true;
@@ -33,9 +31,9 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
case RGB_TOG:
switch (rgb_matrix_get_flags()) {
case LED_FLAG_ALL:
rgb_matrix_set_flags(LED_FLAG_ANY_SWITCH);
rgb_matrix_set_flags(LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR);
break;
case LED_FLAG_ANY_SWITCH:
case (LED_FLAG_KEYLIGHT | LED_FLAG_MODIFIER | LED_FLAG_INDICATOR):
rgb_matrix_set_flags(LED_FLAG_UNDERGLOW);
break;
case LED_FLAG_UNDERGLOW:

View File

@@ -22,7 +22,6 @@
#define ISSI_PWM_FREQUENCY 0b010 // 26k
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_VAL 100
#define RGB_MATRIX_KEYPRESSES
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS

View File

@@ -133,6 +133,7 @@
},
"rgb_matrix": {
"driver": "is31fl3733",
"max_brightness": 191,
"animations": {
"alphas_mods": true,
"gradient_up_down": true,

View File

@@ -21,9 +21,7 @@
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B
/* RGB Matrix */
#define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral
#define RGB_MATRIX_DEFAULT_VAL 60
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES
#define RGB_DISABLE_WHEN_USB_SUSPENDED
#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT

View File

@@ -0,0 +1,21 @@
/* Copyright 2023 eerraa
*
* 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
/* BACKLIGHT PWM */
#define BACKLIGHT_PWM_DRIVER PWMD7
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B

View File

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

View File

@@ -0,0 +1,467 @@
{
"manufacturer": "SIRIND",
"keyboard_name": "Klein_HS",
"maintainer": "eerraa",
"backlight": {
"levels": 5,
"pin": "GP15"
},
"bootloader": "rp2040",
"build": {
"debounce_type": "sym_defer_pk"
},
"diode_direction": "COL2ROW",
"features": {
"backlight": true,
"bootmagic": true,
"extrakey": true,
"mousekey": true,
"nkro": true,
},
"indicators": {
"caps_lock": "GP16",
"on_state": 0,
"scroll_lock": "GP17"
},
"matrix_pins": {
"cols": ["GP22", "GP23", "GP24", "GP25", "GP26", "GP27", "GP28", "GP29", "GP11", "GP10", "GP9", "GP8", "GP7", "GP1", "GP2", "GP3"],
"rows": ["GP18", "GP19", "GP20", "GP21", "GP14", "GP5", "GP6", "GP4", "GP13", "GP12"]
},
"processor": "RP2040",
"url": "",
"usb": {
"device_version": "1.0.0",
"pid": "0x0004",
"vid": "0x4552"
},
"layouts": {
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [5, 8], "x": 10.75, "y": 0},
{"matrix": [5, 9], "x": 11.75, "y": 0},
{"matrix": [5, 10], "x": 12.75, "y": 0},
{"matrix": [5, 11], "x": 13.75, "y": 0},
{"matrix": [5, 12], "x": 14.75, "y": 0},
{"matrix": [5, 13], "x": 15.75, "y": 0},
{"matrix": [5, 14], "x": 16.75, "y": 0},
{"matrix": [5, 15], "x": 17.75, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 3, "y": 1},
{"matrix": [1, 3], "x": 4, "y": 1},
{"matrix": [1, 4], "x": 5, "y": 1},
{"matrix": [1, 5], "x": 6, "y": 1},
{"matrix": [1, 6], "x": 7, "y": 1},
{"matrix": [1, 7], "x": 8, "y": 1},
{"matrix": [6, 8], "x": 10.25, "y": 1},
{"matrix": [6, 9], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [6, 12], "x": 14.25, "y": 1},
{"matrix": [6, 13], "x": 15.25, "y": 1},
{"matrix": [6, 14], "x": 16.25, "y": 1},
{"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3.25, "y": 2},
{"matrix": [2, 3], "x": 4.25, "y": 2},
{"matrix": [2, 4], "x": 5.25, "y": 2},
{"matrix": [2, 5], "x": 6.25, "y": 2},
{"matrix": [2, 6], "x": 7.25, "y": 2},
{"matrix": [7, 8], "x": 10.5, "y": 2},
{"matrix": [7, 9], "x": 11.5, "y": 2},
{"matrix": [7, 10], "x": 12.5, "y": 2},
{"matrix": [7, 11], "x": 13.5, "y": 2},
{"matrix": [7, 12], "x": 14.5, "y": 2},
{"matrix": [7, 13], "x": 15.5, "y": 2},
{"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
{"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 3.75, "y": 3},
{"matrix": [3, 3], "x": 4.75, "y": 3},
{"matrix": [3, 4], "x": 5.75, "y": 3},
{"matrix": [3, 5], "x": 6.75, "y": 3},
{"matrix": [3, 6], "x": 7.75, "y": 3},
{"matrix": [8, 8], "x": 10, "y": 3},
{"matrix": [8, 9], "x": 11, "y": 3},
{"matrix": [8, 10], "x": 12, "y": 3},
{"matrix": [8, 11], "x": 13, "y": 3},
{"matrix": [8, 12], "x": 14, "y": 3},
{"matrix": [8, 13], "x": 15, "y": 3},
{"matrix": [8, 14], "x": 16, "y": 3, "w": 1.75},
{"matrix": [8, 15], "x": 17.75, "y": 3},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
{"matrix": [4, 6], "x": 8.25, "y": 4},
{"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
{"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
{"matrix": [9, 13], "x": 15, "y": 4},
{"matrix": [9, 14], "x": 16, "y": 4},
{"matrix": [9, 15], "x": 17, "y": 4}
]
},
"LAYOUT_ansi": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [5, 8], "x": 10.75, "y": 0},
{"matrix": [5, 9], "x": 11.75, "y": 0},
{"matrix": [5, 10], "x": 12.75, "y": 0},
{"matrix": [5, 11], "x": 13.75, "y": 0},
{"matrix": [5, 12], "x": 14.75, "y": 0},
{"matrix": [5, 13], "x": 15.75, "y": 0},
{"matrix": [5, 15], "x": 16.75, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 3, "y": 1},
{"matrix": [1, 3], "x": 4, "y": 1},
{"matrix": [1, 4], "x": 5, "y": 1},
{"matrix": [1, 5], "x": 6, "y": 1},
{"matrix": [1, 6], "x": 7, "y": 1},
{"matrix": [1, 7], "x": 8, "y": 1},
{"matrix": [6, 8], "x": 10.25, "y": 1},
{"matrix": [6, 9], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [6, 12], "x": 14.25, "y": 1},
{"matrix": [6, 13], "x": 15.25, "y": 1},
{"matrix": [6, 14], "x": 16.25, "y": 1},
{"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3.25, "y": 2},
{"matrix": [2, 3], "x": 4.25, "y": 2},
{"matrix": [2, 4], "x": 5.25, "y": 2},
{"matrix": [2, 5], "x": 6.25, "y": 2},
{"matrix": [2, 6], "x": 7.25, "y": 2},
{"matrix": [7, 8], "x": 10.5, "y": 2},
{"matrix": [7, 9], "x": 11.5, "y": 2},
{"matrix": [7, 10], "x": 12.5, "y": 2},
{"matrix": [7, 11], "x": 13.5, "y": 2},
{"matrix": [7, 12], "x": 14.5, "y": 2},
{"matrix": [7, 13], "x": 15.5, "y": 2},
{"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
{"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 3.75, "y": 3},
{"matrix": [3, 3], "x": 4.75, "y": 3},
{"matrix": [3, 4], "x": 5.75, "y": 3},
{"matrix": [3, 5], "x": 6.75, "y": 3},
{"matrix": [3, 6], "x": 7.75, "y": 3},
{"matrix": [8, 8], "x": 10, "y": 3},
{"matrix": [8, 9], "x": 11, "y": 3},
{"matrix": [8, 10], "x": 12, "y": 3},
{"matrix": [8, 11], "x": 13, "y": 3},
{"matrix": [8, 12], "x": 14, "y": 3},
{"matrix": [8, 13], "x": 15, "y": 3},
{"matrix": [8, 14], "x": 16, "y": 3, "w": 2.75},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
{"matrix": [4, 6], "x": 8.25, "y": 4},
{"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
{"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
{"matrix": [9, 15], "x": 17.25, "y": 4, "w": 1.5}
]
},
"LAYOUT_ansi_arrow": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [5, 8], "x": 10.75, "y": 0},
{"matrix": [5, 9], "x": 11.75, "y": 0},
{"matrix": [5, 10], "x": 12.75, "y": 0},
{"matrix": [5, 11], "x": 13.75, "y": 0},
{"matrix": [5, 12], "x": 14.75, "y": 0},
{"matrix": [5, 13], "x": 15.75, "y": 0},
{"matrix": [5, 15], "x": 16.75, "y": 0, "w": 2},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 3, "y": 1},
{"matrix": [1, 3], "x": 4, "y": 1},
{"matrix": [1, 4], "x": 5, "y": 1},
{"matrix": [1, 5], "x": 6, "y": 1},
{"matrix": [1, 6], "x": 7, "y": 1},
{"matrix": [1, 7], "x": 8, "y": 1},
{"matrix": [6, 8], "x": 10.25, "y": 1},
{"matrix": [6, 9], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [6, 12], "x": 14.25, "y": 1},
{"matrix": [6, 13], "x": 15.25, "y": 1},
{"matrix": [6, 14], "x": 16.25, "y": 1},
{"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3.25, "y": 2},
{"matrix": [2, 3], "x": 4.25, "y": 2},
{"matrix": [2, 4], "x": 5.25, "y": 2},
{"matrix": [2, 5], "x": 6.25, "y": 2},
{"matrix": [2, 6], "x": 7.25, "y": 2},
{"matrix": [7, 8], "x": 10.5, "y": 2},
{"matrix": [7, 9], "x": 11.5, "y": 2},
{"matrix": [7, 10], "x": 12.5, "y": 2},
{"matrix": [7, 11], "x": 13.5, "y": 2},
{"matrix": [7, 12], "x": 14.5, "y": 2},
{"matrix": [7, 13], "x": 15.5, "y": 2},
{"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
{"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 3.75, "y": 3},
{"matrix": [3, 3], "x": 4.75, "y": 3},
{"matrix": [3, 4], "x": 5.75, "y": 3},
{"matrix": [3, 5], "x": 6.75, "y": 3},
{"matrix": [3, 6], "x": 7.75, "y": 3},
{"matrix": [8, 8], "x": 10, "y": 3},
{"matrix": [8, 9], "x": 11, "y": 3},
{"matrix": [8, 10], "x": 12, "y": 3},
{"matrix": [8, 11], "x": 13, "y": 3},
{"matrix": [8, 12], "x": 14, "y": 3},
{"matrix": [8, 13], "x": 15, "y": 3},
{"matrix": [8, 14], "x": 16, "y": 3},
{"matrix": [8, 15], "x": 17, "y": 3, "w": 1.75},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
{"matrix": [4, 6], "x": 8.25, "y": 4},
{"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
{"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
{"matrix": [9, 13], "x": 15, "y": 4},
{"matrix": [9, 14], "x": 16, "y": 4},
{"matrix": [9, 15], "x": 17, "y": 4}
]
},
"LAYOUT_ansi_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [5, 8], "x": 10.75, "y": 0},
{"matrix": [5, 9], "x": 11.75, "y": 0},
{"matrix": [5, 10], "x": 12.75, "y": 0},
{"matrix": [5, 11], "x": 13.75, "y": 0},
{"matrix": [5, 12], "x": 14.75, "y": 0},
{"matrix": [5, 13], "x": 15.75, "y": 0},
{"matrix": [5, 14], "x": 16.75, "y": 0},
{"matrix": [5, 15], "x": 17.75, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 3, "y": 1},
{"matrix": [1, 3], "x": 4, "y": 1},
{"matrix": [1, 4], "x": 5, "y": 1},
{"matrix": [1, 5], "x": 6, "y": 1},
{"matrix": [1, 6], "x": 7, "y": 1},
{"matrix": [1, 7], "x": 8, "y": 1},
{"matrix": [6, 8], "x": 10.25, "y": 1},
{"matrix": [6, 9], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [6, 12], "x": 14.25, "y": 1},
{"matrix": [6, 13], "x": 15.25, "y": 1},
{"matrix": [6, 14], "x": 16.25, "y": 1},
{"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3.25, "y": 2},
{"matrix": [2, 3], "x": 4.25, "y": 2},
{"matrix": [2, 4], "x": 5.25, "y": 2},
{"matrix": [2, 5], "x": 6.25, "y": 2},
{"matrix": [2, 6], "x": 7.25, "y": 2},
{"matrix": [7, 8], "x": 10.5, "y": 2},
{"matrix": [7, 9], "x": 11.5, "y": 2},
{"matrix": [7, 10], "x": 12.5, "y": 2},
{"matrix": [7, 11], "x": 13.5, "y": 2},
{"matrix": [7, 12], "x": 14.5, "y": 2},
{"matrix": [7, 13], "x": 15.5, "y": 2},
{"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
{"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 3.75, "y": 3},
{"matrix": [3, 3], "x": 4.75, "y": 3},
{"matrix": [3, 4], "x": 5.75, "y": 3},
{"matrix": [3, 5], "x": 6.75, "y": 3},
{"matrix": [3, 6], "x": 7.75, "y": 3},
{"matrix": [8, 8], "x": 10, "y": 3},
{"matrix": [8, 9], "x": 11, "y": 3},
{"matrix": [8, 10], "x": 12, "y": 3},
{"matrix": [8, 11], "x": 13, "y": 3},
{"matrix": [8, 12], "x": 14, "y": 3},
{"matrix": [8, 13], "x": 15, "y": 3},
{"matrix": [8, 14], "x": 16, "y": 3, "w": 2.75},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
{"matrix": [4, 6], "x": 8.25, "y": 4},
{"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
{"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
{"matrix": [9, 15], "x": 17.25, "y": 4, "w": 1.5}
]
},
"LAYOUT_ansi_split_bs_rsft": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [5, 8], "x": 10.75, "y": 0},
{"matrix": [5, 9], "x": 11.75, "y": 0},
{"matrix": [5, 10], "x": 12.75, "y": 0},
{"matrix": [5, 11], "x": 13.75, "y": 0},
{"matrix": [5, 12], "x": 14.75, "y": 0},
{"matrix": [5, 13], "x": 15.75, "y": 0},
{"matrix": [5, 14], "x": 16.75, "y": 0},
{"matrix": [5, 15], "x": 17.75, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 3, "y": 1},
{"matrix": [1, 3], "x": 4, "y": 1},
{"matrix": [1, 4], "x": 5, "y": 1},
{"matrix": [1, 5], "x": 6, "y": 1},
{"matrix": [1, 6], "x": 7, "y": 1},
{"matrix": [1, 7], "x": 8, "y": 1},
{"matrix": [6, 8], "x": 10.25, "y": 1},
{"matrix": [6, 9], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [6, 12], "x": 14.25, "y": 1},
{"matrix": [6, 13], "x": 15.25, "y": 1},
{"matrix": [6, 14], "x": 16.25, "y": 1},
{"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3.25, "y": 2},
{"matrix": [2, 3], "x": 4.25, "y": 2},
{"matrix": [2, 4], "x": 5.25, "y": 2},
{"matrix": [2, 5], "x": 6.25, "y": 2},
{"matrix": [2, 6], "x": 7.25, "y": 2},
{"matrix": [7, 8], "x": 10.5, "y": 2},
{"matrix": [7, 9], "x": 11.5, "y": 2},
{"matrix": [7, 10], "x": 12.5, "y": 2},
{"matrix": [7, 11], "x": 13.5, "y": 2},
{"matrix": [7, 12], "x": 14.5, "y": 2},
{"matrix": [7, 13], "x": 15.5, "y": 2},
{"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
{"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 3.75, "y": 3},
{"matrix": [3, 3], "x": 4.75, "y": 3},
{"matrix": [3, 4], "x": 5.75, "y": 3},
{"matrix": [3, 5], "x": 6.75, "y": 3},
{"matrix": [3, 6], "x": 7.75, "y": 3},
{"matrix": [8, 8], "x": 10, "y": 3},
{"matrix": [8, 9], "x": 11, "y": 3},
{"matrix": [8, 10], "x": 12, "y": 3},
{"matrix": [8, 11], "x": 13, "y": 3},
{"matrix": [8, 12], "x": 14, "y": 3},
{"matrix": [8, 13], "x": 15, "y": 3},
{"matrix": [8, 14], "x": 16, "y": 3, "w": 1.75},
{"matrix": [8, 15], "x": 17.75, "y": 3},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
{"matrix": [4, 6], "x": 8.25, "y": 4},
{"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
{"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
{"matrix": [9, 15], "x": 17.25, "y": 4, "w": 1.5}
]
},
"LAYOUT_arrow_split_bs": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1.5, "y": 0},
{"matrix": [0, 2], "x": 2.5, "y": 0},
{"matrix": [0, 3], "x": 3.5, "y": 0},
{"matrix": [0, 4], "x": 4.5, "y": 0},
{"matrix": [0, 5], "x": 5.5, "y": 0},
{"matrix": [0, 6], "x": 6.5, "y": 0},
{"matrix": [0, 7], "x": 7.5, "y": 0},
{"matrix": [5, 8], "x": 10.75, "y": 0},
{"matrix": [5, 9], "x": 11.75, "y": 0},
{"matrix": [5, 10], "x": 12.75, "y": 0},
{"matrix": [5, 11], "x": 13.75, "y": 0},
{"matrix": [5, 12], "x": 14.75, "y": 0},
{"matrix": [5, 13], "x": 15.75, "y": 0},
{"matrix": [5, 14], "x": 16.75, "y": 0},
{"matrix": [5, 15], "x": 17.75, "y": 0},
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1.5, "y": 1, "w": 1.5},
{"matrix": [1, 2], "x": 3, "y": 1},
{"matrix": [1, 3], "x": 4, "y": 1},
{"matrix": [1, 4], "x": 5, "y": 1},
{"matrix": [1, 5], "x": 6, "y": 1},
{"matrix": [1, 6], "x": 7, "y": 1},
{"matrix": [1, 7], "x": 8, "y": 1},
{"matrix": [6, 8], "x": 10.25, "y": 1},
{"matrix": [6, 9], "x": 11.25, "y": 1},
{"matrix": [6, 10], "x": 12.25, "y": 1},
{"matrix": [6, 11], "x": 13.25, "y": 1},
{"matrix": [6, 12], "x": 14.25, "y": 1},
{"matrix": [6, 13], "x": 15.25, "y": 1},
{"matrix": [6, 14], "x": 16.25, "y": 1},
{"matrix": [6, 15], "x": 17.25, "y": 1, "w": 1.5},
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1.5, "y": 2, "w": 1.75},
{"matrix": [2, 2], "x": 3.25, "y": 2},
{"matrix": [2, 3], "x": 4.25, "y": 2},
{"matrix": [2, 4], "x": 5.25, "y": 2},
{"matrix": [2, 5], "x": 6.25, "y": 2},
{"matrix": [2, 6], "x": 7.25, "y": 2},
{"matrix": [7, 8], "x": 10.5, "y": 2},
{"matrix": [7, 9], "x": 11.5, "y": 2},
{"matrix": [7, 10], "x": 12.5, "y": 2},
{"matrix": [7, 11], "x": 13.5, "y": 2},
{"matrix": [7, 12], "x": 14.5, "y": 2},
{"matrix": [7, 13], "x": 15.5, "y": 2},
{"matrix": [7, 15], "x": 16.5, "y": 2, "w": 2.25},
{"matrix": [3, 1], "x": 1.5, "y": 3, "w": 2.25},
{"matrix": [3, 2], "x": 3.75, "y": 3},
{"matrix": [3, 3], "x": 4.75, "y": 3},
{"matrix": [3, 4], "x": 5.75, "y": 3},
{"matrix": [3, 5], "x": 6.75, "y": 3},
{"matrix": [3, 6], "x": 7.75, "y": 3},
{"matrix": [8, 8], "x": 10, "y": 3},
{"matrix": [8, 9], "x": 11, "y": 3},
{"matrix": [8, 10], "x": 12, "y": 3},
{"matrix": [8, 11], "x": 13, "y": 3},
{"matrix": [8, 12], "x": 14, "y": 3},
{"matrix": [8, 13], "x": 15, "y": 3},
{"matrix": [8, 14], "x": 16, "y": 3},
{"matrix": [8, 15], "x": 17, "y": 3, "w": 1.75},
{"matrix": [4, 1], "x": 1.5, "y": 4},
{"matrix": [4, 3], "x": 4.5, "y": 4, "w": 1.5},
{"matrix": [4, 5], "x": 6, "y": 4, "w": 2.25},
{"matrix": [4, 6], "x": 8.25, "y": 4},
{"matrix": [9, 9], "x": 10, "y": 4, "w": 2.75},
{"matrix": [9, 11], "x": 12.75, "y": 4, "w": 1.5},
{"matrix": [9, 13], "x": 15, "y": 4},
{"matrix": [9, 14], "x": 16, "y": 4},
{"matrix": [9, 15], "x": 17, "y": 4}
]
}
}
}

View File

@@ -0,0 +1,23 @@
// Copyright 2018-2022 QMK (@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_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RCTL
),
[1] = LAYOUT(
KC_TRNS, 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_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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,23 @@
// Copyright 2018-2022 QMK (@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_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RCTL
),
[1] = LAYOUT(
KC_TRNS, 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_PSCR, KC_SCRL, KC_PAUS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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 @@
VIA_ENABLE = yes

View File

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

View File

@@ -0,0 +1,23 @@
# Mont Cervin Klein
* Keyboard Maintainer: [ERA](https://github.com/eerraa)
* Hardware supported: SIRIND Klein_HS
* Hardware availability: [Syryan](https://srind.mysoho.com/)
Make example for this keyboard (after setting up your build environment):
make era/sirind/klein_hs:default
Flashing example for this keyboard:
make era/sirind/klein_hs: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 ESC(0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly short the `RESET` and `GND` pads on the SWD header twice, or short the `BOOT` header and plug in keyboard
* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available

View File

Some files were not shown because too many files have changed in this diff Show More