summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/info.yml2
-rw-r--r--.vscode/settings.json3
-rw-r--r--common_features.mk13
-rw-r--r--docs/feature_debounce_type.md146
-rw-r--r--docs/ja/api_development_environment.md8
-rw-r--r--docs/ja/api_development_overview.md49
-rw-r--r--docs/ja/api_docs.md73
-rw-r--r--docs/ja/api_overview.md20
-rw-r--r--docs/ja/faq_build.md2
-rw-r--r--docs/ja/faq_general.md2
-rw-r--r--docs/ja/faq_keymap.md2
-rw-r--r--docs/ja/feature_split_keyboard.md4
-rw-r--r--docs/ja/how_a_matrix_works.md2
-rw-r--r--docs/ja/quantum_keycodes.md20
-rw-r--r--docs/ja/reference_configurator_support.md202
-rw-r--r--docs/ja/reference_glossary.md173
-rw-r--r--docs/ja/reference_info_json.md78
-rw-r--r--docs/ja/serial_driver.md75
-rw-r--r--docs/ja/support.md22
-rw-r--r--docs/ja/syllabus.md75
-rw-r--r--docs/ja/translating.md60
-rw-r--r--docs/pr_checklist.md69
-rw-r--r--keyboards/boardsource/4x12/keymaps/via/keymap.c36
-rw-r--r--keyboards/boardsource/4x12/keymaps/via/readme.md5
-rw-r--r--keyboards/boardsource/4x12/keymaps/via/rules.mk1
-rw-r--r--keyboards/converter/adb_usb/adb_usb.h2
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h3
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c123
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md7
-rw-r--r--keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk3
-rw-r--r--keyboards/handwired/swiftrax/pandamic/config.h52
-rw-r--r--keyboards/handwired/swiftrax/pandamic/info.json12
-rw-r--r--keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c49
-rw-r--r--keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c46
-rw-r--r--keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk1
-rw-r--r--keyboards/handwired/swiftrax/pandamic/pandamic.c16
-rw-r--r--keyboards/handwired/swiftrax/pandamic/pandamic.h40
-rw-r--r--keyboards/handwired/swiftrax/pandamic/readme.md13
-rw-r--r--keyboards/handwired/swiftrax/pandamic/rules.mk23
-rw-r--r--keyboards/jj40/config.h4
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/config.h44
-rw-r--r--keyboards/kbdfans/maja_soldered/info.json81
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/keymaps/default/keymap.c43
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/keymaps/via/keymap.c43
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/keymaps/via/rules.mk2
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/maja_soldered.c29
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/maja_soldered.h19
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/readme.md14
-rwxr-xr-xkeyboards/kbdfans/maja_soldered/rules.mk22
-rw-r--r--keyboards/lazydesigners/bolt/via/keymap.c43
-rw-r--r--keyboards/lazydesigners/bolt/via/rules.mk2
-rw-r--r--keyboards/maartenwut/solheim68/config.h143
-rw-r--r--keyboards/maartenwut/solheim68/info.json397
-rw-r--r--keyboards/maartenwut/solheim68/keymaps/default/keymap.c31
-rw-r--r--keyboards/maartenwut/solheim68/keymaps/default/readme.md1
-rw-r--r--keyboards/maartenwut/solheim68/readme.md17
-rw-r--r--keyboards/maartenwut/solheim68/rules.mk22
-rw-r--r--keyboards/maartenwut/solheim68/solheim68.c16
-rw-r--r--keyboards/maartenwut/solheim68/solheim68.h102
-rw-r--r--keyboards/marksard/leftover30/config.h138
-rw-r--r--keyboards/marksard/leftover30/info.json198
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/config.h24
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/keymap.c162
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/readme.md1
-rw-r--r--keyboards/marksard/leftover30/keymaps/default/rules.mk1
-rw-r--r--keyboards/marksard/leftover30/leftover30.c37
-rw-r--r--keyboards/marksard/leftover30/leftover30.h45
-rw-r--r--keyboards/marksard/leftover30/readme.md17
-rw-r--r--keyboards/marksard/leftover30/rules.mk22
-rw-r--r--keyboards/marksard/rhymestone/common/glcdfont.c233
-rw-r--r--keyboards/marksard/rhymestone/common/oled_helper.c87
-rw-r--r--keyboards/marksard/rhymestone/common/oled_helper.h32
-rw-r--r--keyboards/marksard/rhymestone/info.json213
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/config.h27
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/keymap.c226
-rw-r--r--keyboards/marksard/rhymestone/keymaps/default/rules.mk9
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c76
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md3
-rw-r--r--keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk7
-rw-r--r--keyboards/marksard/rhymestone/readme.md18
-rw-r--r--keyboards/marksard/rhymestone/rev1/config.h152
-rw-r--r--keyboards/marksard/rhymestone/rev1/rev1.c108
-rw-r--r--keyboards/marksard/rhymestone/rev1/rev1.h89
-rw-r--r--keyboards/marksard/rhymestone/rev1/rules.mk0
-rw-r--r--keyboards/marksard/rhymestone/rules.mk27
-rw-r--r--keyboards/planck/keymaps/gitdrik/config.h56
-rw-r--r--keyboards/planck/keymaps/gitdrik/keymap.c231
-rw-r--r--keyboards/planck/keymaps/gitdrik/readme.md1
-rw-r--r--keyboards/planck/keymaps/gitdrik/rules.mk3
-rw-r--r--keyboards/plume/plume65/config.h137
-rw-r--r--keyboards/plume/plume65/info.json376
-rw-r--r--keyboards/plume/plume65/keymaps/default/keymap.c33
-rw-r--r--keyboards/plume/plume65/keymaps/default/readme.md1
-rw-r--r--keyboards/plume/plume65/keymaps/via/keymap.c45
-rw-r--r--keyboards/plume/plume65/keymaps/via/rules.mk1
-rw-r--r--keyboards/plume/plume65/plume65.c16
-rw-r--r--keyboards/plume/plume65/plume65.h103
-rw-r--r--keyboards/plume/plume65/readme.md16
-rw-r--r--keyboards/plume/plume65/rules.mk22
-rw-r--r--keyboards/redox_w/keymaps/danielo515/keymap.c65
-rw-r--r--quantum/debounce/readme.md28
-rw-r--r--quantum/debounce/sym_defer_g.c (renamed from quantum/debounce/sym_g.c)0
-rw-r--r--quantum/debounce/sym_defer_pk.c (renamed from quantum/debounce/sym_pk.c)0
-rw-r--r--quantum/debounce/sym_eager_pk.c (renamed from quantum/debounce/eager_pk.c)0
-rw-r--r--quantum/debounce/sym_eager_pr.c (renamed from quantum/debounce/eager_pr.c)0
-rw-r--r--quantum/keymap_extras/keymap_canadian_multilingual.h4
-rw-r--r--users/danielo515/combo.c44
-rw-r--r--users/danielo515/config.h4
-rw-r--r--users/danielo515/process_records.c247
-rw-r--r--users/danielo515/process_records.h94
-rw-r--r--users/stanrc85/rgblight_layers.c38
-rw-r--r--users/stanrc85/rules.mk18
-rw-r--r--users/stanrc85/stanrc85.c36
-rw-r--r--users/stanrc85/startup_fanfare.c43
114 files changed, 5843 insertions, 378 deletions
diff --git a/.github/workflows/info.yml b/.github/workflows/info.yml
index 7551c127e0..bb3a508477 100644
--- a/.github/workflows/info.yml
+++ b/.github/workflows/info.yml
@@ -16,7 +16,7 @@ jobs:
with:
fetch-depth: 0
- - uses: trilom/file-changes-action@v1.2.3
+ - uses: trilom/file-changes-action@v1.2.4
id: file_changes
with:
output: '\n'
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 9aa546a787..775b3df172 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -16,7 +16,8 @@
"*.hpp": "cpp",
"xstddef": "c",
"type_traits": "c",
- "utility": "c"
+ "utility": "c",
+ "ranges": "c"
},
"[markdown]": {
"editor.trimAutoWhitespace": false,
diff --git a/common_features.mk b/common_features.mk
index 1f110d0819..ed6908f4b8 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -397,9 +397,20 @@ ifneq ($(strip $(CUSTOM_MATRIX)), yes)
endif
endif
+# Support for translating old names to new names:
+ifeq ($(strip $(DEBOUNCE_TYPE)),sym_g)
+ DEBOUNCE_TYPE:=sym_defer_g
+else ifeq ($(strip $(DEBOUNCE_TYPE)),eager_pk)
+ DEBOUNCE_TYPE:=sym_eager_pk
+else ifeq ($(strip $(DEBOUNCE_TYPE)),sym_pk)
+ DEBOUNCE_TYPE:=sym_defer_pk
+else ifeq ($(strip $(DEBOUNCE_TYPE)),eager_pr)
+ DEBOUNCE_TYPE:=sym_eager_pr
+endif
+
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
# Debounce Modules. Set DEBOUNCE_TYPE=custom if including one manually.
-DEBOUNCE_TYPE?= sym_g
+DEBOUNCE_TYPE?= sym_defer_g
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
endif
diff --git a/docs/feature_debounce_type.md b/docs/feature_debounce_type.md
index 65b4ea1e53..83ebafe60e 100644
--- a/docs/feature_debounce_type.md
+++ b/docs/feature_debounce_type.md
@@ -1,43 +1,151 @@
-# Debounce algorithm
+# Contact bounce / contact chatter
-QMK supports multiple debounce algorithms through its debounce API.
+Mechanical switches often don't have a clean single transition between pressed and unpressed states.
+
+In an ideal world, when you press a switch, you would expect the digital pin to see something like this:
+(X axis showing time
+```
+voltage +----------------------
+ ^ |
+ | |
+ | ------------------+
+ ----> time
+```
+
+However in the real world you will actually see contact bounce, which will look like multiple 1->0 and 0->1 transitions,
+until the value finally settles.
+```
+ +-+ +--+ +-------------
+ | | | | |
+ | | | | |
++-----------------+ +-+ +-+
+```
+The time it takes for the switch to settle might vary with switch type, age, and even pressing technique.
+
+If the device chooses not to mitigate contact bounce, then often actions that happen when the switch is pressed are repeated
+multiple times.
+
+There are many ways to handle contact bounce ("Debouncing"). Some include employing additional hardware, for example an RC filter,
+while there are various ways to do debouncing in software too, often called debounce algorithms. This page discusses software
+debouncing methods available in QMK.
+
+While technically not considered contact bounce/contact chatter, some switch technologies are susceptible to noise, meaning,
+while the key is not changing state, sometimes short random 0->1 or 1->0 transitions might be read by the digital circuit, for example:
+```
+ +-+
+ | |
+ | |
++-----------------+ +--------------------
+```
+
+Many debounce methods (but not all) will also make the device resistant to noise. If you are working with a technology that is
+susceptible to noise, you must choose a debounce method that will also mitigate noise for you.
+
+## Types of debounce algorithms
-The logic for which debounce method called is below. It checks various defines that you have set in rules.mk
+1) Unit of time: Timestamp (milliseconds) vs Cycles (scans)
+ * Debounce algorithms often have a 'debounce time' parameter, that specifies the maximum settling time of the switch contacts.
+ This time might be measured in various units:
+ * Cycles-based debouncing waits n cycles (scans), decreasing count by one each matrix_scan
+ * Timestamp-based debouncing stores the millisecond timestamp a change occurred, and does substraction to figure out time elapsed.
+ * Timestamp-based debouncing is usually superior, especially in the case of noise-resistant devices because settling times of physical
+ switches is specified in units of time, and should not depend on the matrix scan-rate of the keyboard.
+ * Cycles-based debouncing is sometimes considered inferior, because the settling time that it is able to compensate for depends on the
+ performance of the matrix scanning code. If you use cycles-based debouncing, and you significantly improve the performance of your scanning
+ code, you might end up with less effective debouncing. A situation in which cycles-based debouncing might be preferable is when
+ noise is present, and the scanning algorithm is slow, or variable speed. Even if your debounce algorithm is fundamentally noise-resistant,
+ if the scanning is slow, and you are using a timestamp-based algorithm, you might end up making a debouncing decision based on only two
+ sampled values, which will limit the noise-resistance of the algorithm.
+ * Currently all built-in debounce algorithms support timestamp-based debouncing only. In the future we might
+ implement cycles-based debouncing, and it will be selectable via a ```config.h``` macro.
+
+2) Symmetric vs Asymmetric
+ * Symmetric - apply the same debouncing algorithm, to both key-up and key-down events.
+ * Recommended naming convention: ```sym_*```
+ * Asymmetric - apply different debouncing algorithms to key-down and key-up events. E.g. Eager key-down, Defer key-up.
+ * Recommended naming convention: ```asym_*``` followed by details of the type of algorithm in use, in order, for key-down and then key-up
+
+3) Eager vs Defer
+ * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
+ * Eager algorithms are not noise-resistant.
+ * Recommended naming conventions:
+ * ```sym_eager_*```
+ * ```asym_eager_*_*```: key-down is using eager algorithm
+ * ```asym_*_eager_*```: key-up is using eager algorithm
+ * Defer - wait for no changes for DEBOUNCE ms before reporting change.
+ * Defer algorithms are noise-resistant
+ * Recommended naming conventions:
+ * ```sym_defer_*```
+ * ```asym_defer_*_*```: key-down is using eager algorithm
+ * ```asym_*_defer_*```: key-up is using eager algorithm
+
+4) Global vs Per-Key vs Per-Row
+ * Global - one timer for all keys. Any key change state affects global timer
+ * Recommended naming convention: ```*_g```
+ * Per-key - one timer per key
+ * Recommended naming convention: ```*_pk```
+ * Per-row - one timer per row
+ * Recommended naming convention: ```*_pr```
+ * Per-key and per-row algorithms consume more resources (in terms of performance,
+ and ram usage), but fast typists might prefer them over global.
+
+## Debounce algorithms supported by QMK
+
+QMK supports multiple debounce algorithms through its debounce API.
+The logic for which debounce method called is below. It checks various defines that you have set in ```rules.mk```
```
DEBOUNCE_DIR:= $(QUANTUM_DIR)/debounce
-DEBOUNCE_TYPE?= sym_g
+DEBOUNCE_TYPE?= sym_defer_g
ifneq ($(strip $(DEBOUNCE_TYPE)), custom)
QUANTUM_SRC += $(DEBOUNCE_DIR)/$(strip $(DEBOUNCE_TYPE)).c
endif
```
-# Debounce selection
+### Debounce selection
| DEBOUNCE_TYPE | Description | What else is needed |
| ------------- | --------------------------------------------------- | ----------------------------- |
-| Not defined | Use the default algorithm, currently sym_g | Nothing |
+| Not defined | Use the default algorithm, currently sym_defer_g | Nothing |
| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
-| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
+| Anything Else | Use another algorithm from quantum/debounce/* | Nothing |
**Regarding split keyboards**:
The debounce code is compatible with split keyboards.
-# Use your own debouncing code
-* Set ```DEBOUNCE_TYPE = custom```.
-* Add ```SRC += debounce.c```
+### Selecting an included debouncing method
+Keyboards may select one of the already implemented debounce methods, by adding to ```rules.mk``` the following line:
+```
+DEBOUNCE_TYPE = <name of algorithm>
+```
+Where name of algorithm is one of:
+* ```sym_defer_g``` - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occurred, all input changes are pushed.
+ * This is the current default algorithm. This is the highest performance algorithm with lowest memory usage, and it's also noise-resistant.
+* ```sym_eager_pr``` - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row.
+For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
+appropriate for the ErgoDox models; the matrix is rotated 90ยฐ, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
+* ```sym_eager_pk``` - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
+* ```sym_defer_pk``` - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occurred on that key, the key status change is pushed.
+
+### A couple algorithms that could be implemented in the future:
+* ```sym_defer_pr```
+* ```sym_eager_g```
+* ```asym_eager_defer_pk```
+
+### Use your own debouncing code
+You have the option to implement you own debouncing algorithm. To do this:
+* Set ```DEBOUNCE_TYPE = custom``` in ```rules.mk```.
+* Add ```SRC += debounce.c``` in ```rules.mk```
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
* Debouncing occurs after every raw matrix scan.
* Use num_rows rather than MATRIX_ROWS, so that split keyboards are supported correctly.
+* If the algorithm might be applicable to other keyboards, please consider adding it to ```quantum/debounce```
-# Changing between included debouncing methods
-You can either use your own code, by including your own debounce.c, or switch to another included one.
-Included debounce methods are:
-* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row.
-For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
-appropriate for the ErgoDox models; the matrix is rotated 90ยฐ, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
-* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
-* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occured, all input changes are pushed.
-* sym_pk - debouncing per key. On any state change, a per-key timer is set. When ```DEBOUNCE``` milliseconds of no changes have occured on that key, the key status change is pushed.
+### Old names
+The following old names for existing algorithms will continue to be supported, however it is recommended to use the new names instead.
+* sym_g - old name for sym_defer_g
+* eager_pk - old name for sym_eager_pk
+* sym_pk - old name for sym_defer_pk
+* eager_pr - old name for sym_eager_pr
diff --git a/docs/ja/api_development_environment.md b/docs/ja/api_development_environment.md
new file mode 100644
index 0000000000..8dce1ba2fd
--- /dev/null
+++ b/docs/ja/api_development_environment.md
@@ -0,0 +1,8 @@
+# ้–‹็™บ็’ฐๅขƒใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—
+
+<!---
+ original document: 0.9.50:docs/api_development_environment.md
+ git diff 0.9.50 HEAD -- docs/api_development_environment.md | cat
+-->
+
+้–‹็™บ็’ฐๅขƒใ‚’ใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ใ™ใ‚‹ใซใฏใ€[qmk_web_stack](https://github.com/qmk/qmk_web_stack) ใซ่กŒใฃใฆใใ ใ•ใ„ใ€‚
diff --git a/docs/ja/api_development_overview.md b/docs/ja/api_development_overview.md
new file mode 100644
index 0000000000..0612507b4d
--- /dev/null
+++ b/docs/ja/api_development_overview.md
@@ -0,0 +1,49 @@
+# QMK ใ‚ณใƒณใƒ‘ใ‚คใƒฉ้–‹็™บใ‚ฌใ‚คใƒ‰
+
+<!---
+ original document: 0.9.50:docs/api_development_overview.md
+ git diff 0.9.50 HEAD -- docs/api_development_overview.md | cat
+-->
+
+ใ“ใฎใƒšใƒผใ‚ธใงใฏใ€้–‹็™บ่€…ใซ QMK ใ‚ณใƒณใƒ‘ใ‚คใƒฉใ‚’็ดนไป‹ใ—ใ‚ˆใ†ใจๆ€ใ„ใพใ™ใ€‚ใ‚ณใƒผใƒ‰ใ‚’่ชญใพใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใ‚ˆใ†ใชๆ ธๅฟƒใจใชใ‚‹่ฉณ็ดฐใซ็ซ‹ใกๅ…ฅใฃใฆ่ชฟในใ‚‹ใ“ใจใฏใ—ใพใ›ใ‚“ใ€‚ใ“ใ“ใงๅพ—ใ‚‰ใ‚Œใ‚‹ใ‚‚ใฎใฏใ€ใ‚ณใƒผใƒ‰ใ‚’่ชญใ‚“ใง็†่งฃใ‚’ๆทฑใ‚ใ‚‹ใŸใ‚ใฎใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใงใ™ใ€‚
+
+# ๆฆ‚่ฆ
+
+QMK Compile API ใฏใ€ใ„ใใคใ‹ใฎๅฏๅ‹•้ƒจๅˆ†ใ‹ใ‚‰ใงใใฆใ„ใพใ™:
+
+![ๆง‹้€ ๅ›ณ](https://raw.githubusercontent.com/qmk/qmk_api/master/docs/architecture.svg)
+
+API ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆใฏ API ใ‚ตใƒผใƒ“ใ‚นใจๆŽ’ไป–็š„ใซใ‚„ใ‚Šใจใ‚Šใ‚’ใ—ใพใ™ใ€‚ใ“ใ“ใงใ‚ธใƒงใƒ–ใ‚’ใ‚ตใƒ–ใƒŸใƒƒใƒˆใ—ใ€็Šถๆ…‹ใ‚’่ชฟในใ€็ตๆžœใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ—ใพใ™ใ€‚API ใ‚ตใƒผใƒ“ใ‚นใฏใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ธใƒงใƒ–ใ‚’ [Redis Queue](https://python-rq.org) ใซๆŒฟๅ…ฅใ—ใ€ใใ‚Œใ‚‰ใฎใ‚ธใƒงใƒ–ใฎ็ตๆžœใซใคใ„ใฆ RQ ใจ S3 ใฎไธกๆ–นใ‚’่ชฟในใพใ™ใ€‚
+
+ใƒฏใƒผใ‚ซใƒผใฏ RQ ใ‹ใ‚‰ๆ–ฐใ—ใ„ใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ธใƒงใƒ–ใ‚’ๅ–ใ‚Šๅ‡บใ—ใ€ใ‚ฝใƒผใ‚นใจใƒใ‚คใƒŠใƒชใ‚’ S3 ไบ’ๆ›ใฎใ‚นใƒˆใƒฌใƒผใ‚ธใ‚จใƒณใ‚ธใƒณใซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ—ใพใ™ใ€‚
+
+# ใƒฏใƒผใ‚ซใƒผ
+
+QMK ใ‚ณใƒณใƒ‘ใ‚คใƒฉใƒฏใƒผใ‚ซใƒผใฏๅฎŸ้š›ใฎใƒ“ใƒซใƒ‰ไฝœๆฅญใซ่ฒฌไปปใ‚’ๆŒใกใพใ™ใ€‚ใƒฏใƒผใ‚ซใƒผใฏ RQ ใ‹ใ‚‰ใ‚ธใƒงใƒ–ใ‚’ๅ–ใ‚Šๅ‡บใ—ใ€ใ‚ธใƒงใƒ–ใ‚’ๅฎŒไบ†ใ™ใ‚‹ใŸใ‚ใซใ„ใใคใ‹ใฎไบ‹ใ‚’่กŒใ„ใพใ™:
+
+* ๆ–ฐใ—ใ„ qmk_firmware ใฎใƒใ‚งใƒƒใ‚ฏใ‚ขใ‚ฆใƒˆใ‚’ไฝœๆˆใ™ใ‚‹
+* ๆŒ‡ๅฎšใ•ใ‚ŒใŸใƒฌใ‚คใƒคใƒผใจใ‚ญใƒผใƒœใƒผใƒ‰ใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’ไฝฟใฃใฆ `keymap.c` ใ‚’ใƒ“ใƒซใƒ‰ใ™ใ‚‹
+* ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ‚’ใƒ“ใƒซใƒ‰ใ™ใ‚‹
+* ใ‚ฝใƒผใ‚นใฎใ‚ณใƒ”ใƒผใ‚’ zip ๅฝขๅผใงๅœง็ธฎใ™ใ‚‹
+* ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ€ใ‚ฝใƒผใ‚นใฎ zip ใƒ•ใ‚กใ‚คใƒซใ€ใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใƒ•ใ‚กใ‚คใƒซใ‚’ S3 ใซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ™ใ‚‹
+* ใ‚ธใƒงใƒ–ใฎ็Šถๆ…‹ใ‚’ RQ ใซ้€ไฟกใ™ใ‚‹
+
+# API ใ‚ตใƒผใƒ“ใ‚น
+
+API ใ‚ตใƒผใƒ“ใ‚นใฏๆฏ”่ผƒ็š„ๅ˜็ด”ใช Flask ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงใ™ใ€‚็†่งฃใ—ใฆใŠใในใใ“ใจใŒๅนพใคใ‹ใ‚ใ‚Šใพใ™ใ€‚
+
+## @app.route('/v1/compile', methods=['POST'])
+
+ใ“ใ‚Œใฏ API ใฎไธปใชใ‚จใƒณใƒˆใƒชใƒผใƒใ‚คใƒณใƒˆใงใ™ใ€‚ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆใจใฎใ‚„ใ‚Šใจใ‚Šใฏใ“ใ“ใ‹ใ‚‰้–‹ๅง‹ใ•ใ‚Œใพใ™ใ€‚ใ‚ฏใƒฉใ‚คใ‚ขใƒณใƒˆใฏใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’่กจใ™ JSON ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’ POST ใ—ใ€API ใฏใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ธใƒงใƒ–ใ‚’ใ‚ตใƒ–ใƒŸใƒƒใƒˆใ™ใ‚‹ๅ‰ใซใ„ใใ‚‰ใ‹ใฎ(ใจใฆใ‚‚)ๅŸบๆœฌ็š„ใชๆคœ่จผใ‚’่กŒใ„ใพใ™ใ€‚
+
+## @app.route('/v1/compile/&lt;string:job_id&gt;', methods=['GET'])
+
+ใ“ใ‚Œใฏๆœ€ใ‚‚ใ‚ˆใๅ‘ผใฐใ‚Œใ‚‹ใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใงใ™ใ€‚ใ‚ธใƒงใƒ–ใฎ่ฉณ็ดฐใŒ redis ใ‹ใ‚‰ๅˆฉ็”จๅฏ่ƒฝใงใ‚ใ‚Œใฐใใ‚Œใ‚’ๅ–ใ‚Šๅ‡บใ—ใ€ใใ†ใงใชใ‘ใ‚Œใฐ S3 ใ‹ใ‚‰ใ‚ญใƒฃใƒƒใ‚ทใƒฅใ•ใ‚ŒใŸใ‚ธใƒงใƒ–ใฎ่ฉณ็ดฐใ‚’ๅ–ใ‚Šๅ‡บใ—ใพใ™ใ€‚
+
+## @app.route('/v1/compile/&lt;string:job_id&gt;/download', methods=['GET'])
+
+ใ“ใฎใƒกใ‚ฝใƒƒใƒ‰ใซใ‚ˆใ‚Šใƒฆใƒผใ‚ถใฏใ‚ณใƒณใƒ‘ใ‚คใƒซใ•ใ‚ŒใŸใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
+
+## @app.route('/v1/compile/&lt;string:job_id&gt;/source', methods=['GET'])
+
+ใ“ใฎใƒกใ‚ฝใƒƒใƒ‰ใซใ‚ˆใ‚Šใƒฆใƒผใ‚ถใฏใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใฎใ‚ฝใƒผใ‚นใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
diff --git a/docs/ja/api_docs.md b/docs/ja/api_docs.md
new file mode 100644
index 0000000000..b483c045e6
--- /dev/null
+++ b/docs/ja/api_docs.md
@@ -0,0 +1,73 @@
+# QMK API
+
+<!---
+ original document: 0.9.50:docs/api_docs.md
+ git diff 0.9.50 HEAD -- docs/api_docs.md | cat
+-->
+
+ใ“ใฎใƒšใƒผใ‚ธใฏ QMK API ใฎไฝฟใ„ๆ–นใ‚’่ชฌๆ˜Žใ—ใพใ™ใ€‚ใ‚‚ใ—ใ‚ใชใŸใŒใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ้–‹็™บ่€…ใงใ‚ใ‚Œใฐใ€ๅ…จใฆใฎ [QMK](https://qmk.fm) ใ‚ญใƒผใƒœใƒผใƒ‰ใฎใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ‚’ใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ใŸใ‚ใซใ€ใ“ใฎ API ใ‚’ไฝฟใ†ใ“ใจใŒใงใใพใ™ใ€‚
+
+## ๆฆ‚่ฆ
+
+ใ“ใฎใ‚ตใƒผใƒ“ใ‚นใฏใ€ใ‚ซใ‚นใ‚ฟใƒ ใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ใŸใ‚ใฎ้žๅŒๆœŸ API ใงใ™ใ€‚API ใซ ไฝ•ใ‚‰ใ‹ใฎ JSON ใ‚’ POST ใ—ใ€ๅฎšๆœŸ็š„ใซ็Šถๆ…‹ใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใ€ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใฎใ‚ณใƒณใƒ‘ใ‚คใƒซใŒๅฎŒไบ†ใ—ใฆใ„ใ‚Œใฐใ€็ตๆžœใฎใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใจ(ใ‚‚ใ—ๅธŒๆœ›ใ™ใ‚Œใฐ)ใใฎใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใฎใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใ‚’ใƒ€ใ‚ฆใƒณใƒญใƒผใƒ‰ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
+
+#### JSON ใƒšใ‚คใƒญใƒผใƒ‰ใฎไพ‹:
+
+```json
+{
+ "keyboard": "clueboard/66/rev2",
+ "keymap": "my_awesome_keymap",
+ "layout": "LAYOUT_all",
+ "layers": [
+ ["KC_GRV","KC_1","KC_2","KC_3","KC_4","KC_5","KC_6","KC_7","KC_8","KC_9","KC_0","KC_MINS","KC_EQL","KC_GRV","KC_BSPC","KC_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_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_NUHS","KC_ENT","KC_LSFT","KC_NUBS","KC_Z","KC_X","KC_C","KC_V","KC_B","KC_N","KC_M","KC_COMM","KC_DOT","KC_SLSH","KC_RO","KC_RSFT","KC_UP","KC_LCTL","KC_LGUI","KC_LALT","KC_MHEN","KC_SPC","KC_SPC","KC_HENK","KC_RALT","KC_RCTL","MO(1)","KC_LEFT","KC_DOWN","KC_RIGHT"],
+ ["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_TRNS","KC_DEL","BL_STEP","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","_______","KC_TRNS","KC_PSCR","KC_SLCK","KC_PAUS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(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","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_PGUP","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(1)","KC_LEFT","KC_PGDN","KC_RGHT"],
+ ["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","RESET","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(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","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","MO(1)","KC_TRNS","KC_TRNS","KC_TRNS"]
+ ]
+}
+```
+
+ใ”่ฆงใฎใจใŠใ‚Šใ€ใƒšใ‚คใƒญใƒผใƒ‰ใซใฏใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ‚’ไฝœๆˆใŠใ‚ˆใณ็”Ÿๆˆใ™ใ‚‹ใŸใ‚ใซๅฟ…่ฆใชใ‚ญใƒผใƒœใƒผใƒ‰ใฎๅ…จใฆใฎๅด้ขใ‚’่จ˜่ฟฐใ—ใพใ™ใ€‚ๅ„ใƒฌใ‚คใƒคใƒผใฏ QMK ใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎ1ใคใฎใƒชใ‚นใƒˆใงใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใฎ `LAYOUT` ใƒžใ‚ฏใƒญใจๅŒใ˜้•ทใ•ใงใ™ใ€‚ใ‚‚ใ—ใ‚ญใƒผใƒœใƒผใƒ‰ใŒ่ค‡ๆ•ฐใฎ `LAYOUT` ใƒžใ‚ฏใƒญใ‚’ใ‚ตใƒใƒผใƒˆใ™ใ‚‹ๅ ดๅˆใ€ใฉใฎใƒžใ‚ฏใƒญใ‚’ไฝฟใ†ใ‹ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
+
+## ใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ธใƒงใƒ–ใฎใ‚ตใƒ–ใƒŸใƒƒใƒˆ
+
+ใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใซใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ใซใฏใ€ๅ˜็ด”ใซ JSON ใ‚’ `/v1/compile` ใ‚จใƒณใƒ‰ใƒใ‚คใƒณใƒˆใซ POST ใ—ใพใ™ใ€‚ไปฅไธ‹ใฎไพ‹ใงใฏใ€JSON ใƒšใ‚คใƒญใƒผใƒ‰ใ‚’ `json_data` ใจใ„ใ†ๅๅ‰ใฎใƒ•ใ‚กใ‚คใƒซใซ้…็ฝฎใ—ใฆใ„ใพใ™ใ€‚
+
+```
+$ curl -H "Content-Type: application/json" -X POST -d "$(< json_data)" http://api.qmk.fm/v1/compile
+{
+ "enqueued": true,
+ "job_id": "ea1514b3-bdfc-4a7b-9b5c-08752684f7f6"
+}
+```
+
+## ็Šถๆ…‹ใฎใƒใ‚งใƒƒใ‚ฏ
+
+ใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ใ‚ตใƒ–ใƒŸใƒƒใƒˆใ—ใŸๅพŒใงใ€็ฐกๅ˜ใช HTTP GET ๅ‘ผใณๅ‡บใ—ใ‚’ไฝฟใฃใฆ็Šถๆ…‹ใ‚’ใƒใ‚งใƒƒใ‚ฏใ™ใ‚‹ใ“ใจใŒใงใใพใ™:
+
+```
+$ curl http://api.qmk.fm/v1/compile/ea1514b3-bdfc-4a7b-9b5c-08752684f7f6
+{
+ "created_at": "Sat, 19 Aug 2017 21:39:12 GMT",
+ "enqueued_at": "Sat, 19 Aug 2017 21:39:12 GMT",
+ "id": "f5f9b992-73b4-479b-8236-df1deb37c163",
+ "status": "running",
+ "result": null
+}
+```
+
+ใ“ใ‚Œใฏใ€ใ‚ธใƒงใƒ–ใ‚’ใ‚ญใƒฅใƒผใซๅ…ฅใ‚Œใ‚‹ใ“ใจใซๆˆๅŠŸใ—ใ€็พๅœจๅฎŸ่กŒไธญใงใ‚ใ‚‹ใ“ใจใ‚’็คบใ—ใฆใ„ใพใ™ใ€‚5ใคใฎ็Šถๆ…‹ใŒใ‚ใ‚Šใˆใพใ™:
+
+* **failed**: ใชใ‚“ใ‚‰ใ‹ใฎ็†็”ฑใงใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ตใƒผใƒ“ใ‚นใŒๅคฑๆ•—ใ—ใพใ—ใŸใ€‚
+* **finished**: ใ‚ณใƒณใƒ‘ใ‚คใƒซใŒๅฎŒไบ†ใ—ใ€็ตๆžœใ‚’่ฆ‹ใ‚‹ใซใฏ `result` ใ‚’ใƒใ‚งใƒƒใ‚ฏใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
+* **queued**: ใ‚ญใƒผใƒžใƒƒใƒ—ใฏใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ตใƒผใƒใŒๅˆฉ็”จๅฏ่ƒฝใซใชใ‚‹ใฎใ‚’ๅพ…ใฃใฆใ„ใพใ™ใ€‚
+* **running**: ใ‚ณใƒณใƒ‘ใ‚คใƒซใŒ้€ฒ่กŒไธญใงใ€ใพใ‚‚ใชใๅฎŒไบ†ใ™ใ‚‹ใฏใšใงใ™ใ€‚
+* **unknown**: ๆทฑๅˆปใชใ‚จใƒฉใƒผใŒ็™บ็”Ÿใ—ใ€[ใƒใ‚ฐใ‚’ๅ ฑๅ‘Š](https://github.com/qmk/qmk_compiler/issues)ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
+
+## ๅฎŒไบ†ใ—ใŸ็ตๆžœใ‚’ๆคœ่จผ
+
+ใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ธใƒงใƒ–ใŒๅฎŒไบ†ใ—ใŸใ‚‰ใ€`result` ใ‚ญใƒผใ‚’ใƒใ‚งใƒƒใ‚ฏใ—ใพใ™ใ€‚ใ“ใฎใ‚ญใƒผใฎๅ€คใฏๅนพใคใ‹ใฎๆƒ…ๅ ฑใ‚’ๅซใ‚€ใƒใƒƒใ‚ทใƒฅใงใ™:
+
+* `firmware_binary_url`: ๆ›ธใ่พผใฟๅฏ่ƒฝใชใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใฎ URL ใฎใƒชใ‚นใƒˆ
+* `firmware_keymap_url`: `keymap.c` ใฎ URL ใฎใƒชใ‚นใƒˆ
+* `firmware_source_url`: ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใฎๅฎŒๅ…จใชใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฎ URL ใฎใƒชใ‚นใƒˆ
+* `output`: ใ“ใฎใ‚ณใƒณใƒ‘ใ‚คใƒซใ‚ธใƒงใƒ–ใฎ stdout ใจ stderrใ€‚ใ‚จใƒฉใƒผใฏใ“ใ“ใง่ฆ‹ใคใ‘ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
diff --git a/docs/ja/api_overview.md b/docs/ja/api_overview.md
new file mode 100644
index 0000000000..18b8eae10f
--- /dev/null
+++ b/docs/ja/api_overview.md
@@ -0,0 +1,20 @@
+# QMK API
+
+<!---
+ original document: 0.9.50:docs/api_overview.md
+ git diff 0.9.50 HEAD -- docs/api_overview.md | cat
+-->
+
+QMK API ใฏใ€Web ใจ GUI ใƒ„ใƒผใƒซใŒ [QMK](http://qmk.fm/) ใซใ‚ˆใฃใฆใ‚ตใƒใƒผใƒˆใ•ใ‚Œใ‚‹ใ‚ญใƒผใƒœใƒผใƒ‰็”จใฎไปปๆ„ใฎใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ใŸใ‚ใซไฝฟใ†ใ“ใจใŒใงใใ‚‹ใ€้žๅŒๆœŸ API ใ‚’ๆไพ›ใ—ใพใ™ใ€‚ๆจ™ๆบ–ใฎใ‚ญใƒผใƒžใƒƒใƒ—ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใฏใ€C ใ‚ณใƒผใƒ‰ใฎใ‚ตใƒใƒผใƒˆใ‚’ๅฟ…่ฆใจใ—ใชใ„ๅ…จใฆใฎ QMK ใ‚ญใƒผใ‚ณใƒผใƒ‰ใ‚’ใ‚ตใƒใƒผใƒˆใ—ใพใ™ใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰ใฎใƒกใƒณใƒ†ใƒŠใฏ็‹ฌ่‡ชใฎใ‚ซใ‚นใ‚ฟใƒ ใƒ†ใƒณใƒ—ใƒฌใƒผใƒˆใ‚’ๆไพ›ใ—ใฆใ€ใ‚ˆใ‚ŠๅคšใใฎๆฉŸ่ƒฝใ‚’ๅฎŸ็พใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
+
+## ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ้–‹็™บ่€…
+
+ใ‚‚ใ—ใ‚ใชใŸใŒใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณใงใ“ใฎ API ใ‚’ไฝฟใ†ใ“ใจใซ่ˆˆๅ‘ณใŒใ‚ใ‚‹ใ‚ขใƒ—ใƒชใ‚ฑใƒผใ‚ทใƒงใƒณ้–‹็™บ่€…ใงใ‚ใ‚Œใฐใ€[API ใฎไฝฟ็”จ](ja/api_docs.md) ใซ่กŒใในใใงใ™ใ€‚
+
+## ใ‚ญใƒผใƒœใƒผใƒ‰ใฎใƒกใƒณใƒ†ใƒŠ
+
+ใ‚‚ใ— QMK Compiler API ใงใฎใ‚ใชใŸใฎใ‚ญใƒผใƒœใƒผใƒ‰ใฎใ‚ตใƒใƒผใƒˆใ‚’ๅผทๅŒ–ใ—ใŸใ„ๅ ดๅˆใฏใ€[ใ‚ญใƒผใƒœใƒผใƒ‰ใ‚ตใƒใƒผใƒˆ](ja/reference_configurator_support.md) ใฎ็ฏ€ใซ่กŒใในใใงใ™ใ€‚
+
+## ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰้–‹็™บ่€…
+
+ใ‚‚ใ— API ่‡ชไฝ“ใซๅ–ใ‚Š็ต„ใ‚€ใ“ใจใซ่ˆˆๅ‘ณใŒใ‚ใ‚‹ๅ ดๅˆใฏใ€[้–‹็™บ็’ฐๅขƒ](ja/api_development_environment.md)ใฎใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ใ‹ใ‚‰ๅง‹ใ‚ใ€ใใ‚Œใ‹ใ‚‰ [API ใฎใƒใƒƒใ‚ญใƒณใ‚ฐ](ja/api_development_overview.md) ใ‚’่ชฟในใ‚‹ในใใงใ™ใ€‚
diff --git a/docs/ja/faq_build.md b/docs/ja/faq_build.md
index 97e1bd8cf7..62c36f2497 100644
--- a/docs/ja/faq_build.md
+++ b/docs/ja/faq_build.md
@@ -145,4 +145,4 @@ ARM ใƒ™ใƒผใ‚นใฎใƒใƒƒใƒ—ไธŠใงใฎ EEPROM ใฎๅ‹•ไฝœใซใ‚ˆใฃใฆใ€ไฟๅญ˜ใ•ใ‚Œใ
[Planck rev6 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) ใ‚’ไฝฟใฃใฆ eeprom ใฎใƒชใ‚ปใƒƒใƒˆใ‚’ๅผทๅˆถใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใฎใ‚คใƒกใƒผใ‚ธใ‚’ๆ›ธใ่พผใ‚“ใ ๅพŒใงใ€้€šๅธธใฎใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ‚’ๆ›ธใ่พผใ‚€ใจใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใŒ_้€šๅธธ_ ใฎๅ‹•ไฝœ้ †ๅบใซๅพฉๅ…ƒใ•ใ‚Œใพใ™ใ€‚
[Preonic rev3 reset EEPROM](https://cdn.discordapp.com/attachments/473506116718952450/537849497313738762/preonic_rev3_default.bin)
-ใ„ใšใ‚Œใ‹ใฎๅฝขๅผใงใƒ–ใƒผใƒˆใƒžใ‚ธใƒƒใ‚ฏใŒๆœ‰ๅŠนใซใชใฃใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ใ“ใ‚Œใ‚‚ๅฎŸ่กŒใงใใ‚‹ใฏใšใงใ™ (ๅฎŸ่กŒๆ–นๆณ•ใฎ่ฉณ็ดฐใซใคใ„ใฆใฏใ€[ใƒ–ใƒผใƒˆใƒžใ‚ธใƒƒใ‚ฏใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](feature_bootmagic.md)ใจใ‚ญใƒผใƒœใƒผใƒ‰ๆƒ…ๅ ฑใ‚’่ฆ‹ใฆใใ ใ•ใ„)ใ€‚
+ใ„ใšใ‚Œใ‹ใฎๅฝขๅผใงใƒ–ใƒผใƒˆใƒžใ‚ธใƒƒใ‚ฏใŒๆœ‰ๅŠนใซใชใฃใฆใ„ใ‚‹ๅ ดๅˆใฏใ€ใ“ใ‚Œใ‚‚ๅฎŸ่กŒใงใใ‚‹ใฏใšใงใ™ (ๅฎŸ่กŒๆ–นๆณ•ใฎ่ฉณ็ดฐใซใคใ„ใฆใฏใ€[ใƒ–ใƒผใƒˆใƒžใ‚ธใƒƒใ‚ฏใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_bootmagic.md)ใจใ‚ญใƒผใƒœใƒผใƒ‰ๆƒ…ๅ ฑใ‚’่ฆ‹ใฆใใ ใ•ใ„)ใ€‚
diff --git a/docs/ja/faq_general.md b/docs/ja/faq_general.md
index a365e380b3..83d1a557bd 100644
--- a/docs/ja/faq_general.md
+++ b/docs/ja/faq_general.md
@@ -51,7 +51,7 @@ OKใ€ๅ•้กŒใ‚ใ‚Šใพใ›ใ‚“ใ€‚[GitHub ใง issue ใ‚’้–‹ใ](https://github.com/qmk
TMK ใฏ [Jun Wako](https://github.com/tmk) ใซใ‚ˆใฃใฆ่จญ่จˆใ•ใ‚ŒๅฎŸ่ฃ…ใ•ใ‚Œใพใ—ใŸใ€‚QMK ใฏ [Jack Humbert](https://github.com/jackhumbert) ใฎ Planck ็”จ TMK ใฎใƒ•ใ‚ฉใƒผใ‚ฏใจใ—ใฆๅง‹ใพใ‚Šใพใ—ใŸใ€‚ใ—ใฐใ‚‰ใใ—ใฆใ€Jack ใฎใƒ•ใ‚ฉใƒผใ‚ฏใฏ TMK ใ‹ใ‚‰ใ‹ใชใ‚Šๅˆ†ๅฒใ—ใ€2015ๅนดใซ Jack ใฏใƒ•ใ‚ฉใƒผใ‚ฏใ‚’ QMK ใซๅๅ‰ใ‚’ๅค‰ใˆใ‚‹ใ“ใจใซใ—ใพใ—ใŸใ€‚
-ๆŠ€่ก“็š„ใช่ฆณ็‚นใ‹ใ‚‰ใ€QMK ใฏๅนพใคใ‹ใฎๆ–ฐใ—ใ„ๆฉŸ่ƒฝใ‚’่ฟฝๅŠ ใ—ใŸ TMK ใซๅŸบใฅใ„ใฆใ„ใพใ™ใ€‚ๆœ€ใ‚‚ๆณจ็›ฎใ™ในใใ“ใจใฏใ€QMK ใฏๅˆฉ็”จๅฏ่ƒฝใชใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎๆ•ฐใ‚’ๅข—ใ‚„ใ—ใ€`S()`ใ€`LCTL()` ใŠใ‚ˆใณ `MO()` ใชใฉใฎ้ซ˜ๅบฆใชๆฉŸ่ƒฝใ‚’ๅฎŸ่ฃ…ใ™ใ‚‹ใŸใ‚ใซใ“ใ‚Œใ‚‰ใ‚’ไฝฟใฃใฆใ„ใพใ™ใ€‚[ใ‚ญใƒผใ‚ณใƒผใƒ‰](keycodes.md)ใงใ“ใ‚Œใ‚‰ใฎใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎๅฎŒๅ…จใชใƒชใ‚นใƒˆใ‚’่ฆ‹ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
+ๆŠ€่ก“็š„ใช่ฆณ็‚นใ‹ใ‚‰ใ€QMK ใฏๅนพใคใ‹ใฎๆ–ฐใ—ใ„ๆฉŸ่ƒฝใ‚’่ฟฝๅŠ ใ—ใŸ TMK ใซๅŸบใฅใ„ใฆใ„ใพใ™ใ€‚ๆœ€ใ‚‚ๆณจ็›ฎใ™ในใใ“ใจใฏใ€QMK ใฏๅˆฉ็”จๅฏ่ƒฝใชใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎๆ•ฐใ‚’ๅข—ใ‚„ใ—ใ€`S()`ใ€`LCTL()` ใŠใ‚ˆใณ `MO()` ใชใฉใฎ้ซ˜ๅบฆใชๆฉŸ่ƒฝใ‚’ๅฎŸ่ฃ…ใ™ใ‚‹ใŸใ‚ใซใ“ใ‚Œใ‚‰ใ‚’ไฝฟใฃใฆใ„ใพใ™ใ€‚[ใ‚ญใƒผใ‚ณใƒผใƒ‰](ja/keycodes.md)ใงใ“ใ‚Œใ‚‰ใฎใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎๅฎŒๅ…จใชใƒชใ‚นใƒˆใ‚’่ฆ‹ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใจใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใฎ็ฎก็†ใฎ่ฆณ็‚นใ‹ใ‚‰ใ€TMK ใฏๅ…ฌๅผใซใ‚ตใƒใƒผใƒˆใ•ใ‚Œใฆใ„ใ‚‹ๅ…จใฆใฎใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’่‡ชๅˆ†ใง็ฎก็†ใ—ใฆใŠใ‚Šใ€ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใฎใ‚ตใƒใƒผใƒˆใ‚‚ๅฐ‘ใ—ๅ—ใ‘ใฆใ„ใพใ™ใ€‚ไป–ใฎใ‚ญใƒผใƒœใƒผใƒ‰็”จใซๅˆฅๅ€‹ใฎใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใŒ็ถญๆŒใ™ใ‚‹ใƒ•ใ‚ฉใƒผใ‚ฏใŒๅญ˜ๅœจใ™ใ‚‹ใ‹ใ€ไฝœๆˆใงใใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏๅฐ‘ๆ•ฐใฎใ‚ญใƒผใƒžใƒƒใƒ—ใฎใฟใŒๆไพ›ใ•ใ‚Œใ‚‹ใŸใ‚ใ€ใƒฆใƒผใ‚ถใฏไธ€่ˆฌ็š„ใซใŠไบ’ใ„ใซใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ๅ…ฑๆœ‰ใ—ใพใ›ใ‚“ใ€‚QMK ใฏ้›†ไธญ็ฎก็†ใ•ใ‚ŒใŸใƒชใƒใ‚ธใƒˆใƒชใ‚’ไป‹ใ—ใฆใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใจใ‚ญใƒผใƒžใƒƒใƒ—ใฎไธกๆ–นใ‚’ๅ…ฑๆœ‰ใ™ใ‚‹ใ“ใจใ‚’ๅฅจๅŠฑใ—ใฆใŠใ‚Šใ€ๅ“่ณชๅŸบๆบ–ใซๆบ–ๆ‹ ใ™ใ‚‹ๅ…จใฆใฎใƒ—ใƒซใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’ๅ—ใ‘ไป˜ใ‘ใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฏใปใจใ‚“ใฉใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใง็ฎก็†ใ•ใ‚Œใพใ™ใŒใ€ๅฟ…่ฆใชๅ ดๅˆใฏ QMK ใƒใƒผใƒ ใ‚‚ๆ”ฏๆดใ—ใพใ™ใ€‚
diff --git a/docs/ja/faq_keymap.md b/docs/ja/faq_keymap.md
index 2726e18728..311ebe0e42 100644
--- a/docs/ja/faq_keymap.md
+++ b/docs/ja/faq_keymap.md
@@ -128,7 +128,7 @@ https://github.com/tekezo/Karabiner/issues/403
## ๅ˜ไธ€ใฎใ‚ญใƒผใงใฎ Esc ใจ<code>&#96;</code>
-[Grave Escape](feature_grave_esc.md) ๆฉŸ่ƒฝใ‚’่ฆ‹ใฆใใ ใ•ใ„ใ€‚
+[Grave Escape](ja/feature_grave_esc.md) ๆฉŸ่ƒฝใ‚’่ฆ‹ใฆใใ ใ•ใ„ใ€‚
## Mac OSX ใงใฎ Eject
`KC_EJCT` ใ‚ญใƒผใ‚ณใƒผใƒ‰ใฏ OSX ใงๅ‹•ไฝœใ—ใพใ™ใ€‚https://github.com/tmk/tmk_keyboard/issues/250
diff --git a/docs/ja/feature_split_keyboard.md b/docs/ja/feature_split_keyboard.md
index 74b62310fb..1efc98e40f 100644
--- a/docs/ja/feature_split_keyboard.md
+++ b/docs/ja/feature_split_keyboard.md
@@ -20,12 +20,12 @@ QMK ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใซใฏใ€ไปปๆ„ใฎใ‚ญใƒผใƒœใƒผใƒ‰ใงไฝฟ็”จๅฏ่ƒฝใชไธ€่
| Transport | AVR | ARM |
|------------------------------|--------------------|--------------------|
-| ['serial'](serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
+| ['serial'](ja/serial_driver.md) | :heavy_check_mark: | :white_check_mark: <sup>1</sup> |
| I2C | :heavy_check_mark: | |
ๆณจๆ„:
-1. ใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใจใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใฎไธกๆ–นใฎๅˆถ้™ใฏใ€[ใƒ‰ใƒฉใ‚คใƒใƒผใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](serial_driver.md)ใฎไธญใง่ชฌๆ˜Žใ•ใ‚Œใพใ™ใ€‚
+1. ใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใจใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใฎไธกๆ–นใฎๅˆถ้™ใฏใ€[ใƒ‰ใƒฉใ‚คใƒใƒผใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/serial_driver.md)ใฎไธญใง่ชฌๆ˜Žใ•ใ‚Œใพใ™ใ€‚
## ใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ข่จญๅฎš
diff --git a/docs/ja/how_a_matrix_works.md b/docs/ja/how_a_matrix_works.md
index ff4fbb115d..b6ded186ba 100644
--- a/docs/ja/how_a_matrix_works.md
+++ b/docs/ja/how_a_matrix_works.md
@@ -101,4 +101,4 @@
- [Deskthority ใฎ่จ˜ไบ‹](https://deskthority.net/wiki/Keyboard_matrix)
- [Dave Dribin ใซใ‚ˆใ‚‹ Keyboard Matrix Help (2000)](https://www.dribin.org/dave/keyboard/one_html/)
- [PCBheaven ใซใ‚ˆใ‚‹ How Key Matrices Works](http://pcbheaven.com/wikipages/How_Key_Matrices_Works/) (ใ‚ขใƒ‹ใƒกใƒผใ‚ทใƒงใƒณใฎไพ‹)
-- [ใ‚ญใƒผใƒœใƒผใƒ‰ใฎไป•็ต„ใฟ - QMK ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](how_keyboards_work.md)
+- [ใ‚ญใƒผใƒœใƒผใƒ‰ใฎไป•็ต„ใฟ - QMK ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/how_keyboards_work.md)
diff --git a/docs/ja/quantum_keycodes.md b/docs/ja/quantum_keycodes.md
new file mode 100644
index 0000000000..ffcc494460
--- /dev/null
+++ b/docs/ja/quantum_keycodes.md
@@ -0,0 +1,20 @@
+# Quantum ใ‚ญใƒผใ‚ณใƒผใƒ‰
+
+<!---
+ original document: 0.9.55:docs/quantum_keycodes.md
+ git diff 0.9.55 HEAD -- docs/quantum_keycodes.md | cat
+-->
+
+Quantum ใ‚ญใƒผใ‚ณใƒผใƒ‰ใซใ‚ˆใ‚Šใ€ใ‚ซใ‚นใ‚ฟใƒ ใ‚ขใ‚ฏใ‚ทใƒงใƒณใ‚’ๅฎš็พฉใ™ใ‚‹ใ“ใจใชใใ€ๅŸบๆœฌ็š„ใชใ‚‚ใฎใŒๆไพ›ใ™ใ‚‹ใ‚‚ใฎใ‚ˆใ‚Š็ฐกๅ˜ใซใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ใ‚ซใ‚นใ‚ฟใƒžใ‚คใ‚บใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
+
+quantum ๅ†…ใฎๅ…จใฆใฎใ‚ญใƒผใ‚ณใƒผใƒ‰ใฏ `0x0000` ใจ `0xFFFF` ใฎ้–“ใฎๆ•ฐๅ€คใงใ™ใ€‚`keymap.c` ใฎไธญใงใฏใ€้–ขๆ•ฐใ‚„ใใฎไป–ใฎ็‰นๅˆฅใชๅ ดๅˆใŒใ‚ใ‚‹ใ‚ˆใ†ใซ่ฆ‹ใˆใพใ™ใŒใ€ๆœ€็ต‚็š„ใซใฏ C ใƒ—ใƒชใƒ—ใƒญใ‚ปใƒƒใ‚ตใซใ‚ˆใฃใฆใใ‚Œใ‚‰ใฏๅ˜ไธ€ใฎ4ใƒใ‚คใƒˆๆ•ดๆ•ฐใซๅค‰ๆ›ใ•ใ‚Œใพใ™ใ€‚QMK ใฏๆจ™ๆบ–็š„ใชใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎใŸใ‚ใซ `0x0000` ใ‹ใ‚‰ `0x00FF` ใ‚’ไบˆ็ด„ใ—ใฆใ„ใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฏใ€`KC_A`ใ€`KC_1` ใŠใ‚ˆใณ `KC_LCTL` ใฎใ‚ˆใ†ใชใ‚ญใƒผใ‚ณใƒผใƒ‰ใงใ€USB HID ไป•ๆง˜ใงๅฎš็พฉใ•ใ‚ŒใŸๅŸบๆœฌ็š„ใชใ‚ญใƒผใงใ™ใ€‚
+
+ใ“ใฎใƒšใƒผใ‚ธใงใฏใ€้ซ˜ๅบฆใช quantum ๆฉŸ่ƒฝใ‚’ๅฎŸ่ฃ…ใ™ใ‚‹ใŸใ‚ใซไฝฟใ‚ใ‚Œใ‚‹ `0x00FF` ใจ `0xFFFF` ใฎ้–“ใฎใ‚ญใƒผใ‚ณใƒผใƒ‰ใ‚’่ชฌๆ˜Žใ—ใพใ™ใ€‚็‹ฌ่‡ชใฎใ‚ซใ‚นใ‚ฟใƒ ใ‚ญใƒผใ‚ณใƒผใƒ‰ใ‚’ๅฎš็พฉใ™ใ‚‹ๅ ดๅˆใฏใ€ใใ‚Œใ‚‰ใ‚‚ใ“ใฎ็ฏ„ๅ›ฒใซ้…็ฝฎใ•ใ‚Œใพใ™ใ€‚
+
+## QMK ใ‚ญใƒผใ‚ณใƒผใƒ‰ :id=qmk-keycodes
+
+| ใ‚ญใƒผ | ใ‚จใ‚คใƒชใ‚ขใ‚น | ่ชฌๆ˜Ž |
+|----------------|------------|--------------------------------------------------------|
+| `RESET` | | ๆ›ธใ่พผใฟใฎใŸใ‚ใซใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’ bootloader ใƒขใƒผใƒ‰ใซใ™ใ‚‹ |
+| `DEBUG` | | ใƒ‡ใƒใƒƒใ‚ฐใƒขใƒผใƒ‰ใฎๅˆ‡ใ‚Šๆ›ฟใˆ |
+| `EEPROM_RESET` | `EEP_RST` | ใ‚ญใƒผใƒœใƒผใƒ‰ใฎ EEPROM (ๆฐธ็ถšๅŒ–ใƒกใƒขใƒช) ใ‚’ๅ†ๅˆๆœŸๅŒ–ใ™ใ‚‹ |
diff --git a/docs/ja/reference_configurator_support.md b/docs/ja/reference_configurator_support.md
new file mode 100644
index 0000000000..0151731e99
--- /dev/null
+++ b/docs/ja/reference_configurator_support.md
@@ -0,0 +1,202 @@
+# QMK Configurator ใงใฎใ‚ญใƒผใƒœใƒผใƒ‰ใฎใ‚ตใƒใƒผใƒˆ
+
+<!---
+ original document: 0.9.46:docs/reference_configurator_support.md
+ git diff 0.9.46 HEAD -- docs/reference_configurator_support.md | cat
+-->
+
+ใ“ใฎใƒšใƒผใ‚ธใฏ [QMK Configurator](https://config.qmk.fm/) ใงใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’้ฉๅˆ‡ใซใ‚ตใƒใƒผใƒˆใ™ใ‚‹ๆ–นๆณ•ใซใคใ„ใฆ่ชฌๆ˜Žใ—ใพใ™ใ€‚
+
+
+## Configurator ใŒใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’็†่งฃใ™ใ‚‹ๆ–นๆณ•
+
+Configurator ใŒใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’ใฉใฎใ‚ˆใ†ใซ็†่งฃใ™ใ‚‹ใ‹ใ‚’็†่งฃใ™ใ‚‹ใซใฏใ€ๆœ€ๅˆใซใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญใ‚’็†่งฃใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใฎๆผ”็ฟ’ใงใฏใ€17ใ‚ญใƒผใฎใƒ†ใƒณใ‚ญใƒผ PCB ใ‚’ๆƒณๅฎšใ—ใพใ™ใ€‚ใ“ใ‚Œใ‚’ `numpad` ใจๅ‘ผใณใพใ™ใ€‚
+
+```
+|---------------|
+|NLk| / | * | - |
+|---+---+---+---|
+|7 |8 |9 | + |
+|---+---+---| |
+|4 |5 |6 | |
+|---+---+---+---|
+|1 |2 |3 |Ent|
+|-------+---| |
+|0 | . | |
+|---------------|
+```
+
+?> ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญใฎ่ฉณ็ดฐใซใคใ„ใฆใฏใ€[QMK ใฎ็†่งฃ: ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นใ‚นใ‚ญใƒฃใƒณ](ja/understanding_qmk.md?id=matrix-scanning) ใจ [QMK ใฎ็†่งฃ: ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นใ‹ใ‚‰็‰ฉ็†ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใธใฎใƒžใƒƒใƒ—](ja/understanding_qmk.md?id=matrix-to-physical-layout-map) ใ‚’่ฆ‹ใฆใใ ใ•ใ„ใ€‚
+
+Configurator ใฎ API ใฏใ‚ญใƒผใƒœใƒผใƒ‰ใฎ `.h` ใƒ•ใ‚กใ‚คใƒซใ‚’ `qmk_firmware/keyboards/<keyboard>/<keyboard>.h` ใ‹ใ‚‰่ชญใฟๅ–ใ‚Šใพใ™ใ€‚numpad ใฎๅ ดๅˆใ€ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฏ `qmk_firmware/keyboards/numpad/numpad.h` ใงใ™:
+
+```c
+#pragma once
+
+#define LAYOUT( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k33, \
+ k40, k42 \
+ ) { \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, KC_NO }, \
+ { k30, k31, k32, k33 }, \
+ { k40, KC_NO, k42, KC_NO } \
+}
+```
+
+QMK ใฏ `KC_NO` ใ‚’ไฝฟใฃใฆใ€ใ‚นใ‚คใƒƒใƒใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นๅ†…ใฎใ‚นใ‚คใƒƒใƒใŒใชใ„ๅ ดๆ‰€ใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚ใƒ‡ใƒใƒƒใ‚ฐใŒๅฟ…่ฆใชๅ ดๅˆใซใ€ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’่ชญใฟใ‚„ใ™ใใ™ใ‚‹ใŸใ‚ใซใ€`XXX`ใ€`___`ใ€`____` ใ‚’็•ฅ่จ˜ใจใ—ใฆไฝฟใ†ใ“ใจใ‚‚ใ‚ใ‚Šใพใ™ใ€‚้€šๅธธใฏ `.h` ใƒ•ใ‚กใ‚คใƒซใฎๅ…ˆ้ ญ่ฟ‘ใใงๅฎš็พฉใ•ใ‚Œใพใ™:
+
+```c
+#pragma once
+
+#define XXX KC_NO
+
+#define LAYOUT( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k33, \
+ k40, k42 \
+ ) { \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, XXX }, \
+ { k30, k31, k32, k33 }, \
+ { k40, XXX, k42, XXX } \
+}
+```
+
+!> ใ“ใฎไฝฟ็”จๆ–นๆณ•ใฏใ‚ญใƒผใƒžใƒƒใƒ—ใƒžใ‚ฏใƒญใจ็•ฐใชใ‚Šใพใ™ใ€‚ใ‚ญใƒผใƒžใƒƒใƒ—ใƒžใ‚ฏใƒญใฏใปใจใ‚“ใฉๅธธใซ`KC_NO`ใซใคใ„ใฆใฏ`XXXXXXX` (7ใคใฎๅคงๆ–‡ๅญ—ใฎ X) ใ‚’ใ€`KC_TRNS` ใซใคใ„ใฆใฏ `_______` (7ใคใฎใ‚ขใƒณใƒ€ใƒผใ‚นใ‚ณใ‚ข)ใ‚’ไฝฟใ„ใพใ™ใ€‚
+
+!> ใƒฆใƒผใ‚ถใฎๆททไนฑใ‚’้˜ฒใใŸใ‚ใซใ€`KC_NO` ใ‚’ไฝฟใ†ใ“ใจใ‚’ใŠๅ‹งใ‚ใ—ใพใ™ใ€‚
+
+ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญใฏใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใซ17ๅ€‹ใฎใ‚ญใƒผใŒใ‚ใ‚Šใ€4ๅˆ—ใใ‚Œใžใ‚ŒใŒ5่กŒใซ้…็ฝฎใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใ‚’ Configurator ใซไผใˆใพใ™ใ€‚ใ‚นใ‚คใƒƒใƒใฎไฝ็ฝฎใฏใ€0ใ‹ใ‚‰ๅง‹ใพใ‚‹ `k<row><column>` ใจใ„ใ†ๅๅ‰ใŒไป˜ใ‘ใ‚‰ใ‚Œใฆใ„ใพใ™ใ€‚ใ‚ญใƒผใƒžใƒƒใƒ—ใ‹ใ‚‰ใ‚ญใƒผใ‚ณใƒผใƒ‰ใ‚’ๅ—ใ‘ๅ–ใ‚‹ไธŠ้ƒจใ‚ปใ‚ฏใ‚ทใƒงใƒณใจใ€ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นๅ†…ใฎๅ„ใ‚ญใƒผใฎไฝ็ฝฎใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ไธ‹้ƒจใ‚ปใ‚ฏใ‚ทใƒงใƒณใจใŒไธ€่‡ดใ™ใ‚‹้™ใ‚Šใ€ๅๅ‰่‡ชไฝ“ใฏๅฎŸ้š›ใซใฏๅ•้กŒใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚
+
+็‰ฉ็†็š„ใชใ‚ญใƒผใƒœใƒผใƒ‰ใซไผผใŸๅฝขใงใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’่กจ็คบใ™ใ‚‹ใซใฏใ€ใใ‚Œใžใ‚Œใฎใ‚ญใƒผใฎ็‰ฉ็†็š„ใชไฝ็ฝฎใจใ‚ตใ‚คใ‚บใ‚’ใ‚นใ‚คใƒƒใƒใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นใซ็ตใณใคใ‘ใ‚‹ใ“ใจใ‚’ Configurator ใซไผใˆใ‚‹ JSON ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝœๆˆใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
+
+## JSON ใƒ•ใ‚กใ‚คใƒซใฎใƒ“ใƒซใƒ‰
+
+JSON ใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ“ใƒซใƒ‰ใ™ใ‚‹ๆœ€ใ‚‚็ฐกๅ˜ใชๆ–นๆณ•ใฏใ€[Keyboard Layout Editor](http://www.keyboard-layout-editor.com/) ("KLE") ใงใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใงใ™ใ€‚ใ“ใฎ Raw Data ใ‚’ QMK tool ใซๅ…ฅใ‚Œใฆใ€Configurator ใŒ่ชญใฟๅ‡บใ—ใฆไฝฟ็”จใ™ใ‚‹ JSON ใƒ•ใ‚กใ‚คใƒซใซๅค‰ๆ›ใ—ใพใ™ใ€‚KLE ใฏ numpad ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใง้–‹ใใŸใ‚ใ€Getting Started ใฎ่ชฌๆ˜Žใ‚’ๅ‰Š้™คใ—ใ€ๆฎ‹ใ‚Šใ‚’ไฝฟใ„ใพใ™ใ€‚
+
+ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใŒๆœ›ใฟ้€šใ‚Šใฎใ‚‚ใฎใซใชใฃใŸใ‚‰ใ€KLE ใฎ Raw Data ใ‚ฟใƒ–ใซ็งปๅ‹•ใ—ใ€ๅ†…ๅฎนใ‚’ใ‚ณใƒ”ใƒผใ—ใพใ™:
+
+```
+["Num Lock","/","*","-"],
+["7\nHome","8\nโ†‘","9\nPgUp",{h:2},"+"],
+["4\nโ†","5","6\nโ†’"],
+["1\nEnd","2\nโ†“","3\nPgDn",{h:2},"Enter"],
+[{w:2},"0\nIns",".\nDel"]
+```
+
+ใ“ใฎใƒ‡ใƒผใ‚ฟใ‚’ JSON ใซๅค‰ๆ›ใ™ใ‚‹ใซใฏใ€[QMK KLE-JSON Converter](https://qmk.fm/converter/) ใซ็งปๅ‹•ใ—ใ€Raw Data ใ‚’ Input ใƒ•ใ‚ฃใƒผใƒซใƒ‰ ใซ่ฒผใ‚Šไป˜ใ‘ใ€Convert ใƒœใ‚ฟใƒณใ‚’ใ‚ฏใƒชใƒƒใ‚ฏใ—ใพใ™ใ€‚ใ—ใฐใ‚‰ใใ™ใ‚‹ใจใ€JSON ใƒ‡ใƒผใ‚ฟใŒ Output ใƒ•ใ‚ฃใƒผใƒซใƒ‰ใซ่กจ็คบใ•ใ‚Œใพใ™ใ€‚ๅ†…ๅฎนใ‚’ๆ–ฐใ—ใ„ใƒ†ใ‚ญใ‚นใƒˆใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใซใ‚ณใƒ”ใƒผใ—ใ€ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใซ `info.json` ใจใ„ใ†ๅๅ‰ใ‚’ไป˜ใ‘ใ€`numpad.h` ใ‚’ๅซใ‚€ๅŒใ˜ใƒ•ใ‚ฉใƒซใƒ€ใซไฟๅญ˜ใ—ใพใ™ใ€‚
+
+`keyboard_name` ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝฟใฃใฆใ‚ญใƒผใƒœใƒผใƒ‰ใฎๅๅ‰ใ‚’่จญๅฎšใ—ใพใ™ใ€‚่ชฌๆ˜ŽใฎใŸใ‚ใซใ€ๅ„ใ‚ญใƒผใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ๅ„่กŒใซ้…็ฝฎใ—ใพใ™ใ€‚ใ“ใ‚Œใฏใƒ•ใ‚กใ‚คใƒซใ‚’ไบบ้–“ใŒ่ชญใฟใ‚„ใ™ใ„ใ‚‚ใฎใซใ™ใ‚‹ใŸใ‚ใฎใ‚‚ใฎใงใ€Configurator ใฎๆฉŸ่ƒฝใซใฏๅฝฑ้Ÿฟใ—ใพใ›ใ‚“ใ€‚
+
+```json
+{
+ "keyboard_name": "Numpad",
+ "url": "",
+ "maintainer": "qmk",
+ "tags": {
+ "form_factor": "numpad"
+ },
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Num Lock", "x":0, "y":0},
+ {"label":"/", "x":1, "y":0},
+ {"label":"*", "x":2, "y":0},
+ {"label":"-", "x":3, "y":0},
+ {"label":"7", "x":0, "y":1},
+ {"label":"8", "x":1, "y":1},
+ {"label":"9", "x":2, "y":1},
+ {"label":"+", "x":3, "y":1, "h":2},
+ {"label":"4", "x":0, "y":2},
+ {"label":"5", "x":1, "y":2},
+ {"label":"6", "x":2, "y":2},
+ {"label":"1", "x":0, "y":3},
+ {"label":"2", "x":1, "y":3},
+ {"label":"3", "x":2, "y":3},
+ {"label":"Enter", "x":3, "y":3, "h":2},
+ {"label":"0", "x":0, "y":4, "w":2},
+ {"label":".", "x":2, "y":4}
+ ]
+ }
+ }
+}
+```
+
+`layouts` ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซใฏใ‚ญใƒผใƒœใƒผใƒ‰ใฎ็‰ฉ็†ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’่กจใ™ใƒ‡ใƒผใ‚ฟใŒๅซใพใ‚Œใพใ™ใ€‚ใ“ใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซใฏ `LAYOUT` ใจใ„ใ†ๅๅ‰ใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใŒใ‚ใ‚Šใ€ใ“ใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆๅใฏ `numpad.h` ใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญใฎๅๅ‰ใจไธ€่‡ดใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚`LAYOUT` ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ่‡ชไฝ“ใซใฏ `layout` ใจใ„ใ†ๅๅ‰ใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซใฏใ‚ญใƒผใƒœใƒผใƒ‰ใฎ็‰ฉ็†ใ‚ญใƒผใ”ใจใซ 1ใคใฎ JSON ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใŒไปฅไธ‹ใฎๅฝขๅผใงๅซใพใ‚Œใฆใ„ใพใ™:
+
+```
+ ใ‚ญใƒผใฎๅๅ‰ใ€‚Configurator ใงใฏ่กจ็คบใ•ใ‚Œใพใ›ใ‚“ใ€‚
+ |
+ | ใ‚ญใƒผใƒœใƒผใƒ‰ใฎๅทฆ็ซฏใ‹ใ‚‰ใฎใ‚ญใƒผๅ˜ไฝใงใฎ
+ | | ใ‚ญใƒผใฎ X ่ปธใฎไฝ็ฝฎใ€‚
+ | |
+ | | ใ‚ญใƒผใƒœใƒผใƒ‰ใฎไธŠ็ซฏ(ๅฅฅๅด)ใ‹ใ‚‰ใฎใ‚ญใƒผๅ˜ไฝใงใฎ
+ | | | ใ‚ญใƒผใฎ Y ่ปธไฝ็ฝฎใ€‚
+ โ†“ โ†“ โ†“
+{"label":"Num Lock", "x":0, "y":0},
+```
+
+ไธ€้ƒจใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใซใฏใ€ใใ‚Œใžใ‚Œใ‚ญใƒผใฎๅน…ใจ้ซ˜ใ•ใ‚’่กจใ™ `"w"` ๅฑžๆ€งใ‚ญใƒผใจ `"h"` ๅฑžๆ€งใ‚ญใƒผใŒใ‚ใ‚Šใพใ™ใ€‚
+
+?> `info.json` ใƒ•ใ‚กใ‚คใƒซใฎ่ฉณ็ดฐใซใคใ„ใฆใฏใ€[`info.json` ๅฝขๅผ](ja/reference_info_json.md) ใ‚’ๅ‚็…งใ—ใฆใใ ใ•ใ„ใ€‚
+
+
+## Configurator ใŒใ‚ญใƒผใ‚’ใƒ—ใƒญใ‚ฐใƒฉใƒ ใ™ใ‚‹ๆ–นๆณ•
+
+Configurator ใฎ API ใฏใ€ๆŒ‡ๅฎšใ•ใ‚ŒใŸใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญใจ JSON ใƒ•ใ‚กใ‚คใƒซใ‚’ไฝฟใฃใฆใ€็‰นๅฎšใฎใ‚ญใƒผใซ้–ข้€ฃไป˜ใ‘ใ‚‰ใ‚ŒใŸๅ„ใƒ“ใ‚ธใƒฅใ‚ขใƒซใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’้ †็•ชใซๆŒใคใ‚ญใƒผใƒœใƒผใƒ‰ใฎใƒ“ใ‚ธใƒฅใ‚ขใƒซ่กจ็พใ‚’ไฝœๆˆใ—ใพใ™:
+
+| ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญใฎใ‚ญใƒผ | ไฝฟ็”จใ•ใ‚Œใ‚‹ JSON ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆ |
+:---: | :----
+| k00 | {"label":"Num Lock", "x":0, "y":0} |
+| k01 | {"label":"/", "x":1, "y":0} |
+| k02 | {"label":"*", "x":2, "y":0} |
+| k03 | {"label":"-", "x":3, "y":0} |
+| k10 | {"label":"7", "x":0, "y":1} |
+| k11 | {"label":"8", "x":1, "y":1} |
+| k12 | {"label":"9", "x":2, "y":1} |
+| k13 | {"label":"+", "x":3, "y":1, "h":2} |
+| k20 | {"label":"4", "x":0, "y":2} |
+| k21 | {"label":"5", "x":1, "y":2} |
+| k22 | {"label":"6", "x":2, "y":2} |
+| k30 | {"label":"1", "x":0, "y":3} |
+| k31 | {"label":"2", "x":1, "y":3} |
+| k32 | {"label":"3", "x":2, "y":3} |
+| k33 | {"label":"Enter", "x":3, "y":3, "h":2} |
+| k40 | {"label":"0", "x":0, "y":4, "w":2} |
+| k42 | {"label":".", "x":2, "y":4} |
+
+ใƒฆใƒผใ‚ถใŒ Configurator ใงๅทฆไธŠใฎใ‚ญใƒผใ‚’้ธๆŠžใ—ใ€Num Lock ใ‚’ๅ‰ฒใ‚Šๅฝ“ใฆใ‚‹ใจใ€Configurator ใฏๆœ€ๅˆใฎใ‚ญใƒผใจใ—ใฆ `KC_NLCK` ใ‚’ๆŒใคใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ไฝœๆˆใ—ใ€ๅŒๆง˜ใซใ‚ญใƒผใƒžใƒƒใƒ—ใŒไฝœๆˆใ•ใ‚Œใพใ™ใ€‚`label` ใ‚ญใƒผใฏไฝฟใ‚ใ‚Œใพใ›ใ‚“; ใใ‚Œใ‚‰ใฏ `info.json` ใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ‡ใƒใƒƒใ‚ฐใ™ใ‚‹ๆ™‚ใซ็‰นๅฎšใฎใ‚ญใƒผใ‚’่ญ˜ๅˆฅใ™ใ‚‹ใŸใ‚ใฎใƒฆใƒผใ‚ถใฎๅ‚็…งใฎใŸใ‚ใ ใ‘ใฎใ‚‚ใฎใงใ™ใ€‚
+
+
+## ๅ•้กŒใจๅฑ้™บ
+
+็พๅœจใฎใจใ“ใ‚ใ€Configurator ใฏใ‚ญใƒผใฎๅ›ž่ปขใพใŸใฏ ISO Enter ใชใฉใฎ้•ทๆ–นๅฝขใงใฏใชใ„ใ‚ญใƒผใ‚’ใ‚ตใƒใƒผใƒˆใ—ใพใ›ใ‚“ใ€‚ใ•ใ‚‰ใซใ€"่กŒ"ใ‹ใ‚‰ๅž‚็›ดๆ–นๅ‘ใซใšใ‚Œใฆใ„ใ‚‹ใ‚ญใƒผใ€&mdash; ้ก•่‘—ใชไพ‹ใจใ—ใฆ [TKC1800](https://github.com/qmk/qmk_firmware/tree/4ac48a61a66206beaf2fdd5f2939d8bbedd0004c/keyboards/tkc1800/) ใฎใ‚ˆใ†ใช1800ใƒฌใ‚คใ‚ขใ‚ฆใƒˆไธŠใฎ็Ÿขๅฐใ‚ญใƒผ &mdash; ใฏใ€ `info.json` ใƒ•ใ‚กใ‚คใƒซใฎๆไพ›่€…ใซใ‚ˆใฃใฆ่ชฟๆ•ดใ•ใ‚Œใฆใ„ใชใ„ๅ ดๅˆใฏใ€KLE-to-JSON ใ‚ณใƒณใƒใƒผใ‚ฟใ‚’ๆททไนฑใ•ใ›ใพใ™ใ€‚
+
+### ๅ›ž้ฟ็ญ–
+
+#### ้•ทๆ–นๅฝขใงใฏใชใ„ใ‚ญใƒผ
+
+ISO Enter ใ‚ญใƒผใซใคใ„ใฆใฏใ€QMK custom ใฏๅน… 1.25uใ€้ซ˜ใ• 2u ใฎ้•ทๆ–นๅฝขใฎใ‚ญใƒผใจใ—ใฆ่กจ็คบใ—ใ€ๅณ็ซฏใŒ่‹ฑๆ•ฐๅญ—ใ‚ญใƒผใƒ–ใƒญใƒƒใ‚ฏใฎๅณ็ซฏใซๆƒใ†ใ‚ˆใ†ใซ้…็ฝฎใ•ใ‚Œใพใ™ใ€‚
+
+![](https://i.imgur.com/JKngtTw.png)
+*QMK Configurator ใซใ‚ˆใฃใฆๆ็”ปใ•ใ‚Œใ‚‹ๆจ™ๆบ– ISO ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎ60%ใ‚ญใƒผใƒœใƒผใƒ‰ใ€‚*
+
+#### ๅž‚็›ดๆ–นๅ‘ใซใšใ‚ŒใŸใ‚ญใƒผ
+
+ๅž‚็›ดๆ–นๅ‘ใซใšใ‚ŒใŸใ‚ญใƒผใซใคใ„ใฆใฏใ€ใšใ‚Œใฆใ„ใชใ„ใ‹ใฎใ‚ˆใ†ใซ KLE ใง้…็ฝฎใ—ใ€ๅค‰ๆ›ใ•ใ‚ŒใŸ JSON ใƒ•ใ‚กใ‚คใƒซใงๅฟ…่ฆใซๅฟœใ˜ใฆ Y ๅ€คใ‚’็ทจ้›†ใ—ใพใ™ใ€‚
+
+![](https://i.imgur.com/fmDvDzR.png)
+*็Ÿขๅฐใ‚ญใƒผใซ้ฉ็”จใ•ใ‚Œใ‚‹ๅž‚็›ดๆ–นๅ‘ใฎใšใ‚Œใฎใชใ„ใ€Keyboard Layout Editor ใงๆ็”ปใ•ใ‚ŒใŸ1800ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎใ‚ญใƒผใƒœใƒผใƒ‰ใ€‚*
+
+![](https://i.imgur.com/8beYMBR.png)
+*ใ‚ญใƒผใƒœใƒผใƒ‰ใฎ JSON ใƒ•ใ‚กใ‚คใƒซใง็Ÿขๅฐใ‚ญใƒผใ‚’ๅž‚็›ดๆ–นๅ‘ใซใšใ‚‰ใ™ใŸใ‚ใซๅฟ…่ฆใชๅค‰ๆ›ดใ‚’็คบใ™ใ€Unix ใฎ diff ใƒ•ใ‚กใ‚คใƒซใ€‚*
diff --git a/docs/ja/reference_glossary.md b/docs/ja/reference_glossary.md
new file mode 100644
index 0000000000..19791206f1
--- /dev/null
+++ b/docs/ja/reference_glossary.md
@@ -0,0 +1,173 @@
+# QMK ็”จ่ชž้›†
+
+<!---
+ original document: 0.9.46:docs/reference_glossary.md
+ git diff 0.9.46 HEAD -- docs/reference_glossary.md | cat
+-->
+
+## ARM
+Atmelใ€Cypressใ€Kinetisใ€NXPใ€STใ€TI ใชใฉๅคšใใฎไผๆฅญใŒ็”Ÿ็”ฃใ™ใ‚‹ 32 ใƒ“ใƒƒใƒˆ MCU ใฎใƒฉใ‚คใƒณใ€‚
+
+## AVR
+[Atmel](http://www.microchip.com/) ใŒ็”Ÿ็”ฃใ™ใ‚‹ 8 ใƒ“ใƒƒใƒˆ MCU ใฎใƒฉใ‚คใƒณใ€‚AVR ใฏ TMK ใŒใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใŸๅ…ƒใฎใƒ—ใƒฉใƒƒใƒˆใƒ•ใ‚ฉใƒผใƒ ใงใ—ใŸใ€‚
+
+## AZERTY
+ๆจ™ๆบ–็š„ใช Franรงais (ใƒ•ใƒฉใƒณใ‚น) ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰ใฎๆœ€ๅˆใฎ6ใคใฎใ‚ญใƒผใ‹ใ‚‰ๅ‘ฝๅใ•ใ‚Œใพใ—ใŸใ€‚
+
+## ใƒใƒƒใ‚ฏใƒฉใ‚คใƒˆ
+ใ‚ญใƒผใƒœใƒผใƒ‰ใฎใƒฉใ‚คใƒˆใฎ็ท็งฐใ€‚ใƒใƒƒใ‚ฏใƒฉใ‚คใƒˆใŒไธ€่ˆฌ็š„ใงใ™ใŒใ€ใใ‚Œใ ใ‘ใงใฏใชใใ€ใ‚ญใƒผใ‚ญใƒฃใƒƒใƒ—ใ‚ใ‚‹ใ„ใฏใ‚นใ‚คใƒƒใƒใ‚’้€šใ—ใฆๅ…‰ใ‚‹ LED ใฎ้…ๅˆ—ใ€‚
+
+## Bluetooth
+็Ÿญ่ท้›ขใฎใƒ”ใ‚ขใƒ„ใƒผใƒ”ใ‚ข็„ก็ทšใƒ—ใƒญใƒˆใ‚ณใƒซใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰็”จใฎใ‚‚ใฃใจใ‚‚ไธ€่ˆฌ็š„ใชใƒฏใ‚คใƒคใƒฌใ‚นใƒ—ใƒญใƒˆใ‚ณใƒซใ€‚
+
+## ใƒ–ใƒผใƒˆใƒญใƒผใƒ€
+MCU ใฎไฟ่ญท้ ˜ๅŸŸใซๆ›ธใ่พผใพใ‚Œใ‚‹็‰นๅˆฅใชใƒ—ใƒญใ‚ฐใƒฉใƒ ใงใ€MCU ใŒ็‹ฌ่‡ชใฎใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ‚’้€šๅธธใฏ USB ็ตŒ็”ฑใงใ‚ขใƒƒใƒ—ใ‚ฐใƒฌใƒผใƒ‰ใงใใ‚‹ใ‚ˆใ†ใซใ—ใพใ™ใ€‚
+
+## ใƒ–ใƒผใƒˆใƒžใ‚ธใƒƒใ‚ฏ
+ใ‚ˆใใ‚ใ‚‹ใ‚ญใƒผใฎไบคๆ›ใ‚ใ‚‹ใ„ใฏ็„กๅŠนๅŒ–ใชใฉใ€ๆง˜ใ€…ใชใ‚ญใƒผใƒœใƒผใƒ‰ใฎๆŒ™ๅ‹•ใฎๅค‰ๆ›ดใ‚’ใใฎๅ ดใงๅฎŸ่กŒใงใใ‚‹ๆฉŸ่ƒฝใ€‚
+
+## C
+ใ‚ทใ‚นใƒ†ใƒ ใ‚ณใƒผใƒ‰ใซ้ฉใ—ใŸไฝŽใƒฌใƒ™ใƒซใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐ่จ€่ชžใ€‚QMK ใฎใปใจใ‚“ใฉใฎใ‚ณใƒผใƒ‰ใฏ C ใงๆ›ธใ‹ใ‚Œใฆใ„ใพใ™ใ€‚
+
+## Colemak
+ไบบๆฐ—ใŒๅ‡บๅง‹ใ‚ใฆใ„ใ‚‹ไปฃๆ›ฟใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€‚
+
+## ใ‚ณใƒณใƒ‘ใ‚คใƒซ
+ไบบ้–“ใŒ่ชญใ‚ใ‚‹ใ‚ณใƒผใƒ‰ใ‚’ MCU ใŒๅฎŸ่กŒใงใใ‚‹ใƒžใ‚ทใƒณใ‚ณใƒผใƒ‰ใซๅค‰ๆ›ใ™ใ‚‹ใƒ—ใƒญใ‚ปใ‚นใ€‚
+
+## Dvorak
+1930ๅนดไปฃใซ Dr. August Dvorak ใซใ‚ˆใฃใฆ้–‹็™บใ•ใ‚ŒใŸไปฃๆ›ฟใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€‚Dvorak Simplified Keyboard ใฎ็Ÿญ็ธฎๅฝขใ€‚
+
+## ๅ‹•็š„ใƒžใ‚ฏใƒญ
+ใ‚ญใƒผใƒœใƒผใƒ‰ใซ่จ˜้Œฒใ•ใ‚ŒใŸใƒžใ‚ฏใƒญใงใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใฎใƒ—ใƒฉใ‚ฐใ‚’ๆŠœใใ‹ใ€ใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟใ‚’ๅ†่ตทๅ‹•ใ™ใ‚‹ใจๅคฑใ‚ใ‚Œใพใ™ใ€‚
+
+* [ๅ‹•็š„ใƒžใ‚ฏใƒญใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_dynamic_macros.md)
+
+## Eclipse
+ๅคšใใฎ C ้–‹็™บ่€…ใซไบบๆฐ—ใฎใ‚ใ‚‹ IDEใ€‚
+
+* [Eclipse ใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ๆ‰‹้ †](ja/other_eclipse.md)
+
+## ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ข
+MCU ใ‚’ๅˆถๅพกใ™ใ‚‹ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ข
+
+## git
+ใ‚ณใƒžใƒณใƒ‰ใƒฉใ‚คใƒณใงไฝฟ็”จใ•ใ‚Œใ‚‹ใƒใƒผใ‚ธใƒงใƒณ็ฎก็†ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ข
+
+## GitHub
+QMK ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใปใจใ‚“ใฉใ‚’ใƒ›ใ‚นใƒˆใ™ใ‚‹ Web ใ‚ตใ‚คใƒˆใ€‚gitใ€่ชฒ้กŒ็ฎก็†ใ€ใŠใ‚ˆใณ QMK ใฎๅฎŸ่กŒใซๅฝน็ซ‹ใคใใฎไป–ใฎๆฉŸ่ƒฝใ‚’็ตฑๅˆใ—ใฆๆไพ›ใ—ใพใ™ใ€‚
+
+## ISP
+ใ‚คใƒณใ‚ทใ‚นใƒ†ใƒ ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใ€‚ๅค–้ƒจใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใจ JTAG ใƒ”ใƒณใ‚’ไฝฟใฃใฆ AVR ใƒใƒƒใƒ—ใ‚’ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใ™ใ‚‹ๆ–นๆณ•ใ€‚
+
+## hid_listen
+ใ‚ญใƒผใƒœใƒผใƒ‰ใ‹ใ‚‰ใƒ‡ใƒใƒƒใ‚ฐใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’ๅ—ไฟกใ™ใ‚‹ใŸใ‚ใฎใ‚คใƒณใ‚ฟใƒ•ใ‚งใƒผใ‚นใ€‚[QMK Flasher](https://github.com/qmk/qmk_flasher) ใ‚ใ‚‹ใ„ใฏ [PJRC ใฎ hid_listen](https://www.pjrc.com/teensy/hid_listen.html) ใ‚’ไฝฟใฃใฆใ“ใ‚Œใ‚‰ใฎใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’่ฆ‹ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
+
+## ใ‚ญใƒผใ‚ณใƒผใƒ‰
+็‰นๅฎšใฎใ‚ญใƒผใ‚’่กจใ™2ใƒใ‚คใƒˆใฎๆ•ฐๅ€คใ€‚`0x00`-`0xFF` ใฏ[ๅŸบๆœฌใ‚ญใƒผใ‚ณใƒผใƒ‰](ja/keycodes_basic.md)ใซไฝฟใ‚ใ‚Œใ€`0x100`-`0xFFFF` ใฏ [Quantum ใ‚ญใƒผใ‚ณใƒผใƒ‰](ja/quantum_keycodes.md) ใซไฝฟใ‚ใ‚Œใพใ™ใ€‚
+
+## ใ‚ญใƒผใƒ€ใ‚ฆใƒณ
+ใ‚ญใƒผใŒๆŠผใ•ใ‚ŒใŸๆ™‚ใซ็™บ็”Ÿใ—ใ€ใ‚ญใƒผใŒๆ”พใ•ใ‚Œใ‚‹ๅ‰ใซๅฎŒไบ†ใ™ใ‚‹ใ‚คใƒ™ใƒณใƒˆใ€‚
+
+## ใ‚ญใƒผใ‚ขใƒƒใƒ—
+ใ‚ญใƒผใŒๆ”พใ•ใ‚ŒใŸๆ™‚ใซ็™บ็”Ÿใ™ใ‚‹ใ‚คใƒ™ใƒณใƒˆใ€‚
+
+## ใ‚ญใƒผใƒžใƒƒใƒ—
+็‰ฉ็†็š„ใชใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใซใƒžใƒƒใƒ—ใ•ใ‚ŒใŸใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎ้…ๅˆ—ใ€‚ใ‚ญใƒผใฎๆŠผไธ‹ใŠใ‚ˆใณใƒชใƒชใƒผใ‚นๆ™‚ใซๅ‡ฆ็†ใ•ใ‚Œใพใ™ใ€‚
+
+## ใƒฌใ‚คใƒคใƒผ
+1ใคใฎใ‚ญใƒผใŒ่ค‡ๆ•ฐใฎ็›ฎ็š„ใ‚’ๆžœใŸใ™ใŸใ‚ใซไฝฟใ‚ใ‚Œใ‚‹ๆŠฝ่ฑกๅŒ–ใ€‚ๆœ€ไธŠไฝใฎใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–ใชใƒฌใ‚คใƒคใƒผใŒๅ„ชๅ…ˆใ•ใ‚Œใพใ™ใ€‚
+
+## ใƒชใƒผใƒ€ใƒผใ‚ญใƒผ
+ใƒชใƒผใƒ€ใƒผใ‚ญใƒผใซ็ถšใ‘ใฆ1, 2 ใ‚ใ‚‹ใ„ใฏ3ใคใฎใ‚ญใƒผใ‚’ใ‚ฟใƒƒใƒ—ใ™ใ‚‹ใ“ใจใงใ€ใ‚ญใƒผใฎๆŠผไธ‹ใ‚ใ‚‹ใ„ใฏไป–ใฎ quantum ๆฉŸ่ƒฝใ‚’ใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–ใซใ™ใ‚‹ๆฉŸ่ƒฝใ€‚
+
+* [ใƒชใƒผใƒ€ใƒผใ‚ญใƒผใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_leader_key.md)
+
+## LED
+็™บๅ…‰ใƒ€ใ‚คใ‚ชใƒผใƒ‰ใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰ใฎ่กจ็คบใซไฝฟใ‚ใ‚Œใ‚‹ๆœ€ใ‚‚ไธ€่ˆฌ็š„ใชใƒ‡ใƒใ‚คใ‚นใ€‚
+
+## Make
+ๅ…จใฆใฎใ‚ฝใƒผใ‚นใƒ•ใ‚กใ‚คใƒซใ‚’ใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ใŸใ‚ใซไฝฟใ‚ใ‚Œใ‚‹ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใƒ‘ใƒƒใ‚ฑใƒผใ‚ธใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ‚’ใ‚ณใƒณใƒ‘ใ‚คใƒซใ™ใ‚‹ใŸใ‚ใซใ€ๆง˜ใ€…ใชใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚’ๆŒ‡ๅฎšใ—ใฆ `make` ใ‚’ๅฎŸ่กŒใ—ใพใ™ใ€‚
+
+## ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚น
+MCU ใŒใ‚ˆใ‚Šๅฐ‘ใชใ„ใƒ”ใƒณๆ•ฐใงใ‚ญใƒผๆŠผไธ‹ใ‚’ๆคœๅ‡บใงใใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ๅˆ—ใจ่กŒใฎ้…็ทšใƒ‘ใ‚ฟใƒผใƒณใ€‚ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นใซใฏๅคšใใฎๅ ดๅˆใ€NKRO ใ‚’ๅฏ่ƒฝใซใ™ใ‚‹ใŸใ‚ใฎใƒ€ใ‚คใ‚ชใƒผใƒ‰ใŒ็ต„ใฟ่พผใพใ‚Œใฆใ„ใพใ™ใ€‚
+
+## ใƒžใ‚ฏใƒญ
+ๅ˜ไธ€ใฎใ‚ญใƒผใฎใฟใ‚’ๆŠผใ—ใŸๅพŒใงใ€่ค‡ๆ•ฐใฎใ‚ญใƒผๆŠผไธ‹ใ‚คใƒ™ใƒณใƒˆ (HID ใƒฌใƒใƒผใƒˆ) ใ‚’้€ไฟกใงใใ‚‹ๆฉŸ่ƒฝใ€‚
+
+* [ใƒžใ‚ฏใƒญใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_macros.md)
+
+## MCU
+ใƒžใ‚คใ‚ฏใƒญใ‚ณใƒณใƒˆใƒญใƒผใƒซใƒฆใƒ‹ใƒƒใƒˆใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’ๅ‹•ใ‹ใ™ใƒ—ใƒญใ‚ปใƒƒใ‚ตใ€‚
+
+## ใƒขใƒ‡ใ‚ฃใƒ•ใ‚กใ‚คใ‚ข
+ๅˆฅใฎใ‚ญใƒผใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹้–“ๆŠผใ—ใŸใพใพใซใ—ใฆใ€ใใฎใ‚ญใƒผใฎใ‚ขใ‚ฏใ‚ทใƒงใƒณใ‚’ๅค‰ๆ›ดใ™ใ‚‹ใ‚ญใƒผใ€‚ไพ‹ใจใ—ใฆใ€Ctrlใ€Alt ใŠใ‚ˆใณ Shift ใŒใ‚ใ‚Šใพใ™ใ€‚
+(่จณๆณจ๏ผšใƒขใƒ‡ใ‚ฃใƒ•ใ‚กใ‚คใƒคใ€ใƒขใƒ‡ใ‚ฃใƒ•ใ‚กใ‚คใƒคใ‚ญใƒผใ€ไฟฎ้ฃพใ‚ญใƒผใชใฉใ€่จณ่ชžใŒ็ตฑไธ€ใ•ใ‚Œใฆใ„ใพใ›ใ‚“ใŒๅŒใ˜ใ‚‚ใฎใงใ™)
+
+## ใƒžใ‚ฆใ‚นใ‚ญใƒผ
+ใ‚ญใƒผใƒœใƒผใƒ‰ใ‹ใ‚‰ใƒžใ‚ฆใ‚นใ‚ซใƒผใ‚ฝใƒซใ‚’ๅˆถๅพกใ—ใ€ใ‚ฏใƒชใƒƒใ‚ฏใงใใ‚‹ๆฉŸ่ƒฝใ€‚
+
+* [ใƒžใ‚ฆใ‚นใ‚ญใƒผใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_mouse_keys.md)
+
+## N ใ‚ญใƒผใƒญใƒผใƒซใ‚ชใƒผใƒใƒผ (NKRO)
+ไธ€ๅบฆใซไปปๆ„ใฎๆ•ฐใฎใ‚ญใƒผใฎๆŠผไธ‹ใ‚’้€ไฟกใงใใ‚‹ใ‚ญใƒผใƒœใƒผใƒ‰ใซๅฝ“ใฆใฏใพใ‚‹็”จ่ชžใ€‚
+
+## ใƒฏใƒณใ‚ทใƒงใƒƒใƒˆใƒขใƒ‡ใ‚ฃใƒ•ใ‚กใ‚คใ‚ข
+ๅˆฅใฎใ‚ญใƒผใŒๆ”พใ•ใ‚Œใ‚‹ใพใงๆŠผใ•ใ‚Œใฆใ„ใ‚‹ใ‹ใฎใ‚ˆใ†ใซๆฉŸ่ƒฝใ™ใ‚‹ใƒขใƒ‡ใ‚ฃใƒ•ใ‚กใ‚คใ‚ขใ€‚ใ‚ญใƒผใ‚’ๆŠผใ—ใฆใ„ใ‚‹้–“ใซ mod ใ‚’ๆŠผใ—็ถšใ‘ใ‚‹ใฎใงใฏใชใใ€mod ใ‚’ๆŠผใ—ใฆใ‹ใ‚‰ใ‚ญใƒผใ‚’ๆŠผใ™ใ“ใจใŒใงใใพใ™ใ€‚ใ‚นใƒ†ใ‚ฃใƒƒใ‚ญใƒผใ‚ญใƒผใพใŸใฏใƒ‡ใƒƒใƒ‰ใ‚ญใƒผใจใ‚‚ๅ‘ผใณใพใ™ใ€‚
+
+## ProMicro
+ไฝŽใ‚ณใ‚นใƒˆใฎ AVR ้–‹็™บใƒœใƒผใƒ‰ใ€‚ใ“ใฎใƒ‡ใƒใ‚คใ‚นใฎใ‚ฏใƒญใƒผใƒณใฏ ebay ใง้žๅธธใซๅฎ‰ไพก(5ใƒ‰ใƒซๆœชๆบ€)ใซ่ฆ‹ใคใ‹ใ‚‹ใ“ใจใŒใ‚ใ‚Šใพใ™ใŒใ€ๅคšใใฎๅ ดๅˆ pro micro ใฎๆ›ธใ่พผใฟใซ่‹ฆๅŠดใ—ใพใ™ใ€‚
+
+## ใƒ—ใƒซใƒชใ‚ฏใ‚จใ‚นใƒˆ
+QMK ใซใ‚ณใƒผใƒ‰ใ‚’้€ไฟกใ™ใ‚‹ใƒชใ‚ฏใ‚จใ‚นใƒˆใ€‚ๅ…จใฆใฎใƒฆใƒผใ‚ถใŒๅ€‹ไบบใฎใ‚ญใƒผใƒžใƒƒใƒ—ใฎใƒ—ใƒซใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’้€ไฟกใ™ใ‚‹ใ“ใจใ‚’ๆŽจๅฅจใ—ใพใ™ใ€‚
+
+## QWERTY
+ๆจ™ๆบ–ใฎ่‹ฑ่ชžใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€‚ๅคšใใฎๅ ดๅˆใ€ไป–ใฎ่จ€่ชžใฎๆจ™ๆบ–ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใธใฎใ‚ทใƒงใƒผใƒˆใ‚ซใƒƒใƒˆใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰ใฎๆœ€ๅˆใฎ6ๆ–‡ๅญ—ใ‹ใ‚‰ๅ‘ฝๅใ•ใ‚Œใพใ—ใŸใ€‚
+
+## QWERTZ
+ๆจ™ๆบ–็š„ใช Deutsche (ใƒ‰ใ‚คใƒ„่ชž) ใ‚ญใƒผใƒœใƒผใƒ‰ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰ใฎๆœ€ๅˆใฎ6ๆ–‡ๅญ—ใ‹ใ‚‰ๅ‘ฝๅใ•ใ‚Œใพใ—ใŸใ€‚
+
+## ใƒญใƒผใƒซใ‚ชใƒผใƒใƒผ
+ใ‚ญใƒผใŒๆ—ขใซๆŠผใ•ใ‚Œใฆใ„ใ‚‹้–“ใซใ‚ญใƒผใ‚’ๆŠผใ™ใ“ใจใ‚’ๆŒ‡ใ™็”จ่ชžใ€‚ไผผใŸใ‚‚ใฎใซ 2KROใ€6KROใ€NKRO ใŒๅซใพใ‚Œใพใ™ใ€‚
+
+## ใ‚นใ‚ญใƒฃใƒณใ‚ณใƒผใƒ‰
+ๅ˜ไธ€ใฎใ‚ญใƒผใ‚’่กจใ™ USB ็ตŒ็”ฑใฎ HID ใƒฌใƒใƒผใƒˆใฎไธ€้ƒจใจใ—ใฆ้€ไฟกใ•ใ‚Œใ‚‹1ใƒใ‚คใƒˆใฎๆ•ฐๅ€คใ€‚ใ“ใ‚Œใ‚‰ใฎๅ€คใฏใ€[USB-IF](http://www.usb.org/) ใŒ็™บ่กŒใ™ใ‚‹ [HID Usage Tables](https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf) ใซ่จ˜่ผ‰ใ•ใ‚Œใฆใ„ใพใ™ใ€‚
+
+## ใ‚นใƒšใƒผใ‚นใ‚ซใƒ‡ใƒƒใƒˆใ‚ทใƒ•ใƒˆ
+ๅทฆใพใŸใฏๅณ shift ใ‚’1ๅ›žไปฅไธŠใ‚ฟใƒƒใƒ—ใ™ใ‚‹ใ“ใจใงใ€ๆง˜ใ€…ใชใ‚ฟใ‚คใƒ—ใฎๆ‹ฌๅผงใ‚’ๅ…ฅๅŠ›ใงใใ‚‹็‰นๅˆฅใช shift ใ‚ญใƒผใฎใ‚ปใƒƒใƒˆใ€‚
+
+* [ใ‚นใƒšใƒผใ‚นใ‚ซใƒ‡ใƒƒใƒˆใ‚ทใƒ•ใƒˆใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_space_cadet_shift.md)
+
+## ใ‚ฟใƒƒใƒ—
+ใ‚ญใƒผใ‚’ๆŠผใ—ใฆๆ”พใ™ใ€‚็Šถๆณใซใ‚ˆใฃใฆใฏใ‚ญใƒผใƒ€ใ‚ฆใƒณใ‚คใƒ™ใƒณใƒˆใจใ‚ญใƒผใ‚ขใƒƒใƒ—ใ‚คใƒ™ใƒณใƒˆใ‚’ๅŒบๅˆฅใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใŒใ€ใ‚ฟใƒƒใƒ—ใฏๅธธใซไธกๆ–นใ‚’ไธ€ๅบฆใซๆŒ‡ใ—ใพใ™ใ€‚
+
+## ใ‚ฟใƒƒใƒ—ใƒ€ใƒณใ‚น
+ๆŠผใ™ๅ›žๆ•ฐใซๅŸบใฅใ„ใฆใ€ๅŒใ˜ใ‚ญใƒผใซ่ค‡ๆ•ฐใฎใ‚ญใƒผใ‚ณใƒผใƒ‰ใ‚’ๅ‰ฒใ‚Šๅฝ“ใฆใ‚‹ใ“ใจใŒใงใใ‚‹ๆฉŸ่ƒฝใ€‚
+
+* [ใ‚ฟใƒƒใƒ—ใƒ€ใƒณใ‚นใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_tap_dance.md)
+
+## Teensy
+ๆ‰‹้…็ทšใงใฎ็ต„ใฟ็ซ‹ใฆใซใ‚ˆใ็”จใ„ใ‚‰ใ‚Œใ‚‹ไฝŽใ‚ณใ‚นใƒˆใฎ AVR ้–‹็™บใƒœใƒผใƒ‰ใ€‚halfkay ใƒ–ใƒผใƒˆใƒญใƒผใƒ€ใซใ‚ˆใฃใฆๆ›ธใ่พผใฟใŒ้žๅธธใซ็ฐกๅ˜ใซใชใ‚‹ใŸใ‚ใซใ€ๆ•ฐใƒ‰ใƒซ้ซ˜ใ„ใซใ‚‚ใ‹ใ‹ใ‚ใ‚‰ใš teensy ใŒใ—ใฐใ—ใฐ้ธๆŠžใ•ใ‚Œใพใ™ใ€‚
+
+## ใ‚ขใƒณใƒ€ใƒผใƒฉใ‚คใƒˆ
+ใ‚ญใƒผใƒœใƒผใƒ‰ใฎไธ‹ๅดใ‚’็…งใ‚‰ใ™ LED ใฎ็ท็งฐใ€‚ใ“ใ‚Œใ‚‰ใฎ LED ใฏ้€šๅธธ PCB ใฎๅบ•้ขใ‹ใ‚‰ใ‚ญใƒผใƒœใƒผใƒ‰ใŒ็ฝฎใ‹ใ‚Œใฆใ„ใ‚‹่กจ้ขใซๅ‘ใ‘ใฆ็…งใ‚‰ใ—ใพใ™ใ€‚
+
+## ใƒฆใƒ‹ใ‚ณใƒผใƒ‰
+ๅคง่ฆๆจกใชใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟใฎไธ–็•Œใงใฏใ€ใƒฆใƒ‹ใ‚ณใƒผใƒ‰ใฏไปปๆ„ใฎ่จ€่ชžใงๆ–‡ๅญ—ใ‚’่กจ็พใ™ใ‚‹ใŸใ‚ใฎใ‚จใƒณใ‚ณใƒผใƒ‰ๆ–นๅผใฎใ‚ปใƒƒใƒˆใงใ™ใ€‚QMK ใซ้–ขใ—ใฆใฏใ€ๆง˜ใ€…ใช OS ใ‚นใ‚ญใƒผใƒ ใ‚’ไฝฟใฃใฆใ‚นใ‚ญใƒฃใƒณใ‚ณใƒผใƒ‰ใฎไปฃใ‚ใ‚Šใซใƒฆใƒ‹ใ‚ณใƒผใƒ‰ใ‚ณใƒผใƒ‰ใƒใ‚คใƒณใƒˆใ‚’้€ไฟกใ™ใ‚‹ใ“ใจใ‚’ๆ„ๅ‘ณใ—ใพใ™ใ€‚
+
+* [ใƒฆใƒ‹ใ‚ณใƒผใƒ‰ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/feature_unicode.md)
+
+## ๅ˜ไฝ“ใƒ†ใ‚นใƒˆ
+QMK ใซๅฏพใ—ใฆ่‡ชๅ‹•ใƒ†ใ‚นใƒˆใ‚’ๅฎŸ่กŒใ™ใ‚‹ใŸใ‚ใฎใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใ€‚ๅ˜ไฝ“ใƒ†ใ‚นใƒˆใฏใ€ๅค‰ๆ›ดใŒไฝ•ใ‚‚ๅฃŠใ•ใชใ„ใ“ใจใ‚’็ขบไฟกใ™ใ‚‹ใฎใซๅฝน็ซ‹ใกใพใ™ใ€‚
+
+* [ๅ˜ไฝ“ใƒ†ใ‚นใƒˆใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ](ja/unit_testing.md)
+
+## USB
+ใƒฆใƒ‹ใƒใƒผใ‚ตใƒซใ‚ทใƒชใ‚ขใƒซใƒใ‚นใ€‚ใ‚ญใƒผใƒœใƒผใƒ‰็”จใฎๆœ€ใ‚‚ไธ€่ˆฌ็š„ใชๆœ‰็ทšใ‚คใƒณใ‚ฟใƒ•ใ‚งใƒผใ‚นใ€‚
+
+## USB ใƒ›ใ‚นใƒˆ (ใ‚ใ‚‹ใ„ใฏๅ˜ใซใƒ›ใ‚นใƒˆ)
+USB ใƒ›ใ‚นใƒˆใฏใ€ใ‚ใชใŸใฎใ‚ณใƒณใƒ”ใƒฅใƒผใ‚ฟใ€ใพใŸใฏใ‚ญใƒผใƒœใƒผใƒ‰ใŒๅทฎใ—่พผใพใ‚Œใฆใ„ใ‚‹ใƒ‡ใƒใ‚คใ‚นใฎใ“ใจใงใ™ใ€‚
+
+# ๆŽขใ—ใฆใ„ใ‚‹็”จ่ชžใŒ่ฆ‹ใคใ‹ใ‚Šใพใ›ใ‚“ใงใ—ใŸใ‹๏ผŸ
+
+่ณชๅ•ใซใคใ„ใฆใฎ [issue ใ‚’้–‹ใ„ใฆ](https://github.com/qmk/qmk_firmware/issues) ใ€่ณชๅ•ใ—ใŸ็”จ่ชžใซใคใ„ใฆใ“ใ“ใซ่ฟฝๅŠ ใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ•ใ‚‰ใซ่‰ฏใ„ใฎใฏใ€ๅฎš็พฉใซใคใ„ใฆใฎใƒ—ใƒซใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’้–‹ใใ“ใจใงใ™ใ€‚:)
diff --git a/docs/ja/reference_info_json.md b/docs/ja/reference_info_json.md
new file mode 100644
index 0000000000..708f7c19ac
--- /dev/null
+++ b/docs/ja/reference_info_json.md
@@ -0,0 +1,78 @@
+# `info.json`
+
+<!---
+ original document: 0.9.46:docs/reference_info_json.md
+ git diff 0.9.46 HEAD -- docs/reference_info_json.md | cat
+-->
+
+ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฏ [QMK API](https://github.com/qmk/qmk_api) ใซใ‚ˆใฃใฆไฝฟใ‚ใ‚Œใพใ™ใ€‚ใ“ใฎใƒ•ใ‚กใ‚คใƒซใฏ [QMK Configurator](https://config.qmk.fm/) ใŒใ‚ญใƒผใƒœใƒผใƒ‰ใฎ็”ปๅƒใ‚’่กจ็คบใ™ใ‚‹ใŸใ‚ใซๅฟ…่ฆใชๆƒ…ๅ ฑใ‚’ๅซใ‚“ใงใ„ใพใ™ใ€‚ใ“ใ“ใซใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’่จญๅฎšใ™ใ‚‹ใ“ใจใ‚‚ใงใใพใ™ใ€‚
+
+ใ“ใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใŸใ‚ใซใ€`qmk_firmware/keyboards/<name>` ใฎไธ‹ใฎๅ…จใฆใฎใƒฌใƒ™ใƒซใง `info.json` ใ‚’ไฝœๆˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฎใƒ•ใ‚กใ‚คใƒซใฏ็ตๅˆใ•ใ‚Œใ€ใ‚ˆใ‚Šๅ…ทไฝ“็š„ใชใƒ•ใ‚กใ‚คใƒซใŒใใ†ใงใฏใชใ„ใƒ•ใ‚กใ‚คใƒซใฎใ‚ญใƒผใ‚’ไธŠๆ›ธใใ—ใพใ™ใ€‚ใคใพใ‚Šใ€ใƒกใ‚ฟใƒ‡ใƒผใ‚ฟๆƒ…ๅ ฑใ‚’่ค‡่ฃฝใ™ใ‚‹ๅฟ…่ฆใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ไพ‹ใˆใฐใ€`qmk_firmware/keyboards/clueboard/info.json` ใฏ `manufacturer` ใŠใ‚ˆใณ `maintainer` ใ‚’ๆŒ‡ๅฎšใ—ใ€`qmk_firmware/keyboards/clueboard/66/info.json` ใฏ Clueboard 66% ใซใคใ„ใฆใฎใ‚ˆใ‚Šๅ…ทไฝ“็š„ใชๆƒ…ๅ ฑใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚
+
+## `info.json` ใฎๅฝขๅผ
+
+`info.json` ใƒ•ใ‚กใ‚คใƒซใฏ่จญๅฎšๅฏ่ƒฝใชไปฅไธ‹ใฎใ‚ญใƒผใ‚’ๆŒใค JSON ๅฝขๅผใฎ่พžๆ›ธใงใ™ใ€‚ๅ…จใฆใ‚’่จญๅฎšใ™ใ‚‹ๅฟ…่ฆใฏใชใใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใซ้ฉ็”จใ™ใ‚‹ใ‚ญใƒผใ ใ‘ใ‚’่จญๅฎšใ—ใพใ™ใ€‚
+
+* `keyboard_name`
+ * ใ‚ญใƒผใƒœใƒผใƒ‰ใ‚’่ชฌๆ˜Žใ™ใ‚‹่‡ช็”ฑๅฝขๅผใฎใƒ†ใ‚ญใ‚นใƒˆๆ–‡ๅญ—ๅˆ—ใ€‚
+ * ไพ‹: `Clueboard 66%`
+* `url`
+ * ใ‚ญใƒผใƒœใƒผใƒ‰ใฎ่ฃฝๅ“ใƒšใƒผใ‚ธใ€[QMK.fm/keyboards](https://qmk.fm/keyboards) ใฎใƒšใƒผใ‚ธใ€ใ‚ใ‚‹ใ„ใฏใ‚ญใƒผใƒœใƒผใƒ‰ใซ้–ขใ™ใ‚‹ๆƒ…ๅ ฑใ‚’่ชฌๆ˜Žใ™ใ‚‹ไป–ใฎใƒšใƒผใ‚ธใฎ URLใ€‚
+* `maintainer`
+ * ใƒกใƒณใƒ†ใƒŠใฎ GitHub ใฎใƒฆใƒผใ‚ถๅใ€ใ‚ใ‚‹ใ„ใฏใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใŒ็ฎก็†ใ™ใ‚‹ใ‚ญใƒผใƒœใƒผใƒ‰ใฎๅ ดๅˆใฏ `qmk`
+* `width`
+ * ใ‚ญใƒผๅ˜ไฝใงใฎใ‚ญใƒผใƒœใƒผใƒ‰ใฎๅน…
+* `height`
+ * ใ‚ญใƒผๅ˜ไฝใงใฎใ‚ญใƒผใƒœใƒผใƒ‰ใฎ้ซ˜ใ•
+* `layouts`
+ * ็‰ฉ็†็š„ใชใƒฌใ‚คใ‚ขใ‚ฆใƒˆ่กจ็พใ€‚่ฉณ็ดฐใฏไปฅไธ‹ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’่ฆ‹ใฆใใ ใ•ใ„ใ€‚
+
+### ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎๅฝขๅผ
+
+`info.json` ใƒ•ใ‚กใ‚คใƒซๅ†…ใฎ่พžๆ›ธใฎ `layouts` ้ƒจๅˆ†ใฏใ€ๅนพใคใ‹ใฎๅ…ฅใ‚ŒๅญใซใชใฃใŸ่พžๆ›ธใ‚’ๅซใฟใพใ™ใ€‚ๅค–ๅดใฎใƒฌใ‚คใƒคใƒผใฏ QMK ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญใงๆง‹ๆˆใ•ใ‚Œใพใ™ใ€‚ไพ‹ใˆใฐใ€`LAYOUT_ansi` ใ‚ใ‚‹ใ„ใฏ `LAYOUT_iso`ใ€‚ๅ„ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใƒžใ‚ฏใƒญๅ†…ใซใฏใ€`width`ใ€ `height`ใ€`key_count` ใฎใ‚ญใƒผใŒใ‚ใ‚Šใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฏ่‡ชๆ˜Žใงใชใ‘ใ‚Œใฐใชใ‚Šใพใ›ใ‚“ใ€‚
+
+* `width`
+ * ใ‚ชใƒ—ใ‚ทใƒงใƒณ: ใ‚ญใƒผๅ˜ไฝใงใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎๅน…
+* `height`
+ * ใ‚ชใƒ—ใ‚ทใƒงใƒณ: ใ‚ญใƒผๅ˜ไฝใงใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎ้ซ˜ใ•
+* `key_count`
+ * **ๅฟ…้ ˆ**: ใ“ใฎใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎใ‚ญใƒผใฎๆ•ฐ
+* `layout`
+ * ็‰ฉ็†ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใ‚’่ชฌๆ˜Žใ™ใ‚‹ใ‚ญใƒผ่พžๆ›ธใฎใƒชใ‚นใƒˆใ€‚่ฉณ็ดฐใฏๆฌกใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใ‚’่ฆ‹ใฆใใ ใ•ใ„ใ€‚
+
+### ใ‚ญใƒผ่พžๆ›ธๅฝขๅผ
+
+ใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎๅ„ใ‚ญใƒผ่พžๆ›ธใฏใ€ใ‚ญใƒผใฎ็‰ฉ็†ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’่จ˜่ฟฐใ—ใพใ™ใ€‚<http://keyboard-layout-editor.com> ใฎ Raw Code ใซ็ฒพ้€šใ—ใฆใ„ใ‚‹ๅ ดๅˆใ€ๅคšใใฎๆฆ‚ๅฟตใŒๅŒใ˜ใงใ‚ใ‚‹ใ“ใจใŒๅˆ†ใ‹ใ‚Šใพใ™ใ€‚ๅฏ่ƒฝใช้™ใ‚ŠๅŒใ˜ใ‚ญใƒผๅใจใƒฌใ‚คใ‚ขใ‚ฆใƒˆใฎ้ธๆŠžใ‚’ๅ†ๅˆฉ็”จใ—ใพใ™ใŒใ€keyboard-layout-editor ใจใฏ็•ฐใชใฃใฆๅ„ใ‚ญใƒผใฏใ‚นใƒ†ใƒผใƒˆใƒฌใ‚นใงใ€ๅ‰ใฎใ‚ญใƒผใ‹ใ‚‰ใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃใ‚’็ถ™ๆ‰ฟใ—ใพใ›ใ‚“ใ€‚
+
+ๅ…จใฆใฎใ‚ญใƒผใฎไฝ็ฝฎใจๅ›ž่ปขใฏใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใฎๅทฆไธŠใจใ€ๅ„ใ‚ญใƒผใฎๅทฆไธŠใ‚’ๅŸบๆบ–ใซใ—ใฆๆŒ‡ๅฎšใ•ใ‚Œใพใ™ใ€‚
+
+* `x`
+ * **ๅฟ…้ ˆ**: ๆฐดๅนณ่ปธใงใฎใ‚ญใƒผใฎ็ตถๅฏพไฝ็ฝฎ(ใ‚ญใƒผๅ˜ไฝ)ใ€‚
+* `y`
+ * **ๅฟ…้ ˆ**: ๅž‚็›ด่ปธใงใฎใ‚ญใƒผใฎ็ตถๅฏพไฝ็ฝฎ(ใ‚ญใƒผๅ˜ไฝ)ใ€‚
+* `w`
+ * ใ‚ญใƒผๅ˜ไฝใงใฎใ‚ญใƒผใฎๅน…ใ€‚`ks` ใŒๆŒ‡ๅฎšใ•ใ‚ŒใŸๅ ดๅˆใฏ็„ก่ฆ–ใ•ใ‚Œใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ: `1`
+* `h`
+ * ใ‚ญใƒผๅ˜ไฝใงใฎใ‚ญใƒผใฎ้ซ˜ใ•ใ€‚`ks` ใŒๆŒ‡ๅฎšใ•ใ‚ŒใŸๅ ดๅˆใฏ็„ก่ฆ–ใ•ใ‚Œใพใ™ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ: `1`
+* `r`
+ * ใ‚ญใƒผใ‚’ๅ›ž่ปขใ•ใ›ใ‚‹ๆ™‚่จˆๅ›žใ‚Šใฎ่ง’ๅบฆใ€‚
+* `rx`
+ * ใ‚ญใƒผใ‚’ๅ›ž่ปขใ•ใ›ใ‚‹็‚นใฎๆฐดๅนณ่ปธใซใŠใ‘ใ‚‹็ตถๅฏพไฝ็ฝฎใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ: `x`
+* `ry`
+ * ใ‚ญใƒผใ‚’ๅ›ž่ปขใ•ใ›ใ‚‹็‚นใฎๅž‚็›ด่ปธใซใŠใ‘ใ‚‹็ตถๅฏพไฝ็ฝฎใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ: `y`
+* `ks`
+ * ใ‚ญใƒผๅฝข็Šถ: ใ‚ญใƒผๅ˜ไฝใง้ ‚็‚นใ‚’ๅˆ—ๆŒ™ใ™ใ‚‹ใ“ใจใงใƒใƒชใ‚ดใƒณใ‚’ๅฎš็พฉใ—ใพใ™ใ€‚
+ * **้‡่ฆ**: ใ“ใ‚Œใ‚‰ใฏใ‚ญใƒผใฎๅทฆไธŠใ‹ใ‚‰ใฎ็›ธๅฏพไฝ็ฝฎใงใ€็ตถๅฏพไฝ็ฝฎใงใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚
+ * ISO Enter ใฎไพ‹: `[ [0,0], [1.5,0], [1.5,2], [0.25,2], [0.25,1], [0,1], [0,0] ]`
+* `label`
+ * ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นๅ†…ใฎใ“ใฎไฝ็ฝฎใซใคใ‘ใ‚‹ๅๅ‰ใ€‚
+ * ใ“ใ‚Œใฏ้€šๅธธ PCB ไธŠใงใ“ใฎไฝ็ฝฎใซใ‚ทใƒซใ‚ฏใ‚นใ‚ฏใƒชใƒผใƒณๅฐๅˆทใ•ใ‚Œใ‚‹ใ‚‚ใฎใจๅŒใ˜ๅๅ‰ใงใชใ‘ใ‚Œใฐใชใ‚Šใพใ›ใ‚“ใ€‚
+
+## ใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใฏใฉใฎใ‚ˆใ†ใซๅ…ฌ้–‹ใ•ใ‚Œใพใ™ใ‹๏ผŸ
+
+ใ“ใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใฏไธปใซ2ใคใฎๆ–นๆณ•ใงไฝฟใ‚ใ‚Œใพใ™:
+
+* Web ใƒ™ใƒผใ‚นใฎ configurator ใŒๅ‹•็š„ใซ UI ใ‚’็”Ÿๆˆใงใใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ใ€‚
+* ๆ–ฐใ—ใ„ `make keyboard:keymap:qmk` ใ‚ฟใƒผใ‚ฒใƒƒใƒˆใ‚’ใ‚ตใƒใƒผใƒˆใ™ใ‚‹ใ€‚ใ“ใ‚Œใฏใ€ใ“ใฎใƒกใ‚ฟใƒ‡ใƒผใ‚ฟใ‚’ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใซใƒใƒณใƒ‰ใƒซใ—ใฆ QMK Toolbox ใ‚’ใ‚ˆใ‚Šใ‚นใƒžใƒผใƒˆใซใ—ใพใ™ใ€‚
+
+Configurator ใฎไฝœๆˆ่€…ใฏใ€JSON API ใฎไฝฟ็”จใซ้–ขใ™ใ‚‹่ฉณ็ดฐใซใคใ„ใฆใ€[QMK Compiler](https://docs.api.qmk.fm/using-the-api) ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’ๅ‚็…งใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚
diff --git a/docs/ja/serial_driver.md b/docs/ja/serial_driver.md
new file mode 100644
index 0000000000..72071f4f7e
--- /dev/null
+++ b/docs/ja/serial_driver.md
@@ -0,0 +1,75 @@
+# 'ใ‚ทใƒชใ‚ขใƒซ' ใƒ‰ใƒฉใ‚คใƒ
+
+<!---
+ original document: 0.9.51:docs/serial_drive.md
+ git diff 0.9.51 HEAD -- docs/serial_drive.md | cat
+-->
+
+ใ“ใฎใƒ‰ใƒฉใ‚คใƒใฏ[ๅˆ†ๅ‰ฒใ‚ญใƒผใƒœใƒผใƒ‰](ja/feature_split_keyboard.md) ๆฉŸ่ƒฝใซไฝฟใ„ใพใ™ใ€‚
+
+?> ใ“ใฎๆ–‡็ซ ใงใฎใ‚ทใƒชใ‚ขใƒซใฏใ€UART/USART/RS485/RS232 ่ฆๆ ผใฎๅฎŸ่ฃ…ใงใฏใชใใ€**ไธ€ๅบฆใซ1ใƒ“ใƒƒใƒˆใฎๆƒ…ๅ ฑใ‚’้€ไฟกใ™ใ‚‹ใ‚‚ใฎ**ใจใ—ใฆ่ชญใพใ‚Œใ‚‹ในใใงใ™ใ€‚
+
+ใ“ใฎใ‚ซใƒ†ใ‚ดใƒชใฎๅ…จใฆใฎใƒ‰ใƒฉใ‚คใƒใซใฏไปฅไธ‹ใฎ็‰นๅพดใŒใ‚ใ‚Šใพใ™:
+* 1ๆœฌใฎ็ทšไธŠใงใƒ‡ใƒผใ‚ฟใจไฟกๅทใ‚’ๆไพ›
+* ใ‚ทใƒณใ‚ฐใƒซใƒžใ‚นใ‚ฟใ€ใ‚ทใƒณใ‚ฐใƒซใ‚นใƒฌใƒผใƒ–ใซ้™ๅฎš
+
+## ใ‚ตใƒใƒผใƒˆใ•ใ‚Œใ‚‹ใƒ‰ใƒฉใ‚คใƒใฎ็จฎ้กž
+
+| | AVR | ARM |
+|-------------------|--------------------|--------------------|
+| bit bang | :heavy_check_mark: | :heavy_check_mark: |
+| USART Half-duplex | | :heavy_check_mark: |
+
+## ใƒ‰ใƒฉใ‚คใƒ่จญๅฎš
+
+### Bitbang
+ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฎใƒ‰ใƒฉใ‚คใƒใ€‚่จญๅฎšใŒใชใ„ๅ ดๅˆใฏใ“ใฎใƒ‰ใƒฉใ‚คใƒใŒๆƒณๅฎšใ•ใ‚Œใพใ™ใ€‚่จญๅฎšใ™ใ‚‹ใซใฏใ€ไปฅไธ‹ใ‚’ rules.mk ใซ่ฟฝๅŠ ใ—ใพใ™:
+
+```make
+SERIAL_DRIVER = bitbang
+```
+
+config.h ใ‚’ไป‹ใ—ใฆใƒ‰ใƒฉใ‚คใƒใ‚’่จญๅฎšใ—ใพใ™:
+```c
+#define SOFT_SERIAL_PIN D0 // ใพใŸใฏ D1, D2, D3, E6
+#define SELECT_SOFT_SERIAL_SPEED 1 // ใพใŸใฏ 0, 2, 3, 4, 5
+ // 0: ็ด„ 189kbps (ๅฎŸ้จ“็›ฎ็š„ใฎใฟ)
+ // 1: ็ด„ 137kbps (ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ)
+ // 2: ็ด„ 75kbps
+ // 3: ็ด„ 39kbps
+ // 4: ็ด„ 26kbps
+ // 5: ็ด„ 20kbps
+```
+
+#### ARM
+
+!> bitbang ใƒ‰ใƒฉใ‚คใƒใฏ bitbang WS2812 ใƒ‰ใƒฉใ‚คใƒใจๆŽฅ็ถšใฎๅ•้กŒใŒใ‚ใ‚Šใพใ™
+
+ไธŠ่จ˜ใฎไธ€่ˆฌ็š„ใชใ‚ชใƒ—ใ‚ทใƒงใƒณใซๅŠ ใˆใฆใ€halconf.h ใง `PAL_USE_CALLBACKS` ๆฉŸ่ƒฝใ‚‚ใ‚ชใƒณใซใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
+
+### USART Half-duplex
+้€šไฟกใŒ USART ใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใƒ‡ใƒใ‚คใ‚นใซ้€ไฟกใ•ใ‚Œใ‚‹ STM32 ใƒœใƒผใƒ‰ใŒๅฏพ่ฑกใงใ™ใ€‚ใ“ใ‚Œใซใ‚ˆใ‚Š้ซ˜้€Ÿใงๆญฃ็ขบใชใ‚ฟใ‚คใƒŸใƒณใ‚ฐใ‚’ๆไพ›ใงใใ‚‹ใ“ใจใŒๅˆฉ็‚นใงใ™ใ€‚ใ“ใฎใƒ‰ใƒฉใ‚คใƒใฎ `SOFT_SERIAL_PIN` ใฏใ€่จญๅฎšใ•ใ‚ŒใŸ USART TX ใƒ”ใƒณใงใ™ใ€‚**TX ใƒ”ใƒณใซ้ฉๅˆ‡ใชใƒ—ใƒซใ‚ขใƒƒใƒ—ๆŠตๆŠ—ใŒๅฟ…่ฆใงใ™**ใ€‚่จญๅฎšใ™ใ‚‹ใซใฏใ€ไปฅไธ‹ใ‚’ rules.mk ใซ่ฟฝๅŠ ใ—ใพใ™:
+
+```make
+SERIAL_DRIVER = usart
+```
+
+config.h ใ‚’ไป‹ใ—ใฆใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใ‚’่จญๅฎšใ—ใพใ™:
+```c
+#define SOFT_SERIAL_PIN B6 // USART TX ใƒ”ใƒณ
+#define SELECT_SOFT_SERIAL_SPEED 1 // ใพใŸใฏ 0, 2, 3, 4, 5
+ // 0: ็ด„ 460800 ใƒœใƒผ
+ // 1: ็ด„ 230400 ใƒœใƒผ (ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆ)
+ // 2: ็ด„ 115200 ใƒœใƒผ
+ // 3: ็ด„ 57600 ใƒœใƒผ
+ // 4: ็ด„ 38400 ใƒœใƒผ
+ // 5: ็ด„ 19200 ใƒœใƒผ
+#define SERIAL_USART_DRIVER SD1 // TX ใƒ”ใƒณใฎ USART ใƒ‰ใƒฉใ‚คใƒใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฏ SD1
+#define SERIAL_USART_TX_PAL_MODE 7 // ใ€Œไปฃๆ›ฟๆฉŸ่ƒฝใ€ ใƒ”ใƒณใ€‚MCU ใฎ้ฉๅˆ‡ใชๅ€คใซใคใ„ใฆใฏใ€ใใ‚Œใžใ‚Œใฎใƒ‡ใƒผใ‚ฟใ‚ทใƒผใƒˆใ‚’่ฆ‹ใฆใใ ใ•ใ„ใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใฏ 7
+```
+
+ใพใŸใ€ChibiOS `SERIAL` ๆฉŸ่ƒฝใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™:
+* ใ‚ญใƒผใƒœใƒผใƒ‰ใฎ halconf.h: `#define HAL_USE_SERIAL TRUE`
+* ใ‚ญใƒผใƒœใƒผใƒ‰ใฎ mcuconf.h: `#define STM32_SERIAL_USE_USARTn TRUE` (ใ“ใ“ใงใ€'n' ใฏ MCU ใง้ธๆŠžใ—ใŸ USART ใฎใƒšใƒชใƒ•ใ‚งใƒฉใƒซ็•ชๅทใจไธ€่‡ด)
+
+ๅฟ…่ฆใชๆง‹ๆˆใฏใ€`UART` ๅ‘จ่พบๆฉŸๅ™จใงใฏใชใใ€`SERIAL` ๅ‘จ่พบๆฉŸๅ™จใงใ‚ใ‚‹ใ“ใจใซๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚
diff --git a/docs/ja/support.md b/docs/ja/support.md
new file mode 100644
index 0000000000..01c2d41d19
--- /dev/null
+++ b/docs/ja/support.md
@@ -0,0 +1,22 @@
+# ๅŠฉใ‘ใ‚’ๅพ—ใ‚‹
+
+<!---
+ original document: 0.9.51:docs/support.md
+ git diff 0.9.51 HEAD -- docs/support.md | cat
+-->
+
+QMK ใซ้–ขใ—ใฆๅŠฉใ‘ใ‚’ๅพ—ใ‚‹ใŸใ‚ใฎๅคšใใฎใƒชใ‚ฝใƒผใ‚นใŒใ‚ใ‚Šใพใ™ใ€‚
+
+ใ‚ณใƒŸใƒฅใƒ‹ใƒ†ใ‚ฃใ‚นใƒšใƒผใ‚นใซๅ‚ๅŠ ใ™ใ‚‹ๅ‰ใซ[่กŒๅ‹•่ฆ็ฏ„](https://qmk.fm/coc/)ใ‚’่ชญใ‚“ใงใใ ใ•ใ„ใ€‚
+
+## ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ใƒใƒฃใƒƒใƒˆ
+
+ไฝ•ใ‹ใซใคใ„ใฆๅŠฉใ‘ใŒๅฟ…่ฆใชๅ ดๅˆใฏใ€่ฟ…้€Ÿใชใ‚ตใƒใƒผใƒˆใ‚’ๅ—ใ‘ใ‚‹ใŸใ‚ใฎๆœ€่‰ฏใฎๅ ดๆ‰€ใฏใ€[Discord Server](https://discord.gg/Uq7gcHh) ใงใ™ใ€‚้€šๅธธใฏ่ชฐใ‹ใŒใ‚ชใƒณใƒฉใ‚คใƒณใงใ€้žๅธธใซๅŠฉใ‘ใซใชใ‚‹ๅคšใใฎไบบใŒใ„ใพใ™ใ€‚
+
+## OLKB Subreddit
+
+ๅ…ฌๅผใฎ QMK ใƒ•ใ‚ฉใƒผใƒฉใƒ ใฏ [reddit.com](https://reddit.com) ใฎ [/r/olkb](https://reddit.com/r/olkb) ใงใ™ใ€‚
+
+## GitHub Issues
+
+[GitHub ใง issue](https://github.com/qmk/qmk_firmware/issues) ใ‚’้–‹ใใ“ใจใŒใงใใพใ™ใ€‚issue ใฏ้•ทๆœŸ็š„ใช่ญฐ่ซ–ใ‚ใ‚‹ใ„ใฏใƒ‡ใƒใƒƒใ‚ฐใ‚’ๅฟ…่ฆใจใ™ใ‚‹ๅ ดๅˆใฏใ€็‰นใซไพฟๅˆฉใงใ™ใ€‚
diff --git a/docs/ja/syllabus.md b/docs/ja/syllabus.md
new file mode 100644
index 0000000000..14e743ee9c
--- /dev/null
+++ b/docs/ja/syllabus.md
@@ -0,0 +1,75 @@
+# QMK ใ‚ทใƒฉใƒใ‚น
+
+<!---
+ original document: 0.9.51:docs/syllabus.md
+ git diff 0.9.51 HEAD -- docs/syllabus.md | cat
+-->
+
+ใ“ใฎใƒšใƒผใ‚ธใฏๆœ€ๅˆใซๅŸบๆœฌใ‚’็ดนไป‹ใ—ใ€ใใ—ใฆใ€QMK ใซ็ฟ’็†Ÿใ™ใ‚‹ใŸใ‚ใซๅฟ…่ฆใชๅ…จใฆใฎๆฆ‚ๅฟตใ‚’็†่งฃใ™ใ‚‹ใ‚ˆใ†ใซๅฐŽใใ“ใจใงใ€QMK ใฎ็Ÿฅ่ญ˜ใ‚’ๆง‹็ฏ‰ใ™ใ‚‹ใฎใซๅฝน็ซ‹ใกใพใ™ใ€‚
+
+# ๅˆ็ดšใƒˆใƒ”ใƒƒใ‚ฏ
+
+ไป–ใซไฝ•ใ‚‚่ชญใ‚“ใงใ„ใชใ„ๅ ดๅˆใฏใ€ใ“ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’่ชญใ‚“ใงใใ ใ•ใ„ใ€‚[QMK ๅˆๅฟƒ่€…ใ‚ฌใ‚คใƒ‰](ja/newbs.md)ใ‚’่ชญใฟ็ต‚ใ‚ใ‚‹ใจใ€ๅŸบๆœฌ็š„ใชใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ไฝœๆˆใ—ใ€ใใ‚Œใ‚’ใ‚ณใƒณใƒ‘ใ‚คใƒซใ—ใ€ใ‚ญใƒผใƒœใƒผใƒ‰ใซๆ›ธใ่พผใฟใงใใ‚‹ใ‚ˆใ†ใซใชใฃใฆใ„ใ‚‹ใฏใšใงใ™ใ€‚ๆฎ‹ใ‚Šใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฏใ“ใ‚Œใ‚‰ใฎๅŸบๆœฌ็š„ใช็Ÿฅ่ญ˜ใ‚’ๅ…ทไฝ“็š„ใซ่‚‰ไป˜ใ‘ใ—ใพใ™ใ€‚
+
+* **QMK Tools ใฎไฝฟใ„ๆ–นใ‚’ๅญฆใถ**
+ * [QMK ๅˆๅฟƒ่€…ใ‚ฌใ‚คใƒ‰](ja/newbs.md)
+ * [CLI](ja/cli.md)
+ * [Git](ja/newbs_git_best_practices.md)
+* **ใ‚ญใƒผใƒžใƒƒใƒ—ใซใคใ„ใฆๅญฆใถ**
+ * [ใƒฌใ‚คใƒคใƒผ](ja/feature_layers.md)
+ * [ใ‚ญใƒผใ‚ณใƒผใƒ‰](ja/keycodes.md)
+ * ไฝฟ็”จใงใใ‚‹ใ‚ญใƒผใ‚ณใƒผใƒ‰ใฎๅฎŒๅ…จใชใƒชใ‚นใƒˆใ€‚ไธญ็ดšใพใŸใฏไธŠ็ดšใƒˆใƒ”ใƒƒใ‚ฏใซใ‚ใ‚‹็Ÿฅ่ญ˜ใŒๅฟ…่ฆใชๅ ดๅˆใ‚‚ใ‚ใ‚‹ใ“ใจใซๆณจๆ„ใ—ใฆใใ ใ•ใ„ใ€‚
+* **IDE ใฎ่จญๅฎš** - ใ‚ชใƒ—ใ‚ทใƒงใƒณ
+ * [Eclipse](ja/other_eclipse.md)
+ * [VS Code](ja/other_vscode.md)
+
+# ไธญ็ดšใƒˆใƒ”ใƒƒใ‚ฏ
+
+ใ“ใ‚Œใ‚‰ใฎใƒˆใƒ”ใƒƒใ‚ฏใงใฏใ€QMK ใŒใ‚ตใƒใƒผใƒˆใ™ใ‚‹ๅนพใคใ‹ใฎๆฉŸ่ƒฝใซใคใ„ใฆๆŽ˜ใ‚Šไธ‹ใ’ใพใ™ใ€‚ใ“ใ‚Œใ‚‰ใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’ๅ…จใฆ่ชญใ‚€ๅฟ…่ฆใฏใ‚ใ‚Šใพใ›ใ‚“ใŒใ€ใ“ใ‚Œใ‚‰ใฎไธ€้ƒจใ‚’ใ‚นใ‚ญใƒƒใƒ—ใ™ใ‚‹ใจใ€ไธŠ็ดšใƒˆใƒ”ใƒƒใ‚ฏใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณใฎไธ€้ƒจใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใŒๆ„ๅ‘ณใ‚’ใชใ•ใชใใชใ‚‹ใ‹ใ‚‚ใ—ใ‚Œใพใ›ใ‚“ใ€‚
+
+* **ๆฉŸ่ƒฝใฎ่จญๅฎšๆ–นๆณ•ใ‚’ๅญฆใถ**
+ <!-- * Configuration Overview FIXME(skullydazed/anyone): write this document -->
+ * [ใ‚ชใƒผใƒ‡ใ‚ฃใ‚ช](ja/feature_audio.md)
+ * ้›ป้ฃพ
+ * [ใƒใƒƒใ‚ฏใƒฉใ‚คใƒˆ](ja/feature_backlight.md)
+ * [LED ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚น](ja/feature_led_matrix.md)
+ * [RGB ใƒฉใ‚คใƒˆ](ja/feature_rgblight.md)
+ * [RGB ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚น](ja/feature_rgb_matrix.md)
+ * [ใ‚ฟใƒƒใƒ—ใƒ›ใƒผใƒซใƒ‰่จญๅฎš](ja/tap_hold.md)
+* **ใ‚ญใƒผใƒžใƒƒใƒ—ใซใคใ„ใฆใ•ใ‚‰ใซๅญฆใถ**
+ * [ใ‚ญใƒผใƒžใƒƒใƒ—](ja/keymap.md)
+ * [ใ‚ซใ‚นใ‚ฟใƒ ้–ขๆ•ฐใจใ‚ญใƒผใ‚ณใƒผใƒ‰](ja/custom_quantum_functions.md)
+ * ใƒžใ‚ฏใƒญ
+ * [ๅ‹•็š„ใƒžใ‚ฏใƒญ](ja/feature_dynamic_macros.md)
+ * [ใ‚ณใƒณใƒ‘ใ‚คใƒซๆธˆใฟใฎใƒžใ‚ฏใƒญ](ja/feature_macros.md)
+ * [ใ‚ฟใƒƒใƒ—ใƒ€ใƒณใ‚น](ja/feature_tap_dance.md)
+ * [ใ‚ณใƒณใƒœ](ja/feature_combo.md)
+ * [ใƒฆใƒผใ‚ถใ‚นใƒšใƒผใ‚น](ja/feature_userspace.md)
+
+# ไธŠ็ดšใƒˆใƒ”ใƒƒใ‚ฏ
+
+ไปฅไธ‹ใฎๅ…จใฆใฏๅคšใใฎๅŸบ็คŽ็Ÿฅ่ญ˜ใ‚’ๅฟ…่ฆใจใ—ใพใ™ใ€‚้ซ˜ๅบฆใชๆฉŸ่ƒฝใ‚’ไฝฟใฃใฆใ‚ญใƒผใƒžใƒƒใƒ—ใ‚’ไฝœๆˆใงใใ‚‹ใ“ใจใซๅŠ ใˆใฆใ€`config.h` ใจ `rules.mk` ใฎไธกๆ–นใ‚’ไฝฟใฃใฆใ‚ญใƒผใƒœใƒผใƒ‰ใฎใ‚ชใƒ—ใ‚ทใƒงใƒณใ‚’่จญๅฎšใ™ใ‚‹ใ“ใจใซๆ…ฃใ‚Œใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
+
+* **QMK ๅ†…ใฎใ‚ญใƒผใƒœใƒผใƒ‰ใฎไฟๅฎˆ**
+ * [ใ‚ญใƒผใƒœใƒผใƒ‰ใฎๆ‰‹้…็ทš](ja/hand_wire.md)
+ * [ใ‚ญใƒผใƒœใƒผใƒ‰ใ‚ฌใ‚คใƒ‰ใƒฉใ‚คใƒณ](ja/hardware_keyboard_guidelines.md)
+ * [info.json ใƒชใƒ•ใ‚กใƒฌใƒณใ‚น](ja/reference_info_json.md)
+ * [ใƒ‡ใƒใ‚ฆใƒณใ‚น API](ja/feature_debounce_type.md)
+* **้ซ˜ๅบฆใชๆฉŸ่ƒฝ**
+ * [ใƒฆใƒ‹ใ‚ณใƒผใƒ‰](ja/feature_unicode.md)
+ * [API](ja/api_overview.md)
+ * [ใƒ–ใƒผใƒˆใƒžใ‚ธใƒƒใ‚ฏ](ja/feature_bootmagic.md)
+* **ใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ข**
+ * [ใ‚ญใƒผใƒœใƒผใƒ‰ใŒใฉใฎใ‚ˆใ†ใซๅ‹•ไฝœใ™ใ‚‹ใ‹](ja/how_keyboards_work.md)
+ * [ใ‚ญใƒผใƒœใƒผใƒ‰ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚นใฎไป•็ต„ใฟ](ja/how_a_matrix_works.md)
+ * [ๅˆ†ๅ‰ฒใ‚ญใƒผใƒœใƒผใƒ‰](ja/feature_split_keyboard.md)
+ * [้€Ÿ่จ˜](ja/feature_stenography.md)
+ * [ใƒใ‚คใƒณใƒ†ใ‚ฃใƒณใ‚ฐใƒ‡ใƒใ‚คใ‚น](ja/feature_pointing_device.md)
+* **ใ‚ณใ‚ข้–‹็™บ**
+ * [ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„](ja/coding_conventions_c.md)
+ * [ไบ’ๆ›ๆ€งใฎใ‚ใ‚‹ใƒžใ‚คใ‚ฏใƒญใ‚ณใƒณใƒˆใƒญใƒผใƒฉ](ja/compatible_microcontrollers.md)
+ * [ใ‚ซใ‚นใ‚ฟใƒ ใƒžใƒˆใƒชใƒƒใ‚ฏใ‚น](ja/custom_matrix.md)
+ * [QMK ใ‚’็†่งฃใ™ใ‚‹](ja/understanding_qmk.md)
+* **CLI ้–‹็™บ**
+ * [ใ‚ณใƒผใƒ‡ใ‚ฃใƒณใ‚ฐ่ฆ็ด„](ja/coding_conventions_python.md)
+ * [CLI ้–‹็™บใฎๆฆ‚่ฆ](ja/cli_development.md)
diff --git a/docs/ja/translating.md b/docs/ja/translating.md
new file mode 100644
index 0000000000..f7a273308a
--- /dev/null
+++ b/docs/ja/translating.md
@@ -0,0 +1,60 @@
+# QMK ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’็ฟป่จณใ™ใ‚‹
+
+<!---
+ original document: 0.9.51:docs/translating.md
+ git diff 0.9.51 HEAD -- docs/translating.md | cat
+-->
+
+ใƒซใƒผใƒˆใƒ•ใ‚ฉใƒซใƒ€ (`docs/`) ใซใ‚ใ‚‹ๅ…จใฆใฎใƒ•ใ‚กใ‚คใƒซใฏ่‹ฑ่ชžใงใชใ‘ใ‚Œใฐใชใ‚Šใพใ›ใ‚“ - ไป–ใฎๅ…จใฆใฎ่จ€่ชžใฏใ€ISO 639-1 ่จ€่ชžใ‚ณใƒผใƒ‰ใจใ€ใใ‚Œใซ็ถšใ`-`ใจ้–ข้€ฃใ™ใ‚‹ๅ›ฝใ‚ณใƒผใƒ‰ใฎใ‚ตใƒ–ใƒ•ใ‚ฉใƒซใƒ€ใซใ‚ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚[ไธ€่ˆฌ็š„ใชใ‚‚ใฎใฎใƒชใ‚นใƒˆใฏใ“ใ“ใง่ฆ‹ใคใ‹ใ‚Šใพใ™](https://www.andiamo.co.uk/resources/iso-language-codes/)ใ€‚ใ“ใฎใƒ•ใ‚ฉใƒซใƒ€ใŒๅญ˜ๅœจใ—ใชใ„ๅ ดๅˆใ€ไฝœๆˆใ™ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚็ฟป่จณใ•ใ‚ŒใŸๅ„ใƒ•ใ‚กใ‚คใƒซใฏ่‹ฑ่ชžใƒใƒผใ‚ธใƒงใƒณใจๅŒใ˜ๅๅ‰ใงใชใ‘ใ‚Œใฐใชใ‚Šใพใ›ใ‚“ใ€‚ใใ†ใ™ใ‚‹ใ“ใจใงใ€ๆญฃๅธธใซใƒ•ใ‚ฉใƒผใƒซใƒใƒƒใ‚ฏใงใใพใ™ใ€‚
+
+`_summary.md` ใƒ•ใ‚กใ‚คใƒซใฏใ“ใฎใƒ•ใ‚ฉใƒซใƒ€ใฎไธญใซๅญ˜ๅœจใ—ใ€ๅ„ใƒ•ใ‚กใ‚คใƒซใธใฎใƒชใƒณใ‚ฏใฎใƒชใ‚นใƒˆใ€็ฟป่จณใ•ใ‚ŒใŸๅๅ‰ใ€่จ€่ชžใƒ•ใ‚ฉใƒซใƒ€ใซ็ถšใใƒชใƒณใ‚ฏใŒๅซใพใ‚Œใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
+
+```markdown
+ * [QMK็ฎ€ไป‹](zh-cn/getting_started_introduction.md)
+```
+
+ไป–ใฎ docs ใƒšใƒผใ‚ธใธใฎๅ…จใฆใฎใƒชใƒณใ‚ฏใซใ‚‚ใ€่จ€่ชžใฎใƒ•ใ‚ฉใƒซใƒ€ใŒๅ‰ใซไป˜ใ„ใฆใ„ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚ใ‚‚ใ—ใƒชใƒณใ‚ฏใŒใƒšใƒผใ‚ธใฎ็‰นๅฎšใฎ้ƒจๅˆ†(ไพ‹ใˆใฐใ€็‰นๅฎšใฎ่ฆ‹ๅ‡บใ—)ใธใฎๅ ดๅˆใ€ไปฅไธ‹ใฎใ‚ˆใ†ใซ่ฆ‹ๅ‡บใ—ใซ่‹ฑ่ชžใฎ ID ใ‚’ไฝฟใ†ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™:
+
+```markdown
+[ๅปบ็ซ‹ไฝ ็š„็Žฏๅขƒ](zh-cn/newbs-getting-started.md#set-up-your-environment)
+
+## ๅปบ็ซ‹ไฝ ็š„็Žฏๅขƒ :id=set-up-your-environment
+```
+
+ๆ–ฐใ—ใ„่จ€่ชžใฎ็ฟป่จณใŒๅฎŒไบ†ใ—ใŸใ‚‰ใ€ไปฅไธ‹ใฎใƒ•ใ‚กใ‚คใƒซใ‚‚ไฟฎๆญฃใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™:
+
+* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
+ๅ„่กŒใฏใ€[GitHub emoji shortcode](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md#country-flag) ใฎๅฝขๅผใงๅ›ฝใƒ•ใƒฉใ‚ฐใจใ€ใใ‚Œใซ็ถšใ่จ€่ชžใง่กจใ•ใ‚Œใ‚‹ๅๅ‰ใ‚’ๅซใ‚€ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™ใ€‚
+
+ ```markdown
+ - [:cn: ไธญๆ–‡](/zh-cn/)
+ ```
+
+* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
+`placeholder` ใจ `noData` ใฎไธกๆ–นใฎใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ๆ–‡ๅญ—ๅˆ—ใง่จ€่ชžใƒ•ใ‚ฉใƒซใƒ€ใฎ่พžๆ›ธใ‚จใƒณใƒˆใƒชใŒๅฟ…่ฆใงใ™:
+
+ ```js
+ '/zh-cn/': 'ๆฒกๆœ‰็ป“ๆžœ!',
+ ```
+
+ ใ‚ตใ‚คใƒ‰ใƒใƒผใฎใ€ŒQMK ใƒ•ใ‚กใƒผใƒ ใ‚ฆใ‚งใ‚ขใ€ใฎ่ฆ‹ๅ‡บใ—ใƒชใƒณใ‚ฏใ‚’่จญๅฎšใ™ใ‚‹ใŸใ‚ใซใ€`nameLink` ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚‚ไปฅไธ‹ใฎใ‚ˆใ†ใซ่ฟฝๅŠ ใ•ใ‚Œใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใพใ™:
+
+ ```js
+ '/zh-cn/': '/#/zh-cn/',
+ ```
+
+ ใพใŸใ€`fallbackLanguages` ใƒชใ‚นใƒˆใซ่จ€่ชžใƒ•ใ‚ฉใƒซใƒ€ใ‚’่ฟฝๅŠ ใ—ใฆใ€404 ใงใฏใชใ่‹ฑ่ชžใซ้ฉๅˆ‡ใซใƒ•ใ‚ฉใƒผใƒซใƒใƒƒใ‚ฏใ™ใ‚‹ใ‚ˆใ†ใซใ—ใฆใใ ใ•ใ„:
+
+ ```js
+ fallbackLanguages: [
+ // ...
+ 'zh-cn',
+ // ...
+ ],
+ ```
+
+## ็ฟป่จณใฎใƒ—ใƒฌใƒ“ใƒฅใƒผ
+
+ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฎใƒญใƒผใ‚ซใƒซใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’ใ‚ปใƒƒใƒˆใ‚ขใƒƒใƒ—ใ™ใ‚‹ๆ–นๆณ•ใซใคใ„ใฆใฏใ€[ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฎใƒ—ใƒฌใƒ“ใƒฅใƒผ](ja/contributing.md#previewing-the-documentation)ใ‚’่ฆ‹ใฆใใ ใ•ใ„ - ๅณไธŠใฎ "Translations" ใƒกใƒ‹ใƒฅใƒผใ‹ใ‚‰ๆ–ฐใ—ใ„่จ€่ชžใ‚’้ธๆŠžใ™ใ‚‹ใ“ใจใŒใงใใ‚‹ใฏใšใงใ™ใ€‚
+
+ไฝœๆฅญใซๆบ€่ถณใ—ใŸใ‚‰ใ€้ ๆ…ฎใชใใƒ—ใƒซใƒชใ‚ฏใ‚จใ‚นใƒˆใ‚’้–‹ใ„ใฆใใ ใ•ใ„๏ผ
diff --git a/docs/pr_checklist.md b/docs/pr_checklist.md
index 8755552b9d..22e8a3fe1a 100644
--- a/docs/pr_checklist.md
+++ b/docs/pr_checklist.md
@@ -1,39 +1,42 @@
# PR checklists
-This is a non-exhaustive checklist of what the QMK collaborators will be checking when reviewing submitted PRs.
+This is a non-exhaustive checklist of what the QMK Collaborators will be checking when reviewing submitted PRs.
-If there are any inconsistencies with these recommendations, you're best off [creating an issue](https://github.com/qmk/qmk_firmware/issues/new) against this document, or getting in touch with a QMK Collaborator on Discord.
+If there are any inconsistencies with these recommendations, you're best off [creating an issue](https://github.com/qmk/qmk_firmware/issues/new) against this document, or getting in touch with a QMK Collaborator on [Discord](https://discord.gg/Uq7gcHh).
## General PRs
- PR should be submitted using a non-`master` branch on the source repository
- - This does not mean you target a different branch for your PR, rather that you're not working out of your own master branch
- - If submitter _does_ use their own `master` branch, they'll be given a link to the ["how to git"](https://docs.qmk.fm/#/newbs_git_using_your_master_branch) page after merging -- (end of this document will contain the contents of the message)
-- Newly-added directories and filenames must be lowercase
- - This rule may be relaxed if upstream sources originally had uppercase characters (e.g. ChibiOS, or imported files from other repositories etc.)
- - If there is enough justification (i.e. consistency with existing core files etc.) this can be relaxed
+ - this does not mean you target a different branch for your PR, rather that you're not working out of your own master branch
+ - if submitter _does_ use their own `master` branch, they'll be given a link to the ["how to git"](https://docs.qmk.fm/#/newbs_git_using_your_master_branch) page after merging -- (end of this document will contain the contents of the message)
+- newly-added directories and filenames must be lowercase
+ - this rule may be relaxed if upstream sources originally had uppercase characters (e.g. ChibiOS, or imported files from other repositories etc.)
+ - if there is enough justification (i.e. consistency with existing core files etc.) this can be relaxed
- a board designer naming their keyboard with uppercase letters is not enough justification
-- Valid license headers on all `*.c` and `*.h` source files
+- valid license headers on all `*.c` and `*.h` source files
- GPL2/GPL3 recommended for consistency
- - Other licenses are permitted, however they must be GPL-compatible and must allow for redistribution. Using a different license will almost certainly delay a PR getting merged.
-- QMK codebase "best practices" followed
- - This is not an exhaustive list, and will likely get amended as time goes by
+ - other licenses are permitted, however they must be GPL-compatible and must allow for redistribution. Using a different license will almost certainly delay a PR getting merged.
+- QMK Codebase "best practices" followed
+ - this is not an exhaustive list, and will likely get amended as time goes by
- `#pragma once` instead of `#ifndef` include guards in header files
- - No "old-school" GPIO/I2C/SPI functions used -- must use QMK abstractions unless justifiable (and laziness is not valid justification)
- - Timing abstractions should be followed too:
+ - no "old-school" GPIO/I2C/SPI functions used -- must use QMK abstractions unless justifiable (and laziness is not valid justification)
+ - timing abstractions should be followed too:
- `wait_ms()` instead of `_delay_ms()` (remove `#include <util/delay.h>` too)
- `timer_read()` and `timer_read32()` etc. -- see [timer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/timer.h) for the timing APIs
- - If you think a new abstraction is useful, you're encouraged to:
+ - if you think a new abstraction is useful, you're encouraged to:
- prototype it in your own keyboard until it's feature-complete
- discuss it with QMK Collaborators on Discord
- refactor it as a separate core change
- remove your specific copy in your board
+- rebase and fix all merge conflicts before opening the PR (in case you need help or advice, reach out to QMK Collaborators on Discord)
-## Core PRs
+## Keymap PRs
-- Must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
-- Other notes TBD
- - Core is a lot more subjective given the breadth of posted changes
+- `#include QMK_KEYBOARD_H` preferred to including specific board files
+- prefer layer `enum`s to `#define`s
+- require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE`
+- terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous
+- some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
## Keyboard PRs
@@ -48,12 +51,14 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- standard template should be present
- flash command has `:flash` at end
- valid hardware availability link (unless handwired) -- private groupbuys are okay, but one-off prototypes will be questioned. If open-source, a link to files should be provided.
+ - clear instructions on how to reset the board into bootloader mode
+ - a picture about the keyboard and preferably about the PCB, too
- `rules.mk`
- removed `MIDI_ENABLE`, `FAUXCLICKY_ENABLE` and `HD44780_ENABLE`
- modified `# Enable Bluetooth with the Adafruit EZ-Key HID` -> `# Enable Bluetooth`
- - No `(-/+size)` comments related to enabling features
- - Remove the list of alternate bootloaders if one has been specified
- - No re-definitions of the default MCU parameters if same value, when compared to the equivalent MCU in [mcu_selection.mk](https://github.com/qmk/qmk_firmware/blob/master/quantum/mcu_selection.mk)
+ - no `(-/+size)` comments related to enabling features
+ - remove the list of alternate bootloaders if one has been specified
+ - no re-definitions of the default MCU parameters if same value, when compared to the equivalent MCU in [mcu_selection.mk](https://github.com/qmk/qmk_firmware/blob/master/quantum/mcu_selection.mk)
- keyboard `config.h`
- don't repeat `MANUFACTURER` in the `PRODUCT` value
- no `#define DESCRIPTION`
@@ -71,12 +76,12 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- `keyboard.h`
- `#include "quantum.h"` appears at the top
- `LAYOUT` macros should use standard definitions if applicable
- - Use the Community Layout macro names where they apply (preferred above `LAYOUT`/`LAYOUT_all`)
+ - use the Community Layout macro names where they apply (preferred above `LAYOUT`/`LAYOUT_all`)
- keymap `config.h`
- no duplication of `rules.mk` or `config.h` from keyboard
- `keymaps/default/keymap.c`
- `QMKBEST`/`QMKURL` removed (sheesh)
- - If using `MO(_LOWER)` and `MO(_RAISE)` keycodes or equivalent, and the keymap has an adjust layer when holding both keys -- if the keymap has no "direct-to-adjust" keycode (such as `MO(_ADJUST)`) then you should prefer to write...
+ - if using `MO(_LOWER)` and `MO(_RAISE)` keycodes or equivalent, and the keymap has an adjust layer when holding both keys -- if the keymap has no "direct-to-adjust" keycode (such as `MO(_ADJUST)`) then you should prefer to write...
```
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
@@ -90,22 +95,20 @@ https://github.com/qmk/qmk_firmware/pulls?q=is%3Apr+is%3Aclosed+label%3Akeyboard
- submitters can also have a "manufacturer-matching" keymap that mirrors existing functionality of the commercial product, if porting an existing board
Also, specific to ChibiOS:
-- **Strong** preference to using existing ChibiOS board definitions.
- - A lot of the time, an equivalent Nucleo board can be used with a different flash size or slightly different model in the same family
- - Example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk
+- **strong** preference to using existing ChibiOS board definitions.
+ - a lot of the time, an equivalent Nucleo board can be used with a different flash size or slightly different model in the same family
+ - example: For an STM32L082KZ, given the similarity to an STM32L073RZ, you can use `BOARD = ST_NUCLEO64_L073RZ` in rules.mk
- QMK is migrating to not having custom board definitions if at all possible, due to the ongoing maintenance burden when upgrading ChibiOS
-- If a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`:
+- if a board definition is unavoidable, `board.c` must have a standard `__early_init()` (as per normal ChibiOS board defs) and an empty `boardInit()`:
- see Arm/ChibiOS [early initialization](https://docs.qmk.fm/#/platformdev_chibios_earlyinit?id=board-init)
- `__early_init()` should be replaced by either `early_hardware_init_pre()` or `early_hardware_init_post()` as appropriate
- `boardInit()` should be migrated to `board_init()`
-## Keymap PRs
+## Core PRs
-- `#include QMK_KEYBOARD_H` preferred to including specific board files
-- Prefer layer `enum`s to `#define`s
-- Require custom keycode `enum`s to `#define`s, first entry must have ` = SAFE_RANGE`
-- Terminating backslash (`\`) in lines of LAYOUT macro parameters is superfluous
-- Some care with spacing (e.g., alignment on commas or first char of keycodes) makes for a much nicer-looking keymap
+- must now target `develop` branch, which will subsequently be merged back to `master` on the breaking changes timeline
+- other notes TBD
+ - core is a lot more subjective given the breadth of posted changes
---
diff --git a/keyboards/boardsource/4x12/keymaps/via/keymap.c b/keyboards/boardsource/4x12/keymaps/via/keymap.c
new file mode 100644
index 0000000000..d9a0c47a6b
--- /dev/null
+++ b/keyboards/boardsource/4x12/keymaps/via/keymap.c
@@ -0,0 +1,36 @@
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _MAIN,
+ _RAISE,
+ _LOWER,
+};
+
+// Readability keycodes
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_MAIN] = LAYOUT_ortho_4x12(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_PIPE, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ [_RAISE] = LAYOUT_ortho_4x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [_LOWER] = LAYOUT_ortho_4x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ )
+
+};
diff --git a/keyboards/boardsource/4x12/keymaps/via/readme.md b/keyboards/boardsource/4x12/keymaps/via/readme.md
new file mode 100644
index 0000000000..534633d45e
--- /dev/null
+++ b/keyboards/boardsource/4x12/keymaps/via/readme.md
@@ -0,0 +1,5 @@
+# The via keymap for boardsource 4x12 ortholinear keybaoard
+
+This folder contains the [VIA](https://caniusevia.com/) configuration for the boardsource 4x12 ortholinear keybaoard
+
+Maintained by: [gwillad](https://github.com/gwillad)
diff --git a/keyboards/boardsource/4x12/keymaps/via/rules.mk b/keyboards/boardsource/4x12/keymaps/via/rules.mk
new file mode 100644
index 0000000000..036bd6d1c3
--- /dev/null
+++ b/keyboards/boardsource/4x12/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/converter/adb_usb/adb_usb.h b/keyboards/converter/adb_usb/adb_usb.h
index 8691adcc65..3db303b039 100644
--- a/keyboards/converter/adb_usb/adb_usb.h
+++ b/keyboards/converter/adb_usb/adb_usb.h
@@ -56,7 +56,7 @@ Ported to QMK by Peter Roe <pete@13bit.me>
{ K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO, }, \
{ KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \
{ KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO, }, \
- { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \
+ { KC_NO, K51, K52, K53, K54, K55, K56, K57 }, \
{ K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO, }, \
{ K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \
{ KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h b/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
index 6d69b00112..06c50e0a96 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
@@ -18,6 +18,9 @@
#undef MOUSEKEY_WHEEL_INTERVAL
#define MOUSEKEY_WHEEL_INTERVAL 50
+#undef MK_COMBINED
+#define MK_COMBINED
+
// /* Temporarily defining a tapping term that is ridiculous to see if i can tell if lt is working. */
// #undef TAPPING_TERM
// #define TAPPING_TERM 499
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c b/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
index c2960cfa16..e06d0b769f 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
@@ -28,13 +28,17 @@
enum custom_keycodes {
RGB_SLD = EZ_SAFE_RANGE,
+ MS_WH_UP,
+ MS_WH_DOWN,
+ MS_WH_RIGHT,
+ MS_WH_LEFT,
};
// tapdance keycodes
enum td_keycodes {
CTRL_TO12,
SHIFT_TO13,
- ALT_TO11
+ ALT_TO11,
};
// define a type containing as many tapdance states as you need
@@ -59,6 +63,7 @@ void altto11_reset (qk_tap_dance_state_t *state, void *user_data);
void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data);
void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data);
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_ergodox_pretty(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
@@ -162,9 +167,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[10] = LAYOUT_ergodox_pretty(
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
- KC_TRANSPARENT, KC_NO, KC_LGUI, KC_MS_BTN2, KC_NO, KC_NO, KC_TRANSPARENT, MT(MOD_RCTL, KC_A), KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_LGUI, KC_MS_BTN2, KC_ACL2, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_UP, KC_NO, KC_NO, KC_TRANSPARENT,
KC_TRANSPARENT, TD(SHIFT_TO13), TD(CTRL_TO12), TD(ALT_TO11), KC_MS_BTN1, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_NO, KC_TRANSPARENT,
- KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_ACL0, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT,
@@ -182,9 +187,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[12] = LAYOUT_ergodox_pretty(
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
- KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_LGUI, KC_HYPR, KC_ACL2, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT,
KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT, KC_NO, KC_TRANSPARENT,
- KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), MO(14), KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT,
@@ -200,16 +205,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRANSPARENT, KC_TRANSPARENT,
KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, TO(0)
),
+ [14] = LAYOUT_ergodox_pretty(
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, MS_WH_UP, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, MS_WH_LEFT, MS_WH_DOWN, MS_WH_RIGHT, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT
+ ),
};
-
-/* Commenting out for debug purposes */
-// bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-// switch (keycode) {
-// }
-// return true;
-// }
-
uint32_t layer_state_set_user(uint32_t state) {
uint8_t layer = biton32(state);
ergodox_board_led_off();
@@ -252,11 +259,31 @@ uint32_t layer_state_set_user(uint32_t state) {
// determine the tapdance state to return
int cur_dance (qk_tap_dance_state_t *state) {
if (state->count == 1) {
- if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
+ if (state->interrupted && state->pressed && state->interrupting_keycode == KC_MS_BTN1) {return SINGLE_HOLD;}
+ if (state->interrupted && state->pressed && state->interrupting_keycode == 22273) {return SINGLE_HOLD;}
+ if (state->interrupted && state->pressed && state->interrupting_keycode == 22272) {return SINGLE_HOLD;}
+ if (state->interrupted && state->pressed && state->interrupting_keycode == KC_TAB) {return SINGLE_HOLD;}
+ else if (state->interrupted || !state->pressed) {
+ // if (state->interrupted) {
+ // print("interrupted\n");
+ // uprintf("Shift: %u\n", KC_LSHIFT);
+ // uprintf("Control: %u\n", KC_LCTRL);
+ // uprintf("%u\n",state->interrupting_keycode);
+ // }
+ return SINGLE_TAP;
+ }
else { return SINGLE_HOLD; }
}
else { return 2; } // any number higher than the maximum state value you return above
}
+// /* Backup in case previous code is hard to piece together. */
+// int cur_dance (qk_tap_dance_state_t *state) {
+// if (state->count == 1) {
+// if (state->interrupted || !state->pressed) { return SINGLE_TAP; }
+// else { return SINGLE_HOLD; }
+// }
+// else { return 2; } // any number higher than the maximum state value you return above
+// }
void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data) {
td_state = cur_dance(state);
@@ -265,7 +292,14 @@ void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data) {
layer_on(12);
break;
case SINGLE_HOLD:
+ if (state->interrupted && (state->interrupting_keycode == 22273 || state->interrupting_keycode == 43)) {
+ register_mods(MOD_BIT(KC_LCTRL));
+ break;
+ }
register_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
+ if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
+ register_code16(LCTL(KC_MS_BTN1));
+ }
break;
}
}
@@ -275,7 +309,14 @@ void ctrlto12_reset (qk_tap_dance_state_t *state, void *user_data) {
case SINGLE_TAP:
break;
case SINGLE_HOLD:
+ if (state->interrupted && (state->interrupting_keycode == 22273 || state->interrupting_keycode == 43) ) {
+ unregister_mods(MOD_BIT(KC_LCTRL));
+ break;
+ }
unregister_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
+ if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
+ unregister_code16(LCTL(KC_MS_BTN1));
+ }
break;
}
}
@@ -287,7 +328,14 @@ void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data) {
layer_on(13);
break;
case SINGLE_HOLD:
+ if (state->interrupted && (state->interrupting_keycode == 22272 || state->interrupting_keycode == 43) ) {
+ register_mods(MOD_BIT(KC_LSHIFT));
+ break;
+ }
register_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
+ if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
+ register_code16(LSFT(KC_MS_BTN1));
+ }
break;
}
}
@@ -297,7 +345,14 @@ void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data) {
case SINGLE_TAP:
break;
case SINGLE_HOLD:
+ if (state->interrupted && (state->interrupting_keycode == 22272 || state->interrupting_keycode == 43) ) {
+ unregister_mods(MOD_BIT(KC_LSHIFT));
+ break;
+ }
unregister_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
+ if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
+ unregister_code16(LSFT(KC_MS_BTN1));
+ }
break;
}
}
@@ -310,6 +365,9 @@ void altto11_finished (qk_tap_dance_state_t *state, void *user_data) {
break;
case SINGLE_HOLD:
register_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
+ if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
+ register_code16(LALT(KC_MS_BTN1));
+ }
break;
}
}
@@ -320,6 +378,9 @@ void altto11_reset (qk_tap_dance_state_t *state, void *user_data) {
break;
case SINGLE_HOLD:
unregister_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
+ if (state->interrupted && state->interrupting_keycode == KC_MS_BTN1) {
+ unregister_code16(LALT(KC_MS_BTN1));
+ }
break;
}
}
@@ -328,7 +389,7 @@ void altto11_reset (qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_action_t tap_dance_actions[] = {
[CTRL_TO12] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlto12_finished, ctrlto12_reset),
[SHIFT_TO13] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, shiftto13_finished, shiftto13_reset),
- [ALT_TO11] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altto11_finished, altto11_reset)
+ [ALT_TO11] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altto11_finished, altto11_reset),
};
/* Debugging functions */
@@ -342,10 +403,32 @@ void keyboard_post_init_user(void) {
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- // If console is enabled, it will print the matrix position and status of each key pressed
-// #ifdef CONSOLE_ENABLE
-// uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
-// #endif
- return true;
+ // If console is enabled, it will print the matrix position and status of each key pressed
+ // #ifdef CONSOLE_ENABLE
+ // uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+ // #endif
+ switch (keycode) {
+ case MS_WH_DOWN:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_MS_WH_DOWN));
+ }
+ break;
+ case MS_WH_UP:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_MS_WH_UP));
+ }
+ break;
+ case MS_WH_LEFT:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_MS_WH_LEFT));
+ }
+ break;
+ case MS_WH_RIGHT:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_MS_WH_RIGHT));
+ }
+ break;
+ }
+ return true;
}
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md b/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
index 5570d9881c..ff3c8d142c 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
@@ -1,7 +1,6 @@
# The nathanvercaemert ErgoDox EZ configuration
-Centered around the home row and the use of mouse keys, this configuration focuses
-on minimal finger movement. No key is more than one unit away from a finger on the home row.
+Centered around the home row and the use of mouse keys, this configuration focuses on minimal finger movement. No key is more than one unit away from the home row.
## Layers
@@ -20,7 +19,9 @@ on minimal finger movement. No key is more than one unit away from a finger on t
navigation layers.
* Navigation Layers
* From the Mouse Layer, taps to the left home row navigate to scroll keys, arrow keys, and page keys.
+* Notes on Acceleration
+ * Designated as "Slow" and "Fast" on the mouse layers (movement and scroll,) these keys can be held to allow for slow/precise or fast/efficient control.
Here is the image of my keymap:
-![Default](https://i.imgur.com/kXywQIq.png) \ No newline at end of file
+![Imgur Image](https://i.imgur.com/x6VgH9Z.png) \ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk b/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
index 31c3fe3c74..0dadd4371f 100644
--- a/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
@@ -5,6 +5,5 @@ COMMAND_ENABLE = no
RGBLIGHT_ENABLE = no
TAP_DANCE_ENABLE=yes
-
-#Beginning debugging process for LT() and permissive hold
+# Debugging
CONSOLE_ENABLE = yes
diff --git a/keyboards/handwired/swiftrax/pandamic/config.h b/keyboards/handwired/swiftrax/pandamic/config.h
new file mode 100644
index 0000000000..0916bbf1c7
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/config.h
@@ -0,0 +1,52 @@
+/*
+Copyright 2020 Swiftrax <swiftrax@gmail.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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEB0E
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Swiftrax
+#define PRODUCT Pandamic
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 10
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { D1, D2, B5, B7, D3, D5, D6, D4, D7, B4 }
+#define MATRIX_COL_PINS { B6, C6, C7, F7, F6, F5, F4, F1, F0, D0 }
+
+#define ENCODERS_PAD_A { E6 }
+#define ENCODERS_PAD_B { B0 }
+
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/*EEPROM for via*/
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/handwired/swiftrax/pandamic/info.json b/keyboards/handwired/swiftrax/pandamic/info.json
new file mode 100644
index 0000000000..4446a041dd
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Pandamic",
+ "url": "https://github.com/swiftrax",
+ "maintainer": "swiftrax",
+ "width": 20.75,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":7.25, "y":0}, {"x":8.25, "y":0}, {"x":9.25, "y":0}, {"x":10.25, "y":0}, {"x":11.25, "y":0}, {"x":12.25, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":18.25, "y":0}, {"x":19.75, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1, "h":2}, {"x":4.25, "y":1, "w":1.5}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"x":10.75, "y":1}, {"x":11.75, "y":1}, {"x":12.75, "y":1}, {"x":13.75, "y":1}, {"x":14.75, "y":1}, {"x":15.75, "y":1}, {"x":16.75, "y":1}, {"x":17.75, "y":1, "w":1.5}, {"x":19.75, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":4.25, "y":2, "w":1.75}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":15, "y":2}, {"x":16, "y":2}, {"x":17, "y":2, "w":2.25}, {"x":19.75, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3, "h":2}, {"x":4.25, "y":3, "w":1.25}, {"x":5.5, "y":3}, {"x":6.5, "y":3}, {"x":7.5, "y":3}, {"x":8.5, "y":3}, {"x":9.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3}, {"x":16.5, "y":3, "w":1.75}, {"x":18.5, "y":3.25}, {"x":19.75, "y":3}, {"x":0, "y":4, "w":2}, {"x":2, "y":4}, {"x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4, "w":1.25}, {"x":6.75, "y":4, "w":1.25}, {"x":8, "y":4, "w":6.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}, {"x":17.5, "y":4.25}, {"x":18.5, "y":4.25}, {"x":19.5, "y":4.25}]
+ }
+ }
+}
diff --git a/keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c b/keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c
new file mode 100644
index 0000000000..11e770921e
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+/* Copyright 2020 swiftrax
+ *
+ * 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
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum _layer {
+ _MA,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 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_DEL, KC_MUTE,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, 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_P4, KC_P5, KC_P6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
+ KC_P1, KC_P2, KC_P3, KC_PENT, KC_LSFT, MO(_FN), 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_HOME,
+ KC_P0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ),
+[_FN] = LAYOUT(
+ _______, _______, _______, _______, 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_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+} \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c b/keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c
new file mode 100644
index 0000000000..38e455becb
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+/* Copyright 2020 swiftrax
+ *
+ * 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(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, 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_DEL, KC_MUTE,
+ KC_P7, KC_P8, KC_P9, KC_PPLS, 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_P4, KC_P5, KC_P6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
+ KC_P1, KC_P2, KC_P3, KC_PENT, KC_LSFT, MO(1), 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_HOME,
+ KC_P0, KC_PDOT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT ),
+[1] = LAYOUT(
+ _______, _______, _______, _______, 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_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+[2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+} \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk b/keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk
new file mode 100644
index 0000000000..036bd6d1c3
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/pandamic/pandamic.c b/keyboards/handwired/swiftrax/pandamic/pandamic.c
new file mode 100644
index 0000000000..c718a33734
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/pandamic.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 swiftrax
+ *
+ * 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 "pandamic.h"
diff --git a/keyboards/handwired/swiftrax/pandamic/pandamic.h b/keyboards/handwired/swiftrax/pandamic/pandamic.h
new file mode 100644
index 0000000000..9fbb78427e
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/pandamic.h
@@ -0,0 +1,40 @@
+/* Copyright 2020 swiftrax
+ *
+ * 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 "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+#define LAYOUT( \
+ K000, K100, K001, K101, K002, K102, K003, K103, K004, K104, K005, K105, K006, K106, K007, K107, K008, K108, K009, K109,\
+ K200, K300, K201, K301, K202, K302, K203, K303, K204, K304, K205, K305, K206, K306, K207, K307, K208, K308, K309,\
+ K400, K500, K401, K402, K502, K403, K503, K404, K504, K405, K505, K406, K506, K407, K507, K508, K509,\
+ K600, K700, K601, K701, K602, K702, K603, K703, K604, K704, K605, K705, K606, K706, K607, K707, K608, K609, K709,\
+ K800, K801, K802, K902, K803, K805, K807, K907, K808, K908, K809, K909 \
+) { \
+ {K000, K001, K002, K003, K004, K005, K006, K007, K008, K009},\
+ {K100, K101, K102, K103, K104, K105, K106, K107, K108, K109},\
+ {K200, K201, K202, K203, K204, K205, K206, K207, K208, XXX},\
+ {K300, K301, K302, K303, K304, K305, K306, K307, K308, K309},\
+ {K400, K401, K402, K403, K404, K405, K406, K407, XXX, XXX},\
+ {K500, XXX, K502, K503, K504, K505, K506, K507, K508, K509},\
+ {K600, K601, K602, K603, K604, K605, K606, K607, K608, K609},\
+ {K700, K701, K702, K703, K704, K705, K706, K707, XXX, K709},\
+ {K800, K801, K802, K803, XXX, K805, XXX, K807, K808, K809},\
+ { XXX, XXX, K902, XXX, XXX, XXX, XXX, K907, K908, K909} \
+}
diff --git a/keyboards/handwired/swiftrax/pandamic/readme.md b/keyboards/handwired/swiftrax/pandamic/readme.md
new file mode 100644
index 0000000000..227c2ebe11
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/readme.md
@@ -0,0 +1,13 @@
+# Pandamic
+
+A southpaw 65% mechanical keyboard with rotary encoder support
+
+* Keyboard Maintainer: [Swiftrax](https://github.com/swiftrax)
+* Hardware Supported: Pandamic
+* Hardware Availability: [GitHub.com](https://github.com/swiftrax/Pandamic)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/swiftrax/pandamic:default
+
+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).
diff --git a/keyboards/handwired/swiftrax/pandamic/rules.mk b/keyboards/handwired/swiftrax/pandamic/rules.mk
new file mode 100644
index 0000000000..f83e0a1fd1
--- /dev/null
+++ b/keyboards/handwired/swiftrax/pandamic/rules.mk
@@ -0,0 +1,23 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+ENCODER_ENABLE = yes # Rotary Encoder
diff --git a/keyboards/jj40/config.h b/keyboards/jj40/config.h
index 9a1eadb784..0d168f2c01 100644
--- a/keyboards/jj40/config.h
+++ b/keyboards/jj40/config.h
@@ -16,8 +16,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
-#define VENDOR_ID 0x20A0
-#define PRODUCT_ID 0x422D
+#define VENDOR_ID 0x4B50 // "KP"
+#define PRODUCT_ID 0x0040
#define DEVICE_VER 0x0200
#define MANUFACTURER KPrepublic
#define PRODUCT JJ40
diff --git a/keyboards/kbdfans/maja_soldered/config.h b/keyboards/kbdfans/maja_soldered/config.h
new file mode 100755
index 0000000000..bc284893d5
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/config.h
@@ -0,0 +1,44 @@
+/* Copyright 2020 dztech kbdfans
+ *
+ * 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 "config_common.h"
+
+#define VENDOR_ID 0x4B42
+#define PRODUCT_ID 0x6069
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KBDFANS
+#define PRODUCT MAJA_SOLDERED
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+#define MATRIX_ROW_PINS { F0, B6, D6, B4, D7 }
+#define MATRIX_COL_PINS { C6, C7, F7, F6, F5, F4, F1, B0, B1, B2, B3, B7, D2, D3, D5 }
+#define DIODE_DIRECTION COL2ROW
+
+#define DEBOUNCE 3
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B5
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/kbdfans/maja_soldered/info.json b/keyboards/kbdfans/maja_soldered/info.json
new file mode 100644
index 0000000000..b583282a9a
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/info.json
@@ -0,0 +1,81 @@
+{
+ "keyboard_name": "MAJA_SOLDERED",
+ "url": "",
+ "maintainer": "DZTECH",
+ "width": 18.75,
+ "height": 5.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0.75, "y": 0.25},
+ {"x": 1.75, "y": 0.25},
+ {"x": 2.75, "y": 0},
+ {"x": 3.75, "y": 0.25},
+ {"x": 4.75, "y": 0.25},
+ {"x": 5.75, "y": 0.25},
+ {"x": 6.75, "y": 0.25},
+ {"x": 8.75, "y": 0.25},
+ {"x": 9.75, "y": 0.25},
+ {"x": 10.75, "y": 0.25},
+ {"x": 11.75, "y": 0.25},
+ {"x": 12.75, "y": 0},
+ {"x": 13.75, "y": 0.25},
+ {"x": 14.75, "y": 0.25},
+ {"x": 15.75, "y": 0.25},
+ {"x": 17.75, "y": 0.25},
+ {"x": 0.5, "y": 1.25, "w": 1.5},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+ {"x": 4, "y": 1.25},
+ {"x": 5, "y": 1.25},
+ {"x": 6, "y": 1.25},
+ {"x": 8.5, "y": 1.25},
+ {"x": 9.5, "y": 1.25},
+ {"x": 10.5, "y": 1.25},
+ {"x": 11.5, "y": 1.25},
+ {"x": 12.5, "y": 1.25},
+ {"x": 13.5, "y": 1.25},
+ {"x": 14.5, "y": 1.25},
+ {"x": 15.5, "y": 1.25, "w": 1.5},
+ {"x": 17.75, "y": 1.25},
+ {"x": 0.25, "y": 2.25, "w": 1.75},
+ {"x": 2, "y": 2.25},
+ {"x": 3, "y": 2.25},
+ {"x": 4, "y": 2.25},
+ {"x": 5, "y": 2.25},
+ {"x": 6, "y": 2.25},
+ {"x": 9, "y": 2.25},
+ {"x": 10, "y": 2.25},
+ {"x": 11, "y": 2.25},
+ {"x": 12, "y": 2.25},
+ {"x": 13, "y": 2.25},
+ {"x": 14, "y": 2.25},
+ {"x": 15, "y": 2.25, "w": 2.25},
+ {"x": 17.75, "y": 2.25},
+ {"x": 0, "y": 3.25, "w": 2.25},
+ {"x": 2.25, "y": 3.25},
+ {"x": 3.25, "y": 3.25},
+ {"x": 4.25, "y": 3.25},
+ {"x": 5.25, "y": 3.25},
+ {"x": 6.25, "y": 3.25},
+ {"x": 8.25, "y": 3.25},
+ {"x": 9.25, "y": 3.25},
+ {"x": 10.25, "y": 3.25},
+ {"x": 11.25, "y": 3.25},
+ {"x": 12.25, "y": 3.25},
+ {"x": 13.25, "y": 3.25},
+ {"x": 14.25, "y": 3.25, "w": 2.25},
+ {"x": 16.75, "y": 3.5},
+ {"x": 0, "y": 4.25, "w": 1.5},
+ {"x": 3, "y": 4.25, "w": 1.5},
+ {"x": 4.5, "y": 4.25, "w": 2},
+ {"x": 6.5, "y": 4.25, "w": 1.25},
+ {"x": 8.25, "y": 4.25, "w": 2.75},
+ {"x": 11, "y": 4.25, "w": 1.5},
+ {"x": 15.75, "y": 4.5},
+ {"x": 16.75, "y": 4.5},
+ {"x": 17.75, "y": 4.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kbdfans/maja_soldered/keymaps/default/keymap.c b/keyboards/kbdfans/maja_soldered/keymaps/default/keymap.c
new file mode 100755
index 0000000000..a86004ef72
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2020 dztech kbdfans
+ *
+ * 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( /* Base */
+ KC_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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLASH, KC_PGUP,
+ CTL_T(KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1), 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_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT( /* FN */
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET,KC_TRNS,KC_HOME,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP,
+ CTL_T(KC_CAPS),RGB_SPI, RGB_SPD, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_PGDN,
+ 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_VOLU, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
+ [2] = LAYOUT( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [3] = LAYOUT( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ };
diff --git a/keyboards/kbdfans/maja_soldered/keymaps/via/keymap.c b/keyboards/kbdfans/maja_soldered/keymaps/via/keymap.c
new file mode 100755
index 0000000000..cf64bec4c8
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/keymaps/via/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2020 dztech kbdfans
+ *
+ * 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( /* Base */
+ KC_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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLASH, KC_PGUP,
+ CTL_T(KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(1), 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_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT( /* FN */
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET,KC_TRNS,KC_HOME,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI,RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP,
+ CTL_T(KC_CAPS),RGB_SPI, RGB_SPD, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, EEP_RST, KC_PGDN,
+ 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_VOLU, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ };
diff --git a/keyboards/kbdfans/maja_soldered/keymaps/via/rules.mk b/keyboards/kbdfans/maja_soldered/keymaps/via/rules.mk
new file mode 100755
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kbdfans/maja_soldered/maja_soldered.c b/keyboards/kbdfans/maja_soldered/maja_soldered.c
new file mode 100755
index 0000000000..1f0f48c4cd
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/maja_soldered.c
@@ -0,0 +1,29 @@
+/* Copyright 2020 dztech kbdfans
+ *
+ * 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 "maja_soldered.h"
+
+void matrix_init_kb(void) {
+ setPinOutput(D4);
+ matrix_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(D4, !led_state.caps_lock);
+ }
+ return res;
+}
diff --git a/keyboards/kbdfans/maja_soldered/maja_soldered.h b/keyboards/kbdfans/maja_soldered/maja_soldered.h
new file mode 100755
index 0000000000..4834c2b74f
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/maja_soldered.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K3E, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K42, K43, K45, K47, K49, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, XXX, K42, K43, XXX, K45, XXX, K47, XXX, K49, XXX, XXX, K4C, K4D, K4E } \
+}
diff --git a/keyboards/kbdfans/maja_soldered/readme.md b/keyboards/kbdfans/maja_soldered/readme.md
new file mode 100755
index 0000000000..f19c1d7403
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/readme.md
@@ -0,0 +1,14 @@
+# MAJA_SOLDERED
+
+![MAJA_SOLDERED](https://i.ibb.co/4Kq0wfp/20200816100310.png)
+![MAJA_SOLDERED](https://i.ibb.co/3vJM805/20200816100345.png)
+
+* Keyboard Maintainer: [DZTECH](https://github.com/moyi4681)
+* Hardware Supported: MAJA_SOLDERED
+* Hardware Availability: [KBDFans](https://kbdfans.cn/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdfans/maja_soldered:default
+
+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).
diff --git a/keyboards/kbdfans/maja_soldered/rules.mk b/keyboards/kbdfans/maja_soldered/rules.mk
new file mode 100755
index 0000000000..6cd4d92603
--- /dev/null
+++ b/keyboards/kbdfans/maja_soldered/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/lazydesigners/bolt/via/keymap.c b/keyboards/lazydesigners/bolt/via/keymap.c
new file mode 100644
index 0000000000..a977f9c38f
--- /dev/null
+++ b/keyboards/lazydesigners/bolt/via/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2020 LAZYDESIGNERS
+ *
+ * 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(
+ KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_UP, MO(2),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ RESET, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
+ KC_INS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_NO, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ [2] = LAYOUT(
+ RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ [3] = LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+};
diff --git a/keyboards/lazydesigners/bolt/via/rules.mk b/keyboards/lazydesigners/bolt/via/rules.mk
new file mode 100644
index 0000000000..36b7ba9cbc
--- /dev/null
+++ b/keyboards/lazydesigners/bolt/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/maartenwut/solheim68/config.h b/keyboards/maartenwut/solheim68/config.h
new file mode 100644
index 0000000000..cb2070e872
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/config.h
@@ -0,0 +1,143 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4705
+#define PRODUCT_ID 0x7BFF
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Maartenwut
+#define PRODUCT Solheim68
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS {E6,B0,B1,B2,B3}
+#define MATRIX_COL_PINS {F0,F1,F4,F5,F6,F7,C7,C6,B6,B5,B4,D7,D6,D4,D5,D3}
+#define UNUSED_PINS {B7,D0,D1,D2}
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+// #define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/maartenwut/solheim68/info.json b/keyboards/maartenwut/solheim68/info.json
new file mode 100644
index 0000000000..14a4a36f5a
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/info.json
@@ -0,0 +1,397 @@
+{
+ "keyboard_name": "Solheim68",
+ "url": "https://github.com/Maartenwut/solheim68",
+ "maintainer": "maartenwut",
+ "width": 17.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2},
+ {"x":13.75, "y":2, "w":1.25},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15.25, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ },
+ "LAYOUT_68_ansi": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":2.75},
+ {"x":15.25, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ },
+ "LAYOUT_68_iso": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2},
+ {"x":13.75, "y":1, "w":1.25, "h":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":2.75},
+ {"x":15.25, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ },
+ "LAYOUT_68_ansi_split_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15.25, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ },
+ "LAYOUT_68_iso_split_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2},
+ {"x":13.75, "y":1, "w":1.25, "h":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15.25, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/maartenwut/solheim68/keymaps/default/keymap.c b/keyboards/maartenwut/solheim68/keymaps/default/keymap.c
new file mode 100644
index 0000000000..728e8019a2
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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_all(
+ KC_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_BSLS, KC_BSPC, KC_MPLY, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, KC_PSCR, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/maartenwut/solheim68/keymaps/default/readme.md b/keyboards/maartenwut/solheim68/keymaps/default/readme.md
new file mode 100644
index 0000000000..6e9745403b
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/keymaps/default/readme.md
@@ -0,0 +1 @@
+This is the default keymap for the Solheim68. \ No newline at end of file
diff --git a/keyboards/maartenwut/solheim68/readme.md b/keyboards/maartenwut/solheim68/readme.md
new file mode 100644
index 0000000000..1cf0ee9463
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/readme.md
@@ -0,0 +1,17 @@
+# Solheim68
+
+A replacement PCB for the VA68M (v2) with Mini-USB.
+
+* Keyboard Maintainer: [Maartenwut](https://github.com/Maartenwut)
+* Hardware Supported: Solheim68 PCB
+* Hardware Availability: [Open source on GitHub](https://github.com/Maartenwut/solheim68)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make maartenwut/solheim68:default
+
+Flashing example for this keyboard:
+
+ make maartenwut/solheim68: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).
diff --git a/keyboards/maartenwut/solheim68/rules.mk b/keyboards/maartenwut/solheim68/rules.mk
new file mode 100644
index 0000000000..a90eef1fc6
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/maartenwut/solheim68/solheim68.c b/keyboards/maartenwut/solheim68/solheim68.c
new file mode 100644
index 0000000000..27f90f4e87
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/solheim68.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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 "solheim68.h"
diff --git a/keyboards/maartenwut/solheim68/solheim68.h b/keyboards/maartenwut/solheim68/solheim68.h
new file mode 100644
index 0000000000..2f6339bd10
--- /dev/null
+++ b/keyboards/maartenwut/solheim68/solheim68.h
@@ -0,0 +1,102 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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 "quantum.h"
+#define XXX KC_NO
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k2e, k0d, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, XXX }, \
+ { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
+}
+
+#define LAYOUT_68_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
+ k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, XXX, XXX }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX, k3e, XXX }, \
+ { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
+}
+
+#define LAYOUT_68_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, k1f, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, \
+ k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e, k1f }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, XXX, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX, k3e, XXX }, \
+ { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
+}
+
+#define LAYOUT_68_ansi_split_rshift( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, XXX, XXX }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, XXX }, \
+ { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
+}
+
+#define LAYOUT_68_iso_split_rshift( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, k1f, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k46, k4a, k4b, k4c, k4d, k4e, k4f \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e, k1f }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, XXX, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, XXX }, \
+ { k40, k41, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
+}
diff --git a/keyboards/marksard/leftover30/config.h b/keyboards/marksard/leftover30/config.h
new file mode 100644
index 0000000000..42c6c62872
--- /dev/null
+++ b/keyboards/marksard/leftover30/config.h
@@ -0,0 +1,138 @@
+/*
+Copyright 2020 marksard
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xDFA8
+#define DEVICE_VER 0x0001
+#define MANUFACTURER marksard
+#define PRODUCT leftover30
+
+/* Encoder */
+#define ENCODERS_PAD_A { F4 }
+#define ENCODERS_PAD_B { F5 }
+// #define ENCODER_DIRECTION_FLIP
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 5
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { B6, B2, F7, F6, B3, B1, D4, D0 }
+#define MATRIX_COL_PINS { B5, B4, E6, D7, C6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 6
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+ #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+ #define RGBLIGHT_ANIMATIONS
+/*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+/*== customize breathing effect ==*/
+ /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+ #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+ /*==== use exp() and sin() ====*/
+ #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+ #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/marksard/leftover30/info.json b/keyboards/marksard/leftover30/info.json
new file mode 100644
index 0000000000..700d08d9d3
--- /dev/null
+++ b/keyboards/marksard/leftover30/info.json
@@ -0,0 +1,198 @@
+{
+ "keyboard_name": "Leftover30",
+ "url": "https://github.com/marksard/Keyboards",
+ "maintainer": "marksard",
+ "width": 11.5,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {
+ "label": "Q",
+ "x": 0.5,
+ "y": 0
+ },
+ {
+ "label": "W",
+ "x": 1.5,
+ "y": 0
+ },
+ {
+ "label": "E",
+ "x": 2.5,
+ "y": 0
+ },
+ {
+ "label": "R",
+ "x": 3.5,
+ "y": 0
+ },
+ {
+ "label": "T",
+ "x": 4.5,
+ "y": 0
+ },
+ {
+ "label": "Y",
+ "x": 5.5,
+ "y": 0
+ },
+ {
+ "label": "U",
+ "x": 6.5,
+ "y": 0
+ },
+ {
+ "label": "I",
+ "x": 7.5,
+ "y": 0
+ },
+ {
+ "label": "O",
+ "x": 8.5,
+ "y": 0
+ },
+ {
+ "label": "P",
+ "x": 9.5,
+ "y": 0
+ },
+ {
+ "label": "BS",
+ "x": 10.5,
+ "y": 0
+ },
+ {
+ "label": "A",
+ "x": 0.75,
+ "y": 1
+ },
+ {
+ "label": "S",
+ "x": 1.75,
+ "y": 1
+ },
+ {
+ "label": "D",
+ "x": 2.75,
+ "y": 1
+ },
+ {
+ "label": "F",
+ "x": 3.75,
+ "y": 1
+ },
+ {
+ "label": "G",
+ "x": 4.75,
+ "y": 1
+ },
+ {
+ "label": "H",
+ "x": 5.75,
+ "y": 1
+ },
+ {
+ "label": "J",
+ "x": 6.75,
+ "y": 1
+ },
+ {
+ "label": "K",
+ "x": 7.75,
+ "y": 1
+ },
+ {
+ "label": "L",
+ "x": 8.75,
+ "y": 1
+ },
+ {
+ "label": "Enter",
+ "x": 9.75,
+ "y": 1,
+ "w": 1.75
+ },
+ {
+ "label": "Z",
+ "x": 1.25,
+ "y": 2
+ },
+ {
+ "label": "X",
+ "x": 2.25,
+ "y": 2
+ },
+ {
+ "label": "C",
+ "x": 3.25,
+ "y": 2
+ },
+ {
+ "label": "V",
+ "x": 4.25,
+ "y": 2
+ },
+ {
+ "label": "B",
+ "x": 5.25,
+ "y": 2
+ },
+ {
+ "label": "N",
+ "x": 6.25,
+ "y": 2
+ },
+ {
+ "label": "M",
+ "x": 7.25,
+ "y": 2
+ },
+ {
+ "label": "<",
+ "x": 8.25,
+ "y": 2
+ },
+ {
+ "label": ">",
+ "x": 9.25,
+ "y": 2
+ },
+ {
+ "label": "?",
+ "x": 10.25,
+ "y": 2,
+ "w": 1.25
+ },
+ {
+ "label": "",
+ "x": 0,
+ "y": 3
+ },
+ {
+ "label": "Alt",
+ "x": 1.5,
+ "y": 3,
+ "w": 1.25
+ },
+ {
+ "label": "",
+ "x": 2.75,
+ "y": 3,
+ "w": 6.25
+ },
+ {
+ "label": "Fn1",
+ "x": 9,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 10,
+ "y": 3,
+ "w": 1.5
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/marksard/leftover30/keymaps/default/config.h b/keyboards/marksard/leftover30/keymaps/default/config.h
new file mode 100644
index 0000000000..8bffbbb3b5
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2020 marksard
+ *
+ * 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
+
+// place overrides here
+#define TAPPING_TERM 200
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#define TAPPING_LAYER_TERM 150 // Custom LT Tapping term
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/marksard/leftover30/keymaps/default/keymap.c b/keyboards/marksard/leftover30/keymaps/default/keymap.c
new file mode 100644
index 0000000000..60751cd1ca
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/keymap.c
@@ -0,0 +1,162 @@
+/* Copyright 2020 marksard
+ *
+ * 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_number {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ RGBRST = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ KANJI,
+};
+
+// #define KC_ESAD LT(_ADJUST, KC_ESC)
+// #define KC_BSLO LT(_LOWER, KC_BSPC)
+#define KC_LOWR MO(_LOWER)
+#define KC_SPRA LT(_RAISE, KC_SPC)
+#define KC_AJST MO(_ADJUST)
+
+#define KC_Q_AL LALT_T(KC_Q)
+#define KC_A_CT LCTL_T(KC_A)
+#define KC_Z_SF LSFT_T(KC_Z)
+#define KC_X_AL LALT_T(KC_X)
+#define KC_ENSF RSFT_T(KC_ENT)
+#define KC_SLSF RSFT_T(KC_SLSH)
+
+#define KC_F1AL LALT_T(KC_F1)
+#define KC_F6CT LCTL_T(KC_F6)
+#define KC_11SF LSFT_T(KC_F11)
+#define KC_12AL LALT_T(KC_F12)
+#define KC_QUSF RCTL_T(KC_QUOT)
+#define KC_ROSF RSFT_T(KC_RO)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all(
+ //,-----------------------------------------------------------------------------------------------------------.
+ KC_Q_AL, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ KC_A_CT, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENSF,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ KC_Z_SF, KC_X_AL, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSF,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_LGUI, KC_SPRA, KC_LOWR, KC_RCTL
+ //`-----------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_LOWER] = LAYOUT_all(
+ //,-----------------------------------------------------------------------------------------------------------.
+ KC_F1AL, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_EQL, KC_JYEN, KC_LBRC, KC_RBRC, KC_BSLS,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ KC_F6CT, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, KC_QUSF,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ KC_11SF, KC_12AL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_GRV, KC_RO, KC_SLSH, KC_ROSF,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ _______, _______, KC_AJST, _______, _______
+ //`-----------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_RAISE] = LAYOUT_all(
+ //,-----------------------------------------------------------------------------------------------------------.
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ KC_LSFT, XXXXXXX, KC_ESC, KC_TAB, KANJI, KC_DEL, KC_COMM, KC_DOT, KC_BSLS, KC_ROSF,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, KC_AJST, _______
+ //`-----------------------------------------------------------------------------------------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT_all(
+ //,-----------------------------------------------------------------------------------------------------------.
+ RESET, RGBRST, AG_NORM, AG_SWAP, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_INS, KC_PSCR,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NLCK,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, KC_CAPS,
+ //|--------+--------+--------+--------+--------+--------|--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, KC_CAPS
+ //`-----------------------------------------------------------------------------------------------------------'
+ )
+};
+
+uint16_t get_tapping_term(uint16_t keycode) {
+ switch (keycode) {
+ case KC_SPRA:
+ return TAPPING_LAYER_TERM;
+ default:
+ return TAPPING_TERM;
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ case KANJI:
+ if (record->event.pressed) {
+ register_code16(keymap_config.swap_lalt_lgui ? A(KC_GRV) : KC_LANG2);
+ } else {
+ unregister_code16(keymap_config.swap_lalt_lgui ? A(KC_GRV) : KC_LANG2);
+ }
+ break;
+#ifdef RGBLIGHT_ENABLE
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ }
+ break;
+#endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (IS_LAYER_ON(_ADJUST)) {
+ if (clockwise) {
+ rgblight_increase_hue_noeeprom();
+ } else {
+ rgblight_decrease_hue_noeeprom();
+ }
+ } else if (IS_LAYER_ON(_LOWER)) {
+ tap_code16((clockwise == true) ? LCTL(KC_Y) : LCTL(KC_Z));
+ } else if (IS_LAYER_ON(_RAISE)) {
+ tap_code16((clockwise == true) ? S(KC_DOWN) : S(KC_UP));
+ } else {
+ tap_code((clockwise == true) ? KC_WH_D : KC_WH_U);
+ }
+
+ }
+}
+
+// for exsample customize of LED inducator
+// bool led_update_user(led_t led_state) {
+// writePin(D2, IS_LAYER_ON(_LOWER));
+// writePin(D1, IS_LAYER_ON(_RAISE));
+// return false;
+// }
diff --git a/keyboards/marksard/leftover30/keymaps/default/readme.md b/keyboards/marksard/leftover30/keymaps/default/readme.md
new file mode 100644
index 0000000000..05dcdc3d14
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for leftover30
diff --git a/keyboards/marksard/leftover30/keymaps/default/rules.mk b/keyboards/marksard/leftover30/keymaps/default/rules.mk
new file mode 100644
index 0000000000..5af1ba8536
--- /dev/null
+++ b/keyboards/marksard/leftover30/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_ENABLE = yes
diff --git a/keyboards/marksard/leftover30/leftover30.c b/keyboards/marksard/leftover30/leftover30.c
new file mode 100644
index 0000000000..df8152144b
--- /dev/null
+++ b/keyboards/marksard/leftover30/leftover30.c
@@ -0,0 +1,37 @@
+/* Copyright 2020 marksard
+ *
+ * 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 "leftover30.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+void keyboard_pre_init_user(void) {
+ /* Set CAPSLOCK indicator pin as output */
+ setPinOutput(D1);
+ /* Set NUMLOCK indicator pin as output */
+ setPinOutput(D2);
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(D2, led_state.num_lock);
+ writePin(D1, led_state.caps_lock);
+ }
+ return res;
+}
diff --git a/keyboards/marksard/leftover30/leftover30.h b/keyboards/marksard/leftover30/leftover30.h
new file mode 100644
index 0000000000..901b9b570a
--- /dev/null
+++ b/keyboards/marksard/leftover30/leftover30.h
@@ -0,0 +1,45 @@
+/* Copyright 2020 marksard
+ *
+ * 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 "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a,\
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19,\
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29,\
+ k30, k31, k32, k33, k34\
+) \
+{ \
+ { k09, k08, k07, k06, k05 }, \
+ { k19, k18, k17, k16, k15 }, \
+ { k29, k28, k27, k26, k25 }, \
+ { k0a, k34, k33, k32, k31 }, \
+\
+ { k04, k03, k02, k01, k00 }, \
+ { k14, k13, k12, k11, k10 }, \
+ { k24, k23, k22, k21, k20 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, k30 } \
+}
diff --git a/keyboards/marksard/leftover30/readme.md b/keyboards/marksard/leftover30/readme.md
new file mode 100644
index 0000000000..6fefb057f2
--- /dev/null
+++ b/keyboards/marksard/leftover30/readme.md
@@ -0,0 +1,17 @@
+# leftover30
+
+![leftover30](https://raw.githubusercontent.com/marksard/Keyboards/master/_image/_leftover30.jpg)
+
+A 30% mini keyboard.
+
+* Keyboard Maintainer: [marksard](https://github.com/marksard)
+* Hardware Supported: LEFTOVER30 PCB (with Pro Micro)
+* Hardware Availability: [Mark's Garage](https://marksard.booth.pm/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make marksard/leftover30:default
+
+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).
+
+[Build guide](https://github.com/marksard/Keyboards/blob/master/leftover30/documents/leftover30_buildguide.md)
diff --git a/keyboards/marksard/leftover30/rules.mk b/keyboards/marksard/leftover30/rules.mk
new file mode 100644
index 0000000000..dd52fe113e
--- /dev/null
+++ b/keyboards/marksard/leftover30/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/marksard/rhymestone/common/glcdfont.c b/keyboards/marksard/rhymestone/common/glcdfont.c
new file mode 100644
index 0000000000..d9438aa5a7
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/glcdfont.c
@@ -0,0 +1,233 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#include "progmem.h"
+
+// Standard ASCII 5x7 font
+
+static const unsigned char font[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+ 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+ 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+ 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+ 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+ 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+ 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+ 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+ 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+ 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+ 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+ 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+ 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+ 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+ 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+ 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+ 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+ 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+ 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+ 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+ 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+ 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+ 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+ 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+ 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+ 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+ 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+ 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+ 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+ 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+ 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+ 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+ 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+ 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+ 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+ 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+ 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+ 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+ 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+ 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+ 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+ 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
+ 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+ 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+ 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+ 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+ 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+ 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+ 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+ 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+ 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+ 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+ 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+ 0x4C, 0x10, 0x10, 0x10, 0x7C, 0x00,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+ 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+ 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+ 0x00, 0x00, 0xD8, 0xDE, 0xDE, 0xDE,
+ 0x1E, 0x1E, 0x1E, 0x1E, 0xFE, 0xFE,
+ 0xFE, 0xFE, 0x00, 0xF0, 0xFF, 0xFF,
+ 0xFF, 0xE3, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0x00, 0x80, 0xE0, 0xE0,
+ 0xE0, 0x00, 0x00, 0x00, 0x00, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0x00, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0x00, 0xC0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0x00, 0x80, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0xFC,
+ 0xFC, 0xFC, 0xFC, 0xE0, 0xE0, 0x80,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x00,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x80,
+ 0x00, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xFE, 0xFF, 0xFF, 0x7F, 0x0F,
+ 0x0E, 0x0E, 0xCE, 0xFF, 0xFF, 0xFF,
+ 0x7F, 0x80, 0xFE, 0xFF, 0xFF, 0x3F,
+ 0x01, 0x01, 0x01, 0x81, 0xFF, 0xFF,
+ 0xFF, 0x3F, 0xE0, 0xFF, 0xFF, 0xFF,
+ 0x8F, 0x80, 0x80, 0x80, 0xF8, 0xFF,
+ 0xFF, 0x7F, 0xC1, 0xFE, 0xFF, 0xFF,
+ 0x1F, 0x01, 0x01, 0xE1, 0xFF, 0xFF,
+ 0xFF, 0x0F, 0x01, 0x01, 0xF1, 0xFF,
+ 0xFF, 0xFF, 0x07, 0xFC, 0xFF, 0xFF,
+ 0xFF, 0x9D, 0x9D, 0x9D, 0x9D, 0x9F,
+ 0x9F, 0x9F, 0x1F, 0x80, 0x9F, 0x9F,
+ 0x9F, 0x9F, 0x9D, 0x9D, 0xDD, 0xFD,
+ 0xFD, 0xFD, 0x39, 0xC0, 0xFF, 0xFF,
+ 0xFF, 0x9F, 0x81, 0x01, 0xF1, 0xFF,
+ 0xFF, 0xFF, 0x87, 0x81, 0x81, 0x81,
+ 0xF9, 0xFF, 0xFF, 0xFF, 0x03, 0xFC,
+ 0xFF, 0xFF, 0x3F, 0x01, 0x01, 0x01,
+ 0x01, 0xFF, 0xFF, 0xFF, 0x7F, 0xC0,
+ 0xFF, 0xFF, 0xFF, 0x9F, 0x9D, 0x9D,
+ 0x9D, 0x9D, 0x9F, 0x9F, 0x1F, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
+ 0x00, 0x07, 0x07, 0x07, 0x07, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x07, 0x60, 0x73, 0x77, 0x77, 0x77,
+ 0x77, 0x77, 0x77, 0x7F, 0x7F, 0x7F,
+ 0x1F, 0x00, 0x07, 0x07, 0x07, 0x07,
+ 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x03, 0x00, 0x00, 0x00, 0x07, 0x07,
+ 0x07, 0x01, 0x00, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x03, 0x00, 0x03, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x00, 0x03, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x03, 0x00, 0x07, 0x07,
+ 0x07, 0x07, 0x00, 0x00, 0x00, 0x00,
+ 0x07, 0x07, 0x07, 0x07, 0x00, 0x03,
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0x07, 0x07, 0x07, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/marksard/rhymestone/common/oled_helper.c b/keyboards/marksard/rhymestone/common/oled_helper.c
new file mode 100644
index 0000000000..537650025c
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/oled_helper.c
@@ -0,0 +1,87 @@
+#ifdef OLED_DRIVER_ENABLE
+#include QMK_KEYBOARD_H
+#include <stdio.h>
+#include <string.h>
+
+void render_logo(void) {
+
+ static const char PROGMEM logo_buf[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+
+ oled_write_P(logo_buf, false);
+}
+
+void render_lock_status(void) {
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+
+ oled_write_P(PSTR("Lock:"), false);
+ if (led_state.num_lock) {
+ oled_write_P(PSTR("Num "), false);
+ }
+ if (led_state.caps_lock) {
+ oled_write_P(PSTR("Caps "), false);
+ }
+ if (led_state.scroll_lock) {
+ oled_write_P(PSTR("Scrl"), false);
+ }
+
+ oled_write_P(PSTR("\n"), false);
+}
+
+static char keylog_buf[24] = "Key state ready.\n";
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
+ ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
+
+void update_key_status(uint16_t keycode, keyrecord_t *record) {
+
+ if (!record->event.pressed) return;
+
+ char name = (keycode < 60) ? code_to_name[keycode] : ' ';
+ snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c\n",
+ record->event.key.row, record->event.key.col,
+ (uint16_t)keycode, name);
+}
+
+void render_key_status(void) {
+
+ oled_write(keylog_buf, false);
+}
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+static char led_buf[24] = "LED state ready.\n";
+rgblight_config_t rgblight_config_bak;
+void update_led_status(void) {
+
+ if (rgblight_config_bak.enable != rgblight_config.enable ||
+ rgblight_config_bak.mode != rgblight_config.mode ||
+ rgblight_config_bak.hue != rgblight_config.hue ||
+ rgblight_config_bak.sat != rgblight_config.sat ||
+ rgblight_config_bak.val != rgblight_config.val
+ ) {
+ snprintf(led_buf, sizeof(led_buf) - 1, "LED%c:%2d hsv:%2d %2d %2d\n",
+ rgblight_config.enable ? '*' : '.', (uint8_t)rgblight_config.mode,
+ (uint8_t)(rgblight_config.hue / RGBLIGHT_HUE_STEP),
+ (uint8_t)(rgblight_config.sat / RGBLIGHT_SAT_STEP),
+ (uint8_t)(rgblight_config.val / RGBLIGHT_VAL_STEP));
+ rgblight_config_bak = rgblight_config;
+ }
+}
+
+void render_led_status(void) {
+
+ oled_write(led_buf, false);
+}
+#endif
+#endif
diff --git a/keyboards/marksard/rhymestone/common/oled_helper.h b/keyboards/marksard/rhymestone/common/oled_helper.h
new file mode 100644
index 0000000000..02f7b94fa5
--- /dev/null
+++ b/keyboards/marksard/rhymestone/common/oled_helper.h
@@ -0,0 +1,32 @@
+#ifdef OLED_DRIVER_ENABLE
+
+void render_logo(void);
+void render_lock_status(void);
+void update_key_status(uint16_t keycode, keyrecord_t *record);
+void render_key_status(void);
+
+#define RENDER_LOGO() render_logo()
+#define RENDER_LOCK_STATUS() render_lock_status()
+#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
+#define RENDER_KEY_STATUS() render_key_status()
+
+#ifdef RGBLIGHT_ENABLE
+ void update_led_status(void);
+ void render_led_status(void);
+ #define UPDATE_LED_STATUS() update_led_status()
+ #define RENDER_LED_STATUS() render_led_status()
+#else
+ #define UPDATE_LED_STATUS()
+ #define RENDER_LED_STATUS()
+#endif
+
+#else
+
+#define RENDER_LOGO()
+#define RENDER_LOCK_STATUS()
+#define UPDATE_KEY_STATUS(a, b)
+#define RENDER_KEY_STATUS()
+#define UPDATE_LED_STATUS()
+#define RENDER_LED_STATUS()
+
+#endif
diff --git a/keyboards/marksard/rhymestone/info.json b/keyboards/marksard/rhymestone/info.json
new file mode 100644
index 0000000000..2c1ba9b37c
--- /dev/null
+++ b/keyboards/marksard/rhymestone/info.json
@@ -0,0 +1,213 @@
+{
+ "keyboard_name": "Rhymestone",
+ "url": "https://github.com/marksard/Keyboards",
+ "maintainer": "marksard",
+ "width": 11,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x10": {
+ "layout": [
+ {
+ "label": "Q",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "W",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "E",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "R",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "T",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "Y",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "U",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "I",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "O",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": "P",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "A",
+ "x": 0,
+ "y": 1
+ },
+ {
+ "label": "S",
+ "x": 1,
+ "y": 1
+ },
+ {
+ "label": "D",
+ "x": 2,
+ "y": 1
+ },
+ {
+ "label": "F",
+ "x": 3,
+ "y": 1
+ },
+ {
+ "label": "G",
+ "x": 4,
+ "y": 1
+ },
+ {
+ "label": "H",
+ "x": 6,
+ "y": 1
+ },
+ {
+ "label": "J",
+ "x": 7,
+ "y": 1
+ },
+ {
+ "label": "K",
+ "x": 8,
+ "y": 1
+ },
+ {
+ "label": "L",
+ "x": 9,
+ "y": 1
+ },
+ {
+ "label": "Enter",
+ "x": 10,
+ "y": 1
+ },
+ {
+ "label": "Z",
+ "x": 0,
+ "y": 2
+ },
+ {
+ "label": "X",
+ "x": 1,
+ "y": 2
+ },
+ {
+ "label": "C",
+ "x": 2,
+ "y": 2
+ },
+ {
+ "label": "V",
+ "x": 3,
+ "y": 2
+ },
+ {
+ "label": "B",
+ "x": 4,
+ "y": 2
+ },
+ {
+ "label": "N",
+ "x": 6,
+ "y": 2
+ },
+ {
+ "label": "M",
+ "x": 7,
+ "y": 2
+ },
+ {
+ "label": ",",
+ "x": 8,
+ "y": 2
+ },
+ {
+ "label": ".",
+ "x": 9,
+ "y": 2
+ },
+ {
+ "label": "/",
+ "x": 10,
+ "y": 2
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 3
+ },
+ {
+ "label": "Win",
+ "x": 1,
+ "y": 3
+ },
+ {
+ "label": "Alt",
+ "x": 2,
+ "y": 3
+ },
+ {
+ "label": "Lower",
+ "x": 3,
+ "y": 3
+ },
+ {
+ "label": "backspace",
+ "x": 4,
+ "y": 3
+ },
+ {
+ "label": "space",
+ "x": 6,
+ "y": 3
+ },
+ {
+ "label": "Upper",
+ "x": 7,
+ "y": 3
+ },
+ {
+ "label": "Alt",
+ "x": 8,
+ "y": 3
+ },
+ {
+ "label": "App",
+ "x": 9,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 10,
+ "y": 3
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/marksard/rhymestone/keymaps/default/config.h b/keyboards/marksard/rhymestone/keymaps/default/config.h
new file mode 100644
index 0000000000..95f2d039b2
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/config.h
@@ -0,0 +1,27 @@
+/* Copyright 2020 marksard
+ *
+ * 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
+
+// place overrides here
+
+// If you use the HashTwenty(alpha), please enable USE_HASHTWENTY
+// #define USE_HASHTWENTY
+
+// If you plug in the USB on the right side, please enable MASTER_RIGHT
+// #define MASTER_RIGHT
+
+#define OLED_FONT_H "keyboards/rhymestone/common/glcdfont.c"
diff --git a/keyboards/marksard/rhymestone/keymaps/default/keymap.c b/keyboards/marksard/rhymestone/keymaps/default/keymap.c
new file mode 100644
index 0000000000..2d695f76b1
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/keymap.c
@@ -0,0 +1,226 @@
+/* Copyright 2020 marksard
+ *
+ * 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
+#include "./common/oled_helper.h"
+
+enum layer_number {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ KANJI,
+ RGBRST
+};
+
+// Base layer mod tap
+#define KC_Z_SF LSFT_T(KC_Z)
+#define KC_SLSF RSFT_T(KC_SLSH)
+
+// Lower layer mod tap
+#define KC_11SF LSFT_T(KC_F11)
+#define KC_GRSF RSFT_T(KC_GRV)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_Z_SF, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSF,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_RGUI, KC_APP, KC_RCTL
+ //,---------------------------------------------------------------------------------------------------.
+ ),
+
+ [_LOWER] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, KC_SCLN, KC_QUOT,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_11SF, KC_F12, KC_ESC, KC_TAB, KANJI, KC_DEL, XXXXXXX, XXXXXXX, KC_RO, KC_GRSF,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______
+ //,---------------------------------------------------------------------------------------------------.
+ ),
+
+ [_RAISE] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RSFT,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_RO, KC_COMM, KC_DOT, KC_SLSF,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //,---------------------------------------------------------------------------------------------------.
+ ),
+
+ [_ADJUST] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ RESET, RGBRST, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_PSCR,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NLCK,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //,---------------------------------------------------------------------------------------------------.
+ )
+};
+
+#define L_BASE _BASE
+#define L_LOWER (1<<_LOWER)
+#define L_RAISE (1<<_RAISE)
+#define L_ADJUST (1<<_ADJUST)
+#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
+
+#ifdef OLED_DRIVER_ENABLE
+#include <stdio.h>
+#include <string.h>
+
+typedef struct {
+ uint8_t state;
+ char name[8];
+}LAYER_DISPLAY_NAME;
+
+#define LAYER_DISPLAY_MAX 5
+const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
+ {L_BASE, "Base"},
+ {L_BASE + 1, "Base"},
+ {L_LOWER, "Lower"},
+ {L_RAISE, "Raise"},
+ {L_ADJUST_TRI, "Adjust"}
+};
+
+static inline const char* get_leyer_status(void) {
+
+ for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
+ if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
+
+ return layer_display_name[i].name;
+ } else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
+
+ return layer_display_name[i].name;
+ }
+ }
+
+ return "?";
+}
+
+static char layer_status_buf[24] = "Layer state ready.\n";
+static inline void update_keymap_status(void) {
+
+ snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
+ keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
+}
+
+static inline void render_keymap_status(void) {
+
+ oled_write(layer_status_buf, false);
+}
+
+#define UPDATE_KEYMAP_STATUS() update_keymap_status()
+
+static inline void render_status(void) {
+
+ UPDATE_LED_STATUS();
+ RENDER_LED_STATUS();
+ render_keymap_status();
+ RENDER_LOCK_STATUS();
+ RENDER_KEY_STATUS();
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+
+ if (is_keyboard_master())
+ return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+ return rotation;
+}
+
+void oled_task_user(void) {
+
+ if (is_keyboard_master()) {
+ render_status();
+ } else {
+ render_logo();
+ }
+}
+
+#else
+
+#define UPDATE_KEYMAP_STATUS()
+
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ UPDATE_KEY_STATUS(keycode, record);
+
+ bool result = false;
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ break;
+ case KANJI:
+ if (record->event.pressed) {
+ if (keymap_config.swap_lalt_lgui == false) {
+ register_code(KC_LANG2);
+ } else {
+ register_code16(A(KC_GRV));
+ }
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ break;
+ #ifdef RGBLIGHT_ENABLE
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ UPDATE_KEYMAP_STATUS();
+ return result;
+}
diff --git a/keyboards/marksard/rhymestone/keymaps/default/rules.mk b/keyboards/marksard/rhymestone/keymaps/default/rules.mk
new file mode 100644
index 0000000000..c86cab8cce
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/default/rules.mk
@@ -0,0 +1,9 @@
+MOUSEKEY_ENABLE = yes # Mouse keys
+TAP_DANCE_ENABLE = no
+
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+OLED_DRIVER_ENABLE = no
+LTO_ENABLE = yes
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./common/oled_helper.c \
diff --git a/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c b/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c
new file mode 100644
index 0000000000..1d4e78af80
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/switch_tester/keymap.c
@@ -0,0 +1,76 @@
+/* Copyright 2020 marksard
+ *
+ * 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_number {
+ _BASE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ ADJUST,
+ RGBRST
+};
+
+// Layer Mode aliases
+#define KC_LTAD LT(_ADJUST, KC_NO)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ KC_LTAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ //,---------------------------------------------------------------------------------------------------.
+ ),
+
+ [_ADJUST] = LAYOUT_ortho_4x10(
+ //,---------------------------------------------------------------------------------------------------.
+ RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //`---------+---------+---------+---------+---------+---------+---------+---------+---------+---------'
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ //,---------------------------------------------------------------------------------------------------.
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ bool result = false;
+ switch (keycode) {
+ #ifdef RGBLIGHT_ENABLE
+ case RGBRST:
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ }
+ break;
+ #endif
+ default:
+ result = true;
+ break;
+ }
+
+ return result;
+}
diff --git a/keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md b/keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md
new file mode 100644
index 0000000000..f85906a83b
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/switch_tester/readme.md
@@ -0,0 +1,3 @@
+# The switch tester keymap for Rhymestone
+
+This keymap is Switch Tester and RGB_MATRIX Light demo.
diff --git a/keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk b/keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk
new file mode 100644
index 0000000000..78824da304
--- /dev/null
+++ b/keyboards/marksard/rhymestone/keymaps/switch_tester/rules.mk
@@ -0,0 +1,7 @@
+MOUSEKEY_ENABLE = no # Mouse keys
+TAP_DANCE_ENABLE = no
+
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+OLED_DRIVER_ENABLE = no
+LTO_ENABLE = yes
+RGB_MATRIX_ENABLE = WS2812
diff --git a/keyboards/marksard/rhymestone/readme.md b/keyboards/marksard/rhymestone/readme.md
new file mode 100644
index 0000000000..721e8beb35
--- /dev/null
+++ b/keyboards/marksard/rhymestone/readme.md
@@ -0,0 +1,18 @@
+# Rhymestone
+
+![Rhymestone](https://github.com/marksard/Keyboards/blob/7950099e0679a6626dc9f77a70b8c6616d7030cf/_image/_rhymestone.jpg)
+
+This is 40 keys split Ortholinear keyboard.
+
+* Keyboard Maintainer: [marksard](https://github.com/marksard)
+* Hardware Supported: Rhymestone PCB (with Pro Micro)
+* Hardware Availability: [marksard keyboards](https://github.com/marksard/Keyboards/blob/master/rhymestone/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make marksard/rhymestone:default
+
+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).
+
+[Build guide](https://github.com/marksard/Keyboards/blob/master/rhymestone/documents/rhymestone_buildguide.md)
+[Firmware](https://github.com/marksard/qmk_firmware/tree/my_customize/keyboards/rhymestone)
diff --git a/keyboards/marksard/rhymestone/rev1/config.h b/keyboards/marksard/rhymestone/rev1/config.h
new file mode 100644
index 0000000000..9a1bf0a1d8
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/config.h
@@ -0,0 +1,152 @@
+/*
+Copyright 2020 marksard
+
+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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xDFA1
+#define DEVICE_VER 0x0020
+#define MANUFACTURER marksard
+#define PRODUCT Rhymestone
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 5
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D2 // or D1, D2, D3, E6
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN D3
+
+#ifdef RGBLIGHT_ENABLE
+// #ifdef RGB_DI_PIN
+ #define RGBLED_NUM 40
+ #define RGBLED_SPLIT {20, 20}
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 150 /* The maximum brightness level */
+ #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+// #define RGBLIGHT_ANIMATIONS
+/*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+ #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+ #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+ #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+/*== customize breathing effect ==*/
+ /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+ #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+ /*==== use exp() and sin() ====*/
+ #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+ #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+ #define RGBLED_NUM 40 // Number of LEDs
+ #define DRIVER_LED_TOTAL RGBLED_NUM
+ #define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+ // #define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
+ // #define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+ #define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+ // #define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
+ // #define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
+ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 200 out of 255. If not defined maximum brightness is set to 255
+ #define RGB_MATRIX_HUE_STEP 8
+ #define RGB_MATRIX_SAT_STEP 8
+ #define RGB_MATRIX_VAL_STEP 8
+ #define RGB_MATRIX_SPD_STEP 10
+
+// #define DISABLE_RGB_MATRIX_ALPHAS_MODS
+// #define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define DISABLE_RGB_MATRIX_BREATHING
+// #define DISABLE_RGB_MATRIX_BAND_SAT
+// #define DISABLE_RGB_MATRIX_BAND_VAL
+// #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// #define DISABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// #define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+// #define DISABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+// #define DISABLE_RGB_MATRIX_CYCLE_ALL
+// #define DISABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+// #define DISABLE_RGB_MATRIX_CYCLE_UP_DOWN
+// #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN
+// #define DISABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+// #define DISABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+// #define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
+// #define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
+// #define DISABLE_RGB_MATRIX_DUAL_BEACON
+// #define DISABLE_RGB_MATRIX_RAINBOW_BEACON
+// #define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define DISABLE_RGB_MATRIX_RAINDROPS
+// #define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+
+ #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// #define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+// #define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+
+// #define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+// #define DISABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+
+// #define DISABLE_RGB_MATRIX_SPLASH
+// #define DISABLE_RGB_MATRIX_MULTISPLASH
+// #define DISABLE_RGB_MATRIX_SOLID_SPLASH
+// #define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+ #define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_TYPING_HEATMAP
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
diff --git a/keyboards/marksard/rhymestone/rev1/rev1.c b/keyboards/marksard/rhymestone/rev1/rev1.c
new file mode 100644
index 0000000000..a4dadd55cb
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/rev1.c
@@ -0,0 +1,108 @@
+/* Copyright 2020 marksard
+ *
+ * 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 "rev1.h"
+
+// Optional override functions below.
+// You can leave any or all of these undefined.
+// These are only required if you want to perform custom actions.
+
+#ifdef RGB_MATRIX_ENABLE
+led_config_t g_led_config = { {
+ { 10, 11, 12, 13, 0 },
+ { 9, 18, 19, 14, 1 },
+ { 8, 17, 16, 15, 2 },
+ { 7, 6, 5, 4, 3 },
+ { 30, 31, 32, 33, 20 },
+ { 29, 38, 39, 34, 21 },
+ { 28, 37, 36, 35, 22 },
+ { 27, 26, 25, 24, 23 }
+}, {
+ { 100, 0 }, { 100, 21 }, { 100, 43 }, { 100, 64 },
+ { 75, 64 }, { 50, 64 }, { 25, 64 }, { 0, 64 },
+ { 0, 43 }, { 0, 21 }, { 0, 0 },
+ { 25, 0 }, { 50, 0 }, { 75, 0 },
+ { 75, 21 }, { 75, 43 },
+ { 50, 43 }, { 25, 43 },
+ { 25, 21 }, { 50, 21 },
+ { 125, 0 }, { 125, 21 }, { 125, 43 }, { 125, 64 },
+ { 150, 64 }, { 175, 64 }, { 200, 64 }, { 225, 64 },
+ { 225, 43 }, { 225, 21 }, { 225, 0 },
+ { 200, 0 }, { 175, 0 }, { 150, 0 },
+ { 150, 21 }, { 150, 43 },
+ { 175, 43 }, { 200, 43 },
+ { 200, 21 }, { 150, 21 }
+}, {
+ 4, 4, 4, 1,
+ 1, 1, 1, 1,
+ 4, 4, 4, 4,
+ 4, 4, 4, 4,
+ 4, 4, 4, 4,
+ 4, 4, 4, 1,
+ 1, 1, 1, 1,
+ 4, 4, 4, 4,
+ 4, 4, 4, 4,
+ 4, 4, 4, 4
+} };
+#endif
+
+__attribute__((weak))
+void matrix_init_user(void) {}
+
+void matrix_init_kb(void) {
+
+#ifdef RGB_MATRIX_ENABLE
+ // if (!is_keyboard_master()) {
+ // g_led_config = (led_config_t){ {
+ // { 30, 31, 32, 33, 20 },
+ // { 29, 38, 39, 34, 21 },
+ // { 28, 37, 36, 35, 22 },
+ // { 27, 26, 25, 24, 23 },
+ // { 10, 11, 12, 13, 0 },
+ // { 9, 18, 19, 14, 1 },
+ // { 8, 17, 16, 15, 2 },
+ // { 7, 6, 5, 4, 3 }
+ // }, {
+ // { 125, 0 }, { 125, 21 }, { 125, 43 }, { 125, 64 },
+ // { 150, 64 }, { 175, 64 }, { 200, 64 }, { 225, 64 },
+ // { 225, 43 }, { 225, 21 }, { 225, 0 },
+ // { 200, 0 }, { 175, 0 }, { 150, 0 },
+ // { 150, 21 }, { 150, 43 },
+ // { 175, 43 }, { 200, 43 },
+ // { 200, 21 }, { 150, 21 },
+ // { 100, 0 }, { 100, 21 }, { 100, 43 }, { 100, 64 },
+ // { 75, 64 }, { 50, 64 }, { 25, 64 }, { 0, 64 },
+ // { 0, 43 }, { 0, 21 }, { 0, 0 },
+ // { 25, 0 }, { 50, 0 }, { 75, 0 },
+ // { 75, 21 }, { 75, 43 },
+ // { 50, 43 }, { 25, 43 },
+ // { 25, 21 }, { 50, 21 }
+ // }, {
+ // 4, 4, 4, 1,
+ // 1, 1, 1, 1,
+ // 4, 4, 4, 4,
+ // 4, 4, 4, 4,
+ // 4, 4, 4, 4,
+ // 4, 4, 4, 1,
+ // 1, 1, 1, 1,
+ // 4, 4, 4, 4,
+ // 4, 4, 4, 4,
+ // 4, 4, 4, 4
+ // } };
+ // }
+#endif
+ matrix_init_user();
+}
diff --git a/keyboards/marksard/rhymestone/rev1/rev1.h b/keyboards/marksard/rhymestone/rev1/rev1.h
new file mode 100644
index 0000000000..855e288df3
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/rev1.h
@@ -0,0 +1,89 @@
+/* Copyright 2020 marksard
+ *
+ * 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 "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#ifndef FLIP_HALF
+// Standard Keymap
+// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
+#define LAYOUT_ortho_4x10( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
+ L30, L31, L32, L33, L34, R30, R31, R32, R33, R34 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { L30, L31, L32, L33, L34 }, \
+ { R04, R03, R02, R01, R00 }, \
+ { R14, R13, R12, R11, R10 }, \
+ { R24, R23, R22, R21, R20 }, \
+ { R34, R33, R32, R31, R30 }, \
+ }
+#else
+// Keymap with right side flipped
+// (TRRS jack on both halves are to the right)
+#define LAYOUT_ortho_4x10( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
+ L30, L31, L32, L33, L34, R30, R31, R32, R33, R34 \
+ ) \
+ { \
+ { L04, L03, L02, L01, L00 }, \
+ { L14, L13, L12, L11, L10 }, \
+ { L24, L23, L22, L21, L20 }, \
+ { L34, L33, L32, L31, L30 }, \
+ { R04, R03, R02, R01, R00 }, \
+ { R14, R13, R12, R11, R10 }, \
+ { R24, R23, R22, R21, R20 }, \
+ { R34, R33, R32, R31, R30 }, \
+ }
+#endif
+
+#ifdef USE_HASHTWENTY // The HashTwenty is Alpha version of The Rhymestone
+#undef LAYOUT_ortho_4x10
+// HashTwenty layout
+#define LAYOUT_ortho_4x10( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
+ L30, L31, L32, L33, L34, R30, R31, R32, R33, R34 \
+ ) \
+ { \
+ { L04, L03, L02, L01, L00 }, \
+ { L14, L13, L12, L11, L10 }, \
+ { L24, L23, L22, L21, L20 }, \
+ { L34, L33, L32, L31, L30 }, \
+ { R00, R01, R02, R03, R04 }, \
+ { R10, R11, R12, R13, R14 }, \
+ { R20, R21, R22, R23, R24 }, \
+ { R30, R31, R32, R33, R34 }, \
+ }
+#endif
diff --git a/keyboards/marksard/rhymestone/rev1/rules.mk b/keyboards/marksard/rhymestone/rev1/rules.mk
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rev1/rules.mk
diff --git a/keyboards/marksard/rhymestone/rules.mk b/keyboards/marksard/rhymestone/rules.mk
new file mode 100644
index 0000000000..1f58665efc
--- /dev/null
+++ b/keyboards/marksard/rhymestone/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = marksard/rhymestone/rev1
+
+LAYOUTS = ortho_4x10
diff --git a/keyboards/planck/keymaps/gitdrik/config.h b/keyboards/planck/keymaps/gitdrik/config.h
new file mode 100644
index 0000000000..0acf06dc54
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/config.h
@@ -0,0 +1,56 @@
+/* Original code probably copyright 2015-2017 Jack Humbert
+ *
+ * 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/>.
+ */
+
+/* Passed along from planck default to Finnish SFS 5966 by gitdrik, 2020. */
+
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/keymaps/gitdrik/keymap.c b/keyboards/planck/keymaps/gitdrik/keymap.c
new file mode 100644
index 0000000000..bdaef20763
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/keymap.c
@@ -0,0 +1,231 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * 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/>.
+ */
+
+/* Modified from planck default to Finnish SFS 5966 by gitdrik, 2020. */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+enum planck_layers {
+ _BASE,
+ _LEFT,
+ _RIGHT,
+ _LEFTER,
+ _RIGHTER
+};
+
+#define LEFT TT(_LEFT)
+#define RIGHT MO(_RIGHT)
+#define LEFTER MO(_LEFTER)
+#define RIGHTER MO(_RIGHTER)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | ร… |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ร– | ร„ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Shift| X | C | V | B | N | M | , | . | Shift| Enter|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Z | GUI | Alt |Left2 | Left |BkSpc | Spc |Right |Rghter| < | - | / |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_BASE] = LAYOUT_planck_grid(
+ 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_ESC, 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_LSFT, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_ENT ,
+ KC_Z, KC_LGUI, KC_LALT, LEFTER, LEFT, KC_BSPC, KC_SPC, RIGHT, RIGHTER, KC_NUBS, KC_SLSH, LSFT(KC_7)
+),
+
+/* Left
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | F10 | F9 | F8 | F7 | { | } | 7 | 8 | 9 | ^ | = |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | F11 | F6 | F5 | F4 | ( | ) | 4 | 5 | 6 | + | * |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RCtrl| Shift| F3 | F2 | F1 | [ | ] | 1 | 2 | 3 | Shift| Enter|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | F12 | GUI | Alt |Lefter| Left |BkSpc | Spc |Right | 0 | , | - | / |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LEFT] = LAYOUT_planck_grid(
+ KC_TRNS, KC_F10, KC_F9, KC_F8, KC_F7, RALT(KC_7), RALT(KC_0), KC_7, KC_8, KC_9, LSFT(KC_RBRC), LSFT(KC_0),
+ KC_TRNS, KC_F11, KC_F6, KC_F5, KC_F4, LSFT(KC_8), LSFT(KC_9), KC_4, KC_5, KC_6, KC_PPLS, KC_PAST,
+ KC_RCTL, KC_TRNS, KC_F3, KC_F2, KC_F1, RALT(KC_8), RALT(KC_9), KC_1, KC_2, KC_3, KC_TRNS, KC_TRNS,
+ KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_COMM, KC_PMNS, KC_PSLS
+),
+
+/* Right
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | โ—Œฬ„ | โ—Œฬˆ | โ—Œฬ | โ—Œฬ€ | โ—Œฬƒ | โ—Œฬ† | Home | Up | End | Ins | PgUp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | @ | $ | ยฐ | & | # | % | Left | Down | Right| Del | PgDn |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RCtrl| Shift| โ€ | ยซ | ยป | โ€š โ€ž | โ€ฐ |PlayPs| << | >> | Shift| Enter|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | โ€œ | GUI | Alt |Lefter| |BkSpc | Spc |Right |Rghter| Vol- | Vol+ | Mute |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_RIGHT] = LAYOUT_planck_grid(
+ KC_TRNS, RALT(LSFT(KC_RBRC)), KC_RBRC, KC_EQL , LSFT(KC_EQL), RALT(KC_RBRC), RALT(KC_NUHS), KC_HOME, KC_UP, KC_END , KC_INS , KC_PGUP,
+ KC_TRNS, RALT(KC_2), RALT(KC_4), RALT(LSFT(KC_0)), LSFT(KC_6), LSFT(KC_3), LSFT(KC_5), KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_PGDN,
+ KC_RCTRL, KC_TRNS, RALT(LSFT(KC_2)), RALT(LSFT(KC_4)), RALT(LSFT(KC_3)), RALT(KC_6), RALT(KC_5), KC_MPLY, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ RALT(LSFT(KC_5)), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE
+),
+
+/* Lefter
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | ยง ยฝ | " | โ‚ฌ | | รพ รž | ยก | ! | ฤฑ | ล“ ล’ | โ—Œฬ› โ—Œฬ‰ | โ—Œฬ‹ โ—ŒฬŠ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | ษ™ ฦ | รŸ แบž | รฐ ร | ' | | | | ฤธ | โ—Œฬต | รธ ร˜ | รฆ ร† |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Shift| ร— ยท | โ—Œฬง โ—Œฬจ | | \ | ล‹ ลŠ | ยต โ€” | โ€™ โ€˜ | โ—Œฬฃ โ—Œฬ‡ | Shift| Enter|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ส’ ฦท | GUI | Alt |Lefter| | BkSpc| NbSp | |Rghter| | | โ€“ โ—Œฬฆ | ? |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_LEFTER] = LAYOUT_planck_grid(
+ KC_TRNS, KC_GRV, LSFT(KC_2), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(LSFT(KC_1)), LSFT(KC_1), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC),
+ KC_TRNS, RALT(KC_A),RALT(KC_S), RALT(KC_D), KC_NUHS, RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), RALT(KC_L), RALT(KC_SCLN), RALT(KC_QUOT),
+ KC_TRNS, KC_TRNS, RALT(KC_X), RALT(KC_EQL), RALT(KC_V), RALT(KC_MINS), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), KC_TRNS, KC_TRNS,
+ RALT(KC_Z),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RALT(KC_BSPC), RALT(KC_SPC), KC_TRNS, KC_TRNS, RALT(KC_NUBS), RALT(KC_SLSH), LSFT(KC_MINS)
+),
+
+/* Righter
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| Debug| | | | |WheLft| MUp |WheRgt| MBt2 | WheUp|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | MBt4 | MBt3 | MBt2 | MBt1 | | | MLeft| MDown|MRight| MBt1 | WheDn|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | |MUSmod|Mus on|Musoff| | | MBt1 | MBt2 | MBt3 | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | |Rghter|Light-|Light+| |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_RIGHTER] = LAYOUT_planck_grid(
+ KC_TRNS, RESET, DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, KC_WH_U,
+ KC_TRNS, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, KC_WH_D,
+ KC_TRNS, KC_TRNS, MU_MOD, MU_ON, MU_OFF, KC_NO, KC_NO, KC_BTN1, KC_BTN2, KC_BTN3, KC_TRNS, KC_TRNS,
+ KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_BRID, KC_BRIU, KC_NO
+),
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RIGHT)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_DOWN);
+ #else
+ tap_code(KC_PGDN);
+ #endif
+ } else {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_UP);
+ #else
+ tap_code(KC_PGUP);
+ #endif
+ }
+ }
+}
+
+void dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0: {
+#ifdef AUDIO_ENABLE
+ static bool play_sound = false;
+#endif
+ if (active) {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_song); }
+#endif
+ layer_on(_LEFTER);
+ } else {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_gb_song); }
+#endif
+ layer_off(_LEFTER);
+ }
+#ifdef AUDIO_ENABLE
+ play_sound = true;
+#endif
+ break;
+ }
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+#ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ } else {
+ if (muse_counter) {
+ stop_all_notes();
+ muse_counter = 0;
+ }
+ }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case _LEFTER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/gitdrik/readme.md b/keyboards/planck/keymaps/gitdrik/readme.md
new file mode 100644
index 0000000000..f064565182
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/readme.md
@@ -0,0 +1 @@
+# Finnish SFS 5966 layout by gitdrik 2020.
diff --git a/keyboards/planck/keymaps/gitdrik/rules.mk b/keyboards/planck/keymaps/gitdrik/rules.mk
new file mode 100644
index 0000000000..67528de9c8
--- /dev/null
+++ b/keyboards/planck/keymaps/gitdrik/rules.mk
@@ -0,0 +1,3 @@
+SRC += muse.c
+MOUSEKEY_ENABLE = yes
+AUDIO_ENABLE = yes
diff --git a/keyboards/plume/plume65/config.h b/keyboards/plume/plume65/config.h
new file mode 100644
index 0000000000..2cd05e180a
--- /dev/null
+++ b/keyboards/plume/plume65/config.h
@@ -0,0 +1,137 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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 "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5D66
+#define PRODUCT_ID 0x22CF
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Plume Keyboards LLC
+#define PRODUCT Plume65
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D2, D5, E6, D0, D1 }
+#define MATRIX_COL_PINS { B7, F7, C7, C6, B6, F0, B5, F1, B4, F4, D7, F5, D6, F6, D4 }
+#define UNUSED_PINS { }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+ #define RGB_DI_PIN B0
+// #ifdef RGB_DI_PIN
+ #define RGBLED_NUM 10
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
+// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+// /*== all animations enable ==*/
+ #define RGBLIGHT_ANIMATIONS
+// /*== or choose animations ==*/
+// #define RGBLIGHT_EFFECT_BREATHING
+// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+// #define RGBLIGHT_EFFECT_SNAKE
+// #define RGBLIGHT_EFFECT_KNIGHT
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+// /*== customize breathing effect ==*/
+// /*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
+// #define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
+// /*==== use exp() and sin() ====*/
+// #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
+// #define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
+
+#define QMK_ESC_OUTPUT B7 // usually COL
+#define QMK_ESC_INPUT D2 // usually ROW
diff --git a/keyboards/plume/plume65/info.json b/keyboards/plume/plume65/info.json
new file mode 100644
index 0000000000..941d911f39
--- /dev/null
+++ b/keyboards/plume/plume65/info.json
@@ -0,0 +1,376 @@
+{
+ "keyboard_name": "Plume65",
+ "url": "",
+ "maintainer": "maartenwut",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_iso": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2},
+ {"x":13.75, "y":1, "w":1.25, "h":2},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0, "w":2},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ },
+ "LAYOUT_iso_split_bs": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2},
+ {"x":13.75, "y":1, "w":1.25, "h":2},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_split_bs": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2},
+ {"x":13.75, "y":2, "w":1.25},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.5},
+ {"x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"x":11, "y":4, "w":1.5},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/plume/plume65/keymaps/default/keymap.c b/keyboards/plume/plume65/keymaps/default/keymap.c
new file mode 100644
index 0000000000..343c3b4f79
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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_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_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+[1] = LAYOUT_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______)
+
+};
diff --git a/keyboards/plume/plume65/keymaps/default/readme.md b/keyboards/plume/plume65/keymaps/default/readme.md
new file mode 100644
index 0000000000..33c50283a0
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/default/readme.md
@@ -0,0 +1 @@
+This is the default keymap for the Plume65.
diff --git a/keyboards/plume/plume65/keymaps/via/keymap.c b/keyboards/plume/plume65/keymaps/via/keymap.c
new file mode 100644
index 0000000000..ed8e921c72
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/via/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+[1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______),
+[2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______),
+[3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______),
+
+};
diff --git a/keyboards/plume/plume65/keymaps/via/rules.mk b/keyboards/plume/plume65/keymaps/via/rules.mk
new file mode 100644
index 0000000000..1e5b99807c
--- /dev/null
+++ b/keyboards/plume/plume65/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/plume/plume65/plume65.c b/keyboards/plume/plume65/plume65.c
new file mode 100644
index 0000000000..d59f2289ea
--- /dev/null
+++ b/keyboards/plume/plume65/plume65.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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 "plume65.h"
diff --git a/keyboards/plume/plume65/plume65.h b/keyboards/plume/plume65/plume65.h
new file mode 100644
index 0000000000..fa169a8bc3
--- /dev/null
+++ b/keyboards/plume/plume65/plume65.h
@@ -0,0 +1,103 @@
+/* Copyright 2020 Dekkers
+ *
+ * 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 "quantum.h"
+#define XXX KC_NO
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+#define LAYOUT_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k42, k46, k4b, k4c, k4d, k4e \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, XXX }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
+ { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
+}
+
+#define LAYOUT_ansi_split_bs( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k42, k46, k4b, k4c, k4d, k4e \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
+ { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
+}
+
+#define LAYOUT_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k42, k46, k4b, k4c, k4d, k4e \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, XXX }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
+ { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
+}
+
+#define LAYOUT_iso_split_bs( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k42, k46, k4b, k4c, k4d, k4e \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, XXX, k1e }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
+ { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
+}
+
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k42, k46, k4b, k4c, k4d, k4e \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
+ { k40, XXX, k42, XXX, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4b, k4c, k4d, k4e } \
+}
diff --git a/keyboards/plume/plume65/readme.md b/keyboards/plume/plume65/readme.md
new file mode 100644
index 0000000000..828477eaf0
--- /dev/null
+++ b/keyboards/plume/plume65/readme.md
@@ -0,0 +1,16 @@
+# Plume65
+
+## Support
+* Keyboard Maintainer: [maartenwut](https://github.com/maartenwut)
+* Hardware Supported: Plume65
+* Hardware Availability: N/A
+
+Make example for this keyboard (after setting up your build environment):
+
+ make plume/plume65:default
+
+Flashing example for this keyboard:
+
+ make plume/plume65: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).
diff --git a/keyboards/plume/plume65/rules.mk b/keyboards/plume/plume65/rules.mk
new file mode 100644
index 0000000000..dded09bb87
--- /dev/null
+++ b/keyboards/plume/plume65/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/redox_w/keymaps/danielo515/keymap.c b/keyboards/redox_w/keymaps/danielo515/keymap.c
index 2b37a4be33..c174c7cf39 100644
--- a/keyboards/redox_w/keymaps/danielo515/keymap.c
+++ b/keyboards/redox_w/keymaps/danielo515/keymap.c
@@ -22,56 +22,59 @@
# define GUI OSM(MOD_LGUI)
# define ENT_SYM LT(_SYMB, KC_ENT)
# define __S LT(_S,KC_S)
+# define OSX_BACK LGUI(KC_GRV)
+// Which key do you use to enter a layer
+# define ENTRY _______
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
//โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
- KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_DQUO ,
+ KC_EQL ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_DQUO ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,TD_PASTE, ALT_TAB ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,SFT_MINS,
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,TD_PASTE, KC_INS ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,CMD_MINS,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- SHIFT ,KC_A ,__S ,FN_D ,FN_F ,KC_G ,COPY_CUT, KC_UNDS ,HYPR_H ,ALT_J ,CTL_K ,KC_L ,TD_CLN ,CMD_QUOT,
+ KC_PIPE ,KC_A ,__S ,FN_D ,FN_F ,KC_G ,COPY_CUT, KC_UNDS ,HYPR_H ,ALT_J ,CTL_K ,KC_L ,TD_CLN ,SFT_QUOT,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- KC_BSLS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DEL ,KC_PGDN , ALT_TAB ,AD_ESC ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_ASTR ,
+ KC_BSLS ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_DEL ,KC_PLUS , ALT_TAB ,AD_ESC ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_ASTR ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
CTL ,ALT ,KC_LEFT ,KC_RIGHT, GUI , SHIFT ,KC_BSPC , KC_LEAD ,NAV_SPC , ENT_SYM, KC_LBRC ,KC_RBRC ,KC_DOWN ,KC_UP
//โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
),
[_SYMB] = LAYOUT(
- //โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
- _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,
- //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- _______ ,KC_EXLM ,KC_DLR ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,KC_PSLS ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_PMNS ,
- //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- _______ ,KC_AT ,KC_DLR , KC_LPRN, KC_RPRN,KC_GRV ,_______ , _______ ,KC_PAST ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_BSPC ,
- //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- _______ ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,_______ ,_______ , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PENT ,XXXXXXX ,
- //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_P0 , KC_P0 ,KC_PDOT ,KC_PENT ,XXXXXXX
- //โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
+ //โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F12 ,
+ //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
+ _______ ,KC_EXLM ,KC_DLR ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,KC_PSLS ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_BSPC ,
+ //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
+ _______ ,KC_AT ,KC_DLR , KC_LPRN, KC_RPRN,KC_GRV ,_______ , _______ ,KC_PENT ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_PMNS ,
+ //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
+ _______ ,KC_PERC ,KC_CIRC ,KC_LBRC ,KC_RBRC ,KC_TILD ,_______ ,_______ , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PSLS ,XXXXXXX ,
+ //โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , ENTRY , KC_P0 ,KC_PDOT ,KC_PAST ,XXXXXXX
+ //โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
),
[_NAV] = LAYOUT(
//โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX,SFT_LEFT,SFT_RIGHT,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,SFT_LEFT_END,SFT_LEFT,SFT_RIGHT,SFT_RIGHT_END ,XXXXXXX ,KC_F12 ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,KC_HOME ,CTL_LEFT,CTL_RIGHT,XXXXXXX,XXXXXXX ,XXXXXXX ,
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,KC_HOME ,CTL_LEFT,CTL_RIGHT,KC_END,XXXXXXX ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,WIN_LEFT,WIN_RIGHT
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ , _______ ,_______ , _______ , ENTRY , KC_MUTE , KC_VOLD ,KC_VOLU ,WIN_LEFT,WIN_RIGHT
//โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
),
[_ADJUST] = LAYOUT(
//โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_F12 ,
+ XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
@@ -84,26 +87,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,ALL_WIN ,EXPOSE ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ XXXXXXX ,XXXXXXX ,ALL_WIN ,EXPOSE ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,KC_F4 ,KC_F5 ,KC_F6 ,XXXXXXX ,KC_F12 ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ XXXXXXX ,XXXXXXX ,SAVE ,OSX_BACK ,ENTRY ,XXXXXXX ,XXXXXXX , XXXXXXX ,KC_PSCR ,KC_F1 ,KC_F2 ,KC_F3 ,XXXXXXX ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ XXXXXXX ,UNDO ,REDO ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , KC_PGUP ,KC_PGDOWN , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
//โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
),
[_D] = LAYOUT(
//โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
- XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F12 ,
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_A ,KC_B ,KC_C ,KC_D ,KC_E ,KC_F ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,KC_PSLS ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_PMNS ,
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,KC_LBRACKET ,KC_P7 ,KC_P8 ,KC_P9 ,KC_PERC ,KC_KP_MINUS ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,KC_PAST ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_BSPC ,
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,KC_F5 ,KC_F2 ,XXXXXXX , _______ ,KC_RBRACKET ,KC_P4 ,KC_P5 ,KC_P6 ,KC_PPLS ,KC_PAST ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PENT ,XXXXXXX ,
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , _______ ,_______ ,KC_COLN ,KC_P1 ,KC_P2 ,KC_P3 ,KC_PSLS ,XXXXXXX ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,_______ , KC_P0 , KC_P0 ,KC_PDOT ,KC_PENT ,XXXXXXX
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,_______ , KC_P0 , KC_COMMA ,KC_PDOT ,KC_PAST ,XXXXXXX
//โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
),
[_S] = LAYOUT(
@@ -114,9 +117,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
XXXXXXX ,XXXXXXX ,_______ ,KC_EQL ,F_ARROW ,KC_GRAVE,XXXXXXX , XXXXXXX ,KC_AMPR ,KC_LPRN ,KC_RPRN ,CLN_EQ ,KC_PLUS ,KC_PIPE ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_CIRC ,KC_DLR ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,KC_EXLM ,KC_TILD ,KC_CIRC ,ARROW ,KC_BSLASH,IARROW ,
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,KC_CIRC ,ARROW ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,KC_EXLM ,KC_TILD ,KC_CIRC ,ARROW ,KC_BSLASH,IARROW ,
//โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
- XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , XXXXXXX ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , XXXXXXX ,ENTRY , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
//โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
)
diff --git a/quantum/debounce/readme.md b/quantum/debounce/readme.md
deleted file mode 100644
index f77f78c764..0000000000
--- a/quantum/debounce/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-Debounce algorithms belong in this folder.
-Here are a few ideas
-
-1) Global vs Per-Key vs Per-Row
- * Global - one timer for all keys. Any key change state affects global timer
- * Per key - one timer per key
- * Per row - one timer per row
-
-2) Eager vs symmetric vs asymmetric
- * Eager - any key change is reported immediately. All further inputs for DEBOUNCE ms are ignored.
- * Symmetric - wait for no changes for DEBOUNCE ms before reporting change
- * Asymmetric - wait for different times depending on key-down/key-up. E.g. Eager key-down, DEBOUNCE ms key up.
-
-3) Timestamp vs cycles
- * old old old code waits n cycles, decreasing count by one each matrix_scan
- * newer code stores the millisecond the change occurred, and does subraction to figure out time elapsed.
- * Timestamps are superior, i don't think cycles will ever be used again once upgraded.
-
-The default algorithm is symmetric and global.
-Here are a few that could be implemented:
-
-sym_g.c
-sym_pk.c
-sym_pr.c
-sym_pr_cycles.c
-eager_g.c
-eager_pk.c
-eager_pr.c //could be used in ergo-dox!
diff --git a/quantum/debounce/sym_g.c b/quantum/debounce/sym_defer_g.c
index 3ed9055d2a..3ed9055d2a 100644
--- a/quantum/debounce/sym_g.c
+++ b/quantum/debounce/sym_defer_g.c
diff --git a/quantum/debounce/sym_pk.c b/quantum/debounce/sym_defer_pk.c
index f404cf9c44..f404cf9c44 100644
--- a/quantum/debounce/sym_pk.c
+++ b/quantum/debounce/sym_defer_pk.c
diff --git a/quantum/debounce/eager_pk.c b/quantum/debounce/sym_eager_pk.c
index 93a40ad441..93a40ad441 100644
--- a/quantum/debounce/eager_pk.c
+++ b/quantum/debounce/sym_eager_pk.c
diff --git a/quantum/debounce/eager_pr.c b/quantum/debounce/sym_eager_pr.c
index d12931fddb..d12931fddb 100644
--- a/quantum/debounce/eager_pr.c
+++ b/quantum/debounce/sym_eager_pr.c
diff --git a/quantum/keymap_extras/keymap_canadian_multilingual.h b/quantum/keymap_extras/keymap_canadian_multilingual.h
index 20333fd6da..382e67ac99 100644
--- a/quantum/keymap_extras/keymap_canadian_multilingual.h
+++ b/quantum/keymap_extras/keymap_canadian_multilingual.h
@@ -151,8 +151,8 @@
// Row 4
#define CA_LDAQ ALGR(CA_X) // ยซ
#define CA_RDAQ ALGR(CA_C) // ยป
-#define CA_LABK ALGR(CA_DOT) // <
-#define CA_RABK ALGR(CA_COMM) // >
+#define CA_LABK ALGR(CA_COMM) // <
+#define CA_RABK ALGR(CA_DOT) // >
/* Right Ctrl symbols
* โ”Œโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
diff --git a/users/danielo515/combo.c b/users/danielo515/combo.c
index 1c84143772..b33cb838bc 100644
--- a/users/danielo515/combo.c
+++ b/users/danielo515/combo.c
@@ -6,31 +6,39 @@ enum combos {
UI_COM,
IO_COM,
QW_COM,
- COM_SLS,
+ DOT_SLS,
COM_DOT,
M_COMM,
N_M,
OP_COM,
+ M_CM_DOT,
};
-const uint16_t PROGMEM ui_combo[] = {KC_U, KC_I, COMBO_END};
-const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
-const uint16_t PROGMEM yu_combo[] = {KC_Y, KC_U, COMBO_END};
-const uint16_t PROGMEM io_combo[] = {KC_I, KC_O, COMBO_END};
-const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
-const uint16_t PROGMEM com_sls[] = {KC_COMMA, KC_SLSH, COMBO_END};
-const uint16_t PROGMEM com_dot[] = {KC_COMMA, KC_DOT, COMBO_END};
-const uint16_t PROGMEM m_comm[] = {KC_M,KC_COMMA, COMBO_END};
-const uint16_t PROGMEM n_m[] = {KC_N, KC_M,COMBO_END};
+const uint16_t PROGMEM ui_combo[] = {KC_U, KC_I, COMBO_END};
+const uint16_t PROGMEM jk_combo[] = {KC_J, KC_K, COMBO_END};
+const uint16_t PROGMEM yu_combo[] = {KC_Y, KC_U, COMBO_END};
+const uint16_t PROGMEM io_combo[] = {KC_I, KC_O, COMBO_END};
+const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
+const uint16_t PROGMEM dot_sls[] = {KC_DOT, KC_SLSH, COMBO_END};
+const uint16_t PROGMEM com_dot[] = {KC_COMMA, KC_DOT, COMBO_END};
+const uint16_t PROGMEM m_comm[] = {KC_M, KC_COMMA, COMBO_END};
+const uint16_t PROGMEM n_m[] = {KC_N, KC_M, COMBO_END};
+const uint16_t PROGMEM o_p_combo[] = {KC_O, KC_P, COMBO_END};
+const uint16_t PROGMEM m_cm_dot_combo[] = {KC_M, KC_COMMA, KC_DOT, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
- [JK_ESC] = COMBO(jk_combo, KC_ESC),
- [YU_COM] = COMBO(yu_combo, KC_CIRC),
- [UI_COM] = COMBO(ui_combo, KC_DLR),
- [IO_COM] = COMBO(io_combo, KC_TILD),
+ [JK_ESC] = COMBO(jk_combo, KC_ESC),
+ [YU_COM] = COMBO(yu_combo, KC_AMPR),
+ [UI_COM] = COMBO(ui_combo, KC_CIRC),
+ [IO_COM] = COMBO(io_combo, KC_TILD),
+ [DOT_SLS] = COMBO(dot_sls, KC_EXLM),
+ [COM_DOT] = COMBO(com_dot, KC_QUES),
+ [N_M] = COMBO(n_m, KC_DLR),
+ [OP_COM] = COMBO(o_p_combo, KC_HASH),
+ // m + , = {
+ [M_COMM] = COMBO(m_comm, KC_LCBR),
+ // m + , + . = }
+ // [M_CM_DOT] = COMBO(m_cm_dot_combo, KC_RCBR),
+ // Right hand side combos
[QW_COM] = COMBO(qw_combo, KC_AT),
- [COM_SLS] = COMBO(com_sls, KC_QUES),
- [COM_DOT] = COMBO(com_dot, KC_QUES),
- [M_COMM] = COMBO(m_comm, KC_ESC),
- [N_M] = COMBO(n_m, KC_DLR),
};
diff --git a/users/danielo515/config.h b/users/danielo515/config.h
index fb2472645c..d7efcd5367 100644
--- a/users/danielo515/config.h
+++ b/users/danielo515/config.h
@@ -1,8 +1,8 @@
#pragma once
#if defined(COMBO_ENABLE)
- #define COMBO_COUNT 9
- #define COMBO_TERM 40
+# define COMBO_COUNT 11
+# define COMBO_TERM 25
#endif // !COMBO_ENABLE
// Timeout settings for leader key
#undef LEADER_TIMEOUT
diff --git a/users/danielo515/process_records.c b/users/danielo515/process_records.c
index b1a8b92552..22a46789ad 100644
--- a/users/danielo515/process_records.c
+++ b/users/danielo515/process_records.c
@@ -4,11 +4,11 @@ extern bool onMac;
// ======== INCREMENTAL MACROS STUFF =============
#define MAX_INCREMENTAL_MACRO 20
#define TAP_ROTATION_TIMEOUT 400
-uint16_t latest_kc = 0;
+uint16_t latest_kc = 0;
uint16_t latest_rotation = 0;
-int key_count = 0;
+int key_count = 0;
-const char incremental_macros[][MAX_INCREMENTAL_MACRO] = { "String1"SS_TAP(X_HOME)"X-", "String2"SS_TAP(X_HOME) };
+const char incremental_macros[][MAX_INCREMENTAL_MACRO] = {"String1" SS_TAP(X_HOME) "X-", "String2" SS_TAP(X_HOME)};
bool process_incremental_macro(uint16_t kc) {
if (kc < INC_MACROS_START || kc > INC_MACROS_END) {
@@ -44,124 +44,157 @@ void refresh_incremental_macros(uint16_t kc) {
}
// Send control or GUI depending if we are on windows or mac
bool CMD(uint16_t kc) {
- if(onMac){ tap_code16(LGUI(kc)); } else { tap_code16(LCTL(kc)); }
+ if (onMac) {
+ tap_code16(LGUI(kc));
+ } else {
+ tap_code16(LCTL(kc));
+ }
return false;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
bool pressed = record->event.pressed;
- if(pressed){
+ if (pressed) {
refresh_incremental_macros(keycode);
- if(process_incremental_macro(keycode)){
+ if (process_incremental_macro(keycode)) {
return false;
}
switch (keycode) {
case MAC_TGL:
- onMac = !onMac;
- onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC");
- return false;
+ onMac = !onMac;
+ onMac ? SEND_STRING("On mac") : SEND_STRING("Not on MAC");
+ return false;
}
}
switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- layer_on(_QWERTY);
- }
- return false;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- } else {
- layer_off(_LOWER);
- }
- return false;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- } else {
- layer_off(_RAISE);
- }
- return false;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- // == Macros START ===
- case IARROW: if (record->event.pressed) SEND_STRING("<-"); return false;
- case ARROW: if (record->event.pressed) SEND_STRING("->"); return false;
- case F_ARROW: if (record->event.pressed) SEND_STRING("=>"); return false;
- case GREP: if (record->event.pressed) SEND_STRING(" | grep "); return false;
- case CLN_EQ: if (record->event.pressed) SEND_STRING(":="); return false;
- // == Macros END ===
- // == Multi Os START ===
- case KC_HOME:// make the home behave the same on OSX
- if (record->event.pressed && onMac) {
- SEND_STRING(SS_LCTRL("a"));
- return false;
- }
- case KC_END:// make the end behave the same on OSX
- if (record->event.pressed && onMac) {
- tap_code16(C(KC_E));
- return false;
- }
- case AC_A:// Accent รก
- if (record->event.pressed) SEND_STRING(SS_LALT("e") "a"); return false;
- case AC_E:// Accent รฉ
- if (record->event.pressed) SEND_STRING(SS_LALT("e") "e"); return false;
- case AC_I:// Accent รญ
- if (record->event.pressed) SEND_STRING(SS_LALT("e") "i"); return false;
- case AC_O:// Accent รณ
- if (record->event.pressed) SEND_STRING(SS_LALT("e") "o"); return false;
- case CUT: if (record->event.pressed) return CMD(KC_X);
- case COPY:
- if (record->event.pressed) {
- onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
- }
- return false;
- case PASTE:
- if (record->event.pressed) {
- onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
- }
- return false;
- case SAVE:
- if (record->event.pressed) {
- onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s"));
- }
- return false;
- case UNDO:
- if (record->event.pressed) {
- onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z"));
- }
- return false;
- case FIND:
- if (record->event.pressed) {
- onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f"));
- }
- return false;
- case CHG_LAYOUT:
- if (record->event.pressed) {
- onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f"));
- }
- return false;
- // == Multi Os END ===
+ case QWERTY:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+#endif
+ layer_on(_QWERTY);
+ }
+ return false;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ // == Macros START ===
+ case IARROW:
+ if (record->event.pressed) SEND_STRING("<-");
+ return false;
+ case ARROW:
+ if (record->event.pressed) SEND_STRING("->");
+ return false;
+ case F_ARROW:
+ if (record->event.pressed) SEND_STRING("=>");
+ return false;
+ case GREP:
+ if (record->event.pressed) SEND_STRING(" | grep ");
+ return false;
+ case CLN_EQ:
+ if (record->event.pressed) SEND_STRING(":=");
+ return false;
+ // == Macros END ===
+ // == Multi Os START ===
+ case KC_HOME: // make the home behave the same on OSX
+ if (record->event.pressed && onMac) {
+ SEND_STRING(SS_LCTRL("a"));
+ return false;
+ }
+ case KC_END: // make the end behave the same on OSX
+ if (record->event.pressed && onMac) {
+ tap_code16(C(KC_E));
+ return false;
+ }
+ case AC_A: // Accent รก
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "a");
+ return false;
+ case AC_E: // Accent รฉ
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "e");
+ return false;
+ case AC_I: // Accent รญ
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "i");
+ return false;
+ case AC_O: // Accent รณ
+ if (record->event.pressed) SEND_STRING(SS_LALT("e") "o");
+ return false;
+ case CUT:
+ if (record->event.pressed) return CMD(KC_X);
+ case COPY:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("c")) : SEND_STRING(SS_LCTRL("c"));
+ }
+ return false;
+ case PASTE:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("v")) : SEND_STRING(SS_LCTRL("v"));
+ }
+ return false;
+ case SAVE:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("s")) : SEND_STRING(SS_LCTRL("s"));
+ }
+ return false;
+ case UNDO:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("z")) : SEND_STRING(SS_LCTRL("z"));
+ }
+ return false;
+ case REDO:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI(SS_LSFT("z"))) : SEND_STRING(SS_LCTRL("y"));
+ }
+ return false;
+ case FIND:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LGUI("f")) : SEND_STRING(SS_LCTRL("f"));
+ }
+ return false;
+ case WIN_TO_RIGHT:
+ if (record->event.pressed) {
+ onMac ? tap_code16(SGUI(A(KC_RIGHT))) : tap_code16(G(KC_RIGHT));
+ }
+ return false;
+ case WIN_TO_LEFT:
+ if (record->event.pressed) {
+ onMac ? tap_code16(SGUI(A(KC_LEFT))) : tap_code16(G(KC_LEFT));
+ }
+ return false;
+ case CHG_LAYOUT:
+ if (record->event.pressed) {
+ onMac ? SEND_STRING(SS_LCTRL(" ")) : SEND_STRING(SS_LCTRL("f"));
+ }
+ return false;
+ // == Multi Os END ===
#ifdef RGBLIGHT_ENABLE
- case RGB_SLD:
- if (record->event.pressed) { rgblight_mode(1); }
- return false;
- break;
- //First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt
+ case RGB_SLD:
+ if (record->event.pressed) {
+ rgblight_mode(1);
+ }
+ return false;
+ break;
+ // First time alt + tab, and alt stays sticky. Next press we just send tab. Any other key releases the alt
#endif
- }
-// =============== ALT_TAB single key handling
- return process_alt_tab(keycode, record);
+ }
+ // =============== ALT_TAB single key handling
+ return process_alt_tab(keycode, record);
};
-
-
-
diff --git a/users/danielo515/process_records.h b/users/danielo515/process_records.h
index c994511a5f..0efd690d40 100644
--- a/users/danielo515/process_records.h
+++ b/users/danielo515/process_records.h
@@ -1,35 +1,36 @@
#pragma once
#include "quantum.h"
-enum custom_keycodes
-{
- EPRM = SAFE_RANGE,
- RGB_SLD,
+enum custom_keycodes {
+ RGB_SLD = SAFE_RANGE,
ALT_TAB,
QWERTY,
SYM,
NAV,
ADJUST,
-// Macros
+ // Macros
ARROW,
IARROW,
CLN_EQ,
F_ARROW,
GREP,
-// Accented characters
+ // Accented characters
AC_A,
AC_E,
AC_I,
AC_O,
-// Custom multi-os key-codes
+ // Custom multi-os key-codes
CUT,
COPY,
PASTE,
SAVE,
UNDO,
+ REDO,
CHG_LAYOUT,
FIND,
-// OTHER OLD STUFF
+ WIN_TO_LEFT,
+ WIN_TO_RIGHT,
+ // OTHER OLD STUFF
LOWER,
RAISE,
MAC_TGL,
@@ -57,48 +58,49 @@ enum layers {
};
//===== Function letters
-# define FN_F LT(_F,KC_F)
-# define FN_D LT(_D,KC_D)
-# define FN_S LT(_S,KC_S)
-# define FN_A LT(_A,KC_A)
-# define FN_K LT(_K,KC_K)
-# define FN_J LT(_J,KC_J)
-# define KC_FN_D FN_D
-# define KC_FN_S FN_S
-# define KC_FN_F FN_F
+#define FN_F LT(_F, KC_F)
+#define FN_D LT(_D, KC_D)
+#define FN_S LT(_S, KC_S)
+#define FN_A LT(_A, KC_A)
+#define FN_K LT(_K, KC_K)
+#define FN_J LT(_J, KC_J)
+#define KC_FN_D FN_D
+#define KC_FN_S FN_S
+#define KC_FN_F FN_F
-# define KC_MACROS OSL(_MACROS)
+#define KC_MACROS OSL(_MACROS)
-
-# define KC_E_COLN LSFT(KC_DOT)
-# define KC_E_EQL ES_EQL
-# define KC_GUI OSM(MOD_RGUI)
-# define KC_R_NUB S(KC_NUBS)
-# define KC_E_LT KC_NUBS
-# define KC_E_GT S(KC_NUBS)
-# define KC_E_TILD ES_TILD
-# define KC_E_MINS ES_MINS
-# define KC_E_OVRR ES_OVRR
-# define KC_E_APOS ES_APOS
-# define KC_E_IEXL ES_IEXL
+#define KC_E_COLN LSFT(KC_DOT)
+#define KC_E_EQL ES_EQL
+#define KC_GUI OSM(MOD_RGUI)
+#define KC_R_NUB S(KC_NUBS)
+#define KC_E_LT KC_NUBS
+#define KC_E_GT S(KC_NUBS)
+#define KC_E_TILD ES_TILD
+#define KC_E_MINS ES_MINS
+#define KC_E_OVRR ES_OVRR
+#define KC_E_APOS ES_APOS
+#define KC_E_IEXL ES_IEXL
//========== Short hand for complex key combinations
-# define WIN_LEFT_HALF LALT(LGUI(KC_LEFT))
-# define WIN_RIGHT_HALF LALT(LGUI(KC_RIGHT))
-# define WIN_TO_LEFT LALT(LSFT( LGUI(KC_LEFT) ))
-# define WIN_TO_RIGHT LALT(LSFT( LGUI(KC_RIGHT) ))
-# define ALL_WIN LCTL(KC_DOWN)
-# define EXPOSE LGUI(KC_DOWN)
+#define WIN_LEFT_HALF LALT(LGUI(KC_LEFT))
+#define WIN_RIGHT_HALF LALT(LGUI(KC_RIGHT))
+#define ALL_WIN LCTL(KC_DOWN)
+#define EXPOSE LGUI(KC_DOWN)
// ========== Modifiers!!
-# define SHIFT OSM(MOD_LSFT)
+#define SHIFT OSM(MOD_LSFT)
//=============== tap for key hold for mod
-# define HYPR_H HYPR_T(KC_H)
-# define CTL_K RCTL_T(KC_K)
-# define ALT_J ALT_T(KC_J)
-# define SFT_MINS LSFT_T(KC_MINS) // tap - hold shift
-# define CMD_QUOT GUI_T(KC_QUOTE) // tap ' hold cmd
+#define HYPR_H HYPR_T(KC_H)
+#define CTL_K RCTL_T(KC_K)
+#define ALT_J ALT_T(KC_J)
+#define SFT_MINS LSFT_T(KC_MINS) // tap - hold shift
+#define CMD_MINS GUI_T(KC_MINS) // tap - hold cmd
+#define CMD_QUOT GUI_T(KC_QUOTE) // tap ' hold cmd
+#define SFT_QUOT LSFT_T(KC_QUOTE) // tap ' hold shift
//=============== Movement modified
-# define CTL_LEFT LCTL(KC_LEFT)
-# define CTL_RIGHT LCTL(KC_RIGHT)
+#define CTL_LEFT LCTL(KC_LEFT)
+#define CTL_RIGHT LCTL(KC_RIGHT)
-# define SFT_LEFT LSFT(KC_LEFT)
-# define SFT_RIGHT LSFT(KC_RIGHT)
+#define SFT_LEFT LSFT(KC_LEFT)
+#define SFT_RIGHT LSFT(KC_RIGHT)
+#define SFT_LEFT_END LGUI(LSFT(KC_LEFT))
+#define SFT_RIGHT_END LGUI(LSFT(KC_RIGHT))
diff --git a/users/stanrc85/rgblight_layers.c b/users/stanrc85/rgblight_layers.c
index 780555e7b5..1fbd541498 100644
--- a/users/stanrc85/rgblight_layers.c
+++ b/users/stanrc85/rgblight_layers.c
@@ -3,44 +3,7 @@
static uint8_t middle = 0;
static uint8_t bottom = 0;
-const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {3, 2, HSV_RED},
- {10, 2, HSV_RED}
-);
-
-const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {3, 1, HSV_GREEN},
- {11, 1, HSV_GREEN}
-);
-
-const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {3, 1, HSV_BLUE},
- {11, 1, HSV_BLUE}
-);
-
-const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
- {3, 1, HSV_WHITE},
- {11, 1, HSV_WHITE}
-);
-
-// Now define the array of layers. Later layers take precedence
-const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
- my_capslock_layer,
- my_layer1_layer,
- my_layer2_layer,
- my_layer3_layer
-);
-
-void keyboard_post_init_user(void) {
- // Enable the LED layers
- rgblight_layers = my_rgb_layers;
-}
-
layer_state_t layer_state_set_user(layer_state_t state) {
- // Both layers will light up if both kb layers are active
- rgblight_set_layer_state(1, layer_state_cmp(state, 1));
- rgblight_set_layer_state(2, layer_state_cmp(state, 2));
- rgblight_set_layer_state(3, layer_state_cmp(state, 3));
middle = bottom = 0;
switch (get_highest_layer(state)) {
case _FN1_60:
@@ -60,7 +23,6 @@ layer_state_t layer_state_set_user(layer_state_t state) {
}
bool led_update_user(led_t led_state) {
- //rgblight_set_layer_state(0, led_state.caps_lock);
writePin(INDICATOR_PIN_0, !led_state.caps_lock);
writePin(INDICATOR_PIN_1, !middle);
writePin(INDICATOR_PIN_2, !bottom);
diff --git a/users/stanrc85/rules.mk b/users/stanrc85/rules.mk
index 5c572c0af3..54f0f76260 100644
--- a/users/stanrc85/rules.mk
+++ b/users/stanrc85/rules.mk
@@ -10,24 +10,10 @@ NKRO_ENABLE = no
SRC += stanrc85.c
-ifeq ($(strip $(KEYBOARD)), 1upkeyboards/1up60hse)
- SRC += layer_rgb.c
- VIA_ENABLE = yes
- LTO_ENABLE = yes
-endif
-ifeq ($(strip $(KEYBOARD)), dz60)
- SRC += layer_rgb.c
- VIA_ENABLE = yes
- LTO_ENABLE = yes
-endif
-ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev1)
- SRC += rgblight_layers.c
- VIA_ENABLE = yes
- LTO_ENABLE = no
- VELOCIKEY_ENABLE=yes
-endif
ifeq ($(strip $(KEYBOARD)), projectkb/alice/rev2)
SRC += rgblight_layers.c
+ SRC += startup_fanfare.c
+ OPT_DEFS += -DHAS_INDICATORS
VIA_ENABLE = yes
LTO_ENABLE = no
VELOCIKEY_ENABLE=yes
diff --git a/users/stanrc85/stanrc85.c b/users/stanrc85/stanrc85.c
index c1aaad1a1a..2dbd41974b 100644
--- a/users/stanrc85/stanrc85.c
+++ b/users/stanrc85/stanrc85.c
@@ -44,8 +44,42 @@ void ctl_copy_reset (qk_tap_dance_state_t *state, void *user_data) {
}
}
+#if defined(HAS_INDICATORS)
+ static uint8_t led_user = 0;
+#endif
+
+void lock_unlock (qk_tap_dance_state_t *state, void *user_data) {
+ td_state = cur_dance(state);
+ switch (td_state) {
+ case SINGLE_TAP: // Ctl + Alt + Del to unlock workstation
+ tap_code16(KC_CAD);
+ #if defined(HAS_INDICATORS)
+ led_user = 0;
+ writePin(INDICATOR_PIN_0, !led_user);
+ wait_ms(200);
+ writePin(INDICATOR_PIN_1, !led_user);
+ wait_ms(200);
+ writePin(INDICATOR_PIN_2, !led_user);
+ #endif
+ break;
+ case SINGLE_HOLD:
+ break;
+ case DOUBLE_TAP: //Lock workstation
+ tap_code16(KC_LOCK);
+ #if defined(HAS_INDICATORS)
+ led_user = 1;
+ writePin(INDICATOR_PIN_2, !led_user);
+ wait_ms(200);
+ writePin(INDICATOR_PIN_1, !led_user);
+ wait_ms(200);
+ writePin(INDICATOR_PIN_0, !led_user);
+ #endif
+ break;
+ }
+}
+
qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_WIN] = ACTION_TAP_DANCE_DOUBLE(KC_CAD, KC_LOCK),
+ [TD_WIN] = ACTION_TAP_DANCE_FN(lock_unlock),
[TD_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_GRV),
[TD_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctl_copy_finished, ctl_copy_reset)
};
diff --git a/users/stanrc85/startup_fanfare.c b/users/stanrc85/startup_fanfare.c
new file mode 100644
index 0000000000..507d9e389c
--- /dev/null
+++ b/users/stanrc85/startup_fanfare.c
@@ -0,0 +1,43 @@
+#include "stanrc85.h"
+
+static uint8_t top = 0;
+static uint8_t middle = 0;
+static uint8_t bottom = 0;
+
+static bool is_enabled = true;
+static bool is_rgblight_startup = true;
+static uint16_t rgblight_startup_loop_timer;
+
+void matrix_scan_user(void) {
+ // Boot up "fanfare"
+ if (is_rgblight_startup && is_keyboard_master()) {
+ if (timer_elapsed(rgblight_startup_loop_timer) > 10) {
+ static uint8_t counter;
+ counter++;
+ if (counter == 1) {
+ top = 1;
+ writePin(INDICATOR_PIN_0, !top);
+ wait_ms(200);
+ top = 0;
+ writePin(INDICATOR_PIN_0, !top);
+ }
+ if (counter == 2) {
+ middle = 1;
+ writePin(INDICATOR_PIN_1, !middle);
+ wait_ms(200);
+ middle = 0;
+ writePin(INDICATOR_PIN_1, !middle);
+ }
+ if (counter == 3) {
+ bottom = 1;
+ writePin(INDICATOR_PIN_2, !bottom);
+ wait_ms(200);
+ bottom = 0;
+ writePin(INDICATOR_PIN_2, !bottom);
+ }
+ if (counter == 4) {
+ is_enabled = is_rgblight_startup = false;
+ }
+ }
+ }
+}