-# איך להשתמש ב-Github עם QMK
+# איך להשתמש ב-GitHub עם QMK
-Github עלול להיות קצת טריקי למי שלא מכיר את העבודה איתו - מדריך זה ילווה אתכם שלב אחר שלב דרך ביצוע פעולות fork, clone ו-pull request עם QMK.
+GitHub עלול להיות קצת טריקי למי שלא מכיר את העבודה איתו - מדריך זה ילווה אתכם שלב אחר שלב דרך ביצוע פעולות fork, clone ו-pull request עם QMK.
?> מדריך זה מניח שאתם מרגישים בנוח עם הרצה של פקודות בסביבת command line (שורת הפקודה) ו-git מותקן במערכת שלכם.
-התחילו ב- [עמוד של QMK ב-Github](https://github.com/qmk/qmk_firmware), ותצמאו כפתור בחלק העליון מימין עם התיכוב "Fork":
+התחילו ב- [עמוד של QMK ב-GitHub](https://github.com/qmk/qmk_firmware), ותצמאו כפתור בחלק העליון מימין עם התיכוב "Fork":
-
+
אם אתם חלק מארגון, תצטרכו לבחור לאיזה חשבון לבצע פעולת fork. ברוב המבקרים, תרצו לבצע fork לתוך החשבון הפרטי שלכם. ברגע שה-fork הסתיים (לפעמים זה יכול לקחת קצת זמן) הקליקו על כפתור ה-"Clone or Download":
-
+
תוודאו שאתם בוחרים באופצייה של "HTTPS", בחרו את הקישור והעתיקו אותו:
diff --git a/docs/ja/_summary.md b/docs/ja/_summary.md
index e6423c6c26f..987df23d76d 100644
--- a/docs/ja/_summary.md
+++ b/docs/ja/_summary.md
@@ -106,7 +106,7 @@
* [Velocikey](ja/feature_velocikey.md)
* QMK の開発
- * 破壊的な変更
+ * 互換性を破る変更/Breaking changes
* [概要](ja/breaking_changes.md)
* [プルリクエストにフラグが付けられた](ja/breaking_changes_instructions.md)
* 履歴
diff --git a/docs/ja/breaking_changes.md b/docs/ja/breaking_changes.md
new file mode 100644
index 00000000000..936d0a4722c
--- /dev/null
+++ b/docs/ja/breaking_changes.md
@@ -0,0 +1,120 @@
+# Breaking changes/互換性を破る変更
+
+
+
+このドキュメントは QMK の互換性を破る変更(Breaking change) のプロセスについて説明します。
+互換性を破る変更とは、互換性がなかったり潜在的な危険が生じるように QMK の動作を変える変更を指します。
+ユーザが QMK ツリーを更新しても自分のキーマップが壊れない事を確信できるように、これらの変更を制限します。(訳注:以後、原文のまま Breaking change を用語として使用します。)
+
+Breaking change ピリオドとは、危険な変更、または予想外の変更を QMK へ行なう PR をマージする時のことです。
+付随するテスト期間があるため、問題が起きることはまれか、有りえないと確信しています。
+
+## 過去の Breaking change には何が含まれますか?
+
+* [2020年5月30日](ja/ChangeLog/20200530.md)
+* [2020年2月29日](ja/ChangeLog/20200229.md)
+* [2019年8月30日](ja/ChangeLog/20190830.md)
+
+## 次の Breaking change はいつですか?
+
+次の Breaking change は2020年8月29日に予定されています。
+
+### 重要な日付
+
+* [x] 2020年 5月30日 - `develop` が作成されました。毎週リベースされます。
+* [ ] 2020年 8月 1日 - `develop` は新しいPRを取り込みません。
+* [ ] 2020年 8月 1日 - テスターの募集。
+* [ ] 2020年 8月27日 - `master`がロックされ、PR はマージされません。
+* [ ] 2020年 8月29日 - `develop` を `master` にマージします。
+* [ ] 2020年 8月29日 - `master` のロックが解除されます。PR を再びマージすることができます。
+
+## どのような変更が含まれますか?
+
+最新の Breaking change 候補を見るには、[`breaking_change` ラベル](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Abreaking_change+is%3Apr)を参照してください。
+現在から `develop` が閉じられるまでの間に新しい変更が追加される可能性があり、そのラベルが適用された PR はマージされることは保証されていません。
+
+このラウンドに、あなたの Breaking change を含めたい場合は、`breaking_change` ラベルを持つ PR を作成し、`develop` が閉じる前に承認してもらう必要があります。
+`develop` が閉じた後は、新しい Breaking change は受け付けられません。
+
+受け入れの基準:
+
+* PR が完了し、マージの準備ができている
+* PR が ChangeLog を持つ
+
+# チェックリスト
+
+ここでは、Breaking change プロセスを実行する時に使用する様々なプロセスについて説明します。
+
+## `master` から `develop` をリベースします
+
+これは `develop` が開いている間、毎週金曜日に実行されます。
+
+プロセス:
+
+```
+cd qmk_firmware
+git checkout master
+git pull --ff-only
+git checkout develop
+git rebase master
+git push --force
+```
+
+## `develop` ブランチの作成
+
+以前の `develop` ブランチがマージされた直後に、これが発生します。
+
+* `qmk_firmware` git commands
+ * [ ] `git checkout master`
+ * [ ] `git pull --ff-only`
+ * [ ] `git checkout -b develop`
+ * [ ] Edit `readme.md`
+ * [ ] これがテストブランチであることを上部に大きな通知で追加します。
+ * [ ] このドキュメントへのリンクを含めます
+ * [ ] `git commit -m 'Branch point for
Breaking Change'`
+ * [ ] `git tag breakpoint___`
+ * [ ] `git tag ` # ブレーキング ポイント タグがバージョンの増分を混乱させないようにします
+ * [ ] `git push origin develop`
+ * [ ] `git push --tags`
+
+## マージの 4 週間前
+
+* `develop` は新しい PR に対して閉じられ、現在の PR の修正のみがマージされる可能性があります。
+* テスターの呼び出しを投稿します
+ * [ ] Discord
+ * [ ] GitHub PR
+ * [ ] https://reddit.com/r/olkb
+
+## マージの 1 週間前
+
+* master が < 2 日前> から <マージの日> まで閉じられることを発表します
+ * [ ] Discord
+ * [ ] GitHub PR
+ * [ ] https://reddit.com/r/olkb
+
+## マージの 2 日前
+
+* master が 2 日間閉じられることを発表します
+ * [ ] Discord
+ * [ ] GitHub PR
+ * [ ] https://reddit.com/r/olkb
+
+## マージの日
+
+* `qmk_firmware` git commands
+ * [ ] `git checkout develop`
+ * [ ] `git pull --ff-only`
+ * [ ] `git rebase origin/master`
+ * [ ] Edit `readme.md`
+ * [ ] `develop` についてのメモを削除
+ * [ ] ChangeLog を 1 つのファイルにまとめます。
+ * [ ] `git commit -m 'Merge point for Breaking Change'`
+ * [ ] `git push origin develop`
+* GitHub Actions
+ * [ ] `develop`の PR を作成します
+ * [ ] travis がクリーンに戻ったことを確認します
+ * [ ] `develop` PR をマージします
diff --git a/docs/ja/breaking_changes_instructions.md b/docs/ja/breaking_changes_instructions.md
new file mode 100644
index 00000000000..69d17d73c5f
--- /dev/null
+++ b/docs/ja/breaking_changes_instructions.md
@@ -0,0 +1,51 @@
+# breaking changes/互換性を破る変更: プルリクエストにフラグが付けられた
+
+
+
+QMK のメンバーがあなたのプルリクエストに返信し、あなたの提出したものは Breaking change (互換性を破る変更) であると述べている場合があります。メンバーの判断では、あなたが提案した変更は QMK やその利用者にとってより大きな影響を持つと考えられます。
+
+プルリクエストにフラグが立てられる原因となるものには、以下のようなものがあります:
+
+- **ユーザーのキーマップに対する編集**
+ ユーザーが自分のキーマップを QMK に提出した後、しばらくしてさらに更新してプルリクエストを開いたところ、それが `qmk/qmk_firmware` リポジトリで編集されていたためにマージできなかったことに気づくことがあるかもしれません。すべてのユーザーが Git や GitHub を使いこなせるわけではないので、ユーザー自身で問題を修正できないことに気づくかもしれません。
+- **期待される動作の変更**
+ QMK の動作を変更すると、既存の QMK 機能への変更を組み込んだ新しいファームウェアをフラッシュした場合、ユーザはハードウェアまたは QMK が壊れていると考え、希望する動作を復元する手段がないことに気付くことがあります。
+- **ユーザーのアクションを必要とする変更**
+ 変更には、ツールチェインを更新したり、Git で何らかのアクションを取るなど、ユーザーがアクションを行う必要がある場合もあります。
+- **精査が必要な変更**
+ 時には、投稿がプロジェクトとしての QMK に影響を与えることもあります。これは、著作権やライセンスの問題、コーディング規約、大規模な機能のオーバーホール、コミュニティによるより広範なテストを必要とする「リスクの高い」変更、あるいは全く別のものである可能性があります。
+- **エンドユーザーとのコミュニケーションを必要とする変更**
+ これには、将来の非推奨化への警告、時代遅れの慣習、その他伝えなければならないが上記のカテゴリのどれかに当てはまらないものが含まれます。
+
+## 何をすればいいのか?
+
+提出したものが Breaking change だと判断された場合、手続きをスムーズに進めるためにできることがいくつかあります。
+
+### PR を分割することを検討する
+
+あなたがコアコードを投稿していて、それが Breaking change プロセスを経る必要がある唯一の理由が、あなたの変更に合わせてキーマップを更新していることである場合、古いキーマップが機能し続けるような方法であなたの機能を投稿できるかどうかを検討してください。
+そののち、Breaking change プロセスを経て古いコードを削除する別の PR を提出してください。
+
+### ChangeLog エントリの提供
+
+Breaking change プロセスを経て提出する際には、変更ログのエントリを含めることを我々は要請します。
+エントリーは、あなたのプルリクエストが行う変更の短い要約としてください – [ここの各セクションは changelog として開始されました](ja/ChangeLog/20190830.md "n.b. This should link to the 2019 Aug 30 Breaking Changes doc - @noroadsleft")。
+
+変更ログは `docs/ChangeLog/YYYYMMDD/PR####.md` に置いてください。
+ここで、`YYYYMMDD` は QMK の breaking change ブランチ – 通常は `develop` という名称 – が `master` ブランチにマージされる日付、`####` はプルリクエストの番号です。
+
+ユーザー側でのアクションを必要とする場合、あなたの変更ログは、どのようなアクションを取らなければならないかをユーザーに指示するか、そのようなアクションを指示する場所にリンクする必要があります。
+
+### 変更点を文書化する
+
+提出物の目的を理解し、それが必要とする可能性のある意味合いやアクションを理解することで、レビュープロセスをより簡単にすることができます。この目的のためには変更履歴で十分かもしれませんが、より広範囲の変更を行う場合には、変更履歴には不向きな詳細レベルが必要になるかもしれません。
+
+あなたのプルリクエストにコメントしたり、質問やコメント、変更要求に対応したりすることは、非常にありがたいことです。
+
+### 助けを求める
+
+あなたの提出物にフラグが立ったことで、あなたはびっくりしてしまったかもしれません。もし、あなた自身が脅されたり、圧倒されたりしていると感じたら、私たちに知らせてください。プルリクエストにコメントするか、[Discord で QMK チームに連絡を取ってください](https://discord.gg/Uq7gcHh)。
diff --git a/docs/ja/cli.md b/docs/ja/cli.md
index dc6dddc41d9..9e8169a84e0 100644
--- a/docs/ja/cli.md
+++ b/docs/ja/cli.md
@@ -1,8 +1,8 @@
# QMK CLI :id=qmk-cli
## 概要 :id=overview
@@ -11,25 +11,24 @@ QMK CLI を使用すると QMK キーボードの構築と作業が簡単にな
### 必要事項 :id=requirements
-CLI は Python 3.5 以上を必要とします。我々は必要事項の数を少なくしようとしていますが、[`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt) に列挙されているパッケージもインストールする必要があります。これらは QMK CLI をインストールするときに自動的にインストールされます。
+QMK は Python 3.6 以上を必要とします。我々は必要事項の数を少なくしようとしていますが、[`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt) に列挙されているパッケージもインストールする必要があります。これらは QMK CLI をインストールするときに自動的にインストールされます。
### Homebrew を使ったインストール (macOS、いくつかの Linux) :id=install-using-homebrew
[Homebrew](https://brew.sh) をインストールしている場合は、タップして QMK をインストールすることができます:
```
-brew tap qmk/qmk
-brew install qmk
+brew install qmk/qmk/qmk
export QMK_HOME='~/qmk_firmware' # オプション、`qmk_firmware` の場所を設定します
qmk setup # これは `qmk/qmk_firmware` をクローンし、オプションでビルド環境をセットアップします
```
-### easy_install あるいは pip を使ってインストール :id=install-using-easy_install-or-pip
+### pip を使ってインストール :id=install-using-easy_install-or-pip
-上のリストにあなたのシステムがない場合は、QMK を手動でインストールすることができます。最初に、python 3.5 (以降)をインストールしていて、pip をインストールしていることを確認してください。次に以下のコマンドを使って QMK をインストールします:
+上で列挙した中にあなたのシステムがない場合は、QMK を手動でインストールすることができます。最初に、python 3.6 (以降)をインストールしていて、pip をインストールしていることを確認してください。次に以下のコマンドを使って QMK をインストールします:
```
-pip3 install qmk
+python3 -m pip install qmk
export QMK_HOME='~/qmk_firmware' # オプション、`qmk_firmware` の場所を設定します
qmk setup # これは `qmk/qmk_firmware` をクローンし、オプションでビルド環境をセットアップします
```
diff --git a/docs/ja/cli_commands.md b/docs/ja/cli_commands.md
index 013689e5e84..81cb03cfe5b 100644
--- a/docs/ja/cli_commands.md
+++ b/docs/ja/cli_commands.md
@@ -1,48 +1,18 @@
# QMK CLI コマンド
-# CLI コマンド
-
-## `qmk cformat`
-
-このコマンドは clang-format を使って C コードを整形します。
-
-引数無しで実行すると、変更された全てのコアコードを整形します。デフォルトでは `git diff` で `origin/master` をチェックし、ブランチは `-b ` を使って変更できます。
-
-`-a` で全てのコアコードを整形するか、コマンドラインでファイル名を渡して特定のファイルに対して実行します。
-
-**指定したファイルに対する使い方**:
-
-```
-qmk cformat [file1] [file2] [...] [fileN]
-```
-
-**全てのコアファイルに対する使い方**:
-
-```
-qmk cformat -a
-```
-
-**origin/master で変更されたファイルのみに対する使い方**:
-
-```
-qmk cformat
-```
-
-**branch_name で変更されたファイルのみに対する使い方**:
-
-```
-qmk cformat -b branch_name
-```
+# ユーザー用コマンド
## `qmk compile`
このコマンドにより、任意のディレクトリからファームウェアをコンパイルすることができます。 からエクスポートした JSON をコンパイルするか、リポジトリ内でキーマップをコンパイルするか、現在の作業ディレクトリでキーボードをコンパイルすることができます。
+このコマンドはディレクトリを認識します。キーボードやキーマップのディレクトリにいる場合、自動的に KEYBOARD や KEYMAP を入力します。
+
**Configurator Exports での使い方**:
```
@@ -113,6 +83,8 @@ $ qmk compile -kb dz60
このコマンドは `qmk compile` に似ていますが、ブートローダを対象にすることもできます。ブートローダはオプションで、デフォルトでは `:flash` に設定されています。
違うブートローダを指定するには、`-bl ` を使ってください。利用可能なブートローダの詳細については、[ファームウェアを書き込む](ja/flashing.md)を見てください。
+このコマンドはディレクトリを認識します。キーボードやキーマップのディレクトリにいる場合、自動的に KEYBOARD や KEYMAP を入力します。
+
**Configurator Exports での使い方**:
```
@@ -141,16 +113,6 @@ qmk flash -b
qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
```
-## `qmk docs`
-
-このコマンドは、ドキュメントを参照または改善するために使うことができるローカル HTTP サーバを起動します。デフォルトのポートは 8936 です。
-
-**使用法**:
-
-```
-qmk docs [-p PORT]
-```
-
## `qmk doctor`
このコマンドは環境を調査し、潜在的なビルドあるいは書き込みの問題について警告します。必要に応じてそれらの多くを修正できます。
@@ -175,6 +137,32 @@ qmk doctor [-y] [-n]
qmk doctor -n
+## `qmk info`
+
+QMK のキーボードやキーマップに関する情報を表示します。キーボードに関する情報を取得したり、レイアウトを表示したり、基礎となるキーマトリックスを表示したり、JSON キーマップをきれいに印刷したりするのに使用できます。
+
+**使用法**:
+
+```
+qmk info [-f FORMAT] [-m] [-l] [-km KEYMAP] [-kb KEYBOARD]
+```
+
+このコマンドはディレクトリを認識します。キーボードやキーマップのディレクトリにいる場合、自動的に KEYBOARD や KEYMAP を入力します。
+
+**例**:
+
+キーボードの基本情報を表示する:
+
+ qmk info -kb planck/rev5
+
+キーボードのマトリクスを表示する:
+
+ qmk info -kb ergodox_ez -m
+
+キーボードの JSON キーマップを表示する:
+
+ qmk info -kb clueboard/california -km default
+
## `qmk json2c`
QMK Configurator からエクスポートしたものから keymap.c を生成します。
@@ -185,6 +173,86 @@ QMK Configurator からエクスポートしたものから keymap.c を生成
qmk json2c [-o OUTPUT] filename
```
+## `qmk list-keyboards`
+
+このコマンドは現在 `qmk_firmware` で定義されている全てのキーボードを列挙します。
+
+**使用法**:
+
+```
+qmk list-keyboards
+```
+
+## `qmk list-keymaps`
+
+このコマンドは指定されたキーボード(とリビジョン)の全てのキーマップを列挙します。
+
+このコマンドはディレクトリを認識します。キーボードのディレクトリにいる場合、自動的に KEYBOARD を入力します。
+
+**使用法**:
+
+```
+qmk list-keymaps -kb planck/ez
+```
+
+## `qmk new-keymap`
+
+このコマンドは、キーボードの既存のデフォルトのキーマップに基づいて新しいキーマップを作成します。
+
+このコマンドはディレクトリを認識します。キーボードやキーマップのディレクトリにいる場合、自動的に KEYBOARD や KEYMAP を入力します。
+
+**使用法**:
+
+```
+qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
+```
+
+---
+
+# 開発者用コマンド
+
+## `qmk cformat`
+
+このコマンドは clang-format を使って C コードを整形します。
+
+引数無しで実行すると、変更された全てのコアコードを整形します。デフォルトでは `git diff` で `origin/master` をチェックし、ブランチは `-b ` を使って変更できます。
+
+`-a` で全てのコアコードを整形するか、コマンドラインでファイル名を渡して特定のファイルに対して実行します。
+
+**指定したファイルに対する使い方**:
+
+```
+qmk cformat [file1] [file2] [...] [fileN]
+```
+
+**全てのコアファイルに対する使い方**:
+
+```
+qmk cformat -a
+```
+
+**origin/master で変更されたファイルのみに対する使い方**:
+
+```
+qmk cformat
+```
+
+**branch_name で変更されたファイルのみに対する使い方**:
+
+```
+qmk cformat -b branch_name
+```
+
+## `qmk docs`
+
+このコマンドは、ドキュメントを参照または改善するために使うことができるローカル HTTP サーバを起動します。デフォルトのポートは 8936 です。
+
+**使用法**:
+
+```
+qmk docs [-p PORT]
+```
+
## `qmk kle2json`
このコマンドにより、生の KLE データから QMK Configurator の JSON へ変換することができます。絶対パスあるいは現在のディレクトリ内のファイル名のいずれかを受け取ります。デフォルトでは、`info.json` が既に存在している場合は上書きしません。上書きするには、`-f` あるいは `--force` フラグを使ってください。
@@ -207,36 +275,6 @@ $ qmk kle2json -f kle.txt -f
Ψ Wrote out to info.json
```
-## `qmk list-keyboards`
-
-このコマンドは現在 `qmk_firmware` で定義されている全てのキーボードを列挙します。
-
-**使用法**:
-
-```
-qmk list-keyboards
-```
-
-## `qmk list-keymaps`
-
-このコマンドは指定されたキーボード(とリビジョン)の全てのキーマップを列挙します。
-
-**使用法**:
-
-```
-qmk list-keymaps -kb planck/ez
-```
-
-## `qmk new-keymap`
-
-このコマンドは、キーボードの既存のデフォルトのキーマップに基づいて新しいキーマップを作成します。
-
-**使用法**:
-
-```
-qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
-```
-
## `qmk pyformat`
このコマンドは `qmk_firmware` 内の python コードを整形します。
diff --git a/docs/ja/cli_configuration.md b/docs/ja/cli_configuration.md
index 7e9c3e57fa0..f4857a60294 100644
--- a/docs/ja/cli_configuration.md
+++ b/docs/ja/cli_configuration.md
@@ -1,8 +1,8 @@
# QMK CLI 設定
このドキュメントは `qmk config` がどのように動作するかを説明します。
@@ -113,7 +113,7 @@ compile.keymap: skully -> None
|-----|---------------|-------------|
| user.keyboard | None | キーボードのパス (例: `clueboard/66/rev4`) |
| user.keymap | None | キーマップ名 (例: `default`) |
-| user.name | None | ユーザの github のユーザ名。 |
+| user.name | None | ユーザの GitHub のユーザ名。 |
# 全ての設定オプション
diff --git a/docs/ja/compatible_microcontrollers.md b/docs/ja/compatible_microcontrollers.md
new file mode 100644
index 00000000000..56f4c029771
--- /dev/null
+++ b/docs/ja/compatible_microcontrollers.md
@@ -0,0 +1,42 @@
+# 互換性のあるマイクロコントローラ
+
+
+
+QMK は十分な容量のフラッシュメモリを備えた USB 対応 AVR または ARM マイクロコントローラで実行されます - 一般的に 32kB 以上ですが、ほとんどの機能を無効にすると*ほんの* 16kB に詰め込むことができます。
+
+## Atmel AVR
+
+以下は、USB スタックとして [LUFA](https://www.fourwalledcubicle.com/LUFA.php) を使います:
+
+* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2)
+* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4)
+* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286)
+
+組み込みの USB インターフェースを持たない、いくつかの MCU は代わりに [V-USB](https://www.obdev.at/products/vusb/index.html) を使います:
+
+* [ATmega32A](https://www.microchip.com/wwwproducts/en/ATmega32A)
+* [ATmega328P](https://www.microchip.com/wwwproducts/en/ATmega328P)
+* [ATmega328](https://www.microchip.com/wwwproducts/en/ATmega328)
+
+## ARM
+
+[ChibiOS](http://www.chibios.org) がサポートする USB 付きの ARM チップを使うこともできます。ほとんどのチップには十分な容量のフラッシュメモリがあります。動作するとわかっているのは:
+
+### STMicroelectronics (STM32)
+
+* [STM32F0x2](https://www.st.com/en/microcontrollers-microprocessors/stm32f0x2.html)
+* [STM32F103](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html)
+* [STM32F303](https://www.st.com/en/microcontrollers-microprocessors/stm32f303.html)
+
+### NXP (Kinetis)
+
+* [MKL26Z64](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/kl-series-cortex-m0-plus/kinetis-kl2x-72-96-mhz-usb-ultra-low-power-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KL2x)
+* [MK20DX128](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-50-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-based-on-arm-cortex-m4-core:K20_50)
+* [MK20DX256](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72)
+
+## Atmel ATSAM
+
+Atmel の ATSAM マイクロコントローラの一つである、[Massdrop keyboards](https://github.com/qmk/qmk_firmware/tree/master/keyboards/massdrop) で使用されている [ATSAMD51J18A](https://www.microchip.com/wwwproducts/en/ATSAMD51J18A) には限定的なサポートがあります。
diff --git a/docs/ja/configurator_step_by_step.md b/docs/ja/configurator_step_by_step.md
new file mode 100644
index 00000000000..92be0f16a95
--- /dev/null
+++ b/docs/ja/configurator_step_by_step.md
@@ -0,0 +1,67 @@
+# QMK Configurator: ステップ・バイ・ステップ
+
+
+
+このページでは、QMK Configurator でファームウェアを構築する手順を説明します。
+
+## ステップ 1: キーボードを選ぶ
+
+ドロップダウンボックスをクリックして、キーマップを作成するキーボードを選択します。
+
+?> **キーボードに複数のバージョンがある場合は、正しいバージョンを選択してください。**
+
+大事なことなのでもう一度言います。
+
+!> **正しいバージョンを選択してください!**
+
+キーボードが QMK を搭載していると宣伝されていてもリストにない場合は、開発者がまだ作業中か、私たちがまだマージするきっかけがなかった可能性があります。
+アクティブな [プルリクエスト](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) がない場合、[qmk_firmware](https://github.com/qmk/qmk_firmware/issues)で報告して、その特定のキーボードのサポートをリクエストします。
+製作者自身の GitHub アカウントにある QMK 搭載キーボードもあります。
+それも再確認してください。
+
+## ステップ2: キーボードのレイアウトを選択する
+
+作成したいと思うキーマップに最も近いレイアウトを選択します。一部のキーボードには、まだ十分なレイアウトや正しいレイアウトが定義されていません。これらは将来サポートされる予定です。
+
+## ステップ3: キーマップの名前を決める
+
+お好みの名前をキーマップにつけます。
+
+?> コンパイル時に問題が発生した場合は、もしかすると QMK ファームウェアリポジトリに既に同じ名前が存在しているのかもしれません。名前を変更してみてください。
+
+## ステップ4: キーマップを定義する
+
+キーコードの入力は、3つの方法のいずれかで行います。
+
+1. ドラッグ・アンド・ドロップ
+2. レイアウト上の空の場所をクリックして、希望するキーコードをクリックします
+3. レイアウト上の空の場所をクリックして、キーボードの物理キーを押します
+
+?> マウスをキーの上に置くと、そのキーコードの機能の短い説明文が出ます。より詳細な説明については以下を見てください:
+
+* [基本的なキーコードリファレンス](ja/keycodes_basic.md)
+* [高度なキーコードリファレンス](ja/feature_advanced_keycodes.md)
+
+!> 選択したレイアウトが物理的なビルドと一致しない場合は、使用していないキーは空白のままにしておきます。どのキーが使用されているかわからない場合、例えば、バックスペースキーは1つだが `LAYOUT_all` には2つのキーがある場合は、同じキーコードを両方の場所に配置してください。
+
+## ステップ5: 後日のためにキーマップを保存する
+
+キーマップに満足するか、または後で作業したい場合は、`Export Keymap' ボタンを押します。
+これでキーマップがあなたのコンピュータに保存されます。
+その後、`Import Keymap` ボタンを押すことで、この .json ファイルを後で読み込むことができます。
+
+!> **注意:** このファイルは、kbfirmware.com またはその他のツールに使用される .json ファイルと同じ形式ではありません。これらのツールにこの .json を使用したり、QMK Configurator でこれらのツールの .json を使用しようとすると、問題が発生します。
+
+## ステップ6: ファームウェアをコンパイルする
+
+緑色の `Compile` ボタンを押します。
+
+コンパイルが完了すると、緑色の `Download Firmware` ボタンを押すことができます。
+
+## 次のステップ: キーボードに書き込む(フラッシュする)
+
+[ファームウェアを書きこむ](ja/newbs_flashing.md) を参照してください。
diff --git a/docs/ja/configurator_troubleshooting.md b/docs/ja/configurator_troubleshooting.md
new file mode 100644
index 00000000000..5979341c6e8
--- /dev/null
+++ b/docs/ja/configurator_troubleshooting.md
@@ -0,0 +1,32 @@
+# Configurator トラブルシューティング
+
+
+
+## 私の .json ファイルが動きません
+
+.json ファイルが QMK Configurator で作ったものの場合、おめでとうございます。バグに遭遇しました。 [qmk_configurator](https://github.com/qmk/qmk_configurator/issues) で報告してください。
+
+そうでない場合は、... 他の .json ファイルを使用しないようにという、上に書いた注意書きを見逃してませんか?
+
+#### レイアウトに余分なスペースがありますか?どうすればいいですか?
+
+もしスペースバーが3つに分かれている場合は、全てスペースバーで埋めるのが最善の方法です。バックスペースや Shift キーについても同じことができます。
+
+#### キーコードってなに?
+
+以下を見てください。
+
+* [基本的なキーコードリファレンス](ja/keycodes_basic.md)
+* [高度なキーコードリファレンス](ja/feature_advanced_keycodes.md)
+
+#### コンパイルできません
+
+キーマップの他のレイヤーを再確認して、おかしなキーが存在しないことを確認してください。
+
+## 問題とバグ
+
+私たちは利用者の依頼やバグレポートを常に受け入れています。[qmk_configurator](https://github.com/qmk/qmk_configurator/issues) で報告してください。
diff --git a/docs/ja/custom_quantum_functions.md b/docs/ja/custom_quantum_functions.md
index 7e4fbd897ee..1524717c8e3 100644
--- a/docs/ja/custom_quantum_functions.md
+++ b/docs/ja/custom_quantum_functions.md
@@ -62,7 +62,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER:
// enter が押された時に音を再生します
if (record->event.pressed) {
- PLAY_NOTE_ARRAY(tone_qwerty);
+ PLAY_SONG(tone_qwerty);
}
return true; // QMK に enter のプレスまたはリリースイベントを送信させます
default:
@@ -440,7 +440,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER:
// enter が押された時に音を再生します
if (record->event.pressed) {
- PLAY_NOTE_ARRAY(tone_qwerty);
+ PLAY_SONG(tone_qwerty);
}
return true; // QMK に enter のプレスまたはリリースイベントを送信させます
case RGB_LYR: // これにより、アンダーグローをレイヤー表示として、あるいは通常通りに使うことができます。
@@ -511,7 +511,7 @@ void eeconfig_init_user(void) { // EEPROM がリセットされます!
キーコードに基づいて `TAPPING_TERM` を変更するには、次のようなものを `keymap.c` ファイルに追加します:
```c
-uint16_t get_tapping_term(uint16_t keycode) {
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SFT_T(KC_SPC):
return TAPPING_TERM + 1250;
@@ -528,7 +528,7 @@ uint16_t get_tapping_term(uint16_t keycode) {
キーコードに基づいて `IGNORE_MOD_TAP_INTERRUPT` の値を変更するには、次のようなものを `keymap.c` ファイルに追加します:
```c
-bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
+bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SFT_T(KC_SPC):
return true;
diff --git a/docs/ja/documentation_best_practices.md b/docs/ja/documentation_best_practices.md
new file mode 100644
index 00000000000..50ec4ea6afe
--- /dev/null
+++ b/docs/ja/documentation_best_practices.md
@@ -0,0 +1,69 @@
+# ドキュメントベストプラクティス
+
+
+
+このページは QMK のためのドキュメントを作成する時のベストプラクティスを文章化するためのものです。これらのガイドラインに従うことで、一貫したトーンとスタイルを維持することでき、他の人が QMK をより理解しやすくすることができます。
+
+# ページの開始
+
+ドキュメントページは通常 H1 ヘッダで始まり、最初の段落を使ってこのページの内容を説明します。この見出しと段落は目次の次にあるため、見出しは短くして空白の無い長い文字列を避けるように気を付けてください。
+
+例:
+
+```
+# My Page Title
+
+This page covers my super cool feature. You can use this feature to make coffee, squeeze fresh oj, and have an egg mcmuffin and hashbrowns delivered from your local macca's by drone.
+```
+
+# 見出し
+
+通常、ページには複数の "H1" 見出しが有るべきです。H1 と H2 見出しのみが目次に含まれるので、適切に計画してください。目次が広くなりすぎないように、H1 と H2 の見出しでは幅を広げないようにしてください。
+
+# スタイル付きのヒントブロック
+
+注意を引くためにテキストの周りにスタイル付きのヒントブロックを描くことができます。
+
+### 重要なもの
+
+```
+!> This is important
+```
+
+以下のように表示されます:
+
+!> This is important
+
+### 一般的なヒント
+
+```
+?> This is a helpful tip.
+```
+
+以下のように表示されます:
+
+?> This is a helpful tip.
+
+
+# 機能を文章化する
+
+QMK のために新しい機能を作成した場合、そのドキュメントページを作成してください。長い必要は無く、機能を説明する幾つかの文と、関連するキーコードを列挙した表で十分です。以下は基本的なテンプレートです:
+
+```markdown
+# My Cool Feature
+
+This page describes my cool feature. You can use my cool feature to make coffee and order cream and sugar to be delivered via drone.
+
+## My Cool Feature Keycodes
+
+|Long Name|Short Name|Description|
+|---------|----------|-----------|
+|KC_COFFEE||Make Coffee|
+|KC_CREAM||Order Cream|
+|KC_SUGAR||Order Sugar|
+```
+
+ドキュメントを `docs/feature_.md` に配置し、そのファイルを `docs/_summary.md` の適切な場所に追加します。キーコードを追加した場合は、機能ページに戻るリンクとともに `docs/keycodes.md` に追加するようにしてください。
diff --git a/docs/ja/documentation_templates.md b/docs/ja/documentation_templates.md
new file mode 100644
index 00000000000..a767c671a8b
--- /dev/null
+++ b/docs/ja/documentation_templates.md
@@ -0,0 +1,45 @@
+# ドキュメントテンプレート
+
+
+
+このページでは、新しいキーマップやキーボードを QMK に提出する際に使うべきテンプレートをまとめています。
+
+## キーマップ `readme.md` テンプレート :id=keyboard-readmemd-template
+
+ほとんどのキーマップには、レイアウトを表す画像があります。画像を作成するには、[Keyboard Layout Editor](http://keyboard-layout-editor.com) を使うことができます。画像は [Imgur](http://imgur.com) や別のホスティングサービスにアップロードし、プルリクエストに画像を含めないでください。
+
+画像の下には、キーマップを理解してもらうための簡単な説明文を書いてください。
+
+```
+
+
+# Default Clueboard Layout
+
+This is the default layout that comes flashed on every Clueboard. For the most
+part it's a straightforward and easy to follow layout. The only unusual key is
+the key in the upper left, which sends Escape normally, but Grave when any of
+the Ctrl, Alt, or GUI modifiers are held down.
+```
+
+## キーボード `readme.md` テンプレート
+
+```
+# Planck
+
+
+
+A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
+
+* Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
+* Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
+* Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make planck/rev4: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/docs/ja/driver_installation_zadig.md b/docs/ja/driver_installation_zadig.md
index 268940ec066..1d5e8552a48 100644
--- a/docs/ja/driver_installation_zadig.md
+++ b/docs/ja/driver_installation_zadig.md
@@ -1,8 +1,8 @@
# Zadig を使ったブートローダドライバのインストール
QMK はホストにたいして通常の HID キーボードデバイスとして振る舞うため特別なドライバは必要ありません。しかし、Windows でのキーボードへの書き込みは、多くの場合、キーボードをリセットした時に現れるブートローダデバイスで*行います*。
diff --git a/docs/ja/faq_build.md b/docs/ja/faq_build.md
index 9b4ce12a486..2b63cef85a9 100644
--- a/docs/ja/faq_build.md
+++ b/docs/ja/faq_build.md
@@ -1,8 +1,8 @@
# よくあるビルドの質問
このページは QMK のビルドに関する質問を説明します。まだビルドをしていない場合は、[ビルド環境のセットアップ](ja/getting_started_build_tools.md) および [Make 手順](ja/getting_started_make_guide.md)ガイドを読むべきです。
@@ -32,33 +32,30 @@ sudo udevadm trigger
**/etc/udev/rules.d/50-atmel-dfu.rules:**
```
# Atmel ATMega32U4
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess", RUN{builtin}+="uaccess"
# Atmel USBKEY AT90USB1287
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess", RUN{builtin}+="uaccess"
# Atmel ATMega32U2
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess", RUN{builtin}+="uaccess"
```
-**/etc/udev/rules.d/52-tmk-keyboard.rules:**
-```
-# tmk keyboard products https://github.com/tmk/tmk_keyboard
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
-```
**/etc/udev/rules.d/54-input-club-keyboard.rules:**
```
# Input Club keyboard bootloader
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess", RUN{builtin}+="uaccess"
```
**/etc/udev/rules.d/55-caterina.rules:**
```
# ModemManager should ignore the following devices
-ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
-ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", RUN{builtin}+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1"
```
-**注意:** ModemManager フィルタリングは厳格モードでは無い場合のみ動作します。以下のコマンドでその設定を変更することができます:
+**注意:** 古い(1.12以前の) ModemManager では、フィルタリングは厳密なモードではない場合にのみ動作し、以下のコマンドはその設定を更新することができます。
```console
sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service
sudo systemctl daemon-reload
@@ -68,15 +65,15 @@ sudo systemctl restart ModemManager
**/etc/udev/rules.d/56-dfu-util.rules:**
```
# stm32duino
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess", RUN{builtin}+="uaccess"
# Generic stm32
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess", RUN{builtin}+="uaccess"
```
**/etc/udev/rules.d/57-bootloadhid.rules:**
```
# bootloadHID
-SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess", RUN{builtin}+="uaccess"
```
### Linux のブートローダモードで Serial デバイスが検知されない
@@ -116,23 +113,14 @@ OPT_DEFS += -DBOOTLOADER_SIZE=2048
```
## MacOS での `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)`
+
これは brew での更新に関する問題で、avr-gcc が依存するシンボリックリンクを壊します。
解決法は全ての影響を受けたモジュールを削除し再インストールすることです。
```
-brew rm avr-gcc
-brew rm avr-gcc@8
-brew rm dfu-programmer
-brew rm dfu-util
-brew rm gcc-arm-none-eabi
-brew rm arm-gcc-bin@8
-brew rm avrdude
-brew install avr-gcc@8
-brew install dfu-programmer
-brew install dfu-util
-brew install arm-gcc-bin@8
-brew install avrdude
+brew rm avr-gcc avr-gcc@8 dfu-programmer dfu-util gcc-arm-none-eabi arm-gcc-bin@8 avrdude qmk
+brew install qmk/qmk/qmk
brew link --force avr-gcc@8
brew link --force arm-gcc-bin@8
```
diff --git a/docs/ja/faq_debug.md b/docs/ja/faq_debug.md
index 856e9473a17..b70edf63d75 100644
--- a/docs/ja/faq_debug.md
+++ b/docs/ja/faq_debug.md
@@ -1,8 +1,8 @@
# デバッグの FAQ
このページは、キーボードのトラブルシューティングについての様々な一般的な質問を説明します。
diff --git a/docs/ja/feature_advanced_keycodes.md b/docs/ja/feature_advanced_keycodes.md
index c6e21feb946..502a67f80c4 100644
--- a/docs/ja/feature_advanced_keycodes.md
+++ b/docs/ja/feature_advanced_keycodes.md
@@ -1,53 +1,10 @@
-# レイヤーの切り替えとトグル :id=switching-and-toggling-layers
+# 修飾キー :id=modifier-keys
-これらの機能により、様々な方法でレイヤーをアクティブ化することができます。レイヤーは一般的に独立したレイアウトでは無いことに注意してください -- 複数のレイヤーを一度にアクティブ化することができ、レイヤーが `KC_TRNS` を使ってキーの押下を下のレイヤーに渡すことが一般的です。レイヤーの詳細については、[キーマップの概要](ja/keymap.md#keymap-and-layers)を見てください。MO()、LM()、TT() あるいは LT() を使って一時的なレイヤーの切り替えを使う場合、上のレイヤーのキーを透過にするようにしてください。さもないと意図したように動作しないかもしれません。
-
-* `DF(layer)` - デフォルトレイヤーを切り替えます。デフォルトレイヤーは、他のレイヤーがその上に積み重なっている、常にアクティブな基本レイヤーです。デフォルトレイヤーの詳細については以下を見てください。これは QWERTY から Dvorak レイアウトに切り替えるために使うことができます。(これは一時的な切り替えであり、キーボードの電源が切れるまでしか持続しないことに注意してください。デフォルトレイヤーを永続的に変更するには、[process_record_user](ja/custom_quantum_functions.md#programming-the-behavior-of-any-keycode) 内で `set_single_persistent_default_layer` 関数を呼び出すなど、より深いカスタマイズが必要です。)
-* `MO(layer)` - 一時的に*レイヤー*をアクティブにします。キーを放すとすぐに、レイヤーは非アクティブになります。
-* `LM(layer, mod)` - (`MO` のように)一時的に*レイヤー*をアクティブにしますが、モディファイア *mod* がアクティブな状態です。layer 0-15 と、左モディファイアのみをサポートします: `MOD_LCTL`、`MOD_LSFT`、`MOD_LALT`、`MOD_LGUI` (`KC_` の代わりに `MOD_` 定数を使うことに注意してください)。これらのモディファイアは、例えば `LM(_RAISE, MOD_LCTL | MOD_LALT)` のように、ビット単位の OR を使って組み合わせることができます。
-* `LT(layer, kc)` - ホールドされた時に*レイヤー*を一時的にアクティブにし、タップされた時に *kc* を送信します。layer 0-15 のみをサポートします。
-* `OSL(layer)` - 次のキーが押されるまで、一時的に*レイヤー*をアクティブにします。詳細と追加機能については、[ワンショットキー](ja/one_shot_keys.md)を見てください。
-* `TG(layer)` - *レイヤー*を切り替えます。非アクティブな場合はアクティブにし、逆も同様です。
-* `TO(layer)` - *レイヤー*をアクティブにし、他の全てのレイヤー(デフォルトレイヤーを除く)を非アクティブにします。この関数は特別です。1つのレイヤーをアクティブなレイヤースタックに追加/削除する代わりに、現在のアクティブなレイヤーを完全に置き換え、唯一上位のレイヤーを下位のレイヤーで置き換えることができるからです。これはキーダウンで(キーが押されるとすぐに)アクティブになります。
-* `TT(layer)` - レイヤーのタップ切り替え。キーを押したままにすると*レイヤー*がアクティブにされ、放すと非アクティブになります (`MO` 風)。繰り返しタップすると、レイヤーはオンあるいはオフを切り替えます (`TG` 風)。デフォルトでは5回のタップが必要ですが、`TAPPING_TOGGLE` を定義することで変更することができます -- 例えば、2回のタップだけで切り替えるには、`#define TAPPING_TOGGLE 2` を定義します。
-
-## 注意事項
-
-現在のところ、`LT()` と `MT()` は[基本的なキーコードセット](ja/keycodes_basic.md)に制限されています。つまり、`LCTL()`、`KC_TILD` あるいは `0xFF` より大きなキーコードを使うことができません。レイヤータップあるいはモッドタップのキーコードの一部として指定されたモディファイアは無視されます。タップしたキーコードにモディファイアを適用する必要がある場合は、[タップダンス](ja/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys)を使うことができます。
-
-さらに、モッドタップあるいはレイヤータップで少なくとも1つの右手用のモディファイアが指定された場合、指定された全てのモディファイアが右手用になるため、2つをうまく組み合わせて一致させることはできません。
-
-# レイヤーの使用
-
-レイヤーを切り替える時は注意してください。(キーボードを取り外さずに)そのレイヤーを非アクティブにすることができずレイヤーから移動できなくなる可能性があります。最も一般的な問題を避けるためのガイドラインを作成しました。
-
-## 初心者
-
-QMK を使い始めたばかりの場合は、全てを単純にしたいでしょう。レイヤーをセットアップする時は、これらのガイドラインに従ってください:
-
-* デフォルトの "base" レイヤーとして、layer 0 をセットアップします。これは通常の入力レイヤーであり、任意のレイアウト (qwerty、dvorak、colemak など)にすることができます。通常はキーボードのキーのほとんどまたは全てが定義されているため、これを最下位のレイヤーとして設定することが重要です。そうすることで、もしそれが他のレイヤーの上 (つまりレイヤー番号が大きい)にある場合の影響を防ぎます。
-* layer 0 をルートとして、レイヤーを "ツリー" レイアウトに配置します。他の複数のレイヤーから同じレイヤーに行こうとしないでください。
-* 各レイヤーのキーマップでは、より高い番号のレイヤーのみを参照します。レイヤーは最大の番号(最上位)のアクティブレイヤーから処理されるため、下位レイヤーの状態を変更するのは難しくエラーが発生しやすくなります。
-
-## 中級ユーザ
-
-複数の基本レイヤーが必要な場合があります。例えば、QWERTY と Dvorak を切り替える場合、国ごとに異なるレイアウトを切り替える場合、あるいは異なるビデオゲームごとにレイアウトを切り替える場合などです。基本レイヤーは常に最小の番号のレイヤーである必要があります。複数の基本レイヤーがある場合、常にそれらを相互排他的に扱う必要があります。1つの基本レイヤーがオンの場合、他をオフにします。
-
-## 上級ユーザ
-
-レイヤーがどのように動作し、何ができるかを理解したら、より創造的になります。初心者のセクションで列挙されている規則は、幾つかの巧妙な詳細を回避するのに役立ちますが、特に超コンパクトなキーボードのユーザにとって制約になる場合があります。レイヤーの仕組みを理解することで、レイヤーをより高度な方法で使うことができます。
-
-レイヤーは番号順に上に積み重なっています。キーの押下の動作を決定する時に、QMK は上から順にレイヤーを走査し、`KC_TRNS` に設定されていない最初のアクティブなレイヤーに到達すると停止します。結果として、現在のレイヤーよりも数値的に低いレイヤーをアクティブにし、現在のレイヤー(あるいはアクティブでターゲットレイヤーよりも高い別のレイヤー)に `KC_TRNS` 以外のものがある場合、それが送信されるキーであり、アクティブ化したばかりのレイヤー上のキーではありません。これが、ほとんどの人の "なぜレイヤーが切り替わらないのか" 問題の原因です。
-
-場合によっては、マクロ内あるいはタップダンスルーチンの一部としてレイヤーを切り替えほうが良いかもしれません。`layer_on` はレイヤーをアクティブにし、`layer_off` はそれを非アクティブにします。もっと多くのレイヤーに関する関数は、[action_layer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action_layer.h) で見つけることができます。
-
-# 修飾キー :id=modifier-keys
-
以下のようにキーコードとモディファイアを組み合わせることができます。押すと、モディファイアのキーダウンイベントが送信され、次に `kc` のキーダウンイベントが送信されます。放すと、`kc` のキーアップイベントが送信され、次にモディファイアのキーアップイベントが送信されます。
| キー | エイリアス | 説明 |
@@ -66,12 +23,16 @@ QMK を使い始めたばかりの場合は、全てを単純にしたいでし
| `MEH(kc)` | | 左 Control、左 Shift、左 Alt を押しながら `kc` を押します。 |
| `HYPR(kc)` | | 左 Control、左 Shift、左 Alt、左 GUI を押しながら `kc` を押します。 |
-また、それらを繋げることができます。例えば、`LCTL(LALT(KC_DEL))` は1回のキー押下で Control+Alt+Delete を送信するキーを作成します。
+また、それらを繋げることができます。例えば、`LCTL(LALT(KC_DEL))` または `C(A(KC_DEL))` は1回のキー押下で Control+Alt+Delete を送信するキーを作成します。
-# 過去の内容
+# 過去の内容 :id=legacy-content
このページには多くの機能が含まれていました。このページを構成していた多くのセクションをそれぞれのページに移動しました。これより下は全て単なるリダイレクトであるため、web上で古いリンクをたどっている人は探しているものを見つけることができます。
+## レイヤー :id=switching-and-toggling-layers
+
+* [レイヤー](ja/feature_layers.md)
+
## モッドタップ :id=mod-tap
* [モッドタップ](ja/mod_tap.md)
diff --git a/docs/ja/feature_audio.md b/docs/ja/feature_audio.md
index 0f845161eb8..2d13c3f7ccc 100644
--- a/docs/ja/feature_audio.md
+++ b/docs/ja/feature_audio.md
@@ -1,8 +1,8 @@
# オーディオ
キーボードは音を出すことができます!Planck、Preonic あるいは特定の PWM 対応ピンにアクセスできる AVR キーボードがある場合は、単純なスピーカーを接続してビープ音を鳴らすことができます。これらのビープ音を使ってレイヤーの変化、モディファイア、特殊キーを示したり、あるいは単にイカした8ビットの曲を鳴らすことができます。
diff --git a/docs/ja/feature_auto_shift.md b/docs/ja/feature_auto_shift.md
index c230f93815e..50d40b17b1f 100644
--- a/docs/ja/feature_auto_shift.md
+++ b/docs/ja/feature_auto_shift.md
@@ -1,8 +1,8 @@
# 自動シフト: なぜシフトキーが必要ですか?
キーをタップすると、その文字を取得します。キーをタップするが、*わずかに*長く押し続けると、シフト状態になります。ほら!シフトキーは必要ありません!
diff --git a/docs/ja/feature_backlight.md b/docs/ja/feature_backlight.md
index e722656b79e..760c6444c23 100644
--- a/docs/ja/feature_backlight.md
+++ b/docs/ja/feature_backlight.md
@@ -1,8 +1,8 @@
# バックライト
多くのキーボードは、キースイッチを貫通して配置されたり、キースイッチの下に配置された個々の LED によって、バックライトキーをサポートします。この機能は通常スイッチごとに単一の色しか使用できないため、[RGB アンダーグロー](ja/feature_rgblight.md)および [RGB マトリックス](ja/feature_rgb_matrix.md)機能のどちらとも異なりますが、キーボードに複数の異なる単一色の LED を取り付けることは当然可能です。
@@ -94,29 +94,29 @@ BACKLIGHT_DRIVER = pwm
ハードウェア PWM は以下の表に従ってサポートされます:
-| バックライトピン | AT90USB64/128 | ATmega16/32U4 | ATmega16/32U2 | ATmega32A | ATmega328P |
+| バックライトピン | AT90USB64/128 | ATmega16/32U4 | ATmega16/32U2 | ATmega32A | ATmega328/P |
|-------------|-------------|-------------|-------------|---------|----------|
-| `B1` | | | | | Timer 1 |
-| `B2` | | | | | Timer 1 |
-| `B5` | Timer 1 | Timer 1 | | | |
-| `B6` | Timer 1 | Timer 1 | | | |
-| `B7` | Timer 1 | Timer 1 | Timer 1 | | |
-| `C4` | Timer 3 | | | | |
-| `C5` | Timer 3 | | Timer 1 | | |
-| `C6` | Timer 3 | Timer 3 | Timer 1 | | |
-| `D4` | | | | Timer 1 | |
-| `D5` | | | | Timer 1 | |
+| `B1` | | | | | Timer 1 |
+| `B2` | | | | | Timer 1 |
+| `B5` | Timer 1 | Timer 1 | | | |
+| `B6` | Timer 1 | Timer 1 | | | |
+| `B7` | Timer 1 | Timer 1 | Timer 1 | | |
+| `C4` | Timer 3 | | | | |
+| `C5` | Timer 3 | | Timer 1 | | |
+| `C6` | Timer 3 | Timer 3 | Timer 1 | | |
+| `D4` | | | | Timer 1 | |
+| `D5` | | | | Timer 1 | |
他の全てのピンはソフトウェア PWM を使います。[オーディオ](ja/feature_audio.md)機能が無効あるいは1つのタイマだけを使っている場合は、ハードウェアタイマによってバックライト PWM を引き起こすことができます:
| オーディオピン | オーディオタイマ | ソフトウェア PWM タイマ |
|---------|-----------|------------------|
-| `C4` | Timer 3 | Timer 1 |
-| `C5` | Timer 3 | Timer 1 |
-| `C6` | Timer 3 | Timer 1 |
-| `B5` | Timer 1 | Timer 3 |
-| `B6` | Timer 1 | Timer 3 |
-| `B7` | Timer 1 | Timer 3 |
+| `C4` | Timer 3 | Timer 1 |
+| `C5` | Timer 3 | Timer 1 |
+| `C6` | Timer 3 | Timer 1 |
+| `B5` | Timer 1 | Timer 3 |
+| `B6` | Timer 1 | Timer 3 |
+| `B7` | Timer 1 | Timer 3 |
両方のタイマーがオーディオのために使われている場合、バックライト PWM はハードウェアタイマを使いませんが、代わりにマトリックススキャンの間に引き起こされます。この場合、PWM の計算は十分なタイミングの精度で呼ばれないかもしれないため、バックライトの明滅はサポートされず、バックライトもちらつくかもしれません。
@@ -126,13 +126,13 @@ BACKLIGHT_DRIVER = pwm
| 定義 | デフォルト | 説明 |
|---------------------|-------------|--------------------------------------------------------------------------------------------------------------|
-| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
-| `BACKLIGHT_PINS` | *定義なし* | 実験的: 詳細は以下を見てください |
-| `BACKLIGHT_LEVELS` | `3` | 輝度のレベルの数 (オフを除いて最大 31) |
+| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
+| `BACKLIGHT_PINS` | *定義なし* | 実験的: 詳細は以下を見てください |
+| `BACKLIGHT_LEVELS` | `3` | 輝度のレベルの数 (オフを除いて最大 31) |
| `BACKLIGHT_CAPS_LOCK` | *定義なし* | バックライトを使って Caps Lock のインジケータを有効にする (専用 LED の無いキーボードのため) |
| `BACKLIGHT_BREATHING` | *定義なし* | サポートされる場合は、バックライトの明滅動作を有効にする |
-| `BREATHING_PERIOD` | `6` | 各バックライトの "明滅" の長さ(秒) |
-| `BACKLIGHT_ON_STATE` | `1` | バックライトが "オン" の時のバックライトピンの状態 - high の場合は `1`、low の場合は `0` |
+| `BREATHING_PERIOD` | `6` | 各バックライトの "明滅" の長さ(秒) |
+| `BACKLIGHT_ON_STATE` | `1` | バックライトが "オン" の時のバックライトピンの状態 - high の場合は `1`、low の場合は `0` |
### バックライトオン状態
@@ -192,10 +192,10 @@ BACKLIGHT_DRIVER = pwm
| 定義 | デフォルト | 説明 |
|------------------------|-------------|-------------------------------------------------------------------------------------------------------------|
-| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
-| `BACKLIGHT_PWM_DRIVER` | `PWMD4` | 使用する PWM ドライバ。ピンから PWM タイマへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
-| `BACKLIGHT_PWM_CHANNEL` | `3` | 使用する PWM チャンネル。ピンから PWM チャンネルへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
-| `BACKLIGHT_PAL_MODE` | `2` | 使用するピンの代替機能。ピンの AF マッピングについては ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
+| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
+| `BACKLIGHT_PWM_DRIVER` | `PWMD4` | 使用する PWM ドライバ。ピンから PWM タイマへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
+| `BACKLIGHT_PWM_CHANNEL` | `3` | 使用する PWM チャンネル。ピンから PWM チャンネルへのマッピングについては、ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
+| `BACKLIGHT_PAL_MODE` | `2` | 使用するピンの代替機能。ピンの AF マッピングについては ST データシートを見てください。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
## Software PWM Driver :id=software-pwm-driver
@@ -210,7 +210,7 @@ BACKLIGHT_DRIVER = software
| 定義 | デフォルト | 説明 |
|-----------------|-------------|-------------------------------------------------------------------------------------------------------------|
-| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
+| `BACKLIGHT_PIN` | `B7` | LED を制御するピン。自身のキーボードを設計している場合を除き、これを変更する必要はないはずです |
| `BACKLIGHT_PINS` | *定義なし* | 実験的: 詳細は以下を見てください |
### 複数のバックライトピン
diff --git a/docs/ja/feature_bluetooth.md b/docs/ja/feature_bluetooth.md
index 90b88bd7c24..4443a4e3ea5 100644
--- a/docs/ja/feature_bluetooth.md
+++ b/docs/ja/feature_bluetooth.md
@@ -1,8 +1,8 @@
# Bluetooth
## Bluetooth の既知のサポートハードウェア
diff --git a/docs/ja/feature_bootmagic.md b/docs/ja/feature_bootmagic.md
index 1f38914edae..20a93d5c448 100644
--- a/docs/ja/feature_bootmagic.md
+++ b/docs/ja/feature_bootmagic.md
@@ -1,8 +1,8 @@
# ブートマジック
再書き込みせずにキーボードの挙動を変更することができる、3つの独立した関連する機能があります。それぞれは似たような機能を持ちますが、キーボードがどのように設定されているかによって異なる方法でアクセスされます。
@@ -149,6 +149,17 @@ BOOTMAGIC_ENABLE = lite
!> ブートマジックライトを使用すると、EEPROM を**常にリセットします**。つまり保存された全ての設定は失われます。
+## 分割キーボード
+
+`SPLIT_HAND_PIN` のようなオプションで、左右の設定があらかじめ決められている場合は、キーボードの左右で別のキーを設定する必要があるかもしれません。これを行うには、`config.h` ファイルに以下のエントリを追加します。
+
+```c
+#define BOOTMAGIC_LITE_ROW_RIGHT 4
+#define BOOTMAGIC_LITE_COLUMN_RIGHT 1
+```
+
+デフォルトでは、これらの値は設定されていません。
+
## 高度なブートマジックライト
`bootmagic_lite` 関数は必要に応じてコード内で置き換えることができるように、弱く定義されています。これの良い例は Zeal60 キーボードで、追加の処理が必要です。
diff --git a/docs/ja/feature_layers.md b/docs/ja/feature_layers.md
new file mode 100644
index 00000000000..6b18a30c7c4
--- /dev/null
+++ b/docs/ja/feature_layers.md
@@ -0,0 +1,99 @@
+# レイヤー :id=layers
+
+
+
+QMK ファームウェアの最も強力で良く使われている機能の一つは、レイヤーを使う機能です。ほとんどの人にとって、これはラップトップやタブレットキーボードにあるのと同じように、様々なキーを可能にするファンクションキーに相当します。
+
+レイヤースタックがどのように動作するかの詳細な説明については、[キーマップの概要](ja/keymap.md#keymap-and-layers)を調べてください。
+
+## レイヤーの切り替えとトグル :id=switching-and-toggling-layers
+
+以下の関数により、様々な方法でレイヤーをアクティブにすることができます。レイヤーは通常、独立したレイアウトでは無いことに注意してください -- 複数のレイヤーを一度にアクティブにすることができ、レイヤーが `KC_TRNS` を使ってキーの押下を下のレイヤーへと透過させることが一般的です。MO()、LM()、TT() あるいは LT() を使って一時的なレイヤーの切り替えを使う場合、上のレイヤーのキーを透過にするようにしてください。さもないと意図したように動作しないかもしれません。
+
+* `DF(layer)` - デフォルトレイヤーを切り替えます。デフォルトレイヤーは、他のレイヤーがその上に積み重なっている、常にアクティブな基本レイヤーです。デフォルトレイヤーの詳細については以下を見てください。これは QWERTY から Dvorak レイアウトに切り替えるために使うことができます。(これは一時的な切り替えであり、キーボードの電源が切れるまでしか持続しないことに注意してください。デフォルトレイヤーを永続的に変更するには、[process_record_user](ja/custom_quantum_functions.md#programming-the-behavior-of-any-keycode) 内で `set_single_persistent_default_layer` 関数を呼び出すなど、より深いカスタマイズが必要です。)
+* `MO(layer)` - 一時的に*レイヤー*をアクティブにします。キーを放すとすぐに、レイヤーは非アクティブになります。
+* `LM(layer, mod)` - (`MO` のように)一時的に*レイヤー*をアクティブにしますが、モディファイア *mod* がアクティブな状態です。layer 0-15 と、左モディファイアのみをサポートします: `MOD_LCTL`、`MOD_LSFT`、`MOD_LALT`、`MOD_LGUI` (`KC_` 定数の代わりに `MOD_` 定数を使うことに注意してください)。これらのモディファイアは、例えば `LM(_RAISE, MOD_LCTL | MOD_LALT)` のように、ビット単位の OR を使って組み合わせることができます。
+* `LT(layer, kc)` - ホールドされた時に*レイヤー*を一時的にアクティブにし、タップされた時に *kc* を送信します。layer 0-15 のみをサポートします。
+* `OSL(layer)` - 次のキーが押されるまで、一時的に*レイヤー*をアクティブにします。詳細と追加機能については、[ワンショットキー](ja/one_shot_keys.md)を見てください。
+* `TG(layer)` - *レイヤー*を切り替えます。非アクティブな場合はアクティブにし、逆も同様です。
+* `TO(layer)` - *レイヤー*をアクティブにし、他の全てのレイヤー(デフォルトレイヤーを除く)を非アクティブにします。この関数は特別です。1つのレイヤーをアクティブなレイヤースタックに追加/削除する代わりに、現在のアクティブなレイヤーを完全に置き換え、唯一上位のレイヤーを下位のレイヤーで置き換えることができるからです。これはキーダウンで(キーが押されるとすぐに)アクティブになります。
+* `TT(layer)` - レイヤーのタップ切り替え。キーを押したままにすると*レイヤー*がアクティブにされ、放すと非アクティブになります (`MO` 風)。繰り返しタップすると、レイヤーはオンあるいはオフを切り替えます (`TG` 風)。デフォルトでは5回のタップが必要ですが、`TAPPING_TOGGLE` を定義することで変更することができます -- 例えば、2回のタップだけで切り替えるには、`#define TAPPING_TOGGLE 2` を定義します。
+
+### 注意事項 :id=caveats
+
+現在のところ、`LT()` と `MT()` は[基本的なキーコードセット](ja/keycodes_basic.md)に制限されています。つまり、`LCTL()`、`KC_TILD` あるいは `0xFF` より大きなキーコードを使うことができません。特に、`LT` と `MT` のような二重の機能キーは16ビットキーコードを使います。4ビットは機能の識別のために使われ、次の12ビットはパラメータに分かれます。レイヤータップはレイヤーに4ビットを使います(実はレイヤータップがレイヤー 0-15 に制限されている理由です)。モッドタップも同じですが、識別子に4ビット、モッドのために4ビットが使われ、全体でキーコードに8ビットを使います。このため、使用されるキーコードは `0xFF` (0-255) に制限され、基本的なキーコードのみです。
+
+これを拡張してもせいぜい複雑になるだけでしょう。32ビットキーコードに移行すると、これの多くが解決されますが、キーマップマトリックスが使用する領域が2倍になります。また、問題が起きる可能性もあります。タップしたキーコードにモディファイアを適用する必要がある場合は、[タップダンス](ja/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys)を使うことができます。
+
+さらに、モッドタップあるいはレイヤータップで少なくとも1つの右手用のモディファイアが指定された場合、指定された全てのモディファイアが右手用になるため、2つをうまく組み合わせて一致させることはできません。
+
+## レイヤーとの連携 :id=working-with-layers
+
+レイヤーを切り替える時は注意してください。(キーボードを取り外さずに)そのレイヤーを非アクティブにすることができずレイヤーから移動できなくなる可能性があります。最も一般的な問題を避けるためのガイドラインを作成しました。
+
+### 初心者 :id=beginners
+
+QMK を使い始めたばかりの場合は、全てを単純にしたいでしょう。レイヤーをセットアップする時は、これらのガイドラインに従ってください:
+
+* デフォルトの "base" レイヤーとして、layer 0 をセットアップします。これは通常の入力レイヤーであり、任意のレイアウト (qwerty、dvorak、colemak など)にすることができます。通常はキーボードのキーのほとんどまたは全てが定義されているため、これを最下位のレイヤーとして設定することが重要です。そうすることで、もしそれが他のレイヤーの上 (つまりレイヤー番号が大きい)にある場合の影響を防ぎます。
+* layer 0 をルートとして、レイヤーを "ツリー" レイアウトに配置します。他の複数のレイヤーから同じレイヤーに行こうとしないでください。
+* 各レイヤーのキーマップでは、より高い番号のレイヤーのみを参照します。レイヤーは最大の番号(最上位)のアクティブレイヤーから処理されるため、下位レイヤーの状態を変更するのは難しくエラーが発生しやすくなります。
+
+### 中級ユーザ :id=intermediate-users
+
+複数の基本レイヤーが必要な場合があります。例えば、QWERTY と Dvorak を切り替える場合、国ごとに異なるレイアウトを切り替える場合、あるいは異なるビデオゲームごとにレイアウトを切り替える場合などです。基本レイヤーは常に最小の番号のレイヤーである必要があります。複数の基本レイヤーがある場合、常にそれらを相互排他的に扱う必要があります。1つの基本レイヤーがオンの場合、他をオフにします。
+
+### 上級ユーザ :id=advanced-users
+
+レイヤーがどのように動作し、何ができるかを理解したら、より創造的になります。初心者のセクションで列挙されている規則は、幾つかの巧妙な詳細を回避するのに役立ちますが、特に超コンパクトなキーボードのユーザにとって制約になる場合があります。レイヤーの仕組みを理解することで、レイヤーをより高度な方法で使うことができます。
+
+レイヤーは番号順に上に積み重なっています。キーの押下の動作を決定する時に、QMK は上から順にレイヤーを走査し、`KC_TRNS` に設定されていない最初のアクティブなレイヤーに到達すると停止します。結果として、現在のレイヤーよりも数値的に低いレイヤーをアクティブにし、現在のレイヤー(あるいはアクティブでターゲットレイヤーよりも高い別のレイヤー)に `KC_TRNS` 以外のものがある場合、それが送信されるキーであり、アクティブ化したばかりのレイヤー上のキーではありません。これが、ほとんどの人の "なぜレイヤーが切り替わらないのか" 問題の原因です。
+
+場合によっては、マクロ内あるいはタップダンスルーチンの一部としてレイヤーを切り替えほうが良いかもしれません。`layer_on` はレイヤーをアクティブにし、`layer_off` はそれを非アクティブにします。もっと多くのレイヤーに関する関数は、[action_layer.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/action_layer.h) で見つけることができます。
+
+## 関数 :id=functions
+
+レイヤーの使用あるいは操作に関係する多くの関数(と変数)があります。
+
+| 関数 | 説明 |
+|----------------------------------------------|---------------------------------------------------------------------------------------------------------|
+| `layer_state_set(layer_mask)` | 直接レイヤーの状態を設定する (推奨。何をしているのか分かっていない場合は使わないでください)。 |
+| `layer_clear()` | 全てのレイヤーを消去する (全てをオフにします)。 |
+| `layer_move(layer)` | 指定されたレイヤーをオンにし、それ以外をオフにする。 |
+| `layer_on(layer)` | 指定されたレイヤーをオンにし、それ以外を既存の状態のままにする。 |
+| `layer_off(layer)` | 指定されたレイヤーをオフにし、それ以外を既存の状態のままにする。 |
+| `layer_invert(layer)` | 指定されたレイヤーの状態を反転/トグルする。 |
+| `layer_or(layer_mask)` | 指定されたレイヤーと既存のレイヤー状態の間で一致するビットに基づいてレイヤーをオンにする。 |
+| `layer_and(layer_mask)` | 指定されたレイヤーと既存のレイヤー状態の間で有効なビットに基づいてレイヤーをオンにする。 |
+| `layer_xor(layer_mask)` | 指定されたレイヤーと既存のレイヤー状態の間で一致しないビットに基づいてレイヤーをオンにする。 |
+| `layer_debug(layer_mask)` | デバッガのコンソールに現在のビットマスクと最も高いレイヤーを出力する。 |
+| `default_layer_set(layer_mask)` | 直接デフォルトレイヤーの状態を設定する (推奨。何をしているのか分かっていない場合は使わないでください)。 |
+| `default_layer_or(layer_mask)` | 指定されたレイヤーと既存のデフォルトレイヤー状態の間で一致するビットに基づいてレイヤーをオンにする。 |
+| `default_layer_and(layer_mask)` | 指定されたレイヤーと既存のデフォルトレイヤー状態の間で一致する有効なビットに基づいてレイヤーをオンにする。 |
+| `default_layer_xor(layer_mask)` | 指定されたレイヤーと既存のデフォルトレイヤー状態の間で一致しないビットに基づいてレイヤーをオンにする。 |
+| `default_layer_debug(layer_mask)` | デバッガのコンソールに現在のビットマスクと最も高いアクティブなレイヤーを出力する。 |
+| [`set_single_persistent_default_layer(layer)`](ja/ref_functions.md#setting-the-persistent-default-layer) | デフォルトレイヤーを設定し、それを永続化メモリ (EEPROM) に書き込む。 |
+| [`update_tri_layer(x, y, z)`](ja/ref_functions.md#update_tri_layerx-y-z) | レイヤー `x` と `y` の両方がオンであるかを調べ、それに基づいて `z` を設定する(両方がオンの場合オン、そうでなければオフ)。 |
+| [`update_tri_layer_state(state, x, y, z)`](ja/ref_functions.md#update_tri_layer_statestate-x-y-z) | `update_tri_layer(x, y, z)` と同じことをするが、`layer_state_set_*` 関数から呼ばれる。 |
+
+
+呼び出すことができる関数に加えて、レイヤーが変更されるたびに呼び出されるコールバック関数が幾つかあります。これはレイヤー状態を関数に渡し、読み取りや変更することができます。
+
+| コールバック | 説明 |
+|-----------------------------------------------------|----------------------------------------------------------------------------------------|
+| `layer_state_set_kb(layer_state_t state)` | キーボードレベルのレイヤー関数のためのコールバック。 |
+| `layer_state_set_user(layer_state_t state)` | ユーザレベルのレイヤー関数のためのコールバック。 |
+| `default_layer_state_set_kb(layer_state_t state)` | キーボードレベルのデフォルトレイヤー関数のためのコールバック。キーボードの初期化時に呼ばれます。 |
+| `default_layer_state_set_user(layer_state_t state)` | ユーザレベルのデフォルトレイヤー関数のためのコールバック。キーボードの初期化時に呼ばれます。 |
+
+?> これらのコールバックを使うための追加の情報については、[レイヤー変換コード](ja/custom_quantum_functions.md#layer-change-code)のドキュメントを調べてください。
+
+| チェック関数 | 説明 |
+|-------------------------------------------|------------------------------------------------------------------------------|
+| `layer_state_cmp(cmp_layer_state, layer)` | これは `cmp_layer_state` を調べて、指定された `layer` が有効かどうかを確認します。これは、レイヤーコールバックで使うためのものです。 |
+| `layer_state_is(layer)` | これはレイヤーの状態を調べて、指定された `layer` が有効かどうかを確認します。(グローバルレイヤー状態については、`layer_state_cmp` を呼びます)。 |
+
+!> `IS_LAYER_ON(layer)` もありますが、`layer_state_cmp` 関数には、レイヤー0で正しい値を返すようにするために追加の処理があります。さもないと、レイヤー0がオンになっているかどうかを確認する時に誤った値が返されることがあります。
diff --git a/docs/ja/feature_layouts.md b/docs/ja/feature_layouts.md
new file mode 100644
index 00000000000..9b36a1eda56
--- /dev/null
+++ b/docs/ja/feature_layouts.md
@@ -0,0 +1,114 @@
+# レイアウト: 複数のキーボードで1つのキーマップを使用
+
+
+
+`layouts/` フォルダは、様々なキーボードに適用できる色々な物理キーレイアウトを含みます。
+
+```
+layouts/
++ default/
+| + 60_ansi/
+| | + readme.md
+| | + layout.json
+| | + a_good_keymap/
+| | | + keymap.c
+| | | + readme.md
+| | | + config.h
+| | | + rules.mk
+| | + /
+| | + ...
+| + /
++ community/
+| + /
+| + ...
+```
+
+`layouts/default/` と `layouts/community/` は、レイアウト「repositories」の2つの例です。現在のところ、`default` にはユーザの参考用に、レイアウトに関する全ての情報および、`default_` という名前の1つのデフォルトのキーマップが含まれています。`community` には全ての共有キーマップが含まれており、それらはユーザが `layouts/` にクローンするための別のリポジトリに分割することを最終的な目的としていますQMK は `layouts/` 内のすべてのフォルダを検索するため、ここに複数のリポジトリを持つことができます。
+
+各レイアウトフォルダは、レイアウトの物理的な側面に基づいて、可能な限り一般的な名称で(`[a-z0-9_]`)という名前が付けられ、キーボードで定義されるレイアウトと一緒に `readme.md` を含みます。
+
+```md
+# 60_ansi
+
+ LAYOUT_60_ansi
+```
+
+新しい名前は既存のレイアウトで設定された標準に準拠しようと努力する必要があり、必要に応じて PR/Issue で議論することができます。
+
+## レイアウトのサポート
+
+キーボードがレイアウトをサポートするために、変数は `.h` で定義し、引数/キー (できれば物理レイアウト)の数に一致している必要があります。
+
+ #define LAYOUT_60_ansi KEYMAP_ANSI
+
+レイアウトの名前は次の正規表現に一致しなければなりません: `[a-z0-9_]+`
+
+フォルダ名はキーボードの `rules.mk` に追加する必要があります:
+
+ LAYOUTS = 60_ansi
+
+`LAYOUTS` は任意のキーボードフォルダレべルの `rules.mk` に設定することができます:
+
+ LAYOUTS = 60_iso
+
+ただし、`LAYOUT_` 変数は `.h` でも定義する必要があります。
+
+## キーマップのビルド
+
+以下の形式でコマンドを使ってキーボードキーマップを作成できるはずです:
+
+ make :
+
+### レイアウトの競合
+キーボードが複数のレイアウトオプションをサポートし、
+
+ LAYOUTS = ortho_4x4 ortho_4x12
+
+なおかつ両方のオプションについてレイアウトが存在する場合、
+```
+layouts/
++ community/
+| + ortho_4x4/
+| | + /
+| | | + ...
+| + ortho_4x12/
+| | + /
+| | | + ...
+| + ...
+```
+
+FORCE_LAYOUT 引数はどのレイアウトをビルドするかを指定するために使うことができます
+
+ make : FORCE_LAYOUT=ortho_4x4
+ make : FORCE_LAYOUT=ortho_4x12
+
+## キーボードに依存しないレイアウトを作成するためのヒント
+
+### インクルード
+
+`#include "planck.h"` を使う代わりに、以下の行を使ってコンパイルされる `.h` (`.h` はここでインクルードすべきではありません)ファイルをインクルードすることができます:
+
+ #include QMK_KEYBOARD_H
+
+キーボード固有のコードを保持したい場合は、これらの変数を使って `#ifdef` 文でエスケープすることができます:
+
+* `KEYBOARD__`
+
+例えば:
+
+```c
+#ifdef KEYBOARD_planck
+ #ifdef KEYBOARD_planck_rev4
+ planck_rev4_function();
+ #endif
+#endif
+```
+
+名前は小文字でキーボード/リビジョンのフォルダ/ファイル名と正確に一致することに注意してください。
+
+### キーマップ
+
+同じレイアウトで分割および非分割キーボードをサポートするためには、キーマップでキーボード非依存の `LAYOUT_` マクロを使う必要があります。例えば、Let's Split および Planck が同じレイアウトを共有するには、`LAYOUT_planck_grid` や C 配列の場合の単なる `{}` の代わりに、`LAYOUT_ortho_4x12` を使う必要があります。
diff --git a/docs/ja/feature_leader_key.md b/docs/ja/feature_leader_key.md
new file mode 100644
index 00000000000..538358a6b2a
--- /dev/null
+++ b/docs/ja/feature_leader_key.md
@@ -0,0 +1,151 @@
+# リーダーキー: 新しい種類のモディファイア
+
+
+
+もしあなたが Vim を使ったことがある場合、リーダーキーは何であるかを知っています。そうでなければ、素晴らしい概念を発見しようとしています。:) 例えば、Alt+Shift+W を押す(3つのキーを同時に押す)代わりに、キーの_シーケンス_を押すことができたらどうでしょう?つまり、特別なモディファイア (リーダーキー)を押して、続けて W と C を押すと (単純にキーを高速に繋げます)、何かが起こります。
+
+それが `KC_LEAD` の機能です。以下は例です:
+
+1. リーダーキーとして使いたいキーボードのキーを選択します。それにキーコード `KC_LEAD` を割り当てます。このキーはこのためだけの専用です -- 単一アクションのキーで、他の用途には使うことができません。
+2. `config.h` に `#define LEADER_TIMEOUT 300` という行を追加します。これによって `KC_LEAD` キーのタイムアウトを設定します。具体的には、`KC_LEAD` キーを押してからリーダーキーのシーケンスを完了するまで一定の時間しかありません。ここでの `300` はそれを300msに設定します。この値を増やして、シーケンスを入力する時間を増やすことができます。ただし、この時間中に押されたキーは全て途中で遮られ、送信されません。そのためこの値は小さくしておいたほうが良いかもしれません。
+ * デフォルトでは、このタイムアウトは、`KC_LEAD` を押してからシーケンス全体が完了するまでに掛かる時間です。これは一部の人にとっては非常に短いかもしれません。そのため、このタイムアウトを増やしたほうが良い場合もあります。必要に応じて、`LEADER_PER_KEY_TIMING` オプションを有効にしたほうが良い場合もあります。これは各キーがタップされる度にタイムアウトまでの時間をリセットする機能です。これにより、タイムアウト時間を短くしつつも、比較的長いシーケンスを使うことができます。このオプションを有効にするには、`config.h` に `#define LEADER_PER_KEY_TIMING` を追加します。
+3. `matrix_scan_user` 関数の中で、以下のようなものを追加します:
+
+```c
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_ONE_KEY(KC_F) {
+ // マクロ内でできること
+ SEND_STRING("QMK is awesome.");
+ }
+ SEQ_TWO_KEYS(KC_D, KC_D) {
+ SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
+ }
+ SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
+ SEND_STRING("https://start.duckduckgo.com\n");
+ }
+ SEQ_TWO_KEYS(KC_A, KC_S) {
+ register_code(KC_LGUI);
+ register_code(KC_S);
+ unregister_code(KC_S);
+ unregister_code(KC_LGUI);
+ }
+ }
+}
+```
+
+ご覧のとおり、幾つかの関数があります。`SEQ_ONE_KEY` を単一キーシーケンス (リーダーの後に1つのキーのみ)に使い、より長いシーケンスについては `SEQ_TWO_KEYS`、`SEQ_THREE_KEYS` から `SEQ_FIVE_KEYS` を使うことができます。
+
+これらはそれぞれ1つ以上のキーコードを引数として受け付けます。これは重要な点です: **キーボードの任意のレイヤー**のキーコードを使うことができます。当たり前ですが、リーダーマクロが発動するにはそのレイヤーがアクティブである必要があります
+
+## `rules.mk` にリーダーキーサポートを追加
+
+リーダーキーのサポートを追加するには、単純にキーマップの `rules.mk` に1行を追加します:
+
+```make
+LEADER_ENABLE = yes
+```
+
+## リーダーキーのキーごとのタイミング
+
+長いリーダーキー文字列のためや 200wpm のタイピングスキルが無い場合に、非常に長いタイムアウト時間に頼るのではなく、キーを押すごとに入力を完了するまでの時間を増やす機能を使用することができます。これは、リーダーキーを使ってタップダンスを再現する場合に非常に役立ちます (C, C, C のような同じキーを複数回タップする場合)。
+
+これを有効にするには、以下を `config.h` に配置します:
+```c
+#define LEADER_PER_KEY_TIMING
+```
+
+この後、`LEADER_TIMEOUT` を 300ms 未満に下げることをお勧めします。
+
+```c
+#define LEADER_TIMEOUT 250
+```
+
+これで、リーダーキーのタイムアウト時間を 1000ms に設定することなく以下のようなことが可能になると思われます。
+
+```c
+SEQ_THREE_KEYS(KC_C, KC_C, KC_C) {
+ SEND_STRING("Per key timing is great!!!");
+}
+```
+
+## 厳密なキー処理
+
+デフォルトでは、リーダーキー機能は、リーダーシーケンスの確認時に [`モッドタップ`](ja/mod_tap.md) および [`レイヤータップ`](ja/feature_layers.md#switching-and-toggling-layers) 機能からのキーコードをフィルターします。つまり、`LT(3, KC_A)` を使っている場合、`LT(3, KC_A)` ではなくシーケンスの `KC_A` として取り出され、新しいユーザにとってより期待される動作を提供します。
+
+ほとんどの場合これで問題ありませんが、シーケンスでキーコード全体(例えば、上の例での `LT(3, KC_A)`) を指定したい場合は、`config.h` ファイルに `#define LEADER_KEY_STRICT_KEY_PROCESSING` を追加することこのような機能を有効にすることができます。これでフィルタリングが無効になり、キーコード全体を指定する必要があります。
+
+## カスタマイズ
+
+リーダーキー機能には、リーダーキー機能の動作にいくらかのカスタマイズを追加する方法があります。リーダーキー機能のプロセスの特定の部分で呼び出すことができる2つの関数、`leader_start()` と `leader_end()` です。
+
+`KC_LEAD` キーがタップされた時に `leader_start()` 関数が呼ばれ、リーダーシーケンスが完了するか、リーダータイムアウトの時間に達した時に `leader_end()` 関数が呼ばれます。
+
+リーダーシーケンスにフィードバック(ビープまたは音楽を再生するなど)を追加するために、これらの関数をコード (通常 は`keymap.c`)に追加することができます。
+
+```c
+void leader_start(void) {
+ // シーケンスの開始
+}
+
+void leader_end(void) {
+ // シーケンスの終了 (成功しない/失敗を検知)
+}
+```
+
+### 例
+
+この例では、リーダーシーケンスを開始するために `KC_LEAD` を押すとマリオの "One Up" 音が再生され、正常に完了した場合は "All Star" が再生され、失敗した場合は "Rick Roll" を再生されます。
+
+```c
+bool did_leader_succeed;
+#ifdef AUDIO_ENABLE
+float leader_start[][2] = SONG(ONE_UP_SOUND );
+float leader_succeed[][2] = SONG(ALL_STAR);
+float leader_fail[][2] = SONG(RICK_ROLL);
+#endif
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+ LEADER_DICTIONARY() {
+ did_leader_succeed = leading = false;
+
+ SEQ_ONE_KEY(KC_E) {
+ // マクロ内でできること
+ SEND_STRING(SS_LCTL(SS_LSFT("t")));
+ did_leader_succeed = true;
+ } else
+ SEQ_TWO_KEYS(KC_E, KC_D) {
+ SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
+ did_leader_succeed = true;
+ }
+ leader_end();
+ }
+}
+
+void leader_start(void) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_start);
+#endif
+}
+
+void leader_end(void) {
+ if (did_leader_succeed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_succeed);
+#endif
+ } else {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(leader_fail);
+#endif
+ }
+}
+```
diff --git a/docs/ja/feature_led_matrix.md b/docs/ja/feature_led_matrix.md
new file mode 100644
index 00000000000..b2595f9989e
--- /dev/null
+++ b/docs/ja/feature_led_matrix.md
@@ -0,0 +1,95 @@
+# LED マトリックスライト
+
+
+
+この機能により、外部ドライバによって駆動される LED マトリックスを使うことができます。この機能は、バックライト制御と同じキーコードを使えるようにするため、バックライトシステムに接続します。
+
+RGB LED を使いたい場合は、代わりに [RGB マトリックスサブシステム](ja/feature_rgb_matrix.md) を使うべきです。
+
+## ドライバ設定
+
+### IS31FL3731
+
+I2C IS31FL3731 RGB コントローラを使ったアドレス指定可能な LED マトリックスライトのための基本的なサポートがあります:有効にするには、`rules.mk` に以下を追加します:
+
+ LED_MATRIX_ENABLE = IS31FL3731
+
+1から4個の IS31FL3731 IC を使うことができます。キーボード上に存在しない IC の `LED_DRIVER_ADDR_` 定義を指定しないでください。`config.h` に以下の項目を定義することができます:
+
+| 変数 | 説明 | デフォルト |
+|----------|-------------|---------|
+| `ISSI_TIMEOUT` | (オプション) i2c メッセージを待つ時間 | 100 |
+| `ISSI_PERSISTENCE` | (オプション) 失敗したメッセージをこの回数再試行する | 0 |
+| `LED_DRIVER_COUNT` | (必須) LED ドライバ IC の数 | |
+| `LED_DRIVER_LED_COUNT` | (必須) 全てのドライバの LED ライトの数 | |
+| `LED_DRIVER_ADDR_1` | (必須) 最初の LED ドライバのアドレス | |
+| `LED_DRIVER_ADDR_2` | (オプション) 2番目の LED ドライバのアドレス | |
+| `LED_DRIVER_ADDR_3` | (オプション) 3番目の LED ドライバのアドレス | |
+| `LED_DRIVER_ADDR_4` | (オプション) 4番目の LED ドライバのアドレス | |
+
+2つのドライバを使う例です。
+
+ // これは7ビットのアドレスで、左シフトされます
+ // ビット0に0を設定すると書き込み、1を設定すると読み込みです (I2C プロトコルに従う)
+ // アドレスは配線によって変わります:
+ // 0b1110100 AD <-> GND
+ // 0b1110111 AD <-> VCC
+ // 0b1110101 AD <-> SCL
+ // 0b1110110 AD <-> SDA
+ #define LED_DRIVER_ADDR_1 0b1110100
+ #define LED_DRIVER_ADDR_2 0b1110110
+
+ #define LED_DRIVER_COUNT 2
+ #define LED_DRIVER_1_LED_COUNT 25
+ #define LED_DRIVER_2_LED_COUNT 24
+ #define LED_DRIVER_LED_COUNT LED_DRIVER_1_LED_TOTAL + LED_DRIVER_2_LED_TOTAL
+
+現在、2つのドライバのみがサポートされますが、4つの組み合わせ全てをサポートすることは簡単です。
+
+`.c` に全ての LED を列挙する配列を定義します:
+
+ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+ /* これらの位置については IS31 マニュアルを参照してください
+ * driver
+ * | LED address
+ * | | */
+ {0, C3_3},
+ ....
+ }
+
+ここで、`Cx_y` は[データシート](http://www.issi.com/WW/pdf/31FL3731.pdf)およびヘッダファイル `drivers/issi/is31fl3731-simple.h` で定義されるマトリックス内の LED の位置です。`driver` は `config.h` で定義したドライバのインデックス(`0`、`1`、`2`、`3`のいずれか)です。
+
+## キーコード
+
+現在のところ、全ての LED マトリックスのキーコードは[バックライトシステム](ja/feature_backlight.md)と共有されます。
+
+## LED マトリックス効果
+
+現在のところ、LED マトリックス効果は作成されていません。
+
+## カスタムレイヤー効果
+
+カスタムレイヤー効果は `.c` 内で以下を定義することで行うことができます:
+
+ void led_matrix_indicators_kb(void) {
+ led_matrix_set_index_value(index, value);
+ }
+
+同様の関数がキーマップ内で `led_matrix_indicators_user` として動作します。
+
+## サスペンド状態
+
+サスペンド機能を使うには、以下を `.c` に追加します:
+
+ void suspend_power_down_kb(void)
+ {
+ led_matrix_set_suspend_state(true);
+ }
+
+ void suspend_wakeup_init_kb(void)
+ {
+ led_matrix_set_suspend_state(false);
+ }
diff --git a/docs/ja/feature_macros.md b/docs/ja/feature_macros.md
new file mode 100644
index 00000000000..1204fa8ff2e
--- /dev/null
+++ b/docs/ja/feature_macros.md
@@ -0,0 +1,399 @@
+# マクロ
+
+
+
+マクロにより、1つのキーを押すだけで複数のキーストロークを送信することができます。QMK にはマクロを定義し使う方法が幾つかあります。これらはなんでもすることができます: よく使うフレーズの入力、コピーペースト、反復的なゲームの動き、あるいはコードを書くことさえ手助けします。
+
+!> **セキュリティの注意**: マクロを使って、パスワード、クレジットカード番号、その他の機密情報のいずれも送信することが可能ですが、それは非常に悪い考えです。あなたのキーボードを手に入れた人は誰でもテキストエディタを開いてその情報にアクセスすることができます。
+
+## 新しい方法: `SEND_STRING()` と `process_record_user`
+
+単語またはフレーズを入力するキーが欲しい時があります。最も一般的な状況のために `SEND_STRING()` を提供しています。これは文字列(つまり、文字のシーケンス)を入力します。簡単にキーコードに変換することができる全ての ASCII 文字がサポートされています (例えば、`\n\t`)。
+
+以下は2キーのキーボードのための `keymap.c` の例です:
+
+```c
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // キーコード QMKBEST が押された時
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // キーコード QMKBEST が放された時
+ }
+ break;
+
+ }
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = {
+ {QMKBEST, KC_ESC}
+ }
+};
+```
+
+ここで起きることは以下の通りです:
+最初に他のキーコードで使用されていない範囲で新しいカスタムキーコードを定義します。
+次に、`process_record_user` 関数を使います。これはキーが押されるか放されるたびに呼び出され、カスタムキーコードがアクティブかどうかを確認します。
+アクティブな場合、`SEND_STRING` マクロ (これは C プロセッサのマクロで、QMK のマクロと混同しないでください)を介して文字列 `"QMK is the best thing ever!"` をコンピュータに送信します。
+呼び出し元に、処理したばかりのキー押下を通常通り(機能を置き換えたり変更したりしなかったので)処理し続けるよう指示するため、`true` を返します。
+最後に、最初のボタンがマクロをアクティブにし、2番目のボタンが単なるエスケープボタンになるようにキーマップを定義します。
+
+複数のマクロを追加することもできます。
+以下のように、別のキーコードを追加し、switch 文に別の case ラベルを追加することで、それを行うことができます:
+
+```c
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL,
+ MY_OTHER_MACRO
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // キーコード QMKBEST が押された時
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // キーコード QMKBEST が放された時
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // キーコード QMKURL が押された場合
+ SEND_STRING("https://qmk.fm/\n");
+ } else {
+ // キーコード QMKURL が放された場合
+ }
+ break;
+ case MY_OTHER_MACRO:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTL("ac")); // 全てを選択しコピーします
+ }
+ break;
+ }
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = {
+ {MY_CUSTOM_MACRO, MY_OTHER_MACRO}
+ }
+};
+```
+
+### 高度なマクロ
+
+`process_record_user()` 関数のほかに、`post_process_record_user()` 関数があります。これは `process_record` の後に実行され、キーストロークが送信された後の処理に使用できます。これは例えば、通常のキーの前に押され、通常のキーの後で放されるキーがほしい場合に便利です。
+
+この例では、通常のキー入力を変更して、キーストロークが通常送信される前に `F22` が押されるようにし、キーが放された__後にのみ__ `F22` キーを放します。
+
+```c
+static uint8_t f22_tracker;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_A ... KC_F21: // F22 をスキップする方法に注意してください
+ case KC_F23 ... KC_EXSEL: //exsel は修飾キーの直前のキーです
+ if (record->event.pressed) {
+ register_code(KC_F22); //これは F22 を押したことを送信することを意味します
+ f22_tracker++;
+ register_code(keycode);
+ return false;
+ }
+ break;
+ }
+ return true;
+}
+
+void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_A ... KC_F21: // F22 をスキップする方法に注意してください
+ case KC_F23 ... KC_EXSEL: //exsel は修飾キーの直前のキーです
+ if (!record->event.pressed) {
+ f22_tracker--;
+ if (!f22_tracker) {
+ unregister_code(KC_F22); //これは F22 を放したことを送信することを意味します
+ }
+ }
+ break;
+ }
+}
+```
+
+
+### タップ、ダウン、アップ
+
+`Ctrl` あるいは `Home` など、ソースコードに文字列として表記できないキーをマクロで使うこともできます。
+以下のようにラップすることで任意のコードを送信することができます:
+
+* `SS_TAP()` キーを押して放します。
+* `SS_DOWN()` キーを押します (ただし、放しません)。
+* `SS_UP()` キーを放します。
+
+例えば:
+
+ SEND_STRING(SS_TAP(X_HOME));
+
+`KC_HOME` をタップします - プリフィックスが `X_` で `KC_` ではないことに注意してください。以下のように、他の文字列と組み合わせることもできます:
+
+ SEND_STRING("VE"SS_TAP(X_HOME)"LO");
+
+これは "VE" に続けて `KC_HOME` をタップ、そして "LO" (新しい行の場合は "LOVE" と綴る)を送信します。
+
+文字列に遅延を追加することもできます:
+
+* `SS_DELAY(msecs)` は指定されたミリ秒だけ遅らせます。
+
+例えば:
+
+ SEND_STRING("VE" SS_DELAY(1000) SS_TAP(X_HOME) "LO");
+
+これは "VE" 、1秒の遅延、`KC_HOME` をタップ、"LO" (新しい行の場合は "LOVE" と綴るが、中間に遅延がある) を送信します。
+
+使用できるモッドショートカットもいくつかあります:
+
+* `SS_LCTL(文字列)`
+* `SS_LSFT(文字列)`
+* `SS_LALT(文字列)`、`SS_LOPT(文字列)`
+* `SS_LGUI(文字列)`、`SS_LCMD(文字列)`、`SS_LWIN(文字列)`
+* `SS_RCTL(文字列)`
+* `SS_RSFT(文字列)`
+* `SS_RALT(文字列)`、`SS_ROPT(文字列)`、`SS_ALGR(文字列)`
+* `SS_RGUI(文字列)`、`SS_RCMD(文字列)`、`SS_RWIN(文字列)`
+
+これらはそれぞれの修飾キーを押し、指定された文字列を送信してから、修飾キーを解放します。
+それらは以下のように使うことができます:
+
+ SEND_STRING(SS_LCTL("a"));
+
+これは、左 Control +`a` (左 Control をダウンし、`a`、左 Control をアップ)を送信します - それらは文字列(例えば `"k"`)であり、`X_K` キーコードでは無いことに注意してください。
+
+### 代替キーマップ
+
+デフォルトでは、QWERTY レイアウトの US キーマップを想定しています; それを変更したい場合(例えば OS がソフトウェア Colemak を使う場合)、キーマップのどこかに以下を含めます:
+
+ #include
+
+### メモリ内の文字列
+
+何らかの理由で文字列を操作していて、(リテラル、文字列定数の代わりに)生成したばかりのものを出力する必要がある場合は、以下のように `send_string()` を使うことができます:
+
+```c
+char my_str[4] = "ok.";
+send_string(my_str);
+```
+
+上で定義したショートカットは `send_string()` では動作しないですが、必要に応じて別の行に分けることができます:
+
+```c
+char my_str[4] = "ok.";
+SEND_STRING("I said: ");
+send_string(my_str);
+SEND_STRING(".."SS_TAP(X_END));
+```
+
+
+## 高度なマクロ関数
+
+マクロの生成に役立つ関数が幾つかあります。マクロの中にかなり高度なコードを書くことができますが、機能が複雑になりすぎる場合は、代わりにカスタムキーコードを定義することをお勧めします。マクロはシンプルにしなければなりません。
+
+?> 追加の機能として、[便利な関数](ja/ref_functions.md) の中で説明される関数を使うこともできます。例えば `reset_keyboard()` によりマクロの一部としてキーボードをリセットすることができます。
+
+### `record->event.pressed`
+
+これでスイッチが押されているか放されているかどうかをテストすることができます。以下が例です。
+
+```c
+ if (record->event.pressed) {
+ // キーダウン時
+ } else {
+ // キーアップ時
+ }
+```
+
+### `register_code();`
+
+これはコンピュータに `` キーダウンイベントを送信します。例として `KC_ESC`、`KC_C`、`KC_4` や、`KC_LSFT` と `KC_LGUI` のような修飾キーなどもあります。
+
+### `unregister_code();`
+
+`register_code` 関数と対応して、これは `` キーアップイベントをコンピュータに送信します。これを使わない場合、キーは送信されるまで押し続けられます。
+
+### `tap_code();`
+
+これは `register_code()` を送信し、その後 `unregister_code()` を送信します。押下とリリースイベントの両方を送信する場合に便利です (押し続けるのではなく、キーを"タップ"する)。
+
+タップの登録(解除)に問題がある場合、`config.h` ファイルで `#define TAP_CODE_DELAY 100` を設定することで、登録イベントと解除イベントの間に遅延を追加することができます。値はミリ秒です。
+
+### `register_code16();`、`unregister_code16();`、`tap_code16();`
+
+これらの関数は対応する通常の関数と同様に機能しますが、修飾キーで修飾されたキーコードを使うことができます (Shift、Alt、Control、GUI を適用)。
+
+例えば、修飾キーを押して(`register_code()`して)、キーコードを押す(`register_code()`する)代わりに、`register_code16(S(KC_5));` を使うことができます。
+
+### `clear_keyboard();`
+
+これは現在押されている全ての修飾キーとキーをクリアします。
+
+### `clear_mods();`
+
+これは現在押されている全ての修飾キーをクリアします。
+
+### `clear_keyboard_but_mods();`
+
+これは現在押されている修飾キー以外の全てのキーをクリアします。
+
+## 高度な例:
+
+### スーパー ALT↯TAB
+
+このマクロは `KC_LALT` を登録し、`KC_TAB` をタップして、1000ms 待ちます。キーが再度タップされると、別の `KC_TAB` が送信されます; タップが無い場合、`KC_LALT` が登録解除され、ウィンドウを切り替えることができます。
+
+```c
+bool is_alt_tab_active = false; # keymap.c の先頭付近にこれを追加します
+uint16_t alt_tab_timer = 0; # すぐにそれらを使います
+
+enum custom_keycodes { # 素晴らしいキーコードを用意してください
+ ALT_TAB = SAFE_RANGE,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) { # これはキーコードを利用したつまらない作業のほとんどを行います。
+ case ALT_TAB:
+ if (record->event.pressed) {
+ if (!is_alt_tab_active) {
+ is_alt_tab_active = true;
+ register_code(KC_LALT);
+ }
+ alt_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_scan_user(void) { # とても重要なタイマー
+ if (is_alt_tab_active) {
+ if (timer_elapsed(alt_tab_timer) > 1000) {
+ unregister_code(KC_LALT);
+ is_alt_tab_active = false;
+ }
+ }
+}
+```
+
+---
+
+## **(非推奨)** 古い方法: `MACRO()` と `action_get_macro`
+
+!> これは TMK から継承されており、更新されていません - 代わりに `SEND_STRING` と `process_record_user` を使うことをお勧めします。
+
+デフォルトでは、QMK はマクロが無いことを前提としています。マクロを定義するには、`action_get_macro()` 関数を作成します。例えば:
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ if (record->event.pressed) {
+ switch(id) {
+ case 0:
+ return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
+ case 1:
+ return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
+ }
+ }
+ return MACRO_NONE;
+};
+```
+
+これは割り当てられているキーが押された時に実行される2つのマクロを定義します。キーが放された時にそれらを実行したい場合は、if 文を変更することができます。
+
+ if (!record->event.pressed) {
+
+### マクロコマンド
+
+マクロは以下のコマンドを含めることができます:
+
+* I() はストロークの間隔をミリ秒単位で変更します。
+* D() はキーを押します。
+* U() はキーを放します。
+* T() はキーをタイプ(押して放す)します。
+* W() は待ちます (ミリ秒)。
+* END 終了マーク。
+
+### マクロをキーにマッピングする
+
+マクロを呼び出すにはキーマップ内で `M()` 関数を使います。例えば、2キーのキーボードのキーマップは以下の通りです:
+
+```c
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ M(0), M(1)
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ if (record->event.pressed) {
+ switch(id) {
+ case 0:
+ return MACRO(D(LSFT), T(H), U(LSFT), T(I), D(LSFT), T(1), U(LSFT), END);
+ case 1:
+ return MACRO(D(LSFT), T(B), U(LSFT), T(Y), T(E), D(LSFT), T(1), U(LSFT), END);
+ }
+ }
+ return MACRO_NONE;
+};
+```
+
+左側のキーを押すと、"Hi!" を入力し、右側のキーを押すと "Bye!" を入力します。
+
+### マクロに名前を付ける
+
+キーマップを読みやすくしながらキーマップから参照したいマクロがたくさんある場合は、ファイルの先頭で `#define` を使って名前を付けることができます。
+
+```c
+#define M_HI M(0)
+#define M_BYE M(1)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ M_HI, M_BYE
+ ),
+};
+```
+
+
+## 高度な例:
+
+### 単一キーのコピーと貼り付け
+
+この例は、押された時に `Ctrl-C` を送信し、放される時に `Ctrl-V` を送信するマクロを定義します。
+
+```c
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch(id) {
+ case 0: {
+ if (record->event.pressed) {
+ return MACRO( D(LCTL), T(C), U(LCTL), END );
+ } else {
+ return MACRO( D(LCTL), T(V), U(LCTL), END );
+ }
+ break;
+ }
+ }
+ return MACRO_NONE;
+};
+```
diff --git a/docs/ja/feature_mouse_keys.md b/docs/ja/feature_mouse_keys.md
new file mode 100644
index 00000000000..43ca8bb08b2
--- /dev/null
+++ b/docs/ja/feature_mouse_keys.md
@@ -0,0 +1,127 @@
+# マウスキー
+
+
+
+マウスキーは、キーボードを使ってマウスをエミュレートできる機能です。様々な速度でポインタを移動し、5つのボタンを押し、8方向にスクロールすることができます。
+
+## キーボードにマウスキーを追加
+
+マウスキーを使うためには、少なくともマウスキーサポートを有効にし、マウスアクションをキーボードのキーにマップする必要があります。
+
+### マウスキーを有効にする
+
+マウスキーを有効にするには、キーマップの `rules.mk` に以下の行を追加します:
+
+```c
+MOUSEKEY_ENABLE = yes
+```
+
+### マウスアクションのマッピング
+
+キーマップでキー押下をマウスアクションにマップするために、以下のキーコードを使うことができます:
+
+| キー | エイリアス | 説明 |
+|----------------|---------|-----------------|
+| `KC_MS_UP` | `KC_MS_U` | カーソルを上に移動 |
+| `KC_MS_DOWN` | `KC_MS_D` | カーソルを下に移動 |
+| `KC_MS_LEFT` | `KC_MS_L` | カーソルを左に移動 |
+| `KC_MS_RIGHT` | `KC_MS_R` | カーソルを右に移動 |
+| `KC_MS_BTN1` | `KC_BTN1` | ボタン1を押す |
+| `KC_MS_BTN2` | `KC_BTN2` | ボタン2を押す |
+| `KC_MS_BTN3` | `KC_BTN3` | ボタン3を押す |
+| `KC_MS_BTN4` | `KC_BTN4` | ボタン4を押す |
+| `KC_MS_BTN5` | `KC_BTN5` | ボタン5を押す |
+| `KC_MS_WH_UP` | `KC_WH_U` | ホイールを向こう側に回転 |
+| `KC_MS_WH_DOWN` | `KC_WH_D` | ホイールを手前側に回転 |
+| `KC_MS_WH_LEFT` | `KC_WH_L` | ホイールを左に倒す |
+| `KC_MS_WH_RIGHT` | `KC_WH_R` | ホイールを右に倒す |
+| `KC_MS_ACCEL0` | `KC_ACL0` | 速度を0に設定 |
+| `KC_MS_ACCEL1` | `KC_ACL1` | 速度を1に設定 |
+| `KC_MS_ACCEL2` | `KC_ACL2` | 速度を2に設定 |
+
+## マウスキーの設定
+
+マウスキーはカーソルを移動するための2つの異なるモードをサポートします:
+
+* **加速 (デフォルト):** 移動キーを押したままにすると、カーソルが最大速度に達するまでカーソルを加速します。
+* **定速:** 移動キーを押したままにすると、カーソルを一定の速度で移動します。
+
+同じ原則がスクロールにも適用されます。
+
+時間、間隔、遅延の設定オプションは、ミリ秒で指定されます。スクロール速度はデフォルトスクロールステップの倍数として渡されます。例えば、スクロール速度8は、各スクロールアクションがオペレーティングシステムまたはアプリケーションで定義されるデフォルトのスクロールステップの8倍の距離進むことを意味します。
+
+### 加速モード
+
+これはデフォルトのモードです。キーマップの `config.h` ファイルの以下の設定を使ってカーソルとスクロールの加速を調整することができます:
+
+| 定義 | デフォルト | 説明 |
+|----------------------------|-------|---------------------------------------------------------|
+| `MOUSEKEY_DELAY` | 300 | 移動キーを押してからカーソルが移動するまでの遅延 |
+| `MOUSEKEY_INTERVAL` | 50 | カーソル移動間の時間 |
+| `MOUSEKEY_MAX_SPEED` | 10 | 加速が停止する最大のカーソル速度 |
+| `MOUSEKEY_TIME_TO_MAX` | 20 | 最大カーソル速度に達するまでの時間 |
+| `MOUSEKEY_WHEEL_DELAY` | 300 | ホイールキーを押してからホイールが動くまでの遅延 |
+| `MOUSEKEY_WHEEL_INTERVAL` | 100 | ホイールの動きの間の時間 |
+| `MOUSEKEY_WHEEL_MAX_SPEED` | 8 | スクロールアクションごとのスクロールステップの最大数 |
+| `MOUSEKEY_WHEEL_TIME_TO_MAX` | 40 | 最大スクロール速度に達するまでの時間 |
+
+ヒント:
+
+* `MOUSEKEY_DELAY` の設定が低すぎるとカーソルが応答しなくなります。設定が高すぎると小さな動きが難しくなります。
+* カーソルの動きをスムーズにするには、`MOUSEKEY_INTERVAL` の値を低くします。ディスプレイのリフレッシュレートが60Hzの場合、`16` (1/60) に設定することができます。これによりカーソルの速度が大幅に向上するため、`MOUSEKEY_MAX_SPEED` を下げた方が良いかもしれません。
+* `MOUSEKEY_TIME_TO_MAX` または `MOUSEKEY_WHEEL_TIME_TO_MAX` を `0` に設定すると、それぞれカーソルの速度またはスクロールの加速が無効になります。この方法では、一方を加速しながら他方を一定にすることができますが、これは定速モードでは不可能です。
+* `MOUSEKEY_WHEEL_INTERVAL` の設定が低すぎるとスクロールがとても速くなります。設定が高すぎるとホイールキーを押したままにした時にスクロールがとても遅くなります
+
+カーソルの加速は、X Window System MouseKeysAccel 機能と同じアルゴリズムを使います。詳細については [Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys) をご覧ください。
+
+### 定速モード
+
+このモードでは、カーソルおよびマウスホイールの両方について複数の異なる速度を定義することができます。加速はありません。`KC_ACL0`、`KC_ACL1` および `KC_ACL2` は、カーソルとスクロールの速度をそれぞれの設定に変更します。
+
+速度の選択は、一時的とタップ選択のどちらかを選べます:
+
+* **一時的:** 選択された速度は、それぞれのキーを押している間のみアクティブになります。キーを放すと、マウスキーは変更される前の速度に戻ります。
+* **タップ選択:** それぞれのキーを押すと選択された速度がアクティブになり、キーを放した後もアクティブのままになります。デフォルトの速度は `KC_ACL1` です。未変更の速度はありません。
+
+最も遅い速度から最も速い速度までのデフォルトの速度は以下の通りです:
+
+* **一時的:** `KC_ACL0` < `KC_ACL1` < *変更無し* < `KC_ACL2`
+* **タップ選択:** `KC_ACL0` < `KC_ACL1` < `KC_ACL2`
+
+定速モードを使うには、少なくともキーマップの keymaps ディレクトリの `config.h` ファイルに `MK_3_SPEED` を定義する必要があります。
+
+```c
+#define MK_3_SPEED
+```
+
+一時的モードを有効にするには、`MK_MOMENTARY_ACCEL` も定義します:
+
+```c
+#define MK_MOMENTARY_ACCEL
+```
+
+カーソル移動あるいはスクロールを調整する場合は、以下の設定を使います:
+
+| 定義 | デフォルト | 説明 |
+|---------------------|-------------|-------------------------------------------|
+| `MK_3_SPEED` | *定義なし* | 定速カーソルを有効にする |
+| `MK_MOMENTARY_ACCEL` | *定義なし* | 一時的モードを有効にする |
+| `MK_C_OFFSET_UNMOD` | 16 | 移動ごとのカーソルオフセット (変更無し) |
+| `MK_C_INTERVAL_UNMOD` | 16 | カーソルの移動間の時間 (変更無し) |
+| `MK_C_OFFSET_0` | 1 | 移動ごとのカーソルオフセット (`KC_ACL0`) |
+| `MK_C_INTERVAL_0` | 32 | カーソル移動間の時間 (`KC_ACL0`) |
+| `MK_C_OFFSET_1` | 4 | 移動ごとのカーソルオフセット (`KC_ACL1`) |
+| `MK_C_INTERVAL_1` | 16 | カーソル移動間の時間 (`KC_ACL1`) |
+| `MK_C_OFFSET_2` | 32 | 移動ごとのカーソルオフセット (`KC_ACL2`) |
+| `MK_C_INTERVAL_2` | 16 | カーソル移動間の時間 (`KC_ACL2`) |
+| `MK_W_OFFSET_UNMOD` | 1 | スクロールアクションごとのスクロールステップ (変更無し) |
+| `MK_W_INTERVAL_UNMOD` | 40 | スクロールステップ間の時間 (変更無し) |
+| `MK_W_OFFSET_0` | 1 | スクロールアクションごとのスクロールステップ (`KC_ACL0`) |
+| `MK_W_INTERVAL_0` | 360 | スクロールステップ間の時間 (`KC_ACL0`) |
+| `MK_W_OFFSET_1` | 1 | スクロールアクションごとのスクロールステップ (`KC_ACL1`) |
+| `MK_W_INTERVAL_1` | 120 | スクロールステップ間の時間 (`KC_ACL1`) |
+| `MK_W_OFFSET_2` | 1 | スクロールアクションごとのスクロールステップ (`KC_ACL2`) |
+| `MK_W_INTERVAL_2` | 20 | スクロールステップ間の時間 (`KC_ACL2`) |
diff --git a/docs/ja/feature_pointing_device.md b/docs/ja/feature_pointing_device.md
new file mode 100644
index 00000000000..1d655627dde
--- /dev/null
+++ b/docs/ja/feature_pointing_device.md
@@ -0,0 +1,49 @@
+# ポインティングデバイス :id=pointing-device
+
+
+
+ポインティングデバイスは汎用的な機能の総称です: システムポインタを移動します。マウスキーのような他のオプションも確かにありますが、これは簡単に変更可能で軽量であることを目指しています。機能を制御するためにカスタムキーを実装したり、他の周辺機器から情報を収集してここに直接挿入したりできます - QMK に処理を任せてください。
+
+ポインティングデバイスを有効にするには、rules.mk の以下の行のコメントを解除します:
+
+```makefile
+POINTING_DEVICE_ENABLE = yes
+```
+
+マウスレポートを操作するために、以下の関数を使うことができます:
+
+* `pointing_device_get_report()` - ホストコンピュータに送信された情報を表す現在の report_mouse_t を返します。
+* `pointing_device_set_report(report_mouse_t newMouseReport)` - ホストコンピュータに送信される report_mouse_t を上書き保存します。
+
+report_mouse_t (ここでは "mouseReport") が以下のプロパティを持つことを覚えておいてください:
+
+* `mouseReport.x` - これは、x軸の動き(+ 右へ、- 左へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
+* `mouseReport.y` - これは、y軸の動き(+ 上へ、- 下へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
+* `mouseReport.v` - これは、垂直スクロール(+ 上へ、- 下へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
+* `mouseReport.h` - これは、水平スクロール(+ 右へ、- 左へ)を表す -127 から 127 (128ではなく、USB HID 仕様で定義されています)の符号付き整数です。
+* `mouseReport.buttons` - これは uint8_t で、上位の5ビットを使っています。これらのビットはマウスボタンの状態を表します - ビット 3 はマウスボタン 5、ビット 7 はマウスボタン 1 です。
+
+マウスレポートが送信されると、x、y、v、h のいずれの値も 0 に設定されます (これは "pointing_device_send()" で行われます。この挙動を回避するためにオーバーライドすることができます)。このように、ボタンの状態は持続しますが、動きは1度だけ起こります。さらにカスタマイズするために、`pointing_device_init` と `pointing_device_task` のどちらもオーバーライドすることができます。
+
+以下の例では、カスタムキーを使ってマウスをクリックし垂直および水平方向に127単位スクロールし、リリースされた時にそれを全て元に戻します - なぜならこれは完全に便利な機能だからです。いいですか、以下はひとつの例です:
+
+```c
+case MS_SPECIAL:
+ report_mouse_t currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ currentReport.v = 127;
+ currentReport.h = 127;
+ currentReport.buttons |= MOUSE_BTN1; // this is defined in report.h
+ } else {
+ currentReport.v = -127;
+ currentReport.h = -127;
+ currentReport.buttons &= ~MOUSE_BTN1;
+ }
+ pointing_device_set_report(currentReport);
+ break;
+```
+
+マウスレポートは送信されるたびに 0 (ボタンを除く)に設定されることを思い出してください。そのため、スクロールはそれぞれの場合に1度だけ発生します。
diff --git a/docs/ja/feature_ps2_mouse.md b/docs/ja/feature_ps2_mouse.md
new file mode 100644
index 00000000000..aae6d947bfa
--- /dev/null
+++ b/docs/ja/feature_ps2_mouse.md
@@ -0,0 +1,293 @@
+# PS/2 マウスサポート :id=ps2-mouse-support
+
+
+
+PS/2 マウス (例えばタッチパッドあるいはトラックポイント)を複合デバイスとしてキーボードに接続することができます。
+
+トラックポイントを接続するには、トラックポイントモジュールを入手し (つまり、Thinkpad キーボードから部品を取って)、モジュールの各ピンの機能を特定し、コントローラとトラックポイントモジュールの間に必要な回路を作成する必要があります。詳細については、Deskthority Wiki の[トラックポイントハードウェア](https://deskthority.net/wiki/TrackPoint_Hardware)ページを参照してください。
+
+PS/2 デバイスの接続は、USART(最善)、割り込み(次善)、 または busywait(非推奨)の3つのやり方が有ります。
+
+## トラックポイントとコントローラ間の回路 :id=the-circuitry-between-trackpoint-and-controller
+
+動作させるには、DATA と CLK のふたつのラインを 4.7k の抵抗で 5V にプルアップしてやる必要があります。
+
+```
+ DATA ----------+--------- PIN
+ |
+ 4.7K
+ |
+MODULE 5+ --------+--+--------- PWR CONTROLLER
+ |
+ 4.7K
+ |
+ CLK ------+------------ PIN
+```
+
+
+## Busywait バージョン :id=busywait-version
+
+注意: これは非推奨です。ギクシャクした動きや、未送信の入力が発生するかもしれません。可能であれば、割り込みまたは USART バージョンを使ってください。
+
+rules.mk で:
+
+```makefile
+PS2_MOUSE_ENABLE = yes
+PS2_USE_BUSYWAIT = yes
+```
+
+キーボードの config.h で:
+
+```c
+#ifdef PS2_USE_BUSYWAIT
+# define PS2_CLOCK_PORT PORTD
+# define PS2_CLOCK_PIN PIND
+# define PS2_CLOCK_DDR DDRD
+# define PS2_CLOCK_BIT 1
+# define PS2_DATA_PORT PORTD
+# define PS2_DATA_PIN PIND
+# define PS2_DATA_DDR DDRD
+# define PS2_DATA_BIT 2
+#endif
+```
+
+## 割り込みバージョン :id=interrupt-version
+
+以下の例はクロックのために D2 を、データのために D5 を使います。クロックには任意の INT あるいは PCINT ピンを、データには任意のピンを使うことができます。
+
+rules.mk で:
+
+```makefile
+PS2_MOUSE_ENABLE = yes
+PS2_USE_INT = yes
+```
+
+キーボードの config.h で:
+
+```c
+#ifdef PS2_USE_INT
+#define PS2_CLOCK_PORT PORTD
+#define PS2_CLOCK_PIN PIND
+#define PS2_CLOCK_DDR DDRD
+#define PS2_CLOCK_BIT 2
+#define PS2_DATA_PORT PORTD
+#define PS2_DATA_PIN PIND
+#define PS2_DATA_DDR DDRD
+#define PS2_DATA_BIT 5
+
+#define PS2_INT_INIT() do { \
+ EICRA |= ((1<
+
+QMK ファームウェアリポジトリの多くのキーボードは、"分割"キーボードです。それらは2つのコントローラを使います — 1つは USB に接続し、もう1つは TRRS または同様のケーブルを介してシリアルまたは I2C 接続で接続します。
+
+分割キーボードには多くの利点がありますが、有効にするには追加の作業が必要です。
+
+QMK ファームウェアには、任意のキーボードで使用可能な一般的な実装と、多くのキーボード固有の実装があります。
+
+このため、主に Let's Split とその他のキーボードで使われる一般的な実装について説明します。
+
+!> ARM はまだ完全には分割キーボードをサポートしておらず、様々な制限があります。進捗はしていますが、機能の100%にはまだ達していません。
+
+
+## 互換性の概要
+
+| Transport | AVR | ARM |
+|------------------------------|--------------------|--------------------|
+| ['serial'](serial_driver.md) | :heavy_check_mark: | :white_check_mark: 1 |
+| I2C | :heavy_check_mark: | |
+
+注意:
+
+1. ハードウェアとソフトウェアの両方の制限は、[ドライバーのドキュメント](serial_driver.md)の中で説明されます。
+
+## ハードウェア設定
+
+2つの Pro Micro 互換のコントローラを使っており、キーボードの左右を接続するために TRRS ジャックを使っていることを前提とします。
+
+### ハードウェア要件
+
+左右それぞれのキーボードマトリックスのためのダイオードとスイッチとは別に、2個の TRRS ソケットと 1本の TRRS ケーブルが必要です。
+
+あるいは、少なくとも3本のワイヤがあるケーブルとソケットを使うことができます。
+
+キーボードの左右間で通信するために I2C を使いたい場合は、少なくとも4本のワイヤを備えたケーブルと 2個の 4.7kΩ プルアップ抵抗が必要です。
+
+#### 考慮事項
+
+最も一般的に使われる接続は、TRRS ケーブルとジャックです。これらは4本のワイヤを提供し、分割キーボードに非常に有用で、簡単に見つけることができます。
+
+ただし、ワイヤのうちの1本が Vcc を供給するため、キーボードはホットプラグ不可能です。TRRS ケーブルを抜き差しする前に、必ずキーボードのUSB接続をはずす必要があります。そうしなければ、コントローラを短絡させたり、もっと悪いことが起こるかもしれません。
+
+別のオプションは電話ケーブルを使うことです (例えば、旧式の RJ-11/RJ-14 ケーブル)。実際に4本のワイヤ/レーンをサポートするものを使うようにしてください。
+
+ただし、USB ケーブル、SATA ケーブル、そして単に4本の電線でもコントローラ間の通信に使用できることがわかっています。
+
+!> コントローラ間の通信に USB ケーブルを使っても問題ありませんが、コネクタは通常の USB 接続と間違えられるかもしれず、配線方法によってはキーボードが短絡する可能性があります。このため、分割キーボードの接続のためにはお勧めできません。
+
+### シリアル配線
+
+2つの Pro Micro 間で GND、Vcc、D0 (別名 PDO あるいは pin 3) を TRS/TRRS ケーブルの3本のワイヤで接続します。
+
+?> ここで使われるピンは実際には以下の `SOFT_SERIAL_PIN` によって設定されることに注意してください。
+
+
+
+### I2C 配線
+
+2つの Pro Micro 間で GND、Vcc、さらに SCL と SDA (それぞれ 別名 PD0/ピン3 および PD1/ピン2) を TRRS ケーブルの4本のワイヤで接続します。
+
+プルアップ抵抗はキーボードの左右どちら側にも配置することができます。もし各側を単独で使いたい場合は、4つの抵抗を使い、両側にプルアップ抵抗を配置することもできます。
+
+
+
+## ファームウェア設定
+
+分割キーボード機能を有効にするには、以下を `rules.mk` に追加してください:
+
+```make
+SPLIT_KEYBOARD = yes
+```
+
+カスタムトランスポート (通信メソッド)を使っている場合は、以下を追加する必要もあります:
+
+```make
+SPLIT_TRANSPORT = custom
+```
+
+### 左右の設定
+
+デフォルトでは、ファームウェアはどちら側がどちらであるかを認識しません; 決定するには幾つかの助けが必要です。これを行うには幾つかの方法があり、以下に優先順に列挙します。
+
+#### ピンによる左右の設定
+
+左右を決定するためにコントローラ上のピンを読むようにファームウェアを設定することができます。これを行うには、以下を `config.h` ファイルに追加します:
+
+```c
+#define SPLIT_HAND_PIN B7
+```
+
+これは指定されたピンを読み込みます。high の場合、コントローラはそれを左側だと仮定し、low の場合、それは右側であると仮定します。
+
+#### EEPROM による左右の設定
+
+このメソッドは永続ストレージ(`EEPROM`)のフラグを設定することで、キーボードの左右を設定します。これはコントローラが最初に起動する時にチェックされ、キーボードのどちら側であるかとキーボードのレイアウトの向きを決定します。
+
+
+このメソッドを有効にするには、以下を `config.h` ファイルに追加します:
+
+```c
+#define EE_HANDS
+```
+
+ただし、各コントローラに正しい側の EEPROM ファイルを書き込む必要があります。これを手動で行うこともできますが、ファームウェアを書き込む時にこれを行う avrdude および dfu のターゲットが存在します。
+
+* `:avrdude-split-left`
+* `:avrdude-split-right`
+* `:dfu-split-left`
+* `:dfu-split-right`
+* `:dfu-util-split-left`
+* `:dfu-util-split-right`
+
+この設定は、`EEP_RST` キーや `eeconfig_init()` 関数を使って EEPROM を再初期化する時には変更されません。ただし、ファームウェアの組み込みオプション以外で EEPROM をリセット([QMK Toolbox]() の "Reset EEPROM" ボタンの動作のように、`EEPROM` を上書きするファイルを書きこむなど)した場合、`EEPROM` ファイルを再書き込みする必要があります。
+
+`EEPROM` ファイルは、QMK ファームウェアのリポジトリ内の[ここ](https://github.com/qmk/qmk_firmware/tree/master/quantum/split_common)にあります。
+
+#### `#define` による左右の設定
+
+コンパイル時に左右を設定することができます。これは以下を `config.h` ファイルに追加することで行うことができます:
+
+```c
+#define MASTER_RIGHT
+```
+
+あるいは
+
+```c
+#define MASTER_LEFT
+```
+
+どちらも定義されていない場合、左右のデフォルトは `MASTER_LEFT` になります。
+
+
+### 通信オプション
+
+全ての分割キーボードが同一であるとは限らないため、`config.h` ファイル内で設定することができる多くの追加のオプションがあります。
+
+```c
+#define USE_I2C
+```
+
+これは分割キーボードの I2C サポートを有効にします。これは厳密には通信用ではありませんが、OLED あるいは I2C ベースのデバイスに使うことができます。
+
+```c
+#define SOFT_SERIAL_PIN D0
+```
+
+これはシリアル通信用に使われるピンを設定します。シリアルを使っていない場合は、これを定義する必要はありません。
+
+ただし、キーボード上でシリアルおよび I2C を使っている場合は、これを設定し、D0 および D1 以外の値に設定する必要があります (これらは I2C 通信のために使われます)。
+
+```c
+#define SELECT_SOFT_SERIAL_SPEED {#}`
+```
+
+シリアル通信に問題がある場合は、この値を変更して、シリアル用の通信速度を制御することができます。デフォルトは1で、可能な値は以下の通りです:
+
+* **`0`**: 約189kbps (実験用途専用)
+* **`1`**: 約137kbps (デフォルト)
+* **`2`**: 約75kbps
+* **`3`**: 約39kbps
+* **`4`**: 約26kbps
+* **`5`**: 約20kbps
+
+### ハードウェア設定オプション
+
+ハードウェアのセットアップ方法に基づいて、設定する必要のある設定が幾つかあります。
+
+```c
+#define MATRIX_ROW_PINS_RIGHT { }
+#define MATRIX_COL_PINS_RIGHT { }
+```
+
+これにより、右側のマトリックスに異なるピンのセットを指定することができます。これは、左右の形が違うキーボード (Keebio の Quefrency など)で、左右で別の構成が必要な場合に便利です。
+
+```c
+#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }
+```
+
+これにより右側のための異なる直接ピンのセットを指定することができます。
+
+```c
+#define ENCODERS_PAD_A_RIGHT { encoder1a, encoder2a }
+#define ENCODERS_PAD_B_RIGHT { encoder1b, encoder2b }
+```
+
+これにより右側のための異なるエンコーダピンのセットを指定することができます。
+
+```c
+#define RGBLIGHT_SPLIT
+```
+
+このオプションは、分割キーボードのコントローラ間で RGB ライトモードの同期を有効にします。これはコントローラに直接配線されている RGB LED を持つキーボード用です (つまり、それらは TRRS ケーブルで "追加データ"オプションを使っていません)。
+
+```c
+#define RGBLED_SPLIT { 6, 6 }
+```
+
+これは各コントローラに直接接続されている LED の数を設定します。最初の数は左側、2番目の数は右側です。
+
+?> この設定は `RGBLIGHT_SPLIT` が有効になっていることを意味し、有効になっていない場合は強制的に有効にします。
+
+
+```c
+#define SPLIT_USB_DETECT
+```
+このオプションは、スタートアップの挙動を変更して、マスタ/スレーブの決定時にアクティブな USB 接続を検出します。このオプションがタイムアウトになった場合、その片側はスレーブと見なされます。これは ARM のデフォルトの挙動で、AVR Teensy ボードに必要です (ハードウェアの制限のため)。
+
+?> この設定はバッテリパックを使ったデモの機能を停止します。
+
+```c
+#define SPLIT_USB_TIMEOUT 2000
+```
+これは、`SPLIT_USB_DETECT` を使う時のマスタ/スレーブを検出する場合の最大タイムアウトを設定します。
+
+```c
+#define SPLIT_USB_TIMEOUT_POLL 10
+```
+これは `SPLIT_USB_DETECT` を使う時のマスタ/スレーブを検出する場合のポーリング頻度を設定します
+
+## 追加のリソース(英語)
+
+Nicinabox には Let's Split キーボードのための[非常に優れた詳細なガイド](https://github.com/nicinabox/lets-split-guide)があり、トラブルシューティング情報を含む知っておくべきほとんど全てをカバーします。
+
+ただし、RGB ライトセクションは、RGB Split コードが QMK ファームウェアに追加されるずっと前に書かれたため、古くなっています。ガイドに従う代わりに、各 LED テーブ(訳注: LED strip とも呼びます)を直接コントローラに配線します。
+
+
diff --git a/docs/ja/feature_swap_hands.md b/docs/ja/feature_swap_hands.md
new file mode 100644
index 00000000000..3150801c554
--- /dev/null
+++ b/docs/ja/feature_swap_hands.md
@@ -0,0 +1,36 @@
+# スワップハンドアクション
+
+
+
+スワップハンドアクションにより、別のレイヤーを必要とせずに片手入力をサポートします。Makefile に `SWAP_HANDS_ENABLE` を設定し、キーマップに `hand_swap_config` エントリを定義します。これで `ACTION_SWAP_HANDS` コマンドキーが押されるたびにキーボードがミラーされます。例えば、QWERTY で "Hello, World" を入力するには、`^Ge^s^s^w^c W^wr^sd` を入力します。
+
+## 設定
+
+設定テーブルは列/行から新しい列/行にマップするための単純な2次元配列です。Planck の `hand_swap_config` の例:
+
+```C
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
+```
+
+配列のインデックスはマトリックスと同様に逆になり、値の型は `{col, row}` である `keypos_t` で、全ての値はゼロベースであることに注意してください。上の例では、`hand_swap_config[2][4]` (第3行, 第5列)は `{7, 2}` (第3行, 第8列) を返します。はい。紛らわしいです。
+
+## キーコードの入れ替え
+
+| キー | 説明 |
+|-----------|-------------------------------------------------------------------------|
+| `SH_T(key)` | タップで `key` を送信する。押している時の一時的な入れ替え。 |
+| `SH_ON` | 入れ替えをオンにして、そのままにする。 |
+| `SH_OFF` | 入れ替えをオフにして、そのままにする。既知の状態に戻るのに適しています。 |
+| `SH_MON` | 押すとスワップハンドし、放すと通常に戻る (一時的)。 |
+| `SH_MOFF` | 一時的に入れ替えをオフする。 |
+| `SH_TG` | キーを押すたびに入れ替えのオンとオフを切り替える。 |
+| `SH_TT` | タップで切り替える。押されている時の一時的なもの。 |
+| `SH_OS` | ワンショットスワップハンド: 押されている時あるいは次のキーを押すまで切り替える。 |
diff --git a/docs/ja/feature_tap_dance.md b/docs/ja/feature_tap_dance.md
index 5583b04ce48..5425b2a4208 100644
--- a/docs/ja/feature_tap_dance.md
+++ b/docs/ja/feature_tap_dance.md
@@ -1,8 +1,8 @@
# タップダンス: 1つのキーが3つ、5つまたは100の異なる動作をします
## イントロダクション
diff --git a/docs/ja/feature_terminal.md b/docs/ja/feature_terminal.md
new file mode 100644
index 00000000000..8e125ecee0c
--- /dev/null
+++ b/docs/ja/feature_terminal.md
@@ -0,0 +1,112 @@
+# ターミナル
+
+
+
+> この機能は現在のところ*巨大*であり、おそらく大量のメモリを搭載したキーボード、または楽しみのためにのみ配置する必要があります。
+
+ターミナル機能はテキストエディタを介してキーストロークで通信するように設計されたコマンドラインのようなインタフェースです。エディタで自動インデント機能をオフにすることは有益です。
+
+有効にするには、以下を `rules.mk` または `Makefile` に貼り付けます:
+
+ TERMINAL_ENABLE = yes
+
+そして、オンまたはオフにするために、`TERM_ON` および `TERM_OFF` キーコードを使います。
+
+有効な場合、`> ` プロンプトが現れ、ここでコマンドやバックスペース(オーディオが有効な場合は、先頭に到達するとベルが鳴ります)を入力することができ、エンターを入力するとコマンドを送信します。矢印キーは現在のところ無効なため、混乱することはありません。マウスでカーソルを移動することはお勧めしません。
+
+`#define TERMINAL_HELP` は、このページでは実際には必要のない他の出力ヘルパーを有効にします。
+
+"上矢印" および "下矢印" により、過去に入力した5つのコマンドを順に切り替えることができます。
+
+## 今後のアイデア
+
+* キーボード/ユーザ拡張可能なコマンド
+* より小さなフットプリント
+* 矢印キーのサポート
+* コマンド履歴 - 完了
+* SD カードのサポート
+* バッファディスプレイのための LCD サポート
+* キーコード -> 名称の対応表
+* レイヤー状態
+* *アナログ/デジタル ポートの読み込み/書き込み*
+* RGB モード関連機能
+* マクロ定義
+* EEPROM の読み込み/書き込み
+* オーディオ制御
+
+## 現在のコマンド
+
+### `about`
+
+現在の QMK のバージョンとビルドした日の出力:
+
+```
+> about
+QMK Firmware
+ v0.5.115-7-g80ed73-dirty
+ Built: 2017-08-29-20:24:44
+```
+
+
+### `print-buffer`
+
+最後に入力した5つのコマンドの出力
+
+```
+> print-buffer
+0. print-buffer
+1. help
+2. about
+3. keymap 0
+4. help
+5. flush-buffer
+```
+
+### `flush-buffer`
+
+コマンドバッファをクリア
+```
+> flush-buffer
+Buffer cleared!
+```
+
+
+### `help`
+
+
+利用可能なコマンドの出力:
+
+```
+> help
+commands available:
+ about help keycode keymap exit print-buffer flush-buffer
+```
+
+### `keycode `
+
+特定のレイヤー、行および列のキーコード値の出力:
+
+```
+> keycode 0 1 0
+0x29 (41)
+```
+
+### `keymap `
+
+特定のレイヤーの全てのキーマップの出力
+
+```
+> keymap 0
+0x002b, 0x0014, 0x001a, 0x0008, 0x0015, 0x0017, 0x001c, 0x0018, 0x000c, 0x0012, 0x0013, 0x002a,
+0x0029, 0x0004, 0x0016, 0x0007, 0x0009, 0x000a, 0x000b, 0x000d, 0x000e, 0x000f, 0x0033, 0x0034,
+0x00e1, 0x001d, 0x001b, 0x0006, 0x0019, 0x0005, 0x0011, 0x0010, 0x0036, 0x0037, 0x0038, 0x0028,
+0x5cd6, 0x00e0, 0x00e2, 0x00e3, 0x5cd4, 0x002c, 0x002c, 0x5cd5, 0x0050, 0x0051, 0x0052, 0x004f,
+>
+```
+
+### `exit`
+
+ターミナルの終了 - `TERM_OFF` と同じ。
diff --git a/docs/ja/feature_thermal_printer.md b/docs/ja/feature_thermal_printer.md
new file mode 100644
index 00000000000..508123bd64e
--- /dev/null
+++ b/docs/ja/feature_thermal_printer.md
@@ -0,0 +1,15 @@
+# 感熱式プリンタ
+
+
+
+
+
+## 感熱式プリンタのキーコード
+
+| キー | 説明 |
+|-----------|----------------------------------------|
+| `PRINT_ON` | ユーザが入力した全ての印刷を開始 |
+| `PRINT_OFF` | ユーザが入力した全ての印刷を停止 |
diff --git a/docs/ja/feature_userspace.md b/docs/ja/feature_userspace.md
new file mode 100644
index 00000000000..69381324717
--- /dev/null
+++ b/docs/ja/feature_userspace.md
@@ -0,0 +1,260 @@
+# ユーザスペース: キーマップ間でのコードの共有
+
+
+
+似たキーマップを複数のキーボードで使う場合、それらの間でコードを共有できるという利点が得られることがあります。`users/`に以下の構造でキーマップ(理想的には GitHub のユーザ名、``)と同じ名前の独自のフォルダを作成します:
+
+* `/users//` (パスに自動的に追加されます)
+ * `readme.md` (オプション、推奨)
+ * `rules.mk` (自動的に含まれます)
+ * `config.h` (自動的に含まれます)
+ * `.h` (オプション)
+ * `.c` (オプション)
+ * `cool_rgb_stuff.c` (オプション)
+ * `cool_rgb_stuff.h` (オプション)
+
+
+以下のように、`` という名前のキーマップをビルドする時のみ、これが全て起きます:
+
+ make planck:
+
+例えば、
+
+ make planck:jack
+
+は、`/users/jack/rules.mk` に加えて、パスに `/users/jack/` フォルダを含めます。
+
+!> この `name` は必要に応じて[上書き](#override-default-userspace)することができます。
+
+## `Rules.mk`
+
+`rules.mk` は自動的に処理される2つファイルのうちの1つです。これにより、コンパイル時に追加のソースファイル( `.c` など)を追加できます。
+
+追加されるデフォルトのソースファイルとして `.c` を使うことを強くお勧めします。それを追加するために、以下のように `rules.mk` に SRC を追加する必要があります:
+
+ SRC += .c
+
+追加のファイルも同じ方法で追加できます - ただし、``.c/.h という名前のファイルを最初に用意することをお勧めします。
+
+ビルド時に `/users//rules.mk` ファイルはキーマップの `rules.mk` の_後_でインクルードされます。これにより、キーボードによっては利用できないことのある個々の QMK 機能を利用する機能をユーザスペース `rules.mk` に持つことができます。
+
+例えば、RGB ライトをサポートする全てのキーボード間で RGB 制御機能を共有する場合、RGBLIGHT 機能が有効であればサポートを追加することができます:
+```make
+ifeq ($(strip $(RGBLIGHT_ENABLE)), yes)
+ # ここにファンシーな rgb 関数のソースを含める
+ SRC += cool_rgb_stuff.c
+endif
+```
+
+別のやり方として、キーマップの `rules.mk` で `define RGB_ENABLE` と定義し、以下のようにユーザスペースの `rules.mk` で変数をチェックすることができます:
+```make
+ifdef RGB_ENABLE
+ # ここにファンシーな rgb 関数のソースを含める
+ SRC += cool_rgb_stuff.c
+endif
+```
+
+### デフォルトのユーザスペースの上書き :id=override-default-userspace
+
+デフォルトでは、使用されるユーザスペース名はキーマップ名と同じです。状況によってはこれは望ましくありません。例えば、[レイアウト](ja/feature_layouts.md)機能を使う場合、異なるキーマップに同じ名前 (例えば、ANSI および ISO) を使うことができません。レイアウトに `mylayout-ansi` や `mylayout-iso` という名前を付け、以下の行をレイアウトの `rules.mk` に追加します:
+
+```
+USER_NAME := mylayout
+```
+
+これは、基板上に物理的に異なる機能を備えた、複数の異なるキーボード(RGBライトを備えたキーボード、オーディオを備えたキーボード、LEDの数が異なる、コントローラ上の異なるPINに接続されているなど)がある場合にも役立ちます。
+
+## 設定オプション (`config.h`)
+
+さらに、ここにある `config.h` はキーマップフォルダ内の同名のファイルと同じように処理されます。これは `.h` ファイルとは別個に処理されます。
+
+この理由は、`.h` は (`#define TAPPING_TERM 100` などのような)設定を追加する時には追加されず、`config.h` ファイル内の `` ファイルを含めるとコンパイルの問題を引き起こすからです。
+
+!>`config.h` は[設定オプション](ja/config_options.md)のために使い、`.h` ファイルはユーザあるいは(レイヤーあるいはキーコードのための enum のような)キーマップ固有の設定のために使うべきです
+
+
+## Readme (`readme.md`)
+
+作者情報 (あなたの名前、GitHub ユーザ名、eメール)およびオプションで[GPL 互換のライセンス](https://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses)を含めてください。
+
+以下をテンプレートとして使うことができます:
+```
+Copyright @
+
+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 .
+```
+
+年、名前、eメールおよび GitHub ユーザ名をあなたの情報に置き換えます。
+
+さらに、コードを他の人に共有したい場合、ここはコードを文章化するのに適した場所です。
+
+## 特定のキーマップをサポートする全てのキーボードをビルドする
+
+1つのコマンドで全てのキーマップのビルドを確認したいですか?以下で実行することができます:
+
+ make all:
+
+例えば、
+
+ make all:jack
+
+これは、[_プルリクエスト_](https://github.com/qmk/qmk_firmware/pulls) を準備する時に全てが正常にコンパイルされることを確認したい場合に最適です。
+
+## 例
+
+簡単な例については、[`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna) を調べてください。
+より複雑な例については、[`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna) のユーザスペースを調べてください。
+
+
+### カスタマイズされた関数 :id=customized-functions
+
+QMK には、[`_quantum`、`_kb` および `_user` バージョン](ja/custom_quantum_functions.md#a-word-on-core-vs-keyboards-vs-keymap)を持つ使用可能な[関数](custom_quantum_functions.md)が山ほどあります。 ほとんどの場合、これらの関数のユーザバージョンを使う必要があります。しかし問題はそれらをユーザスペースで使う場合、キーマップで使うことができるバージョンが無いことです。
+
+しかし、実際にはキーマップバージョンのサポートを追加し、ユーザスペースとキーマップの両方で使うことができます。
+
+
+例えば、`layer_state_set_user()` 関数を見てみましょう。全てのキーボードで [Tri Layer State](ja/ref_functions.md#olkb-tri-layers) 機能を有効にしながら、`keymap.c` ファイルで Tri Layer 機能を保持することができます。
+
+`` ファイル内で、以下を追加する必要があります:
+```c
+__attribute__ ((weak))
+layer_state_t layer_state_set_keymap (layer_state_t state) {
+ return state;
+}
+
+layer_state_t layer_state_set_user (layer_state_t state) {
+ state = update_tri_layer_state(state, 2, 3, 5);
+ return layer_state_set_keymap (state);
+}
+```
+`__attribute__ ((weak))` 部分は、コンパイラにこれが `keymap.c` 内のバージョンに置き換えられるプレースホルダ関数であることを伝えます。そうすれば、`keymap.c` に追加する必要はありませんが、追加しても関数が同じ名前を持つため競合することはありません。
+
+ここでの `_keymap` 部分は重要では無く、`_quantum`、`_kb` あるいは `_user` は既に使われているため、それら以外のものである必要があります。`layer_state_set_mine`、`layer_state_set_fn` などを使うことができます。
+
+[`users/drashna`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna) 内の [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) でこのリストと他の一般的な関数を見つけることができます。
+
+### カスタム機能
+
+ユーザスペース機能は膨大な数のキーボードをサポートすることができるため、特定の機能は有効にしたいが、他のキーボードでは有効にしたくないかもしれません。そして実際に自分のユーザスペースで有効あるいは無効にすることができる「機能」を作成することができます。
+
+例えば、(スペースを節約するために)特定のキーボードでのみたくさんのマクロを利用したい場合、それらを `#ifdef MACROS_ENABLED` して「見えないように」してから、キーボードごとに有効にすることができます。これを行うには、以下を rules.mk に追加します。
+```make
+ifeq ($(strip $(MACROS_ENABLED)), yes)
+ OPT_DEFS += -DMACROS_ENABLED
+endif
+```
+`OPT_DEFS` 設定は `MACROS_ENABLED` がキーボード用に定義されるようにし(名前の前に `-D` があることに注意してください)、c/h ファイルで状態をチェックするために `#ifdef MACROS_ENABLED` を使うことができ、それに基づいてそのコードを処理します。
+
+次にキーマップの `rules.mk` に `MACROS_ENABLED = yes` を追加し、ユーザスペースでこの機能とコードを有効にします。
+
+そして `process_record_user` 関数の中で、以下のようなことを行います:
+```c
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+#ifdef MACROS_ENABLED
+ case MACRO1:
+ if (!record->event.pressed) {
+ SEND_STRING("This is macro 1!");
+ }
+ break;
+ case MACRO2:
+ if (!record->event.pressed) {
+ SEND_STRING("This is macro 2!");
+ }
+ break;
+#endif
+ }
+ return true;
+}
+```
+
+
+### 結合マクロ
+
+全てのキーマップについてユーザスペースにマクロやそのほかの関数を統合したい場合は、そうすることができます。これは上記の[カスタマイズ関数](#customized-functions)の例に基づいています。これは異なるキーボード間で共有される大量のマクロを維持し、キーボード固有のマクロも可能です。
+
+最初に、全ての `keymap.c` ファイルを調べ、代わりに `process_record_user` を `process_record_keymap` に置き換えます。この方法では、これらのキーボードでキーボード固有のコードを使用でき、カスタムの "global" キーコードも使うことができます。また、`SAFE_RANGE` を `NEW_SAFE_RANGE` に置き換えて、キーコードが重複しないようにすることもできます。
+
+次に、全ての keymap.c ファイルに `#include ` を追加します。これにより、各キーマップでそれらを再定義することなく新しいキーコードを使うことができます。
+
+それが完了したら、必要なキーコードの定義を `.h` ファイルに設定します。例えば:
+```c
+#pragma once
+
+#include "quantum.h"
+#include "action.h"
+#include "version.h"
+
+// 全てを定義
+enum custom_keycodes {
+ KC_MAKE = SAFE_RANGE,
+ NEW_SAFE_RANGE // キーマップ固有のコードについては "NEW_SAFE_RANGE" を使用
+};
+```
+
+ここで、`.c` ファイルを作成し、この内容をそれに追加します:
+
+```c
+#include ".h"
+
+__attribute__ ((weak))
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_MAKE: // ファームウェアをコンパイルし、キーボードのブートローダに基づく書き込みコマンドを追加します
+ if (!record->event.pressed) {
+ uint8_t temp_mod = get_mods();
+ uint8_t temp_osm = get_oneshot_mods();
+ clear_mods(); clear_oneshot_mods();
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
+ #ifndef FLASH_BOOTLOADER
+ if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
+ #endif
+ {
+ SEND_STRING(":flash");
+ }
+ if ((temp_mod | temp_osm) & MOD_MASK_CTRL) {
+ SEND_STRING(" -j8 --output-sync");
+ }
+ tap_code(KC_ENT);
+ set_mods(temp_mod);
+ }
+ break;
+
+ }
+ return process_record_keymap(keycode, record);
+}
+```
+
+(マクロパッドのような) Shift ボタンを持たないキーボードについては、ブートローダオプションを常に含める方法が必要です。これを行うには、以下をユーザスペースフォルダ内の `rules.mk` に追加します:
+
+```make
+ifeq ($(strip $(FLASH_BOOTLOADER)), yes)
+ OPT_DEFS += -DFLASH_BOOTLOADER
+endif
+```
+
+これは任意のキーマップで使うことができる新しい `KC_MAKE` キーコードを追加します。そして、このキーコードは、`make :` を出力するため、頻繁なコンパイルを簡単にします。そして、これは現在のキーボードの情報を出力するため、全てのキーボードとキーマップで動作します。そのため毎回これを入力する必要はありません。
+
+また、Shift を押したままにすると書き込みの対象 (`:flash`) をコマンドに追加します。Control を押したままにすると、複数のファイルを一度に処理することでコンパイル時間を短縮する幾つかのコマンドを追加します。
+
+そして Shift キーが無いキーボード、あるいは常に書き込みを試したいキーボードについては、キーマップの `rules.mk` に `FLASH_BOOTLOADER = yes` を追加することができます。
+
+?> これはブートローダの設定に基づいて正しいユーティリティを使って新しくコンパイルされたファームウェアを自動的に書き込むはずです (あるいはデフォルトで HEX ファイルを生成するだけ)。ただし、これは全てのシステムで動作するわけではないことに注意してください。はっきり言うと、AVRDUDE は WSL では動作しません。そして、これは BootloadHID あるいは mdloader をサポートしません。
diff --git a/docs/ja/feature_velocikey.md b/docs/ja/feature_velocikey.md
new file mode 100644
index 00000000000..f9b6e73bd48
--- /dev/null
+++ b/docs/ja/feature_velocikey.md
@@ -0,0 +1,35 @@
+# Velocikey
+
+
+
+Velocikey は入力の速度を使って(レインボー渦巻効果のような)ライト効果の速度を制御できる機能です。速く入力すればするほどライトが速くなります!
+
+## 使用法
+Velocikey を使うためには、2つのステップがあります。最初に、キーボードをコンパイルする時に、`rules.mk` に `VELOCIKEY_ENABLE=yes` を設定する必要があります。例えば:
+
+```
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+STENO_ENABLE = no
+EXTRAKEY_ENABLE = yes
+VELOCIKEY_ENABLE = yes
+```
+
+次に、キーボードの使用中に、VLK_TOG キーコードを使って Velocikey を有効にする必要もあります。これは機能をオンおよびオフにします。
+
+以下の全てのライト効果が、Velocikey を有効にすることで制御されます:
+- RGB 明滅動作
+- RGB レインボームード
+- RGB レインボー渦巻
+- RGB スネーク
+- RGB ナイト
+
+LED 明滅動作の効果のサポートは計画されていますがまだ利用できません。
+
+Velocikey が有効になっている限り、現在オンになっている RGB ライトの他の全ての速度設定に関係なく、速度が制御されます。
+
+## 設定
+Velocikey は現在のところキーボード設定を介したどのような設定もサポートしません。速度の増加あるいは減少率などを調整したい場合は、`velocikey.c` を編集し、そこで値を調整して、好みの速度を実現する必要があります。
diff --git a/docs/ja/feature_wpm.md b/docs/ja/feature_wpm.md
new file mode 100644
index 00000000000..3cb5e58fcb0
--- /dev/null
+++ b/docs/ja/feature_wpm.md
@@ -0,0 +1,24 @@
+# Word Per Minute (WPM) の計算
+
+
+
+WPM 機能は、キーストローク間の時間から1分あたりの平均(移動平均)単語数を計算し、様々な用途で利用できるようにします。
+
+`rules.mk` に以下を追加することで WPM システムを有効にします:
+
+ WPM_ENABLE = yes
+
+ソフトシリアルを使っている分割キーボードについては、計算された WPM スコアがマスター側とスレーブ側で利用可能です。
+
+## 公開関数
+
+`uint8_t get_current_wpm(void);`
+この関数は符号なし整数で現在の WPM を返します。
+
+
+## WPM 計算のためのカスタマイズ化されたキー
+
+デフォルトでは、WPM スコアは文字、空白、およびいくつかの句読点のみを含みます。WPM の計算に含むとみなす文字セットを変更したい場合は、`wpm_keycode_user(uint16_t keycode)` を実装し、計算に含めたい文字について true を返し、計算しない特定のキーコードに false を返すようにします。
diff --git a/docs/ja/flashing.md b/docs/ja/flashing.md
index 713d4fdf9e0..15828514525 100644
--- a/docs/ja/flashing.md
+++ b/docs/ja/flashing.md
@@ -1,8 +1,8 @@
# 書き込みの手順とブートローダ情報
キーボードが使用するブートローダにはかなり多くの種類があり、ほぼ全てが異なる書き込みの方法を使います。幸いなことに、[QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) のようなプロジェクトは、あまり深く考える必要無しに様々なタイプと互換性を持つことを目指していますが、この文章では様々なタイプのブートローダとそれらを書き込むために利用可能な方法について説明します。
diff --git a/docs/ja/getting_started_github.md b/docs/ja/getting_started_github.md
index 5457c1e06e9..24a217c7459 100644
--- a/docs/ja/getting_started_github.md
+++ b/docs/ja/getting_started_github.md
@@ -1,15 +1,15 @@
-# QMK で Github を使う方法
+# QMK で GitHub を使う方法
-Github は慣れていない人には少し注意が必要です - このガイドは、QMK におけるフォーク、クローン、プルリクエストのサブミットの各ステップについて説明します。
+GitHub は慣れていない人には少し注意が必要です - このガイドは、QMK におけるフォーク、クローン、プルリクエストのサブミットの各ステップについて説明します。
?> このガイドでは、あなたがコマンドラインでの実行にある程度慣れており、システムに git がインストールされていることを前提にしています。
-[QMK Github ページ](https://github.com/qmk/qmk_firmware)を開くと、右上に "Fork" というボタンが見えます:
+[QMK GitHub ページ](https://github.com/qmk/qmk_firmware)を開くと、右上に "Fork" というボタンが見えます:

@@ -59,7 +59,7 @@ To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master
```
-あなたの変更は今では Github 上のフォークにあります - フォーク (`https://github.com//qmk_firmware`)に戻ると、"New Pull Request" ボタンをクリックすることで新しいプルリクエストを作成することができます:
+あなたの変更は今では GitHub 上のフォークにあります - フォーク (`https://github.com//qmk_firmware`)に戻ると、"New Pull Request" ボタンをクリックすることで新しいプルリクエストを作成することができます:

diff --git a/docs/ja/getting_started_make_guide.md b/docs/ja/getting_started_make_guide.md
index d33485ce111..0d39583a1dc 100644
--- a/docs/ja/getting_started_make_guide.md
+++ b/docs/ja/getting_started_make_guide.md
@@ -1,8 +1,8 @@
# より詳細な `make` 手順
`make` コマンドの完全な構文は `::` です:
diff --git a/docs/ja/getting_started_vagrant.md b/docs/ja/getting_started_vagrant.md
index 66fb8951077..58eca5c0a30 100644
--- a/docs/ja/getting_started_vagrant.md
+++ b/docs/ja/getting_started_vagrant.md
@@ -1,8 +1,8 @@
# Vagrant クイックスタート
このプロジェクトは、プライマリオペレーティングシステムに大きな変更を加えることなくキーボードの新しいファームウェアを非常に簡単に構築することができる `Vagrantfile` を含みます。これは、あなたがプロジェクトをクローンしビルドを実行した時に、ビルドのために Vagrantfile を使っている他のユーザと全く同じ環境を持つことも保証します。これにより、人々はあなたが遭遇した問題の解決をより簡単に行えるようになります。
diff --git a/docs/ja/hardware_avr.md b/docs/ja/hardware_avr.md
index 6eb86a37867..fecbfd71ffb 100644
--- a/docs/ja/hardware_avr.md
+++ b/docs/ja/hardware_avr.md
@@ -2,8 +2,8 @@
このページでは QMK における AVR マイコンのサポートについて説明します。AVR マイコンには、Atmel 社製の atmega32u4、atmega32u2、at90usb1286 やその他のマイコンを含みます。AVR マイコンは、簡単に動かせるよう設計された8ビットの MCU です。キーボードでよく使用される AVR マイコンには USB 機能や大きなキーボードマトリックスのためのたくさんの GPIO を搭載しています。これらは、現在、キーボードで使われる最も一般的な MCU です。
diff --git a/docs/ja/hardware_drivers.md b/docs/ja/hardware_drivers.md
index cc85589e7b2..f77b48ba8e6 100644
--- a/docs/ja/hardware_drivers.md
+++ b/docs/ja/hardware_drivers.md
@@ -2,8 +2,8 @@
QMK はたくさんの異なるハードウェアで使われています。最も一般的な MCU とマトリックス構成をサポートしていますが、キーボードへ他のハードウェアを追加し制御するためのドライバーもいくつか用意されています。例えば、マウスやポインティングデバイス、分割キーボード用の IO エキスパンダ、Bluetooth モジュール、LCD、OLED、TFT 液晶などがあります。
diff --git a/docs/ja/hardware_keyboard_guidelines.md b/docs/ja/hardware_keyboard_guidelines.md
index 5a9de52ef42..ebcbb155420 100644
--- a/docs/ja/hardware_keyboard_guidelines.md
+++ b/docs/ja/hardware_keyboard_guidelines.md
@@ -2,8 +2,8 @@
QMK は開始以来、コミュニティにおけるキーボードの作成や保守に貢献しているあなたのような人たちのおかげで飛躍的に成長しました。私たちが成長するにつれて、うまくやるためのいくつかのパターンを発見しました。他の人たちがあなたの苦労の恩恵を受けやすくするため、それにあわせてもらえるようお願いします。
@@ -66,10 +66,77 @@ Clueboard は、サブフォルダをまとめるためとキーボードのリ
全てのプロジェクトには、マトリックスサイズ、製品名、USB VID/PID、説明、その他の設定などが含まれた `config.h` ファイルが必要です。一般に、このファイルを使用して常に機能するキーボードの重要な情報やデフォルトを設定します。
+また、`config.h` ファイルはサブフォルダにも置くことができ、その読み込み順は以下の通りです。
+
+* `keyboards/top_folder/config.h`
+ * `keyboards/top_folder/sub_1/config.h`
+ * `keyboards/top_folder/sub_1/sub_2/config.h`
+ * `keyboards/top_folder/sub_1/sub_2/sub_3/config.h`
+ * `keyboards/top_folder/sub_1/sub_2/sub_3/sub_4/config.h`
+ * `users/a_user_folder/config.h`
+ * `keyboards/top_folder/keymaps/a_keymap/config.h`
+ * `keyboards/top_folder/sub_1/sub_2/sub_3/sub_4/post_config.h`
+ * `keyboards/top_folder/sub_1/sub_2/sub_3/post_config.h`
+ * `keyboards/top_folder/sub_1/sub_2/post_config.h`
+ * `keyboards/top_folder/sub_1/post_config.h`
+* `keyboards/top_folder/post_config.h`
+
+`post_config.h` ファイルは、`config.h` ファイルで指定された内容に応じて、追加の後処理を行うために使用することができます。
+例えば、キーマップレベルの `config.h` ファイルで `IOS_DEVICE_ENABLE` マクロを以下のように定義すると、`post_config.h` ファイルでより詳細な設定を行うことができます。
+
+* `keyboards/top_folder/keymaps/a_keymap/config.h`
+ ```c
+ #define IOS_DEVICE_ENABLE
+ ```
+* `keyboards/top_folder/post_config.h`
+ ```c
+ #ifndef IOS_DEVICE_ENABLE
+ // USB_MAX_POWER_CONSUMPTION value for this keyboard
+ #define USB_MAX_POWER_CONSUMPTION 400
+ #else
+ // fix iPhone and iPad power adapter issue
+ // iOS device need lessthan 100
+ #define USB_MAX_POWER_CONSUMPTION 100
+ #endif
+
+ #ifdef RGBLIGHT_ENABLE
+ #ifndef IOS_DEVICE_ENABLE
+ #define RGBLIGHT_LIMIT_VAL 200
+ #define RGBLIGHT_VAL_STEP 17
+ #else
+ #define RGBLIGHT_LIMIT_VAL 35
+ #define RGBLIGHT_VAL_STEP 4
+ #endif
+ #ifndef RGBLIGHT_HUE_STEP
+ #define RGBLIGHT_HUE_STEP 10
+ #endif
+ #ifndef RGBLIGHT_SAT_STEP
+ #define RGBLIGHT_SAT_STEP 17
+ #endif
+ #endif
+ ```
+
+?> 上記の例のように `post_config.h` でオプションを定義する場合、キーボードやユーザレベルの `config.h` で同じオプションを定義してはいけません。
+
### `rules.mk`
このファイルが存在するということは、フォルダがキーボードであり、`make` コマンドで使用できることを意味します。ここでキーボードのビルド環境を構築し、デフォルトの機能を設定します。
+`rules.mk` ファイルはサブフォルダにも置くことができ、その読み込み順は以下の通りです。
+
+* `keyboards/top_folder/rules.mk`
+ * `keyboards/top_folder/sub_1/rules.mk`
+ * `keyboards/top_folder/sub_1/sub_2/rules.mk`
+ * `keyboards/top_folder/sub_1/sub_2/sub_3/rules.mk`
+ * `keyboards/top_folder/sub_1/sub_2/sub_3/sub_4/rules.mk`
+ * `keyboards/top_folder/keymaps/a_keymap/rules.mk`
+ * `users/a_user_folder/rules.mk`
+* `common_features.mk`
+
+`rules.mk` ファイルに書かれた多くの設定は `common_features.mk` によって解釈され、必要なソースファイルやコンパイラのオプションが設定されます。
+
+?> 詳しくは `build_keyboard.mk` と `common_features.mk` を見てください。
+
### ``
ここではキーボードのカスタマイズされたコードを記述します。通常、初期化してキーボードのハードウェアを制御するコードを記述します。キーボードが LED やスピーカー、その他付属ハードウェアのないキーマトリックスのみで構成されている場合は空にできます。
diff --git a/docs/ja/newbs.md b/docs/ja/newbs.md
index 465b82106d2..b582bc42567 100644
--- a/docs/ja/newbs.md
+++ b/docs/ja/newbs.md
@@ -2,40 +2,47 @@
-QMK は、メカニカルキーボード用の強力なオープンソースファームウェアです。
-QMK を使用して、シンプルかつ強力な方法でキーボードをカスタマイズできます。
-完全な初心者からプログラマーに至るまで、あらゆるスキルレベルの人々が QMK を使用してキーボードをカスタマイズしています。
-このガイドは、あなたのスキルにかかわらず、同じことを行う手助けをします。
+キーボードには、コンピュータ入っているものと似たようなプロセッサが入っています。
+このプロセッサでは、キーボードのボタンの押し下げの検出を担当し、キーが押されたときにコンピュータに通知するソフトウェアが動作しています。
+QMK Firmware は、そのソフトウェアの役割を果たし、ボタンの押下を検出しその情報をホストコンピュータに渡します。
+カスタムキーマップを作るということは、キーボード上で動くプログラムを作るということなのです。
+
+QMK は、簡単なことは簡単に、そして、難しいことを可能なことにすることで、あなたの手にたくさんのパワーをもたらします。
+パワフルなキーマップを作るためにプログラムを作成する方法を知る必要はありません。いくつかのシンプルな文法に従うだけで OK です。
お使いのキーボードで QMK を実行できるかどうか不明ですか?
もし作成したキーボードがメカニカルキーボードの場合、実行できる可能性が高いです。
-QMK は[多くの趣味のキーボード](http://qmk.fm/keyboards/)をサポートしているため、もし現在のキーボードで QMK を実行できない場合でも、ニーズに合ったキーボードを見つけるのに問題はないはずです。
+QMK は[多くの趣味のキーボード](http://qmk.fm/keyboards/)をサポートしています。
+現在使用しているキーボードが QMK を実行できない場合、QMK を実行できるキーボードの選択肢はたくさんあります。
+
+## このガイドは私のためにあるのでしょうか?
+
+このガイドは、ソースコードを使ってキーボードのファームウェアを構築したいと考えている人に適しています。
+もしあなたがすでにプログラマーであれば、このプロセスはとても身近で簡単に理解できるでしょう。
+もし、プログラミングの考え方に抵抗があるのであれば、代わりに[私たちのオンラインGUI](ja/newbs_building_firmware_configurator.md)を見てみてください。
## 概要
-このガイドには7つの主要なセクションがあります。
+このガイドには4つの主要なセクションがあります。
-* [はじめに](ja/newbs_getting_started.md)
-* [コマンドラインを使用して初めてのファームウェアを構築する](ja/newbs_building_firmware.md)
-* [オンライン GUI を使用して初めてのファームウェアを構築する](ja/newbs_building_firmware_configurator.md)
-* [ファームウェアを書きこむ](ja/newbs_flashing.md)
-* [テストとデバッグ](ja/newbs_testing_debugging.md)
-* [QMK における Git 運用作法](ja/newbs_git_best_practices.md)
-* [さらに学ぶための学習リソース](ja/newbs_learn_more_resources.md)
+1. [環境設定](ja/newbs_getting_started.md)
+2. [コマンドラインを使用して初めてのファームウェアを構築する](ja/newbs_building_firmware.md)
+3. [ファームウェアを書きこむ](ja/newbs_flashing.md)
+4. [テストとデバッグ](ja/newbs_testing_debugging.md)
このガイドは、これまでソフトウェアをコンパイルしたことがない人を支援することに特化しています。
その観点から選択と推奨を行います。
これらの手順の多くには代替方法があり、これらの代替方法のほとんどをサポートしています。
タスクを達成する方法について疑問がある場合は、[案内を求めることができます](ja/getting_started_getting_help.md)。
-## 追加のリソース(英語)
+## 追加のリソース
-* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – 新規ユーザ視点から見た QMK ファームウェアの基本的な使用方法をカバーしたユーザ作成のブログ。
+このガイドの他にも、QMK の学習に役立つリソースがいくつかあります。[学習リソース](ja/newbs_learn_more_resources.md)のページにまとめました。
-## 追加のリソース(日本語)
+## オープンソース
-_日本語のリソース情報を募集中です。_
+QMKは GNU General Public License でリリースされているオープンソース・ソフトウェアです。
diff --git a/docs/ja/newbs_building_firmware_configurator.md b/docs/ja/newbs_building_firmware_configurator.md
index e54921e5205..61d25ffb52c 100644
--- a/docs/ja/newbs_building_firmware_configurator.md
+++ b/docs/ja/newbs_building_firmware_configurator.md
@@ -2,112 +2,19 @@
+[](https://config.qmk.fm/)
+
[QMK Configurator](https://config.qmk.fm) は、QMKファームウェアの hex ファイルを生成するオンライングラフィカルユーザーインターフェイスです。
-?> **次の手順を順番に実行してください。**
-
-[Video Tutorial](https://www.youtube.com/watch?v=-imgglzDMdY) を見てください。
+[ビデオチュートリアル](https://www.youtube.com/watch?v=-imgglzDMdY) を見てください。
+多くの人は、それが自分のキーボードのプログラミングを始めるのに十分な情報であることに気づくでしょう。
QMK Configurator は Chrome/Firefox で最適に動作します。
-!> **KLE や kbfirmware などの他のツールのファイルは、QMK Configurator と互換性がありません。それらをロードしたり、インポートしたりしないでください。QMK Configurator は異なるツールです。**
+!> **注意: Keyboard Layout Editor (KLE) や kbfirmware などの他のツールのファイルは、QMK Configurator と互換性がありません。それらをロードしたり、インポートしたりしないでください。QMK Configurator は異なるツールです。**
-## キーボードを選ぶ
-
-ドロップダウンボックスをクリックして、キーマップを作成するキーボードを選択します。
-
-?> **キーボードに複数のバージョンがある場合は、正しいバージョンを選択してください。**
-
-大事なことなのでもう一度言います。
-
-!> **正しいバージョンを選択してください!**
-
-キーボードが QMK を搭載していると宣伝されていてもリストにない場合は、開発者がまだ作業中か、私たちがまだマージするきっかけがなかった可能性があります。
-アクティブな [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) がない場合、[qmk_firmware](https://github.com/qmk/qmk_firmware/issues)で報告して、その特定のキーボードのサポートをリクエストします。
-製作者自身の github アカウントにある QMK 搭載キーボードもあります。
-それも再確認してください。
-
-## キーボードのレイアウトを選択する
-
-作成したいと思うキーマップに最も近いレイアウトを選択します。一部のキーボードには、まだ十分なレイアウトまたは正しいレイアウトが定義されていません。これらは将来サポートされる予定です。
-
-## キーマップの名前
-
-お好みの名前をキーマップにつけます。
-
-?> コンパイル時に問題が発生した場合は、もしかすると QMK ファームウェアリポジトリに既に同じ名前が存在しているのかもしれません、名前を変更してみてください。
-
-## キーマップを作る
-
-キーコード入力は3つの方法で実行できます。
-1. ドラッグ・アンド・ドロップ
-2. レイアウト上の空の場所をクリックして、希望するキーコードをクリックします
-3. レイアウト上の空の場所をクリックして、キーボードの物理キーを押します
-
-マウスをキーの上に置くと、そのキーコードの機能の短い説明文が出ます。より詳細な説明については以下を見てください。
-
-[Basic Keycode Reference](https://docs.qmk.fm/#/keycodes_basic)
-[Advanced Keycode Reference](https://docs.qmk.fm/#/feature_advanced_keycodes)
-
-キーマップをサポートするレイアウトが見つからない場合、例えばスペースバーが3分割されていたり、バックスペースが2分割されていたり、シフトが2分割されているような場合、それらを全て埋めてください。
-
-### 例:
-
-3分割のスペースバー: 全てスペースバーで埋めます。
-
-2分割のバックスペース: 両方ともバックスペースで埋めます。
-
-2分割の右シフト: 両方とも右シフトで埋めます。
-
-左シフトと ISO サポート用に1つずつ: 両方とも左シフトで埋めます。
-
-5分割だが4キーのみ: 以前やったことがある人を推測して確認するか尋ねてください。
-
-## 後日のためにキーマップを保存する
-
-キーマップに満足するか、または後で作業したい場合は、`Export Keymap' ボタンを押します。上記で選択した名前に .json が追加されたキーマップが保存されます。
-
-後日、`Import Keymap` ボタンを押すことで、この .json ファイルをロードできます。
-
-!> **注意:** このファイルは、kbfirmware.com またはその他のツールに使用される .json ファイルと同じ形式ではありません。これらのツールにこれを使用したり、QMK Configurator でこれらのツールの .json を使用しようとすると、キーボードが **爆発** する可能性があります。
-
-## ファームウェアファイルを生成する
-
-緑色の `Compile` ボタンを押します。
-
-コンパイルが完了すると、緑色の `Download Firmware` ボタンを押すことができます。
-
-## キーボードに書き込む(フラッシュする)
-
-[ファームウェアを書きこむ](ja/newbs_flashing.md) を参照してください。
-
-## トラブルシューティング
-
-#### 私の .json ファイルが動きません
-
-.json ファイルが QMK Configurator で作ったものの場合、おめでとうございます。バグに遭遇しました。 [qmk_configurator](https://github.com/qmk/qmk_configurator/issues) で報告してください。
-
-そうでない場合は、... 他の .json ファイルを使用しないようにという、上に書いた注意書きを見逃してませんか?
-
-#### レイアウトに余分なスペースがありますか?どうすればいいですか?
-
-もしスペースバーが3つに分かれている場合は、全てスペースバーで埋めるのが最善の方法です。バックスペースやシフトについても同じことができます。
-
-#### キーコードってなに?
-
-以下を見てください。
-
-[Basic Keycode Reference](https://docs.qmk.fm/#/keycodes_basic)
-[Advanced Keycode Reference](https://docs.qmk.fm/#/feature_advanced_keycodes)
-
-#### コンパイルできません
-
-キーマップの他のレイヤーを再確認して、ランダムなキーが存在しないことを確認してください。
-
-## 問題とバグ
-
-私たちは利用者の依頼やバグレポートを常に受け入れています。[qmk_configurator](https://github.com/qmk/qmk_configurator/issues) で報告してください。
+[QMK Configurator: ステップ・バイ・ステップ](ja/configurator_step_by_step.md)を参照してください。
diff --git a/docs/ja/newbs_git_best_practices.md b/docs/ja/newbs_git_best_practices.md
index 4e20e4e0b02..7ba16fce751 100644
--- a/docs/ja/newbs_git_best_practices.md
+++ b/docs/ja/newbs_git_best_practices.md
@@ -2,8 +2,8 @@
## または、"如何にして私は心配することをやめて Git を愛することを学んだか。"
diff --git a/docs/ja/newbs_git_resolving_merge_conflicts.md b/docs/ja/newbs_git_resolving_merge_conflicts.md
index 893c3d50357..532b1e30019 100644
--- a/docs/ja/newbs_git_resolving_merge_conflicts.md
+++ b/docs/ja/newbs_git_resolving_merge_conflicts.md
@@ -2,8 +2,8 @@
ブランチでの作業の完了に時間がかかる場合、他の人が行った変更が、プルリクエストを開いたときにブランチに加えた変更と競合することがあります。
diff --git a/docs/ja/newbs_git_resynchronize_a_branch.md b/docs/ja/newbs_git_resynchronize_a_branch.md
index e81d2da1fb1..567ec38bfec 100644
--- a/docs/ja/newbs_git_resynchronize_a_branch.md
+++ b/docs/ja/newbs_git_resynchronize_a_branch.md
@@ -2,8 +2,8 @@
仮にあなたの `master` ブランチにあなたのコミットを行い、そしてあなたの QMK リポジトリの更新が必要になったとします。
diff --git a/docs/ja/newbs_git_using_your_master_branch.md b/docs/ja/newbs_git_using_your_master_branch.md
index 3ee1996c1be..308a61eded1 100644
--- a/docs/ja/newbs_git_using_your_master_branch.md
+++ b/docs/ja/newbs_git_using_your_master_branch.md
@@ -2,8 +2,8 @@
QMK の開発では、何がどこで行われているかにかかわらず、`master` ブランチを最新の状態に保つことを強くお勧めします、しかし `master` ブランチには***絶対に直接コミットしないでください***。
diff --git a/docs/ja/newbs_learn_more_resources.md b/docs/ja/newbs_learn_more_resources.md
index 523d91a05a8..e5437ca86af 100644
--- a/docs/ja/newbs_learn_more_resources.md
+++ b/docs/ja/newbs_learn_more_resources.md
@@ -2,35 +2,44 @@
これらのリソースは、QMK コミュニティの新しいメンバーに、初心者向けドキュメントで提供されている情報に対する理解を深めることを目的としています。
-## Git に関するリース:
+## QMK に関するリソース:
-### 英語
+### 英語 :id=english-resources-qmk
-* [Great General Tutorial](https://www.codecademy.com/learn/learn-git)
-* [Git Game To Learn From Examples](https://learngitbranching.js.org/)
-* [Git Resources to Learn More About Github](getting_started_github.md)
-* [Git Resources Aimed Specifically toward QMK](contributing.md)
+* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – 新規ユーザーの視点から見た QMK ファームウェアの使い方の基本を網羅した、ユーザー作成のブログ。
-### 日本語
+### 日本語 :id=japanese-resources-qmk
_日本語のリソース情報を募集中です。_
-* [Git Game To Learn From Examples(日本語対応有り)](https://learngitbranching.js.org/)
-* [QMK で Github を使う方法](ja/getting_started_github.md)
-* [貢献方法](ja/contributing.md)
-
## コマンドラインに関するリソース:
-### 英語
+### 英語 :id=english-resources-cli
* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line)
-### 日本語
+### 日本語 :id=japanese-resources-cli
_日本語のリソース情報を募集中です。_
+
+## Git に関するリソース:
+
+### 英語 :id=english-resources-git
+
+* [Great General Tutorial](https://www.codecademy.com/learn/learn-git)
+* [Flight Rules For Git](https://github.com/k88hudson/git-flight-rules)
+* [Git Game To Learn From Examples](https://learngitbranching.js.org/)
+
+### 日本語 :id=japanese-resources-git
+
+_日本語のリソース情報を募集中です。_
+
+* [Git Game To Learn From Examples(日本語対応有り)](https://learngitbranching.js.org/)
+ git のブランチの作り方、マージの仕方などがビジュアルに学べます。
+* [QMK で GitHub を使う方法](ja/getting_started_github.md)
diff --git a/docs/ja/newbs_testing_debugging.md b/docs/ja/newbs_testing_debugging.md
index 784f872e676..b80e09fc700 100644
--- a/docs/ja/newbs_testing_debugging.md
+++ b/docs/ja/newbs_testing_debugging.md
@@ -2,27 +2,21 @@
カスタムファームウェアをキーボードへ書き込んだら、テストする準備が整います。運が良ければ全て問題なく動作しているはずですが、もしそうでなければこのドキュメントがどこが悪いのか調べるのに役立ちます。
## テスト
-通常、キーボードをテストするのは非常に簡単です。全てのキーをひとつずつ押して、期待されるキーが送信されていることを確認します。キーを押したことを見逃さないためのプログラムもあります。
+通常、キーボードをテストするのは非常に簡単です。
+全てのキーをひとつずつ押して、期待されるキーが送信されていることを確認します。
+QMK を実行していなくても、[QMK Configurator](https://config.qmk.fm/#/test/) のテストモードを使ってキーボードを確認することができます。
-メモ: これらのプログラムは QMK によって提供・承認されたものではありません。
+## デバッグ :id=debugging
-* [QMK Configurator](https://config.qmk.fm/#/test/) (Web Based)
-* [Switch Hitter](https://web.archive.org/web/20190413233743/https://elitekeyboards.com/switchhitter.php) (Windows Only)
-* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Mac Only)
-* [Keyboard Tester](http://www.keyboardtester.com) (Web Based)
-* [Keyboard Checker](http://keyboardchecker.com) (Web Based)
-
-## デバッグ
-
-`rules.mk`へ`CONSOLE_ENABLE = yes`の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの`DEBUG`キーコードを使用するか、デバッグモードを有効にする [Command](ja/feature_command.md) 機能を使用するか、以下のコードをキーマップに追加します。
+`rules.mk`へ`CONSOLE_ENABLE = yes`の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの`DEBUG`キーコードを使用するか、デバッグモードを有効にする [コマンド](ja/feature_command.md) 機能を使用するか、以下のコードをキーマップに追加します。
```c
void keyboard_post_init_user(void) {
@@ -34,6 +28,10 @@ void keyboard_post_init_user(void) {
}
```
+## デバッグツール :id=debugging-tools
+
+キーボードのデバッグに使えるツールは2つあります。
+
### QMK Toolboxを使ったデバッグ
互換性のある環境では、[QMK Toolbox](https://github.com/qmk/qmk_toolbox)を使うことでキーボードからのデバッグメッセージを表示できます。
@@ -42,7 +40,6 @@ void keyboard_post_init_user(void) {
ターミナルベースの方法がお好みですか?PJRC が提供する[hid_listen](https://www.pjrc.com/teensy/hid_listen.html)もデバッグメッセージの表示に使用できます。ビルド済みの実行ファイルは Windows, Linux, MacOS 用が用意されています。
-
## 独自のデバッグメッセージを送信する
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 40a46964a81..5fbc8f4fa6b 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -8,205 +8,212 @@ This is a reference only. Each group of keys links to the page documenting their
See also: [Basic Keycodes](keycodes_basic.md)
-|Key |Aliases |Description |
-|-----------------------|------------------------------|-----------------------------------------------|
-|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |
-|`KC_TRANSPARENT` |`KC_TRNS`, `_______` |Use the next lowest non-transparent key |
-|`KC_A` | |`a` and `A` |
-|`KC_B` | |`b` and `B` |
-|`KC_C` | |`c` and `C` |
-|`KC_D` | |`d` and `D` |
-|`KC_E` | |`e` and `E` |
-|`KC_F` | |`f` and `F` |
-|`KC_G` | |`g` and `G` |
-|`KC_H` | |`h` and `H` |
-|`KC_I` | |`i` and `I` |
-|`KC_J` | |`j` and `J` |
-|`KC_K` | |`k` and `K` |
-|`KC_L` | |`l` and `L` |
-|`KC_M` | |`m` and `M` |
-|`KC_N` | |`n` and `N` |
-|`KC_O` | |`o` and `O` |
-|`KC_P` | |`p` and `P` |
-|`KC_Q` | |`q` and `Q` |
-|`KC_R` | |`r` and `R` |
-|`KC_S` | |`s` and `S` |
-|`KC_T` | |`t` and `T` |
-|`KC_U` | |`u` and `U` |
-|`KC_V` | |`v` and `V` |
-|`KC_W` | |`w` and `W` |
-|`KC_X` | |`x` and `X` |
-|`KC_Y` | |`y` and `Y` |
-|`KC_Z` | |`z` and `Z` |
-|`KC_1` | |`1` and `!` |
-|`KC_2` | |`2` and `@` |
-|`KC_3` | |`3` and `#` |
-|`KC_4` | |`4` and `$` |
-|`KC_5` | |`5` and `%` |
-|`KC_6` | |`6` and `^` |
-|`KC_7` | |`7` and `&` |
-|`KC_8` | |`8` and `*` |
-|`KC_9` | |`9` and `(` |
-|`KC_0` | |`0` and `)` |
-|`KC_ENTER` |`KC_ENT` |Return (Enter) |
-|`KC_ESCAPE` |`KC_ESC` |Escape |
-|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |
-|`KC_TAB` | |Tab |
-|`KC_SPACE` |`KC_SPC` |Spacebar |
-|`KC_MINUS` |`KC_MINS` |`-` and `_` |
-|`KC_EQUAL` |`KC_EQL` |`=` and `+` |
-|`KC_LBRACKET` |`KC_LBRC` |`[` and `{` |
-|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |
-|`KC_BSLASH` |`KC_BSLS` |`\` and `\|` |
-|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |
-|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |
-|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |
-|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |`
and `~`, JIS Zenkaku/Hankaku|
-|`KC_COMMA` |`KC_COMM` |`,` and `<` |
-|`KC_DOT` | |`.` and `>` |
-|`KC_SLASH` |`KC_SLSH` |`/` and `?` |
-|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS` |Caps Lock |
-|`KC_F1` | |F1 |
-|`KC_F2` | |F2 |
-|`KC_F3` | |F3 |
-|`KC_F4` | |F4 |
-|`KC_F5` | |F5 |
-|`KC_F6` | |F6 |
-|`KC_F7` | |F7 |
-|`KC_F8` | |F8 |
-|`KC_F9` | |F9 |
-|`KC_F10` | |F10 |
-|`KC_F11` | |F11 |
-|`KC_F12` | |F12 |
-|`KC_PSCREEN` |`KC_PSCR` |Print Screen |
-|`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD` |Scroll Lock, Brightness Down (macOS) |
-|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |
-|`KC_INSERT` |`KC_INS` |Insert |
-|`KC_HOME` | |Home |
-|`KC_PGUP` | |Page Up |
-|`KC_DELETE` |`KC_DEL` |Forward Delete |
-|`KC_END` | |End |
-|`KC_PGDOWN` |`KC_PGDN` |Page Down |
-|`KC_RIGHT` |`KC_RGHT` |Right Arrow |
-|`KC_LEFT` | |Left Arrow |
-|`KC_DOWN` | |Down Arrow |
-|`KC_UP` | |Up Arrow |
-|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |
-|`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` |
-|`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` |
-|`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` |
-|`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` |
-|`KC_KP_ENTER` |`KC_PENT` |Keypad Enter |
-|`KC_KP_1` |`KC_P1` |Keypad `1` and End |
-|`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow |
-|`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down |
-|`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow |
-|`KC_KP_5` |`KC_P5` |Keypad `5` |
-|`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow |
-|`KC_KP_7` |`KC_P7` |Keypad `7` and Home |
-|`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow |
-|`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up |
-|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |
-|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |
-|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and `\|` |
-|`KC_APPLICATION` |`KC_APP` |Application (Windows Menu Key) |
-|`KC_POWER` | |System Power (macOS) |
-|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |
-|`KC_F13` | |F13 |
-|`KC_F14` | |F14 |
-|`KC_F15` | |F15 |
-|`KC_F16` | |F16 |
-|`KC_F17` | |F17 |
-|`KC_F18` | |F18 |
-|`KC_F19` | |F19 |
-|`KC_F20` | |F20 |
-|`KC_F21` | |F21 |
-|`KC_F22` | |F22 |
-|`KC_F23` | |F23 |
-|`KC_F24` | |F24 |
-|`KC_EXECUTE` |`KC_EXEC` |Execute |
-|`KC_HELP` | |Help |
-|`KC_MENU` | |Menu |
-|`KC_SELECT` |`KC_SLCT` |Select |
-|`KC_STOP` | |Stop |
-|`KC_AGAIN` |`KC_AGIN` |Again |
-|`KC_UNDO` | |Undo |
-|`KC_CUT` | |Cut |
-|`KC_COPY` | |Copy |
-|`KC_PASTE` |`KC_PSTE` |Paste |
-|`KC_FIND` | |Find |
-|`KC__MUTE` | |Mute (macOS) |
-|`KC__VOLUP` | |Volume Up (macOS) |
-|`KC__VOLDOWN` | |Volume Down (macOS) |
-|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |
-|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |
-|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |
-|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` |
-|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards |
-|`KC_INT1` |`KC_RO` |JIS `\` and `_` |
-|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |
-|`KC_INT3` |`KC_JYEN` |JIS `¥` and `\|` |
-|`KC_INT4` |`KC_HENK` |JIS Henkan |
-|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |
-|`KC_INT6` | |JIS Numpad `,` |
-|`KC_INT7` | |International 7 |
-|`KC_INT8` | |International 8 |
-|`KC_INT9` | |International 9 |
-|`KC_LANG1` |`KC_HAEN` |Hangul/English |
-|`KC_LANG2` |`KC_HANJ` |Hanja |
-|`KC_LANG3` | |JIS Katakana |
-|`KC_LANG4` | |JIS Hiragana |
-|`KC_LANG5` | |JIS Zenkaku/Hankaku |
-|`KC_LANG6` | |Language 6 |
-|`KC_LANG7` | |Language 7 |
-|`KC_LANG8` | |Language 8 |
-|`KC_LANG9` | |Language 9 |
-|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase |
-|`KC_SYSREQ` | |SysReq/Attention |
-|`KC_CANCEL` | |Cancel |
-|`KC_CLEAR` |`KC_CLR` |Clear |
-|`KC_PRIOR` | |Prior |
-|`KC_RETURN` | |Return |
-|`KC_SEPARATOR` | |Separator |
-|`KC_OUT` | |Out |
-|`KC_OPER` | |Oper |
-|`KC_CLEAR_AGAIN` | |Clear/Again |
-|`KC_CRSEL` | |CrSel/Props |
-|`KC_EXSEL` | |ExSel |
-|`KC_LCTRL` |`KC_LCTL` |Left Control |
-|`KC_LSHIFT` |`KC_LSFT` |Left Shift |
-|`KC_LALT` |`KC_LOPT` |Left Alt (Option) |
-|`KC_LGUI` |`KC_LCMD`, `KC_LWIN` |Left GUI (Windows/Command/Meta key) |
-|`KC_RCTRL` |`KC_RCTL` |Right Control |
-|`KC_RSHIFT` |`KC_RSFT` |Right Shift |
-|`KC_RALT` |`KC_ROPT`, `KC_ALGR` |Right Alt (Option/AltGr) |
-|`KC_RGUI` |`KC_RCMD`, `KC_RWIN` |Right GUI (Windows/Command/Meta key) |
-|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |
-|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |
-|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake |
-|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |
-|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |
-|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |
-|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track |
-|`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track |
-|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track (Windows) |
-|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |
-|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player (Windows) |
-|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject (macOS) |
-|`KC_MAIL` | |Launch Mail (Windows) |
-|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator (Windows) |
-|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer (Windows) |
-|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search (Windows) |
-|`KC_WWW_HOME` |`KC_WHOM` |Browser Home (Windows) |
-|`KC_WWW_BACK` |`KC_WBAK` |Browser Back (Windows) |
-|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward (Windows) |
-|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop (Windows) |
-|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh (Windows) |
-|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites (Windows) |
-|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track (macOS) |
-|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track (macOS) |
-|`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up |
-|`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down |
+|Key |Aliases |Description |Windows |macOS |Linux1|
+|-----------------------|------------------------------|-----------------------------------------------|-------------|-------------|-----------------|
+|`KC_NO` |`XXXXXXX` |Ignore this key (NOOP) |*N/A* |*N/A* |*N/A* |
+|`KC_TRANSPARENT` |`KC_TRNS`, `_______` |Use the next lowest non-transparent key |*N/A* |*N/A* |*N/A* |
+|`KC_A` | |`a` and `A` |✔ |✔ |✔ |
+|`KC_B` | |`b` and `B` |✔ |✔ |✔ |
+|`KC_C` | |`c` and `C` |✔ |✔ |✔ |
+|`KC_D` | |`d` and `D` |✔ |✔ |✔ |
+|`KC_E` | |`e` and `E` |✔ |✔ |✔ |
+|`KC_F` | |`f` and `F` |✔ |✔ |✔ |
+|`KC_G` | |`g` and `G` |✔ |✔ |✔ |
+|`KC_H` | |`h` and `H` |✔ |✔ |✔ |
+|`KC_I` | |`i` and `I` |✔ |✔ |✔ |
+|`KC_J` | |`j` and `J` |✔ |✔ |✔ |
+|`KC_K` | |`k` and `K` |✔ |✔ |✔ |
+|`KC_L` | |`l` and `L` |✔ |✔ |✔ |
+|`KC_M` | |`m` and `M` |✔ |✔ |✔ |
+|`KC_N` | |`n` and `N` |✔ |✔ |✔ |
+|`KC_O` | |`o` and `O` |✔ |✔ |✔ |
+|`KC_P` | |`p` and `P` |✔ |✔ |✔ |
+|`KC_Q` | |`q` and `Q` |✔ |✔ |✔ |
+|`KC_R` | |`r` and `R` |✔ |✔ |✔ |
+|`KC_S` | |`s` and `S` |✔ |✔ |✔ |
+|`KC_T` | |`t` and `T` |✔ |✔ |✔ |
+|`KC_U` | |`u` and `U` |✔ |✔ |✔ |
+|`KC_V` | |`v` and `V` |✔ |✔ |✔ |
+|`KC_W` | |`w` and `W` |✔ |✔ |✔ |
+|`KC_X` | |`x` and `X` |✔ |✔ |✔ |
+|`KC_Y` | |`y` and `Y` |✔ |✔ |✔ |
+|`KC_Z` | |`z` and `Z` |✔ |✔ |✔ |
+|`KC_1` | |`1` and `!` |✔ |✔ |✔ |
+|`KC_2` | |`2` and `@` |✔ |✔ |✔ |
+|`KC_3` | |`3` and `#` |✔ |✔ |✔ |
+|`KC_4` | |`4` and `$` |✔ |✔ |✔ |
+|`KC_5` | |`5` and `%` |✔ |✔ |✔ |
+|`KC_6` | |`6` and `^` |✔ |✔ |✔ |
+|`KC_7` | |`7` and `&` |✔ |✔ |✔ |
+|`KC_8` | |`8` and `*` |✔ |✔ |✔ |
+|`KC_9` | |`9` and `(` |✔ |✔ |✔ |
+|`KC_0` | |`0` and `)` |✔ |✔ |✔ |
+|`KC_ENTER` |`KC_ENT` |Return (Enter) |✔ |✔ |✔ |
+|`KC_ESCAPE` |`KC_ESC` |Escape |✔ |✔ |✔ |
+|`KC_BSPACE` |`KC_BSPC` |Delete (Backspace) |✔ |✔ |✔ |
+|`KC_TAB` | |Tab |✔ |✔ |✔ |
+|`KC_SPACE` |`KC_SPC` |Spacebar |✔ |✔ |✔ |
+|`KC_MINUS` |`KC_MINS` |`-` and `_` |✔ |✔ |✔ |
+|`KC_EQUAL` |`KC_EQL` |`=` and `+` |✔ |✔ |✔ |
+|`KC_LBRACKET` |`KC_LBRC` |`[` and `{` |✔ |✔ |✔ |
+|`KC_RBRACKET` |`KC_RBRC` |`]` and `}` |✔ |✔ |✔ |
+|`KC_BSLASH` |`KC_BSLS` |`\` and `\|` |✔ |✔ |✔ |
+|`KC_NONUS_HASH` |`KC_NUHS` |Non-US `#` and `~` |✔ |✔ |✔ |
+|`KC_SCOLON` |`KC_SCLN` |`;` and `:` |✔ |✔ |✔ |
+|`KC_QUOTE` |`KC_QUOT` |`'` and `"` |✔ |✔ |✔ |
+|`KC_GRAVE` |`KC_GRV`, `KC_ZKHK` |`
and `~`, JIS Zenkaku/Hankaku|✔ |✔ |✔ |
+|`KC_COMMA` |`KC_COMM` |`,` and `<` |✔ |✔ |✔ |
+|`KC_DOT` | |`.` and `>` |✔ |✔ |✔ |
+|`KC_SLASH` |`KC_SLSH` |`/` and `?` |✔ |✔ |✔ |
+|`KC_CAPSLOCK` |`KC_CLCK`, `KC_CAPS` |Caps Lock |✔ |✔ |✔ |
+|`KC_F1` | |F1 |✔ |✔ |✔ |
+|`KC_F2` | |F2 |✔ |✔ |✔ |
+|`KC_F3` | |F3 |✔ |✔ |✔ |
+|`KC_F4` | |F4 |✔ |✔ |✔ |
+|`KC_F5` | |F5 |✔ |✔ |✔ |
+|`KC_F6` | |F6 |✔ |✔ |✔ |
+|`KC_F7` | |F7 |✔ |✔ |✔ |
+|`KC_F8` | |F8 |✔ |✔ |✔ |
+|`KC_F9` | |F9 |✔ |✔ |✔ |
+|`KC_F10` | |F10 |✔ |✔ |✔ |
+|`KC_F11` | |F11 |✔ |✔ |✔ |
+|`KC_F12` | |F12 |✔ |✔ |✔ |
+|`KC_PSCREEN` |`KC_PSCR` |Print Screen |✔ |✔2|✔ |
+|`KC_SCROLLLOCK` |`KC_SLCK`, `KC_BRMD` |Scroll Lock, Brightness Down (macOS) |✔ |✔2|✔ |
+|`KC_PAUSE` |`KC_PAUS`, `KC_BRK`, `KC_BRMU`|Pause, Brightness Up (macOS) |✔ |✔2|✔ |
+|`KC_INSERT` |`KC_INS` |Insert |✔ | |✔ |
+|`KC_HOME` | |Home |✔ |✔ |✔ |
+|`KC_PGUP` | |Page Up |✔ |✔ |✔ |
+|`KC_DELETE` |`KC_DEL` |Forward Delete |✔ |✔ |✔ |
+|`KC_END` | |End |✔ |✔ |✔ |
+|`KC_PGDOWN` |`KC_PGDN` |Page Down |✔ |✔ |✔ |
+|`KC_RIGHT` |`KC_RGHT` |Right Arrow |✔ |✔ |✔ |
+|`KC_LEFT` | |Left Arrow |✔ |✔ |✔ |
+|`KC_DOWN` | |Down Arrow |✔ |✔ |✔ |
+|`KC_UP` | |Up Arrow |✔ |✔ |✔ |
+|`KC_NUMLOCK` |`KC_NLCK` |Keypad Num Lock and Clear |✔ |✔ |✔ |
+|`KC_KP_SLASH` |`KC_PSLS` |Keypad `/` |✔ |✔ |✔ |
+|`KC_KP_ASTERISK` |`KC_PAST` |Keypad `*` |✔ |✔ |✔ |
+|`KC_KP_MINUS` |`KC_PMNS` |Keypad `-` |✔ |✔ |✔ |
+|`KC_KP_PLUS` |`KC_PPLS` |Keypad `+` |✔ |✔ |✔ |
+|`KC_KP_ENTER` |`KC_PENT` |Keypad Enter |✔ |✔ |✔ |
+|`KC_KP_1` |`KC_P1` |Keypad `1` and End |✔ |✔ |✔ |
+|`KC_KP_2` |`KC_P2` |Keypad `2` and Down Arrow |✔ |✔ |✔ |
+|`KC_KP_3` |`KC_P3` |Keypad `3` and Page Down |✔ |✔ |✔ |
+|`KC_KP_4` |`KC_P4` |Keypad `4` and Left Arrow |✔ |✔ |✔ |
+|`KC_KP_5` |`KC_P5` |Keypad `5` |✔ |✔ |✔ |
+|`KC_KP_6` |`KC_P6` |Keypad `6` and Right Arrow |✔ |✔ |✔ |
+|`KC_KP_7` |`KC_P7` |Keypad `7` and Home |✔ |✔ |✔ |
+|`KC_KP_8` |`KC_P8` |Keypad `8` and Up Arrow |✔ |✔ |✔ |
+|`KC_KP_9` |`KC_P9` |Keypad `9` and Page Up |✔ |✔ |✔ |
+|`KC_KP_0` |`KC_P0` |Keypad `0` and Insert |✔ |✔ |✔ |
+|`KC_KP_DOT` |`KC_PDOT` |Keypad `.` and Delete |✔ |✔ |✔ |
+|`KC_NONUS_BSLASH` |`KC_NUBS` |Non-US `\` and `\|` |✔ |✔ |✔ |
+|`KC_APPLICATION` |`KC_APP` |Application (Windows Context Menu Key) |✔ | |✔ |
+|`KC_POWER` | |System Power | |✔3|✔ |
+|`KC_KP_EQUAL` |`KC_PEQL` |Keypad `=` |✔ |✔ |✔ |
+|`KC_F13` | |F13 |✔ |✔ |✔ |
+|`KC_F14` | |F14 |✔ |✔ |✔ |
+|`KC_F15` | |F15 |✔ |✔ |✔ |
+|`KC_F16` | |F16 |✔ |✔ |✔ |
+|`KC_F17` | |F17 |✔ |✔ |✔ |
+|`KC_F18` | |F18 |✔ |✔ |✔ |
+|`KC_F19` | |F19 |✔ |✔ |✔ |
+|`KC_F20` | |F20 |✔ | |✔ |
+|`KC_F21` | |F21 |✔ | |✔ |
+|`KC_F22` | |F22 |✔ | |✔ |
+|`KC_F23` | |F23 |✔ | |✔ |
+|`KC_F24` | |F24 |✔ | |✔ |
+|`KC_EXECUTE` |`KC_EXEC` |Execute | | |✔ |
+|`KC_HELP` | |Help | | |✔ |
+|`KC_MENU` | |Menu | | |✔ |
+|`KC_SELECT` |`KC_SLCT` |Select | | |✔ |
+|`KC_STOP` | |Stop | | |✔ |
+|`KC_AGAIN` |`KC_AGIN` |Again | | |✔ |
+|`KC_UNDO` | |Undo | | |✔ |
+|`KC_CUT` | |Cut | | |✔ |
+|`KC_COPY` | |Copy | | |✔ |
+|`KC_PASTE` |`KC_PSTE` |Paste | | |✔ |
+|`KC_FIND` | |Find | | |✔ |
+|`KC__MUTE` | |Mute | |✔ |✔ |
+|`KC__VOLUP` | |Volume Up | |✔ |✔ |
+|`KC__VOLDOWN` | |Volume Down | |✔ |✔ |
+|`KC_LOCKING_CAPS` |`KC_LCAP` |Locking Caps Lock |✔ |✔ | |
+|`KC_LOCKING_NUM` |`KC_LNUM` |Locking Num Lock |✔ |✔ | |
+|`KC_LOCKING_SCROLL` |`KC_LSCR` |Locking Scroll Lock |✔ |✔ | |
+|`KC_KP_COMMA` |`KC_PCMM` |Keypad `,` | | |✔ |
+|`KC_KP_EQUAL_AS400` | |Keypad `=` on AS/400 keyboards | | | |
+|`KC_INT1` |`KC_RO` |JIS `\` and `_` |✔ | |✔ |
+|`KC_INT2` |`KC_KANA` |JIS Katakana/Hiragana |✔ | |✔ |
+|`KC_INT3` |`KC_JYEN` |JIS `¥` and `\|` |✔ | |✔ |
+|`KC_INT4` |`KC_HENK` |JIS Henkan |✔ | |✔ |
+|`KC_INT5` |`KC_MHEN` |JIS Muhenkan |✔ | |✔ |
+|`KC_INT6` | |JIS Numpad `,` | | |✔ |
+|`KC_INT7` | |International 7 | | | |
+|`KC_INT8` | |International 8 | | | |
+|`KC_INT9` | |International 9 | | | |
+|`KC_LANG1` |`KC_HAEN` |Hangul/English | | |✔ |
+|`KC_LANG2` |`KC_HANJ` |Hanja | | |✔ |
+|`KC_LANG3` | |JIS Katakana | | |✔ |
+|`KC_LANG4` | |JIS Hiragana | | |✔ |
+|`KC_LANG5` | |JIS Zenkaku/Hankaku | | |✔ |
+|`KC_LANG6` | |Language 6 | | | |
+|`KC_LANG7` | |Language 7 | | | |
+|`KC_LANG8` | |Language 8 | | | |
+|`KC_LANG9` | |Language 9 | | | |
+|`KC_ALT_ERASE` |`KC_ERAS` |Alternate Erase | | | |
+|`KC_SYSREQ` | |SysReq/Attention | | | |
+|`KC_CANCEL` | |Cancel | | | |
+|`KC_CLEAR` |`KC_CLR` |Clear | | |✔ |
+|`KC_PRIOR` | |Prior | | | |
+|`KC_RETURN` | |Return | | | |
+|`KC_SEPARATOR` | |Separator | | | |
+|`KC_OUT` | |Out | | | |
+|`KC_OPER` | |Oper | | | |
+|`KC_CLEAR_AGAIN` | |Clear/Again | | | |
+|`KC_CRSEL` | |CrSel/Props | | | |
+|`KC_EXSEL` | |ExSel | | | |
+|`KC_LCTRL` |`KC_LCTL` |Left Control |✔ |✔ |✔ |
+|`KC_LSHIFT` |`KC_LSFT` |Left Shift |✔ |✔ |✔ |
+|`KC_LALT` |`KC_LOPT` |Left Alt (Option) |✔ |✔ |✔ |
+|`KC_LGUI` |`KC_LCMD`, `KC_LWIN` |Left GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
+|`KC_RCTRL` |`KC_RCTL` |Right Control |✔ |✔ |✔ |
+|`KC_RSHIFT` |`KC_RSFT` |Right Shift |✔ |✔ |✔ |
+|`KC_RALT` |`KC_ROPT`, `KC_ALGR` |Right Alt (Option/AltGr) |✔ |✔ |✔ |
+|`KC_RGUI` |`KC_RCMD`, `KC_RWIN` |Right GUI (Windows/Command/Meta key) |✔ |✔ |✔ |
+|`KC_SYSTEM_POWER` |`KC_PWR` |System Power Down |✔ |✔3|✔ |
+|`KC_SYSTEM_SLEEP` |`KC_SLEP` |System Sleep |✔ |✔3|✔ |
+|`KC_SYSTEM_WAKE` |`KC_WAKE` |System Wake | |✔3|✔ |
+|`KC_AUDIO_MUTE` |`KC_MUTE` |Mute |✔ |✔ |✔ |
+|`KC_AUDIO_VOL_UP` |`KC_VOLU` |Volume Up |✔ |✔4|✔ |
+|`KC_AUDIO_VOL_DOWN` |`KC_VOLD` |Volume Down |✔ |✔4|✔ |
+|`KC_MEDIA_NEXT_TRACK` |`KC_MNXT` |Next Track |✔ |✔5|✔ |
+|`KC_MEDIA_PREV_TRACK` |`KC_MPRV` |Previous Track |✔ |✔5|✔ |
+|`KC_MEDIA_STOP` |`KC_MSTP` |Stop Track |✔ | |✔ |
+|`KC_MEDIA_PLAY_PAUSE` |`KC_MPLY` |Play/Pause Track |✔ |✔ |✔ |
+|`KC_MEDIA_SELECT` |`KC_MSEL` |Launch Media Player |✔ | |✔ |
+|`KC_MEDIA_EJECT` |`KC_EJCT` |Eject | |✔ |✔ |
+|`KC_MAIL` | |Launch Mail |✔ | |✔ |
+|`KC_CALCULATOR` |`KC_CALC` |Launch Calculator |✔ | |✔ |
+|`KC_MY_COMPUTER` |`KC_MYCM` |Launch My Computer |✔ | |✔ |
+|`KC_WWW_SEARCH` |`KC_WSCH` |Browser Search |✔ | |✔ |
+|`KC_WWW_HOME` |`KC_WHOM` |Browser Home |✔ | |✔ |
+|`KC_WWW_BACK` |`KC_WBAK` |Browser Back |✔ | |✔ |
+|`KC_WWW_FORWARD` |`KC_WFWD` |Browser Forward |✔ | |✔ |
+|`KC_WWW_STOP` |`KC_WSTP` |Browser Stop |✔ | |✔ |
+|`KC_WWW_REFRESH` |`KC_WREF` |Browser Refresh |✔ | |✔ |
+|`KC_WWW_FAVORITES` |`KC_WFAV` |Browser Favorites |✔ | |✔ |
+|`KC_MEDIA_FAST_FORWARD`|`KC_MFFD` |Next Track |✔ |✔5|✔ |
+|`KC_MEDIA_REWIND` |`KC_MRWD` |Previous Track |✔6|✔5|✔ |
+|`KC_BRIGHTNESS_UP` |`KC_BRIU` |Brightness Up |✔ |✔ |✔ |
+|`KC_BRIGHTNESS_DOWN` |`KC_BRID` |Brightness Down |✔ |✔ |✔ |
+
+1. The Linux kernel HID driver recognizes [nearly all keycodes](https://github.com/torvalds/linux/blob/master/drivers/hid/hid-input.c), but the default bindings depend on the DE/WM.
+2. Treated as F13-F15.
+3. Must be held for about three seconds, and will display a prompt instead.
+4. Holding Shift+Option allows for finer control of volume level.
+5. Skips the entire track in iTunes when tapped, seeks within the current track when held.
+6. WMP does not recognize the Rewind key, but both alter playback speed in VLC.
## Quantum Keycodes :id=quantum-keycodes
diff --git a/docs/keymap.md b/docs/keymap.md
index ba358edbe00..ef476e87f5b 100644
--- a/docs/keymap.md
+++ b/docs/keymap.md
@@ -71,10 +71,22 @@ On the other hand, you can change `layer_state` to overlay the base layer with o
### Layer Precedence and Transparency
-Note that ***higher layer has higher priority on stack of layers***, namely firmware falls down from top layer to bottom to look up keycode. Once it spots keycode other than **`KC_TRNS`**(transparent) on a layer it stops searching and lower layers aren't referred.
+Note that ***higher layers have higher priority within the stack of layers***. The firmware works its way down from the highest active layers to look up keycodes. Once the firmware locates a keycode other than `KC_TRNS` (transparent) on an active layer, it stops searching, and lower layers aren't referenced.
-You can place `KC_TRANS` on overlay layer changes just part of layout to fall back on lower or base layer.
-Key with `KC_TRANS` (`KC_TRNS` and `_______` are the alias) doesn't has its own keycode and refers to lower valid layers for keycode, instead.
+ ____________
+ / / <--- Higher layer
+ / KC_TRNS //
+ /___________// <--- Lower layer (KC_A)
+ /___________/
+
+ In the above scenario, the non-transparent keys on the higher layer would be usable, but whenever `KC_TRNS` (or equivalent) is defined, the keycode (`KC_A`) on the lower level would be used.
+
+**Note:** Valid ways to denote transparency on a given layer:
+* `KC_TRANSPARENT`
+* `KC_TRNS` (alias)
+* `_______` (alias)
+
+These keycodes allow the processing to fall through to lower layers in search of a non-transparent keycode to process.
## Anatomy of a `keymap.c`
diff --git a/docs/newbs_flashing.md b/docs/newbs_flashing.md
index dc81efd2120..04c7c55aed9 100644
--- a/docs/newbs_flashing.md
+++ b/docs/newbs_flashing.md
@@ -1,18 +1,41 @@
-# Flashing Your Keyboard
+# Flashing Your Keyboard
-Now that you've built a custom firmware file you'll want to flash your keyboard.
+Now that you've built a custom firmware file you'll want to flash your keyboard.
+
+## Put Your Keyboard into DFU (Bootloader) Mode
+
+In order to flash your custom firmware you must first put your keyboard into a special flashing mode. While it is in this mode you will not be able to type or otherwise use your keyboard. It is very important that you do not unplug the keyboard or otherwise interrupt the flashing process while the firmware is being written.
+
+Different keyboards have different ways to enter this special mode. If your PCB currently runs QMK, TMK, or PS2AVRGB (Bootmapper Client) and you have not been given specific instructions, try the following, in order:
+
+* Hold down both shift keys and press `Pause`
+* Hold down both shift keys and press `B`
+* Unplug your keyboard, hold down the Spacebar and `B` at the same time, plug in your keyboard and wait a second before releasing the keys
+* Unplug your keyboard, hold down the top or bottom left key (usually Escape or Left Control) and plug in your keyboard
+* Press the physical `RESET` button, usually located on the underside of the PCB
+* Locate header pins on the PCB labeled `RESET` and `GND`, and short them together while plugging your PCB in
+
+If you've attempted all of the above to no avail, and the main chip on the board says `STM32` on it, this may be a bit more complicated. Generally your best bet is to ask on [Discord](https://discord.gg/Uq7gcHh) for assistance. It's likely some photos of the board will be asked for -- if you can get them ready beforehand it'll help move things along!
+
+Otherwise, you should see a message in yellow, similar to this in QMK Toolbox:
+
+```
+*** DFU device connected: Atmel Corp. ATmega32U4 (03EB:2FF4:0000)
+```
+
+and this bootloader device will also be present in Device Manager, System Information.app, or `lsusb`.
## Flashing Your Keyboard with QMK Toolbox
-The simplest way to flash your keyboard will be with the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases).
+The simplest way to flash your keyboard will be with the [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases).
-However, the QMK Toolbox is only available for Windows and macOS currently. If you're using Linux (or just wish to flash the firmware from the command line), proceed down to [Flash Your Keyboard From The Command Line](#flash-your-keyboard-from-the-command-line).
+However, the Toolbox is currently only available for Windows and macOS. If you're using Linux (or just wish to flash the firmware from the command line), skip to the [Flash your Keyboard from the Command Line](#flash-your-keyboard-from-the-command-line) section.
-### Load The File Into QMK Toolbox
+### Load the File into QMK Toolbox
Begin by opening the QMK Toolbox application. You'll want to locate the firmware file in Finder or Explorer. Your keyboard firmware may be in one of two formats- `.hex` or `.bin`. QMK tries to copy the appropriate one for your keyboard into the root `qmk_firmware` directory.
-If you are on Windows or macOS there are commands you can use to easily open the current firmware folder in Explorer or Finder.
+If you are on Windows or macOS, there are commands you can use to easily open the current folder in Explorer or Finder.
#### Windows
@@ -38,65 +61,44 @@ For example, the `planck/rev5` with a `default` keymap will have this filename:
planck_rev5_default.hex
```
-Once you have located your firmware file drag it into the "Local file" box in QMK Toolbox, or click "Open" and navigate to where your firmware file is stored.
-
-### Put Your Keyboard Into DFU (Bootloader) Mode
-
-In order to flash your custom firmware you have to put your keyboard into a special flashing mode. While it is in this mode you will not be able to type or otherwise use your keyboard. It is very important that you do not unplug your keyboard or otherwise interrupt the flashing process while the firmware is being written.
-
-Different keyboards have different ways to enter this special mode. If your PCB currently runs QMK or TMK and you have not been given specific instructions try the following, in order:
-
-* Hold down both shift keys and press `Pause`
-* Hold down both shift keys and press `B`
-* Unplug your keyboard, hold down the Spacebar and `B` at the same time, plug in your keyboard and wait a second before releasing the keys
-* Press the physical `RESET` button on the bottom of the PCB
-* Locate header pins on the PCB labeled `BOOT0` or `RESET`, short those together while plugging your PCB in
-
-When you are successful you will see a message similar to this in QMK Toolbox:
-
-```
-*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
-*** DFU device connected
-```
+Once you have located your firmware file drag it into the "Local file" box in QMK Toolbox, or click "Open" and navigate to where your firmware file is stored.
### Flash Your Keyboard
Click the `Flash` button in QMK Toolbox. You will see output similar to the following:
```
-*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
-*** DFU device connected
+*** DFU device connected: Atmel Corp. ATmega32U4 (03EB:2FF4:0000)
*** Attempting to flash, please don't remove device
->>> dfu-programmer atmega32u4 erase --force
+>>> dfu-programmer.exe atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
->>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
- Checking memory from 0x0 to 0x55FF... Empty.
- 0% 100% Programming 0x5600 bytes...
+>>> dfu-programmer.exe atmega32u4 flash "D:\Git\qmk_firmware\gh60_satan_default.hex"
+ Checking memory from 0x0 to 0x3F7F... Empty.
+ 0% 100% Programming 0x3F80 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
- 0x5600 bytes written into 0x7000 bytes memory (76.79%).
->>> dfu-programmer atmega32u4 reset
+ 0x3F80 bytes written into 0x7000 bytes memory (56.70%).
+>>> dfu-programmer.exe atmega32u4 reset
-*** DFU device disconnected
-*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
+*** DFU device disconnected: Atmel Corp: ATmega32U4 (03EB:2FF4:0000)
```
## Flash your Keyboard from the Command Line
-This has been made pretty simple compared to what it used to be. When you are ready to compile and flash your firmware, open up your terminal window and run the flash command:
+This has been made pretty simple compared to what it used to be. When you are ready to compile and flash your firmware, open up your terminal window and run the flash command:
qmk flash
-If you have not configured your keyboard/keymap name, or you have multiple keyboards, you can specify the keyboard and keymap:
+If you have not configured your keyboard/keymap name in the CLI, or you have multiple keyboards, you can specify the keyboard and keymap:
qmk flash -kb -km
-This will check the keyboard's configuration, and then attempt to flash it based on the specified bootloader. This means that you don't need to know which bootloader that your keyboard uses. Just run the command, and let the command do the heavy lifting.
+This will check the keyboard's configuration, and then attempt to flash it based on the specified bootloader. This means that you don't need to know which bootloader that your keyboard uses. Just run the command, and let the command do the heavy lifting.
-However, this does rely on the bootloader being set by the keyboard. If this information is not configured, or you're using a board that doesn't have a supported target to flash it, you will see this error:
+However, this does rely on the bootloader being set by the keyboard. If this information is not configured, or you're using a board that doesn't have a supported target to flash it, you will see this error:
WARNING: This board's bootloader is not specified or is not supported by the ":flash" target at this time.
diff --git a/docs/newbs_getting_started.md b/docs/newbs_getting_started.md
index a3022f15e5b..dfb2d54fc4f 100644
--- a/docs/newbs_getting_started.md
+++ b/docs/newbs_getting_started.md
@@ -41,26 +41,20 @@ We've tried to make QMK as easy to set up as possible. You only have to prepare
You will need to install MSYS2, Git, and the QMK CLI.
-* Follow the installation instructions on the [MSYS2 homepage](http://www.msys2.org).
-* Close any open MSYS2 terminals and open a new MSYS2 MinGW 64-bit terminal. NOTE: This is **not** the same as the MSYS terminal that opens when installation is completed.
+Follow the installation instructions on the [MSYS2 homepage](http://www.msys2.org). Close any open MSYS terminals and open a new MinGW 64-bit terminal. **NOTE: This is *not* the same as the MSYS terminal that opens when installation is completed.**
-After opening a new MSYS2 MinGW 64-bit terminal, make sure `pacman` is up to date with:
+Then, run the following:
- pacman -Syu
-
-You may be asked to close and reopen the window. Do this and keep running the above command until it says `there is nothing to do`. Then run the following:
-
- pacman -S git mingw-w64-x86_64-toolchain mingw-w64-x86_64-python3-pip
+ pacman --needed --noconfirm --disable-download-timeout -S git mingw-w64-x86_64-toolchain mingw-w64-x86_64-python3-pip
python3 -m pip install qmk
### macOS
You will need to install Homebrew. Follow the instructions on the [Homebrew homepage](https://brew.sh).
-After Homebrew is installed run these commands:
+After Homebrew is installed run this command:
- brew tap qmk/qmk
- brew install qmk
+ brew install qmk/qmk/qmk
### Linux
@@ -70,10 +64,21 @@ You will need to install Git and Python. It's very likely that you already have
* Fedora / Red Hat / CentOS: `sudo yum install git python3 python3-pip`
* Arch / Manjaro: `sudo pacman -S git python python-pip python-setuptools libffi`
-
Install the global CLI to bootstrap your system:
- `python3 -m pip install --user qmk` (on Arch-based distros you can also try the `qmk` package from AUR (**note**: it's maintained by a community member): `yay -S qmk`)
+`python3 -m pip install --user qmk` (on Arch-based distros you can also try the `qmk` package from AUR (**note**: it's maintained by a community member): `yay -S qmk`)
+
+### FreeBSD
+
+You will need to install Git and Python. It's possible that you already have both, but if not, run the following commands to install them:
+
+ pkg install git python3
+
+Make sure that `$HOME/.local/bin` is added to your `$PATH` so that locally install Python packages are available.
+
+Once installed, you can install QMK CLI:
+
+ python3 -m pip install --user qmk
## 3. Run QMK Setup :id=set-up-qmk
@@ -87,7 +92,13 @@ In most situations you will want to answer Yes to all of the prompts.
It's possible, that you will get an error saying something like: `bash: qmk: command not found`.
This is due to a [bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=839155) Debian introduced with their Bash 4.4 release, which removed `$HOME/.local/bin` from the PATH. This bug was later fixed on Debian and Ubuntu.
Sadly, Ubuntu reitroduced this bug and is [yet to fix it](https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1588562).
-Luckily, the fix is easy. Run this as your user: `echo "PATH=$HOME/.local/bin:$PATH" >> $HOME/.bashrc && source $HOME/.bashrc`
+Luckily, the fix is easy. Run this as your user: `echo 'PATH="$HOME/.local/bin:$PATH"' >> $HOME/.bashrc && source $HOME/.bashrc`
+
+?>**Note on FreeBSD**:
+It is suggested to run `qmk setup` as a non-`root` user to start with, but this will likely identify packages that need to be installed to your
+base system using `pkg`. However the installation will probably fail when run as an unprivileged user.
+To manually install the base dependencies, run `./util/qmk_install.sh` either as `root`, or with `sudo`.
+Once that completes, re-run `qmk setup` to complete the setup and checks.
?> If you already know [how to use GitHub](getting_started_github.md), we recommend that you create your own fork and use `qmk setup /qmk_firmware` to clone your personal fork. If you don't know what that means you can safely ignore this message.
@@ -119,7 +130,7 @@ Most people new to QMK only have 1 keyboard. You can set this keyboard as your d
qmk config user.keyboard=clueboard/66/rev4
-You can also set your default keymap name. Most people use their github username here, and we recommend that you do too.
+You can also set your default keymap name. Most people use their GitHub username here, and we recommend that you do too.
qmk config user.keymap=
diff --git a/docs/one_shot_keys.md b/docs/one_shot_keys.md
index 73d78b41502..aa3db5acb21 100644
--- a/docs/one_shot_keys.md
+++ b/docs/one_shot_keys.md
@@ -15,7 +15,7 @@ You can control the behavior of one shot keys by defining these in `config.h`:
#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */
```
-* `OSM(mod)` - Momentarily hold down *mod*. You must use the `MOD_*` keycodes as shown in [Mod Tap](#mod-tap), not the `KC_*` codes.
+* `OSM(mod)` - Momentarily hold down *mod*. You must use the `MOD_*` keycodes as shown in [Mod Tap](mod_tap.md), not the `KC_*` codes.
* `OSL(layer)` - momentary switch to *layer*.
Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine.
diff --git a/docs/other_vscode.md b/docs/other_vscode.md
index 7427f758e5b..d544db6307e 100644
--- a/docs/other_vscode.md
+++ b/docs/other_vscode.md
@@ -102,7 +102,7 @@ There are a number of extensions that you may want to install:
This installs a bunch of Git related tools that may make using Git with QMK Firmware easier.
* [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - _[Optional]_ - Helps to keep the code to the QMK Coding Conventions.
* [Bracket Pair Colorizer 2](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2) - _[Optional]_ - This color codes the brackets in your code, to make it easier to reference nested code.
-* [Github Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's.
+* [GitHub Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's.
* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody.
* [VIM Keymap](https://marketplace.visualstudio.com/items?itemName=GiuseppeCesarano.vim-keymap) - _[Optional]_ - For those that prefer VIM style keybindings. There are other options for this, too.
* [Travis CI Status](https://marketplace.visualstudio.com/items?itemName=felixrieseberg.vsc-travis-ci-status) - _[Optional]_ - This shows the current Travis CI status, if you have it set up.
diff --git a/docs/platformdev_selecting_arm_mcu.md b/docs/platformdev_selecting_arm_mcu.md
new file mode 100644
index 00000000000..c115aa6e0fd
--- /dev/null
+++ b/docs/platformdev_selecting_arm_mcu.md
@@ -0,0 +1,58 @@
+# Choosing an Arm MCU :id=choose-arm-mcu
+
+This page outlines the selection criteria to ensure compatibility with Arm/ChibiOS.
+
+QMK uses the Hardware Abstraction Layer of ChibiOS in order to run on Arm devices. ChibiOS in general is best supported on STM32 devices, both in the perspective of base MCU support, as well as on-MCU peripheral support. As an extension to the core ChibiOS MCU support, QMK also utilises ChibiOS-Contrib (which includes the Kinetis MCU support layer, as an example), but it does not provide as great a level of peripheral support or general testing for supported devices.
+
+Adding support for new MCU families must go through ChibiOS or ChibiOS-Contrib -- QMK does not have the bandwidth, resources, nor the inclination to maintain long-term MCU support for your board of choice.
+
+To be clear: this also includes commercial boards -- unless agreed upon by all parties, QMK will not take over maintenance of a bespoke MCU support package. Even if MCU support is upstreamed into ChibiOS/ChibiOS-Contrib, QMK reserves the right to deprecate and/or remove keyboards utilising support packages that aren't kept up to date with upstream ChibiOS itself.
+
+## Selecting an already-supported MCU :id=selecting-already-supported-mcu
+
+### STM32 families
+
+As outlined earlier, STM32 is the preferred option to ensure greatest compatibility with the subsystems already implemented in QMK. Not all subsystems are compatible yet, but for the most widely-used support is already present.
+
+The simplest solution to determine if an STM32 MCU is compatible is to navigate to the list of supported STM32 ports in QMK's [ChibiOS fork](https://github.com/qmk/ChibiOS/tree/master/os/hal/ports/STM32). Inside this directory, each of the supported STM32 families will be listed, and inside each family a file called `stm32_registry.h` will be present. Scanning through these files will show `#define`s such as the following, which can be used to determine if ChibiOS supports a particular MCU:
+
+```c
+#if defined(STM32F303xC) || defined(__DOXYGEN__)
+```
+
+The example shows that STM32F303xC devices are supported by ChibiOS.
+
+The next step is to ensure that USB is supported on those devices by ChibiOS -- you can confirm this by checking inside the same section guarded by the `#define` above, specifically for the following to be `TRUE`:
+
+```c
+#define STM32_HAS_USB TRUE
+```
+
+or one of the following being `TRUE`:
+
+```c
+#define STM32_HAS_OTG1 TRUE
+#define STM32_HAS_OTG2 TRUE
+```
+
+For the most part, this is the bare minimum to be able to have a high confidence that QMK will be able to run on your MCU. After that, it's all up to configuration.
+
+### Non-STM32 families
+
+ChibiOS does have support for a handful of non-STM32 devices, and the list can be found in QMK's [ChibiOS fork](https://github.com/qmk/ChibiOS/tree/master/os/hal/ports) and [ChibiOS-Contrib fork](https://github.com/qmk/ChibiOS-Contrib/tree/master/os/hal/ports). Non-STM32 support is likely out of date, and only supports ancient MCUs -- whilst it might be possible to use these, it's not recommended.
+
+Do note that there are sometimes licensing restrictions with respect to redistribution. As an example, binaries built for nRF5 are not able to be redistributed via QMK Configurator, due to the licensing of their board support package.
+
+## Adding support for a new STM32 MCU (for an existing family) :id=add-new-stm32-mcu
+
+Usually, one can "masquerade" as an existing MCU of the same family, especially if the only difference is RAM or Flash size. As an example, some MCUs within the same family are virtually identical, with the exception of adding a cryptographic peripheral -- STM32L072 vs. STM32L082 for instance. Given the unlikely use of the cryptographic peripheral, L082 chips can actually run as if they're an L072, and can be targeted accordingly.
+
+Adding proper support for new MCUs within an existing STM32 family should ideally be upstreamed to ChibiOS. In general, this will require modifications of the `stm32_registry.h` file, providing correct responses for the same `#define`s provided for the other MCUs in that family.
+
+## Adding support for a new STM32 Family :id=add-new-stm32-family
+
+If this is a requirement, this needs to go through upstream ChibiOS before QMK would consider accepting boards targeting the new family. More information for porting should be sought by approaching ChibiOS directly, rather than through QMK.
+
+## Adding support for a new MCU Family :id=add-new-mcu-family
+
+As stated earlier, in order for a new MCU family to be supported by QMK, it needs to be upstreamed into ChibiOS-Contrib before QMK will consider accepting boards using it. The same principle applies for development -- you're best approaching the ChibiOS-Contrib maintainers to get a bit more of an idea on what's involved with upstreaming your contribution.
diff --git a/docs/proton_c_conversion.md b/docs/proton_c_conversion.md
index 98f1508a9e5..1b5e496e74a 100644
--- a/docs/proton_c_conversion.md
+++ b/docs/proton_c_conversion.md
@@ -36,7 +36,7 @@ These are defaults based on what has been implemented for ARM boards.
| [RGB Lighting](feature_rgblight.md) | Disabled |
| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
-| [Split keyboards](feature_split_keyboard.md) | Not supported yet |
+| [Split keyboards](feature_split_keyboard.md) | Partial - heavily dependent on enabled features |
## Manual Conversion
diff --git a/docs/pt-br/README.md b/docs/pt-br/README.md
index 7cff6ce621f..ea63ce13b5f 100644
--- a/docs/pt-br/README.md
+++ b/docs/pt-br/README.md
@@ -12,7 +12,7 @@ QMK (*Quantum Mechanical Keyboard*) é uma comunidade de código aberto que mant
## Como obter e usar o QMK
-Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do Github](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
+Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do GitHub](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar.
diff --git a/docs/pt-br/_summary.md b/docs/pt-br/_summary.md
index 78b3b202163..e0a1b45b331 100644
--- a/docs/pt-br/_summary.md
+++ b/docs/pt-br/_summary.md
@@ -11,7 +11,7 @@
* [QMK CLI](pt-br/cli.md)
* [QMK CLI Config](pt-br/cli_configuration.md)
* [Contributing to QMK](pt-br/contributing.md)
- * [How to Use Github](pt-br/getting_started_github.md)
+ * [How to Use GitHub](pt-br/getting_started_github.md)
* [Getting Help](pt-br/getting_started_getting_help.md)
* [Breaking Changes](pt-br/breaking_changes.md)
diff --git a/docs/reference_glossary.md b/docs/reference_glossary.md
index 4cdba024e46..1da27ff24fd 100644
--- a/docs/reference_glossary.md
+++ b/docs/reference_glossary.md
@@ -41,7 +41,7 @@ A macro which has been recorded on the keyboard and which will be lost when the
## Eclipse
An IDE that is popular with many C developers.
-* [Eclipse Setup Instructions](eclipse.md)
+* [Eclipse Setup Instructions](other_eclipse.md)
## Firmware
The software that controls your MCU.
diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md
new file mode 100644
index 00000000000..a7026a0994e
--- /dev/null
+++ b/docs/reference_keymap_extras.md
@@ -0,0 +1,82 @@
+# Language-specific Keycodes
+
+Keyboards are able to support a wide range of languages. However, they do not send the actual characters produced by pressing their keys - instead, they send numerical codes. In the USB HID spec, these are called "usages", although they are more often referred to as "scancodes" or "keycodes" when in the context of keyboards.
+Less than 256 usages are defined in the HID Keyboard/Keypad usage page, and some of those do nothing on modern operating systems. So, how is this language support achieved?
+
+In a nutshell, the operating system maps the usages it receives to the appropriate character based on the user's configured keyboard layout. For example, when a Swedish person presses the key with the `å` character printed on it, the keyboard is *actually* sending the keycode for `[`.
+
+Obviously, this could get confusing, so QMK provides language-specific keycode aliases for many keyboard layouts. These won't do much on their own - you still have to set the matching keyboard layout in your OS settings. Think of them more as keycap labels for your keymap.
+
+To use these, simply `#include` the corresponding [header file](https://github.com/qmk/qmk_firmware/tree/master/quantum/keymap_extras) in your `keymap.c`, and add the keycodes defined in them in place of the `KC_` prefixed ones:
+
+|Layout |Header |
+|---------------------------|--------------------------------|
+|Canadian Multilingual (CSA)|`keymap_canadian_multilingual.h`|
+|Croatian |`keymap_croatian.h` |
+|Czech |`keymap_czech.h` |
+|Danish |`keymap_danish.h` |
+|Dutch (Belgium) |`keymap_belgian.h` |
+|English (Ireland) |`keymap_irish.h` |
+|English (UK) |`keymap_uk.h` |
+|English (US International) |`keymap_us_international.h` |
+|Estonian |`keymap_estonian.h` |
+|Finnish |`keymap_finnish.h` |
+|French |`keymap_french.h` |
+|French (BÉPO) |`keymap_bepo.h` |
+|French (Belgium) |`keymap_belgian.h` |
+|French (Switzerland) |`keymap_fr_ch.h` |
+|French (macOS, ISO) |`keymap_french_osx.h` |
+|German |`keymap_german.h` |
+|German (Switzerland) |`keymap_german_ch.h` |
+|German (macOS) |`keymap_german_osx.h` |
+|German (Neo2)* |`keymap_neo2.h` |
+|Greek* |`keymap_greek.h` |
+|Hebrew* |`keymap_hebrew.h` |
+|Hungarian |`keymap_hungarian.h` |
+|Icelandic |`keymap_icelandic.h` |
+|Italian |`keymap_italian.h` |
+|Italian (macOS, ANSI) |`keymap_italian_osx_ansi.h` |
+|Italian (macOS, ISO) |`keymap_italian_osx_iso.h` |
+|Japanese |`keymap_jp.h` |
+|Korean |`keymap_korean.h` |
+|Latvian |`keymap_latvian.h` |
+|Lithuanian (ĄŽERTY) |`keymap_lithuanian_azerty.h` |
+|Lithuanian (QWERTY) |`keymap_lithuanian_qwerty.h` |
+|Norwegian |`keymap_norwegian.h` |
+|Polish |`keymap_polish.h` |
+|Portuguese |`keymap_portuguese.h` |
+|Portuguese (Brazil) |`keymap_br_abnt2.h` |
+|Romanian |`keymap_romanian.h` |
+|Russian* |`keymap_russian.h` |
+|Serbian* |`keymap_serbian.h` |
+|Serbian (Latin) |`keymap_serbian_latin.h` |
+|Slovak |`keymap_slovak.h` |
+|Slovenian |`keymap_slovenian.h` |
+|Spanish |`keymap_spanish.h` |
+|Spanish (Dvorak) |`keymap_spanish_dvorak.h` |
+|Swedish |`keymap_swedish.h` |
+|Turkish (F) |`keymap_turkish_f.h` |
+|Turkish (Q) |`keymap_turkish_q.h` |
+
+There are also a few which are not quite language-specific, but useful if you are not using a QWERTY layout:
+
+|Layout |Header |
+|-------------------|------------------------|
+|Colemak |`keymap_colemak.h` |
+|Dvorak |`keymap_dvorak.h` |
+|Dvorak (French) |`keymap_dvorak_fr.h` |
+|Dvorak (Programmer)|`keymap_dvp.h` |
+|Norman |`keymap_norman.h` |
+|Plover* |`keymap_plover.h` |
+|Plover (Dvorak)* |`keymap_plover_dvorak.h`|
+|Steno* |`keymap_steno.h` |
+|Workman |`keymap_workman.h` |
+|Workman (ZXCVM) |`keymap_workman_zxcvm.h`|
+
+## Sendstring Support
+
+By default, `SEND_STRING()` assumes a US ANSI keyboard layout is set. If you are using a different layout, you can also `#include "sendstring_*.h"` (as above) in your keymap to override the lookup tables used for mapping ASCII characters to keycodes.
+
+An important thing to note here is that `SEND_STRING()` only operates on [ASCII text](https://en.wikipedia.org/wiki/ASCII#Character_set). This means that you cannot pass it a string containing Unicode characters - this unfortunately includes accented characters that may be present in your desired layout.
+Many layouts make certain characters, such as Grave or Tilde, available only as [dead keys](https://en.wikipedia.org/wiki/Dead_key), so you must add a space immediately after it in the string you want to send, to prevent it from potentially combining with the next character.
+Certain other layouts have no Sendstring header as they do not use a Latin-derived alphabet (for example Greek and Russian), and thus there is no way to input most of the ASCII character set. These are marked above with a `*`.
diff --git a/docs/ru-ru/_summary.md b/docs/ru-ru/_summary.md
index f893be3cfd1..09273172b6f 100644
--- a/docs/ru-ru/_summary.md
+++ b/docs/ru-ru/_summary.md
@@ -11,7 +11,7 @@
* [QMK CLI](ru-ru/cli.md)
* [QMK CLI Config](ru-ru/cli_configuration.md)
* [Contributing to QMK](ru-ru/contributing.md)
- * [How to Use Github](ru-ru/getting_started_github.md)
+ * [How to Use GitHub](ru-ru/getting_started_github.md)
* [Getting Help](ru-ru/getting_started_getting_help.md)
* [Breaking Changes](ru-ru/breaking_changes.md)
diff --git a/docs/ru-ru/getting_started_github.md b/docs/ru-ru/getting_started_github.md
index 3b4940dd15f..4fd80791f11 100644
--- a/docs/ru-ru/getting_started_github.md
+++ b/docs/ru-ru/getting_started_github.md
@@ -6,10 +6,10 @@ GitHub может показаться несколько сложным для
Откройте [страницу QMK на GitHub] (https://github.com/qmk/qmk_firmware), и в правом верхнем углу вы увидите кнопку с надписью "Fork":
-
+
Если вы состоите в какой-либо организации, вам нужно выбрать учетную запись, к которой будет привязан форк. В большинстве случаев это будет личной аккаунт. Как только ваш форк будет завершен (иногда это занимает немного времени), нажмите кнопку "Clone or Download":
-
+
И обязательно выберите "HTTPS", затем выделите ссылку и скопируйте ее:
diff --git a/docs/serial_driver.md b/docs/serial_driver.md
new file mode 100644
index 00000000000..bc376b6ddda
--- /dev/null
+++ b/docs/serial_driver.md
@@ -0,0 +1,69 @@
+# 'serial' Driver
+This driver powers the [Split Keyboard](feature_split_keyboard.md) feature.
+
+?> Serial in this context should be read as **sending information one bit at a time**, rather than implementing UART/USART/RS485/RS232 standards.
+
+All drivers in this category have the following characteristics:
+* Provides data and signaling over a single conductor
+* Limited to single master, single slave
+
+## Supported Driver Types
+
+| | AVR | ARM |
+|-------------------|--------------------|--------------------|
+| bit bang | :heavy_check_mark: | :heavy_check_mark: |
+| USART Half-duplex | | :heavy_check_mark: |
+
+## Driver configuration
+
+### Bitbang
+Default driver, the absence of configuration assumes this driver. To configure it, add this to your rules.mk:
+
+```make
+SERIAL_DRIVER = bitbang
+```
+
+Configure the driver via your config.h:
+```c
+#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
+#define SELECT_SOFT_SERIAL_SPEED 1 // or 0, 2, 3, 4, 5
+ // 0: about 189kbps (Experimental only)
+ // 1: about 137kbps (default)
+ // 2: about 75kbps
+ // 3: about 39kbps
+ // 4: about 26kbps
+ // 5: about 20kbps
+```
+
+#### ARM
+
+!> The bitbang driver causes connection issues with bitbang WS2812 driver
+
+Along with the generic options above, you must also turn on the `PAL_USE_CALLBACKS` feature in your halconf.h.
+
+### USART Half-duplex
+Targeting STM32 boards where communication is offloaded to a USART hardware device. The advantage is that this provides fast and accurate timings. `SOFT_SERIAL_PIN` for this driver is the configured USART TX pin. **The TX pin must have appropriate pull-up resistors**. To configure it, add this to your rules.mk:
+
+```make
+SERIAL_DRIVER = usart
+```
+
+Configure the hardware via your config.h:
+```c
+#define SOFT_SERIAL_PIN B6 // USART TX pin
+#define SELECT_SOFT_SERIAL_SPEED 1 // or 0, 2, 3, 4, 5
+ // 0: about 460800 baud
+ // 1: about 230400 baud (default)
+ // 2: about 115200 baud
+ // 3: about 57600 baud
+ // 4: about 38400 baud
+ // 5: about 19200 baud
+#define SERIAL_USART_DRIVER SD1 // USART driver of TX pin. default: SD1
+#define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
+```
+
+You must also enable the ChibiOS `SERIAL` feature:
+* In your board's halconf.h: `#define HAL_USE_SERIAL TRUE`
+* In your board's mcuconf.h: `#define STM32_SERIAL_USE_USARTn TRUE` (where 'n' matches the peripheral number of your selected USART on the MCU)
+
+Do note that the configuration required is for the `SERIAL` peripheral, not the `UART` peripheral.
diff --git a/docs/spi_driver.md b/docs/spi_driver.md
index c170bf1dfc7..1d432432ad1 100644
--- a/docs/spi_driver.md
+++ b/docs/spi_driver.md
@@ -11,7 +11,7 @@ No special setup is required - just connect the `SS`, `SCK`, `MOSI` and `MISO` p
|ATMega16/32U2/4|`B0`|`B1` |`B2` |`B3` |
|AT90USB64/128 |`B0`|`B1` |`B2` |`B3` |
|ATmega32A |`B4`|`B7` |`B5` |`B6` |
-|ATmega328P |`B2`|`B5` |`B3` |`B4` |
+|ATmega328/P |`B2`|`B5` |`B3` |`B4` |
You may use more than one slave select pin, not just the `SS` pin. This is useful when you have multiple devices connected and need to communicate with them individually.
`SPI_SS_PIN` can be passed to `spi_start()` to refer to `SS`.
diff --git a/docs/support.md b/docs/support.md
index 79c1dbc1b5e..938d9daf784 100644
--- a/docs/support.md
+++ b/docs/support.md
@@ -12,6 +12,6 @@ If you need help with something, the best place to get quick support is going to
The official QMK forum is [/r/olkb](https://reddit.com/r/olkb) on [reddit.com](https://reddit.com).
-## Github Issues
+## GitHub Issues
You can open an [issue on GitHub](https://github.com/qmk/qmk_firmware/issues). This is especially handy when your issue will require long-term discussion or debugging.
diff --git a/docs/tap_hold.md b/docs/tap_hold.md
index a0b648694b9..589ec318160 100644
--- a/docs/tap_hold.md
+++ b/docs/tap_hold.md
@@ -4,6 +4,39 @@ While Tap-Hold options are fantastic, they are not without their issues. We hav
These options let you modify the behavior of the Tap-Hold keys.
+## Tapping Term
+
+The crux of all of the following features is the tapping term setting. This determines what is a tap and what is a hold. And the exact timing for this to feel natural can vary from keyboard to keyboard, from switch to switch, and from key to key.
+
+You can set the global time for this by adding the following setting to your `config.h`:
+
+```c
+#define TAPPING_TERM 200
+```
+
+This setting is defined in milliseconds, and does default to 200ms. This is a good average for a majority of people.
+
+For more granular control of this feature, you can add the following to your `config.h`:
+```c
+#define TAPPING_TERM_PER_KEY
+```
+
+You can then add the following function to your keymap:
+
+```c
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_SPC):
+ return TAPPING_TERM + 1250;
+ case LT(1, KC_GRV):
+ return 130;
+ default:
+ return TAPPING_TERM;
+ }
+}
+```
+
+
## Permissive Hold
As of [PR#1359](https://github.com/qmk/qmk_firmware/pull/1359/), there is a new `config.h` option:
@@ -27,6 +60,25 @@ Normally, if you do all this within the `TAPPING_TERM` (default: 200ms) this wil
?> If you have `Ignore Mod Tap Interrupt` enabled, as well, this will modify how both work. The regular key has the modifier added if the first key is released first or if both keys are held longer than the `TAPPING_TERM`.
+For more granular control of this feature, you can add the following to your `config.h`:
+
+```c
+#define PERMISSIVE_HOLD_PER_KEY
+```
+
+You can then add the following function to your keymap:
+
+```c
+bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LT(1, KC_BSPC):
+ return true;
+ default:
+ return false;
+ }
+}
+```
+
## Ignore Mod Tap Interrupt
To enable this setting, add this to your `config.h`:
@@ -62,13 +114,13 @@ For more granular control of this feature, you can add the following to your `co
You can then add the following function to your keymap:
```c
-bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
- switch (keycode) {
- case SFT_T(KC_SPC):
- return true;
- default:
- return false;
- }
+bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SFT_T(KC_SPC):
+ return true;
+ default:
+ return false;
+ }
}
```
@@ -106,12 +158,12 @@ You can then add the following function to your keymap:
```c
bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case LT(1, KC_BSPC):
- return true;
- default:
- return false;
- }
+ switch (keycode) {
+ case LT(1, KC_BSPC):
+ return true;
+ default:
+ return false;
+ }
}
```
@@ -126,3 +178,13 @@ To enable `retro tapping`, add the following to your `config.h`:
Holding and releasing a dual function key without pressing another key will result in nothing happening. With retro tapping enabled, releasing the key without pressing another will send the original keycode even if it is outside the tapping term.
For instance, holding and releasing `LT(2, KC_SPACE)` without hitting another key will result in nothing happening. With this enabled, it will send `KC_SPACE` instead.
+
+## Why do we include the key record for the per key functions?
+
+One thing that you may notice is that we include the key record for all of the "per key" functions, and may be wondering why we do that.
+
+Well, it's simply really: customization. But specifically, it depends on how your keyboard is wired up. For instance, if each row is actually using a row in the keyboard's matrix, then it may be simpler to use `if (record->event.row == 3)` instead of checking a whole bunch of keycodes. Which is especially good for those people using the Tap Hold type keys on the home row. So you could fine tune those to not interfere with your normal typing.
+
+## Why is there no `*_kb` or `*_user` functions?!
+
+Unlike many of the other functions here, there isn't a need (or even reason) to have a quantum or keyboard level function. Only user level functions are useful here, so no need to mark them as such.
diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md
index 51b053b9b4a..941e1bde084 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -19,6 +19,15 @@ These LEDs are called "addressable" because instead of using a wire per color, e
## Driver configuration
+### All drivers
+
+Different versions of the addressable LEDs have differing requirements for the TRST period between frames.
+The default setting is 280 µs, which should work for most cases, but this can be overridden in your config.h. e.g.:
+
+```c
+#define WS2812_TRST_US 80
+```
+
### Bitbang
Default driver, the absence of configuration assumes this driver. To configure it, add this to your rules.mk:
@@ -99,3 +108,14 @@ While not an exhaustive list, the following table provides the scenarios that ha
| f401/f411 | :heavy_check_mark: |
*Other supported ChibiOS boards and/or pins may function, it will be highly chip and configuration dependent.*
+
+### Push Pull and Open Drain Configuration
+The default configuration is a push pull on the defined pin.
+This can be configured for bitbang, PWM and SPI.
+
+Note: This only applies to STM32 boards.
+
+ To configure the `RGB_DI_PIN` to open drain configuration add this to your config.h file:
+```c
+ #define WS2812_EXTERNAL_PULLUP
+```
diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md
index bb7e0130f00..173af882dab 100644
--- a/docs/zh-cn/README.md
+++ b/docs/zh-cn/README.md
@@ -13,7 +13,7 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
## 如何得到它
-如果你打算贡献布局, 键盘, 或者其他QMK特性, 一下是最简单的方法:[从Github获得repo分支](https://github.com/qmk/qmk_firmware#fork-destination-box), 并克隆你的repo到本地进行编辑,推送,然后从你的分支打开 [Pull Request](https://github.com/qmk/qmk_firmware/pulls).
+如果你打算贡献布局, 键盘, 或者其他QMK特性, 一下是最简单的方法:[从GitHub获得repo分支](https://github.com/qmk/qmk_firmware#fork-destination-box), 并克隆你的repo到本地进行编辑,推送,然后从你的分支打开 [Pull Request](https://github.com/qmk/qmk_firmware/pulls).
此外, 你也可以直接下载 ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), 或者从git克隆 (`git@github.com:qmk/qmk_firmware.git`), 或 https (`https://github.com/qmk/qmk_firmware.git`).
diff --git a/docs/zh-cn/_summary.md b/docs/zh-cn/_summary.md
index 201b83894d0..cedcfbd5257 100644
--- a/docs/zh-cn/_summary.md
+++ b/docs/zh-cn/_summary.md
@@ -14,7 +14,7 @@
* [QMK命令行工具](zh-cn/cli.md)
* [QMK命令行工具配置](zh-cn/cli_configuration.md)
* [向QMK贡献代码](zh-cn/contributing.md)
- * [如何使用Github](zh-cn/getting_started_github.md)
+ * [如何使用GitHub](zh-cn/getting_started_github.md)
* [获得帮助](zh-cn/getting_started_getting_help.md)
* [非兼容性修改](zh-cn/breaking_changes.md)
diff --git a/docs/zh-cn/custom_quantum_functions.md b/docs/zh-cn/custom_quantum_functions.md
index f2c6098dcb7..95b2084dbf4 100644
--- a/docs/zh-cn/custom_quantum_functions.md
+++ b/docs/zh-cn/custom_quantum_functions.md
@@ -57,7 +57,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER:
// 当按下回车时播放音符
if (record->event.pressed) {
- PLAY_NOTE_ARRAY(tone_qwerty);
+ PLAY_SONG(tone_qwerty);
}
return true; // 让QMK触发回车按下/释放事件
default:
@@ -413,7 +413,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KC_ENTER:
// 在按下回车时播放音符
if (record->event.pressed) {
- PLAY_NOTE_ARRAY(tone_qwerty);
+ PLAY_SONG(tone_qwerty);
}
return true; // 让QMK产生回车按下/释放事件
case RGB_LYR: // 本句让underglow作为层指示,或正常使用。
@@ -473,7 +473,7 @@ void eeconfig_init_user(void) { // EEPROM正被重置
想要修改基于键码的`TAPPING TERM`,你要向`keymap.c`文件添加如下代码:
```c
-uint16_t get_tapping_term(uint16_t keycode) {
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SFT_T(KC_SPC):
return TAPPING_TERM + 1250;
diff --git a/docs/zh-cn/getting_started_getting_help.md b/docs/zh-cn/getting_started_getting_help.md
index cf770a77081..8c0ebaa2438 100644
--- a/docs/zh-cn/getting_started_getting_help.md
+++ b/docs/zh-cn/getting_started_getting_help.md
@@ -10,6 +10,6 @@
QMK的官方论坛是[/r/olkb](https://reddit.com/r/olkb) 在[reddit.com](https://reddit.com)上.
-## Github的Issue
+## GitHub的Issue
你可以在GitHub上 [提出issue](https://github.com/qmk/qmk_firmware/issues).当您的问题需要长期讨论或调试时,这尤其方便。
diff --git a/docs/zh-cn/getting_started_github.md b/docs/zh-cn/getting_started_github.md
index 2b2f7a75c58..9a01e43b7fd 100644
--- a/docs/zh-cn/getting_started_github.md
+++ b/docs/zh-cn/getting_started_github.md
@@ -1,16 +1,16 @@
-# 如何在QMK中使用Github
+# 如何在QMK中使用GitHub
-Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
+GitHub can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
?> 本教程假设您已安装GitHub,并且您喜欢使用命令行工作。
-首先 [Github上的QMK页面](https://github.com/qmk/qmk_firmware), 您能看到右上方有个按钮写着"Fork":
+首先 [GitHub上的QMK页面](https://github.com/qmk/qmk_firmware), 您能看到右上方有个按钮写着"Fork":
-
+
如果你是某组织成员,你将需要选择分叉到哪个账户。一般情况下, 你是想要分叉到你的私人账户下。当你完成分叉 (有时需要等一会), 点击"Clone or Download" 按钮:
-!从Github下载](http://i.imgur.com/N1NYcSz.jpg)
+!从GitHub下载](http://i.imgur.com/N1NYcSz.jpg)
你要选择 "HTTPS", 然后选择链接复制:
@@ -54,7 +54,7 @@ To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master
```
-现在你的改动已经在你Github上的分支中了 - 如果你回到这 (`https://github.com/你的GitHub账户名/qmk_firmware`) ,你可以点击下方所示按钮创建 "New Pull Request":
+现在你的改动已经在你GitHub上的分支中了 - 如果你回到这 (`https://github.com/你的GitHub账户名/qmk_firmware`) ,你可以点击下方所示按钮创建 "New Pull Request":

diff --git a/docs/zh-cn/newbs_building_firmware.md b/docs/zh-cn/newbs_building_firmware.md
index 31093f2543b..fc43583c2b0 100644
--- a/docs/zh-cn/newbs_building_firmware.md
+++ b/docs/zh-cn/newbs_building_firmware.md
@@ -20,7 +20,7 @@
## 创建`default` 布局副本
-打开`keymaps`文件夹后,您将需要创建`default`文件夹的副本。我们强烈建议您将文件夹命名为与Github用户名相同的名称,但您也可以使用任何您想使用的名称,只要它只包含小写字母、数字和下划线字符。
+打开`keymaps`文件夹后,您将需要创建`default`文件夹的副本。我们强烈建议您将文件夹命名为与GitHub用户名相同的名称,但您也可以使用任何您想使用的名称,只要它只包含小写字母、数字和下划线字符。
要自动执行此过程,您还可以选择运行`new_keymap.sh`脚本。
diff --git a/drivers/avr/analog.c b/drivers/avr/analog.c
index abe478b7129..9b8397b933f 100644
--- a/drivers/avr/analog.c
+++ b/drivers/avr/analog.c
@@ -38,7 +38,7 @@ int16_t analogRead(uint8_t pin) {
// clang-format on
if (pin >= 12) return 0;
return adc_read(pgm_read_byte(pin_to_mux + pin));
-#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__)
+#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
if (pin >= 8) return 0;
return adc_read(pin);
#else
@@ -85,7 +85,7 @@ uint8_t pinToMux(pin_t pin) {
case A6: return _BV(MUX2) | _BV(MUX1); // ADC6
case A7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
-#elif defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
case C0: return 0; // ADC0
case C1: return _BV(MUX0); // ADC1
case C2: return _BV(MUX1); // ADC2
diff --git a/drivers/avr/apa102.c b/drivers/avr/apa102.c
index b174b39b8f2..740acb5739b 100644
--- a/drivers/avr/apa102.c
+++ b/drivers/avr/apa102.c
@@ -2,7 +2,7 @@
* APA102 lib V1.0a
*
* Controls APA102 RGB-LEDs
- * Author: Mikkel (Duckle29 on github)
+ * Author: Mikkel (Duckle29 on GitHub)
*
* Dec 22th, 2017 v1.0a Initial Version
*
diff --git a/drivers/avr/i2c_master.c b/drivers/avr/i2c_master.c
index c084d5754f3..b1e48852984 100644
--- a/drivers/avr/i2c_master.c
+++ b/drivers/avr/i2c_master.c
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
/* Library made by: g4lvanix
- * Github repository: https://github.com/g4lvanix/I2C-master-lib
+ * GitHub repository: https://github.com/g4lvanix/I2C-master-lib
*/
#include
diff --git a/drivers/avr/i2c_master.h b/drivers/avr/i2c_master.h
index 0a3b6c508cc..4a35867cd05 100644
--- a/drivers/avr/i2c_master.h
+++ b/drivers/avr/i2c_master.h
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
/* Library made by: g4lvanix
- * Github repository: https://github.com/g4lvanix/I2C-master-lib
+ * GitHub repository: https://github.com/g4lvanix/I2C-master-lib
*/
#ifndef I2C_MASTER_H
diff --git a/drivers/avr/i2c_slave.c b/drivers/avr/i2c_slave.c
index 3fb684f70ac..62a378165af 100644
--- a/drivers/avr/i2c_slave.c
+++ b/drivers/avr/i2c_slave.c
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
/* Library made by: g4lvanix
- * Github repository: https://github.com/g4lvanix/I2C-slave-lib
+ * GitHub repository: https://github.com/g4lvanix/I2C-slave-lib
*/
#include
diff --git a/drivers/avr/i2c_slave.h b/drivers/avr/i2c_slave.h
index 5ed0b11a8e2..5d92150e658 100644
--- a/drivers/avr/i2c_slave.h
+++ b/drivers/avr/i2c_slave.h
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
/* Library made by: g4lvanix
- * Github repository: https://github.com/g4lvanix/I2C-slave-lib
+ * GitHub repository: https://github.com/g4lvanix/I2C-slave-lib
Info: Inititate the library by giving the required address.
Read or write to the necessary buffer according to the opperation.
diff --git a/drivers/avr/spi_master.c b/drivers/avr/spi_master.c
index 32cc55c8361..f91baf70baf 100644
--- a/drivers/avr/spi_master.c
+++ b/drivers/avr/spi_master.c
@@ -28,7 +28,7 @@
# define SPI_SCK_PIN B7
# define SPI_MOSI_PIN B5
# define SPI_MISO_PIN B6
-#elif defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
# define SPI_SCK_PIN B5
# define SPI_MOSI_PIN B3
# define SPI_MISO_PIN B4
diff --git a/drivers/avr/spi_master.h b/drivers/avr/spi_master.h
index b69c1cbd66e..e36a7c21c06 100644
--- a/drivers/avr/spi_master.h
+++ b/drivers/avr/spi_master.h
@@ -25,7 +25,7 @@ typedef int16_t spi_status_t;
# define SPI_SS_PIN B0
#elif defined(__AVR_ATmega32A__)
# define SPI_SS_PIN B4
-#elif defined(__AVR_ATmega328P__)
+#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega328__)
# define SPI_SS_PIN B2
#endif
diff --git a/drivers/avr/ws2812.c b/drivers/avr/ws2812.c
index 5c3d72dcb5e..dd2ef899124 100644
--- a/drivers/avr/ws2812.c
+++ b/drivers/avr/ws2812.c
@@ -36,25 +36,15 @@
static inline void ws2812_sendarray_mask(uint8_t *data, uint16_t datlen, uint8_t masklo, uint8_t maskhi);
-// Setleds for standard RGB
-void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds) {
- // wrap up usage of RGB_DI_PIN
- ws2812_setleds_pin(ledarray, number_of_leds, RGB_DI_PIN);
-}
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds) {
+ DDRx_ADDRESS(RGB_DI_PIN) |= pinmask(RGB_DI_PIN);
-void ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t number_of_leds, uint8_t pin) {
- DDRx_ADDRESS(RGB_DI_PIN) |= pinmask(pin);
-
- uint8_t masklo = ~(pinmask(pin)) & PORTx_ADDRESS(pin);
- uint8_t maskhi = pinmask(pin) | PORTx_ADDRESS(pin);
+ uint8_t masklo = ~(pinmask(RGB_DI_PIN)) & PORTx_ADDRESS(RGB_DI_PIN);
+ uint8_t maskhi = pinmask(RGB_DI_PIN) | PORTx_ADDRESS(RGB_DI_PIN);
ws2812_sendarray_mask((uint8_t *)ledarray, number_of_leds * sizeof(LED_TYPE), masklo, maskhi);
-#ifdef RGBW
- _delay_us(80);
-#else
- _delay_us(50);
-#endif
+ _delay_us(WS2812_TRST_US);
}
/*
diff --git a/drivers/avr/ws2812.h b/drivers/avr/ws2812.h
deleted file mode 100644
index 88eb0818942..00000000000
--- a/drivers/avr/ws2812.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * light weight WS2812 lib include
- *
- * Version 2.3 - Nev 29th 2015
- * Author: Tim (cpldcpu@gmail.com)
- *
- * Please do not change this file! All configuration is handled in "ws2812_config.h"
- *
- * 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 .
- */
-
-#pragma once
-
-#include "quantum/color.h"
-
-/* User Interface
- *
- * Input:
- * ledarray: An array of GRB data describing the LED colors
- * number_of_leds: The number of LEDs to write
- * pin (optional): A pin_t definition for the line to drive
- *
- * The functions will perform the following actions:
- * - Set the data-out pin as output
- * - Send out the LED data
- * - Wait 50us to reset the LEDs
- */
-void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
-void ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t number_of_leds, uint8_t pin);
diff --git a/drivers/chibios/serial.c b/drivers/chibios/serial.c
new file mode 100644
index 00000000000..26c68065321
--- /dev/null
+++ b/drivers/chibios/serial.c
@@ -0,0 +1,290 @@
+/*
+ * WARNING: be careful changing this code, it is very timing dependent
+ */
+
+#include "quantum.h"
+#include "serial.h"
+#include "wait.h"
+
+#include "hal.h"
+
+// TODO: resolve/remove build warnings
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLED_SPLIT) && defined(PROTOCOL_CHIBIOS) && defined(WS2812_DRIVER_BITBANG)
+# warning "RGBLED_SPLIT not supported with bitbang WS2812 driver"
+#endif
+
+// default wait implementation cannot be called within interrupt
+// this method seems to be more accurate than GPT timers
+#if PORT_SUPPORTS_RT == FALSE
+# error "chSysPolledDelayX method not supported on this platform"
+#else
+# undef wait_us
+# define wait_us(x) chSysPolledDelayX(US2RTC(STM32_SYSCLK, x))
+#endif
+
+#ifndef SELECT_SOFT_SERIAL_SPEED
+# define SELECT_SOFT_SERIAL_SPEED 1
+// TODO: correct speeds...
+// 0: about 189kbps (Experimental only)
+// 1: about 137kbps (default)
+// 2: about 75kbps
+// 3: about 39kbps
+// 4: about 26kbps
+// 5: about 20kbps
+#endif
+
+// Serial pulse period in microseconds. At the moment, going lower than 12 causes communication failure
+#if SELECT_SOFT_SERIAL_SPEED == 0
+# define SERIAL_DELAY 12
+#elif SELECT_SOFT_SERIAL_SPEED == 1
+# define SERIAL_DELAY 16
+#elif SELECT_SOFT_SERIAL_SPEED == 2
+# define SERIAL_DELAY 24
+#elif SELECT_SOFT_SERIAL_SPEED == 3
+# define SERIAL_DELAY 32
+#elif SELECT_SOFT_SERIAL_SPEED == 4
+# define SERIAL_DELAY 48
+#elif SELECT_SOFT_SERIAL_SPEED == 5
+# define SERIAL_DELAY 64
+#else
+# error invalid SELECT_SOFT_SERIAL_SPEED value
+#endif
+
+inline static void serial_delay(void) { wait_us(SERIAL_DELAY); }
+inline static void serial_delay_half(void) { wait_us(SERIAL_DELAY / 2); }
+inline static void serial_delay_blip(void) { wait_us(1); }
+inline static void serial_output(void) { setPinOutput(SOFT_SERIAL_PIN); }
+inline static void serial_input(void) { setPinInputHigh(SOFT_SERIAL_PIN); }
+inline static bool serial_read_pin(void) { return !!readPin(SOFT_SERIAL_PIN); }
+inline static void serial_low(void) { writePinLow(SOFT_SERIAL_PIN); }
+inline static void serial_high(void) { writePinHigh(SOFT_SERIAL_PIN); }
+
+void interrupt_handler(void *arg);
+
+// Use thread + palWaitLineTimeout instead of palSetLineCallback
+// - Methods like setPinOutput and palEnableLineEvent/palDisableLineEvent
+// cause the interrupt to lock up, which would limit to only receiving data...
+static THD_WORKING_AREA(waThread1, 128);
+static THD_FUNCTION(Thread1, arg) {
+ (void)arg;
+ chRegSetThreadName("blinker");
+ while (true) {
+ palWaitLineTimeout(SOFT_SERIAL_PIN, TIME_INFINITE);
+ interrupt_handler(NULL);
+ }
+}
+
+static SSTD_t *Transaction_table = NULL;
+static uint8_t Transaction_table_size = 0;
+
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size) {
+ Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
+
+ serial_output();
+ serial_high();
+}
+
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size) {
+ Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
+
+ serial_input();
+
+ palEnablePadEvent(PAL_PORT(SOFT_SERIAL_PIN), PAL_PAD(SOFT_SERIAL_PIN), PAL_EVENT_MODE_FALLING_EDGE);
+ chThdCreateStatic(waThread1, sizeof(waThread1), HIGHPRIO, Thread1, NULL);
+}
+
+// Used by the master to synchronize timing with the slave.
+static void __attribute__((noinline)) sync_recv(void) {
+ serial_input();
+ // This shouldn't hang if the slave disconnects because the
+ // serial line will float to high if the slave does disconnect.
+ while (!serial_read_pin()) {
+ }
+
+ serial_delay();
+}
+
+// Used by the slave to send a synchronization signal to the master.
+static void __attribute__((noinline)) sync_send(void) {
+ serial_output();
+
+ serial_low();
+ serial_delay();
+
+ serial_high();
+}
+
+// Reads a byte from the serial line
+static uint8_t __attribute__((noinline)) serial_read_byte(void) {
+ uint8_t byte = 0;
+ serial_input();
+ for (uint8_t i = 0; i < 8; ++i) {
+ byte = (byte << 1) | serial_read_pin();
+ serial_delay();
+ }
+
+ return byte;
+}
+
+// Sends a byte with MSB ordering
+static void __attribute__((noinline)) serial_write_byte(uint8_t data) {
+ uint8_t b = 8;
+ serial_output();
+ while (b--) {
+ if (data & (1 << b)) {
+ serial_high();
+ } else {
+ serial_low();
+ }
+ serial_delay();
+ }
+}
+
+// interrupt handle to be used by the slave device
+void interrupt_handler(void *arg) {
+ chSysLockFromISR();
+
+ sync_send();
+
+ // read mid pulses
+ serial_delay_blip();
+
+ uint8_t checksum_computed = 0;
+ int sstd_index = 0;
+
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+ sstd_index = serial_read_byte();
+ sync_send();
+#endif
+
+ SSTD_t *trans = &Transaction_table[sstd_index];
+ for (int i = 0; i < trans->initiator2target_buffer_size; ++i) {
+ trans->initiator2target_buffer[i] = serial_read_byte();
+ sync_send();
+ checksum_computed += trans->initiator2target_buffer[i];
+ }
+ checksum_computed ^= 7;
+ uint8_t checksum_received = serial_read_byte();
+ sync_send();
+
+ // wait for the sync to finish sending
+ serial_delay();
+
+ uint8_t checksum = 0;
+ for (int i = 0; i < trans->target2initiator_buffer_size; ++i) {
+ serial_write_byte(trans->target2initiator_buffer[i]);
+ sync_send();
+ serial_delay_half();
+ checksum += trans->target2initiator_buffer[i];
+ }
+ serial_write_byte(checksum ^ 7);
+ sync_send();
+
+ // wait for the sync to finish sending
+ serial_delay();
+
+ *trans->status = (checksum_computed == checksum_received) ? TRANSACTION_ACCEPTED : TRANSACTION_DATA_ERROR;
+
+ // end transaction
+ serial_input();
+
+ // TODO: remove extra delay between transactions
+ serial_delay();
+
+ chSysUnlockFromISR();
+}
+
+/////////
+// start transaction by initiator
+//
+// int soft_serial_transaction(int sstd_index)
+//
+// Returns:
+// TRANSACTION_END
+// TRANSACTION_NO_RESPONSE
+// TRANSACTION_DATA_ERROR
+// this code is very time dependent, so we need to disable interrupts
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_transaction(void) {
+ int sstd_index = 0;
+#else
+int soft_serial_transaction(int sstd_index) {
+#endif
+
+ if (sstd_index > Transaction_table_size) return TRANSACTION_TYPE_ERROR;
+ SSTD_t *trans = &Transaction_table[sstd_index];
+
+ // TODO: remove extra delay between transactions
+ serial_delay();
+
+ // this code is very time dependent, so we need to disable interrupts
+ chSysLock();
+
+ // signal to the slave that we want to start a transaction
+ serial_output();
+ serial_low();
+ serial_delay_blip();
+
+ // wait for the slaves response
+ serial_input();
+ serial_high();
+ serial_delay();
+
+ // check if the slave is present
+ if (serial_read_pin()) {
+ // slave failed to pull the line low, assume not present
+ dprintf("serial::NO_RESPONSE\n");
+ chSysUnlock();
+ return TRANSACTION_NO_RESPONSE;
+ }
+
+ // if the slave is present syncronize with it
+
+ uint8_t checksum = 0;
+ // send data to the slave
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+ serial_write_byte(sstd_index); // first chunk is transaction id
+ sync_recv();
+#endif
+ for (int i = 0; i < trans->initiator2target_buffer_size; ++i) {
+ serial_write_byte(trans->initiator2target_buffer[i]);
+ sync_recv();
+ checksum += trans->initiator2target_buffer[i];
+ }
+ serial_write_byte(checksum ^ 7);
+ sync_recv();
+
+ serial_delay();
+ serial_delay(); // read mid pulses
+
+ // receive data from the slave
+ uint8_t checksum_computed = 0;
+ for (int i = 0; i < trans->target2initiator_buffer_size; ++i) {
+ trans->target2initiator_buffer[i] = serial_read_byte();
+ sync_recv();
+ checksum_computed += trans->target2initiator_buffer[i];
+ }
+ checksum_computed ^= 7;
+ uint8_t checksum_received = serial_read_byte();
+
+ sync_recv();
+ serial_delay();
+
+ if ((checksum_computed) != (checksum_received)) {
+ dprintf("serial::FAIL[%u,%u,%u]\n", checksum_computed, checksum_received, sstd_index);
+ serial_output();
+ serial_high();
+
+ chSysUnlock();
+ return TRANSACTION_DATA_ERROR;
+ }
+
+ // always, release the line when not in use
+ serial_high();
+ serial_output();
+
+ chSysUnlock();
+ return TRANSACTION_END;
+}
diff --git a/drivers/chibios/serial.h b/drivers/chibios/serial.h
new file mode 100644
index 00000000000..0c1857d52e3
--- /dev/null
+++ b/drivers/chibios/serial.h
@@ -0,0 +1,62 @@
+#pragma once
+
+#include
+
+// /////////////////////////////////////////////////////////////////
+// Need Soft Serial defines in config.h
+// /////////////////////////////////////////////////////////////////
+// ex.
+// #define SOFT_SERIAL_PIN ?? // ?? = D0,D1,D2,D3,E6
+// OPTIONAL: #define SELECT_SOFT_SERIAL_SPEED ? // ? = 1,2,3,4,5
+// // 1: about 137kbps (default)
+// // 2: about 75kbps
+// // 3: about 39kbps
+// // 4: about 26kbps
+// // 5: about 20kbps
+//
+// //// USE simple API (using signle-type transaction function)
+// /* nothing */
+// //// USE flexible API (using multi-type transaction function)
+// #define SERIAL_USE_MULTI_TRANSACTION
+//
+// /////////////////////////////////////////////////////////////////
+
+// Soft Serial Transaction Descriptor
+typedef struct _SSTD_t {
+ uint8_t *status;
+ uint8_t initiator2target_buffer_size;
+ uint8_t *initiator2target_buffer;
+ uint8_t target2initiator_buffer_size;
+ uint8_t *target2initiator_buffer;
+} SSTD_t;
+#define TID_LIMIT(table) (sizeof(table) / sizeof(SSTD_t))
+
+// initiator is transaction start side
+void soft_serial_initiator_init(SSTD_t *sstd_table, int sstd_table_size);
+// target is interrupt accept side
+void soft_serial_target_init(SSTD_t *sstd_table, int sstd_table_size);
+
+// initiator result
+#define TRANSACTION_END 0
+#define TRANSACTION_NO_RESPONSE 0x1
+#define TRANSACTION_DATA_ERROR 0x2
+#define TRANSACTION_TYPE_ERROR 0x4
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_transaction(void);
+#else
+int soft_serial_transaction(int sstd_index);
+#endif
+
+// target status
+// *SSTD_t.status has
+// initiator:
+// TRANSACTION_END
+// or TRANSACTION_NO_RESPONSE
+// or TRANSACTION_DATA_ERROR
+// target:
+// TRANSACTION_DATA_ERROR
+// or TRANSACTION_ACCEPTED
+#define TRANSACTION_ACCEPTED 0x8
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_get_and_clean_status(int sstd_index);
+#endif
diff --git a/drivers/chibios/serial_usart.c b/drivers/chibios/serial_usart.c
new file mode 100644
index 00000000000..62b4913cbfb
--- /dev/null
+++ b/drivers/chibios/serial_usart.c
@@ -0,0 +1,234 @@
+#include "quantum.h"
+#include "serial.h"
+#include "printf.h"
+
+#include "ch.h"
+#include "hal.h"
+
+#ifndef USART_CR1_M0
+# define USART_CR1_M0 USART_CR1_M // some platforms (f1xx) dont have this so
+#endif
+
+#ifndef USE_GPIOV1
+// The default PAL alternate modes are used to signal that the pins are used for USART
+# ifndef SERIAL_USART_TX_PAL_MODE
+# define SERIAL_USART_TX_PAL_MODE 7
+# endif
+#endif
+
+#ifndef SERIAL_USART_DRIVER
+# define SERIAL_USART_DRIVER SD1
+#endif
+
+#ifndef SERIAL_USART_CR1
+# define SERIAL_USART_CR1 (USART_CR1_PCE | USART_CR1_PS | USART_CR1_M0) // parity enable, odd parity, 9 bit length
+#endif
+
+#ifndef SERIAL_USART_CR2
+# define SERIAL_USART_CR2 (USART_CR2_STOP_1) // 2 stop bits
+#endif
+
+#ifndef SERIAL_USART_CR3
+# define SERIAL_USART_CR3 0
+#endif
+
+#ifdef SOFT_SERIAL_PIN
+# define SERIAL_USART_TX_PIN SOFT_SERIAL_PIN
+#endif
+
+#ifndef SELECT_SOFT_SERIAL_SPEED
+# define SELECT_SOFT_SERIAL_SPEED 1
+#endif
+
+#ifdef SERIAL_USART_SPEED
+// Allow advanced users to directly set SERIAL_USART_SPEED
+#elif SELECT_SOFT_SERIAL_SPEED == 0
+# define SERIAL_USART_SPEED 460800
+#elif SELECT_SOFT_SERIAL_SPEED == 1
+# define SERIAL_USART_SPEED 230400
+#elif SELECT_SOFT_SERIAL_SPEED == 2
+# define SERIAL_USART_SPEED 115200
+#elif SELECT_SOFT_SERIAL_SPEED == 3
+# define SERIAL_USART_SPEED 57600
+#elif SELECT_SOFT_SERIAL_SPEED == 4
+# define SERIAL_USART_SPEED 38400
+#elif SELECT_SOFT_SERIAL_SPEED == 5
+# define SERIAL_USART_SPEED 19200
+#else
+# error invalid SELECT_SOFT_SERIAL_SPEED value
+#endif
+
+#define TIMEOUT 100
+#define HANDSHAKE_MAGIC 7
+
+static inline msg_t sdWriteHalfDuplex(SerialDriver* driver, uint8_t* data, uint8_t size) {
+ msg_t ret = sdWrite(driver, data, size);
+
+ // Half duplex requires us to read back the data we just wrote - just throw it away
+ uint8_t dump[size];
+ sdRead(driver, dump, size);
+
+ return ret;
+}
+#undef sdWrite
+#define sdWrite sdWriteHalfDuplex
+
+static inline msg_t sdWriteTimeoutHalfDuplex(SerialDriver* driver, uint8_t* data, uint8_t size, uint32_t timeout) {
+ msg_t ret = sdWriteTimeout(driver, data, size, timeout);
+
+ // Half duplex requires us to read back the data we just wrote - just throw it away
+ uint8_t dump[size];
+ sdReadTimeout(driver, dump, size, timeout);
+
+ return ret;
+}
+#undef sdWriteTimeout
+#define sdWriteTimeout sdWriteTimeoutHalfDuplex
+
+static inline void sdClear(SerialDriver* driver) {
+ while (sdGetTimeout(driver, TIME_IMMEDIATE) != MSG_TIMEOUT) {
+ // Do nothing with the data
+ }
+}
+
+static SerialConfig sdcfg = {
+ (SERIAL_USART_SPEED), // speed - mandatory
+ (SERIAL_USART_CR1), // CR1
+ (SERIAL_USART_CR2), // CR2
+ (SERIAL_USART_CR3) // CR3
+};
+
+void handle_soft_serial_slave(void);
+
+/*
+ * This thread runs on the slave and responds to transactions initiated
+ * by the master
+ */
+static THD_WORKING_AREA(waSlaveThread, 2048);
+static THD_FUNCTION(SlaveThread, arg) {
+ (void)arg;
+ chRegSetThreadName("slave_transport");
+
+ while (true) {
+ handle_soft_serial_slave();
+ }
+}
+
+__attribute__((weak)) void usart_init(void) {
+#if defined(USE_GPIOV1)
+ palSetLineMode(SERIAL_USART_TX_PIN, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
+#else
+ palSetLineMode(SERIAL_USART_TX_PIN, PAL_MODE_ALTERNATE(SERIAL_USART_TX_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
+#endif
+}
+
+void usart_master_init(void) {
+ usart_init();
+
+ sdcfg.cr3 |= USART_CR3_HDSEL;
+ sdStart(&SERIAL_USART_DRIVER, &sdcfg);
+}
+
+void usart_slave_init(void) {
+ usart_init();
+
+ sdcfg.cr3 |= USART_CR3_HDSEL;
+ sdStart(&SERIAL_USART_DRIVER, &sdcfg);
+
+ // Start transport thread
+ chThdCreateStatic(waSlaveThread, sizeof(waSlaveThread), HIGHPRIO, SlaveThread, NULL);
+}
+
+static SSTD_t* Transaction_table = NULL;
+static uint8_t Transaction_table_size = 0;
+
+void soft_serial_initiator_init(SSTD_t* sstd_table, int sstd_table_size) {
+ Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
+
+ usart_master_init();
+}
+
+void soft_serial_target_init(SSTD_t* sstd_table, int sstd_table_size) {
+ Transaction_table = sstd_table;
+ Transaction_table_size = (uint8_t)sstd_table_size;
+
+ usart_slave_init();
+}
+
+void handle_soft_serial_slave(void) {
+ uint8_t sstd_index = sdGet(&SERIAL_USART_DRIVER); // first chunk is always transaction id
+ SSTD_t* trans = &Transaction_table[sstd_index];
+
+ // Always write back the sstd_index as part of a basic handshake
+ sstd_index ^= HANDSHAKE_MAGIC;
+ sdWrite(&SERIAL_USART_DRIVER, &sstd_index, sizeof(sstd_index));
+
+ if (trans->initiator2target_buffer_size) {
+ sdRead(&SERIAL_USART_DRIVER, trans->initiator2target_buffer, trans->initiator2target_buffer_size);
+ }
+
+ if (trans->target2initiator_buffer_size) {
+ sdWrite(&SERIAL_USART_DRIVER, trans->target2initiator_buffer, trans->target2initiator_buffer_size);
+ }
+
+ if (trans->status) {
+ *trans->status = TRANSACTION_ACCEPTED;
+ }
+}
+
+/////////
+// start transaction by initiator
+//
+// int soft_serial_transaction(int sstd_index)
+//
+// Returns:
+// TRANSACTION_END
+// TRANSACTION_NO_RESPONSE
+// TRANSACTION_DATA_ERROR
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_transaction(void) {
+ uint8_t sstd_index = 0;
+#else
+int soft_serial_transaction(int index) {
+ uint8_t sstd_index = index;
+#endif
+
+ if (sstd_index > Transaction_table_size) return TRANSACTION_TYPE_ERROR;
+ SSTD_t* trans = &Transaction_table[sstd_index];
+ msg_t res = 0;
+
+ sdClear(&SERIAL_USART_DRIVER);
+
+ // First chunk is always transaction id
+ sdWriteTimeout(&SERIAL_USART_DRIVER, &sstd_index, sizeof(sstd_index), TIME_MS2I(TIMEOUT));
+
+ uint8_t sstd_index_shake = 0xFF;
+
+ // Which we always read back first so that we can error out correctly
+ // - due to the half duplex limitations on return codes, we always have to read *something*
+ // - without the read, write only transactions *always* succeed, even during the boot process where the slave is not ready
+ res = sdReadTimeout(&SERIAL_USART_DRIVER, &sstd_index_shake, sizeof(sstd_index_shake), TIME_MS2I(TIMEOUT));
+ if (res < 0 || (sstd_index_shake != (sstd_index ^ HANDSHAKE_MAGIC))) {
+ dprintf("serial::usart_shake NO_RESPONSE\n");
+ return TRANSACTION_NO_RESPONSE;
+ }
+
+ if (trans->initiator2target_buffer_size) {
+ res = sdWriteTimeout(&SERIAL_USART_DRIVER, trans->initiator2target_buffer, trans->initiator2target_buffer_size, TIME_MS2I(TIMEOUT));
+ if (res < 0) {
+ dprintf("serial::usart_transmit NO_RESPONSE\n");
+ return TRANSACTION_NO_RESPONSE;
+ }
+ }
+
+ if (trans->target2initiator_buffer_size) {
+ res = sdReadTimeout(&SERIAL_USART_DRIVER, trans->target2initiator_buffer, trans->target2initiator_buffer_size, TIME_MS2I(TIMEOUT));
+ if (res < 0) {
+ dprintf("serial::usart_receive NO_RESPONSE\n");
+ return TRANSACTION_NO_RESPONSE;
+ }
+ }
+
+ return TRANSACTION_END;
+}
diff --git a/drivers/chibios/ws2812.c b/drivers/chibios/ws2812.c
index bdca565d881..0440cac7550 100644
--- a/drivers/chibios/ws2812.c
+++ b/drivers/chibios/ws2812.c
@@ -14,6 +14,14 @@
# endif
#endif
+// Push Pull or Open Drain Configuration
+// Default Push Pull
+#ifndef WS2812_EXTERNAL_PULLUP
+# define WS2812_OUTPUT_MODE PAL_MODE_OUTPUT_PUSHPULL
+#else
+# define WS2812_OUTPUT_MODE PAL_MODE_OUTPUT_OPENDRAIN
+#endif
+
#define NUMBER_NOPS 6
#define CYCLES_PER_SEC (STM32_SYSCLK / NUMBER_NOPS * NOP_FUDGE)
#define NS_PER_SEC (1000000000L) // Note that this has to be SIGNED since we want to be able to check for negative values of derivatives
@@ -43,7 +51,7 @@
// The reset gap can be 6000 ns, but depending on the LED strip it may have to be increased
// to values like 600000 ns. If it is too small, the pixels will show nothing most of the time.
-#define RES 10000 // Width of the low gap between bits to cause a frame to latch
+#define RES (1000 * WS2812_TRST_US) // Width of the low gap between bits to cause a frame to latch
void sendByte(uint8_t byte) {
// WS2812 protocol wants most significant bits first
@@ -66,7 +74,7 @@ void sendByte(uint8_t byte) {
}
}
-void ws2812_init(void) { setPinOutput(RGB_DI_PIN); }
+void ws2812_init(void) { palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE); }
// Setleds for standard RGB
void ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) {
diff --git a/drivers/chibios/ws2812.h b/drivers/chibios/ws2812.h
deleted file mode 100644
index 41c22a00b88..00000000000
--- a/drivers/chibios/ws2812.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#pragma once
-
-#include "quantum/color.h"
-
-/* User Interface
- *
- * Input:
- * ledarray: An array of GRB data describing the LED colors
- * number_of_leds: The number of LEDs to write
- *
- * The functions will perform the following actions:
- * - Set the data-out pin as output
- * - Send out the LED data
- * - Wait 50us to reset the LEDs
- */
-void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
diff --git a/drivers/chibios/ws2812_pwm.c b/drivers/chibios/ws2812_pwm.c
index 1a172102987..7113db11e0b 100644
--- a/drivers/chibios/ws2812_pwm.c
+++ b/drivers/chibios/ws2812_pwm.c
@@ -24,6 +24,22 @@
# define WS2812_DMA_CHANNEL 2 // DMA Channel for TIMx_UP
#endif
+// Push Pull or Open Drain Configuration
+// Default Push Pull
+#ifndef WS2812_EXTERNAL_PULLUP
+# if defined(USE_GPIOV1)
+# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL
+# else
+# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING
+# endif
+#else
+# if defined(USE_GPIOV1)
+# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
+# else
+# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING
+# endif
+#endif
+
#ifndef WS2812_PWM_TARGET_PERIOD
//# define WS2812_PWM_TARGET_PERIOD 800000 // Original code is 800k...?
# define WS2812_PWM_TARGET_PERIOD 80000 // TODO: work out why 10x less on f303/f4x1
@@ -37,11 +53,10 @@
/**
* @brief Number of bit-periods to hold the data line low at the end of a frame
*
- * The reset period for each frame must be at least 50 uS; so we add in 50 bit-times
- * of zeroes at the end. (50 bits)*(1.25 uS/bit) = 62.5 uS, which gives us some
- * slack in the timing requirements
+ * The reset period for each frame is defined in WS2812_TRST_US.
+ * Calculate the number of zeroes to add at the end assuming 1.25 uS/bit:
*/
-#define WS2812_RESET_BIT_N (50)
+#define WS2812_RESET_BIT_N (1000 * WS2812_TRST_US / 1250)
#define WS2812_COLOR_BIT_N (RGBLED_NUM * 24) /**< Number of data bits */
#define WS2812_BIT_N (WS2812_COLOR_BIT_N + WS2812_RESET_BIT_N) /**< Total number of bits in a frame */
@@ -142,11 +157,7 @@ void ws2812_init(void) {
for (i = 0; i < WS2812_COLOR_BIT_N; i++) ws2812_frame_buffer[i] = WS2812_DUTYCYCLE_0; // All color bits are zero duty cycle
for (i = 0; i < WS2812_RESET_BIT_N; i++) ws2812_frame_buffer[i + WS2812_COLOR_BIT_N] = 0; // All reset bits are zero
-#if defined(USE_GPIOV1)
- palSetLineMode(RGB_DI_PIN, PAL_MODE_STM32_ALTERNATE_PUSHPULL);
-#else
- palSetLineMode(RGB_DI_PIN, PAL_MODE_ALTERNATE(WS2812_PWM_PAL_MODE) | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING);
-#endif
+ palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE);
// PWM Configuration
//#pragma GCC diagnostic ignored "-Woverride-init" // Turn off override-init warning for this struct. We use the overriding ability to set a "default" channel config
diff --git a/drivers/chibios/ws2812_spi.c b/drivers/chibios/ws2812_spi.c
index 36e08e39ed3..7a1d2f05daf 100644
--- a/drivers/chibios/ws2812_spi.c
+++ b/drivers/chibios/ws2812_spi.c
@@ -16,11 +16,27 @@
# define WS2812_SPI_MOSI_PAL_MODE 5
#endif
+// Push Pull or Open Drain Configuration
+// Default Push Pull
+#ifndef WS2812_EXTERNAL_PULLUP
+# if defined(USE_GPIOV1)
+# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_PUSHPULL
+# else
+# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL
+# endif
+#else
+# if defined(USE_GPIOV1)
+# define WS2812_OUTPUT_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN
+# else
+# define WS2812_OUTPUT_MODE PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN
+# endif
+#endif
+
#define BYTES_FOR_LED_BYTE 4
#define NB_COLORS 3
#define BYTES_FOR_LED (BYTES_FOR_LED_BYTE * NB_COLORS)
#define DATA_SIZE (BYTES_FOR_LED * RGBLED_NUM)
-#define RESET_SIZE 200
+#define RESET_SIZE (1000 * WS2812_TRST_US / (2 * 1250))
#define PREAMBLE_SIZE 4
static uint8_t txbuf[PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE] = {0};
@@ -52,11 +68,7 @@ static void set_led_color_rgb(LED_TYPE color, int pos) {
}
void ws2812_init(void) {
-#if defined(USE_GPIOV1)
- palSetLineMode(RGB_DI_PIN, PAL_MODE_STM32_ALTERNATE_PUSHPULL);
-#else
- palSetLineMode(RGB_DI_PIN, PAL_MODE_ALTERNATE(WS2812_SPI_MOSI_PAL_MODE) | PAL_STM32_OTYPE_PUSHPULL);
-#endif
+ palSetLineMode(RGB_DI_PIN, WS2812_OUTPUT_MODE);
// TODO: more dynamic baudrate
static const SPIConfig spicfg = {
diff --git a/drivers/eeprom/eeprom_driver.c b/drivers/eeprom/eeprom_driver.c
index 3835e5e9d05..6ce47faf7da 100644
--- a/drivers/eeprom/eeprom_driver.c
+++ b/drivers/eeprom/eeprom_driver.c
@@ -20,19 +20,19 @@
#include "eeprom_driver.h"
uint8_t eeprom_read_byte(const uint8_t *addr) {
- uint8_t ret;
+ uint8_t ret = 0;
eeprom_read_block(&ret, addr, 1);
return ret;
}
uint16_t eeprom_read_word(const uint16_t *addr) {
- uint16_t ret;
+ uint16_t ret = 0;
eeprom_read_block(&ret, addr, 2);
return ret;
}
uint32_t eeprom_read_dword(const uint32_t *addr) {
- uint32_t ret;
+ uint32_t ret = 0;
eeprom_read_block(&ret, addr, 4);
return ret;
}
diff --git a/drivers/eeprom/eeprom_i2c.c b/drivers/eeprom/eeprom_i2c.c
index 03dbc5e5166..ca8af3da51a 100644
--- a/drivers/eeprom/eeprom_i2c.c
+++ b/drivers/eeprom/eeprom_i2c.c
@@ -37,8 +37,9 @@
// #define DEBUG_EEPROM_OUTPUT
-#ifdef DEBUG_EEPROM_OUTPUT
-# include "print.h"
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+# include "timer.h"
+# include "debug.h"
#endif // DEBUG_EEPROM_OUTPUT
static inline void init_i2c_if_required(void) {
@@ -50,7 +51,7 @@ static inline void init_i2c_if_required(void) {
}
static inline void fill_target_address(uint8_t *buffer, const void *addr) {
- intptr_t p = (intptr_t)addr;
+ uintptr_t p = (uintptr_t)addr;
for (int i = 0; i < EXTERNAL_EEPROM_ADDRESS_SIZE; ++i) {
buffer[EXTERNAL_EEPROM_ADDRESS_SIZE - 1 - i] = p & 0xFF;
p >>= 8;
@@ -60,11 +61,19 @@ static inline void fill_target_address(uint8_t *buffer, const void *addr) {
void eeprom_driver_init(void) {}
void eeprom_driver_erase(void) {
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+ uint32_t start = timer_read32();
+#endif
+
uint8_t buf[EXTERNAL_EEPROM_PAGE_SIZE];
memset(buf, 0x00, EXTERNAL_EEPROM_PAGE_SIZE);
- for (intptr_t addr = 0; addr < EXTERNAL_EEPROM_BYTE_COUNT; addr += EXTERNAL_EEPROM_PAGE_SIZE) {
- eeprom_write_block(buf, (void *)addr, EXTERNAL_EEPROM_PAGE_SIZE);
+ for (uint32_t addr = 0; addr < EXTERNAL_EEPROM_BYTE_COUNT; addr += EXTERNAL_EEPROM_PAGE_SIZE) {
+ eeprom_write_block(buf, (void *)(uintptr_t)addr, EXTERNAL_EEPROM_PAGE_SIZE);
}
+
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+ dprintf("EEPROM erase took %ldms to complete\n", ((long)(timer_read32() - start)));
+#endif
}
void eeprom_read_block(void *buf, const void *addr, size_t len) {
@@ -72,10 +81,10 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
fill_target_address(complete_packet, addr);
init_i2c_if_required();
- i2c_transmit(EXTERNAL_EEPROM_I2C_ADDRESS((intptr_t)addr), complete_packet, EXTERNAL_EEPROM_ADDRESS_SIZE, 100);
- i2c_receive(EXTERNAL_EEPROM_I2C_ADDRESS((intptr_t)addr), buf, len, 100);
+ i2c_transmit(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), complete_packet, EXTERNAL_EEPROM_ADDRESS_SIZE, 100);
+ i2c_receive(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), buf, len, 100);
-#ifdef DEBUG_EEPROM_OUTPUT
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("[EEPROM R] 0x%04X: ", ((int)addr));
for (size_t i = 0; i < len; ++i) {
dprintf(" %02X", (int)(((uint8_t *)buf)[i]));
@@ -85,14 +94,14 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
}
void eeprom_write_block(const void *buf, void *addr, size_t len) {
- uint8_t complete_packet[EXTERNAL_EEPROM_ADDRESS_SIZE + EXTERNAL_EEPROM_PAGE_SIZE];
- uint8_t *read_buf = (uint8_t *)buf;
- intptr_t target_addr = (intptr_t)addr;
+ uint8_t complete_packet[EXTERNAL_EEPROM_ADDRESS_SIZE + EXTERNAL_EEPROM_PAGE_SIZE];
+ uint8_t * read_buf = (uint8_t *)buf;
+ uintptr_t target_addr = (uintptr_t)addr;
init_i2c_if_required();
while (len > 0) {
- intptr_t page_offset = target_addr % EXTERNAL_EEPROM_PAGE_SIZE;
- int write_length = EXTERNAL_EEPROM_PAGE_SIZE - page_offset;
+ uintptr_t page_offset = target_addr % EXTERNAL_EEPROM_PAGE_SIZE;
+ int write_length = EXTERNAL_EEPROM_PAGE_SIZE - page_offset;
if (write_length > len) {
write_length = len;
}
@@ -102,7 +111,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
complete_packet[EXTERNAL_EEPROM_ADDRESS_SIZE + i] = read_buf[i];
}
-#ifdef DEBUG_EEPROM_OUTPUT
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
dprintf("[EEPROM W] 0x%04X: ", ((int)target_addr));
for (uint8_t i = 0; i < write_length; i++) {
dprintf(" %02X", (int)(read_buf[i]));
@@ -110,7 +119,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
dprintf("\n");
#endif // DEBUG_EEPROM_OUTPUT
- i2c_transmit(EXTERNAL_EEPROM_I2C_ADDRESS((intptr_t)addr), complete_packet, EXTERNAL_EEPROM_ADDRESS_SIZE + write_length, 100);
+ i2c_transmit(EXTERNAL_EEPROM_I2C_ADDRESS((uintptr_t)addr), complete_packet, EXTERNAL_EEPROM_ADDRESS_SIZE + write_length, 100);
wait_ms(EXTERNAL_EEPROM_WRITE_TIME);
read_buf += write_length;
diff --git a/drivers/eeprom/eeprom_spi.c b/drivers/eeprom/eeprom_spi.c
new file mode 100644
index 00000000000..7b6416eafbf
--- /dev/null
+++ b/drivers/eeprom/eeprom_spi.c
@@ -0,0 +1,232 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 .
+ */
+
+#include
+#include
+
+/*
+ Note that the implementations of eeprom_XXXX_YYYY on AVR are normally
+ provided by avr-libc. The same functions are reimplemented below and are
+ rerouted to the external SPI equivalent.
+
+ Seemingly, as this is compiled from within QMK, the object file generated
+ during the build overrides the avr-libc implementation during the linking
+ stage.
+
+ On other platforms such as ARM, there are no provided implementations, so
+ there is nothing to override during linkage.
+*/
+
+#include "wait.h"
+#include "spi_master.h"
+#include "eeprom.h"
+#include "eeprom_spi.h"
+
+#define CMD_WREN 6
+#define CMD_WRDI 4
+#define CMD_RDSR 5
+#define CMD_WRSR 1
+#define CMD_READ 3
+#define CMD_WRITE 2
+
+#define SR_WIP 0x01
+
+// #define DEBUG_EEPROM_OUTPUT
+
+#ifndef EXTERNAL_EEPROM_SPI_TIMEOUT
+# define EXTERNAL_EEPROM_SPI_TIMEOUT 100
+#endif
+
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+# include "timer.h"
+# include "debug.h"
+#endif // CONSOLE_ENABLE
+
+static void init_spi_if_required(void) {
+ static int done = 0;
+ if (!done) {
+ spi_init();
+ done = 1;
+ }
+}
+
+static bool spi_eeprom_start(void) { return spi_start(EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN, EXTERNAL_EEPROM_SPI_LSBFIRST, EXTERNAL_EEPROM_SPI_MODE, EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR); }
+
+static spi_status_t spi_eeprom_wait_while_busy(int timeout) {
+ uint32_t deadline = timer_read32() + timeout;
+ spi_status_t response;
+ do {
+ spi_write(CMD_RDSR);
+ response = spi_read();
+ if (timer_read32() >= deadline) {
+ return SPI_STATUS_TIMEOUT;
+ }
+ } while (response & SR_WIP);
+ return SPI_STATUS_SUCCESS;
+}
+
+static void spi_eeprom_transmit_address(uintptr_t addr) {
+ uint8_t buffer[EXTERNAL_EEPROM_ADDRESS_SIZE];
+
+ for (int i = 0; i < EXTERNAL_EEPROM_ADDRESS_SIZE; ++i) {
+ buffer[EXTERNAL_EEPROM_ADDRESS_SIZE - 1 - i] = addr & 0xFF;
+ addr >>= 8;
+ }
+
+ spi_transmit(buffer, EXTERNAL_EEPROM_ADDRESS_SIZE);
+}
+
+//----------------------------------------------------------------------------------------------------------------------
+
+void eeprom_driver_init(void) {}
+
+void eeprom_driver_erase(void) {
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+ uint32_t start = timer_read32();
+#endif
+
+ uint8_t buf[EXTERNAL_EEPROM_PAGE_SIZE];
+ memset(buf, 0x00, EXTERNAL_EEPROM_PAGE_SIZE);
+ for (uint32_t addr = 0; addr < EXTERNAL_EEPROM_BYTE_COUNT; addr += EXTERNAL_EEPROM_PAGE_SIZE) {
+ eeprom_write_block(buf, (void *)(uintptr_t)addr, EXTERNAL_EEPROM_PAGE_SIZE);
+ }
+
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+ dprintf("EEPROM erase took %ldms to complete\n", ((long)(timer_read32() - start)));
+#endif
+}
+
+void eeprom_read_block(void *buf, const void *addr, size_t len) {
+ init_spi_if_required();
+
+ //-------------------------------------------------
+ // Wait for the write-in-progress bit to be cleared
+ bool res = spi_eeprom_start();
+ if (!res) {
+ dprint("failed to start SPI for WIP check\n");
+ memset(buf, 0, len);
+ return;
+ }
+
+ spi_status_t response = spi_eeprom_wait_while_busy(EXTERNAL_EEPROM_SPI_TIMEOUT);
+ spi_stop();
+ if (response == SPI_STATUS_TIMEOUT) {
+ dprint("SPI timeout for WIP check\n");
+ memset(buf, 0, len);
+ return;
+ }
+
+ //-------------------------------------------------
+ // Perform read
+ res = spi_eeprom_start();
+ if (!res) {
+ dprint("failed to start SPI for read\n");
+ memset(buf, 0, len);
+ return;
+ }
+
+ spi_write(CMD_READ);
+ spi_eeprom_transmit_address((uintptr_t)addr);
+ spi_receive(buf, len);
+
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+ dprintf("[EEPROM R] 0x%08lX: ", ((uint32_t)(uintptr_t)addr));
+ for (size_t i = 0; i < len; ++i) {
+ dprintf(" %02X", (int)(((uint8_t *)buf)[i]));
+ }
+ dprintf("\n");
+#endif // DEBUG_EEPROM_OUTPUT
+
+ spi_stop();
+}
+
+void eeprom_write_block(const void *buf, void *addr, size_t len) {
+ init_spi_if_required();
+
+ bool res;
+ uint8_t * read_buf = (uint8_t *)buf;
+ uintptr_t target_addr = (uintptr_t)addr;
+
+ while (len > 0) {
+ uintptr_t page_offset = target_addr % EXTERNAL_EEPROM_PAGE_SIZE;
+ int write_length = EXTERNAL_EEPROM_PAGE_SIZE - page_offset;
+ if (write_length > len) {
+ write_length = len;
+ }
+
+ //-------------------------------------------------
+ // Wait for the write-in-progress bit to be cleared
+ res = spi_eeprom_start();
+ if (!res) {
+ dprint("failed to start SPI for WIP check\n");
+ return;
+ }
+
+ spi_status_t response = spi_eeprom_wait_while_busy(EXTERNAL_EEPROM_SPI_TIMEOUT);
+ spi_stop();
+ if (response == SPI_STATUS_TIMEOUT) {
+ dprint("SPI timeout for WIP check\n");
+ return;
+ }
+
+ //-------------------------------------------------
+ // Enable writes
+ res = spi_eeprom_start();
+ if (!res) {
+ dprint("failed to start SPI for write-enable\n");
+ return;
+ }
+
+ spi_write(CMD_WREN);
+ spi_stop();
+
+ //-------------------------------------------------
+ // Perform the write
+ res = spi_eeprom_start();
+ if (!res) {
+ dprint("failed to start SPI for write\n");
+ return;
+ }
+
+#if defined(CONSOLE_ENABLE) && defined(DEBUG_EEPROM_OUTPUT)
+ dprintf("[EEPROM W] 0x%08lX: ", ((uint32_t)(uintptr_t)target_addr));
+ for (size_t i = 0; i < write_length; i++) {
+ dprintf(" %02X", (int)(uint8_t)(read_buf[i]));
+ }
+ dprintf("\n");
+#endif // DEBUG_EEPROM_OUTPUT
+
+ spi_write(CMD_WRITE);
+ spi_eeprom_transmit_address(target_addr);
+ spi_transmit(read_buf, write_length);
+ spi_stop();
+
+ read_buf += write_length;
+ target_addr += write_length;
+ len -= write_length;
+ }
+
+ //-------------------------------------------------
+ // Disable writes
+ res = spi_eeprom_start();
+ if (!res) {
+ dprint("failed to start SPI for write-disable\n");
+ return;
+ }
+
+ spi_write(CMD_WRDI);
+ spi_stop();
+}
diff --git a/drivers/eeprom/eeprom_spi.h b/drivers/eeprom/eeprom_spi.h
new file mode 100644
index 00000000000..282c603565f
--- /dev/null
+++ b/drivers/eeprom/eeprom_spi.h
@@ -0,0 +1,80 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 .
+ */
+
+#pragma once
+
+/*
+ The slave select pin of the EEPROM.
+ This needs to be a normal GPIO pin_t value, such as A7.
+*/
+#ifndef EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN
+# error "No chip select pin defined -- missing EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN"
+#endif
+
+/*
+ The clock divisor for SPI to ensure that the MCU is within the
+ specifications of the EEPROM chip. Generally this will be PCLK divided by
+ the intended divisor -- check your clock settings and the datasheet of
+ your EEPROM.
+*/
+#ifndef EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR
+# ifdef __AVR__
+# define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 8
+# else
+# define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 64
+# endif
+#endif
+
+/*
+ The SPI mode to communicate with the EEPROM.
+*/
+#ifndef EXTERNAL_EEPROM_SPI_MODE
+# define EXTERNAL_EEPROM_SPI_MODE 0
+#endif
+
+/*
+ Whether or not the SPI communication between the MCU and EEPROM should be
+ LSB-first.
+*/
+#ifndef EXTERNAL_EEPROM_SPI_LSBFIRST
+# define EXTERNAL_EEPROM_SPI_LSBFIRST false
+#endif
+
+/*
+ The total size of the EEPROM, in bytes. The EEPROM datasheet will usually
+ specify this value in kbits, and will require conversion to bytes.
+*/
+#ifndef EXTERNAL_EEPROM_BYTE_COUNT
+# define EXTERNAL_EEPROM_BYTE_COUNT 8192
+#endif
+
+/*
+ The page size in bytes of the EEPROM, as specified in the datasheet.
+*/
+#ifndef EXTERNAL_EEPROM_PAGE_SIZE
+# define EXTERNAL_EEPROM_PAGE_SIZE 32
+#endif
+
+/*
+ The address size in bytes of the EEPROM. For EEPROMs with <=256 bytes, this
+ will likely be 1. For EEPROMs >256 and <=65536, this will be 2. For EEPROMs
+ >65536, this will likely need to be 4.
+
+ As expected, consult the datasheet for specifics of your EEPROM.
+*/
+#ifndef EXTERNAL_EEPROM_ADDRESS_SIZE
+# define EXTERNAL_EEPROM_ADDRESS_SIZE 2
+#endif
diff --git a/drivers/issi/is31fl3731.c b/drivers/issi/is31fl3731.c
index 9f006b8174b..ef9e9162e20 100644
--- a/drivers/issi/is31fl3731.c
+++ b/drivers/issi/is31fl3731.c
@@ -64,7 +64,7 @@ uint8_t g_twi_transfer_buffer[20];
uint8_t g_pwm_buffer[DRIVER_COUNT][144];
bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
-uint8_t g_led_control_registers[DRIVER_COUNT][18] = {{0}, {0}};
+uint8_t g_led_control_registers[DRIVER_COUNT][18] = {{0}};
bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
// This is the bit pattern in the LED control registers
diff --git a/drivers/issi/is31fl3741.c b/drivers/issi/is31fl3741.c
new file mode 100644
index 00000000000..fc5c58835d5
--- /dev/null
+++ b/drivers/issi/is31fl3741.c
@@ -0,0 +1,290 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ *
+ * 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 .
+ */
+
+#include "wait.h"
+
+#include "is31fl3741.h"
+#include
+#include "i2c_master.h"
+#include "progmem.h"
+
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+// The address will vary depending on your wiring:
+// 00 <-> GND
+// 01 <-> SCL
+// 10 <-> SDA
+// 11 <-> VCC
+// ADDR1 represents A1:A0 of the 7-bit address.
+// ADDR2 represents A3:A2 of the 7-bit address.
+// The result is: 0b101(ADDR2)(ADDR1)
+#define ISSI_ADDR_DEFAULT 0x60
+
+#define ISSI_COMMANDREGISTER 0xFD
+#define ISSI_COMMANDREGISTER_WRITELOCK 0xFE
+#define ISSI_INTERRUPTMASKREGISTER 0xF0
+#define ISSI_INTERRUPTSTATUSREGISTER 0xF1
+#define ISSI_IDREGISTER 0xFC
+
+#define ISSI_PAGE_PWM0 0x00 // PG0
+#define ISSI_PAGE_PWM1 0x01 // PG1
+#define ISSI_PAGE_SCALING_0 0x02 // PG2
+#define ISSI_PAGE_SCALING_1 0x03 // PG3
+#define ISSI_PAGE_FUNCTION 0x04 // PG4
+
+#define ISSI_REG_CONFIGURATION 0x00 // PG4
+#define ISSI_REG_GLOBALCURRENT 0x01 // PG4
+#define ISSI_REG_PULLDOWNUP 0x02 // PG4
+#define ISSI_REG_RESET 0x3F // PG4
+
+#ifndef ISSI_TIMEOUT
+# define ISSI_TIMEOUT 100
+#endif
+
+#ifndef ISSI_PERSISTENCE
+# define ISSI_PERSISTENCE 0
+#endif
+
+#define ISSI_MAX_LEDS 351
+
+// Transfer buffer for TWITransmitData()
+uint8_t g_twi_transfer_buffer[20] = {0xFF};
+
+// These buffers match the IS31FL3741 and IS31FL3741A PWM registers.
+// The scaling buffers match the PG2 and PG3 LED On/Off registers.
+// Storing them like this is optimal for I2C transfers to the registers.
+// We could optimize this and take out the unused registers from these
+// buffers and the transfers in IS31FL3741_write_pwm_buffer() but it's
+// probably not worth the extra complexity.
+uint8_t g_pwm_buffer[DRIVER_COUNT][ISSI_MAX_LEDS];
+bool g_pwm_buffer_update_required = false;
+bool g_scaling_registers_update_required[DRIVER_COUNT] = {false};
+
+uint8_t g_scaling_registers[DRIVER_COUNT][ISSI_MAX_LEDS];
+
+uint32_t IS31FL3741_get_cw_sw_position(uint8_t cs, uint8_t sw) {
+ uint32_t pos = 0;
+
+ if (cs < 31) {
+ if (sw < 7) {
+ pos = (sw - 1) * 30 + (cs - 1);
+
+ } else {
+ pos = 0xB4 + (sw - 7) * 30 + (cs - 1);
+ }
+ } else {
+ pos = 0xB4 + 0x5A + (sw - 1) * 9 + (cs - 31);
+ }
+
+ return pos;
+}
+
+void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
+ g_twi_transfer_buffer[0] = reg;
+ g_twi_transfer_buffer[1] = data;
+
+#if ISSI_PERSISTENCE > 0
+ for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
+ }
+#else
+ i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
+#endif
+}
+
+bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
+ // unlock the command register and select PG2
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM0);
+
+ for (int i = 0; i < 342; i += 18) {
+ g_twi_transfer_buffer[0] = i % 180;
+
+ if (i == 180) {
+ // unlock the command register and select PG2
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM1);
+ }
+
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer + i, 18);
+
+#if ISSI_PERSISTENCE > 0
+ for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 19, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+ }
+
+ // transfer the left cause the total number is 351
+ g_twi_transfer_buffer[0] = 162;
+ memcpy(g_twi_transfer_buffer + 1, pwm_buffer + 342, 9);
+
+#if ISSI_PERSISTENCE > 0
+ for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+ }
+#else
+ if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 10, ISSI_TIMEOUT) != 0) {
+ return false;
+ }
+#endif
+
+ return true;
+}
+
+void IS31FL3741_init(uint8_t addr) {
+ // In order to avoid the LEDs being driven with garbage data
+ // in the LED driver's PWM registers, shutdown is enabled last.
+ // Set up the mode and other settings, clear the PWM registers,
+ // then disable software shutdown.
+ // Unlock the command register.
+
+ // Unlock the command register.
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+
+ // Select PG4
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_FUNCTION);
+
+ // Set to Normal operation
+ IS31FL3741_write_register(addr, ISSI_REG_CONFIGURATION, 0x01);
+
+ // Set Golbal Current Control Register
+ IS31FL3741_write_register(addr, ISSI_REG_GLOBALCURRENT, 0xFF);
+ // Set Pull up & Down for SWx CSy
+ IS31FL3741_write_register(addr, ISSI_REG_PULLDOWNUP, 0x77);
+
+ // IS31FL3741_update_led_scaling_registers(addr, 0xFF, 0xFF, 0xFF);
+
+ // Wait 10ms to ensure the device has woken up.
+ wait_ms(10);
+}
+
+void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue) {
+ if (index >= 0 && index < DRIVER_LED_TOTAL) {
+ is31_led led = g_is31_leds[index];
+ uint32_t rp = 0, gp = 0, bp = 0;
+
+ rp = IS31FL3741_get_cw_sw_position(led.rcs, led.rsw);
+ gp = IS31FL3741_get_cw_sw_position(led.gcs, led.gsw);
+ bp = IS31FL3741_get_cw_sw_position(led.bcs, led.bsw);
+
+ g_pwm_buffer[led.driver][rp] = red;
+ g_pwm_buffer[led.driver][gp] = green;
+ g_pwm_buffer[led.driver][bp] = blue;
+ g_pwm_buffer_update_required = true;
+ }
+}
+
+void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
+ for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
+ IS31FL3741_set_color(i, red, green, blue);
+ }
+}
+
+void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue) {
+ is31_led led = g_is31_leds[index];
+
+ uint32_t scaling_register_r = IS31FL3741_get_cw_sw_position(led.rcs, led.rsw);
+ uint32_t scaling_register_g = IS31FL3741_get_cw_sw_position(led.gcs, led.gsw);
+ uint32_t scaling_register_b = IS31FL3741_get_cw_sw_position(led.bcs, led.bsw);
+
+ if (red) {
+ g_scaling_registers[led.driver][scaling_register_r] = 0xFF;
+ } else {
+ g_scaling_registers[led.driver][scaling_register_r] = 0x00;
+ }
+
+ if (green) {
+ g_scaling_registers[led.driver][scaling_register_g] = 0xFF;
+ } else {
+ g_scaling_registers[led.driver][scaling_register_g] = 0x00;
+ }
+
+ if (blue) {
+ g_scaling_registers[led.driver][scaling_register_b] = 0xFF;
+ } else {
+ g_scaling_registers[led.driver][scaling_register_b] = 0x00;
+ }
+
+ g_scaling_registers_update_required[led.driver] = true;
+}
+
+void IS31FL3741_update_pwm_buffers(uint8_t addr1, uint8_t addr2) {
+ if (g_pwm_buffer_update_required) {
+ IS31FL3741_write_pwm_buffer(addr1, g_pwm_buffer[0]);
+ }
+
+ g_pwm_buffer_update_required = false;
+}
+
+void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
+ uint32_t rp = 0, gp = 0, bp = 0;
+
+ rp = IS31FL3741_get_cw_sw_position(pled->rcs, pled->rsw);
+ gp = IS31FL3741_get_cw_sw_position(pled->gcs, pled->gsw);
+ bp = IS31FL3741_get_cw_sw_position(pled->bcs, pled->bsw);
+
+ g_pwm_buffer[pled->driver][rp] = red;
+ g_pwm_buffer[pled->driver][gp] = green;
+ g_pwm_buffer[pled->driver][bp] = blue;
+
+ g_pwm_buffer_update_required = true;
+}
+
+void IS31FL3741_update_led_control_registers(uint8_t addr, uint8_t index) {
+ if (g_scaling_registers_update_required[index]) {
+ // unlock the command register and select PG2
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_0);
+
+ for (int i = 0; i < 180; ++i) {
+ IS31FL3741_write_register(addr, i, g_scaling_registers[0][i]);
+ }
+
+ // unlock the command register and select PG3
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
+ IS31FL3741_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_SCALING_1);
+
+ for (int i = 0; i < 171; ++i) {
+ IS31FL3741_write_register(addr, i, g_scaling_registers[0][180 + i]);
+ }
+
+ g_scaling_registers_update_required[index] = false;
+ }
+}
+
+void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue) {
+ uint32_t rp = 0, gp = 0, bp = 0;
+
+ rp = IS31FL3741_get_cw_sw_position(pled->rcs, pled->rsw);
+ gp = IS31FL3741_get_cw_sw_position(pled->gcs, pled->gsw);
+ bp = IS31FL3741_get_cw_sw_position(pled->bcs, pled->bsw);
+
+ g_scaling_registers[pled->driver][rp] = red;
+ g_scaling_registers[pled->driver][gp] = green;
+ g_scaling_registers[pled->driver][bp] = blue;
+}
diff --git a/drivers/issi/is31fl3741.h b/drivers/issi/is31fl3741.h
new file mode 100644
index 00000000000..3fa853467be
--- /dev/null
+++ b/drivers/issi/is31fl3741.h
@@ -0,0 +1,55 @@
+/* Copyright 2017 Jason Williams
+ * Copyright 2018 Jack Humbert
+ * Copyright 2018 Yiancar
+ * Copyright 2020 MelGeek
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include
+#include
+
+typedef struct is31_led {
+ uint8_t driver : 2;
+ uint8_t rcs;
+ uint8_t rsw;
+ uint8_t gcs;
+ uint8_t gsw;
+ uint8_t bcs;
+ uint8_t bsw;
+} __attribute__((packed)) is31_led;
+
+extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
+extern const is31_led g_is31_indicator_leds[DRIVER_INDICATOR_LED_TOTAL];
+
+void IS31FL3741_init(uint8_t addr);
+void IS31FL3741_write_register(uint8_t addr, uint8_t reg, uint8_t data);
+bool IS31FL3741_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
+
+void IS31FL3741_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
+void IS31FL3741_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
+
+void IS31FL3741_set_led_control_register(uint8_t index, bool red, bool green, bool blue);
+
+// This should not be called from an interrupt
+// (eg. from a timer interrupt).
+// Call this while idle (in between matrix scans).
+// If the buffer is dirty, it will update the driver with the buffer.
+void IS31FL3741_update_pwm_buffers(uint8_t addr1, uint8_t addr2);
+void IS31FL3741_update_led_control_registers(uint8_t addr1, uint8_t addr2);
+void IS31FL3741_set_scaling_registers(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
+
+void IS31FL3741_set_pwm_buffer(const is31_led *pled, uint8_t red, uint8_t green, uint8_t blue);
diff --git a/drivers/ws2812.h b/drivers/ws2812.h
new file mode 100644
index 00000000000..f179fcb0ef5
--- /dev/null
+++ b/drivers/ws2812.h
@@ -0,0 +1,40 @@
+/*
+ * 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 .
+ */
+
+#pragma once
+
+#include "quantum/color.h"
+
+/*
+ * Older WS2812s can handle a reset time (TRST) of 50us, but recent
+ * component revisions require a minimum of 280us.
+ */
+
+#if !defined(WS2812_TRST_US)
+# define WS2812_TRST_US 280
+#endif
+
+/* User Interface
+ *
+ * Input:
+ * ledarray: An array of GRB data describing the LED colors
+ * number_of_leds: The number of LEDs to write
+ *
+ * The functions will perform the following actions:
+ * - Set the data-out pin as output
+ * - Send out the LED data
+ * - Wait 50us to reset the LEDs
+ */
+void ws2812_setleds(LED_TYPE *ledarray, uint16_t number_of_leds);
diff --git a/keyboards/1upkeyboards/1up60hse/rules.mk b/keyboards/1upkeyboards/1up60hse/rules.mk
index bce414e25a5..2ba1f9ef506 100644
--- a/keyboards/1upkeyboards/1up60hse/rules.mk
+++ b/keyboards/1upkeyboards/1up60hse/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
@@ -22,8 +22,8 @@ COMMAND_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality on B7 by default
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/1upkeyboards/1up60rgb/1up60rgb.h b/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
index 0f6818a6d86..9e866bb50f6 100644
--- a/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
+++ b/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
@@ -2,77 +2,78 @@
#include "quantum.h"
-#define LAYOUT_all( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413, K414 } \
-}
+#define XXX KC_NO
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+ k20, 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, k3D, k3E, \
+ k40, k41, k43, k46, k4A, k4B, k4D, k4E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
+ { k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
+ { k20, XXX, 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, XXX, k3D, k3E }, \
+ { k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
+}
/* ANSI variant. No extra keys for ISO */
#define LAYOUT_60_ansi( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
-) LAYOUT_all( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K013,\
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K214, \
- K300, KC_NO,K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, KC_NO,\
- K400, K401, K403, K406, K410, K411, K413, K414 \
-)
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, \
+ k40, k41, k43, k46, k4A, k4B, k4D, k4E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, XXX }, \
+ { k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
+ { k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, XXX, k2E }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, XXX }, \
+ { k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
+}
/* ISO variant. Remove useless ANSI keys */
#define LAYOUT_60_iso( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
-) LAYOUT_all( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K013,\
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K214, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, KC_NO,\
- K400, K401, K403, K406, K410, K411, K413, K414 \
-)
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \
+ k20, 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, k3D, \
+ k40, k41, k43, k46, k4A, k4B, k4D, k4E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, XXX }, \
+ { k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, XXX }, \
+ { k20, XXX, 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, XXX, k3D, XXX }, \
+ { k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
+}
/* HHKB Variant */
#define LAYOUT_60_ansi_split_bs_rshift( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
-) LAYOUT_all( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014,\
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K214, \
- K300, KC_NO,K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314,\
- K400, K401, K403, K406, K410, K411, K413, K414 \
-)
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, \
+ k40, k41, k43, k46, k4A, k4B, k4D, k4E \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
+ { k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
+ { k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, XXX, k2E }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
+ { k40, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, k4A, k4B, XXX, k4D, k4E } \
+}
/* HHKB Variant */
#define LAYOUT_60_hhkb( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K401, K403, K406, K411, K413 \
-) LAYOUT_all( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K214, \
- K300, KC_NO,K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- KC_NO,K401, K403, K406, KC_NO,K411, K413, KC_NO \
-)
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2E, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, k3E, \
+ k41, k43, k46, k4B, k4D \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E }, \
+ { k10, XXX, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E }, \
+ { k20, XXX, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, XXX, k2E }, \
+ { k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
+ { XXX, k41, XXX, k43, XXX, XXX, k46, XXX, XXX, XXX, XXX, k4B, XXX, k4D, XXX } \
+}
diff --git a/keyboards/1upkeyboards/1up60rgb/rules.mk b/keyboards/1upkeyboards/1up60rgb/rules.mk
index 24f737398e7..ea5308b9605 100644
--- a/keyboards/1upkeyboards/1up60rgb/rules.mk
+++ b/keyboards/1upkeyboards/1up60rgb/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+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
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/ahk_companion.ahk b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/ahk_companion.ahk
new file mode 100644
index 00000000000..becab49e5cc
--- /dev/null
+++ b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/ahk_companion.ahk
@@ -0,0 +1,104 @@
+#Persistent
+#SingleInstance force
+
+;=================================================================
+; Macro Pad Shortcuts ;
+;=================================================================
+
+;=================================================================
+; Layer 0
+;;=================================================================
+;Row 1
+
+F13::Send a
+F14::Send b
+F15::Send c
+F16::Send d
+
+;Row 2
+
+F17::Send e
+F18::Send f
+F19::Send g
+F20::Send h
+
+;Row 3
+
+F21::Send i
+F22::Send j
+F23::Send k
+F24::Send l
+
+
+;=================================================================
+; Layer 1
+;;=================================================================
+;Row 1
+
+!F13::Send m
+!F14::Send n
+!F15::Send o
+!F16::Send p
+
+;Row 2
+
+!F17::Send q
+!F18::Send r
+!F19::Send s
+!F20::Send t
+
+;Row 3
+
+!F21::Send u
+!F22::Send v
+!F23::Send w
+!F24::Send x
+
+
+;=================================================================
+; Layer 2
+;;=================================================================
+;Row 1
+
++F13::Send y
++F14::Send z
++F15::Send A
++F16::Send B
+
+;Row 2
+
++F17::Send C
++F18::Send D
++F19::Send E
++F20::Send F
+
+;Row 3
+
++F21::Send G
++F22::Send H
++F23::Send I
++F24::Send J
+
+;=================================================================
+; Layer 3
+;;=================================================================
+;Row 1
+
+^F13::Send K
+^F14::Send L
+^F15::Send M
+^F16::Send N
+
+;Row 2
+
+^F17::Send O
+^F18::Send P
+^F19::Send Q
+^F20::Send R
+
+;Row 3
+
+^F21::Send S
+^F22::Send T
+^F23::Send U
+^F24::Send V
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/config.h b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/config.h
new file mode 100644
index 00000000000..3b7fd81d698
--- /dev/null
+++ b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/config.h
@@ -0,0 +1,19 @@
+#pragma once
+
+// Time out one shot layers after 3 seconds
+#define ONESHOT_TIMEOUT 3000
+
+#define RGBLED_NUM 16
+
+// Undef and redefine default brightness to half of 255
+#undef RGBLIGHT_LIMIT_VAL
+#define RGBLIGHT_LIMIT_VAL 128
+
+//Define a preview timeout for RGB reviews
+#define PREVIEW_TIMEOUT 5000
+#define TAPPING_TERM 200
+
+// Enable Light Layers implementation
+#define RGBLIGHT_LAYERS
+// Allow Light Layers to override RGB off configuration
+#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/keymap.c b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/keymap.c
new file mode 100644
index 00000000000..e62f3b60951
--- /dev/null
+++ b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/keymap.c
@@ -0,0 +1,136 @@
+#include QMK_KEYBOARD_H
+
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
+static uint32_t rgb_preview_timer = 0;
+#endif
+extern rgblight_config_t rgblight_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ //Layer 0 - Base Layer (F13 to F24, and One Shot Layer 1,2,3 or Toggle Layer 4)
+ [0] = LAYOUT_ortho_4x4(
+ KC_F13, KC_F14, KC_F15, KC_F16,
+ KC_F17, KC_F18, KC_F19, KC_F20,
+ KC_F21, KC_F22, KC_F23, KC_F24,
+ OSL(1), OSL(2), OSL(3), TG(4) //Transparent to let you go between layers
+ ),
+
+ [1] = LAYOUT_ortho_4x4(
+ LALT(KC_F13), LALT(KC_F14), LALT(KC_F15), LALT(KC_F16),
+ LALT(KC_F17), LALT(KC_F18), LALT(KC_F19), LALT(KC_F20),
+ LALT(KC_F21), LALT(KC_F22), LALT(KC_F23), LALT(KC_F24),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 2 - Shift + Function Key Layer
+ [2] = LAYOUT_ortho_4x4(
+ LSFT(KC_F13), LSFT(KC_F14), LSFT(KC_F15), LSFT(KC_F16),
+ LSFT(KC_F17), LSFT(KC_F18), LSFT(KC_F19), LSFT(KC_F20),
+ LSFT(KC_F21), LSFT(KC_F22), LSFT(KC_F23), LSFT(KC_F24),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 3 - Control + Function Key
+ [3] = LAYOUT_ortho_4x4(
+ LCTL(KC_F13), LCTL(KC_F14), LCTL(KC_F15), LCTL(KC_F16),
+ LCTL(KC_F17), LCTL(KC_F18), LCTL(KC_F19), LCTL(KC_F20),
+ LCTL(KC_F21), LCTL(KC_F22), LCTL(KC_F23), LCTL(KC_F24),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 4 - Multimedia
+ [4] = LAYOUT_ortho_4x4(
+ KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLU,
+ KC_NO, KC_NO, KC_NO, KC_MUTE,
+ KC_NO, RESET, EEP_RST, KC_VOLD,
+ TG(5), KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+
+ //Layer 5 - Keyboard Lights, Programming and Special Functions
+ [5] = LAYOUT_ortho_4x4(
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD,
+ RGB_TOG, EEP_RST, RESET, KC_LSHIFT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS //Transparent to let you go between layers
+ ),
+};
+
+const rgblight_segment_t PROGMEM my_layer0_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_ORANGE}
+ );
+const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_GREEN}
+ );
+const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_RED}
+ );
+const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_BLUE}
+ );
+const rgblight_segment_t PROGMEM my_layer4_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_WHITE}
+ );
+const rgblight_segment_t PROGMEM my_layer5_layer[] = RGBLIGHT_LAYER_SEGMENTS(
+ {0,16,HSV_TEAL}
+ );
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(
+ my_layer0_layer,
+ my_layer1_layer,
+ my_layer2_layer,
+ my_layer3_layer,
+ my_layer4_layer,
+ my_layer5_layer
+ );
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // Allow for a preview of changes when modifying RGB
+# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
+ switch (keycode) {
+ case RGB_TOG ... VLK_TOG:
+ for (uint8_t i = 0; i < RGBLIGHT_MAX_LAYERS; i++) {
+ rgblight_set_layer_state(i, false);
+ }
+ rgb_preview_timer = timer_read32();
+ break;
+ }
+# endif
+ return;
+}
+
+//Set the appropriate layer color
+layer_state_t layer_state_set_user(layer_state_t state) {
+ 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));
+ rgblight_set_layer_state(4, layer_state_cmp(state, 4));
+ rgblight_set_layer_state(5, layer_state_cmp(state, 5));
+ return state;
+}
+
+void keyboard_post_init_user(void) {
+ //Enable the LED layers
+ rgblight_layers = my_rgb_layers;
+ layer_state_set_user(layer_state);
+}
+
+void matrix_scan_user(void) {
+# if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_LAYERS)
+ // Allow preview for
+ if (rgb_preview_timer && TIMER_DIFF_32(timer_read32(), rgb_preview_timer) > PREVIEW_TIMEOUT) {
+ rgb_preview_timer = 0;
+ default_layer_state_set_user(default_layer_state);
+ layer_state_set_user(layer_state);
+ led_update_user((led_t) host_keyboard_leds());
+ }
+# endif
+}
+
+//EEPROM Reset Function
+void eeconfig_init_user(void) {
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv_orange(); // Set it to orange by default
+}
+
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/readme.md b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/readme.md
new file mode 100644
index 00000000000..7a0107c994c
--- /dev/null
+++ b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/readme.md
@@ -0,0 +1,58 @@
+## AutoHotKey Companion ##
+
+### Overview ###
+AutoHotKey Companion Keymap for 1upkeyboards Super16 is designed be a quick and easy way to get started with AutoHotKey and to provide a foundation for customizing your own macropad. I chose the Super16 because it provided an easy way (RGB) to identify what layer I was on with a quick glance or peripheral vision. The F13 to F24 keys were selected as they are rarely used so you won't run into conflicts with existing application shortcuts and AutoHotKey recognizes them without any issues.
+
+Same functionality can be accomplished with other similar applications on the host system like Keyboard Maestro, AutoIt, etc.
+
+* AutoHotKey(Windows)
+* AutoIT (Windows)
+* Keyboard Maestro(Mac)
+* AutoKey(Linux)
+
+This keymap allows for a total of 48 Function/Macro keys that are accessible within 2 sequential key presses (or more when extended with your own code and additional layers)
+
+### Alternate Implementations ###
+I chose to use QMK OSL (One Shot Layer) functionality to avoid having to hold a key while selecting the next key and to have my layers always go back to the default layer as the starting point. This also helps me avoid having to cognitively remember what layer I am on.
+
+If persistent behavior is prefered, OSL can be swapped for TG which will toggle the layer on/off with a key press instead of clearing the layer once the Function key is pressed. This is useful if a layer contains several keys that need to be used in sequence. I also added a OSL timeout of 3 seconds, so that if the key is not pressed within 3 seconds the layer will go back to default. This can be adjusted in the config.h file by increasing 3000 to a desired value: `#define ONESHOT_TIMEOUT 3000`
+
+
+
+
+### Layers ###
+
+While the first 5 layers are accessible with only 1 key press at most, the 5th (less frequently used) layer is accessed by first going to the 4th layer, which makes the TG(5) button available on the bottom left. Space for additional 2 more layer toggles is available on the 2 middle buttons on the bottom row. Please refer to the layer diagrams.
+
+
+* Layer 0 (Base Layer) - the default layer and functions like sending the F13 to F24 keys along with the bottom row to activate another 4 layers.
+
+ 
+
+* Layer 1 (Alt Layer) - Equivalent to Alt+Fxx key being pressed
+
+ 
+
+* Layer 2 (Shift Layer) - Equivalent to Shift+Fxx key being pressed
+
+ 
+
+* Layer 3 (Control Layer) - Equivalent to Ctrl+Fxx key being pressed
+
+ 
+
+* Layer 4 (Config Layer) - Layer for multimedia. You can replace the KC_TRNS on this layer in keymap.c to TG(x) to enable additional layers.
+
+ 
+
+* Layer 5 (RGB Control/QMK) - RGB control layer and Quantum functions (Reset, EEPROM Reset, )
+
+ 
+
+### Host Configuration ###
+
+Once the keymap has been flashed to the Super16, you can download the accompanying AutoHotKey file or create your own and have it start automatically either via a Windows Task or another way. Using AutoHotKey allows adjustment of functionality of the buttons without the need to change your map and reflash the macropad every time.
+Starting the AHK file can be done either by:
+* Creating a Windows Task
+* Adding the AHK to the startup folder
+* Launch manually
diff --git a/keyboards/1upkeyboards/super16/keymaps/ahk_companion/rules.mk b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/rules.mk
new file mode 100644
index 00000000000..b5bd51b3270
--- /dev/null
+++ b/keyboards/1upkeyboards/super16/keymaps/ahk_companion/rules.mk
@@ -0,0 +1,2 @@
+RGB_MATRIX_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/2_milk/config.h b/keyboards/2_milk/config.h
deleted file mode 100644
index e9a104117b1..00000000000
--- a/keyboards/2_milk/config.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2019 Spaceman
- *
- * 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 .
- */
-#pragma once
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xB195
-#define DEVICE_VER 0x0001
-#define MANUFACTURER rionlion100
-#define PRODUCT 2% Milk
-#define DESCRIPTION A milk themed 2% Keyboard
-
-/* key matrix size */
-#define MATRIX_ROWS 2
-#define MATRIX_COLS 1
-
-/* Milk default pinout */
-#define DIRECT_PINS { \
- {D4}, \
- {C6} \
-}
-#define UNUSED_PINS
-
-#ifdef RGBLIGHT_ENABLE
-#define RGB_DI_PIN B6
-#define RGBLED_NUM 1
-#endif
diff --git a/keyboards/2_milk/info.json b/keyboards/2_milk/info.json
deleted file mode 100644
index 6dc4eeaf8bf..00000000000
--- a/keyboards/2_milk/info.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "keyboard_name": "2% Milk",
- "keyboard_folder": "2_milk",
- "url": "",
- "maintainer": "rionlion100 (Spaceman)",
- "width": 1,
- "height": 2,
- "layouts": {
- "LAYOUT": {
- "key_count": 2,
- "layout": [ {"x": 0, "y": 0 }, {"x": 0, "y": 1 }]
- }
- }
-}
diff --git a/keyboards/2_milk/readme.md b/keyboards/2_milk/readme.md
deleted file mode 100644
index f3a85458ced..00000000000
--- a/keyboards/2_milk/readme.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# 2% Milk
-
-
-
-A 2% Meme board themed around a milk carton
-
-Keyboard Maintainer: Spaceman AKA:[Rionlion100](https://github.com/rionlion100)
-Hardware Availability: [Open Source](https://github.com/Rionlion100/Spaceboards/tree/master/Keyboards/2%25%20Milk)
-
-Make example for this keyboard (after setting up your build environment):
-
- make 2_milk: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).
-
-### Credits
-+ Case design by Soft
-+ PCB by PyroL
-+ Name by jetpacktuxedo
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/config.h b/keyboards/40percentclub/gherkin/keymaps/pierrec83/config.h
new file mode 100644
index 00000000000..a635e944c17
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/pierrec83/config.h
@@ -0,0 +1,31 @@
+#pragma once
+
+/* Make layout the right way:
+ * - USB port on left side
+ * - Switches facing the correct way
+ */
+#undef MATRIX_ROW_PINS
+#undef MATRIX_COL_PINS
+#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+#define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 }
+
+// Set the mouse settings to a comfortable speed/accuracy trade-off
+// Assume the screen refresh rate is 60 Htz or higher
+// The default is 50. This makes the mouse ~3 times faster and more accurate
+#define MOUSEKEY_INTERVAL 16
+// The default is 20. Since we made the mouse about 3 times faster with the previous setting,
+// give it more time to accelerate to max speed to retain precise control over short distances.
+#define MOUSEKEY_TIME_TO_MAX 40
+// The default is 300. Let's try and make this as low as possible while keeping the cursor responsive
+#define MOUSEKEY_DELAY 100
+// It makes sense to use the same delay for the mouseweel
+#define MOUSEKEY_WHEEL_DELAY 100
+// The default is 100
+#define MOUSEKEY_WHEEL_INTERVAL 50
+// The default is 40
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 100
+
+#define TAPPING_TERM 200
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_FORCE_HOLD
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json b/keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json
new file mode 100644
index 00000000000..073eb568f04
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json
@@ -0,0 +1 @@
+{"version":1,"notes":"My awesome keymap","documentation":"\"This file is a QMK Configurator export. You can import this at . It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: \n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n","keyboard":"40percentclub/gherkin","keymap":"pierrec83","layout":"LAYOUT_ortho_3x10","layers":[["KC_Q","KC_D","KC_R","KC_W","KC_B","KC_J","KC_F","KC_U","KC_P","KC_BSPC","LSFT_T(KC_A)","LT(5,KC_S)","LT(1,KC_H)","LT(3,KC_T)","KC_G","KC_Y","LT(4,KC_N)","LT(2,KC_E)","LT(6,KC_O)","LSFT_T(KC_I)","KC_Z","KC_X","KC_M","KC_C","KC_V","LT(7,KC_SPC)","KC_L","LALT_T(KC_COMM)","LCTL_T(KC_DOT)","KC_K"],["KC_TRNS","ANY(LCTL(LSFT(KC_C)))","KC_PGUP","ANY(LCTL(LSFT(KC_V)))","KC_TRNS","KC_TRNS","KC_BTN1","KC_WH_U","KC_BTN2","KC_TRNS","KC_TRNS","KC_BTN2","KC_NO","KC_BTN1","KC_TRNS","KC_TRNS","KC_MS_L","KC_MS_D","KC_MS_U","KC_MS_R","KC_TRNS","KC_TRNS","KC_PGDN","KC_TRNS","KC_TRNS","KC_TRNS","KC_MPRV","KC_WH_D","KC_MNXT","TG(1)"],["KC_TRNS","KC_TRNS","KC_PGUP","KC_TRNS","KC_TRNS","BL_BRTG","BL_INC","KC_WH_U","KC_TRNS","KC_TRNS","KC_LEFT","KC_UP","KC_DOWN","KC_RGHT","KC_TRNS","BL_TOGG","KC_LGUI","KC_NO","LCTL(KC_LALT)","LCA(KC_LSFT)","KC_TRNS","KC_HOME","KC_PGDN","KC_END","KC_TRNS","BL_STEP","BL_DEC","KC_WH_D","KC_TRNS","KC_TRNS"],["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_UNDS","KC_PIPE","KC_QUOT","KC_TRNS","KC_CIRC","KC_ASTR","KC_AMPR","KC_NO","KC_TRNS","KC_HASH","KC_TILD","KC_SLSH","KC_DQUO","KC_DLR","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_MINS","KC_BSLS","KC_GRV","KC_TRNS"],["KC_TRNS","KC_COLN","KC_LT","KC_GT","KC_SCLN","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_LCBR","KC_RCBR","KC_LPRN","KC_RPRN","KC_AT","KC_TRNS","KC_NO","KC_EQL","KC_PLUS","KC_PERC","KC_TRNS","KC_EXLM","KC_LBRC","KC_RBRC","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_F7","KC_F8","KC_F9","KC_F10","KC_LCTL","KC_NO","KC_LALT","LCTL(KC_LALT)","KC_TRNS","KC_TRNS","KC_F4","KC_F5","KC_F6","KC_F11","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_F1","KC_F2","KC_F3","KC_F12"],["KC_PSLS","KC_7","KC_8","KC_9","KC_PPLS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_0","KC_4","KC_5","KC_6","KC_PMNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_NO","KC_TRNS","KC_PAST","KC_1","KC_2","KC_3","KC_PEQL","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS"],["LT(8,KC_TRNS)","KC_ESC","KC_COLN","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_DEL","KC_TRNS","KC_PERC","KC_SLSH","KC_ENT","KC_EXLM","KC_TRNS","KC_LGUI","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TRNS","KC_TAB","KC_TRNS","KC_TRNS","RALT(KC_TRNS)","RCTL(KC_TRNS)","TG(1)"],["KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","EEP_RST","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","RESET","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO","KC_NO"]],"author":"Anonymous"}
\ No newline at end of file
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/readme.md b/keyboards/40percentclub/gherkin/keymaps/pierrec83/readme.md
new file mode 100644
index 00000000000..0ade64b3463
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/pierrec83/readme.md
@@ -0,0 +1,38 @@
+@pierrec83's keymap for the gherkin
+===
+
+A usable keymap for the gherkin's 30 keys layout, somewhat in sync with my Kyria keymap.
+
+This keymap is more or less an adaptation of my Kyria keymap which sacrifices some convenience but retains most functionality.
+
+Features
+---
+* Mouse keys with constants tuned so the keyboard usable for me as my sole pointing device
+* Homerow layers activation
+* Minimal side-index motion thanks to workman base layer and similar principles in other layers
+* Two symbol layers, both activated with one homerow key and either another key on the same hand's homerow or a key from the other hand
+* Mousing around, including left and right clicking can be done either one-handed or fully on the homerow with both hands
+* Easy chaining of common command line or vim patterns, such as `~/`, `()`, `ESC : w ENTER` etc.
+* Common OS shortcuts like switching workspaces on gnome or MacOS easily accessible (for the shortcuts I use. This may not apply to others)
+
+Instructions to update the keymap
+---
+
+For now, I am still more comfortable updating the keymap through the qmk configurator as I don't trust myself to manually keep comments describing the keymap in sync with the code itself. This means that my keymap.c is generated and not really readable. For a readble view of my keymap, one must import keymap.json into [qmk configurator](https://config.qmk.fm) and use the web UI or print it.
+
+To update the keymap,
+* Load keymap.json into qmk configurator
+* Perform any edits
+* Export the keymap. This should save a json file in `~/Downloads/pierrec83.json` or equivalent for your OS
+* From the root of qmk_firmware, move the keymap to its destination:
+```
+mv ~/Downloads/pierrec83.json keyboards/40percentclub/gherkin/keymaps/pierrec83/keymap.json
+```
+* Flash the firmware (for instance, if left hand is plugged):
+```
+qmk flash -kb 40percentclub/gherkin -km pierrec83
+```
+
+Author
+---
+I am @pierrec83 on Twitter, @pierrechevalier83 on github. I chose the shorter nickname for my keymap.
diff --git a/keyboards/40percentclub/gherkin/keymaps/pierrec83/rules.mk b/keyboards/40percentclub/gherkin/keymaps/pierrec83/rules.mk
new file mode 100644
index 00000000000..bd518d8f273
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/pierrec83/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c b/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c
index 188c1cd5d84..72df0675bec 100644
--- a/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c
+++ b/keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c
@@ -16,7 +16,8 @@
/*
- * see jj40/stevexyz for more information
+ * The 25% SuperMicro keyboard: a pure - full features - "Alpha 26" keymap on Gherkin, compatible also with 28 and 30 keys layouts
+ * See https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md for more information
*/
@@ -56,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | Q | W | E | R | T | Y | U | I | O | P |
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
+ * | ____ | ____ | ____ | ____ | ____ | FnNav|NumSym| Alt | Ctrl | Shift|
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | A | S | D | F | G | H | J | K | L | Enter|
@@ -68,83 +69,73 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* '-------------------------------------------------------'
*/
[LAYER_HOME] = LAYOUT_ortho_3x10(
- LT(LAYER_ARROWPAD, KC_Q), LT(LAYER_NUMPAD, KC_W), LT(LAYER_MEDIAPAD, KC_E), KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- MT(MOD_LSFT, KC_A), LT(LAYER_FUNC, KC_S), LT(LAYER_NUMSYM, KC_D), MT(MOD_RALT, KC_F), MT(MOD_LGUI, KC_G), MT(MOD_RGUI, KC_H), MT(MOD_RALT, KC_J), LT(LAYER_FUNC, KC_K), LT(LAYER_NUMSYM, KC_L), MT(MOD_RSFT, KC_ENT),
- XXXXXXX, MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(LAYER_FUNC, KC_C), LT(LAYER_NUMSYM, KC_V), MT(MOD_LSFT, KC_B), MT(MOD_LALT, KC_N), MT(MOD_RCTL, KC_M), MT(MOD_RSFT, KC_SPC), XXXXXXX ),
+ LT(LAYER_ARROWPAD, KC_Q), LT(LAYER_NUMPAD, KC_W), LT(LAYER_MEDIAPAD, KC_E), KC_R, KC_T, LT(LAYER_FUNC, KC_Y), LT(LAYER_NUMSYM, KC_U), MT(MOD_LALT, KC_I), MT(MOD_RCTL, KC_O), MT(MOD_RSFT, KC_P),
+ MT(MOD_LSFT, KC_A), LT(LAYER_FUNC, KC_S), LT(LAYER_NUMSYM, KC_D), MT(MOD_RALT, KC_F), MT(MOD_LGUI, KC_G), MT(MOD_RGUI, KC_H), MT(MOD_RALT, KC_J), LT(LAYER_FUNC, KC_K), LT(LAYER_NUMSYM, KC_L), MT(MOD_RSFT, KC_ENT),
+ KC_DOWN, MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(LAYER_FUNC, KC_C), LT(LAYER_NUMSYM, KC_V), MT(MOD_LSFT, KC_B), MT(MOD_LALT, KC_N), MT(MOD_RCTL, KC_M), MT(MOD_RSFT, KC_SPC), KC_BSPC
+ ),
/* Function and Navigation Layer
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
+ * | ____ | ____ | ____ | ____ | ____ | ____ |SysLay| Alt | Ctrl | Shift|
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
- * | ESC | Home | PgDn | PgUp | End | Left | Down | Up | Right| Baksp|
+ * | ESC | Home | PgDn | PgUp | End | Left | Down | Up | Right|Backsp|
* | Shift| ____ |SysLay| AltGr| OSkey| OSkey| AltGr| ____ |SysLay| Shift|
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
- * | ____ | ____ | | ____ | ____ | ____ | ____ | ____ |
+ * | F11 | F12 | | Space|PrnScr|ScrLck|Pause |Backsp|
* | Ctrl | Alt | ____ |SysLay| Shift| Alt | Ctrl | Shift|
* '-------------------------------------------------------'
*/
[LAYER_FUNC] = LAYOUT_ortho_3x10(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
- MT(MOD_LSFT, KC_ESC), KC_HOME, LT(LAYER_SYST, KC_PGDN), MT(MOD_RALT, KC_PGUP), MT(MOD_LGUI, KC_END), MT(MOD_RGUI, KC_LEFT), MT(MOD_RALT, KC_DOWN), KC_UP, LT(LAYER_SYST, KC_RGHT), MT(MOD_RSFT, KC_BSPC),
- XXXXXXX, KC_LCTL, KC_LALT, KC_NO, MO(LAYER_SYST), KC_LSFT, KC_LALT, KC_RCTL, MT(MOD_RSFT, KC_SPC), XXXXXXX ),
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, LT(LAYER_SYST, KC_F7), MT(MOD_LALT, KC_F8), MT(MOD_RCTL,KC_F9), MT(MOD_RSFT, KC_F10),
+ MT(MOD_LSFT, KC_ESC), KC_HOME, LT(LAYER_SYST, KC_PGDN), MT(MOD_RALT, KC_PGUP), MT(MOD_LGUI, KC_END), MT(MOD_RGUI, KC_LEFT), MT(MOD_RALT, KC_DOWN), KC_UP, LT(LAYER_SYST, KC_RGHT), MT(MOD_RSFT, KC_BSPC),
+ KC_DOWN, MT(KC_LCTL, KC_F11), MT(KC_LALT, KC_F12), KC_NO, LT(LAYER_SYST, KC_SPACE), MT(KC_LSFT, KC_PSCR), MT(KC_LALT, KC_SLCK), MT(KC_RCTL, KC_PAUS), MT(MOD_RSFT, KC_BSPC), KC_UP
+ ),
/* Number and Symbols Layer
* ,---------------------------------------------------------------------.
* | ! | @ | # | $ | % | ^ | & | * | ( | ) |
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
+ * | ____ | ____ | ____ | ____ | ____ |SysLay| ____ | Alt | Ctrl | Shift|
* |------+------+------+------+-------------+------+------+------+------|
* | | ~ | _ | + | { | } | | | : | " | |
* | TAB | ` | - | = | [ | ] | \ | ; | ' | Del |
* | Shift|SysLay| ____ | AltGr| OSkey| OSkey| AltGr|SysLay| ____ | Shift|
* ' -----+------+------+------+------+------|------+------+------+------'
* | | | | | < | > | ? | |
- * | ____ | ____ | ____ | | , | . | / | ____ |
+ * |BackSp| Del | Enter| | , | . | / | Enter|
* | Ctrl | Alt |SysLay| ____ | Shift| Alt | Ctrl | Shift|
* '-------------------------------------------------------'
*/
[LAYER_NUMSYM] = LAYOUT_ortho_3x10(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- MT(MOD_LSFT, KC_TAB), LT(LAYER_SYST, KC_GRV), KC_MINS, MT(MOD_RALT, KC_EQL), MT(MOD_LGUI, KC_LBRC), MT(MOD_RGUI, KC_RBRC), MT(MOD_RALT, KC_BSLS), LT(LAYER_SYST, KC_SCLN), KC_QUOT, MT(MOD_RSFT, KC_DEL),
- XXXXXXX, KC_LCTL, KC_LALT, MO(LAYER_SYST), KC_NO, MT(MOD_LSFT, KC_COMM), MT(MOD_LALT, KC_DOT), MT(MOD_RCTL, KC_SLSH), MT(MOD_RSFT, KC_SPC), XXXXXXX ),
+ KC_1, KC_2, KC_3, KC_4, KC_5, LT(LAYER_SYST, KC_6), KC_7, MT(MOD_LALT, KC_8), MT(MOD_RCTL,KC_9), MT(MOD_RSFT, KC_0),
+ MT(MOD_LSFT, KC_TAB), LT(LAYER_SYST, KC_GRV), KC_MINS, MT(MOD_RALT, KC_EQL), MT(MOD_LGUI, KC_LBRC), MT(MOD_RGUI, KC_RBRC), MT(MOD_RALT, KC_BSLS), LT(LAYER_SYST, KC_SCLN), KC_QUOT, MT(MOD_RSFT, KC_DEL),
+ KC_LEFT, MT(KC_LCTL, KC_BSPC), MT(KC_LALT, KC_DEL), LT(LAYER_SYST, KC_ENT), KC_NO, MT(MOD_LSFT, KC_COMM), MT(MOD_LALT, KC_DOT), MT(MOD_RCTL, KC_SLSH), MT(MOD_RSFT, KC_ENT), KC_RGHT
+ ),
/* System Layer
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
- * | F11 | F12 | Play | Next |MsWhlU|MsBtn1|OSMenu|SysReq|MsBtn2|Backsp|
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
+ * | Play | Stop | Prev | Next |MsBtn1|MsLeft|MSDown| MsUp |MsRigh|MsBtn2|
+ * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift|
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
- * | Caps | Mute | Vol- | Vol+ |MsWhlD|MsLeft|MSDown| MsUp |MsRigh| Ins |
- * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift|
+ * |Backsp| Mute | Vol- | Vol+ |MsWhlD| Left | Down | Up | Right|Backsp|
+ * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
- * | ____ | ____ | | |PrnScr|ScrLck|Pause | ____ |
- * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | Shift|
- * '-------------------------------------------------------'
- * simplified view (for media and mouse there are dedicated layers)
- * ,---------------------------------------------------------------------.
- * | | | | | | | | | | |
- * | F11 | F12 | | | | |OSMenu|SysReq| |Backsp|
- * | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
- * |------+------+------+------+-------------+------+------+------+------|
- * | | | | | | | | | | |
- * | Caps | | | | | | | | | Ins |
- * | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift|
- * '------+------+------+------+------+------|------+------+------+------+
- * | | | | | | | | |
- * | | | | |PrnScr|ScrLck|Pause | |
- * | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | Shift|
+ * | ____ | ____ | Enter| Space| Mute | Vol- | Vol+ | Space|
+ * | Ctrl | Alt | ____ | ____ | Shift| Alt | Ctrl | ____ |
* '-------------------------------------------------------'
*/
[LAYER_SYST] = LAYOUT_ortho_3x10(
- KC_F11, KC_F12, KC_MPLY, KC_MNXT, KC_MS_WH_UP, KC_MS_BTN1, KC_APP, KC_SYSREQ, KC_MS_BTN2, KC_BSPC,
- MT(MOD_LSFT, KC_CAPS), KC_MUTE, KC_VOLD, KC_VOLU, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, MT(MOD_RSFT, KC_INS),
- XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, MT(MOD_RSFT, KC_SPC), XXXXXXX ),
+ KC_MPLY, KC_STOP, KC_MPRV, KC_MNXT, KC_MS_BTN1, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, MT(MOD_RSFT, KC_MS_BTN2),
+ KC_BSPC, KC_DEL, KC_PGDN, KC_PGUP, KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_BSPC,
+ KC_PGDN, MT(KC_LCTL, KC_CAPS), MT(KC_LALT, KC_INS), KC_ENT, KC_SPC, MT(MOD_RSFT, KC_MUTE), MT(MOD_LALT, KC_VOLD), MT(MOD_RCTL, KC_VOLU), KC_SPC, KC_PGUP
+ ),
/* ArrowPad (mod su Q) /------mouse-------\ /-----cursor-------\
* ,---------------------------------------------------------------------.
@@ -157,23 +148,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
- * | | |MsWhlU|MsDown|MsWhlD| End | Down | PdDn |
+ * | | |MsWhlU|MsDown|MsWhlD| End | PgDn | PgDn |
* | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
* '-------------------------------------------------------'
*/
[LAYER_ARROWPAD] = LAYOUT_ortho_3x10(
- KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_HOME, KC_UP, KC_PGUP, KC_BSPC,
- KC_LSFT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT,
- XXXXXXX, KC_LCTL, KC_LALT, KC_MS_WH_UP, KC_MS_DOWN, KC_MS_WH_DOWN, KC_END, KC_DOWN, KC_PGDN, XXXXXXX ),
+ KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_HOME, KC_UP, KC_PGUP, KC_BSPC,
+ KC_LSFT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT,
+ XXXXXXX, KC_LCTL, KC_LALT, KC_MS_WH_UP, KC_MS_DOWN, KC_MS_WH_DOWN, KC_END, KC_PGDN, KC_PGDN, XXXXXXX
+ ),
/* NumPad (mod su W)
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
- * | | | / | * | - |Backsp| 7 | 8 | 9 | 0 |
+ * | | | 3 | * | - |Backsp| 7 | 8 | 9 | 0 |
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
- * | | | | = | + | . | 4 | 5 | 6 | Enter|
+ * | | | / | = | + | . | 4 | 5 | 6 | Enter|
* | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
@@ -182,9 +174,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* '-------------------------------------------------------'
*/
[LAYER_NUMPAD] = LAYOUT_ortho_3x10(
- KC_NO, KC_NO, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_BSPC, KC_7, KC_8, KC_9, KC_0,
- KC_LSFT, KC_NO, KC_NO, KC_KP_EQUAL, KC_KP_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ENT,
- XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_TAB, KC_COMM, KC_1, KC_2, KC_3, XXXXXXX ),
+ KC_NO, KC_NO, KC_3, KC_KP_ASTERISK, KC_KP_MINUS, KC_BSPC, KC_7, KC_8, KC_9, KC_0,
+ KC_LSFT, KC_NO, KC_KP_SLASH, KC_KP_EQUAL, KC_KP_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ENT,
+ XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_TAB, KC_COMM, KC_1, KC_2, KC_3, XXXXXXX
+ ),
/* MediaPad (mod su E)
* ,---------------------------------------------------------------------.
@@ -202,9 +195,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* '-------------------------------------------------------'
*/
[LAYER_MEDIAPAD] = LAYOUT_ortho_3x10(
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, KC_NO,
- KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,
- XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_NO, XXXXXXX ),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, KC_NO,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,
+ XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_NO, XXXXXXX
+ ),
};
@@ -225,15 +219,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case CK_TRIPLEZERO:
if (record->event.pressed) {
SEND_STRING("000");
- } // else { when released... }
+ } // else { when released }
break;
}
return true;
};
void keyboard_pre_init_user(void) {
- // Call the keyboard pre init code.
-
// Set our LED pins as output
setPinOutput(D5);
setPinOutput(B0);
diff --git a/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md b/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md
index 40d2bc22d57..8fe7a60679e 100644
--- a/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md
+++ b/keyboards/40percentclub/gherkin/keymaps/stevexyz/readme.md
@@ -1,11 +1,15 @@
-# gherkin super micro edition
+# The 25% SuperMicro keyboard
+## A full featured keymap on Gherkin compatible with a pure "Alpha 26" layout
-With this configuration the "28" layout first experimented on the plank-like jj40 is being ported to a more proper board, leaving just two keys not used.
+With this configuration the "SuperMicro" layout first experimented on the plank-like jj40 is being ported to a more proper board, and with the last changes, this layout has been made compatible also to a "26 keys" one. So you can now choose to leave all 30 keys on the keyboard, or remove the two on the bottom line corners to have the "old" and comfortable 28 keys layout, or remove also space and enter to have the simplest "pure alpha" one! And even the intermediate 27 keys one is an interesting compatible option!
-For more information please have a look at https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/jj40/keymaps/stevexyz/readme.md
+This keymap is for a generic usage, trying to avoid as much gimmick as possible (considering the number of keys) and retain muscle memory from people used to the standard Qwerty 104 keys one. Functions and numbers (with related symbols) are on the first row as expected; other examples of design coherency include the symbols on the central row laid out in the same order as you'll find on a standard full keyboard, and the cursor movement aligned to the common unix vi standard ("hjkl", and for symmetry "sdfg" for home/pgdn/pgup/end). I've personally used this layout for months on my home PC in parallel to my portable work PC.
-The image below explain the main layers. In addition to them with q, w and e there are three specific dedicated layers for cursors/mouse, numpad and media.
-
+Relying just on the alphabetic keys this layout can be also very easily ported and tested on any qmk supported keyboard (ok, butterstick excluded).
+
+The image below explains the main layers activated respectively with F, N or both modifiers pressed together. In addition to them there are available 5 layers that can be personalized as needed or completely removed without losing any functionality; three of them are currently setup in the default keymap for cursors/mouse, numpad and media (activated with q, w and e respectively).
+
+

diff --git a/keyboards/4pplet/aekiso60/README.md b/keyboards/4pplet/aekiso60/README.md
new file mode 100644
index 00000000000..42c3d3421d2
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/README.md
@@ -0,0 +1,14 @@
+# AEKISO60
+
+A 60% PCB enabling use of ISO AEK keycaps and ALPS switches
+
+More info: https://geekhack.org/index.php?topic=103627.0
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: AEKISO60 Rev A
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4pplet/aekiso60/rev_a: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).
\ No newline at end of file
diff --git a/keyboards/4pplet/aekiso60/keymaps/default/keymap.c b/keyboards/4pplet/aekiso60/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4f3e895a5e1
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+#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_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_ENT,
+ KC_LCTRL, 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_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_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RGUI, KC_RCTL),
+
+[1] = LAYOUT_all(
+ KC_EXEC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_BSPC, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_PENT,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_INS,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ RESET, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______)
+};
+
+
diff --git a/keyboards/4pplet/aekiso60/keymaps/via/keymap.c b/keyboards/4pplet/aekiso60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d2036f60bd7
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/keymaps/via/keymap.c
@@ -0,0 +1,34 @@
+#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_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_ENT,
+ KC_LCTRL, 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_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_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, _______, KC_RALT, KC_RGUI, KC_RCTL),
+
+[1] = LAYOUT_all(
+ KC_EXEC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_BSPC, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_PENT,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_INS,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ RESET, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______),
+
+[2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+[3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
diff --git a/keyboards/4pplet/aekiso60/keymaps/via/rules.mk b/keyboards/4pplet/aekiso60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/4pplet/aekiso60/rev_a/config.h b/keyboards/4pplet/aekiso60/rev_a/config.h
new file mode 100644
index 00000000000..7505bcf7b9d
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/rev_a/config.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4444
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 4pplet
+#define PRODUCT AEKISO60 Rev A
+#define DESCRIPTION A steezy KEEB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+// ROWS: Top to bottom, COLS: Left to right
+#define MATRIX_ROW_PINS {C2,D0,B0,C7,C5}
+#define MATRIX_COL_PINS {C4,C6,B7,B6,B5,B4,B3,B2,B1,D6,D5,D4,D2,D1}
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define QMK_ESC_OUTPUT C4 // usually COL
+#define QMK_ESC_INPUT C2 // usually ROW
+
+#define RGB_DI_PIN D3
+#define RGBLED_NUM 12
+#define BACKLIGHT_LEVELS 5
+
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/4pplet/aekiso60/rev_a/rev_a.c b/keyboards/4pplet/aekiso60/rev_a/rev_a.c
new file mode 100644
index 00000000000..d3db08ad193
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/rev_a/rev_a.c
@@ -0,0 +1 @@
+#include "rev_a.h"
diff --git a/keyboards/4pplet/aekiso60/rev_a/rev_a.h b/keyboards/4pplet/aekiso60/rev_a/rev_a.h
new file mode 100644
index 00000000000..f68a320b7fb
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/rev_a/rev_a.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+ 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, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
+ k40, k41, k43, k44, k45, k46, k48, k4a, k4b \
+) \
+{ \
+ {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}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, KC_NO},\
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k41, KC_NO, k43, k44, k45, k46, KC_NO, k48, KC_NO, k4a, k4b, KC_NO, KC_NO} \
+}
diff --git a/keyboards/4pplet/aekiso60/rev_a/rules.mk b/keyboards/4pplet/aekiso60/rev_a/rules.mk
new file mode 100644
index 00000000000..494e07bc0ca
--- /dev/null
+++ b/keyboards/4pplet/aekiso60/rev_a/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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
+MIDI_ENABLE = no # MIDI support
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/4pplet/steezy60/README.md b/keyboards/4pplet/steezy60/README.md
new file mode 100644
index 00000000000..34245b84ef6
--- /dev/null
+++ b/keyboards/4pplet/steezy60/README.md
@@ -0,0 +1,14 @@
+# Steezy60
+
+A 60% PCB with a ton of layout options for SMK and Alps switches
+
+More info: https://geekhack.org/index.php?topic=103531.0
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: Steezy60 Rev A
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4pplet/steezy60/rev_a: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).
\ No newline at end of file
diff --git a/keyboards/4pplet/steezy60/keymaps/4pplet/keymap.c b/keyboards/4pplet/steezy60/keymaps/4pplet/keymap.c
new file mode 100644
index 00000000000..67820f2ac0b
--- /dev/null
+++ b/keyboards/4pplet/steezy60/keymaps/4pplet/keymap.c
@@ -0,0 +1,27 @@
+#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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LGUI, 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_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSPC, MO(2),
+ KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTRL),
+
+[1] = 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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
+ KC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSPC, MO(2),
+ KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_RALT, MO(2), KC_SPC, KC_RALT, KC_RGUI, KC_NO, KC_APP, KC_RCTRL),
+
+[2] = LAYOUT_all(
+ KC_EXEC, 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_INS, _______,
+ _______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, KC_PENT,
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
+ DF(1), DF(0), _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, RESET )
+};
+
+
diff --git a/keyboards/4pplet/steezy60/keymaps/default/keymap.c b/keyboards/4pplet/steezy60/keymaps/default/keymap.c
new file mode 100644
index 00000000000..6a922b0f3e0
--- /dev/null
+++ b/keyboards/4pplet/steezy60/keymaps/default/keymap.c
@@ -0,0 +1,18 @@
+#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_NO, 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_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO,
+ KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_NO, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)),
+
+[1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______,
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______ )
+};
\ No newline at end of file
diff --git a/keyboards/4pplet/steezy60/keymaps/via/keymap.c b/keyboards/4pplet/steezy60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..603d85771da
--- /dev/null
+++ b/keyboards/4pplet/steezy60/keymaps/via/keymap.c
@@ -0,0 +1,32 @@
+#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_NO, 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_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_NO,
+ KC_LCTL, KC_LGUI, KC_NO, KC_LALT, KC_NO, KC_SPC, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_APP, MO(1)),
+
+[1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, KC_BSPC, KC_UP, KC_ENT, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MUTE, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______,
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, _______, _______, _______ ),
+
+[2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ),
+
+[3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ )
+};
\ No newline at end of file
diff --git a/keyboards/4pplet/steezy60/keymaps/via/rules.mk b/keyboards/4pplet/steezy60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/4pplet/steezy60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/4pplet/steezy60/rev_a/config.h b/keyboards/4pplet/steezy60/rev_a/config.h
new file mode 100644
index 00000000000..654454072d4
--- /dev/null
+++ b/keyboards/4pplet/steezy60/rev_a/config.h
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4444
+#define PRODUCT_ID 0x0002
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 4pplet
+#define PRODUCT Steezy60 Rev A
+#define DESCRIPTION A steezy keeb
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+// ROWS: Top to bottom, COLS: Left to right
+#define MATRIX_ROW_PINS {C2,D0,B0,C7,C5}
+#define MATRIX_COL_PINS {C4,C6,B7,B6,B5,B4,B3,B2,B1,D6,D5,D4,D2,D1}
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define QMK_ESC_OUTPUT C4 // usually COL
+#define QMK_ESC_INPUT C2 // usually ROW
+
+#define RGB_DI_PIN D3
+#define RGBLED_NUM 12
+#define BACKLIGHT_LEVELS 5
+
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/4pplet/steezy60/rev_a/rev_a.c b/keyboards/4pplet/steezy60/rev_a/rev_a.c
new file mode 100644
index 00000000000..d3db08ad193
--- /dev/null
+++ b/keyboards/4pplet/steezy60/rev_a/rev_a.c
@@ -0,0 +1 @@
+#include "rev_a.h"
diff --git a/keyboards/4pplet/steezy60/rev_a/rev_a.h b/keyboards/4pplet/steezy60/rev_a/rev_a.h
new file mode 100644
index 00000000000..b8c3fa6b05a
--- /dev/null
+++ b/keyboards/4pplet/steezy60/rev_a/rev_a.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k4d, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ 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,k4c, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ {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}, \
+ {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}, \
+ {k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d} \
+}
diff --git a/keyboards/4pplet/steezy60/rev_a/rules.mk b/keyboards/4pplet/steezy60/rev_a/rules.mk
new file mode 100644
index 00000000000..494e07bc0ca
--- /dev/null
+++ b/keyboards/4pplet/steezy60/rev_a/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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
+MIDI_ENABLE = no # MIDI support
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/4pplet/waffling60/README.md b/keyboards/4pplet/waffling60/README.md
new file mode 100644
index 00000000000..6c333a5607b
--- /dev/null
+++ b/keyboards/4pplet/waffling60/README.md
@@ -0,0 +1,14 @@
+# waffling60
+
+A 60% PCB for MX switches, one hot swap and one solder-pcb version with decent layout support.
+
+More info: https://geekhack.org/index.php?topic=103531.0
+
+* Keyboard Maintainer: [4pplet](https://github.com/4pplet)
+* Hardware Supported: waffling60 Rev A
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 4pplet/steezy60/rev_a: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).
\ No newline at end of file
diff --git a/keyboards/4pplet/waffling60/keymaps/default/keymap.c b/keyboards/4pplet/waffling60/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d61c3f6c548
--- /dev/null
+++ b/keyboards/4pplet/waffling60/keymaps/default/keymap.c
@@ -0,0 +1,18 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[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_NO, 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_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, MO(1)),
+// basic function layer
+[1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/4pplet/waffling60/keymaps/via/keymap.c b/keyboards/4pplet/waffling60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..40ca2a28fe6
--- /dev/null
+++ b/keyboards/4pplet/waffling60/keymaps/via/keymap.c
@@ -0,0 +1,32 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// main layer
+[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_NO, 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_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, MO(1)),
+// basic function layer
+[1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+// extra layer for VIA
+[2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+// extra layer for VIA
+[3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/4pplet/waffling60/keymaps/via/rules.mk b/keyboards/4pplet/waffling60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/4pplet/waffling60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/4pplet/waffling60/rev_a/config.h b/keyboards/4pplet/waffling60/rev_a/config.h
new file mode 100644
index 00000000000..d232d3e70a7
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_a/config.h
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4444
+#define PRODUCT_ID 0x0003
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 4pplet
+#define PRODUCT waffling60 Rev A
+#define DESCRIPTION A steezy keeb
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 11
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS {D4,D1,C2,C4,C7,B2}
+#define MATRIX_COL_PINS {D3,D0,D2,B6,B5,B4,B3,D6,D5,B0,B1}
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 0
+
+#define QMK_ESC_OUTPUT D3 // usually COL
+#define QMK_ESC_INPUT D4 // usually ROW
diff --git a/keyboards/4pplet/waffling60/rev_a/rev_a.c b/keyboards/4pplet/waffling60/rev_a/rev_a.c
new file mode 100644
index 00000000000..d3db08ad193
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_a/rev_a.c
@@ -0,0 +1 @@
+#include "rev_a.h"
diff --git a/keyboards/4pplet/waffling60/rev_a/rev_a.h b/keyboards/4pplet/waffling60/rev_a/rev_a.h
new file mode 100644
index 00000000000..3ac29687797
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_a/rev_a.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#include "quantum.h"
+
+// k
+#define LAYOUT_all( \
+ k00, k01, k11, k02, k03, k04, k05, k15, k06, k07, k08, k18, k09, k0a, k1a, \
+ k10, k21, k12, k22, k13, k14, k25, k35, k16, k17, k28, k19, k29, k2a, \
+ k20, k31, k32, k23, k33, k24, k45, k26, k36, k27, k38, k39, k3a, \
+ k30, k40, k41, k42, k43, k34, k44, k55, k46, k37, k47, k48, k49, k4a, \
+ k50, k51, k52, k53, k54, k56, k57, k58, k59, k5a \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a}, \
+ {k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a}, \
+ {k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a} \
+}
diff --git a/keyboards/4pplet/waffling60/rev_a/rules.mk b/keyboards/4pplet/waffling60/rev_a/rules.mk
new file mode 100644
index 00000000000..494e07bc0ca
--- /dev/null
+++ b/keyboards/4pplet/waffling60/rev_a/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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
+MIDI_ENABLE = no # MIDI support
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/8pack/readme.md b/keyboards/8pack/readme.md
index ad5df536a18..9c608e2a59e 100644
--- a/keyboards/8pack/readme.md
+++ b/keyboards/8pack/readme.md
@@ -4,7 +4,7 @@ An open source 2x4 macropad designed by Charles Garcia.
Keyboard Maintainer: [Charles Garcia](https://github.com/cgarcia2097)
Hardware Supported: 8-Pack Macropad PCB
-Hardware Availability: [8-Pack Github](https://github.com/cgarcia2097/8-Pack)
+Hardware Availability: [8-Pack GitHub](https://github.com/cgarcia2097/8-Pack)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/abacus/readme.md b/keyboards/abacus/readme.md
index 1f58a25a4ac..ecf25b2edf5 100644
--- a/keyboards/abacus/readme.md
+++ b/keyboards/abacus/readme.md
@@ -6,7 +6,7 @@ A first attempt at a PCB design for a mechanical keyboard. Includes rotary encod
* Keyboard Maintainer: [nickolaij](https://github.com/nickolaij)
* Hardware Supported: Abacus PCB, [Elite C Microcontroller](https://keeb.io/products/elite-c-usb-c-pro-micro-replacement-arduino-compatible-atmega32u4) or Pro Micro Microcontroller (Elite C has additional pins for encoder)
-* Hardware Availability: [Abacus PCB Github](https://github.com/nickolaij/Abacus_Rev2)
+* Hardware Availability: [Abacus PCB GitHub](https://github.com/nickolaij/Abacus_Rev2)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/absinthe/rules.mk b/keyboards/absinthe/rules.mk
index f0b8037c912..8f534909dfd 100644
--- a/keyboards/absinthe/rules.mk
+++ b/keyboards/absinthe/rules.mk
@@ -11,16 +11,6 @@ MCU = atmega32u4
# ATmega328P USBasp
BOOTLOADER = atmel-dfu
-# If you don't know the bootloader type, then you can specify the
-# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
-# Otherwise, delete this section
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-# OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
# Build Options
# change yes to no to disable
#
@@ -39,7 +29,5 @@ MIDI_ENABLE = no # MIDI support
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-HD44780_ENABLE = no # Enable support for HD44780 based LCDs
ENCODER_ENABLE = yes
RGBLIGHT_ENABLE = yes
-# EXTRAFLAGS += -flto
diff --git a/keyboards/acheron/elongate/info.json b/keyboards/acheron/elongate/info.json
index 9664638c519..46784164b4a 100644
--- a/keyboards/acheron/elongate/info.json
+++ b/keyboards/acheron/elongate/info.json
@@ -5,7 +5,7 @@
"width": 15.5,
"height": 4.25,
"layouts": {
- "LAYOUT_all": {
+ "LAYOUT": {
"layout": [
{"label":"Tab", "x":0, "y":0},
{"label":"Q", "x":1, "y":0},
@@ -33,7 +33,7 @@
{"label":"J", "x":7.25, "y":1},
{"label":"K", "x":8.25, "y":1},
{"label":"L", "x":9.25, "y":1},
- {"label":"Enter", "x":10.25, "y":1.75},
+ {"label":"Enter", "x":10.25, "y":1, "w":1.75},
{"label":"4", "x":12.5, "y":1},
{"label":"5", "x":13.5, "y":1},
{"label":"6", "x":14.5, "y":1},
@@ -47,7 +47,7 @@
{"label":"N", "x":6.75, "y":2},
{"label":"M", "x":7.75, "y":2},
{"label":"<", "x":8.75, "y":2},
- {"label":"Fn1", "x":9.75, "y":2},
+ {"label":"Fn1", "x":9.75, "y":2, "w":1.25},
{"label":"Up", "x":11.25, "y":2.25},
{"label":"1", "x":12.5, "y":2},
{"label":"2", "x":13.5, "y":2},
@@ -63,7 +63,7 @@
{"label":"Down", "x":11.25, "y":3.25},
{"label":"Right", "x":12.25, "y":3.25},
{"label":"0", "x":13.5, "y":3},
- {"label":".", "x":14.5, "y":3},
+ {"label":".", "x":14.5, "y":3}
]
}
}
diff --git a/keyboards/aeboards/aegis/info.json b/keyboards/aeboards/aegis/info.json
new file mode 100644
index 00000000000..90e2b16946e
--- /dev/null
+++ b/keyboards/aeboards/aegis/info.json
@@ -0,0 +1,130 @@
+{
+ "keyboard_name": "Aegis",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19.5,
+ "height": 6.75,
+ "layouts": {
+ "LAYOUT_aegis": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 4.5, "y": 0},
+
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 15.5, "y": 0},
+ {"x": 16.5, "y": 0},
+ {"x": 17.5, "y": 0},
+ {"x": 18.5, "y": 0},
+
+ {"x": 0, "y": 1.5},
+ {"x": 1, "y": 1.5},
+ {"x": 2, "y": 1.5},
+ {"x": 3, "y": 1.5},
+
+ {"x": 4.5, "y": 1.5},
+ {"x": 5.5, "y": 1.5},
+ {"x": 6.5, "y": 1.5},
+ {"x": 7.5, "y": 1.5},
+ {"x": 8.5, "y": 1.5},
+ {"x": 9.5, "y": 1.5},
+ {"x": 10.5, "y": 1.5},
+ {"x": 11.5, "y": 1.5},
+ {"x": 12.5, "y": 1.5},
+ {"x": 13.5, "y": 1.5},
+ {"x": 14.5, "y": 1.5},
+ {"x": 15.5, "y": 1.5},
+ {"x": 16.5, "y": 1.5},
+ {"x": 17.5, "y": 1.5},
+ {"x": 18.5, "y": 1.5},
+
+ {"x": 0, "y": 2.5},
+ {"x": 1, "y": 2.5},
+ {"x": 2, "y": 2.5},
+ {"x": 3, "y": 2.5},
+
+ {"x": 4.5, "y": 2.5, "w": 1.5},
+ {"x": 6, "y": 2.5},
+ {"x": 7, "y": 2.5},
+ {"x": 8, "y": 2.5},
+ {"x": 9, "y": 2.5},
+ {"x": 10, "y": 2.5},
+ {"x": 11, "y": 2.5},
+ {"x": 12, "y": 2.5},
+ {"x": 13, "y": 2.5},
+ {"x": 14, "y": 2.5},
+ {"x": 15, "y": 2.5},
+ {"x": 16, "y": 2.5},
+ {"x": 17, "y": 2.5},
+ {"x": 18, "y": 2.5, "w": 1.5},
+
+ {"x": 0, "y": 3.5},
+ {"x": 1, "y": 3.5},
+ {"x": 2, "y": 3.5},
+ {"x": 3, "y": 3.5},
+
+ {"x": 4.5, "y": 3.5, "w": 1.75},
+ {"x": 6.25, "y": 3.5},
+ {"x": 7.25, "y": 3.5},
+ {"x": 8.25, "y": 3.5},
+ {"x": 9.25, "y": 3.5},
+ {"x": 10.25, "y": 3.5},
+ {"x": 11.25, "y": 3.5},
+ {"x": 12.25, "y": 3.5},
+ {"x": 13.25, "y": 3.5},
+ {"x": 14.25, "y": 3.5},
+ {"x": 15.25, "y": 3.5},
+ {"x": 16.25, "y": 3.5},
+ {"x": 17.25, "y": 3.5, "w": 2.25},
+
+ {"x": 0, "y": 4.5},
+ {"x": 1, "y": 4.5},
+ {"x": 2, "y": 4.5},
+ {"x": 3, "y": 4.5},
+
+ {"x": 4.25, "y": 4.75},
+
+ {"x": 5.5, "y": 4.5, "w": 1.25},
+ {"x": 6.75, "y": 4.5},
+ {"x": 7.75, "y": 4.5},
+ {"x": 8.75, "y": 4.5},
+ {"x": 9.75, "y": 4.5},
+ {"x": 10.75, "y": 4.5},
+ {"x": 11.75, "y": 4.5},
+ {"x": 12.75, "y": 4.5},
+ {"x": 13.75, "y": 4.5},
+ {"x": 14.75, "y": 4.5},
+ {"x": 15.75, "y": 4.5},
+ {"x": 16.75, "y": 4.5, "w": 1.75},
+ {"x": 18.5, "y": 4.5},
+
+ {"x": 0, "y": 5.5},
+ {"x": 1, "y": 5.5},
+ {"x": 2, "y": 5.5},
+
+ {"x": 3.25, "y": 5.75},
+ {"x": 4.25, "y": 5.75},
+ {"x": 5.25, "y": 5.75},
+
+ {"x": 6.5, "y": 5.5, "w": 1.25},
+ {"x": 7.75, "y": 5.5, "w": 1.25},
+ {"x": 9, "y": 5.5, "w": 6.25},
+ {"x": 15.25, "y": 5.5, "w": 1.5},
+ {"x": 16.75, "y": 5.5, "w": 1.25},
+ {"x": 18, "y": 5.5, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/aeboards/ext65/info.json b/keyboards/aeboards/ext65/info.json
new file mode 100644
index 00000000000..ff3b6fcc102
--- /dev/null
+++ b/keyboards/aeboards/ext65/info.json
@@ -0,0 +1,110 @@
+{
+ "keyboard_name": "Ext65",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 20.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ext65": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0},
+ {"x": 14.5, "y": 0},
+ {"x": 15.5, "y": 0},
+ {"x": 16.5, "y": 0},
+ {"x": 17.5, "y": 0},
+ {"x": 18.5, "y": 0},
+ {"x": 19.5, "y": 0},
+
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+ {"x": 3, "y": 1},
+
+ {"x": 4.5, "y": 1, "w": 1.5},
+ {"x": 6, "y": 1},
+ {"x": 7, "y": 1},
+ {"x": 8, "y": 1},
+ {"x": 9, "y": 1},
+ {"x": 10, "y": 1},
+ {"x": 11, "y": 1},
+ {"x": 12, "y": 1},
+ {"x": 13, "y": 1},
+ {"x": 14, "y": 1},
+ {"x": 15, "y": 1},
+ {"x": 16, "y": 1},
+ {"x": 17, "y": 1},
+ {"x": 18, "y": 1, "w": 1.5},
+ {"x": 19.5, "y": 1},
+
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2},
+ {"x": 3, "y": 2},
+
+ {"x": 4.5, "y": 2, "w": 1.75},
+ {"x": 6.25, "y": 2},
+ {"x": 7.25, "y": 2},
+ {"x": 8.25, "y": 2},
+ {"x": 9.25, "y": 2},
+ {"x": 10.25, "y": 2},
+ {"x": 11.25, "y": 2},
+ {"x": 12.25, "y": 2},
+ {"x": 13.25, "y": 2},
+ {"x": 14.25, "y": 2},
+ {"x": 15.25, "y": 2},
+ {"x": 16.25, "y": 2},
+ {"x": 17.25, "y": 2, "w": 2.25},
+ {"x": 19.5, "y": 2},
+
+ {"x": 0, "y": 3},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+
+ {"x": 4.5, "y": 3, "w": 2.25},
+ {"x": 6.75, "y": 3},
+ {"x": 7.75, "y": 3},
+ {"x": 8.75, "y": 3},
+ {"x": 9.75, "y": 3},
+ {"x": 10.75, "y": 3},
+ {"x": 11.75, "y": 3},
+ {"x": 12.75, "y": 3},
+ {"x": 13.75, "y": 3},
+ {"x": 14.75, "y": 3},
+ {"x": 15.75, "y": 3},
+ {"x": 16.75, "y": 3, "w": 1.75},
+ {"x": 18.5, "y": 3},
+ {"x": 19.5, "y": 3},
+
+ {"x": 0, "y": 4},
+ {"x": 1, "y": 4},
+ {"x": 2, "y": 4},
+ {"x": 3, "y": 4},
+ {"x": 4.5, "y": 4, "w": 1.5},
+ {"x": 6, "y": 4},
+ {"x": 7, "y": 4, "w": 1.5},
+ {"x": 8.5, "y": 4, "w": 6.25},
+ {"x": 14.75, "y": 4, "w": 1.25},
+ {"x": 16, "y": 4},
+
+ {"x": 17.5, "y": 4},
+ {"x": 18.5, "y": 4},
+ {"x": 19.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/allison/readme.md b/keyboards/allison/readme.md
index 343ff2325d9..60670cbad8d 100644
--- a/keyboards/allison/readme.md
+++ b/keyboards/allison/readme.md
@@ -4,7 +4,7 @@
A custom luxurious 60 with F-row and Macro
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
* Hardware Supported: ATmega32U4
* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
diff --git a/keyboards/allison_numpad/readme.md b/keyboards/allison_numpad/readme.md
index 0226c44f683..82992339e1a 100644
--- a/keyboards/allison_numpad/readme.md
+++ b/keyboards/allison_numpad/readme.md
@@ -4,7 +4,7 @@
A custom luxurious numpad to match Allison
-* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+* Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
* Hardware Supported: ATmega32U4
* Hardware Availability: Small production run by mrpetrov#9585 and [protoTypist](https://discord.gg/UvskpBB)
diff --git a/keyboards/alps64/config.h b/keyboards/alps64/config.h
index 237dfbbe770..25453e696f1 100644
--- a/keyboards/alps64/config.h
+++ b/keyboards/alps64/config.h
@@ -20,8 +20,8 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6464
+#define VENDOR_ID 0x6873 //hs "Hasu"
+#define PRODUCT_ID 0x6464 //Alps"64"
#define DEVICE_VER 0x0001
#define MANUFACTURER Hasu
#define PRODUCT Alps64
@@ -48,6 +48,10 @@ along with this program. If not, see .
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
+/* Bootmagic Lite Support*/
+#define BOOTMAGIC_LITE_ROW 3
+#define BOOTMAGIC_LITE_COLUMN 6
+
/*
* Feature disable options
* These options are also useful to firmware size reduction.
diff --git a/keyboards/alps64/keymaps/via/keymap.c b/keyboards/alps64/keymaps/via/keymap.c
new file mode 100644
index 00000000000..aef6995a104
--- /dev/null
+++ b/keyboards/alps64/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: qwerty */
+ [0] = LAYOUT_all(
+ 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_NUHS, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_ESC,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_APP, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT_all(
+ 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,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/alps64/keymaps/via/rules.mk b/keyboards/alps64/keymaps/via/rules.mk
new file mode 100644
index 00000000000..c4a4cd8fd93
--- /dev/null
+++ b/keyboards/alps64/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
diff --git a/keyboards/alps64/readme.md b/keyboards/alps64/readme.md
index 1188d7819cb..4ad7bf3efea 100644
--- a/keyboards/alps64/readme.md
+++ b/keyboards/alps64/readme.md
@@ -6,7 +6,7 @@ Keyboard Maintainer: QMK Community
Hardware Supported: Alps64 PCB
Hardware Availability: https://geekhack.org/index.php?topic=69666.0
-QMK is not the Alps64 official firmware. To use the official tools, refer to [TMK Keymap Editor](http://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?alps64) or [TMK Keyboard Firmware on Github](https://github.com/tmk/tmk_keyboard).
+QMK is not the Alps64 official firmware. To use the official tools, refer to [TMK Keymap Editor](http://www.tmk-kbd.com/tmk_keyboard/editor/unimap/?alps64) or [TMK Keyboard Firmware on GitHub](https://github.com/tmk/tmk_keyboard).
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/alu84/rules.mk b/keyboards/alu84/rules.mk
index b5f24905748..81dbad070b6 100755
--- a/keyboards/alu84/rules.mk
+++ b/keyboards/alu84/rules.mk
@@ -14,13 +14,13 @@ BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= yes # 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
-SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
-AUDIO_ENABLE ?= no
-RGBLIGHT_ENABLE ?= yes
+BOOTMAGIC_ENABLE = yes # 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
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/amj40/rules.mk b/keyboards/amj40/rules.mk
index 5d6cff98916..cd894dac12e 100755
--- a/keyboards/amj40/rules.mk
+++ b/keyboards/amj40/rules.mk
@@ -14,15 +14,15 @@ BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration
-MOUSEKEY_ENABLE ?= no # Mouse keys
-EXTRAKEY_ENABLE ?= yes # Audio control and System control
-CONSOLE_ENABLE ?= yes # Console for debug
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE ?= yes # Enable keyboard underlight functionality
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/anavi/macropad8/config.h b/keyboards/anavi/macropad8/config.h
new file mode 100644
index 00000000000..e517d909d8d
--- /dev/null
+++ b/keyboards/anavi/macropad8/config.h
@@ -0,0 +1,72 @@
+/*
+Copyright 2020 Leon Anavi
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCEEB
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ANAVI
+#define PRODUCT Macro Pad 8
+#define DESCRIPTION 8-key mechanical keyboard/keypad/macropad with backlit, mini OLED display and RGB LED strip
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 4
+
+/*
+ * 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)
+ * NO_DIODE = switches are directly connected to AVR pins
+ *
+*/
+#define DIRECT_PINS { \
+ { D4, F6, B5, E6 }, \
+ { F5, F7, B4, C6 } \
+}
+
+#define BACKLIGHT_PIN D7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+#define RGBLIGHT_SLEEP
+
+#define UNUSED_PINS
+
+/* ws2812B RGB LED */
+#ifdef RGBLIGHT_ENABLE
+# define RGB_DI_PIN F4
+# define RGBLIGHT_ANIMATIONS
+# define RGBLED_NUM 4
+# define RGBLIGHT_HUE_STEP 10
+# define RGBLIGHT_SAT_STEP 17
+# define RGBLIGHT_VAL_STEP 17
+# define RGBLIGHT_LIMIT_VAL 255
+#endif
+
+#ifdef OLED_DRIVER_ENABLE
+# define OLED_DISPLAY_128X64
+# define OLED_TIMEOUT 60000
+# define OLED_FONT_H "keyboards/anavi/macropad8/glcdfont.c"
+#endif
diff --git a/keyboards/anavi/macropad8/glcdfont.c b/keyboards/anavi/macropad8/glcdfont.c
new file mode 100644
index 00000000000..10ce3b34573
--- /dev/null
+++ b/keyboards/anavi/macropad8/glcdfont.c
@@ -0,0 +1,232 @@
+#include "progmem.h"
+
+// Corne 8x6 font with QMK Firmware Logo
+// Online editor: https://helixfonteditor.netlify.com/
+
+// clang-format off
+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,
+0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
+0x18, 0x24, 0x24, 0x18, 0x7C, 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, 0x90, 0x90, 0x90, 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, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0,
+0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0,
+0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
+0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0,
+0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
+0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
+0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
+0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
+0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
+0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
+0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
+0xDE, 0xD7, 0xDC, 0x00, 0xC0, 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, 0xF8, 0xFC, 0xFE,
+0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
+0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF,
+0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF,
+0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
+0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
+0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
+0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
+0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
+0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
+0x0F, 0x7F, 0x0F, 0x00, 0x03, 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, 0x03, 0x0F, 0x1F,
+0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
+0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F,
+0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C,
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x03, 0x07, 0x07,
+0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x03, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x07, 0x07, 0x07, 0x03, 0x01,
+0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x07, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
+0x07, 0x00, 0x00, 0x00, 0x01, 0x03,
+0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x07, 0x03, 0x01, 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,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/anavi/macropad8/info.json b/keyboards/anavi/macropad8/info.json
new file mode 100644
index 00000000000..bcdbb9532e2
--- /dev/null
+++ b/keyboards/anavi/macropad8/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "ANAVI Macro Pad 8",
+ "url": "",
+ "maintainer": "leon-anavi",
+ "width": 4,
+ "height": 2,
+ "layouts": {
+ "LAYOUT_ortho_2x4": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}]
+ }
+ }
+}
diff --git a/keyboards/anavi/macropad8/keymaps/default/keymap.c b/keyboards/anavi/macropad8/keymaps/default/keymap.c
new file mode 100644
index 00000000000..8cdf90280d4
--- /dev/null
+++ b/keyboards/anavi/macropad8/keymaps/default/keymap.c
@@ -0,0 +1,61 @@
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+#define _FN 1
+
+#define KC_X0 LT(_FN, KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_MAIN] = LAYOUT_ortho_2x4(
+ G(KC_D), KC_UP, C(KC_C), C(KC_V),
+ KC_LEFT, KC_DOWN, KC_RGHT, MO(_FN)
+ ),
+
+ [_FN] = LAYOUT_ortho_2x4(
+ RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
+ BL_TOGG, BL_STEP, BL_BRTG, _______
+ )
+};
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+}
+
+void oled_task_user(void) {
+ // Host Keyboard Layer Status
+ oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
+ oled_write_P(PSTR("Active layer:"), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case _MAIN:
+ oled_write_ln_P(PSTR("Main"), false);
+ break;
+ case _FN:
+ oled_write_ln_P(PSTR("FN"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding '\n' to the end of your string
+ oled_write_ln_P(PSTR("N/A"), false);
+ }
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(PSTR("Num Lock: "), false);
+ oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Caps Lock: "), false);
+ oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Scroll Lock: "), false);
+ oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Backlit: "), false);
+ oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
+#ifdef RGBLIGHT_ENABLE
+ static char rgbStatusLine1[26] = {0};
+ snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
+ oled_write_ln(rgbStatusLine1, false);
+ static char rgbStatusLine2[26] = {0};
+ snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
+ oled_write_ln(rgbStatusLine2, false);
+#endif
+}
+#endif
diff --git a/keyboards/anavi/macropad8/keymaps/kodi/keymap.c b/keyboards/anavi/macropad8/keymaps/kodi/keymap.c
new file mode 100644
index 00000000000..17b00807e46
--- /dev/null
+++ b/keyboards/anavi/macropad8/keymaps/kodi/keymap.c
@@ -0,0 +1,68 @@
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+#define _FN 1
+
+#define KC_X0 LT(_FN, KC_ESC)
+
+#ifdef RGBLIGHT_ENABLE
+// How long (in ms) to wait between animation steps for the rainbow mode
+const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[] PROGMEM = {60, 30, 15};
+// How long (in milliseconds) to wait between animation steps for each of the "Swirling rainbow" animations
+const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {20, 10, 4};
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_MAIN] = LAYOUT_ortho_2x4(
+ KC_ESC, KC_UP, KC_ENTER, KC_X,
+ KC_LEFT, KC_DOWN, KC_RIGHT, MO(_FN)
+ ),
+
+ [_FN] = LAYOUT_ortho_2x4(
+ RGB_TOG, RGB_MOD, RGB_M_R, RGB_M_SN,
+ BL_TOGG, BL_STEP, BL_BRTG, _______
+ )
+};
+
+#ifdef OLED_DRIVER_ENABLE
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_180; // flips the display 180 degrees if offhand
+}
+
+void oled_task_user(void) {
+ // Host Keyboard Layer Status
+ oled_write_ln_P(PSTR("ANAVI Macro Pad 8"), false);
+ oled_write_P(PSTR("Active layer:"), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case _MAIN:
+ oled_write_ln_P(PSTR("Main"), false);
+ break;
+ case _FN:
+ oled_write_ln_P(PSTR("FN"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding '\n' to the end of your string
+ oled_write_ln_P(PSTR("N/A"), false);
+ }
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(PSTR("Num Lock: "), false);
+ oled_write_ln_P(led_state.num_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Caps Lock: "), false);
+ oled_write_ln_P(led_state.caps_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Scroll Lock: "), false);
+ oled_write_ln_P(led_state.scroll_lock ? PSTR("On") : PSTR("Off"), false);
+ oled_write_P(PSTR("Backlit: "), false);
+ oled_write_ln_P(is_backlight_enabled() ? PSTR("On") : PSTR("Off"), false);
+#ifdef RGBLIGHT_ENABLE
+ static char rgbStatusLine1[26] = {0};
+ snprintf(rgbStatusLine1, sizeof(rgbStatusLine1), "RGB Mode: %d", rgblight_get_mode());
+ oled_write_ln(rgbStatusLine1, false);
+ static char rgbStatusLine2[26] = {0};
+ snprintf(rgbStatusLine2, sizeof(rgbStatusLine2), "h:%d s:%d v:%d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
+ oled_write_ln(rgbStatusLine2, false);
+#endif
+}
+#endif
diff --git a/keyboards/anavi/macropad8/macropad8.c b/keyboards/anavi/macropad8/macropad8.c
new file mode 100644
index 00000000000..2859cd042df
--- /dev/null
+++ b/keyboards/anavi/macropad8/macropad8.c
@@ -0,0 +1 @@
+#include "macropad8.h"
diff --git a/keyboards/anavi/macropad8/macropad8.h b/keyboards/anavi/macropad8/macropad8.h
new file mode 100644
index 00000000000..3ebee830d31
--- /dev/null
+++ b/keyboards/anavi/macropad8/macropad8.h
@@ -0,0 +1,11 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_2x4( \
+ k01, k02, k03, k04, \
+ k05, k06, k07, k08 \
+ ) { \
+ { k01, k02, k03, k04 }, \
+ { k05, k06, k07, k08 } \
+}
diff --git a/keyboards/anavi/macropad8/readme.md b/keyboards/anavi/macropad8/readme.md
new file mode 100644
index 00000000000..20af445854f
--- /dev/null
+++ b/keyboards/anavi/macropad8/readme.md
@@ -0,0 +1,18 @@
+# ANAVI Macro Pad 8
+
+
+ANAVI Macro Pad 8 is an open source mini mechanical keyboard with 8 keys, backlit, addressable RGB WS2812B LED strip on the back and mini OLED display. Powered by ATmega32U4 microcontroller and with microUSB connector.
+
+* Keyboard Maintainer: [Leon Anavi](https://github.com/leon-anavi)
+* Hardware Supported: ANAVI Macro Pad 8
+* Hardware Availability: [PCB Files](https://github.com/AnaviTechnology/anavi-macro-pad-8)
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb anavi/macropad8 -km default
+
+Flash to ANAVI Macro Pad 8:
+
+ qmk flash -kb anavi/macropad8 -km 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/anavi/macropad8/rules.mk b/keyboards/anavi/macropad8/rules.mk
new file mode 100644
index 00000000000..498c27a209f
--- /dev/null
+++ b/keyboards/anavi/macropad8/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = yes # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+OLED_DRIVER_ENABLE = yes # Enable Support for SSD1306 or SH1106 OLED Displays; Communicating over I2C
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/aos/tkl/config.h b/keyboards/aos/tkl/config.h
new file mode 100644
index 00000000000..4e6ab3e3dc7
--- /dev/null
+++ b/keyboards/aos/tkl/config.h
@@ -0,0 +1,56 @@
+/*
+Copyright 2020 aholland909
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x504B
+#define PRODUCT_ID 0x1000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Ace of Spades
+#define PRODUCT Ace of Spades TKL
+#define DESCRIPTION Ace of Spades TKL
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+#define MATRIX_ROW_PINS { D3, D2, B7, F1, C7, D5 }
+#define MATRIX_COL_PINS { B0, B1, B2, B3, F4, F5, F6, F7, B6, B5, D7, B4, D6, F0, D1, C6, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+
+#define RGB_DI_PIN E6
+#ifdef RGB_DI_PIN
+ #define RGBLIGHT_ANIMATIONS
+ #define RGBLED_NUM 88
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/aos/tkl/info.json b/keyboards/aos/tkl/info.json
new file mode 100644
index 00000000000..f9665f3597f
--- /dev/null
+++ b/keyboards/aos/tkl/info.json
@@ -0,0 +1,98 @@
+{
+ "keyboard_name": "Ace of Spades TKL",
+ "maintainer": "rys",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_tkl_iso_wkl": {
+ "key_count": 85,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"\u00ac", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"\"", "x":2, "y":1.5},
+ {"label":"£", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":6, "y":1.5},
+ {"label":"&", "x":7, "y":1.5},
+ {"label":"*", "x":8, "y":1.5},
+ {"label":"(", "x":9, "y":1.5},
+ {"label":")", "x":10, "y":1.5},
+ {"label":"_", "x":11, "y":1.5},
+ {"label":"+", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"PgUp", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"{", "x":11.5, "y":2.5},
+ {"label":"}", "x":12.5, "y":2.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"PgDn", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"@", "x":11.75, "y":3.5},
+ {"label":"~", "x":12.75, "y":3.5},
+ {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"|", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.5},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.5},
+ {"label":"Space", "x":4, "y":5.5, "w":7},
+ {"label":"AltGr", "x":11, "y":5.5, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/aos/tkl/keymaps/aholland909/keymap.c b/keyboards/aos/tkl/keymaps/aholland909/keymap.c
new file mode 100644
index 00000000000..5e224811fc7
--- /dev/null
+++ b/keyboards/aos/tkl/keymaps/aholland909/keymap.c
@@ -0,0 +1,38 @@
+/*
+Copyright 2020 aholland909
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_iso_wkl(
+ 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, KC_PSCR, KC_SLCK, KC_PAUSE,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ LT(1,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_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RGUI, TG(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_tkl_iso_wkl(
+ RESET, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_VOLU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, _______,
+ _______, KC_MPRV, KC_VOLD, KC_MNXT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
+ _______, _______, KC_MPLY, _______, _______, RGB_SAD, RGB_HUD, RGB_VAI),
+};
diff --git a/keyboards/aos/tkl/keymaps/default/keymap.c b/keyboards/aos/tkl/keymaps/default/keymap.c
new file mode 100644
index 00000000000..924815fcb3a
--- /dev/null
+++ b/keyboards/aos/tkl/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+/*
+Copyright 2020 aholland909
+
+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 .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_iso_wkl(
+ KC_ESC, KC_F1, KC_F1, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_iso_wkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
+ _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_VAI
+ ),
+};
diff --git a/keyboards/aos/tkl/keymaps/default/readme.md b/keyboards/aos/tkl/keymaps/default/readme.md
new file mode 100644
index 00000000000..0de9187eaa4
--- /dev/null
+++ b/keyboards/aos/tkl/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for Ace of Spades
+
+The Ace of Spades is a fixed ISO TKL with blocked winkeyless bottom row.
diff --git a/keyboards/aos/tkl/keymaps/via/keymap.c b/keyboards/aos/tkl/keymaps/via/keymap.c
new file mode 100644
index 00000000000..53d8481112e
--- /dev/null
+++ b/keyboards/aos/tkl/keymaps/via/keymap.c
@@ -0,0 +1,55 @@
+/* Copyright 2020 Rys Sommefeldt
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_tkl_iso_wkl(
+ KC_ESC, KC_F1, KC_F1, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_tkl_iso_wkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_P, RGB_M_B, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
+ _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_VAI
+ ),
+ [2] = LAYOUT_tkl_iso_wkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_tkl_iso_wkl(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/aos/tkl/keymaps/via/rules.mk b/keyboards/aos/tkl/keymaps/via/rules.mk
new file mode 100644
index 00000000000..96d2d189b2e
--- /dev/null
+++ b/keyboards/aos/tkl/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+MOUSEKEY_ENABLE = no
diff --git a/keyboards/aos/tkl/readme.md b/keyboards/aos/tkl/readme.md
new file mode 100644
index 00000000000..f1e59385aad
--- /dev/null
+++ b/keyboards/aos/tkl/readme.md
@@ -0,0 +1,13 @@
+# Ace of Spades TKL
+
+The TKL is a custom limited run keyboard designed by Ace of Spades and manufactured by Salvun.
+
+* Keyboard Maintainers: [aholland909](https://github.com/aholland909), [rys](https://github.com/rys)
+* Hardware Supported: Ace of Spades custom TKL PCB by [aholland909](https://github.com/aholland909)
+* Hardware Availability: Custom group buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make aos/tkl: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/aos/tkl/rules.mk b/keyboards/aos/tkl/rules.mk
new file mode 100644
index 00000000000..7a4fa893913
--- /dev/null
+++ b/keyboards/aos/tkl/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/aos/tkl/tkl.c b/keyboards/aos/tkl/tkl.c
new file mode 100644
index 00000000000..b4ff32d8f4a
--- /dev/null
+++ b/keyboards/aos/tkl/tkl.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 aholland909
+
+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 .
+*/
+
+#include "tkl.h"
diff --git a/keyboards/aos/tkl/tkl.h b/keyboards/aos/tkl/tkl.h
new file mode 100644
index 00000000000..de1b9da27c6
--- /dev/null
+++ b/keyboards/aos/tkl/tkl.h
@@ -0,0 +1,46 @@
+/*
+Copyright 2020 aholland909
+
+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 .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/* 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_tkl_iso_wkl( \
+ K000, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, \
+ \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K213, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K415, \
+ K500, K502, K505, K510, K512, K513, K515, K516 \
+) { \
+ { K000, KC_NO, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO, KC_NO, K415, KC_NO }, \
+ { K500, KC_NO, K502, KC_NO, KC_NO, KC_NO, KC_NO, K505, KC_NO, KC_NO, K510, KC_NO, K512, K513, KC_NO, K515, K516 }, \
+}
diff --git a/keyboards/arabica37/arabica37.c b/keyboards/arabica37/arabica37.c
new file mode 100644
index 00000000000..22fc63b0e96
--- /dev/null
+++ b/keyboards/arabica37/arabica37.c
@@ -0,0 +1 @@
+#include "arabica37.h"
diff --git a/keyboards/arabica37/arabica37.h b/keyboards/arabica37/arabica37.h
new file mode 100644
index 00000000000..3255e71d10a
--- /dev/null
+++ b/keyboards/arabica37/arabica37.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#ifdef KEYBOARD_arabica37_rev1
+ #include "rev1.h"
+#endif
diff --git a/keyboards/arabica37/config.h b/keyboards/arabica37/config.h
new file mode 100644
index 00000000000..cfb6bf4ffcc
--- /dev/null
+++ b/keyboards/arabica37/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
diff --git a/keyboards/arabica37/info.json b/keyboards/arabica37/info.json
new file mode 100644
index 00000000000..656433707ce
--- /dev/null
+++ b/keyboards/arabica37/info.json
@@ -0,0 +1,65 @@
+{
+ "keyboard_name": "arabica37 rev. 1",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15.25,
+ "height": 5.75,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0.25, "y":0.75},
+ {"label":"Q", "x":1.25, "y":0.75},
+ {"label":"W", "x":2.25, "y":0.25},
+ {"label":"E", "x":3.25, "y":0},
+ {"label":"R", "x":4.25, "y":0.25},
+ {"label":"T", "x":5.25, "y":0.5},
+
+ {"label":"Y", "x":9, "y":0.5},
+ {"label":"U", "x":10, "y":0.25},
+ {"label":"I", "x":11, "y":0},
+ {"label":"O", "x":12, "y":0.25},
+ {"label":"P", "x":13, "y":0.75},
+ {"label":"Backspace", "x":14, "y":0.75},
+
+ {"label":"Ctrl", "x":0.25, "y":1.75},
+ {"label":"A", "x":1.25, "y":1.75},
+ {"label":"S", "x":2.25, "y":1.25},
+ {"label":"D", "x":3.25, "y":1},
+ {"label":"F", "x":4.25, "y":1.25},
+ {"label":"G", "x":5.25, "y":1.5},
+
+ {"label":"H", "x":9, "y":1.5},
+ {"label":"J", "x":10, "y":1.25},
+ {"label":"K", "x":11, "y":1},
+ {"label":"L", "x":12, "y":1.25},
+ {"label":";", "x":13, "y":1.75},
+ {"label":"'", "x":14, "y":1.75},
+
+ {"label":"Adjust", "x":0.25, "y":2.75},
+ {"label":"Z", "x":1.25, "y":2.75},
+ {"label":"X", "x":2.25, "y":2.25},
+ {"label":"C", "x":3.25, "y":2},
+ {"label":"V", "x":4.25, "y":2.25},
+ {"label":"B", "x":5.25, "y":2.5},
+
+ {"label":"N", "x":9, "y":2.5},
+ {"label":"M", "x":10, "y":2.25},
+ {"label":",", "x":11, "y":2},
+ {"label":".", "x":12, "y":2.25},
+ {"label":"/", "x":13, "y":2.75},
+ {"label":"\\", "x":14, "y":2.75},
+
+ {"label":"Shift", "x":0, "y":3.75, "w":2.25},
+ {"label":"Lower", "x":4.375, "y":3.75, "w":1.5},
+ {"label":"GUI", "x":5.875, "y":3.75, "w":1.25},
+
+ {"label":"Alt", "x":8.125, "y":3.75, "w":1.25},
+ {"label":"Raise", "x":9.375, "y":3.75, "w":1.5},
+ {"label":"Shift", "x":13, "y":3.75, "w":2.25},
+
+ {"label":"Space", "x":5.125, "y":4.75, "w":1.25},
+ {"label":"Enter", "x":8.875, "y":4.75, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/arabica37/keymaps/default/config.h b/keyboards/arabica37/keymaps/default/config.h
new file mode 100644
index 00000000000..f12534c9027
--- /dev/null
+++ b/keyboards/arabica37/keymaps/default/config.h
@@ -0,0 +1,42 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 170
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 120
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#define OLED_FONT_H "keyboards/arabica37/lib/glcdfont.c"
diff --git a/keyboards/arabica37/keymaps/default/keymap.c b/keyboards/arabica37/keymaps/default/keymap.c
new file mode 100644
index 00000000000..877fb7347d8
--- /dev/null
+++ b/keyboards/arabica37/keymaps/default/keymap.c
@@ -0,0 +1,199 @@
+#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 layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ RGBRST
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT( \
+ //,-----------------------------------------------. ,-----------------------------------------------.
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_BSPC,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ ADJUST, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH,KC_BSLS,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_LSFT, LOWER,KC_LGUI, KC_LALT, RAISE, KC_RSFT,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_SPC, KC_ENT
+ //`-----------------------------------------------' `-----------------------------------------------'
+ ),
+ [_LOWER] = LAYOUT( \
+ //,-----------------------------------------------. ,-----------------------------------------------.
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_TRNS,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS,KC_HOME,KC_LEFT, KC_UP,KC_RGHT,KC_PGUP, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS, KC_END,KC_PSCR,KC_DOWN, KC_INS,KC_PGDN, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS, KC_TRNS
+ //`-----------------------------------------------' `-----------------------------------------------'
+ ),
+ [_RAISE] = LAYOUT( \
+ //,-----------------------------------------------. ,-----------------------------------------------.
+ KC_TRNS,KC_EXLM, KC_AT,KC_HASH, KC_DLR,KC_PERC, KC_CIRC,KC_PSLS,KC_PAST,KC_PMNS,KC_PPLS,KC_TRNS,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS,KC_RBRC,KC_LABK,KC_ASTR,KC_SCLN,KC_LBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS,KC_BSLS,KC_RABK,KC_LPRN,KC_JYEN,KC_UNDS, KC_6, KC_7, KC_8, KC_9, KC_0,KC_PENT,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+--- ---+-------+-------|
+ KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+--- ---+-------+-------|
+ KC_TRNS, KC_TRNS
+ //`-----------------------------------------------' `-----------------------------------------------'
+ ),
+ [_ADJUST] = LAYOUT( \
+ //,-----------------------------------------------. ,-----------------------------------------------.
+ KC_TRNS, RGBRST,RGB_TOG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS,RGB_HUI,RGB_SAI,RGB_VAI,AG_SWAP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS,RGB_HUD,RGB_SAD,RGB_VAD,AG_NORM, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS,\
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_TRNS, KC_TRNS
+ //`-----------------------------------------------' `-----------------------------------------------'
+ )
+};
+
+int RGB_current_mode;
+
+void keyboard_post_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_get_mode();
+ #endif
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ // set_timelog();
+ }
+
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_get_mode();
+ }
+ #endif
+ return false;
+ break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_get_mode();
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+#ifdef OLED_DRIVER_ENABLE
+
+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) {
+ void render_status(void) {
+ // Host Keyboard Layer Status
+ oled_write_P(PSTR("Layer: "), false);
+
+ switch (get_highest_layer(layer_state)) {
+ case _QWERTY:
+ oled_write_P(PSTR("Default\n"), false);
+ break;
+ case _LOWER:
+ oled_write_P(PSTR("LOWER\n"), false);
+ break;
+ case _RAISE:
+ oled_write_P(PSTR("RAISE\n"), false);
+ break;
+ case _ADJUST:
+ oled_write_P(PSTR("ADJUST\n"), false);
+ break;
+ default:
+ // Or use the write_ln shortcut over adding '\n' to the end of your string
+ oled_write_ln_P(PSTR("Undefined"), false);
+ }
+
+ // Host Keyboard LED Status
+ led_t led_state = host_keyboard_led_state();
+ oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
+ oled_write_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
+ oled_write_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
+ }
+
+
+ void render_logo(void) {
+ static const char PROGMEM qmk_logo[] = {
+ 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, 0x00
+ };
+
+ oled_write_P(qmk_logo, false);
+ }
+
+ if (is_keyboard_master()) {
+ render_status(); // Renders the current keyboard state (layer, lock, caps, scroll, etc)
+ } else {
+ render_logo(); // Renders a static logo
+ }
+}
+#endif
diff --git a/keyboards/arabica37/keymaps/default/rules.mk b/keyboards/arabica37/keymaps/default/rules.mk
new file mode 100644
index 00000000000..c582662134c
--- /dev/null
+++ b/keyboards/arabica37/keymaps/default/rules.mk
@@ -0,0 +1 @@
+OLED_DRIVER_ENABLE = yes
diff --git a/keyboards/arabica37/lib/glcdfont.c b/keyboards/arabica37/lib/glcdfont.c
new file mode 100644
index 00000000000..a4ed2be826c
--- /dev/null
+++ b/keyboards/arabica37/lib/glcdfont.c
@@ -0,0 +1,232 @@
+// 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
+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,
+ 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0x7C, 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, 0x90, 0x90, 0x90, 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, 0x00, 0x00, 0xE0, 0xF0,
+ 0xF8, 0xF8, 0x00, 0xF8, 0xF8, 0xF0,
+ 0xE0, 0x00, 0x00, 0x80, 0x80, 0x80,
+ 0x80, 0x00, 0x00, 0x80, 0x80, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+ 0x00, 0x80, 0x80, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
+ 0x9C, 0x9F, 0x9F, 0x9C, 0x00, 0x00,
+ 0x00, 0x00, 0x80, 0x80, 0x00, 0x80,
+ 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x80, 0x80, 0x00, 0x80, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
+ 0x00, 0x00, 0x80, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x60, 0x18,
+ 0x07, 0x00, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
+ 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
+ 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
+ 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
+ 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
+ 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x20, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x1F, 0x1F, 0x1F, 0x1F,
+ 0x00, 0x00, 0xC6, 0xE7, 0xF7, 0xF7,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFE, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
+ 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0x9F,
+ 0x9F, 0x9F, 0x9E, 0x00, 0x00, 0xE7,
+ 0xF7, 0xF7, 0xF7, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFE, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+ 0x03, 0x00, 0x7F, 0x7F, 0x3F, 0x1E,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0,
+ 0x30, 0x0C, 0x02, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
+ 0x07, 0xF7, 0xF3, 0xF3, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
+ 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
+ 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
+ 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
+ 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
+ 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x1F, 0x1F,
+ 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x1F,
+ 0x1F, 0x00, 0x00, 0x1F, 0x1F, 0x1F,
+ 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x07, 0x0F, 0x0F, 0x1F,
+ 0x00, 0x1F, 0x1F, 0x0F, 0x07, 0x00,
+ 0x00, 0x07, 0x0F, 0x0F, 0x1F, 0x00,
+ 0x1F, 0x1F, 0x0F, 0x07, 0x00, 0x00,
+ 0x1F, 0x1F, 0x1F, 0x1F, 0x00, 0x00,
+ 0x07, 0x0F, 0x1F, 0x1F, 0x00, 0x1F,
+ 0x0F, 0x0F, 0x07, 0x00, 0x00, 0x07,
+ 0x0F, 0x1F, 0x1F, 0x00, 0x1F, 0x0F,
+ 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xE0, 0xF0, 0xF0,
+ 0xE0, 0x00, 0xFF, 0xFE, 0xFE, 0x38,
+ 0x00, 0x60, 0x10, 0x0C, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0x7F, 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,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/arabica37/readme.md b/keyboards/arabica37/readme.md
new file mode 100644
index 00000000000..6cbe98c187d
--- /dev/null
+++ b/keyboards/arabica37/readme.md
@@ -0,0 +1,15 @@
+# Arabica3/7
+
+
+
+A split keyboard with 3x6 column staggered keys, 1 pinkey and 3 thumb keys.
+
+* Keyboard Maintainer: [CalciumNitride](https://github.com/CalciumNitride)
+* Hardware Supported: Arabica3/7 PCB, Pro Micro
+* Hardware Availability: [PCB & Case Data](https://github.com/calciumnitride/arabica37)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make arabica37/rev1: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/arabica37/rev1/config.h b/keyboards/arabica37/rev1/config.h
new file mode 100644
index 00000000000..5db7e32fc6f
--- /dev/null
+++ b/keyboards/arabica37/rev1/config.h
@@ -0,0 +1,82 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER CalciumNitride
+#define PRODUCT Arabica3/7
+#define DESCRIPTION A split keyboard with 3x6 column staggered keys, 1 pinkie key and 3 thumb keys
+
+#define USE_SERIAL
+#define SOFT_SERIAL_PIN D2
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+#define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+
+// wiring of each half
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
+// #define MATRIX_COL_PINS { B2, B3, B1, F7, F6, F5, F4 } //uncomment this line and comment line above if you need to reverse left-to-right key order
+
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/* key combination for command */
+
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 50 // Number of LEDs
+#define RGBLED_SPLIT {25, 25}
+/*
+ * 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
diff --git a/keyboards/arabica37/rev1/rev1.c b/keyboards/arabica37/rev1/rev1.c
new file mode 100644
index 00000000000..22fc63b0e96
--- /dev/null
+++ b/keyboards/arabica37/rev1/rev1.c
@@ -0,0 +1 @@
+#include "arabica37.h"
diff --git a/keyboards/arabica37/rev1/rev1.h b/keyboards/arabica37/rev1/rev1.h
new file mode 100644
index 00000000000..316de77f1da
--- /dev/null
+++ b/keyboards/arabica37/rev1/rev1.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "arabica37.h"
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L26, L31, L32, R26, R30, R32, \
+ L30, R31 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L26, KC_NO, KC_NO, L30, L31, L32 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R32, KC_NO, KC_NO, R31, R30, R26 } \
+ }
diff --git a/keyboards/arabica37/rev1/rules.mk b/keyboards/arabica37/rev1/rules.mk
new file mode 100644
index 00000000000..10c5ab28bb9
--- /dev/null
+++ b/keyboards/arabica37/rev1/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/ares/rules.mk b/keyboards/ares/rules.mk
index dc2bb40a3d4..076cbdc39ab 100644
--- a/keyboards/ares/rules.mk
+++ b/keyboards/ares/rules.mk
@@ -20,5 +20,3 @@ COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no
WS2812_DRIVER = i2c
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/arisu/arisu.c b/keyboards/arisu/arisu.c
new file mode 100644
index 00000000000..443b67e9bf6
--- /dev/null
+++ b/keyboards/arisu/arisu.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 Fate
+ *
+ * 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 .
+ */
+#include "arisu.h"
diff --git a/keyboards/arisu/arisu.h b/keyboards/arisu/arisu.h
new file mode 100644
index 00000000000..1d123502ad4
--- /dev/null
+++ b/keyboards/arisu/arisu.h
@@ -0,0 +1,42 @@
+/* Copyright 2019 Fate
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* 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 XXX KC_NO
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, k0E, k1E, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k2E, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k3E, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3D, \
+ k40, k42, k44, 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, k2C, XXX, k2E }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, XXX, k3D, k3E }, \
+ { k40, XXX, k42, XXX, k44, k45, XXX, k47, XXX, k49, XXX, XXX, k4C, k4D, k4E } \
+}
diff --git a/keyboards/arisu/config.h b/keyboards/arisu/config.h
new file mode 100644
index 00000000000..d23cf9102bf
--- /dev/null
+++ b/keyboards/arisu/config.h
@@ -0,0 +1,208 @@
+/*
+Copyright 2019 Fate
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFA7E
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Fate
+#define PRODUCT arisu
+#define DESCRIPTION alice counterpart keyboard
+
+/* 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 { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B0, B7, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+// #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
+// #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
+
+/* number of backlight levels */
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
diff --git a/keyboards/arisu/keymaps/default/keymap.c b/keyboards/arisu/keymaps/default/keymap.c
new file mode 100644
index 00000000000..2563a36893b
--- /dev/null
+++ b/keyboards/arisu/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2019 Fate
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ 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_GRV, 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_BSPC, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, MO(1),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ _______, 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_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/arisu/keymaps/default/readme.md b/keyboards/arisu/keymaps/default/readme.md
new file mode 100644
index 00000000000..f6d782cd996
--- /dev/null
+++ b/keyboards/arisu/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for arisu
\ No newline at end of file
diff --git a/keyboards/arisu/keymaps/fate/keymap.c b/keyboards/arisu/keymaps/fate/keymap.c
new file mode 100644
index 00000000000..f737b4d19a3
--- /dev/null
+++ b/keyboards/arisu/keymaps/fate/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2019 Fate
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum arisu_layers {
+ _QWERTY,
+ _FN,
+ _ADJUST
+};
+
+// Tap Dance Declarations
+enum {
+ TD_LALT_LGUI = 0,
+ TD_RALT_RGUI
+};
+
+#define FN MO(_FN)
+#define ADJUST MO(_ADJUST)
+#define LALT_LG TD(TD_LALT_LGUI)
+#define RALT_RG TD(TD_RALT_RGUI)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, 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_BSPC, KC_PGDN,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, ADJUST,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, LALT_LG, KC_SPC, FN, KC_SPC, RALT_RG, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, KC_DEL, _______,
+ _______, 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_APP, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______,
+ _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
+
+// Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // Tap once for L-Alt, twice for L-GUI
+ [TD_LALT_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_LALT, KC_LGUI),
+ // Tap once for R-Alt, twice for R-GUI
+ [TD_RALT_RGUI] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_RGUI)
+};
diff --git a/keyboards/arisu/keymaps/fate/readme.md b/keyboards/arisu/keymaps/fate/readme.md
new file mode 100644
index 00000000000..c1239a09ffc
--- /dev/null
+++ b/keyboards/arisu/keymaps/fate/readme.md
@@ -0,0 +1 @@
+# The keymap of arisu's creator
\ No newline at end of file
diff --git a/keyboards/arisu/keymaps/fate/rules.mk b/keyboards/arisu/keymaps/fate/rules.mk
new file mode 100644
index 00000000000..e5ddcae8d92
--- /dev/null
+++ b/keyboards/arisu/keymaps/fate/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/arisu/keymaps/kresnak/keymap.c b/keyboards/arisu/keymaps/kresnak/keymap.c
new file mode 100644
index 00000000000..0a4b88367da
--- /dev/null
+++ b/keyboards/arisu/keymaps/kresnak/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2019 Fate
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+
+// Defines the keycodes used by our macros in process_record_user
+
+#define FN MO(1)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_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_BSPC, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, FN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, KC_HOME,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, KC_END,
+ _______, 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_BSLS, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/arisu/keymaps/via/keymap.c b/keyboards/arisu/keymaps/via/keymap.c
new file mode 100644
index 00000000000..3549a1bdea4
--- /dev/null
+++ b/keyboards/arisu/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+/* Copyright 2019 Fate
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ 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_GRV, 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_BSPC, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, MO(1),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ _______, 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_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/arisu/keymaps/via/rules.mk b/keyboards/arisu/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/arisu/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/arisu/readme.md b/keyboards/arisu/readme.md
new file mode 100644
index 00000000000..f6eab67158c
--- /dev/null
+++ b/keyboards/arisu/readme.md
@@ -0,0 +1,17 @@
+# arisu
+
+
+
+
+
+A keyboard inspired by Lyn's EM7 and TGR Alice.
+
+* Keyboard Maintainer: [Fate](https://github.com/FateNozomi)
+* Hardware Supported: Arisu
+* Hardware Availability: [PCB](https://github.com/FateNozomi/arisu-pcb) + [Case](https://github.com/FateNozomi/arisu-case)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make arisu: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/arisu/rules.mk b/keyboards/arisu/rules.mk
new file mode 100644
index 00000000000..de04a1164a4
--- /dev/null
+++ b/keyboards/arisu/rules.mk
@@ -0,0 +1,24 @@
+# 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 = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/at101_bh/at101_bh.c b/keyboards/at101_bh/at101_bh.c
new file mode 100644
index 00000000000..3b519373b07
--- /dev/null
+++ b/keyboards/at101_bh/at101_bh.c
@@ -0,0 +1 @@
+#include "at101_bh.h"
diff --git a/keyboards/at101_bh/at101_bh.h b/keyboards/at101_bh/at101_bh.h
new file mode 100644
index 00000000000..54655cf60e8
--- /dev/null
+++ b/keyboards/at101_bh/at101_bh.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K0000, K0100, K0001, K0101, K0002, K0102, K0003, K0103, K0004, K0104, K0005, K0105, K0006, K0106, K0007, K0107, \
+ K0200, K0300, K0201, K0301, K0202, K0302, K0203, K0303, K0204, K0304, K0205, K0305, K0206, K0306, K0207, K0307, K0208, K0308, K0209, K0309, K0009, \
+ K0400, K0500, K0401, K0501, K0402, K0502, K0403, K0503, K0404, K0504, K0405, K0505, K0406, K0506, K0407, K0507, K0408, K0508, K0409, K0509, K0109, \
+ K0600, K0700, K0601, K0701, K0602, K0702, K0603, K0703, K0604, K0704, K0605, K0705, K0606, K0608, K0708, K0609, K0709, \
+ K0800, K1101, K0900, K0801, K0901, K0802, K0902, K0803, K0903, K0804, K0904, K0805, K0905, K0806, K0807, K0808, K0908, K0809, K0909, \
+ K1000, K1100, K1001, K1102, K1005, K1105, K1006, K1106, K1007, K1107, K1008, K1108, K1009 \
+) { \
+ { K0000, K0001, K0002, K0003, K0004, K0005, K0006, K0007, KC_NO, K0009 }, \
+ { K0100, K0101, K0102, K0103, K0104, K0105, K0106, K0107, KC_NO, K0109 }, \
+ { K0200, K0201, K0202, K0203, K0204, K0205, K0206, K0207, K0208, K0209 }, \
+ { K0300, K0301, K0302, K0303, K0304, K0305, K0306, K0307, K0308, K0309 }, \
+ { K0400, K0401, K0402, K0403, K0404, K0405, K0406, K0407, K0408, K0409 }, \
+ { K0500, K0501, K0502, K0503, K0504, K0505, K0506, K0507, K0508, K0509 }, \
+ { K0600, K0601, K0602, K0603, K0604, K0605, K0606, KC_NO, K0608, K0609 }, \
+ { K0700, K0701, K0702, K0703, K0704, K0705, KC_NO, KC_NO, K0708, K0709 }, \
+ { K0800, K0801, K0802, K0803, K0804, K0805, K0806, K0807, K0808, K0809 }, \
+ { K0900, K0901, K0902, K0903, K0904, K0905, KC_NO, KC_NO, K0908, K0909 }, \
+ { K1000, K1001, KC_NO, KC_NO, KC_NO, K1005, K1006, K1007, K1008, K1009 }, \
+ { K1100, K1101, K1102, KC_NO, KC_NO, K1105, K1106, K1107, K1108, KC_NO } \
+}
diff --git a/keyboards/at101_bh/config.h b/keyboards/at101_bh/config.h
new file mode 100644
index 00000000000..6928118b796
--- /dev/null
+++ b/keyboards/at101_bh/config.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER blindassassin111
+#define PRODUCT AT101_BH PCB
+#define DESCRIPTION Replacement AT101 PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 10
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F0, F1, F4, D4, F6, F5, F7, B6, B5, D5, C7, C6 }
+#define MATRIX_COL_PINS { D1, D0, B7, B3, B2, B1, B0, E6, D2, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/* force n-key rollover*/
+#define FORCE_NKRO
diff --git a/keyboards/at101_bh/info.json b/keyboards/at101_bh/info.json
new file mode 100644
index 00000000000..1d28dc230bd
--- /dev/null
+++ b/keyboards/at101_bh/info.json
@@ -0,0 +1,121 @@
+{
+ "keyboard_name": "AT101 BH PCB",
+ "keyboard_folder": "at101_bh",
+ "url": "https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html",
+ "maintainer": "qmk, blindassassin111",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"Grave", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Keypad /", "x":19.5, "y":1.5},
+ {"label":"Keypad *", "x":20.5, "y":1.5},
+ {"label":"Keypad -", "x":21.5, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"LBracket", "x":11.5, "y":2.5},
+ {"label":"RBracket]", "x":12.5, "y":2.5},
+ {"label":"Backslash", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Keypad 7", "x":18.5, "y":2.5},
+ {"label":"Keypad 8", "x":19.5, "y":2.5},
+ {"label":"Keypad 9", "x":20.5, "y":2.5},
+ {"label":"Keypad +", "x":21.5, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":"Semicolon", "x":10.75, "y":3.5},
+ {"label":"Quote", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Keypad 4", "x":18.5, "y":3.5},
+ {"label":"Keypad 5", "x":19.5, "y":3.5},
+ {"label":"Keypad 6", "x":20.5, "y":3.5},
+ {"label":"Keypad =", "x":21.5, "y":3.5},
+ {"label":"LShift", "x":0, "y":4.5, "w":1.25},
+ {"label":"ISO Backslash", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"Comma", "x":9.25, "y":4.5},
+ {"label":"Period", "x":10.25, "y":4.5},
+ {"label":"Slash", "x":11.25, "y":4.5},
+ {"label":"RShift", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"Fn", "x":14, "y":4.5},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Keypad 1", "x":18.5, "y":4.5},
+ {"label":"Keypad 2", "x":19.5, "y":4.5},
+ {"label":"Keypad 3", "x":20.5, "y":4.5},
+ {"label":"Keypad Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"LCtrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"LAlt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"RAlt", "x":10, "y":5.5, "w":1.25},
+ {"label":"RGUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"RCtrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Keypad 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Keypad .", "x":20.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/at101_blackheart/keymaps/default/keymap.c b/keyboards/at101_bh/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/at101_blackheart/keymaps/default/keymap.c
rename to keyboards/at101_bh/keymaps/default/keymap.c
diff --git a/keyboards/at101_bh/readme.md b/keyboards/at101_bh/readme.md
new file mode 100644
index 00000000000..8a9ce2496ff
--- /dev/null
+++ b/keyboards/at101_bh/readme.md
@@ -0,0 +1,15 @@
+# AT101 BH PCB
+
+
+
+A replacement PCB for AT101 keyboards.
+
+Keyboard Maintainer: QMK Community and blindassassin111
+Hardware Supported: AT101 BH PCB
+Hardware Availability: https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html
+
+Make example for this keyboard (after setting up your build environment):
+
+ make at101_bh: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/at101_blackheart/rules.mk b/keyboards/at101_bh/rules.mk
similarity index 100%
rename from keyboards/at101_blackheart/rules.mk
rename to keyboards/at101_bh/rules.mk
diff --git a/keyboards/at101_blackheart/at101_blackheart.c b/keyboards/at101_blackheart/at101_blackheart.c
deleted file mode 100644
index aa07a786436..00000000000
--- a/keyboards/at101_blackheart/at101_blackheart.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "at101_blackheart.h"
diff --git a/keyboards/at101_blackheart/at101_blackheart.h b/keyboards/at101_blackheart/at101_blackheart.h
deleted file mode 100644
index 24ac1b7c541..00000000000
--- a/keyboards/at101_blackheart/at101_blackheart.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef at101_blackheart_H
-#define at101_blackheart_H
-
-#include "quantum.h"
-
-#define LAYOUT( \
- K0000, K0100, K0001, K0101, K0002, K0102, K0003, K0103, K0004, K0104, K0005, K0105, K0006, K0106, K0007, K0107, \
- K0200, K0300, K0201, K0301, K0202, K0302, K0203, K0303, K0204, K0304, K0205, K0305, K0206, K0306, K0207, K0307, K0208, K0308, K0209, K0309, K0009, \
- K0400, K0500, K0401, K0501, K0402, K0502, K0403, K0503, K0404, K0504, K0405, K0505, K0406, K0506, K0407, K0507, K0408, K0508, K0409, K0509, K0109, \
- K0600, K0700, K0601, K0701, K0602, K0702, K0603, K0703, K0604, K0704, K0605, K0705, K0606, K0608, K0708, K0609, K0709, \
- K0800, K1101, K0900, K0801, K0901, K0802, K0902, K0803, K0903, K0804, K0904, K0805, K0905, K0806, K0807, K0808, K0908, K0809, K0909, \
- K1000, K1100, K1001, K1102, K1005, K1105, K1006, K1106, K1007, K1107, K1008, K1108, K1009 \
-) { \
- { K0000, K0001, K0002, K0003, K0004, K0005, K0006, K0007, KC_NO, K0009 }, \
- { K0100, K0101, K0102, K0103, K0104, K0105, K0106, K0107, KC_NO, K0109 }, \
- { K0200, K0201, K0202, K0203, K0204, K0205, K0206, K0207, K0208, K0209 }, \
- { K0300, K0301, K0302, K0303, K0304, K0305, K0306, K0307, K0308, K0309 }, \
- { K0400, K0401, K0402, K0403, K0404, K0405, K0406, K0407, K0408, K0409 }, \
- { K0500, K0501, K0502, K0503, K0504, K0505, K0506, K0507, K0508, K0509 }, \
- { K0600, K0601, K0602, K0603, K0604, K0605, K0606, KC_NO, K0608, K0609 }, \
- { K0700, K0701, K0702, K0703, K0704, K0705, KC_NO, KC_NO, K0708, K0709 }, \
- { K0800, K0801, K0802, K0803, K0804, K0805, K0806, K0807, K0808, K0809 }, \
- { K0900, K0901, K0902, K0903, K0904, K0905, KC_NO, KC_NO, K0908, K0909 }, \
- { K1000, K1001, KC_NO, KC_NO, KC_NO, K1005, K1006, K1007, K1008, K1009 }, \
- { K1100, K1101, K1102, KC_NO, KC_NO, K1105, K1106, K1107, K1108, KC_NO } \
-}
-
-#endif
diff --git a/keyboards/at101_blackheart/config.h b/keyboards/at101_blackheart/config.h
deleted file mode 100644
index 83814c6486c..00000000000
--- a/keyboards/at101_blackheart/config.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#pragma once
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER blindassassin111
-#define PRODUCT AT101_Blackheart PCB
-#define DESCRIPTION Replacement AT101 PCB
-
-/* key matrix size */
-#define MATRIX_ROWS 12
-#define MATRIX_COLS 10
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { F0, F1, F4, D4, F6, F5, F7, B6, B5, D5, C7, C6 }
-#define MATRIX_COL_PINS { D1, D0, B7, B3, B2, B1, B0, E6, D2, D3 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* 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
-
-/* force n-key rollover*/
-#define FORCE_NKRO
diff --git a/keyboards/at101_blackheart/info.json b/keyboards/at101_blackheart/info.json
deleted file mode 100644
index 4bef46712d1..00000000000
--- a/keyboards/at101_blackheart/info.json
+++ /dev/null
@@ -1,121 +0,0 @@
-{
- "keyboard_name": "AT101 Blackheart PCB",
- "keyboard_folder": "at101_blackheart",
- "url": "https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html",
- "maintainer": "qmk, blindassassin111",
- "width": 22.5,
- "height": 6.5,
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label":"Esc", "x":0, "y":0},
- {"label":"F1", "x":2, "y":0},
- {"label":"F2", "x":3, "y":0},
- {"label":"F3", "x":4, "y":0},
- {"label":"F4", "x":5, "y":0},
- {"label":"F5", "x":6.5, "y":0},
- {"label":"F6", "x":7.5, "y":0},
- {"label":"F7", "x":8.5, "y":0},
- {"label":"F8", "x":9.5, "y":0},
- {"label":"F9", "x":11, "y":0},
- {"label":"F10", "x":12, "y":0},
- {"label":"F11", "x":13, "y":0},
- {"label":"F12", "x":14, "y":0},
- {"label":"Print Screen", "x":15.25, "y":0},
- {"label":"Scroll Lock", "x":16.25, "y":0},
- {"label":"Pause", "x":17.25, "y":0},
- {"label":"Grave", "x":0, "y":1.5},
- {"label":"1", "x":1, "y":1.5},
- {"label":"2", "x":2, "y":1.5},
- {"label":"3", "x":3, "y":1.5},
- {"label":"4", "x":4, "y":1.5},
- {"label":"5", "x":5, "y":1.5},
- {"label":"6", "x":6, "y":1.5},
- {"label":"7", "x":7, "y":1.5},
- {"label":"8", "x":8, "y":1.5},
- {"label":"9", "x":9, "y":1.5},
- {"label":"0", "x":10, "y":1.5},
- {"label":"-", "x":11, "y":1.5},
- {"label":"=", "x":12, "y":1.5},
- {"label":"Backspace", "x":13, "y":1.5, "w":2},
- {"label":"Insert", "x":15.25, "y":1.5},
- {"label":"Home", "x":16.25, "y":1.5},
- {"label":"Page Up", "x":17.25, "y":1.5},
- {"label":"Num Lock", "x":18.5, "y":1.5},
- {"label":"Keypad /", "x":19.5, "y":1.5},
- {"label":"Keypad *", "x":20.5, "y":1.5},
- {"label":"Keypad -", "x":21.5, "y":1.5},
- {"label":"Tab", "x":0, "y":2.5, "w":1.5},
- {"label":"Q", "x":1.5, "y":2.5},
- {"label":"W", "x":2.5, "y":2.5},
- {"label":"E", "x":3.5, "y":2.5},
- {"label":"R", "x":4.5, "y":2.5},
- {"label":"T", "x":5.5, "y":2.5},
- {"label":"Y", "x":6.5, "y":2.5},
- {"label":"U", "x":7.5, "y":2.5},
- {"label":"I", "x":8.5, "y":2.5},
- {"label":"O", "x":9.5, "y":2.5},
- {"label":"P", "x":10.5, "y":2.5},
- {"label":"LBracket", "x":11.5, "y":2.5},
- {"label":"RBracket]", "x":12.5, "y":2.5},
- {"label":"Backslash", "x":13.5, "y":2.5, "w":1.5},
- {"label":"Delete", "x":15.25, "y":2.5},
- {"label":"End", "x":16.25, "y":2.5},
- {"label":"Page Down", "x":17.25, "y":2.5},
- {"label":"Keypad 7", "x":18.5, "y":2.5},
- {"label":"Keypad 8", "x":19.5, "y":2.5},
- {"label":"Keypad 9", "x":20.5, "y":2.5},
- {"label":"Keypad +", "x":21.5, "y":2.5},
- {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
- {"label":"A", "x":1.75, "y":3.5},
- {"label":"S", "x":2.75, "y":3.5},
- {"label":"D", "x":3.75, "y":3.5},
- {"label":"F", "x":4.75, "y":3.5},
- {"label":"G", "x":5.75, "y":3.5},
- {"label":"H", "x":6.75, "y":3.5},
- {"label":"J", "x":7.75, "y":3.5},
- {"label":"K", "x":8.75, "y":3.5},
- {"label":"L", "x":9.75, "y":3.5},
- {"label":"Semicolon", "x":10.75, "y":3.5},
- {"label":"Quote", "x":11.75, "y":3.5},
- {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
- {"label":"Keypad 4", "x":18.5, "y":3.5},
- {"label":"Keypad 5", "x":19.5, "y":3.5},
- {"label":"Keypad 6", "x":20.5, "y":3.5},
- {"label":"Keypad =", "x":21.5, "y":3.5},
- {"label":"LShift", "x":0, "y":4.5, "w":1.25},
- {"label":"ISO Backslash", "x":1.25, "y":4.5},
- {"label":"Z", "x":2.25, "y":4.5},
- {"label":"X", "x":3.25, "y":4.5},
- {"label":"C", "x":4.25, "y":4.5},
- {"label":"V", "x":5.25, "y":4.5},
- {"label":"B", "x":6.25, "y":4.5},
- {"label":"N", "x":7.25, "y":4.5},
- {"label":"M", "x":8.25, "y":4.5},
- {"label":"Comma", "x":9.25, "y":4.5},
- {"label":"Period", "x":10.25, "y":4.5},
- {"label":"Slash", "x":11.25, "y":4.5},
- {"label":"RShift", "x":12.25, "y":4.5, "w":1.75},
- {"label":"Fn", "x":14, "y":4.5},
- {"label":"Up", "x":16.25, "y":4.5},
- {"label":"Keypad 1", "x":18.5, "y":4.5},
- {"label":"Keypad 2", "x":19.5, "y":4.5},
- {"label":"Keypad 3", "x":20.5, "y":4.5},
- {"label":"Keypad Enter", "x":21.5, "y":4.5, "h":2},
- {"label":"LCtrl", "x":0, "y":5.5, "w":1.25},
- {"label":"LGUI", "x":1.25, "y":5.5, "w":1.25},
- {"label":"LAlt", "x":2.5, "y":5.5, "w":1.25},
- {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
- {"label":"RAlt", "x":10, "y":5.5, "w":1.25},
- {"label":"RGUI", "x":11.25, "y":5.5, "w":1.25},
- {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
- {"label":"RCtrl", "x":13.75, "y":5.5, "w":1.25},
- {"label":"Left", "x":15.25, "y":5.5},
- {"label":"Down", "x":16.25, "y":5.5},
- {"label":"Right", "x":17.25, "y":5.5},
- {"label":"Keypad 0", "x":18.5, "y":5.5, "w":2},
- {"label":"Keypad .", "x":20.5, "y":5.5}
- ]
- }
- }
-}
diff --git a/keyboards/at101_blackheart/readme.md b/keyboards/at101_blackheart/readme.md
deleted file mode 100644
index d435d6955aa..00000000000
--- a/keyboards/at101_blackheart/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# AT101 Blackheart PCB
-
-
-
-A replacement PCB for AT101 keyboards.
-
-Keyboard Maintainer: QMK Community and blindassassin111
-Hardware Supported: AT101 blackheart PCB
-Hardware Availability: https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html
-
-Make example for this keyboard (after setting up your build environment):
-
- make at101_blackheart: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/atomic/keymaps/pvc/keymap.c b/keyboards/atomic/keymaps/pvc/keymap.c
index 33b3a9d824b..361d702c5bc 100644
--- a/keyboards/atomic/keymaps/pvc/keymap.c
+++ b/keyboards/atomic/keymaps/pvc/keymap.c
@@ -102,7 +102,7 @@ enum keyboard_macros {
#define SC_CCLS LCTL(KC_F4)
#define TG_NKRO MAGIC_TOGGLE_NKRO
-#define OS_SHFT KC_FN0
+#define OS_SHFT OSM(MOD_LSFT)
#define ________________ _______, _______
#define XXXXXXXXXXXXXXXX XXXXXXX, XXXXXXX
@@ -258,10 +258,6 @@ void persistent_default_layer_set(uint16_t default_layer) {
default_layer_set(default_layer);
}
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_MODS_ONESHOT(MOD_LSFT),
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
diff --git a/keyboards/atreus/astar_mirrored/config.h b/keyboards/atreus/astar_mirrored/config.h
index 273f23a847b..75155044def 100644
--- a/keyboards/atreus/astar_mirrored/config.h
+++ b/keyboards/atreus/astar_mirrored/config.h
@@ -28,7 +28,7 @@
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
-#define PDBDOWN 1
+#define PCBDOWN 1
#define MATRIX_ROW_PINS { D0, D1, D3, D2 }
#define MATRIX_COL_PINS { B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 }
diff --git a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
index 0fda245e2ee..3f769494494 100644
--- a/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
+++ b/keyboards/atreus/keymaps/dvorak_42_key/keymap.c
@@ -23,6 +23,7 @@
#define AS_GO_IMPLEMENTATION LCTL(LALT(KC_B))
#define AS_CLOSETAB LCTL(KC_F4)
#define AS_CLOSETOOLWINDOW LCTL(LSFT(KC_F4))
+#define AS_ALTENTER LALT(KC_ENTER)
enum custom_keycodes {
PLACEHOLDER = SAFE_RANGE, // can always be here
@@ -35,13 +36,16 @@ enum custom_keycodes {
CLOUD9_GOTO_LINE,
CLOUD9_NAVIGATE,
+ // Windows 10 macros
+ W10_TASKVIEW,
+ W10_WORKSPACE_LEFT,
+ W10_WORKSPACE_RIGHT,
+
};
// building instructions:
// make atreus:dvorak_42_key
-// flashing instructions:
-// avrdude -p atmega32u4 -c avr109 -U flash:w:atreus_dvorak_42_key.hex -P COM7
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT(
@@ -55,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, AS_GO_IMPLEMENTATION, RCTL(KC_Z), RCTL(KC_S), MEH(KC_A), MEH(KC_B), KC_HOME, KC_UP, KC_END, KC_PGUP,
AS_BACK, AS_SYMBOL, RSFT(KC_TAB), KC_TAB, SHELL_DEL_WORD, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT),
AS_FINDUSAGE, AS_CLASS, AS_TABLEFT, AS_TABRIGHT, AS_CLOSETAB, KC_TRNS, RCTL(KC_C), RCTL(KC_X), RCTL(KC_V), KC_PGDOWN,
- AS_CLOSETOOLWINDOW, AS_GO_DECLARATION, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE)
+ AS_CLOSETOOLWINDOW, AS_GO_DECLARATION, KC_TRNS, KC_TRNS, AS_ALTENTER, KC_TRNS, KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_DELETE, LCTL(KC_DELETE)
),
[KEYSEL] = LAYOUT(
@@ -73,10 +77,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[BROWSER_CONTROL] = LAYOUT(
- MEH(KC_0), KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, MEH(KC_9),
- MEH(KC_1), KC_MS_L, KC_MS_D, KC_MS_R, MEH(KC_6), KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
- MEH(KC_2), MEH(KC_3), MEH(KC_4), MEH(KC_5), MEH(KC_7), MEH(KC_8), RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), RSFT(RCTL(KC_TAB)), KC_TRNS, KC_TRNS, KC_TRNS
+ MEH(KC_0), KC_BTN3, KC_MS_U, KC_BTN1, KC_BTN2, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, MEH(KC_9),
+ MEH(KC_1), KC_MS_L, KC_MS_D, KC_MS_R, MEH(KC_6), KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT),
+ MEH(KC_2), W10_TASKVIEW, W10_WORKSPACE_LEFT, W10_WORKSPACE_RIGHT, MEH(KC_7), MEH(KC_8), RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RCTL(KC_W), RCTL(KC_T), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
@@ -108,9 +112,19 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
SEND_STRING(SS_LCTRL("e"));
return true;
break;
+ case W10_TASKVIEW:
+ tap_code16(G(KC_TAB));
+ return true;
+ break;
+ case W10_WORKSPACE_LEFT:
+ tap_code16(G(C(KC_LEFT)));
+ return true;
+ break;
+ case W10_WORKSPACE_RIGHT:
+ tap_code16(G(C(KC_RIGHT)));
+ break;
}
}
return true;
}
-
diff --git a/keyboards/atreus62/keymaps/atreus52/keymap.c b/keyboards/atreus62/keymaps/atreus52/keymap.c
index c7dcb67653c..31a01ccd879 100644
--- a/keyboards/atreus62/keymaps/atreus52/keymap.c
+++ b/keyboards/atreus62/keymaps/atreus52/keymap.c
@@ -10,6 +10,8 @@
#define KC_RAIS MO(RAISE)
#define KC_LOWR MO(LOWER)
+#define KC_TGBD TG(BDO)
+#define KC_TGRS TG(RESETL)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DVORAK] = LAYOUT_kc(
@@ -17,7 +19,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
NO, QUOT, COMM, DOT, P, Y, F, G, C, R, L, NO, \
NO, A, O, E, U, I, D, H, T, N, S, NO, \
NO, SCLN, Q, J, K, X, B, M, W, V, Z, NO, \
- NO, FN2, LALT, LCTL, LOWR, LSFT, BSPC, ENT, SPC, RAIS, LGUI, LEFT, RGHT, NO
+ NO, TGBD, LALT, LCTL, LOWR, LSFT, BSPC, ENT, SPC, RAIS, LGUI, LEFT, RGHT, NO
),
[QWERTY] = LAYOUT_kc(
@@ -25,7 +27,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
NO, Q, W, E, R, T, Y, U, I, O, P, NO, \
NO, A, S, D, F, G, H, J, K, L, SCLN, NO, \
NO, Z, X, C, V, B, N, M, COMM, DOT, SLSH, NO, \
- NO, FN2, LALT, LCTL, LOWR, LSFT, BSPC, ENT, SPC, RAIS, LGUI, LEFT, RGHT, NO
+ NO, TGBD, LALT, LCTL, LOWR, LSFT, BSPC, ENT, SPC, RAIS, LGUI, LEFT, RGHT, NO
),
[RAISE] = LAYOUT_kc(
@@ -33,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
NO, TILD, GRV, LCBR, RCBR, DQUO, QUOT, EQL, PLUS, MINS, QUES, NO, \
NO, ESC, TAB, LPRN, RPRN, BSLS, SLSH, LEFT, DOWN, UP, RGHT, NO, \
NO, TRNS, TRNS, LBRC, RBRC, TRNS, INS, PIPE, UNDS, TRNS, TRNS, NO, \
- NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, FN3, NO
+ NO, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TGRS, NO
),
[LOWER] = LAYOUT_kc(
@@ -49,7 +51,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
NO, TAB, Q, W, E, R, 6, Y, I, O, P, NO, \
NO, LSFT, A, S, D, F, 7, G, H, J, K, NO, \
NO, T, Z, X, C, V, 8, B, N, M, L, NO, \
- NO, LCTL, SPC, SPC, SPC, SPC, COMM, ENT, 9, NO, NO, NO, FN2, NO
+ NO, LCTL, SPC, SPC, SPC, SPC, COMM, ENT, 9, NO, NO, NO, TGBD, NO
),
[RESETL] = LAYOUT(
@@ -57,15 +59,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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, KC_NO, KC_NO, KC_FN3,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, TG(RESETL),KC_NO
)
};
-const uint16_t PROGMEM fn_actions[] = {
- [2] = ACTION_LAYER_TOGGLE(BDO), // BDO layer
- [3] = ACTION_LAYER_TOGGLE(RESETL) // RESET layer
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
// MACRODOWN only works in this function
switch (id) {
diff --git a/keyboards/atreus62/keymaps/xyverz/keymap.c b/keyboards/atreus62/keymaps/xyverz/keymap.c
index b852d5d7b96..109d61d8f20 100644
--- a/keyboards/atreus62/keymaps/xyverz/keymap.c
+++ b/keyboards/atreus62/keymaps/xyverz/keymap.c
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
KC_GRV, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
- KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LALT, CTL_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT
+ KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_LALT, CTL_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
),
[_DESTINY] = LAYOUT ( /* Dvorak with minor modifications for playing Destiny 2 and other FPS Looters */
@@ -94,7 +94,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
KC_GRV, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
- KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_DEL, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_ENT
+ KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, LOWER, KC_BSPC, KC_DEL, KC_ENT, KC_SPC, RAISE, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL
),
[_LOWER] = LAYOUT (
diff --git a/keyboards/atxkb/1894/1894.c b/keyboards/atxkb/1894/1894.c
new file mode 100644
index 00000000000..9ac75b91e49
--- /dev/null
+++ b/keyboards/atxkb/1894/1894.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 .
+ */
+#include "1894.h"
diff --git a/keyboards/atxkb/1894/1894.h b/keyboards/atxkb/1894/1894.h
new file mode 100644
index 00000000000..8e541b2cf44
--- /dev/null
+++ b/keyboards/atxkb/1894/1894.h
@@ -0,0 +1,86 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* 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( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K404, K406, K408, K410, K411, K412, K413 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, KC_NO, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413 } \
+}
+
+#define LAYOUT_60_ansi( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K401, K402, K406, K410, K411, K412, K413 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, K213 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO}, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413 } \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K406, K410, K411, K412, K413 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413 } \
+}
+
+#define LAYOUT_60_tsangan_hhkb( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K406, K411, K412, K413 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, K412, K413 } \
+}
diff --git a/keyboards/atxkb/1894/config.h b/keyboards/atxkb/1894/config.h
new file mode 100644
index 00000000000..27acb8afba7
--- /dev/null
+++ b/keyboards/atxkb/1894/config.h
@@ -0,0 +1,169 @@
+/*
+Copyright 2019 Ryota Goto
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5458 // TX
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER atxkb
+#define PRODUCT 1894
+#define DESCRIPTION atxkb 1894
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * 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 { B1, B2, B3, F0, F1 }
+#define MATRIX_COL_PINS { F4, F7, F5, F6, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN D2
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 14
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ // #define RGBLIGHT_LIMIT_VAL 200 /* 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
+
+/* number of backlight levels */
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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/atxkb/1894/info.json b/keyboards/atxkb/1894/info.json
new file mode 100644
index 00000000000..7c44bdf0160
--- /dev/null
+++ b/keyboards/atxkb/1894/info.json
@@ -0,0 +1,277 @@
+{
+ "keyboard_name": "1894",
+ "url": "https://atxkb.com",
+ "maintainer": "austexcn",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Delete", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"|", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Print Screen", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Delete", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Print Screen", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Delete", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Print Screen", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"Win", "x":1.5, "y":4},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+ {"x":4, "y":4, "w":7},
+ {"label":"Alt", "x":11, "y":4, "w":1.5},
+ {"label":"Win", "x":12.5, "y":4},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/atxkb/1894/keymaps/default/keymap.c b/keyboards/atxkb/1894/keymaps/default/keymap.c
new file mode 100644
index 00000000000..65902ae583e
--- /dev/null
+++ b/keyboards/atxkb/1894/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all( /* Base */
+ 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_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,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ ),
+ [_FN] = LAYOUT_all( /* FN */
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
+ _______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_MPLY, KC_MNXT, BL_STEP,
+ _______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
+ _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/atxkb/1894/keymaps/default/readme.md b/keyboards/atxkb/1894/keymaps/default/readme.md
new file mode 100644
index 00000000000..eb6b7baccfe
--- /dev/null
+++ b/keyboards/atxkb/1894/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for 1894
+
+Fits just about everything on two layers.
diff --git a/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c b/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c
new file mode 100644
index 00000000000..410f9b379f7
--- /dev/null
+++ b/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/keymap.c
@@ -0,0 +1,38 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_60_tsangan_hhkb( /* Base */
+ 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_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,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [_FN] = LAYOUT_60_tsangan_hhkb( /* FN */
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
+ _______, _______, KC_PGUP, _______, _______, _______, _______, _______, KC_UP, _______, KC_MPRV, KC_MPLY, KC_MNXT, BL_STEP,
+ _______, KC_HOME, KC_PGDN, KC_END, _______, KC_VOLD, KC_VOLU, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/readme.md b/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/readme.md
new file mode 100644
index 00000000000..712f7fa1aa4
--- /dev/null
+++ b/keyboards/atxkb/1894/keymaps/default_ansi_tsangan/readme.md
@@ -0,0 +1,3 @@
+# The default_ansi_tsangan keymap for 1894
+
+Simplified down to the basic ANSI Tsangan layouts for ease of configuration.
diff --git a/keyboards/atxkb/1894/keymaps/via/keymap.c b/keyboards/atxkb/1894/keymaps/via/keymap.c
new file mode 100644
index 00000000000..67c5cd37eab
--- /dev/null
+++ b/keyboards/atxkb/1894/keymaps/via/keymap.c
@@ -0,0 +1,55 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _FN,
+ _EXTRA_ONE,
+ _EXTRA_TWO
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_all( /* Base */
+ 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_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,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [_FN] = LAYOUT_all( /* FN */
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC,
+ _______, _______, _______, KC_PGUP, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, BL_STEP,
+ _______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______,
+ _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_EXTRA_ONE] = LAYOUT_all( /* Layer 3 */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_EXTRA_TWO] = LAYOUT_all( /* Layer 3 */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
diff --git a/keyboards/atxkb/1894/keymaps/via/readme.md b/keyboards/atxkb/1894/keymaps/via/readme.md
new file mode 100644
index 00000000000..0dc4a94580a
--- /dev/null
+++ b/keyboards/atxkb/1894/keymaps/via/readme.md
@@ -0,0 +1,3 @@
+# The via keymap for 1894
+
+For via configurator use
diff --git a/keyboards/atxkb/1894/keymaps/via/rules.mk b/keyboards/atxkb/1894/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/atxkb/1894/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/atxkb/1894/readme.md b/keyboards/atxkb/1894/readme.md
new file mode 100644
index 00000000000..f62e0758e49
--- /dev/null
+++ b/keyboards/atxkb/1894/readme.md
@@ -0,0 +1,15 @@
+# atxkb 1894
+
+
+
+1894 is a keyboard PCB supporting 60% layouts. It is a revised version of the [Voyager60](https://github.com/ai03-2725/Voyager60) pcb by [ai03](https://github.com/ai03-2725) that supports a JST connector instead of usb-c and has perimeter cutouts for gasket support. The Voyager60 and therefore the 1894 is compatible with ai03's [polaris](https://github.com/austexcn/qmk_firmware/tree/master/keyboards/ai03/polaris) QMK implementation and as such this is just a copy with edits to update the name.
+
+* Keyboard Maintainer: [austexcn](https://github.com/austexcn)
+* Hardware Supported: atxkb Moontower
+* Hardware Availability: [atxkb](https://atxkb.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make atxkb/1894: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/atxkb/1894/rules.mk b/keyboards/atxkb/1894/rules.mk
new file mode 100644
index 00000000000..7910681a315
--- /dev/null
+++ b/keyboards/atxkb/1894/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = yes # 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+LTO_ENABLE = yes
+
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_tsangan_hhkb
diff --git a/keyboards/atxkb/readme.md b/keyboards/atxkb/readme.md
new file mode 100644
index 00000000000..f15245efdc3
--- /dev/null
+++ b/keyboards/atxkb/readme.md
@@ -0,0 +1,3 @@
+# atxkb
+
+Website: [atxkb](https://atxkb.com)
diff --git a/keyboards/baguette/readme.md b/keyboards/baguette/readme.md
index e6188cc9904..501f81b328a 100644
--- a/keyboards/baguette/readme.md
+++ b/keyboards/baguette/readme.md
@@ -5,7 +5,7 @@ Baguette
This is a custom keyboard with backlight inspired by France.
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
Hardware Supported: ATMEGA 32u4 MCU with backlight support.
Hardware Availability: Closed group-buy please contact the runners (Tesletron and Enjoy)
diff --git a/keyboards/bakeneko80/bakeneko80.c b/keyboards/bakeneko80/bakeneko80.c
new file mode 100644
index 00000000000..264979f5508
--- /dev/null
+++ b/keyboards/bakeneko80/bakeneko80.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Koichi Katano
+ *
+ * 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 .
+ */
+
+#include "bakeneko80.h"
\ No newline at end of file
diff --git a/keyboards/bakeneko80/bakeneko80.h b/keyboards/bakeneko80/bakeneko80.h
new file mode 100644
index 00000000000..9c30a575660
--- /dev/null
+++ b/keyboards/bakeneko80/bakeneko80.h
@@ -0,0 +1,44 @@
+/* Copyright 2020 Koichi Katano
+ *
+ * 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 .
+ */
+
+#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_tkl_ansi( \
+ k000, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, k016, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115, k116, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, k216, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k313, \
+ k400, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, k415, \
+ k500, k501, k502, k506, k510, k511, k512, k513, k514, k515, k516 \
+) \
+{ \
+ { k000, KC_NO, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, k016 }, \
+ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, k115, k116 }, \
+ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k214, k215, k216 }, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, KC_NO, k313, KC_NO, KC_NO, KC_NO }, \
+ { k400, KC_NO, k402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k412, KC_NO, KC_NO, k415, KC_NO }, \
+ { k500, k501, k502, KC_NO, KC_NO, KC_NO, k506, KC_NO, KC_NO, KC_NO, k510, k511, k512, k513, k514, k515, k516 } \
+}
diff --git a/keyboards/bakeneko80/config.h b/keyboards/bakeneko80/config.h
new file mode 100644
index 00000000000..04b2569e281
--- /dev/null
+++ b/keyboards/bakeneko80/config.h
@@ -0,0 +1,250 @@
+/*
+Copyright 2020 Koichi Katano
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x8DEF
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Koichi Katano
+#define PRODUCT Bakeneko 80
+#define DESCRIPTION Open source tenkeyless keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+/*
+ * 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, B7, D1, D0 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2 }
+#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 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+/*
+ * 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 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/bakeneko80/info.json b/keyboards/bakeneko80/info.json
new file mode 100644
index 00000000000..4d6b44f05f8
--- /dev/null
+++ b/keyboards/bakeneko80/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Bakeneko 80",
+ "url": "https://github.com/kkatano/bakeneko-80-pcb",
+ "maintainer": "Koichi Katano",
+ "width": 18.25,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT_tkl_ansi": {
+ "key_count": 87,
+ "layout": [{"label":"1", "x":0, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6.5, "y":0}, {"label":"7", "x":7.5, "y":0}, {"label":"8", "x":8.5, "y":0}, {"label":"9", "x":9.5, "y":0}, {"label":"10", "x":11, "y":0}, {"label":"11", "x":12, "y":0}, {"label":"12", "x":13, "y":0}, {"label":"13", "x":14, "y":0}, {"label":"14", "x":15.25, "y":0}, {"label":"15", "x":16.25, "y":0}, {"label":"16", "x":17.25, "y":0}, {"label":"17", "x":0, "y":1.25}, {"label":"18", "x":1, "y":1.25}, {"label":"19", "x":2, "y":1.25}, {"label":"20", "x":3, "y":1.25}, {"label":"21", "x":4, "y":1.25}, {"label":"22", "x":5, "y":1.25}, {"label":"23", "x":6, "y":1.25}, {"label":"24", "x":7, "y":1.25}, {"label":"25", "x":8, "y":1.25}, {"label":"26", "x":9, "y":1.25}, {"label":"27", "x":10, "y":1.25}, {"label":"28", "x":11, "y":1.25}, {"label":"29", "x":12, "y":1.25}, {"label":"30", "x":13, "y":1.25, "w":2}, {"label":"31", "x":15.25, "y":1.25}, {"label":"32", "x":16.25, "y":1.25}, {"label":"33", "x":17.25, "y":1.25}, {"label":"34", "x":0, "y":2.25, "w":1.5}, {"label":"35", "x":1.5, "y":2.25}, {"label":"36", "x":2.5, "y":2.25}, {"label":"37", "x":3.5, "y":2.25}, {"label":"38", "x":4.5, "y":2.25}, {"label":"39", "x":5.5, "y":2.25}, {"label":"40", "x":6.5, "y":2.25}, {"label":"41", "x":7.5, "y":2.25}, {"label":"42", "x":8.5, "y":2.25}, {"label":"43", "x":9.5, "y":2.25}, {"label":"44", "x":10.5, "y":2.25}, {"label":"45", "x":11.5, "y":2.25}, {"label":"46", "x":12.5, "y":2.25}, {"label":"47", "x":13.5, "y":2.25, "w":1.5}, {"label":"48", "x":15.25, "y":2.25}, {"label":"49", "x":16.25, "y":2.25}, {"label":"50", "x":17.25, "y":2.25}, {"label":"51", "x":0, "y":3.25, "w":1.75}, {"label":"52", "x":1.75, "y":3.25}, {"label":"53", "x":2.75, "y":3.25}, {"label":"54", "x":3.75, "y":3.25}, {"label":"55", "x":4.75, "y":3.25}, {"label":"56", "x":5.75, "y":3.25}, {"label":"57", "x":6.75, "y":3.25}, {"label":"58", "x":7.75, "y":3.25}, {"label":"59", "x":8.75, "y":3.25}, {"label":"60", "x":9.75, "y":3.25}, {"label":"61", "x":10.75, "y":3.25}, {"label":"62", "x":11.75, "y":3.25}, {"label":"63", "x":12.75, "y":3.25, "w":2.25}, {"label":"64", "x":0, "y":4.25, "w":2.25}, {"label":"65", "x":2.25, "y":4.25}, {"label":"66", "x":3.25, "y":4.25}, {"label":"67", "x":4.25, "y":4.25}, {"label":"68", "x":5.25, "y":4.25}, {"label":"69", "x":6.25, "y":4.25}, {"label":"70", "x":7.25, "y":4.25}, {"label":"71", "x":8.25, "y":4.25}, {"label":"72", "x":9.25, "y":4.25}, {"label":"73", "x":10.25, "y":4.25}, {"label":"74", "x":11.25, "y":4.25}, {"label":"75", "x":12.25, "y":4.25, "w":2.75}, {"label":"76", "x":16.25, "y":4.25}, {"label":"77", "x":0, "y":5.25, "w":1.25}, {"label":"78", "x":1.25, "y":5.25, "w":1.25}, {"label":"79", "x":2.5, "y":5.25, "w":1.25}, {"label":"80", "x":3.75, "y":5.25, "w":6.25}, {"label":"81", "x":10, "y":5.25, "w":1.25}, {"label":"82", "x":11.25, "y":5.25, "w":1.25}, {"label":"83", "x":12.5, "y":5.25, "w":1.25}, {"label":"84", "x":13.75, "y":5.25, "w":1.25}, {"label":"85", "x":15.25, "y":5.25}, {"label":"86", "x":16.25, "y":5.25}, {"label":"87", "x":17.25, "y":5.25}]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/bakeneko80/keymaps/default/keymap.c b/keyboards/bakeneko80/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ff02728043e
--- /dev/null
+++ b/keyboards/bakeneko80/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2020 Koichi Katano
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(_FN, KC_APP), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FN] = LAYOUT_tkl_ansi(
+ RESET, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_BRID, KC_BRIU, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
\ No newline at end of file
diff --git a/keyboards/bakeneko80/keymaps/default/readme.md b/keyboards/bakeneko80/keymaps/default/readme.md
new file mode 100644
index 00000000000..65fe06599d7
--- /dev/null
+++ b/keyboards/bakeneko80/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for bakeneko80
diff --git a/keyboards/bakeneko80/readme.md b/keyboards/bakeneko80/readme.md
new file mode 100644
index 00000000000..30f1b3e608b
--- /dev/null
+++ b/keyboards/bakeneko80/readme.md
@@ -0,0 +1,13 @@
+# Bakeneko 80
+
+Open source tenkeyless keyboard for DIYers
+
+* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
+* Hardware Supported: Bakeneko 80 PCB
+* Hardware Availability: [PCB](https://github.com/kkatano/bakeneko-80-pcb), [Case and Plate](https://github.com/kkatano/bakeneko-80-case)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bakeneko80: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/bakeneko80/rules.mk b/keyboards/bakeneko80/rules.mk
new file mode 100644
index 00000000000..1f9b6d4daad
--- /dev/null
+++ b/keyboards/bakeneko80/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+LAYOUTS = tkl_ansi
diff --git a/keyboards/bat43/bat43.h b/keyboards/bat43/bat43.h
index cf21486a9e5..42d44107b4a 100644
--- a/keyboards/bat43/bat43.h
+++ b/keyboards/bat43/bat43.h
@@ -1,46 +1,10 @@
-/* Copyright 2020 yfuku
- *
- * 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 .
- */
-
#pragma once
+#ifdef KEYBOARD_bat43_rev1
+ #include "rev1.h"
+#endif
+#ifdef KEYBOARD_bat43_rev2
+ #include "rev2.h"
+#endif
+
#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( \
- k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
- k10, k11, k12, k13, k14, k15, k30, k50, k51, k52, k53, k54, k55, \
- k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
- k33, k34, k35, k70, k71, k72, \
- k74, k75, k73, k31, k32 \
-) { \
- { k00, k01, k02, k03, k04, k05 }, \
- { k10, k11, k12, k13, k14, k15 }, \
- { k20, k21, k22, k23, k24, k25 }, \
- { k30, k31, k32, k33, k34, k35 }, \
- { k40, k41, k42, k43, k44, k45 }, \
- { k50, k51, k52, k53, k54, k55 }, \
- { k60, k61, k62, k63, k64, k65 }, \
- { k70, k71, k72, k73, k74, k75 }, \
-}
diff --git a/keyboards/bat43/info.json b/keyboards/bat43/rev1/info.json
similarity index 100%
rename from keyboards/bat43/info.json
rename to keyboards/bat43/rev1/info.json
diff --git a/keyboards/bat43/rev1/rev1.c b/keyboards/bat43/rev1/rev1.c
new file mode 100644
index 00000000000..cff7598740b
--- /dev/null
+++ b/keyboards/bat43/rev1/rev1.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 yfuku
+ *
+ * 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 .
+ */
+
+#include "rev1.h"
diff --git a/keyboards/bat43/rev1/rev1.h b/keyboards/bat43/rev1/rev1.h
new file mode 100644
index 00000000000..cf21486a9e5
--- /dev/null
+++ b/keyboards/bat43/rev1/rev1.h
@@ -0,0 +1,46 @@
+/* Copyright 2020 yfuku
+ *
+ * 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 .
+ */
+
+#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( \
+ k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
+ k10, k11, k12, k13, k14, k15, k30, k50, k51, k52, k53, k54, k55, \
+ k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
+ k33, k34, k35, k70, k71, k72, \
+ k74, k75, k73, k31, k32 \
+) { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k40, k41, k42, k43, k44, k45 }, \
+ { k50, k51, k52, k53, k54, k55 }, \
+ { k60, k61, k62, k63, k64, k65 }, \
+ { k70, k71, k72, k73, k74, k75 }, \
+}
diff --git a/keyboards/pancake/feather/readme.md b/keyboards/bat43/rev1/rules.mk
similarity index 100%
rename from keyboards/pancake/feather/readme.md
rename to keyboards/bat43/rev1/rules.mk
diff --git a/keyboards/bat43/rev2/info.json b/keyboards/bat43/rev2/info.json
new file mode 100644
index 00000000000..e1a6c8607cd
--- /dev/null
+++ b/keyboards/bat43/rev2/info.json
@@ -0,0 +1,71 @@
+{
+ "keyboard_name": "bat43",
+ "url": "",
+ "maintainer": "yfuku",
+ "width": 15,
+ "height": 5.1,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"k00", "x":0, "y":1.43},
+ {"label":"k01", "x":1, "y":1.11},
+ {"label":"k02", "x":2, "y":0.38},
+ {"label":"k03", "x":3, "y":0},
+ {"label":"k04", "x":4, "y":0.05},
+ {"label":"k05", "x":5, "y":0.16},
+
+ {"label":"k40", "x":9, "y":0.16},
+ {"label":"k41", "x":10, "y":0.05},
+ {"label":"k42", "x":11, "y":0},
+ {"label":"k43", "x":12, "y":0.38},
+ {"label":"k44", "x":13, "y":1.11},
+ {"label":"k45", "x":14, "y":1.43},
+
+ {"label":"k10", "x":0, "y":2.43},
+ {"label":"k11", "x":1, "y":2.11},
+ {"label":"k12", "x":2, "y":1.38},
+ {"label":"k13", "x":3, "y":1},
+ {"label":"k14", "x":4, "y":1.05},
+ {"label":"k15", "x":5, "y":1.16},
+
+ {"label":"k30", "x":7, "y":1.16},
+
+ {"label":"k50", "x":9, "y":1.16},
+ {"label":"k51", "x":10, "y":1.05},
+ {"label":"k52", "x":11, "y":1},
+ {"label":"k53", "x":12, "y":1.38},
+ {"label":"k54", "x":13, "y":2.11},
+ {"label":"k55", "x":14, "y":2.43},
+
+ {"label":"k20", "x":0, "y":3.43},
+ {"label":"k21", "x":1, "y":3.11},
+ {"label":"k22", "x":2, "y":2.38},
+ {"label":"k23", "x":3, "y":2},
+ {"label":"k24", "x":4, "y":2.05},
+ {"label":"k25", "x":5, "y":2.16},
+
+ {"label":"k60", "x":9, "y":2.16},
+ {"label":"k61", "x":10, "y":2.05},
+ {"label":"k62", "x":11, "y":2},
+ {"label":"k63", "x":12, "y":2.38},
+ {"label":"k64", "x":13, "y":3.11},
+ {"label":"k65", "x":14, "y":3.43},
+
+ {"label":"k33", "x":4, "y":3.3},
+ {"label":"k34", "x":5, "y":3.3},
+ {"label":"k35", "x":6, "y":3.3},
+
+ {"label":"k70", "x":8, "y":3.3},
+ {"label":"k71", "x":9, "y":3.3},
+ {"label":"k72", "x":10, "y":3.3},
+
+ {"label":"k75", "x":5.1, "y":4.3, "w":0.8, "h":0.8},
+ {"label":"k74", "x":6.1, "y":4.3, "w":0.8, "h":0.8},
+
+ {"label":"k73", "x":8.1, "y":4.3, "w":0.8, "h":0.8},
+ {"label":"k31", "x":9.1, "y":4.3, "w":0.8, "h":0.8},
+ {"label":"k32", "x":10.1, "y":4.3, "w":0.8, "h":0.8}
+ ]
+ }
+ }
+}
diff --git a/keyboards/bat43/rev2/rev2.c b/keyboards/bat43/rev2/rev2.c
new file mode 100644
index 00000000000..cffc0acd32b
--- /dev/null
+++ b/keyboards/bat43/rev2/rev2.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 yfuku
+ *
+ * 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 .
+ */
+
+#include "rev2.h"
diff --git a/keyboards/bat43/rev2/rev2.h b/keyboards/bat43/rev2/rev2.h
new file mode 100644
index 00000000000..f84cdbaa4d4
--- /dev/null
+++ b/keyboards/bat43/rev2/rev2.h
@@ -0,0 +1,46 @@
+/* Copyright 2020 yfuku
+ *
+ * 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 .
+ */
+
+#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( \
+ k00, k01, k02, k03, k04, k05, k40, k41, k42, k43, k44, k45, \
+ k10, k11, k12, k13, k14, k15, k30, k50, k51, k52, k53, k54, k55, \
+ k20, k21, k22, k23, k24, k25, k60, k61, k62, k63, k64, k65, \
+ k33, k34, k35, k70, k71, k72, \
+ k75, k74, k73, k31, k32 \
+) { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k40, k41, k42, k43, k44, k45 }, \
+ { k50, k51, k52, k53, k54, k55 }, \
+ { k60, k61, k62, k63, k64, k65 }, \
+ { k70, k71, k72, k73, k74, k75 }, \
+}
diff --git a/keyboards/pancake/keymaps/default/readme.md b/keyboards/bat43/rev2/rules.mk
similarity index 100%
rename from keyboards/pancake/keymaps/default/readme.md
rename to keyboards/bat43/rev2/rules.mk
diff --git a/keyboards/bat43/rules.mk b/keyboards/bat43/rules.mk
index 70400b5d0d4..cc29455e3f3 100644
--- a/keyboards/bat43/rules.mk
+++ b/keyboards/bat43/rules.mk
@@ -30,3 +30,5 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+DEFAULT_FOLDER = bat43/rev2
diff --git a/keyboards/bfake/rules.mk b/keyboards/bfake/rules.mk
index 17922fabf43..5846b173ba1 100644
--- a/keyboards/bfake/rules.mk
+++ b/keyboards/bfake/rules.mk
@@ -20,5 +20,3 @@ COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no
WS2812_DRIVER = i2c
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/bigseries/1key/info.json b/keyboards/bigseries/1key/info.json
index ff2fd54c575..a289e122d17 100644
--- a/keyboards/bigseries/1key/info.json
+++ b/keyboards/bigseries/1key/info.json
@@ -1,12 +1,14 @@
{
- "keyboard_name": "Big Series 1-Key",
- "url": "",
- "maintainer": "qmk",
- "width": 4,
- "height": 4,
- "layouts": {
- "LAYOUT": {
- "layout": [{"x":0, "y":0, "w":4, "h":4}]
+ "keyboard_name": "Big Series 1-Key",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 4, "h": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/bigseries/1key/rules.mk b/keyboards/bigseries/1key/rules.mk
index 772d56beb6d..111ac42f9f8 100755
--- a/keyboards/bigseries/1key/rules.mk
+++ b/keyboards/bigseries/1key/rules.mk
@@ -1 +1,31 @@
-# Dummy file to make the QMK build system happy
\ No newline at end of file
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/bigseries/2key/info.json b/keyboards/bigseries/2key/info.json
index 2aea4d20056..faa5ac8545f 100644
--- a/keyboards/bigseries/2key/info.json
+++ b/keyboards/bigseries/2key/info.json
@@ -1,12 +1,15 @@
{
- "keyboard_name": "Big Series 2-Key",
- "url": "",
- "maintainer": "qmk",
- "width": 8,
- "height": 4,
- "layouts": {
- "LAYOUT": {
- "layout": [{"x":0, "y":0, "w":4, "h":4}, {"x":4, "y":0, "w":4, "h":4}]
+ "keyboard_name": "Big Series 2-Key",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 8,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 4, "h": 4},
+ {"x": 4, "y": 0, "w": 4, "h": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/bigseries/2key/rules.mk b/keyboards/bigseries/2key/rules.mk
index 772d56beb6d..111ac42f9f8 100755
--- a/keyboards/bigseries/2key/rules.mk
+++ b/keyboards/bigseries/2key/rules.mk
@@ -1 +1,31 @@
-# Dummy file to make the QMK build system happy
\ No newline at end of file
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/bigseries/3key/info.json b/keyboards/bigseries/3key/info.json
index 8f0b8c55c20..4e48ca47e66 100644
--- a/keyboards/bigseries/3key/info.json
+++ b/keyboards/bigseries/3key/info.json
@@ -1,12 +1,16 @@
{
- "keyboard_name": "Big Series 3-Key",
- "url": "",
- "maintainer": "qmk",
- "width": 12,
- "height": 4,
- "layouts": {
- "LAYOUT": {
- "layout": [{"x":0, "y":0, "w":4, "h":4}, {"x":4, "y":0, "w":4, "h":4}, {"x":8, "y":0, "w":4, "h":4}]
+ "keyboard_name": "Big Series 3-Key",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 4, "h": 4},
+ {"x": 4, "y": 0, "w": 4, "h": 4},
+ {"x": 8, "y": 0, "w": 4, "h": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/bigseries/3key/rules.mk b/keyboards/bigseries/3key/rules.mk
index 772d56beb6d..111ac42f9f8 100755
--- a/keyboards/bigseries/3key/rules.mk
+++ b/keyboards/bigseries/3key/rules.mk
@@ -1 +1,31 @@
-# Dummy file to make the QMK build system happy
\ No newline at end of file
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/bigseries/4key/info.json b/keyboards/bigseries/4key/info.json
index 0bdee578a73..f31e4826a7d 100644
--- a/keyboards/bigseries/4key/info.json
+++ b/keyboards/bigseries/4key/info.json
@@ -1,12 +1,18 @@
{
- "keyboard_name": "Big Series 4-Key",
- "url": "",
- "maintainer": "qmk",
- "width": 8,
- "height": 8,
- "layouts": {
- "LAYOUT": {
- "layout": [{"x":0, "y":0, "w":4, "h":4}, {"x":4, "y":0, "w":4, "h":4}, {"x":0, "y":4, "w":4, "h":4}, {"x":4, "y":4, "w":4, "h":4}]
+ "keyboard_name": "Big Series 4-Key",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 8,
+ "height": 8,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 4, "h": 4},
+ {"x": 4, "y": 0, "w": 4, "h": 4},
+
+ {"x": 0, "y": 4, "w": 4, "h": 4},
+ {"x": 4, "y": 4, "w": 4, "h": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/bigseries/4key/rules.mk b/keyboards/bigseries/4key/rules.mk
index 772d56beb6d..111ac42f9f8 100755
--- a/keyboards/bigseries/4key/rules.mk
+++ b/keyboards/bigseries/4key/rules.mk
@@ -1 +1,31 @@
-# Dummy file to make the QMK build system happy
\ No newline at end of file
+# MCU name
+MCU = atmega32u2
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/bigseries/rules.mk b/keyboards/bigseries/rules.mk
deleted file mode 100755
index 2f52d955862..00000000000
--- a/keyboards/bigseries/rules.mk
+++ /dev/null
@@ -1,27 +0,0 @@
-# MCU name
-MCU = atmega32u2
-
-# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Custom backlighting code is used, so this should not be enabled
-AUDIO_ENABLE = no # This can be enabled if a speaker is connected to the expansion port. Not compatible with RGBLIGHT below
-RGBLIGHT_ENABLE = yes # This can be enabled if a ws2812 strip is connected to the expansion port.
-
diff --git a/keyboards/bm43a/keymaps/stevexyz/keymap.c b/keyboards/bm43a/keymaps/stevexyz/keymap.c
new file mode 100644
index 00000000000..04df426ba99
--- /dev/null
+++ b/keyboards/bm43a/keymaps/stevexyz/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2020 Stefano Maragò
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // 12+11+11+9
+ [0] = LAYOUT(
+ MT(MOD_LGUI,KC_ESC), 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_UP, KC_DOT,
+ KC_LCTL, TT(1), KC_LALT, KC_SPC, MT(MOD_RSFT,KC_SPC), TT(1), KC_LEFT, KC_DOWN, KC_RGHT ),
+ [1] = LAYOUT(
+ 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_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_LSFT, KC_GRV, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_SCLN, KC_QUOT, KC_PGUP, KC_SLSH,
+ KC_LCTL, LT(2,KC_APP), KC_LALT, KC_SPC, MT(MOD_RSFT,KC_SPC), LT(2,KC_INS), KC_HOME, KC_PGDN, KC_END ),
+ [2] = LAYOUT(
+ DF(0), KC_PSCR, KC_SLCK, KC_PAUS, KC_PSLS, KC_PAST, KC_7, KC_8, KC_9, KC_PMNS, KC_PEQL, KC_BSPC,
+ KC_CAPS, KC_MPLY, KC_STOP, KC_MPRV, KC_MNXT, XXXXXXX, KC_4, KC_5, KC_6, KC_PPLS, KC_PENT,
+ DF(2), KC_MUTE, KC_VOLD, KC_VOLU, KC_COMM, KC_1, KC_2, KC_3, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2,
+ DF(3), XXXXXXX, XXXXXXX, KC_SPC, KC_0, KC_DOT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT ),
+ [3] = LAYOUT(
+ DF(0), KC_SLEP, KC_BRID, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
+ XXXXXXX, BL_TOGG, BL_DEC, BL_INC, BL_STEP, BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, RGB_TOG, RGB_RMOD, RGB_MOD, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX ),
+};
+
diff --git a/keyboards/bm43a/keymaps/stevexyz/readme.md b/keyboards/bm43a/keymaps/stevexyz/readme.md
new file mode 100644
index 00000000000..9e4da10d2ad
--- /dev/null
+++ b/keyboards/bm43a/keymaps/stevexyz/readme.md
@@ -0,0 +1,25 @@
+This is a full-featured bm43a layout inspired by the smaller "Super Micro gherkin" and "jj28" sisters.
+
+In addition to the default key layer, there is a function/numbers/symbols layer easily activated with either one of the two "meta" (red) keys and containing almost all keyset missing.
+
+On top of this, activated with both meta keys, there a system layer where are placed media keys, mouse emulation, and Numpad in addition to the PrintScreen/ScrLock/Pause keys.
+
+The below picture show all layers on the actual keys (if someone would be able to print these labels let me know! :)).
+
+
+
+Notes:
+- The Windows/OS key is overlayed with the Esc one
+- To activate permanently the function/number/symbols layer you can use the "layer tap toggle" functionality (now set to the default 5 presses). For the system layer to be activated permanently is enough to hit shift in this layer (so with the two meta keys pressed)
+- From the System Layer you can "jump" to an additional Lights layer pressing the control key
+- Meta-Esc (or simply Esc from the System and Lights layers) and the keyboard is coming back to default key layer in case they are activated permanently
+
+
+And a view on the actual build:
+
+
+
+In order to compile the module from qmk root directory use the command 'make bm43a:stevexyz'
+
+And in order to upload the new firmware use the command: 'bin/qmk flash -kb bm43a -km stevexyz' (you can initiate programming with keyboard RESET key, that in this keymap has been moved on the backspace button in the "lights" layer)
+
diff --git a/keyboards/bm43a/keymaps/stevexyz/rules.mk b/keyboards/bm43a/keymaps/stevexyz/rules.mk
new file mode 100644
index 00000000000..fa2ef5c2b28
--- /dev/null
+++ b/keyboards/bm43a/keymaps/stevexyz/rules.mk
@@ -0,0 +1,8 @@
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
+CONSOLE_ENABLE = no # Console for debug
+
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
diff --git a/keyboards/boardsource/3x4/3x4.c b/keyboards/boardsource/3x4/3x4.c
new file mode 100644
index 00000000000..798d5a65c4b
--- /dev/null
+++ b/keyboards/boardsource/3x4/3x4.c
@@ -0,0 +1 @@
+#include "3x4.h"
diff --git a/keyboards/boardsource/3x4/3x4.h b/keyboards/boardsource/3x4/3x4.h
new file mode 100644
index 00000000000..a27d32c74f7
--- /dev/null
+++ b/keyboards/boardsource/3x4/3x4.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include "quantum.h"
+#define LAYOUT( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23 \
+ ) { \
+ {K00, K01, K02, K03}, \
+ {K10, K11, K12, K13}, \
+ {K20, K21, K22, K23} \
+ }
diff --git a/keyboards/boardsource/3x4/config.h b/keyboards/boardsource/3x4/config.h
new file mode 100644
index 00000000000..95c6f9ac273
--- /dev/null
+++ b/keyboards/boardsource/3x4/config.h
@@ -0,0 +1,144 @@
+
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xF7E0
+#define PRODUCT_ID 0x0412
+#define DEVICE_VER 0x0000
+#define MANUFACTURER Boardsource
+#define PRODUCT 3x4
+#define DESCRIPTION Little macro pad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 4
+
+#define MATRIX_ROW_PINS { F7, F6, F5,}
+#define MATRIX_COL_PINS {B6, B2, B3, B1}
+
+#define DIODE_DIRECTION COL2ROW
+
+#define DEBOUNCE 5
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
diff --git a/keyboards/boardsource/3x4/info.json b/keyboards/boardsource/3x4/info.json
new file mode 100644
index 00000000000..ea7a981032b
--- /dev/null
+++ b/keyboards/boardsource/3x4/info.json
@@ -0,0 +1,29 @@
+{
+ "keyboard_name": "boardsource 4x3",
+ "url": "https://boardsource.xyz",
+ "maintainer": "boardsource",
+ "width": 4,
+ "height": 3,
+ "layouts": {
+
+ "LAYOUT": {
+
+ "layout": [
+ { "label": "K01", "x": 0, "y": 0 },
+ { "label": "K02", "x": 1, "y": 0 },
+ { "label": "K03", "x": 2, "y": 0 },
+ { "label": "K04", "x": 3, "y": 0 },
+
+ { "label": "K05", "x": 0, "y": 1 },
+ { "label": "K06", "x": 1, "y": 1 },
+ { "label": "K07", "x": 2, "y": 1 },
+ { "label": "K08", "x": 3, "y": 1 },
+
+ { "label": "K09", "x": 0, "y": 2 },
+ { "label": "K10", "x": 1, "y": 2 },
+ { "label": "K11", "x": 2, "y": 2 },
+ { "label": "K12", "x": 3, "y": 2 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/boardsource/3x4/keymaps/default/keymap.c b/keyboards/boardsource/3x4/keymaps/default/keymap.c
new file mode 100644
index 00000000000..67133735fa1
--- /dev/null
+++ b/keyboards/boardsource/3x4/keymaps/default/keymap.c
@@ -0,0 +1,26 @@
+#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(
+ KC_0, KC_1, KC_4, KC_7,
+ KC_ENT, KC_2, KC_5, KC_8,
+ RAISE, KC_3, KC_6, KC_9
+ ),
+ [_RAISE] = LAYOUT(
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, RESET
+ )
+
+};
diff --git a/keyboards/boardsource/3x4/readme.md b/keyboards/boardsource/3x4/readme.md
new file mode 100644
index 00000000000..9d7ef895c6d
--- /dev/null
+++ b/keyboards/boardsource/3x4/readme.md
@@ -0,0 +1,15 @@
+# 3x4
+
+
+
+this macro pad / small 12 key was inspired by the plaid look
+
+* Keyboard Maintainer: [Boardsource](https://github.com/daysgobye)
+* Hardware Supported: 3x4 v1
+* Hardware Availability: [Boardsource store](https://boardsource.xyz/store/5ecc2008eee64242946c98c1)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make boardsource/3x4: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/boardsource/3x4/rules.mk b/keyboards/boardsource/3x4/rules.mk
new file mode 100644
index 00000000000..263c586048d
--- /dev/null
+++ b/keyboards/boardsource/3x4/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/boardsource/4x12/4x12.c b/keyboards/boardsource/4x12/4x12.c
new file mode 100644
index 00000000000..2aec6900ad8
--- /dev/null
+++ b/keyboards/boardsource/4x12/4x12.c
@@ -0,0 +1 @@
+#include "4x12.h"
diff --git a/keyboards/boardsource/4x12/4x12.h b/keyboards/boardsource/4x12/4x12.h
new file mode 100644
index 00000000000..52c23708fa0
--- /dev/null
+++ b/keyboards/boardsource/4x12/4x12.h
@@ -0,0 +1,14 @@
+#pragma once
+#include "quantum.h"
+
+#define LAYOUT_ortho_4x12( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, 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, K35, \
+ K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47 \
+ ) { \
+ {K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, 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, K35}, \
+ {K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47} \
+ }
diff --git a/keyboards/boardsource/4x12/config.h b/keyboards/boardsource/4x12/config.h
new file mode 100644
index 00000000000..e8f858586cc
--- /dev/null
+++ b/keyboards/boardsource/4x12/config.h
@@ -0,0 +1,142 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xF7E0
+#define PRODUCT_ID 0x0412
+#define DEVICE_VER 0x0000
+#define MANUFACTURER Boardsource
+#define PRODUCT 4x12
+#define DESCRIPTION 40 percent ortho keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+#define MATRIX_ROW_PINS { D2, D3, D1, D0}
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7 }
+
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
diff --git a/keyboards/boardsource/4x12/info.json b/keyboards/boardsource/4x12/info.json
new file mode 100644
index 00000000000..d5f40fd3b28
--- /dev/null
+++ b/keyboards/boardsource/4x12/info.json
@@ -0,0 +1,64 @@
+{
+ "keyboard_name": "Boardsource 4x12",
+ "url": "https://boardsource.xyz",
+ "maintainer": "Boardsource",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x12": {
+ "layout": [
+ { "label": "K01", "x": 0, "y": 0 },
+ { "label": "K02", "x": 1, "y": 0 },
+ { "label": "K03", "x": 2, "y": 0 },
+ { "label": "K04", "x": 3, "y": 0 },
+ { "label": "K05", "x": 4, "y": 0 },
+ { "label": "K06", "x": 5, "y": 0 },
+ { "label": "K07", "x": 6, "y": 0 },
+ { "label": "K08", "x": 7, "y": 0 },
+ { "label": "K09", "x": 8, "y": 0 },
+ { "label": "K010", "x": 9, "y": 0 },
+ { "label": "K011", "x": 10, "y": 0 },
+ { "label": "K012", "x": 11, "y": 0 },
+
+ { "label": "K11", "x": 0, "y": 1 },
+ { "label": "K12", "x": 1, "y": 1 },
+ { "label": "K13", "x": 2, "y": 1 },
+ { "label": "K14", "x": 3, "y": 1 },
+ { "label": "K15", "x": 4, "y": 1 },
+ { "label": "K16", "x": 5, "y": 1 },
+ { "label": "K17", "x": 6, "y": 1 },
+ { "label": "K18", "x": 7, "y": 1 },
+ { "label": "K19", "x": 8, "y": 1 },
+ { "label": "K110", "x": 9, "y": 1 },
+ { "label": "K111", "x": 10, "y": 1 },
+ { "label": "K112", "x": 11, "y": 1 },
+
+ { "label": "K21", "x": 0, "y": 2 },
+ { "label": "K22", "x": 1, "y": 2 },
+ { "label": "K23", "x": 2, "y": 2 },
+ { "label": "K24", "x": 3, "y": 2 },
+ { "label": "K25", "x": 4, "y": 2 },
+ { "label": "K26", "x": 5, "y": 2 },
+ { "label": "K27", "x": 6, "y": 2 },
+ { "label": "K28", "x": 7, "y": 2 },
+ { "label": "K29", "x": 8, "y": 2 },
+ { "label": "K210", "x": 9, "y": 2 },
+ { "label": "K211", "x": 10, "y": 2 },
+ { "label": "K212", "x": 11, "y": 2 },
+
+ { "label": "K31", "x": 0, "y": 3 },
+ { "label": "K32", "x": 1, "y": 3 },
+ { "label": "K33", "x": 2, "y": 3 },
+ { "label": "K34", "x": 3, "y": 3 },
+ { "label": "K35", "x": 4, "y": 3 },
+ { "label": "K36", "x": 5, "y": 3 },
+ { "label": "K37", "x": 6, "y": 3 },
+ { "label": "K38", "x": 7, "y": 3 },
+ { "label": "K39", "x": 8, "y": 3 },
+ { "label": "K310", "x": 9, "y": 3 },
+ { "label": "K311", "x": 10, "y": 3 },
+ { "label": "K312", "x": 11, "y": 3 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/boardsource/4x12/keymaps/default/keymap.c b/keyboards/boardsource/4x12/keymaps/default/keymap.c
new file mode 100644
index 00000000000..d9a0c47a6b3
--- /dev/null
+++ b/keyboards/boardsource/4x12/keymaps/default/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/readme.md b/keyboards/boardsource/4x12/readme.md
new file mode 100644
index 00000000000..17cf01ed025
--- /dev/null
+++ b/keyboards/boardsource/4x12/readme.md
@@ -0,0 +1,12 @@
+# 4x12
+
+
+* Keyboard Maintainer: [Boardsource](https://github.com/daysgobye)
+* Hardware Supported: 4x12 v1
+* Hardware Availability: this keyboard is available from the [Boardsource store](https://boardsource.xyz/store/5ecb7dad86879c9a0c22db32)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make boardsource/4x12: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).
\ No newline at end of file
diff --git a/keyboards/boardsource/4x12/rules.mk b/keyboards/boardsource/4x12/rules.mk
new file mode 100644
index 00000000000..0999b9d62b8
--- /dev/null
+++ b/keyboards/boardsource/4x12/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+LAYOUTS = ortho_4x12
diff --git a/keyboards/boardsource/5x12/5x12.c b/keyboards/boardsource/5x12/5x12.c
new file mode 100644
index 00000000000..579cd5effc1
--- /dev/null
+++ b/keyboards/boardsource/5x12/5x12.c
@@ -0,0 +1 @@
+#include "5x12.h"
\ No newline at end of file
diff --git a/keyboards/boardsource/5x12/5x12.h b/keyboards/boardsource/5x12/5x12.h
new file mode 100644
index 00000000000..bbc0689b442
--- /dev/null
+++ b/keyboards/boardsource/5x12/5x12.h
@@ -0,0 +1,17 @@
+#pragma once
+#include "quantum.h"
+
+#define LAYOUT_ortho_5x12( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, 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, K35, \
+ K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, \
+ K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59 \
+ ) { \
+ {K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, 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, K35}, \
+ {K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47}, \
+ {K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59} \
+ }
+
diff --git a/keyboards/boardsource/5x12/config.h b/keyboards/boardsource/5x12/config.h
new file mode 100644
index 00000000000..1cd7101589a
--- /dev/null
+++ b/keyboards/boardsource/5x12/config.h
@@ -0,0 +1,143 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xF7E0
+#define PRODUCT_ID 0x0412
+#define DEVICE_VER 0x0000
+#define MANUFACTURER Boardsource
+#define PRODUCT 5x12
+#define DESCRIPTION 50 percent ortho keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+#define MATRIX_ROW_PINS { D2, D3, D1, D0, D4 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, B5, B4, E6, D7 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
diff --git a/keyboards/boardsource/5x12/info.json b/keyboards/boardsource/5x12/info.json
new file mode 100644
index 00000000000..a4cfc398a23
--- /dev/null
+++ b/keyboards/boardsource/5x12/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "boardsource 5x12",
+ "url": "https://boardsource.xyz",
+ "maintainer": "boardsource",
+ "width": 12,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "K01", "x": 0, "y": 0 },
+ { "label": "K02", "x": 1, "y": 0 },
+ { "label": "K03", "x": 2, "y": 0 },
+ { "label": "K04", "x": 3, "y": 0 },
+ { "label": "K05", "x": 4, "y": 0 },
+ { "label": "K06", "x": 5, "y": 0 },
+ { "label": "K07", "x": 6, "y": 0 },
+ { "label": "K08", "x": 7, "y": 0 },
+ { "label": "K09", "x": 8, "y": 0 },
+ { "label": "K010", "x": 9, "y": 0 },
+ { "label": "K011", "x": 10, "y": 0 },
+ { "label": "K012", "x": 11, "y": 0 },
+
+ { "label": "K11", "x": 0, "y": 1 },
+ { "label": "K12", "x": 1, "y": 1 },
+ { "label": "K13", "x": 2, "y": 1 },
+ { "label": "K14", "x": 3, "y": 1 },
+ { "label": "K15", "x": 4, "y": 1 },
+ { "label": "K16", "x": 5, "y": 1 },
+ { "label": "K17", "x": 6, "y": 1 },
+ { "label": "K18", "x": 7, "y": 1 },
+ { "label": "K19", "x": 8, "y": 1 },
+ { "label": "K110", "x": 9, "y": 1 },
+ { "label": "K111", "x": 10, "y": 1 },
+ { "label": "K112", "x": 11, "y": 1 },
+
+ { "label": "K21", "x": 0, "y": 2 },
+ { "label": "K22", "x": 1, "y": 2 },
+ { "label": "K23", "x": 2, "y": 2 },
+ { "label": "K24", "x": 3, "y": 2 },
+ { "label": "K25", "x": 4, "y": 2 },
+ { "label": "K26", "x": 5, "y": 2 },
+ { "label": "K27", "x": 6, "y": 2 },
+ { "label": "K28", "x": 7, "y": 2 },
+ { "label": "K29", "x": 8, "y": 2 },
+ { "label": "K210", "x": 9, "y": 2 },
+ { "label": "K211", "x": 10, "y": 2 },
+ { "label": "K212", "x": 11, "y": 2 },
+
+ { "label": "K31", "x": 0, "y": 3 },
+ { "label": "K32", "x": 1, "y": 3 },
+ { "label": "K33", "x": 2, "y": 3 },
+ { "label": "K34", "x": 3, "y": 3 },
+ { "label": "K35", "x": 4, "y": 3 },
+ { "label": "K36", "x": 5, "y": 3 },
+ { "label": "K37", "x": 6, "y": 3 },
+ { "label": "K38", "x": 7, "y": 3 },
+ { "label": "K39", "x": 8, "y": 3 },
+ { "label": "K310", "x": 9, "y": 3 },
+ { "label": "K311", "x": 10, "y": 3 },
+ { "label": "K312", "x": 11, "y": 3 },
+
+ { "label": "K41", "x": 0, "y": 4 },
+ { "label": "K42", "x": 1, "y": 4 },
+ { "label": "K43", "x": 2, "y": 4 },
+ { "label": "K44", "x": 3, "y": 4 },
+ { "label": "K45", "x": 4, "y": 4 },
+ { "label": "K46", "x": 5, "y": 4 },
+ { "label": "K47", "x": 6, "y": 4 },
+ { "label": "K48", "x": 7, "y": 4 },
+ { "label": "K49", "x": 8, "y": 4 },
+ { "label": "K410", "x": 9, "y": 4 },
+ { "label": "K411", "x": 10, "y": 4 },
+ { "label": "K412", "x": 11, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/boardsource/5x12/keymaps/default/keymap.c b/keyboards/boardsource/5x12/keymaps/default/keymap.c
new file mode 100644
index 00000000000..19bdde0ffb9
--- /dev/null
+++ b/keyboards/boardsource/5x12/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+#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_5x12(
+ 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ 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_5x12(
+ 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_4, KC_5, KC_6, KC_PLUS, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ KC_ENT, KC_7, KC_8, KC_9, KC_MINS, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS,
+ RESET, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ [_LOWER] = LAYOUT_ortho_5x12(
+ 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_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ )
+
+};
diff --git a/keyboards/boardsource/5x12/readme.md b/keyboards/boardsource/5x12/readme.md
new file mode 100644
index 00000000000..f1bf8a84c30
--- /dev/null
+++ b/keyboards/boardsource/5x12/readme.md
@@ -0,0 +1,13 @@
+# 5x12
+
+
+
+* Keyboard Maintainer: [Boardsource](https://github.com/daysgobye)
+* Hardware Supported: 5x12 v1
+* Hardware Availability: this keyboard is available from the [Boardsource store](https://boardsource.xyz/store/5ecb822386879c9a0c22db84)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make boardsource/5x12: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).
\ No newline at end of file
diff --git a/keyboards/boardsource/5x12/rules.mk b/keyboards/boardsource/5x12/rules.mk
new file mode 100644
index 00000000000..f26c7fa800c
--- /dev/null
+++ b/keyboards/boardsource/5x12/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = ortho_5x12
diff --git a/keyboards/boardwalk/boardwalk.h b/keyboards/boardwalk/boardwalk.h
index 580a320c1f9..8a613ce49d6 100644
--- a/keyboards/boardwalk/boardwalk.h
+++ b/keyboards/boardwalk/boardwalk.h
@@ -17,6 +17,21 @@
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k410, k411, k412, k413 } \
}
+#define LAYOUT_ortho_2x2u( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313, \
+ k40, k41, k42, k43, k44, k45, k47, k49, k410, k411, k412, k413 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, k213 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, k313 }, \
+ { k40, k41, k42, k43, k44, k45, KC_NO, k47, KC_NO, k49, k410, k411, k412, k413 } \
+}
+
#define LAYOUT_ortho_hhkb( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, k013, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, k113, \
diff --git a/keyboards/boardwalk/info.json b/keyboards/boardwalk/info.json
index a287f31a44e..dffcba6c274 100644
--- a/keyboards/boardwalk/info.json
+++ b/keyboards/boardwalk/info.json
@@ -5,355 +5,451 @@
"width": 15,
"height": 5,
"layouts": {
- "LAYOUT_ortho_5x14": {
- "layout": [
- {"label":"k00", "x":0, "y":0, "w":1.5},
- {"label":"k01", "x":1.5, "y":0},
- {"label":"k02", "x":2.5, "y":0},
- {"label":"k03", "x":3.5, "y":0},
- {"label":"k04", "x":4.5, "y":0},
- {"label":"k05", "x":5.5, "y":0},
- {"label":"k06", "x":6.5, "y":0},
- {"label":"k07", "x":7.5, "y":0},
- {"label":"k08", "x":8.5, "y":0},
- {"label":"k09", "x":9.5, "y":0},
- {"label":"k010", "x":10.5, "y":0},
- {"label":"k011", "x":11.5, "y":0},
- {"label":"k012", "x":12.5, "y":0},
- {"label":"k013", "x":13.5, "y":0, "w":1.5},
- {"label":"k10", "x":0, "y":1, "w":1.5},
- {"label":"k11", "x":1.5, "y":1},
- {"label":"k12", "x":2.5, "y":1},
- {"label":"k13", "x":3.5, "y":1},
- {"label":"k14", "x":4.5, "y":1},
- {"label":"k15", "x":5.5, "y":1},
- {"label":"k16", "x":6.5, "y":1},
- {"label":"k17", "x":7.5, "y":1},
- {"label":"k18", "x":8.5, "y":1},
- {"label":"k19", "x":9.5, "y":1},
- {"label":"k110", "x":10.5, "y":1},
- {"label":"k111", "x":11.5, "y":1},
- {"label":"k112", "x":12.5, "y":1},
- {"label":"k113", "x":13.5, "y":1, "w":1.5},
- {"label":"k20", "x":0, "y":2, "w":1.5},
- {"label":"k21", "x":1.5, "y":2},
- {"label":"k22", "x":2.5, "y":2},
- {"label":"k23", "x":3.5, "y":2},
- {"label":"k24", "x":4.5, "y":2},
- {"label":"k25", "x":5.5, "y":2},
- {"label":"k26", "x":6.5, "y":2},
- {"label":"k27", "x":7.5, "y":2},
- {"label":"k28", "x":8.5, "y":2},
- {"label":"k29", "x":9.5, "y":2},
- {"label":"k210", "x":10.5, "y":2},
- {"label":"k211", "x":11.5, "y":2},
- {"label":"k212", "x":12.5, "y":2},
- {"label":"k213", "x":13.5, "y":2, "w":1.5},
- {"label":"k30", "x":0, "y":3, "w":1.5},
- {"label":"k31", "x":1.5, "y":3},
- {"label":"k32", "x":2.5, "y":3},
- {"label":"k33", "x":3.5, "y":3},
- {"label":"k34", "x":4.5, "y":3},
- {"label":"k35", "x":5.5, "y":3},
- {"label":"k36", "x":6.5, "y":3},
- {"label":"k37", "x":7.5, "y":3},
- {"label":"k38", "x":8.5, "y":3},
- {"label":"k39", "x":9.5, "y":3},
- {"label":"k310", "x":10.5, "y":3},
- {"label":"k311", "x":11.5, "y":3},
- {"label":"k312", "x":12.5, "y":3},
- {"label":"k313", "x":13.5, "y":3, "w":1.5},
- {"label":"k40", "x":0, "y":4, "w":1.5},
- {"label":"k41", "x":1.5, "y":4},
- {"label":"k42", "x":2.5, "y":4},
- {"label":"k43", "x":3.5, "y":4},
- {"label":"k44", "x":4.5, "y":4},
- {"label":"k45", "x":5.5, "y":4},
- {"label":"k46", "x":6.5, "y":4},
- {"label":"k47", "x":7.5, "y":4},
- {"label":"k48", "x":8.5, "y":4},
- {"label":"k49", "x":9.5, "y":4},
- {"label":"k410", "x":10.5, "y":4},
- {"label":"k411", "x":11.5, "y":4},
- {"label":"k412", "x":12.5, "y":4},
- {"label":"k413", "x":13.5, "y":4, "w":1.5}
- ]
- },
- "LAYOUT_ortho_hhkb": {
- "layout": [
- {"label":"k00", "x":0, "y":0, "w":1.5},
- {"label":"k01", "x":1.5, "y":0},
- {"label":"k02", "x":2.5, "y":0},
- {"label":"k03", "x":3.5, "y":0},
- {"label":"k04", "x":4.5, "y":0},
- {"label":"k05", "x":5.5, "y":0},
- {"label":"k06", "x":6.5, "y":0},
- {"label":"k07", "x":7.5, "y":0},
- {"label":"k08", "x":8.5, "y":0},
- {"label":"k09", "x":9.5, "y":0},
- {"label":"k010", "x":10.5, "y":0},
- {"label":"k011", "x":11.5, "y":0},
- {"label":"k012", "x":12.5, "y":0},
- {"label":"k013", "x":13.5, "y":0, "w":1.5},
- {"label":"k10", "x":0, "y":1, "w":1.5},
- {"label":"k11", "x":1.5, "y":1},
- {"label":"k12", "x":2.5, "y":1},
- {"label":"k13", "x":3.5, "y":1},
- {"label":"k14", "x":4.5, "y":1},
- {"label":"k15", "x":5.5, "y":1},
- {"label":"k16", "x":6.5, "y":1},
- {"label":"k17", "x":7.5, "y":1},
- {"label":"k18", "x":8.5, "y":1},
- {"label":"k19", "x":9.5, "y":1},
- {"label":"k110", "x":10.5, "y":1},
- {"label":"k111", "x":11.5, "y":1},
- {"label":"k112", "x":12.5, "y":1},
- {"label":"k113", "x":13.5, "y":1, "w":1.5},
- {"label":"k20", "x":0, "y":2, "w":1.5},
- {"label":"k21", "x":1.5, "y":2},
- {"label":"k22", "x":2.5, "y":2},
- {"label":"k23", "x":3.5, "y":2},
- {"label":"k24", "x":4.5, "y":2},
- {"label":"k25", "x":5.5, "y":2},
- {"label":"k26", "x":6.5, "y":2},
- {"label":"k27", "x":7.5, "y":2},
- {"label":"k28", "x":8.5, "y":2},
- {"label":"k29", "x":9.5, "y":2},
- {"label":"k210", "x":10.5, "y":2},
- {"label":"k211", "x":11.5, "y":2},
- {"label":"k212", "x":12.5, "y":2},
- {"label":"k213", "x":13.5, "y":2, "w":1.5},
- {"label":"k30", "x":0, "y":3, "w":1.5},
- {"label":"k31", "x":1.5, "y":3},
- {"label":"k32", "x":2.5, "y":3},
- {"label":"k33", "x":3.5, "y":3},
- {"label":"k34", "x":4.5, "y":3},
- {"label":"k35", "x":5.5, "y":3},
- {"label":"k36", "x":6.5, "y":3},
- {"label":"k37", "x":7.5, "y":3},
- {"label":"k38", "x":8.5, "y":3},
- {"label":"k39", "x":9.5, "y":3},
- {"label":"k310", "x":10.5, "y":3},
- {"label":"k311", "x":11.5, "y":3},
- {"label":"k312", "x":12.5, "y":3},
- {"label":"k313", "x":13.5, "y":3, "w":1.5},
- {"label":"k41", "x":1.5, "y":4},
- {"label":"k42", "x":2.5, "y":4},
- {"label":"k43", "x":3.5, "y":4},
- {"label":"k44", "x":4.5, "y":4},
- {"label":"k45", "x":5.5, "y":4, "w":2},
- {"label":"k47", "x":7.5, "y":4, "w":2},
- {"label":"k49", "x":9.5, "y":4},
- {"label":"k410", "x":10.5, "y":4},
- {"label":"k411", "x":11.5, "y":4},
- {"label":"k412", "x":12.5, "y":4}
- ]
- },
- "LAYOUT_ortho_7u": {
- "layout": [
- {"label":"k00", "x":0, "y":0, "w":1.5},
- {"label":"k01", "x":1.5, "y":0},
- {"label":"k02", "x":2.5, "y":0},
- {"label":"k03", "x":3.5, "y":0},
- {"label":"k04", "x":4.5, "y":0},
- {"label":"k05", "x":5.5, "y":0},
- {"label":"k06", "x":6.5, "y":0},
- {"label":"k07", "x":7.5, "y":0},
- {"label":"k08", "x":8.5, "y":0},
- {"label":"k09", "x":9.5, "y":0},
- {"label":"k010", "x":10.5, "y":0},
- {"label":"k011", "x":11.5, "y":0},
- {"label":"k012", "x":12.5, "y":0},
- {"label":"k013", "x":13.5, "y":0, "w":1.5},
- {"label":"k10", "x":0, "y":1, "w":1.5},
- {"label":"k11", "x":1.5, "y":1},
- {"label":"k12", "x":2.5, "y":1},
- {"label":"k13", "x":3.5, "y":1},
- {"label":"k14", "x":4.5, "y":1},
- {"label":"k15", "x":5.5, "y":1},
- {"label":"k16", "x":6.5, "y":1},
- {"label":"k17", "x":7.5, "y":1},
- {"label":"k18", "x":8.5, "y":1},
- {"label":"k19", "x":9.5, "y":1},
- {"label":"k110", "x":10.5, "y":1},
- {"label":"k111", "x":11.5, "y":1},
- {"label":"k112", "x":12.5, "y":1},
- {"label":"k113", "x":13.5, "y":1, "w":1.5},
- {"label":"k20", "x":0, "y":2, "w":1.5},
- {"label":"k21", "x":1.5, "y":2},
- {"label":"k22", "x":2.5, "y":2},
- {"label":"k23", "x":3.5, "y":2},
- {"label":"k24", "x":4.5, "y":2},
- {"label":"k25", "x":5.5, "y":2},
- {"label":"k26", "x":6.5, "y":2},
- {"label":"k27", "x":7.5, "y":2},
- {"label":"k28", "x":8.5, "y":2},
- {"label":"k29", "x":9.5, "y":2},
- {"label":"k210", "x":10.5, "y":2},
- {"label":"k211", "x":11.5, "y":2},
- {"label":"k212", "x":12.5, "y":2},
- {"label":"k213", "x":13.5, "y":2, "w":1.5},
- {"label":"k30", "x":0, "y":3, "w":1.5},
- {"label":"k31", "x":1.5, "y":3},
- {"label":"k32", "x":2.5, "y":3},
- {"label":"k33", "x":3.5, "y":3},
- {"label":"k34", "x":4.5, "y":3},
- {"label":"k35", "x":5.5, "y":3},
- {"label":"k36", "x":6.5, "y":3},
- {"label":"k37", "x":7.5, "y":3},
- {"label":"k38", "x":8.5, "y":3},
- {"label":"k39", "x":9.5, "y":3},
- {"label":"k310", "x":10.5, "y":3},
- {"label":"k311", "x":11.5, "y":3},
- {"label":"k312", "x":12.5, "y":3},
- {"label":"k313", "x":13.5, "y":3, "w":1.5},
- {"label":"k41", "x":1.5, "y":4},
- {"label":"k42", "x":2.5, "y":4, "w":1.5},
- {"label":"k46", "x":4, "y":4, "w":7},
- {"label":"k411", "x":11, "y":4, "w":1.5},
- {"label":"k412", "x":12.5, "y":4}
- ]
- },
- "LAYOUT_2u_arrow": {
- "layout": [
- {"label":"k00", "x":0, "y":0, "w":1.5},
- {"label":"k01", "x":1.5, "y":0},
- {"label":"k02", "x":2.5, "y":0},
- {"label":"k03", "x":3.5, "y":0},
- {"label":"k04", "x":4.5, "y":0},
- {"label":"k05", "x":5.5, "y":0},
- {"label":"k06", "x":6.5, "y":0},
- {"label":"k07", "x":7.5, "y":0},
- {"label":"k08", "x":8.5, "y":0},
- {"label":"k09", "x":9.5, "y":0},
- {"label":"k010", "x":10.5, "y":0},
- {"label":"k011", "x":11.5, "y":0},
- {"label":"k012", "x":12.5, "y":0},
- {"label":"k013", "x":13.5, "y":0, "w":1.5},
- {"label":"k10", "x":0, "y":1, "w":1.5},
- {"label":"k11", "x":1.5, "y":1},
- {"label":"k12", "x":2.5, "y":1},
- {"label":"k13", "x":3.5, "y":1},
- {"label":"k14", "x":4.5, "y":1},
- {"label":"k15", "x":5.5, "y":1},
- {"label":"k16", "x":6.5, "y":1},
- {"label":"k17", "x":7.5, "y":1},
- {"label":"k18", "x":8.5, "y":1},
- {"label":"k19", "x":9.5, "y":1},
- {"label":"k110", "x":10.5, "y":1},
- {"label":"k111", "x":11.5, "y":1},
- {"label":"k112", "x":12.5, "y":1},
- {"label":"k113", "x":13.5, "y":1, "w":1.5},
- {"label":"k20", "x":0, "y":2, "w":1.5},
- {"label":"k21", "x":1.5, "y":2},
- {"label":"k22", "x":2.5, "y":2},
- {"label":"k23", "x":3.5, "y":2},
- {"label":"k24", "x":4.5, "y":2},
- {"label":"k25", "x":5.5, "y":2},
- {"label":"k26", "x":6.5, "y":2},
- {"label":"k27", "x":7.5, "y":2},
- {"label":"k28", "x":8.5, "y":2},
- {"label":"k29", "x":9.5, "y":2},
- {"label":"k210", "x":10.5, "y":2},
- {"label":"k211", "x":11.5, "y":2},
- {"label":"k212", "x":12.5, "y":2, "w":1.5},
- {"label":"k213", "x":14, "y":2},
- {"label":"k30", "x":0, "y":3, "w":1.5},
- {"label":"k31", "x":1.5, "y":3},
- {"label":"k32", "x":2.5, "y":3},
- {"label":"k33", "x":3.5, "y":3},
- {"label":"k34", "x":4.5, "y":3},
- {"label":"k35", "x":5.5, "y":3},
- {"label":"k36", "x":6.5, "y":3},
- {"label":"k37", "x":7.5, "y":3},
- {"label":"k38", "x":8.5, "y":3},
- {"label":"k39", "x":9.5, "y":3},
- {"label":"k310", "x":10.5, "y":3},
- {"label":"k311", "x":11.5, "y":3, "w":1.5},
- {"label":"k312", "x":13, "y":3},
- {"label":"k313", "x":14, "y":3},
- {"label":"k40", "x":0, "y":4, "w":1.25},
- {"label":"k41", "x":1.25, "y":4, "w":1.25},
- {"label":"k42", "x":2.5, "y":4},
- {"label":"k43", "x":3.5, "y":4},
- {"label":"k44", "x":4.5, "y":4, "w":2},
- {"label":"k46", "x":6.5, "y":4, "w":2},
- {"label":"k48", "x":8.5, "y":4},
- {"label":"k49", "x":9.5, "y":4, "w":1.25},
- {"label":"k410", "x":10.75, "y":4, "w":1.25},
- {"label":"k411", "x":12, "y":4},
- {"label":"k412", "x":13, "y":4},
- {"label":"k413", "x":14, "y":4}
- ]
- },
- "LAYOUT_625u_arrow": {
- "layout": [
- {"label":"k00", "x":0, "y":0, "w":1.5},
- {"label":"k01", "x":1.5, "y":0},
- {"label":"k02", "x":2.5, "y":0},
- {"label":"k03", "x":3.5, "y":0},
- {"label":"k04", "x":4.5, "y":0},
- {"label":"k05", "x":5.5, "y":0},
- {"label":"k06", "x":6.5, "y":0},
- {"label":"k07", "x":7.5, "y":0},
- {"label":"k08", "x":8.5, "y":0},
- {"label":"k09", "x":9.5, "y":0},
- {"label":"k010", "x":10.5, "y":0},
- {"label":"k011", "x":11.5, "y":0},
- {"label":"k012", "x":12.5, "y":0},
- {"label":"k013", "x":13.5, "y":0, "w":1.5},
- {"label":"k10", "x":0, "y":1, "w":1.5},
- {"label":"k11", "x":1.5, "y":1},
- {"label":"k12", "x":2.5, "y":1},
- {"label":"k13", "x":3.5, "y":1},
- {"label":"k14", "x":4.5, "y":1},
- {"label":"k15", "x":5.5, "y":1},
- {"label":"k16", "x":6.5, "y":1},
- {"label":"k17", "x":7.5, "y":1},
- {"label":"k18", "x":8.5, "y":1},
- {"label":"k19", "x":9.5, "y":1},
- {"label":"k110", "x":10.5, "y":1},
- {"label":"k111", "x":11.5, "y":1},
- {"label":"k112", "x":12.5, "y":1},
- {"label":"k113", "x":13.5, "y":1, "w":1.5},
- {"label":"k20", "x":0, "y":2, "w":1.5},
- {"label":"k21", "x":1.5, "y":2},
- {"label":"k22", "x":2.5, "y":2},
- {"label":"k23", "x":3.5, "y":2},
- {"label":"k24", "x":4.5, "y":2},
- {"label":"k25", "x":5.5, "y":2},
- {"label":"k26", "x":6.5, "y":2},
- {"label":"k27", "x":7.5, "y":2},
- {"label":"k28", "x":8.5, "y":2},
- {"label":"k29", "x":9.5, "y":2},
- {"label":"k210", "x":10.5, "y":2},
- {"label":"k211", "x":11.5, "y":2},
- {"label":"k212", "x":12.5, "y":2, "w":1.5},
- {"label":"k213", "x":14, "y":2},
- {"label":"k30", "x":0, "y":3, "w":1.5},
- {"label":"k31", "x":1.5, "y":3},
- {"label":"k32", "x":2.5, "y":3},
- {"label":"k33", "x":3.5, "y":3},
- {"label":"k34", "x":4.5, "y":3},
- {"label":"k35", "x":5.5, "y":3},
- {"label":"k36", "x":6.5, "y":3},
- {"label":"k37", "x":7.5, "y":3},
- {"label":"k38", "x":8.5, "y":3},
- {"label":"k39", "x":9.5, "y":3},
- {"label":"k310", "x":10.5, "y":3},
- {"label":"k311", "x":11.5, "y":3, "w":1.5},
- {"label":"k312", "x":13, "y":3},
- {"label":"k313", "x":14, "y":3},
- {"label":"k40", "x":0, "y":4, "w":1.25},
- {"label":"k41", "x":1.25, "y":4, "w":1.25},
- {"label":"k42", "x":2.5, "y":4},
- {"label":"k45", "x":3.5, "y":4, "w":6.25},
- {"label":"k49", "x":9.75, "y":4},
- {"label":"k410", "x":10.75, "y":4, "w":1.25},
- {"label":"k411", "x":12, "y":4},
- {"label":"k412", "x":13, "y":4},
- {"label":"k413", "x":14, "y":4}
- ]
- }
+ "LAYOUT_ortho_5x14": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.5},
+ {"x": 1.5, "y": 0},
+ {"x": 2.5, "y": 0},
+ {"x": 3.5, "y": 0},
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0, "w": 1.5},
+
+ {"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": 0, "y": 2, "w": 1.5},
+ {"x": 1.5, "y": 2},
+ {"x": 2.5, "y": 2},
+ {"x": 3.5, "y": 2},
+ {"x": 4.5, "y": 2},
+ {"x": 5.5, "y": 2},
+ {"x": 6.5, "y": 2},
+ {"x": 7.5, "y": 2},
+ {"x": 8.5, "y": 2},
+ {"x": 9.5, "y": 2},
+ {"x": 10.5, "y": 2},
+ {"x": 11.5, "y": 2},
+ {"x": 12.5, "y": 2},
+ {"x": 13.5, "y": 2, "w": 1.5},
+
+ {"x": 0, "y": 3, "w": 1.5},
+ {"x": 1.5, "y": 3},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"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, "w": 1.5},
+
+ {"x": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4},
+ {"x": 3.5, "y": 4},
+ {"x": 4.5, "y": 4},
+ {"x": 5.5, "y": 4},
+ {"x": 6.5, "y": 4},
+ {"x": 7.5, "y": 4},
+ {"x": 8.5, "y": 4},
+ {"x": 9.5, "y": 4},
+ {"x": 10.5, "y": 4},
+ {"x": 11.5, "y": 4},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_hhkb": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.5},
+ {"x": 1.5, "y": 0},
+ {"x": 2.5, "y": 0},
+ {"x": 3.5, "y": 0},
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0, "w": 1.5},
+
+ {"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": 0, "y": 2, "w": 1.5},
+ {"x": 1.5, "y": 2},
+ {"x": 2.5, "y": 2},
+ {"x": 3.5, "y": 2},
+ {"x": 4.5, "y": 2},
+ {"x": 5.5, "y": 2},
+ {"x": 6.5, "y": 2},
+ {"x": 7.5, "y": 2},
+ {"x": 8.5, "y": 2},
+ {"x": 9.5, "y": 2},
+ {"x": 10.5, "y": 2},
+ {"x": 11.5, "y": 2},
+ {"x": 12.5, "y": 2},
+ {"x": 13.5, "y": 2, "w": 1.5},
+
+ {"x": 0, "y": 3, "w": 1.5},
+ {"x": 1.5, "y": 3},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"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, "w": 1.5},
+
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4},
+ {"x": 3.5, "y": 4},
+ {"x": 4.5, "y": 4},
+ {"x": 5.5, "y": 4, "w": 2},
+ {"x": 7.5, "y": 4, "w": 2},
+ {"x": 9.5, "y": 4},
+ {"x": 10.5, "y": 4},
+ {"x": 11.5, "y": 4},
+ {"x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_ortho_7u": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.5},
+ {"x": 1.5, "y": 0},
+ {"x": 2.5, "y": 0},
+ {"x": 3.5, "y": 0},
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0, "w": 1.5},
+
+ {"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": 0, "y": 2, "w": 1.5},
+ {"x": 1.5, "y": 2},
+ {"x": 2.5, "y": 2},
+ {"x": 3.5, "y": 2},
+ {"x": 4.5, "y": 2},
+ {"x": 5.5, "y": 2},
+ {"x": 6.5, "y": 2},
+ {"x": 7.5, "y": 2},
+ {"x": 8.5, "y": 2},
+ {"x": 9.5, "y": 2},
+ {"x": 10.5, "y": 2},
+ {"x": 11.5, "y": 2},
+ {"x": 12.5, "y": 2},
+ {"x": 13.5, "y": 2, "w": 1.5},
+
+ {"x": 0, "y": 3, "w": 1.5},
+ {"x": 1.5, "y": 3},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"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, "w": 1.5},
+
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_arrow": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.5},
+ {"x": 1.5, "y": 0},
+ {"x": 2.5, "y": 0},
+ {"x": 3.5, "y": 0},
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0, "w": 1.5},
+
+ {"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": 0, "y": 2, "w": 1.5},
+ {"x": 1.5, "y": 2},
+ {"x": 2.5, "y": 2},
+ {"x": 3.5, "y": 2},
+ {"x": 4.5, "y": 2},
+ {"x": 5.5, "y": 2},
+ {"x": 6.5, "y": 2},
+ {"x": 7.5, "y": 2},
+ {"x": 8.5, "y": 2},
+ {"x": 9.5, "y": 2},
+ {"x": 10.5, "y": 2},
+ {"x": 11.5, "y": 2},
+ {"x": 12.5, "y": 2, "w": 1.5},
+ {"x": 14, "y": 2},
+
+ {"x": 0, "y": 3, "w": 1.5},
+ {"x": 1.5, "y": 3},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"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, "w": 1.5},
+ {"x": 13, "y": 3},
+ {"x": 14, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4},
+ {"x": 3.5, "y": 4},
+ {"x": 4.5, "y": 4, "w": 2},
+ {"x": 6.5, "y": 4, "w": 2},
+ {"x": 8.5, "y": 4},
+ {"x": 9.5, "y": 4, "w": 1.25},
+ {"x": 10.75, "y": 4, "w": 1.25},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_625u_arrow": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.5},
+ {"x": 1.5, "y": 0},
+ {"x": 2.5, "y": 0},
+ {"x": 3.5, "y": 0},
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0, "w": 1.5},
+
+ {"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": 0, "y": 2, "w": 1.5},
+ {"x": 1.5, "y": 2},
+ {"x": 2.5, "y": 2},
+ {"x": 3.5, "y": 2},
+ {"x": 4.5, "y": 2},
+ {"x": 5.5, "y": 2},
+ {"x": 6.5, "y": 2},
+ {"x": 7.5, "y": 2},
+ {"x": 8.5, "y": 2},
+ {"x": 9.5, "y": 2},
+ {"x": 10.5, "y": 2},
+ {"x": 11.5, "y": 2},
+ {"x": 12.5, "y": 2, "w": 1.5},
+ {"x": 14, "y": 2},
+
+ {"x": 0, "y": 3, "w": 1.5},
+ {"x": 1.5, "y": 3},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"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, "w": 1.5},
+ {"x": 13, "y": 3},
+ {"x": 14, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4},
+ {"x": 3.5, "y": 4, "w": 6.25},
+ {"x": 9.75, "y": 4},
+ {"x": 10.75, "y": 4, "w": 1.25},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_ortho_2x2u": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.5},
+ {"x": 1.5, "y": 0},
+ {"x": 2.5, "y": 0},
+ {"x": 3.5, "y": 0},
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0, "w": 1.5},
+
+ {"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": 0, "y": 2, "w": 1.5},
+ {"x": 1.5, "y": 2},
+ {"x": 2.5, "y": 2},
+ {"x": 3.5, "y": 2},
+ {"x": 4.5, "y": 2},
+ {"x": 5.5, "y": 2},
+ {"x": 6.5, "y": 2},
+ {"x": 7.5, "y": 2},
+ {"x": 8.5, "y": 2},
+ {"x": 9.5, "y": 2},
+ {"x": 10.5, "y": 2},
+ {"x": 11.5, "y": 2},
+ {"x": 12.5, "y": 2},
+ {"x": 13.5, "y": 2, "w": 1.5},
+
+ {"x": 0, "y": 3, "w": 1.5},
+ {"x": 1.5, "y": 3},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"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, "w": 1.5},
+
+ {"x": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4},
+ {"x": 3.5, "y": 4},
+ {"x": 4.5, "y": 4},
+ {"x": 5.5, "y": 4, "w": 2},
+ {"x": 7.5, "y": 4, "w": 2},
+ {"x": 9.5, "y": 4},
+ {"x": 10.5, "y": 4},
+ {"x": 11.5, "y": 4},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
}
- }
\ No newline at end of file
+}
diff --git a/keyboards/botanicalkeyboards/fm2u/fm2u.h b/keyboards/botanicalkeyboards/fm2u/fm2u.h
index eb5564afc35..83168032590 100644
--- a/keyboards/botanicalkeyboards/fm2u/fm2u.h
+++ b/keyboards/botanicalkeyboards/fm2u/fm2u.h
@@ -26,21 +26,88 @@
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
-#define LAYOUT_100u( \
+#define LAYOUT_1u( \
k00 \
-) \
-{ \
+) { \
{ k00 } \
}
-#define LAYOUT_125u LAYOUT_100u
-#define LAYOUT_150u LAYOUT_100u
-#define LAYOUT_175u LAYOUT_100u
-#define LAYOUT_200u LAYOUT_100u
-#define LAYOUT_225u LAYOUT_100u
-#define LAYOUT_275u LAYOUT_100u
-#define LAYOUT_300u LAYOUT_100u
-#define LAYOUT_600u LAYOUT_100u
-#define LAYOUT_625u LAYOUT_100u
-#define LAYOUT_700u LAYOUT_100u
-#define LAYOUT_iso LAYOUT_100u
+#define LAYOUT_1u25( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_1u5( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_1u75( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_2u( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_2u25( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_2u75( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_3u( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_6u( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_6u25( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_7u( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+#define LAYOUT_isoenter( \
+ k00 \
+) { \
+ { k00 } \
+}
+
+// Backward compatibility TODO: remove these
+#define LAYOUT_100u LAYOUT_1u
+#define LAYOUT_125u LAYOUT_1u25
+#define LAYOUT_150u LAYOUT_1u5
+#define LAYOUT_175u LAYOUT_1u75
+#define LAYOUT_200u LAYOUT_2u
+#define LAYOUT_225u LAYOUT_2u25
+#define LAYOUT_275u LAYOUT_2u75
+#define LAYOUT_300u LAYOUT_3u
+#define LAYOUT_600u LAYOUT_6u
+#define LAYOUT_625u LAYOUT_6u25
+#define LAYOUT_700u LAYOUT_7u
+#define LAYOUT_iso LAYOUT_isoenter
diff --git a/keyboards/botanicalkeyboards/fm2u/info.json b/keyboards/botanicalkeyboards/fm2u/info.json
index 6831dad9445..1798e19435d 100644
--- a/keyboards/botanicalkeyboards/fm2u/info.json
+++ b/keyboards/botanicalkeyboards/fm2u/info.json
@@ -1,56 +1,69 @@
{
- "keyboard_name": "fm2u",
- "url": "",
- "maintainer": "qmk",
- "width": 1,
- "height": 1,
+ "keyboard_name": "Botanical Keyboards FM2U",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 1,
+ "height": 1,
"layouts": {
- "LAYOUT_100u": {
- "layout": [{"x":0, "y":0}]
+ "LAYOUT_1u": {
+ "layout": [
+ {"x": 0, "y": 0}
+ ]
},
-
- "LAYOUT_125u": {
- "layout": [{"x":0, "y":0, "w":1.25}]
+ "LAYOUT_1u25": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.25}
+ ]
},
-
- "LAYOUT_150u": {
- "layout": [{"x":0, "y":0, "w":1.50}]
+ "LAYOUT_1u5": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.50}
+ ]
},
-
- "LAYOUT_175u": {
- "layout": [{"x":0, "y":0, "w":1.75}]
+ "LAYOUT_1u75": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.75}
+ ]
},
-
- "LAYOUT_200u": {
- "layout": [{"x":0, "y":0, "w":2.00}]
+ "LAYOUT_2u": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 2}
+ ]
},
-
- "LAYOUT_225u": {
- "layout": [{"x":0, "y":0, "w":2.25}]
+ "LAYOUT_2u25": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 2.25}
+ ]
},
-
- "LAYOUT_275u": {
- "layout": [{"x":0, "y":0, "w":2.75}]
+ "LAYOUT_2u75": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 2.75}
+ ]
},
-
- "LAYOUT_300u": {
- "layout": [{"x":0, "y":0, "w":3.00}]
+ "LAYOUT_3u": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 3}
+ ]
},
-
- "LAYOUT_600u": {
- "layout": [{"x":0, "y":0, "w":6.00}]
+ "LAYOUT_6u": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 6}
+ ]
},
-
- "LAYOUT_625u": {
- "layout": [{"x":0, "y":0, "w":6.25}]
+ "LAYOUT_6u25": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 6.25}
+ ]
},
-
- "LAYOUT_700u": {
- "layout": [{"x":0, "y":0, "w":7.00}]
+ "LAYOUT_7u": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 7}
+ ]
},
-
- "LAYOUT_iso": {
- "layout": [{"x":0.25, "y":0, "w":1.25, "h":2}]
+ "LAYOUT_isoenter": {
+ "layout": [
+ {"x": 0.25, "y": 0, "w": 1.25, "h": 2}
+ ]
}
}
}
diff --git a/keyboards/botanicalkeyboards/fm2u/keymaps/default/keymap.c b/keyboards/botanicalkeyboards/fm2u/keymaps/default/keymap.c
index afefa35334b..b1c7eb9d361 100644
--- a/keyboards/botanicalkeyboards/fm2u/keymaps/default/keymap.c
+++ b/keyboards/botanicalkeyboards/fm2u/keymaps/default/keymap.c
@@ -15,11 +15,9 @@
*/
#include QMK_KEYBOARD_H
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
- [0] = LAYOUT_100u(
+ [0] = LAYOUT_2u(
KC_B
)
};
-
diff --git a/keyboards/botanicalkeyboards/fm2u/keymaps/via/keymap.c b/keyboards/botanicalkeyboards/fm2u/keymaps/via/keymap.c
index 01b00f18781..2adc87a13be 100644
--- a/keyboards/botanicalkeyboards/fm2u/keymaps/via/keymap.c
+++ b/keyboards/botanicalkeyboards/fm2u/keymaps/via/keymap.c
@@ -18,20 +18,19 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
- [0] = LAYOUT_100u(
+ [0] = LAYOUT_2u(
KC_B
),
- [1] = LAYOUT_100u(
+ [1] = LAYOUT_2u(
KC_TRNS
),
- [2] = LAYOUT_100u(
+ [2] = LAYOUT_2u(
KC_TRNS
),
- [3] = LAYOUT_100u(
+ [3] = LAYOUT_2u(
KC_TRNS
- ),
+ )
};
-
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c
index aad2d643cd9..f9234a7b2f9 100644
--- a/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c
+++ b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c
@@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, SE_AO, SE_AE, SE_OE, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_COMM,SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
KC_LCTRL,KC_A, KC_O, KC_E, KC_U, KC_I, KC_H, KC_D, KC_T, KC_N, KC_S, SE_MINS, KC_ENT, \
KC_LSFT, SE_LTGT,KC_DOT, KC_Q, KC_J, KC_K, KC_B, KC_X, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
- MO(KM_MEDIA),KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
+ MO(KM_MEDIA),KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,TG(KM_QWERTY), KC_LEFT,KC_DOWN,KC_RGHT),
/* Layer 1: Standard ISO layer */
[KM_QWERTY] = LAYOUT( \
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
@@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, SE_AO, SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
KC_LCTRL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SE_OE, SE_AE, KC_ENT, \
KC_LSFT, SE_LTGT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, SE_MINS, KC_RSFT, KC_UP, \
- MO(KM_MEDIA),KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
+ MO(KM_MEDIA),KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,TG(KM_QWERTY), KC_LEFT,KC_DOWN,KC_RGHT),
/* Layer 2: Media layer */
[KM_MEDIA] = LAYOUT( \
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
@@ -75,10 +75,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______),
};
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TOGGLE(KM_QWERTY)
-};
-
void matrix_scan_user(void)
{
uint8_t layer = biton32(layer_state);
diff --git a/keyboards/candybar/lefty/config.h b/keyboards/candybar/lefty/config.h
index c1539671301..e8a1f00815e 100644
--- a/keyboards/candybar/lefty/config.h
+++ b/keyboards/candybar/lefty/config.h
@@ -19,8 +19,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x544B //TK
+#define PRODUCT_ID 0x0003
#define DEVICE_VER 0x0006
#define MANUFACTURER The Key Company
#define PRODUCT Candybar
diff --git a/keyboards/candybar/lefty/keymaps/via/keymap.c b/keyboards/candybar/lefty/keymaps/via/keymap.c
new file mode 100644
index 00000000000..153fd99c507
--- /dev/null
+++ b/keyboards/candybar/lefty/keymaps/via/keymap.c
@@ -0,0 +1,38 @@
+/* Copyright 2018 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = LAYOUT(
+ KC_P7 , KC_P8, KC_P9 , KC_PAST, KC_ESC , KC_Q , KC_W , KC_E, KC_R , KC_T , KC_Y, KC_U , KC_I , KC_O , KC_P , KC_DEL , KC_BSPC , \
+ KC_P4 , KC_P5, KC_P6 , KC_PMNS, 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_P1 , KC_P2, KC_P3 , KC_PPLS, KC_LSFT, KC_Z , KC_X, KC_C , KC_V , KC_B, KC_N , KC_M , KC_COMM, KC_DOT , KC_UP ,KC_RSFT , \
+ MO(_FL), KC_P0, KC_PDOT, KC_PENT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC , KC_BSPC, KC_APP , KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+ [_FL] = LAYOUT(
+ KC_P7 , KC_P8, KC_P9 , KC_VOLU, RESET , KC_Q , KC_W , KC_E, KC_R , KC_T , KC_Y, KC_U , KC_I , KC_LBRC, KC_RBRC, KC_INS , KC_BSPC , \
+ KC_P4 , KC_P5, KC_P6 , KC_VOLD, KC_TAB , KC_A , KC_SLCK, KC_D, KC_F , KC_G , KC_H, KC_J , KC_K , KC_L , KC_QUOT, KC_BSLS , \
+ KC_P1 , KC_P2, KC_P3 , KC_PEQL, KC_LSFT, KC_Z , KC_X, KC_CAPS, KC_V , KC_B, KC_NLCK, KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_PGUP , \
+ KC_END, KC_P0, KC_PDOT, KC_PENT, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC , KC_BSPC, KC_APP , MO(_FL), KC_HOME, KC_PGDN),
+};
diff --git a/keyboards/candybar/lefty/keymaps/via/rules.mk b/keyboards/candybar/lefty/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/candybar/lefty/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/candybar/lefty/rules.mk b/keyboards/candybar/lefty/rules.mk
index cb1b832886a..52ef91c47ff 100644
--- a/keyboards/candybar/lefty/rules.mk
+++ b/keyboards/candybar/lefty/rules.mk
@@ -7,7 +7,7 @@ MCU = STM32F072
# EXTRAFLAGS+=-flto
LINK_TIME_OPTIMIZATION_ENABLE = yes
BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
diff --git a/keyboards/candybar/righty/config.h b/keyboards/candybar/righty/config.h
index c1539671301..50045378465 100644
--- a/keyboards/candybar/righty/config.h
+++ b/keyboards/candybar/righty/config.h
@@ -19,8 +19,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x544B //TK
+#define PRODUCT_ID 0x0002
#define DEVICE_VER 0x0006
#define MANUFACTURER The Key Company
#define PRODUCT Candybar
diff --git a/keyboards/candybar/righty/keymaps/via/keymap.c b/keyboards/candybar/righty/keymaps/via/keymap.c
new file mode 100644
index 00000000000..8f4cc08c746
--- /dev/null
+++ b/keyboards/candybar/righty/keymaps/via/keymap.c
@@ -0,0 +1,38 @@
+/* Copyright 2018 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = LAYOUT(
+ KC_ESC,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_DEL,KC_BSPC,KC_P7,KC_P8,KC_P9,KC_PAST, \
+ 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_P4,KC_P5,KC_P6,KC_PMNS, \
+ KC_LSFT,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT,KC_RSFT,KC_UP,KC_P1,KC_P2,KC_P3,KC_PPLS, \
+ KC_LCTL,KC_LGUI,KC_LALT,KC_SPC,KC_SPC,KC_BSPC,KC_APP,MO(_FL),KC_LEFT,KC_DOWN,KC_RGHT,KC_P0,KC_PDOT,KC_PENT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = LAYOUT(
+ RESET,KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_LBRC,KC_RBRC,KC_INS,KC_BSPC,KC_P7,KC_P8,KC_P9,KC_VOLU, \
+ KC_TAB,KC_A,KC_SLCK,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_QUOT,KC_BSLS,KC_P4,KC_P5,KC_P6,KC_VOLD, \
+ KC_LSFT,KC_Z,KC_X,KC_CAPS,KC_V,KC_B,KC_NLCK,KC_M,KC_COMM,KC_DOT,KC_SLSH,KC_PGUP,KC_P1,KC_P2,KC_P3,KC_PEQL, \
+ KC_LCTL,KC_LGUI,KC_LALT,KC_SPC,KC_SPC,KC_BSPC,KC_APP,MO(_FL),KC_HOME,KC_PGDN,KC_END,KC_P0,KC_PDOT,KC_PENT),
+};
diff --git a/keyboards/candybar/righty/keymaps/via/rules.mk b/keyboards/candybar/righty/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/candybar/righty/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/candybar/righty/rules.mk b/keyboards/candybar/righty/rules.mk
index cb1b832886a..52ef91c47ff 100644
--- a/keyboards/candybar/righty/rules.mk
+++ b/keyboards/candybar/righty/rules.mk
@@ -7,7 +7,7 @@ MCU = STM32F072
# EXTRAFLAGS+=-flto
LINK_TIME_OPTIMIZATION_ENABLE = yes
BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
diff --git a/keyboards/cannonkeys/chimera65/info.json b/keyboards/cannonkeys/chimera65/info.json
index 75a5f293d10..f4c6046a65c 100644
--- a/keyboards/cannonkeys/chimera65/info.json
+++ b/keyboards/cannonkeys/chimera65/info.json
@@ -2,6 +2,91 @@
"keyboard_name": "Chimera65",
"url": "https://cannonkeys.com",
"maintainer": "awkannan",
- "width": 16,
- "height": 5
+ "width": 16.5,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT_default": {
+ "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.5, "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.5, "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.25, "y": 3.25},
+
+ {"x": 15.5, "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},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+
+ {"x": 13.25, "y": 4.25},
+ {"x": 14.25, "y": 4.25},
+ {"x": 15.25, "y": 4.25}
+ ]
+ }
+ }
}
diff --git a/keyboards/cannonkeys/iron165/keymaps/via/keymap.c b/keyboards/cannonkeys/iron165/keymaps/via/keymap.c
index ac0efd62c44..610b442cdc6 100644
--- a/keyboards/cannonkeys/iron165/keymaps/via/keymap.c
+++ b/keyboards/cannonkeys/iron165/keymaps/via/keymap.c
@@ -24,23 +24,41 @@ along with this program. If not, see .
enum layer_names {
_BASE,
_FN1,
+ _FN2,
+ _FN3
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = LAYOUT_default(
- 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_GRV, KC_BSLS,
- 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_NUBS, KC_ENT, KC_PGUP,
- KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ [_BASE] = LAYOUT_default(
+ 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_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_NUBS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT_default(
- 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, KC_DEL, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- BL_BRTG, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- BL_INC, BL_DEC, BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS
+ 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, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_FN2] = LAYOUT_default(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_FN3] = LAYOUT_default(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/cannonkeys/iron165/keymaps/via/rules.mk b/keyboards/cannonkeys/iron165/keymaps/via/rules.mk
index d12497792d5..16d33cd89fe 100644
--- a/keyboards/cannonkeys/iron165/keymaps/via/rules.mk
+++ b/keyboards/cannonkeys/iron165/keymaps/via/rules.mk
@@ -1,5 +1,2 @@
-# rules.mk overrides to enable VIA
-
-RAW_ENABLE = yes
-DYNAMIC_KEYMAP_ENABLE = yes
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/practice60/config.h b/keyboards/cannonkeys/practice60/config.h
index d17b7f04dd0..1e8e5ec7c8c 100644
--- a/keyboards/cannonkeys/practice60/config.h
+++ b/keyboards/cannonkeys/practice60/config.h
@@ -18,10 +18,10 @@ along with this program. If not, see .
#pragma once
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6464
+#define VENDOR_ID 0xCA04
+#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
-#define MANUFACTURER QMK
+#define MANUFACTURER CannonKeys
#define PRODUCT Practice 60
#define DESCRIPTION Practice 60
diff --git a/keyboards/cannonkeys/practice60/keymaps/via/keymap.c b/keyboards/cannonkeys/practice60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..1bafdbb88f8
--- /dev/null
+++ b/keyboards/cannonkeys/practice60/keymaps/via/keymap.c
@@ -0,0 +1,35 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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,
+ LT(1,KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT,KC_UP),
+ KC_LCTL, KC_LGUI, KC_LALT , KC_SPC, KC_RALT, LT(1,KC_LEFT), LT(2,KC_DOWN), MT(MOD_RCTL,KC_RGHT)
+ ),
+
+ [1] = LAYOUT_60_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_HOME, KC_END, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_INS, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MENU, KC_TRNS
+ ),
+
+ [2] = LAYOUT_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_TOGG, BL_DEC, BL_INC, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,
+ KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/cannonkeys/practice60/keymaps/via/rules.mk b/keyboards/cannonkeys/practice60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cannonkeys/practice60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cannonkeys/practice60/readme.md b/keyboards/cannonkeys/practice60/readme.md
index 044aadf6e98..60ce0066f98 100644
--- a/keyboards/cannonkeys/practice60/readme.md
+++ b/keyboards/cannonkeys/practice60/readme.md
@@ -9,4 +9,11 @@ Make example for this keyboard (after setting up your build environment):
make cannonkeys/practice60:default
+Flashing example for this keyboard:
+
+ make cannonkeys/practice60: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).
+
+Build guide available at: https://docs.cannonkeys.com/bluepill-build/
+Blue Pill flashing guide at: https://docs.cannonkeys.com/flashing/
diff --git a/keyboards/chimera_ortho_plus/chimera_ortho_plus.c b/keyboards/chimera_ortho_plus/chimera_ortho_plus.c
new file mode 100644
index 00000000000..1972f2a9c33
--- /dev/null
+++ b/keyboards/chimera_ortho_plus/chimera_ortho_plus.c
@@ -0,0 +1,23 @@
+#include "chimera_ortho_plus.h"
+
+void uart_init(void) {
+ SERIAL_UART_INIT();
+}
+
+void led_init(void) {
+ setPinOutput(D1);
+ setPinOutput(F4);
+ setPinOutput(F5);
+ writePinHigh(D1);
+ writePinHigh(F4);
+ writePinHigh(F5);
+}
+
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ uart_init();
+ led_init();
+}
diff --git a/keyboards/chimera_ortho_plus/chimera_ortho_plus.h b/keyboards/chimera_ortho_plus/chimera_ortho_plus.h
new file mode 100644
index 00000000000..f75dc610574
--- /dev/null
+++ b/keyboards/chimera_ortho_plus/chimera_ortho_plus.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#include "quantum.h"
+
+#define red_led_off PORTF |= (1<<5)
+#define red_led_on PORTF &= ~(1<<5)
+#define blu_led_off PORTF |= (1<<4)
+#define blu_led_on PORTF &= ~(1<<4)
+#define grn_led_off PORTD |= (1<<1)
+#define grn_led_on PORTD &= ~(1<<1)
+
+#define set_led_off red_led_off; grn_led_off; blu_led_off
+#define set_led_red red_led_on; grn_led_off; blu_led_off
+#define set_led_blue red_led_off; grn_led_off; blu_led_on
+#define set_led_green red_led_off; grn_led_on; blu_led_off
+#define set_led_yellow red_led_on; grn_led_on; blu_led_off
+#define set_led_magenta red_led_on; grn_led_off; blu_led_on
+#define set_led_cyan red_led_off; grn_led_on; blu_led_on
+#define set_led_white red_led_on; grn_led_on; blu_led_on
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, 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, k35, \
+ k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47, \
+ k48, k49, k50, k51 \
+) \
+{ \
+ { k03, k40, k26, k15, k28, k01, k42, k31, k20, k33, k08, k10 }, \
+ { k00, k37, k14, k27, k16, k36, k47, k19, k32, k21, k46, k11 }, \
+ { k12, k25, k02, k39, k17, k49, k50, k18, k44, k09, k34, k23 }, \
+ { k24, k13, k38, k04, k05, k48, k51, k06, k07, k45, k22, k35 }, \
+ { k29, k41, KC_NO, KC_NO, KC_NO, KC_NO, k30, k43, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
diff --git a/keyboards/chimera_ortho_plus/config.h b/keyboards/chimera_ortho_plus/config.h
new file mode 100644
index 00000000000..d47c1a7640f
--- /dev/null
+++ b/keyboards/chimera_ortho_plus/config.h
@@ -0,0 +1,76 @@
+/*
+Copyright 2012 Jun Wako
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xDE1D
+#define DEVICE_VER 0x0001
+#define MANUFACTURER unknown
+#define PRODUCT Chimera Ortho Plus
+#define DESCRIPTION q.m.k. keyboard firmware for Chimera Ortho Plus
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 12
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+/*
+ * 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
+
+//UART settings for communication with the RF microcontroller
+#define SERIAL_UART_BAUD 1000000
+#define SERIAL_UART_DATA UDR1
+#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
+#define SERIAL_UART_INIT() do { \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX and RX */ \
+ UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ } while(0)
diff --git a/keyboards/chimera_ortho_plus/info.json b/keyboards/chimera_ortho_plus/info.json
new file mode 100644
index 00000000000..7c892c44196
--- /dev/null
+++ b/keyboards/chimera_ortho_plus/info.json
@@ -0,0 +1,65 @@
+{
+ "keyboard_name": "Chimera Ortho Plus",
+ "keyboard_folder": "chimera_ortho_plus",
+ "maintainer": "qmk",
+ "width": 13.5,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "{", "x": 0, "y": 0},
+ {"label": "1", "x": 1, "y": 0},
+ {"label": "2", "x": 2, "y": 0},
+ {"label": "3", "x": 3, "y": 0},
+ {"label": "4", "x": 4, "y": 0},
+ {"label": "5", "x": 5, "y": 0},
+ {"label": "6", "x": 7.5, "y": 0},
+ {"label": "7", "x": 8.5, "y": 0},
+ {"label": "8", "x": 9.5, "y": 0},
+ {"label": "9", "x": 10.5, "y": 0},
+ {"label": "0", "x": 11.5, "y": 0},
+ {"label": "}", "x": 12.5, "y": 0},
+ {"label": "Esc", "x": 0, "y": 1},
+ {"label": "Q", "x": 1, "y": 1},
+ {"label": "W", "x": 2, "y": 1},
+ {"label": "E", "x": 3, "y": 1},
+ {"label": "R", "x": 4, "y": 1},
+ {"label": "T", "x": 5, "y": 1},
+ {"label": "Y", "x": 7.5, "y": 1},
+ {"label": "U", "x": 8.5, "y": 1},
+ {"label": "I", "x": 9.5, "y": 1},
+ {"label": "O", "x": 10.5, "y": 1},
+ {"label": "P", "x": 11.5, "y": 1},
+ {"label": "\"", "x": 12.5, "y": 1},
+ {"label": "Tab", "x": 0, "y": 2},
+ {"label": "A", "x": 1, "y": 2},
+ {"label": "S", "x": 2, "y": 2},
+ {"label": "D", "x": 3, "y": 2},
+ {"label": "F", "x": 4, "y": 2},
+ {"label": "G", "x": 5, "y": 2},
+ {"label": "H", "x": 7.5, "y": 2},
+ {"label": "J", "x": 8.5, "y": 2},
+ {"label": "K", "x": 9.5, "y": 2},
+ {"label": "L", "x": 10.5, "y": 2},
+ {"label": ";", "x": 11.5, "y": 2},
+ {"label": "Enter", "x": 12.5, "y": 2},
+ {"label": "(", "x": 0, "y": 3},
+ {"label": "Z", "x": 1, "y": 3},
+ {"label": "X", "x": 2, "y": 3},
+ {"label": "C", "x": 3, "y": 3},
+ {"label": "V", "x": 4, "y": 3},
+ {"label": "B", "x": 5, "y": 3},
+ {"label": "N", "x": 7.5, "y": 3},
+ {"label": "M", "x": 8.5, "y": 3},
+ {"label": ",", "x": 9.5, "y": 3},
+ {"label": ".", "x": 10.5, "y": 3},
+ {"label": "/", "x": 11.5, "y": 3},
+ {"label": ")", "x": 12.5, "y": 3},
+ {"label": "Num Layer", "x": 4, "y": 4},
+ {"label": "Back Space", "x": 5, "y": 4},
+ {"label": "Space", "x": 7.5, "y": 4},
+ {"label": "Symbol Layer", "x": 8.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/chimera_ortho_plus/keymaps/default/config.h b/keyboards/chimera_ortho_plus/keymaps/default/config.h
new file mode 100644
index 00000000000..bdfd4db80fa
--- /dev/null
+++ b/keyboards/chimera_ortho_plus/keymaps/default/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+// place overrides here
+#define LONGPRESS_DELAY 150
+//#define LAYER_TOGGLE_DELAY 300
diff --git a/keyboards/chimera_ortho_plus/keymaps/default/keymap.c b/keyboards/chimera_ortho_plus/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9b450377013
--- /dev/null
+++ b/keyboards/chimera_ortho_plus/keymaps/default/keymap.c
@@ -0,0 +1,185 @@
+#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 chimera_ortho_plus_layers {
+ _QWERTY,
+ _CAPS,
+ _NUMPAD,
+ _SYMBOLS,
+ _MACROS,
+ _NAV
+};
+
+#define KC_NMPD TG(_NUMPAD)
+#define KC_SYMB TG(_SYMBOLS)
+#define KC_SPFN LT(_NAV,KC_4)
+#define KC_SCTL MT(MOD_LCTL, KC_2)
+#define KC_SCTR MT(MOD_LCTL, KC_9)
+#define KC_SPLT MT(MOD_LALT, KC_3)
+#define KC_SPRT MT(MOD_LALT, KC_8)
+#define KC_GBRC MT(MOD_RGUI, KC_7)
+#define KC_GQOT MT(MOD_LGUI, KC_QUOT)
+#define KC_MESC LT(_MACROS, KC_ESC)
+#define KC_CAD LALT(LCTL(KC_DEL))
+
+enum custom_keycodes {
+ KC_INCL = SAFE_RANGE,
+ KC_PULL,
+ KC_PUSH,
+ KC_SCAP,
+ KC_SCOF
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------.
+ KC_LBRC, KC_1 ,KC_SCTL,KC_SPLT,KC_SPFN, KC_5 , KC_6 ,KC_GBRC,KC_SPRT,KC_SCTR, KC_0 ,KC_RBRC,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_MESC, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_QUOT,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ 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_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSPC,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_NMPD,KC_BSPC, KC_SPC ,KC_SYMB
+ //|-------------------------------+-------+-------| |-------+-------+-------------------------------|
+ ),
+
+ [_CAPS] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------.
+ _______,KC_UNDS,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_COLN,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_SCOF,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_SCOF,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______, _______,_______
+ //|-------------------------------+-------+-------| |-------+-------+-------------------------------|
+ ),
+
+ [_NUMPAD] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------.
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_MINS,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,KC_COLN,_______,_______,_______, _______, KC_7 , KC_8 , KC_9 ,KC_ASTR,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,KC_DOT ,_______,_______,_______, _______, KC_4 , KC_5 , KC_6 ,KC_PLUS,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______, _______, KC_1 , KC_2 , KC_3 ,KC_SLSH,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______, _______, KC_0
+ //|-------------------------------+-------+-------/ |-------+-------+-------------------------------|
+ ),
+
+ [_SYMBOLS] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------.
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSLS,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_TILD,KC_EQL ,KC_UNDS,KC_LCBR,KC_RCBR,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 , KC_GRV ,KC_PLUS,KC_MINS,KC_LBRC,KC_RBRC,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_PIPE,_______, _______,_______
+ //|-------------------------------+-------+-------| |-------+-------+-------------------------------|
+ ),
+
+ [_MACROS] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------.
+ _______,_______,_______,_______,_______,_______, _______ ,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______, _______ ,_______,KC_INCL,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,KC_CAD ,_______,_______, _______ ,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ KC_SCAP,_______,_______,_______,_______,_______, _______ ,_______,KC_PULL,KC_PUSH,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______, _______,_______
+ //|-------------------------------+-------+-------| |-------+-------+-------------------------------|
+ ),
+
+ [_NAV] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------.
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______, _______,KC_PGUP, KC_UP ,KC_PGDN,KC_PSCR,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______, _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+ _______,KC_DEL , _______,_______
+ //|-------------------------------+-------+-------| |-------+-------+-------------------------------|
+ )
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ /* include some kind of library or header */
+ case KC_INCL:
+ if (record->event.pressed) {
+ SEND_STRING("#include <>" SS_TAP(X_LEFT));
+ }
+ return false;
+ case KC_PULL:
+ if (record->event.pressed) {
+ SEND_STRING("git pull\n");
+ }
+ return false;
+ case KC_PUSH:
+ if (record->event.pressed){
+ SEND_STRING("git push\n");
+ }
+ return false;
+ case KC_SCAP:
+ if (record->event.pressed){
+ layer_on(_CAPS);
+ tap_code(KC_CAPS);
+ }
+ return false;
+ case KC_SCOF:
+ if (record->event.pressed){
+ layer_off(_CAPS);
+ tap_code(KC_CAPS);
+ }
+ return false;
+ }
+ return true;
+};
+
+
+void matrix_scan_user(void) {
+ uint8_t layer = get_highest_layer(layer_state);
+
+ switch (layer) {
+ case _QWERTY:
+ set_led_green;
+ break;
+ case _CAPS:
+ set_led_white;
+ break;
+ case _NUMPAD:
+ set_led_blue;
+ break;
+ case _SYMBOLS:
+ set_led_red;
+ break;
+ case _MACROS:
+ set_led_cyan;
+ break;
+ case _NAV:
+ set_led_magenta;
+ break;
+ default:
+ set_led_green;
+ break;
+ }
+};
diff --git a/keyboards/chimera_ortho_plus/matrix.c b/keyboards/chimera_ortho_plus/matrix.c
new file mode 100644
index 00000000000..ed6eac2b093
--- /dev/null
+++ b/keyboards/chimera_ortho_plus/matrix.c
@@ -0,0 +1,154 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 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 .
+*/
+#include
+#include
+#if defined(__AVR__)
+#include
+#endif
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+void matrix_init(void) {
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ SERIAL_UART_INIT();
+
+ uint32_t timeout = 0;
+
+ //the s character requests the RF slave to send the matrix
+ SERIAL_UART_DATA = 's';
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[14] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 14; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while(!SERIAL_UART_RXD_PRESENT){
+ timeout++;
+ if (timeout > 10000){
+ break;
+ }
+ }
+ uart_data[i] = SERIAL_UART_DATA;
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[10] == 0xE0)
+ {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 6;
+ }
+ }
+
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<.
+ */
+
+#include "choc_taro.h"
diff --git a/keyboards/choc_taro/choc_taro.h b/keyboards/choc_taro/choc_taro.h
new file mode 100644
index 00000000000..cf07b80b5c0
--- /dev/null
+++ b/keyboards/choc_taro/choc_taro.h
@@ -0,0 +1,342 @@
+/* Copyright 2020 kakunpc
+ *
+ * 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 .
+ */
+
+#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.
+ */
+
+/* LAYOUT_all
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│014│015│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│114 │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213 │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│312 │313│
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───┴───┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_all( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, k313, KC_NO } , \
+ { k014, k114, KC_NO, KC_NO, KC_NO } , \
+ { k015, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
+
+/* LAYOUT_ansi
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│ 014 │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│114 │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213 │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│ 312 │
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───────┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_ansi( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, KC_NO, KC_NO } , \
+ { k014, k114, 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 } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
+
+/* LAYOUT_ansi_split_bs
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│014│015│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│114 │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213 │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│ 312 │
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───────┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_ansi_split_bs( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, KC_NO, KC_NO } , \
+ { k014, k114, KC_NO, KC_NO, KC_NO } , \
+ { k015, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
+
+
+/* LAYOUT_ansi_split_rshift
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│ 014 │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│114 │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213 │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│312 │313│
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───┴───┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_ansi_split_rshift( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, k313, KC_NO } , \
+ { k014, k114, 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 } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
+
+
+/* LAYOUT_iso
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│ 014 │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐114 │
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213│ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│ 312 │
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───────┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_iso( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, KC_NO, KC_NO } , \
+ { k014, k114, 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 } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
+
+/* LAYOUT_iso_split_rshift
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│ 014 │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐114 │
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213│ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│312 │313│
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───┴───┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_iso_split_rshift( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, k313, KC_NO } , \
+ { k014, k114, 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 } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
+
+/* LAYOUT_iso_split_bs
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│014│015│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐114 │
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213│ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│ 312 │
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───────┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_iso_split_bs( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, KC_NO, KC_NO } , \
+ { k014, k114, KC_NO, KC_NO, KC_NO } , \
+ { k015, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
+
+/* LAYOUT_iso_split_bs_rshift
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │001│002│003│004│005│006│007│008│009│010│011│012│013│014│015│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │101 │102│103│104│105│106│107│108│109│110│111│112│113│ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐114 │
+ * │201 │202│203│204│205│206│207│208│209│210│211│212│213│ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤
+ * │301 │301│302│303│304│305│306│307│308│309│310│311│312 │313│
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───┴───┤
+ * │▓▓▓▓│401 │402 │403 │404 │405 │406│407│408│▓▓▓▓▓▓▓│
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───────┘
+*/
+#define LAYOUT_iso_split_bs_rshift( \
+ k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113, k114, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, \
+ k401, k402, k403, k404, k405, k406, k407, k408 \
+) \
+{ \
+ { k009, k109, k209, k309, KC_NO } , \
+ { k010, k110, k210, k310, KC_NO } , \
+ { k011, k111, k211, k311, KC_NO } , \
+ { k012, k112, k212, k312, KC_NO } , \
+ { k013, k113, k213, k313, KC_NO } , \
+ { k014, k114, KC_NO, KC_NO, KC_NO } , \
+ { k015, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } , \
+ { k001, k101, k201, k301, k401 } , \
+ { k002, k102, k202, k302, k402 } , \
+ { k003, k103, k203, k303, k403 } , \
+ { k004, k104, k204, k304, k404 } , \
+ { k005, k105, k205, k305, k405 } , \
+ { k006, k106, k206, k306, k406 } , \
+ { k007, k107, k207, k307, k407 } , \
+ { k008, k108, k208, k308, k408 } \
+}
diff --git a/keyboards/choc_taro/config.h b/keyboards/choc_taro/config.h
new file mode 100644
index 00000000000..4ccc686a662
--- /dev/null
+++ b/keyboards/choc_taro/config.h
@@ -0,0 +1,219 @@
+/*
+Copyright 2020 kakunpc
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xDCED
+#define PRODUCT_ID 0x71CC
+#define DEVICE_VER 0x0001
+#define MANUFACTURER kakunpc
+#define PRODUCT choc_taro
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 16
+#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, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4 }
+#define UNUSED_PINS
+
+/*
+ * 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/choc_taro/info.json b/keyboards/choc_taro/info.json
new file mode 100644
index 00000000000..33821afe008
--- /dev/null
+++ b/keyboards/choc_taro/info.json
@@ -0,0 +1,558 @@
+{
+ "keyboard_name": "choc_taro",
+ "url": "https://kakunpc.booth.pm/",
+ "maintainer": "kakunpc",
+ "width": 15,
+ "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":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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ },
+ "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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ },
+ "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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ },
+ "LAYOUT_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":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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ },
+ "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":13.75, "y":1, "w":1.25, "h":2},
+
+ {"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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ },
+ "LAYOUT_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":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.75, "y":1, "w":1.25, "h":2},
+
+ {"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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ },
+ "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":13.75, "y":1, "w":1.25, "h":2},
+
+ {"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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ },
+ "LAYOUT_iso_split_bs_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},
+ {"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.75, "y":1, "w":1.25, "h":2},
+
+ {"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":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":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/choc_taro/keymaps/default/keymap.c b/keyboards/choc_taro/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4de3c2d55ae
--- /dev/null
+++ b/keyboards/choc_taro/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+/* Copyright 2020 kakunpc
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all( /* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ )
+};
diff --git a/keyboards/choc_taro/keymaps/default/readme.md b/keyboards/choc_taro/keymaps/default/readme.md
new file mode 100644
index 00000000000..a2cb119040a
--- /dev/null
+++ b/keyboards/choc_taro/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for choc_taro
diff --git a/keyboards/choc_taro/keymaps/via/keymap.c b/keyboards/choc_taro/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a1d48eb5e9f
--- /dev/null
+++ b/keyboards/choc_taro/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2020 kakunpc
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all( /* Base */
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ ),
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/choc_taro/keymaps/via/readme.md b/keyboards/choc_taro/keymaps/via/readme.md
new file mode 100644
index 00000000000..cb3af77dfab
--- /dev/null
+++ b/keyboards/choc_taro/keymaps/via/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for choc_taro
+
+This is an experimental. Use at your own risk.
diff --git a/keyboards/choc_taro/keymaps/via/rules.mk b/keyboards/choc_taro/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/choc_taro/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/choc_taro/matrix.c b/keyboards/choc_taro/matrix.c
new file mode 100644
index 00000000000..02421551da5
--- /dev/null
+++ b/keyboards/choc_taro/matrix.c
@@ -0,0 +1,156 @@
+/*
+Copyright 2012-2018 Jun Wako, Jack Humbert, Yiancar
+
+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 .
+*/
+#include
+#include
+#include "matrix.h"
+#include "quantum.h"
+
+#if (MATRIX_COLS <= 8)
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+
+static void select_row(uint8_t row) {
+ setPinOutput(row_pins[row]);
+ writePinLow(row_pins[row]);
+}
+
+static void unselect_row(uint8_t row) {
+ setPinInputHigh(row_pins[row]);
+}
+
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static void select_col(uint8_t col) {
+ setPinOutput(col_pins[col]);
+ writePinLow(col_pins[col]);
+}
+
+static void unselect_col(uint8_t col) {
+ setPinInputHigh(col_pins[col]);
+}
+
+static void unselect_cols(void) {
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ unselect_cols();
+
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputHigh(col_pins[x]);
+ }
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputHigh(row_pins[x]);
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ matrix_io_delay();
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(col_pins[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ matrix_io_delay();
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < MATRIX_ROWS / 2; row_index++) {
+ uint8_t tmp = row_index + MATRIX_ROWS / 2;
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[tmp];
+
+ // Check row pin state
+ if (readPin(row_pins[row_index]) == 0) {
+ // Pin LO, set col bit
+ current_matrix[tmp] |= (ROW_SHIFTER << current_col);
+ } else {
+ // Pin HI, clear col bit
+ current_matrix[tmp] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[tmp]) && !(matrix_changed)) {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+void matrix_init_custom(void) {
+ // initialize key pins
+ init_pins();
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool changed = false;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS / 2; current_row++) {
+ changed |= read_cols_on_row(current_matrix, current_row);
+ }
+
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(current_matrix, current_col);
+ }
+
+ return changed;
+}
diff --git a/keyboards/choc_taro/readme.md b/keyboards/choc_taro/readme.md
new file mode 100644
index 00000000000..f0900c2fe46
--- /dev/null
+++ b/keyboards/choc_taro/readme.md
@@ -0,0 +1,15 @@
+# choc_taro
+
+
+
+gh60 compatible choc keyboard
+
+* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
+* Hardware Supported: choc taro pcb
+* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
+
+Make example for this keyboard (after setting up your build environment):
+
+ make choc_taro: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/choc_taro/rules.mk b/keyboards/choc_taro/rules.mk
new file mode 100644
index 00000000000..c11995e538b
--- /dev/null
+++ b/keyboards/choc_taro/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+CUSTOM_MATRIX = lite
+SRC += matrix.c
diff --git a/keyboards/ckeys/handwire_101/config.h b/keyboards/ckeys/handwire_101/config.h
index 3dc99319ed0..849f4f6077d 100755
--- a/keyboards/ckeys/handwire_101/config.h
+++ b/keyboards/ckeys/handwire_101/config.h
@@ -158,12 +158,12 @@ along with this program. If not, see .
//#define MAGIC_KEY_SLEEP_LED Z
// Audio Click
-#define AUDIO_CLICKY
+//#define AUDIO_CLICKY
// Music Mode Polyphony
// NOTE: Must change polyphony_rate to a number higher than 0 in voices.c
-#define AUDIO_VOICES
-#define PITCH_STANDARD_A 880.0f
+//#define AUDIO_VOICES
+//#define PITCH_STANDARD_A 880.0f
// Mouse keys
#define MOUSEKEY_DELAY 0
diff --git a/keyboards/ckeys/handwire_101/rules.mk b/keyboards/ckeys/handwire_101/rules.mk
index 41a29b35373..83d55e0f706 100755
--- a/keyboards/ckeys/handwire_101/rules.mk
+++ b/keyboards/ckeys/handwire_101/rules.mk
@@ -28,5 +28,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by d
#MIDI_ENABLE = yes # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = yes # Audio output on port C6
+AUDIO_ENABLE = no # Audio output
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/ckeys/nakey/rules.mk b/keyboards/ckeys/nakey/rules.mk
index 95fd5e4621e..7c0477bcf95 100644
--- a/keyboards/ckeys/nakey/rules.mk
+++ b/keyboards/ckeys/nakey/rules.mk
@@ -14,20 +14,20 @@ BOOTLOADER = halfkay
# 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 ?= yes # Console for debug
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+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 on B7 by default
-MIDI_ENABLE ?= no # MIDI support
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no # Audio output on port C6
-FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
LAYOUTS = numpad_5x4
diff --git a/keyboards/clawsome/bookerboard/bookerboard.c b/keyboards/clawsome/bookerboard/bookerboard.c
new file mode 100644
index 00000000000..2cf132de59b
--- /dev/null
+++ b/keyboards/clawsome/bookerboard/bookerboard.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include "bookerboard.h"
\ No newline at end of file
diff --git a/keyboards/clawsome/bookerboard/bookerboard.h b/keyboards/clawsome/bookerboard/bookerboard.h
new file mode 100644
index 00000000000..11ece7594bd
--- /dev/null
+++ b/keyboards/clawsome/bookerboard/bookerboard.h
@@ -0,0 +1,30 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, \
+ K10, K11, K12, \
+ K20, K21, K22, \
+ K30, K31, K32 \
+) { \
+ { K00, K01, K02 }, \
+ { K10, K11, K12 }, \
+ { K20, K21, K22 }, \
+ { K30, K31, K32 }, \
+}
diff --git a/keyboards/clawsome/bookerboard/config.h b/keyboards/clawsome/bookerboard/config.h
new file mode 100644
index 00000000000..19646e77436
--- /dev/null
+++ b/keyboards/clawsome/bookerboard/config.h
@@ -0,0 +1,47 @@
+/*
+Copyright 2020 AAClawson (AlisGraveNil)
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x41CE
+#define DEVICE_VER 0x0001
+#define MANUFACTURER AlisGraveNil
+#define PRODUCT Bookerboard
+#define DESCRIPTION A 12-key QMK-powered macropod
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+/*
+ * 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 { B5, B4, E6, D7 }
+#define MATRIX_COL_PINS { B6, B2, B3 }
+
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/clawsome/bookerboard/info.json b/keyboards/clawsome/bookerboard/info.json
new file mode 100644
index 00000000000..a0eb1b59809
--- /dev/null
+++ b/keyboards/clawsome/bookerboard/info.json
@@ -0,0 +1,28 @@
+{
+ "keyboard_name": "bookerboard",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 3,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 12,
+ "layout": [
+ {"label":"K00 (B5,B6)", "x":0, "y":0},
+ {"label":"K01 (B5,B2)", "x":1, "y":0},
+ {"label":"K02 (B5,B3)", "x":2, "y":0},
+ {"label":"K10 (B4,B6)", "x":0, "y":1},
+ {"label":"K11 (B4,B2)", "x":1, "y":1},
+ {"label":"K12 (B4,B3)", "x":2, "y":1},
+ {"label":"K20 (E6,B6)", "x":0, "y":2},
+ {"label":"K21 (E6,B2)", "x":1, "y":2},
+ {"label":"K22 (E6,B3)", "x":2, "y":2},
+ {"label":"K30 (D7,B6)", "x":0, "y":3},
+ {"label":"K31 (D7,B2)", "x":1, "y":3},
+ {"label":"K32 (D7,B3)", "x":2, "y":3}
+ ]
+ }
+ }
+ ,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
+}
+
diff --git a/keyboards/clawsome/bookerboard/keymaps/default/keymap.c b/keyboards/clawsome/bookerboard/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a56245a30c6
--- /dev/null
+++ b/keyboards/clawsome/bookerboard/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * --------------
+ * | 7 | 8 | 9 |
+ * --------------
+ * | 4 | 5 | 6 |
+ * --------------
+ * | 1 | 2 | 3 |
+ * --------------
+ * | - | 0 | = |
+ * --------------
+ */
+ [0] = LAYOUT(
+ KC_7, KC_8, KC_9,
+ KC_4, KC_5, KC_6,
+ KC_1, KC_2, KC_3,
+ KC_MINS, KC_0, KC_EQL
+ ),
+
+};
diff --git a/keyboards/clawsome/bookerboard/readme.md b/keyboards/clawsome/bookerboard/readme.md
new file mode 100644
index 00000000000..7fa8d5e7a64
--- /dev/null
+++ b/keyboards/clawsome/bookerboard/readme.md
@@ -0,0 +1,13 @@
+# Bookerboard
+
+This is a 4x3 macropad designed to be used with your favorite 12 keys for whatever you need 12 extra keys for.
+
+- Keyboard Maintainer: [AAClawson](https://github.com/AlisGraveNil)
+- Hardware Supported: Bookerboard, Pro Micro, Elite-C
+- Hardware Availability: Not available yet; will be sold at a later date
+
+Make example for this keyboard (after setting up your build environment):
+
+ make clawsome/bookerboard: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/clawsome/bookerboard/rules.mk b/keyboards/clawsome/bookerboard/rules.mk
new file mode 100644
index 00000000000..847da5a3deb
--- /dev/null
+++ b/keyboards/clawsome/bookerboard/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
diff --git a/keyboards/clawsome/coupe/config.h b/keyboards/clawsome/coupe/config.h
new file mode 100644
index 00000000000..381f5cdc2b3
--- /dev/null
+++ b/keyboards/clawsome/coupe/config.h
@@ -0,0 +1,47 @@
+/*
+Copyright 2020 AAClawson (AlisGraveNil)
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7767
+#define PRODUCT_ID 0x7E94
+#define DEVICE_VER 0x0001
+#define MANUFACTURER AlisGraveNil
+#define PRODUCT The Coupe
+#define DESCRIPTION A 61-key/60% QMK-powered custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 7
+
+/*
+ * 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 { D7, D2, C6, B5, D4, B4, D0, D3, D1, E6 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B6, B3, B2 }
+
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/clawsome/coupe/coupe.c b/keyboards/clawsome/coupe/coupe.c
new file mode 100644
index 00000000000..80aca53943e
--- /dev/null
+++ b/keyboards/clawsome/coupe/coupe.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include "coupe.h"
\ No newline at end of file
diff --git a/keyboards/clawsome/coupe/coupe.h b/keyboards/clawsome/coupe/coupe.h
new file mode 100644
index 00000000000..360dbb24f29
--- /dev/null
+++ b/keyboards/clawsome/coupe/coupe.h
@@ -0,0 +1,37 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_60_ansi( \
+ K00, K10, K01, K11, K02, K12, K03, K13, K04, K14, K05, K15, K06, K16, \
+ K20, K30, K21, K31, K22, K32, K23, K33, K24, K34, K25, K35, K26, K36, \
+ K40, K50, K41, K51, K42, K52, K43, K53, K44, K54, K45, K55, K56, \
+ K60, K61, K71, K62, K72, K63, K73, K64, K74, K65, K75, K76, \
+ K80, K90, K81, K83, K85, K95, K86, K96 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06 }, \
+ { K10, K11, K12, K13, K14, K15, K16 }, \
+ { K20, K21, K22, K23, K24, K25, K26 }, \
+ { K30, K31, K32, K33, K34, K35, K36 }, \
+ { K40, K41, K42, K43, K44, K45, KC_NO }, \
+ { K50, K51, K52, K53, K54, K55, K56 }, \
+ { K60, K61, K62, K63, K64, K65, KC_NO }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76 }, \
+ { K80, K81, KC_NO, K83, KC_NO, K85, K86 }, \
+ { K90, KC_NO, KC_NO, KC_NO, KC_NO, K95, K96 }, \
+}
diff --git a/keyboards/clawsome/coupe/info.json b/keyboards/clawsome/coupe/info.json
new file mode 100644
index 00000000000..6c930922a5c
--- /dev/null
+++ b/keyboards/clawsome/coupe/info.json
@@ -0,0 +1,74 @@
+{
+ "keyboard_name": "Coupe",
+ "url": "www.clawboards.xyz",
+ "maintainer": "AAClawson (AlisGraveNil)",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label":"K00 (D7,F4)", "x":0, "y":0},
+ {"label":"K10 (D2,F4)", "x":1, "y":0},
+ {"label":"K01 (D7,F5)", "x":2, "y":0},
+ {"label":"K11 (D2,F5)", "x":3, "y":0},
+ {"label":"K02 (D7,F6)", "x":4, "y":0},
+ {"label":"K12 (D2,F6)", "x":5, "y":0},
+ {"label":"K03 (D7,F7)", "x":6, "y":0},
+ {"label":"K13 (D2,F7)", "x":7, "y":0},
+ {"label":"K04 (D7,B6)", "x":8, "y":0},
+ {"label":"K14 (D2,B6)", "x":9, "y":0},
+ {"label":"K05 (D7,B3)", "x":10, "y":0},
+ {"label":"K15 (D2,B3)", "x":11, "y":0},
+ {"label":"K06 (D7,B2)", "x":12, "y":0},
+ {"label":"K16 (D2,B2)", "x":13, "y":0, "w":2},
+ {"label":"K20 (C6,F4)", "x":0, "y":1, "w":1.5},
+ {"label":"K30 (B5,F4)", "x":1.5, "y":1},
+ {"label":"K21 (C6,F5)", "x":2.5, "y":1},
+ {"label":"K31 (B5,F5)", "x":3.5, "y":1},
+ {"label":"K22 (C6,F6)", "x":4.5, "y":1},
+ {"label":"K32 (B5,F6)", "x":5.5, "y":1},
+ {"label":"K23 (C6,F7)", "x":6.5, "y":1},
+ {"label":"K33 (B5,F7)", "x":7.5, "y":1},
+ {"label":"K24 (C6,B6)", "x":8.5, "y":1},
+ {"label":"K34 (B5,B6)", "x":9.5, "y":1},
+ {"label":"K25 (C6,B3)", "x":10.5, "y":1},
+ {"label":"K35 (B5,B3)", "x":11.5, "y":1},
+ {"label":"K26 (C6,B2)", "x":12.5, "y":1},
+ {"label":"K36 (B5,B2)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K40 (D4,F4)", "x":0, "y":2, "w":1.75},
+ {"label":"K50 (B4,F4)", "x":1.75, "y":2},
+ {"label":"K41 (D4,F5)", "x":2.75, "y":2},
+ {"label":"K51 (B4,F5)", "x":3.75, "y":2},
+ {"label":"K42 (D4,F6)", "x":4.75, "y":2},
+ {"label":"K52 (B4,F6)", "x":5.75, "y":2},
+ {"label":"K43 (D4,F7)", "x":6.75, "y":2},
+ {"label":"K53 (B4,F7)", "x":7.75, "y":2},
+ {"label":"K44 (D4,B6)", "x":8.75, "y":2},
+ {"label":"K54 (B4,B6)", "x":9.75, "y":2},
+ {"label":"K45 (D4,B3)", "x":10.75, "y":2},
+ {"label":"K55 (B4,B3)", "x":11.75, "y":2},
+ {"label":"K56 (B4,B2)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K60 (D0,F4)", "x":0, "y":3, "w":2.25},
+ {"label":"K61 (D0,F5)", "x":2.25, "y":3},
+ {"label":"K71 (D3,F5)", "x":3.25, "y":3},
+ {"label":"K62 (D0,F6)", "x":4.25, "y":3},
+ {"label":"K72 (D3,F6)", "x":5.25, "y":3},
+ {"label":"K63 (D0,F7)", "x":6.25, "y":3},
+ {"label":"K73 (D3,F7)", "x":7.25, "y":3},
+ {"label":"K64 (D0,B6)", "x":8.25, "y":3},
+ {"label":"K74 (D3,B6)", "x":9.25, "y":3},
+ {"label":"K65 (D0,B3)", "x":10.25, "y":3},
+ {"label":"K75 (D3,B3)", "x":11.25, "y":3},
+ {"label":"K76 (D3,B2)", "x":12.25, "y":3, "w":2.75},
+ {"label":"K80 (D1,F4)", "x":0, "y":4, "w":1.25},
+ {"label":"K90 (E6,F4)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K81 (D1,F5)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K83 (D1,F7)", "x":3.75, "y":4, "w":6.25},
+ {"label":"K85 (D1,B3)", "x":10, "y":4, "w":1.25},
+ {"label":"K95 (E6,B3)", "x":11.25, "y":4, "w":1.25},
+ {"label":"K86 (D1,B2)", "x":12.5, "y":4, "w":1.25},
+ {"label":"K96 (E6,B2)", "x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/clawsome/coupe/keymaps/default/keymap.c b/keyboards/clawsome/coupe/keymaps/default/keymap.c
new file mode 100644
index 00000000000..4c71f0b1810
--- /dev/null
+++ b/keyboards/clawsome/coupe/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+#define FNM LT(1, KC_APP) // MO(1) when held, KC_APP when tapped
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ *-----------------------------------------------------------------------
+ *|ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | DEL|
+ *-----------------------------------------------------------------------
+ *|TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ *-----------------------------------------------------------------------
+ *|CAPS | A | S | D | F | G | H | J | K | L | ; | " | ENTER |
+ *-----------------------------------------------------------------------
+ *| SHIFT | Z | X | C | V | B | N | M | , | . | ? | SHIFT |
+ *-----------------------------------------------------------------------
+ *|CTRL|GUI |ALT | SPACE |ALT |GUI | FNM |CTRL|
+ *-----------------------------------------------------------------------
+ */
+ [0] = LAYOUT_60_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, FNM, KC_LCTL
+ ),
+
+ /*
+ *-------------------------------------------------------------
+ *| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | DEL |
+ *-------------------------------------------------------------
+ *| | | ^ | | | | | | | | |PSC|SLK|PAUSE|
+ *-------------------------------------------------------------
+ *| | < | v | > | | |HOM|PGU| | | | | |
+ *-------------------------------------------------------------
+ *| | | | | | |END|PGD| | | |
+ *-------------------------------------------------------------
+ *|RST | | | | | | | |
+ *-------------------------------------------------------------
+ */
+ [1] = LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_HOME, KC_PGUP, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/clawsome/coupe/readme.md b/keyboards/clawsome/coupe/readme.md
new file mode 100644
index 00000000000..77d5fc2f0bb
--- /dev/null
+++ b/keyboards/clawsome/coupe/readme.md
@@ -0,0 +1,15 @@
+# Coupe
+
+
+
+This is a 5x14 keyboard in a 60% layout.
+
+* Keyboard Maintainer: [AAClawson](http://github.com/AlisGraveNil)
+* Hardware Supported: The Coupe, Pro Micro, Elite-C
+* Hardware Availability: www.clawboards.xyz
+
+Make example for this keyboard (after setting up your build environment):
+
+ make clawsome/coupe: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/clawsome/coupe/rules.mk b/keyboards/clawsome/coupe/rules.mk
new file mode 100644
index 00000000000..d0ec2731c5e
--- /dev/null
+++ b/keyboards/clawsome/coupe/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = 60_ansi
diff --git a/keyboards/clawsome/gamebuddy/config.h b/keyboards/clawsome/gamebuddy/config.h
new file mode 100644
index 00000000000..822cc23abae
--- /dev/null
+++ b/keyboards/clawsome/gamebuddy/config.h
@@ -0,0 +1,37 @@
+/*
+Copyright 2020 AAClawson (AlisGraveNil)
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x17B9
+#define DEVICE_VER 0x0001
+#define MANUFACTURER AlisGraveNil
+#define PRODUCT GameBuddy
+#define DESCRIPTION A 26-key QMK-powered macropad designed for gaming!
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 7
+
+#define MATRIX_ROW_PINS { D1, D0, E6, B3, B2 }
+#define MATRIX_COL_PINS { F5, F6, F7, B1, C6, D7, B6 }
+
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/clawsome/gamebuddy/gamebuddy.c b/keyboards/clawsome/gamebuddy/gamebuddy.c
new file mode 100644
index 00000000000..464bdef8926
--- /dev/null
+++ b/keyboards/clawsome/gamebuddy/gamebuddy.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include "gamebuddy.h"
\ No newline at end of file
diff --git a/keyboards/clawsome/gamebuddy/gamebuddy.h b/keyboards/clawsome/gamebuddy/gamebuddy.h
new file mode 100644
index 00000000000..f1ee9ab357f
--- /dev/null
+++ b/keyboards/clawsome/gamebuddy/gamebuddy.h
@@ -0,0 +1,32 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, \
+ K10, K11, K12, K13, K14, K15, \
+ K20, K22, K23, K24, K25, \
+ K30, K31, K32, K33, K34, K35, K46, \
+ K44, K45 \
+) { \
+ { K00, K01, K02, K03, K04, K05, KC_NO }, \
+ { K10, K11, K12, K13, K14, K15, KC_NO }, \
+ { K20, KC_NO, K22, K23, K24, K25, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, K44, K45, K46 }, \
+}
diff --git a/keyboards/clawsome/gamebuddy/info.json b/keyboards/clawsome/gamebuddy/info.json
new file mode 100644
index 00000000000..5562f0615ef
--- /dev/null
+++ b/keyboards/clawsome/gamebuddy/info.json
@@ -0,0 +1,41 @@
+{
+ "keyboard_name": "GameBuddy",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 7,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"K00 (D1,F5)", "x":0, "y":0},
+ {"label":"K01 (D1,F6)", "x":1, "y":0},
+ {"label":"K02 (D1,F7)", "x":2, "y":0},
+ {"label":"K03 (D1,B1)", "x":3, "y":0},
+ {"label":"K04 (D1,C6)", "x":4, "y":0},
+ {"label":"K05 (D1,D7)", "x":5, "y":0},
+ {"label":"K10 (D0,F5)", "x":0, "y":1},
+ {"label":"K11 (D0,F6)", "x":1, "y":1},
+ {"label":"K12 (D0,F7)", "x":2, "y":1},
+ {"label":"K13 (D0,B1)", "x":3, "y":1},
+ {"label":"K14 (D0,C6)", "x":4, "y":1},
+ {"label":"K15 (D0,D7)", "x":5, "y":1},
+ {"label":"K20 (E6,F5)", "x":0, "y":2, "w":2},
+ {"label":"K22 (E6,F7)", "x":2, "y":2},
+ {"label":"K23 (E6,B1)", "x":3, "y":2},
+ {"label":"K24 (E6,C6)", "x":4, "y":2},
+ {"label":"K25 (E6,D7)", "x":5, "y":2},
+ {"label":"K30 (B3,F5)", "x":0, "y":3},
+ {"label":"K31 (B3,F6)", "x":1, "y":3},
+ {"label":"K32 (B3,F7)", "x":2, "y":3},
+ {"label":"K33 (B3,B1)", "x":3, "y":3},
+ {"label":"K34 (B3,C6)", "x":4, "y":3},
+ {"label":"K35 (B3,D7)", "x":5, "y":3},
+ {"label":"K46 (B2,B6)", "x":6, "y":3, "h":2},
+ {"label":"K44 (B2,C6)", "x":4, "y":4},
+ {"label":"K45 (B2,D7)", "x":5, "y":4}
+ ]
+ }
+ }
+ ,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
+}
+
diff --git a/keyboards/clawsome/gamebuddy/keymaps/default/keymap.c b/keyboards/clawsome/gamebuddy/keymaps/default/keymap.c
new file mode 100644
index 00000000000..2a5794adfd4
--- /dev/null
+++ b/keyboards/clawsome/gamebuddy/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * -------------------------------
+ * |ESC | 1 | 2 | 3 | 4 | 5 |
+ * -------------------------------
+ * |TAB | V | Q | W | E | R |
+ * ------------------------------|
+ * |LSFT | A | S | D | G |
+ * ------------------------------------
+ * |LCTL| N | X | F | C | M |SPC |
+ * ------------------------------| |
+ * |LALT|LGUI| |
+ * ----------------
+ */
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_TAB, KC_V, KC_Q, KC_W, KC_E, KC_R,
+ KC_LSFT, KC_A, KC_S, KC_D, KC_G,
+ KC_LCTL, KC_N, KC_X, KC_F, KC_C, KC_M, KC_SPC,
+ KC_LALT, KC_LGUI
+ ),
+
+};
+
diff --git a/keyboards/clawsome/gamebuddy/readme.md b/keyboards/clawsome/gamebuddy/readme.md
new file mode 100644
index 00000000000..62e28dcbca4
--- /dev/null
+++ b/keyboards/clawsome/gamebuddy/readme.md
@@ -0,0 +1,13 @@
+# GameBuddy
+
+This is a 5x7 macropad designed for left-hand usage for videogames, with special focus on FPS layouts!
+
+* Keyboard Maintainer: [AAClawson](https://github.com/AlisGraveNil)
+* Hardware Supported: GameBuddy, Pro Micro, Elite-C
+* Hardware Availability: www.clawboards.xyz
+
+Make example for this keyboard (after setting up your build environment):
+
+ make clawsome/gamebuddy: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/clawsome/gamebuddy/rules.mk b/keyboards/clawsome/gamebuddy/rules.mk
new file mode 100644
index 00000000000..44d0c26b753
--- /dev/null
+++ b/keyboards/clawsome/gamebuddy/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/clawsome/sedan/config.h b/keyboards/clawsome/sedan/config.h
new file mode 100644
index 00000000000..20d58d366e7
--- /dev/null
+++ b/keyboards/clawsome/sedan/config.h
@@ -0,0 +1,47 @@
+/*
+Copyright 2020 AAClawson (AlisGraveNil)
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7767
+#define PRODUCT_ID 0x8C78
+#define DEVICE_VER 0x0001
+#define MANUFACTURER AlisGraveNil
+#define PRODUCT The Sedan
+#define DESCRIPTION A QMK-powered 68% custom keyboard
+
+/* 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 { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { B5, B6, B7, C0, C1, C2, C3, C4, C5, C6, C7, D0, D1, D2, D3 }
+
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/clawsome/sedan/info.json b/keyboards/clawsome/sedan/info.json
new file mode 100644
index 00000000000..ecf4c7212aa
--- /dev/null
+++ b/keyboards/clawsome/sedan/info.json
@@ -0,0 +1,81 @@
+{
+ "keyboard_name": "sedan",
+ "url": "www.clawboards.xyz",
+ "maintainer": "AAClawson (AlisGraveNil)",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_ansi": {
+ "layout": [
+ {"label":"K00 (B0,B5)", "x":0, "y":0},
+ {"label":"K01 (B0,B6)", "x":1, "y":0},
+ {"label":"K02 (B0,B7)", "x":2, "y":0},
+ {"label":"K03 (B0,C0)", "x":3, "y":0},
+ {"label":"K04 (B0,C1)", "x":4, "y":0},
+ {"label":"K05 (B0,C2)", "x":5, "y":0},
+ {"label":"K06 (B0,C3)", "x":6, "y":0},
+ {"label":"K07 (B0,C4)", "x":7, "y":0},
+ {"label":"K08 (B0,C5)", "x":8, "y":0},
+ {"label":"K09 (B0,C6)", "x":9, "y":0},
+ {"label":"K0A (B0,C7)", "x":10, "y":0},
+ {"label":"K0B (B0,D0)", "x":11, "y":0},
+ {"label":"K0C (B0,D1)", "x":12, "y":0},
+ {"label":"K0D (B0,D2)", "x":13, "y":0, "w":2},
+ {"label":"K0E (B0,D3)", "x":15, "y":0},
+ {"label":"K10 (B1,B5)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (B1,B6)", "x":1.5, "y":1},
+ {"label":"K12 (B1,B7)", "x":2.5, "y":1},
+ {"label":"K13 (B1,C0)", "x":3.5, "y":1},
+ {"label":"K14 (B1,C1)", "x":4.5, "y":1},
+ {"label":"K15 (B1,C2)", "x":5.5, "y":1},
+ {"label":"K16 (B1,C3)", "x":6.5, "y":1},
+ {"label":"K17 (B1,C4)", "x":7.5, "y":1},
+ {"label":"K18 (B1,C5)", "x":8.5, "y":1},
+ {"label":"K19 (B1,C6)", "x":9.5, "y":1},
+ {"label":"K1A (B1,C7)", "x":10.5, "y":1},
+ {"label":"K1B (B1,D0)", "x":11.5, "y":1},
+ {"label":"K1C (B1,D1)", "x":12.5, "y":1},
+ {"label":"K1D (B1,D2)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1E (B1,D3)", "x":15, "y":1},
+ {"label":"K20 (B2,B5)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (B2,B6)", "x":1.75, "y":2},
+ {"label":"K22 (B2,B7)", "x":2.75, "y":2},
+ {"label":"K23 (B2,C0)", "x":3.75, "y":2},
+ {"label":"K24 (B2,C1)", "x":4.75, "y":2},
+ {"label":"K25 (B2,C2)", "x":5.75, "y":2},
+ {"label":"K26 (B2,C3)", "x":6.75, "y":2},
+ {"label":"K27 (B2,C4)", "x":7.75, "y":2},
+ {"label":"K28 (B2,C5)", "x":8.75, "y":2},
+ {"label":"K29 (B2,C6)", "x":9.75, "y":2},
+ {"label":"K2A (B2,C7)", "x":10.75, "y":2},
+ {"label":"K2B (B2,D0)", "x":11.75, "y":2},
+ {"label":"K2D (B2,D2)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2E (B2,D3)", "x":15, "y":2},
+ {"label":"K30 (B3,B5)", "x":0, "y":3, "w":2.25},
+ {"label":"K31 (B3,B6)", "x":2.25, "y":3},
+ {"label":"K32 (B3,B7)", "x":3.25, "y":3},
+ {"label":"K33 (B3,C0)", "x":4.25, "y":3},
+ {"label":"K34 (B3,C1)", "x":5.25, "y":3},
+ {"label":"K35 (B3,C2)", "x":6.25, "y":3},
+ {"label":"K36 (B3,C3)", "x":7.25, "y":3},
+ {"label":"K37 (B3,C4)", "x":8.25, "y":3},
+ {"label":"K38 (B3,C5)", "x":9.25, "y":3},
+ {"label":"K39 (B3,C6)", "x":10.25, "y":3},
+ {"label":"K3A (B3,C7)", "x":11.25, "y":3},
+ {"label":"K3B (B3,D0)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (B3,D2)", "x":14, "y":3},
+ {"label":"K3E (B3,D3)", "x":15, "y":3},
+ {"label":"K40 (B4,B5)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (B4,B6)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (B4,B7)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K45 (B4,C2)", "x":3.75, "y":4, "w":6.25},
+ {"label":"K49 (B4,C6)", "x":10, "y":4},
+ {"label":"K4A (B4,C7)", "x":11, "y":4},
+ {"label":"K4B (B4,D0)", "x":12, "y":4},
+ {"label":"K4C (B4,D1)", "x":13, "y":4},
+ {"label":"K4D (B4,D2)", "x":14, "y":4},
+ {"label":"K4E (B4,D3)", "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/clawsome/sedan/keymaps/default/keymap.c b/keyboards/clawsome/sedan/keymaps/default/keymap.c
new file mode 100644
index 00000000000..09929657897
--- /dev/null
+++ b/keyboards/clawsome/sedan/keymaps/default/keymap.c
@@ -0,0 +1,61 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ *---------------------------------------------------------------------------------
+ *|ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BSPC |HOME|
+ *---------------------------------------------------------------------------------
+ *| TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |END |
+ *---------------------------------------------------------------------------------
+ *| CAPS | A | S | D | F | G | H | J | K | L | ; | " | ENTER |PGUP|
+ *---------------------------------------------------------------------------------
+ *| SHIFT | Z | X | C | V | B | N | M | , | . | ? | SHIFT | ^ |PGDN|
+ *---------------------------------------------------------------------------------
+ *|CTRL|GUI |ALT | SPACE |ALT | FN |CTRL| < | v | > |
+ *---------------------------------------------------------------------------------
+ */
+ [0] = LAYOUT_65_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /*
+ *---------------------------------------------------------------------------------
+ *| ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 |F10 |F11 |F12 |DEL | |
+ *---------------------------------------------------------------------------------
+ *| | | | | | | | | | | |PSCR|SLCK| PAUSE | |
+ *---------------------------------------------------------------------------------
+ *| | | | | | | | | | | | | | |
+ *---------------------------------------------------------------------------------
+ *| | | | | | | | | | | | | | |
+ *---------------------------------------------------------------------------------
+ *|RST | | | | | | | | | |
+ *---------------------------------------------------------------------------------
+ */
+ [1] = LAYOUT_65_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/clawsome/sedan/readme.md b/keyboards/clawsome/sedan/readme.md
new file mode 100644
index 00000000000..461db121a89
--- /dev/null
+++ b/keyboards/clawsome/sedan/readme.md
@@ -0,0 +1,15 @@
+# Sedan
+
+
+
+This is a 5x15 keyboard in a 68% layout.
+
+* Keyboard Maintainer: [AAClawson](http://github.com/AlisGraveNil)
+* Hardware Supported: The Sedan, Pro Micro, Elite-C
+* Hardware Availability: www.clawboards.xyz
+
+Make example for this keyboard (after setting up your build environment):
+
+ make clawsome/sedan: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/clawsome/sedan/rules.mk b/keyboards/clawsome/sedan/rules.mk
new file mode 100644
index 00000000000..c06c0806fd2
--- /dev/null
+++ b/keyboards/clawsome/sedan/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = 65_ansi
diff --git a/keyboards/clawsome/sedan/sedan.c b/keyboards/clawsome/sedan/sedan.c
new file mode 100644
index 00000000000..4977bf69783
--- /dev/null
+++ b/keyboards/clawsome/sedan/sedan.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include "sedan.h"
\ No newline at end of file
diff --git a/keyboards/clawsome/sedan/sedan.h b/keyboards/clawsome/sedan/sedan.h
new file mode 100644
index 00000000000..7af9476676e
--- /dev/null
+++ b/keyboards/clawsome/sedan/sedan.h
@@ -0,0 +1,32 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_65_ansi( \
+ 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, K2D, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K40, K41, K42, K45, K49, K4A, 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, KC_NO, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, K4D, K4E }, \
+}
diff --git a/keyboards/clawsome/sidekick/config.h b/keyboards/clawsome/sidekick/config.h
new file mode 100644
index 00000000000..933dde81ed9
--- /dev/null
+++ b/keyboards/clawsome/sidekick/config.h
@@ -0,0 +1,37 @@
+/*
+Copyright 2020 AAClawson (AlisGraveNil)
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xDB9F
+#define DEVICE_VER 0x0001
+#define MANUFACTURER AlisGraveNil
+#define PRODUCT Sidekick
+#define DESCRIPTION A 27-key QMK-powered macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 7
+
+#define MATRIX_ROW_PINS { D0, C6, B2, B6, B5 }
+#define MATRIX_COL_PINS { F6, F5, B1, B3, E6, D7, D4 }
+
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/clawsome/sidekick/info.json b/keyboards/clawsome/sidekick/info.json
new file mode 100644
index 00000000000..cd6d4f00041
--- /dev/null
+++ b/keyboards/clawsome/sidekick/info.json
@@ -0,0 +1,40 @@
+{
+ "keyboard_name": "Sidekick",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 7,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"K00 (D0,F6)", "x":0, "y":0},
+ {"label":"K01 (D0,F5)", "x":1, "y":0},
+ {"label":"K02 (D0,B1)", "x":2, "y":0},
+ {"label":"K03 (D0,B3)", "x":3, "y":0},
+ {"label":"K04 (D0,E6)", "x":4, "y":0},
+ {"label":"K05 (D0,D7)", "x":5, "y":0},
+ {"label":"K06 (D0,D4)", "x":6, "y":0},
+ {"label":"K10 (C6,F6)", "x":0, "y":1},
+ {"label":"K11 (C6,F5)", "x":1, "y":1},
+ {"label":"K12 (C6,B1)", "x":2, "y":1},
+ {"label":"K13 (C6,B3)", "x":3, "y":1},
+ {"label":"K14 (C6,E6)", "x":4, "y":1},
+ {"label":"K15 (C6,D7)", "x":5, "y":1},
+ {"label":"K16 (C6,D4)", "x":6, "y":1, "h":2},
+ {"label":"K23 (B2,B3)", "x":3, "y":2},
+ {"label":"K24 (B2,E6)", "x":4, "y":2},
+ {"label":"K25 (B2,D7)", "x":5, "y":2},
+ {"label":"K31 (B6,F5)", "x":1, "y":3},
+ {"label":"K33 (B6,B3)", "x":3, "y":3},
+ {"label":"K34 (B6,E6)", "x":4, "y":3},
+ {"label":"K35 (B6,D7)", "x":5, "y":3},
+ {"label":"K36 (B6,D4)", "x":6, "y":3, "h":2},
+ {"label":"K40 (B5,F6)", "x":0, "y":4},
+ {"label":"K41 (B5,F5)", "x":1, "y":4},
+ {"label":"K42 (B5,B1)", "x":2, "y":4},
+ {"label":"K43 (B5,B3)", "x":3, "y":4, "w":2},
+ {"label":"K45 (B5,D7)", "x":5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/clawsome/sidekick/keymaps/default/keymap.c b/keyboards/clawsome/sidekick/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e445a02f871
--- /dev/null
+++ b/keyboards/clawsome/sidekick/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ------------------------------------
+ * |INS |HOME|PGUP|NUM | / | * | - |
+ * ------------------------------------
+ * |DEL |END |PGDN| 7 | 8 | 9 | + |
+ * ------------------------------| |
+ * | | | | 4 | 5 | 6 | |
+ * ------------------------------------
+ * | | UP | | 1 | 2 | 3 |ENT |
+ * ------------------------------| |
+ * |LEFT|DOWN|RGHT| 0 | . | |
+ * ------------------------------------
+ */
+ [0] = LAYOUT(
+ KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6,
+ KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+
+};
+
diff --git a/keyboards/clawsome/sidekick/readme.md b/keyboards/clawsome/sidekick/readme.md
new file mode 100644
index 00000000000..ed9ecd3f9df
--- /dev/null
+++ b/keyboards/clawsome/sidekick/readme.md
@@ -0,0 +1,14 @@
+# Sidekick
+
+This is a 5x7 macropad designed to be used with any 60% or less board.
+You still need those arrow keys and that num-pad, so here it is, in a conveniently move-able package!
+
+- Keyboard Maintainer: [AAClawson](https://github.com/AlisGraveNil)
+- Hardware Supported: Sidekick 2.0a & 2.0b, Pro Micro, Elite-C
+- Hardware Availability: Not available yet; will be sold at a later date
+
+Make example for this keyboard (after setting up your build environment):
+
+ make clawsome/sidekick: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/clawsome/sidekick/rules.mk b/keyboards/clawsome/sidekick/rules.mk
new file mode 100644
index 00000000000..22a9b129fe3
--- /dev/null
+++ b/keyboards/clawsome/sidekick/rules.mk
@@ -0,0 +1,25 @@
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/clawsome/sidekick/sidekick.c b/keyboards/clawsome/sidekick/sidekick.c
new file mode 100644
index 00000000000..4f52b1ba124
--- /dev/null
+++ b/keyboards/clawsome/sidekick/sidekick.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#include "sidekick.h"
diff --git a/keyboards/clawsome/sidekick/sidekick.h b/keyboards/clawsome/sidekick/sidekick.h
new file mode 100644
index 00000000000..fcb93a9bb1b
--- /dev/null
+++ b/keyboards/clawsome/sidekick/sidekick.h
@@ -0,0 +1,33 @@
+/* Copyright 2020 AAClawson (AlisGraveNil)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, \
+ K10, K11, K12, K13, K14, K15, K16, \
+ K23, K24, K25, \
+ K31, K33, K34, K35, K36, \
+ K40, K41, K42, K43, K45 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06 }, \
+ { K10, K11, K12, K13, K14, K15, K16 }, \
+ { KC_NO, KC_NO, KC_NO, K23, K24, K25, KC_NO }, \
+ { KC_NO, K31, KC_NO, K33, K34, K35, K36 }, \
+ { K40, K41, K42, K43, KC_NO, K45, KC_NO }, \
+}
+
diff --git a/keyboards/clueboard/2x1800/2019/info.json b/keyboards/clueboard/2x1800/2019/info.json
index 0e3bb36a9d8..dcd153c86d1 100644
--- a/keyboards/clueboard/2x1800/2019/info.json
+++ b/keyboards/clueboard/2x1800/2019/info.json
@@ -1,41 +1,1204 @@
{
- "keyboard_name": "Clueboard 2x1800",
+ "keyboard_name": "Clueboard 2x1800 2019",
"url": "",
"maintainer": "skullydazed",
"width": 24,
- "height": 6.5,
+ "height": 8,
"layouts": {
- "LAYOUT": {
- "key_count": 127,
+ "LAYOUT_all": {
"layout": [
- {"label":"Home", "x":0, "y":0}, {"label":"End", "x":1, "y":0}, {"label":"PgUp", "x":2, "y":0}, {"label":"PgDn", "x":3, "y":0}, {"label":"Esc", "x":4.75, "y":0}, {"label":"F1", "x":6.25, "y":0}, {"label":"F2", "x":7.25, "y":0}, {"label":"F3", "x":8.25, "y":0}, {"label":"F4", "x":9.25, "y":0}, {"label":"F5", "x":10.75, "y":0}, {"label":"F6", "x":11.75, "y":0}, {"label":"F7", "x":12.75, "y":0}, {"label":"F8", "x":13.75, "y":0}, {"label":"F9", "x":15.25, "y":0}, {"label":"F10", "x":16.25, "y":0}, {"label":"F11", "x":17.25, "y":0}, {"label":"F12", "x":18.25, "y":0}, {"label":"PrtSc", "x":20, "y":0}, {"label":"Scroll Lock", "x":21, "y":0}, {"label":"Pause", "x":22, "y":0}, {"label":"Insert", "x":23, "y":0},
- {"label":"-", "x":0, "y":1.25}, {"label":"Num Lock", "x":1, "y":1.25}, {"label":"/", "x":2, "y":1.25}, {"label":"*", "x":3, "y":1.25}, {"label":"~", "x":4.5, "y":1.25}, {"label":"!", "x":5.5, "y":1.25}, {"label":"@", "x":6.5, "y":1.25}, {"label":"#", "x":7.5, "y":1.25}, {"label":"$", "x":8.5, "y":1.25}, {"label":"%", "x":9.5, "y":1.25}, {"label":"^", "x":10.5, "y":1.25}, {"label":"&", "x":11.5, "y":1.25}, {"label":"*", "x":12.5, "y":1.25}, {"label":"(", "x":13.5, "y":1.25}, {"label":")", "x":14.5, "y":1.25}, {"label":"_", "x":15.5, "y":1.25}, {"label":"+", "x":16.5, "y":1.25}, {"label":"Backspace", "x":17.5, "y":1.25, "w":2}, {"label":"Num Lock", "x":20, "y":1.25}, {"label":"/", "x":21, "y":1.25}, {"label":"*", "x":22, "y":1.25}, {"label":"-", "x":23, "y":1.25},
- {"label":"+", "x":0, "y":2.25, "h":2}, {"label":"7", "x":1, "y":2.25}, {"label":"8", "x":2, "y":2.25}, {"label":"9", "x":3, "y":2.25}, {"label":"Tab", "x":4.5, "y":2.25, "w":1.5}, {"label":"Q", "x":6, "y":2.25}, {"label":"W", "x":7, "y":2.25}, {"label":"E", "x":8, "y":2.25}, {"label":"R", "x":9, "y":2.25}, {"label":"T", "x":10, "y":2.25}, {"label":"Y", "x":11, "y":2.25}, {"label":"U", "x":12, "y":2.25}, {"label":"I", "x":13, "y":2.25}, {"label":"O", "x":14, "y":2.25}, {"label":"P", "x":15, "y":2.25}, {"label":"{", "x":16, "y":2.25}, {"label":"}", "x":17, "y":2.25}, {"label":"|", "x":18, "y":2.25, "w":1.5}, {"label":"7", "x":20, "y":2.25}, {"label":"8", "x":21, "y":2.25}, {"label":"9", "x":22, "y":2.25}, {"label":"+", "x":23, "y":2.25, "h":2},
- {"label":"4", "x":1, "y":3.25}, {"label":"5", "x":2, "y":3.25}, {"label":"6", "x":3, "y":3.25}, {"label":"Caps Lock", "x":4.5, "y":3.25, "w":1.75}, {"label":"A", "x":6.25, "y":3.25}, {"label":"S", "x":7.25, "y":3.25}, {"label":"D", "x":8.25, "y":3.25}, {"label":"F", "x":9.25, "y":3.25}, {"label":"G", "x":10.25, "y":3.25}, {"label":"H", "x":11.25, "y":3.25}, {"label":"J", "x":12.25, "y":3.25}, {"label":"K", "x":13.25, "y":3.25}, {"label":"L", "x":14.25, "y":3.25}, {"label":":", "x":15.25, "y":3.25}, {"label":"\"", "x":16.25, "y":3.25}, {"label":"Enter", "x":17.25, "y":3.25, "w":2.25}, {"label":"4", "x":20, "y":3.25}, {"label":"5", "x":21, "y":3.25}, {"label":"6", "x":22, "y":3.25},
- {"label":"Enter", "x":0, "y":4.25, "h":2}, {"label":"1", "x":1, "y":4.25}, {"label":"2", "x":2, "y":4.25}, {"label":"3", "x":3, "y":4.25}, {"label":"\\u2191", "x":4.25, "y":4.5}, {"label":"Shift", "x":5.5, "y":4.25, "w":1.25}, {"label":"Z", "x":6.75, "y":4.25}, {"label":"X", "x":7.75, "y":4.25}, {"label":"C", "x":8.75, "y":4.25}, {"label":"V", "x":9.75, "y":4.25}, {"label":"B", "x":10.75, "y":4.25}, {"label":"N", "x":11.75, "y":4.25}, {"label":"M", "x":12.75, "y":4.25}, {"label":"<", "x":13.75, "y":4.25}, {"label":">", "x":14.75, "y":4.25}, {"label":"?", "x":15.75, "y":4.25}, {"label":"Shift", "x":16.75, "y":4.25, "w":1.75}, {"label":"\\u2191", "x":18.75, "y":4.5}, {"label":"1", "x":20, "y":4.25}, {"label":"2", "x":21, "y":4.25}, {"label":"3", "x":22, "y":4.25}, {"label":"Enter", "x":23, "y":4.25, "h":2},
- {"label":"0", "x":1, "y":5.25}, {"label":".", "x":2, "y":5.25}, {"label":"\\u2190", "x":3.25, "y":5.5}, {"label":"\\u2193", "x":4.25, "y":5.5}, {"label":"\\u2192", "x":5.25, "y":5.5}, {"label":"Ctrl", "x":6.5, "y":5.25}, {"label":"Win", "x":7.5, "y":5.25}, {"label":"Alt", "x":8.5, "y":5.25}, {"label":"1u", "x":9.5, "y":5.25}, {"label":"1u", "x":10.5, "y":5.25}, {"label":"1u", "x":11.5, "y":5.25}, {"label":"1u", "x":12.5, "y":5.25}, {"label":"Alt", "x":13.5, "y":5.25}, {"label":"Win", "x":14.5, "y":5.25}, {"label":"Menu", "x":15.5, "y":5.25}, {"label":"Ctrl", "x":16.5, "y":5.25}, {"label":"\\u2190", "x":17.75, "y":5.5}, {"label":"\\u2193", "x":18.75, "y":5.5}, {"label":"\\u2192", "x":19.75, "y":5.5}, {"label":"0", "x":21, "y":5.25}, {"label":".", "x":22, "y":5.25}
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k86", "x":18, "y":3.75, "w":1.5},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k9a", "x":17.25, "y":4.75},
+ {"label":"k95", "x":18.25, "y":4.75, "w":1.25},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"k58", "x":8.5, "y":6.75},
+ {"label":"k59", "x":9.5, "y":6.75},
+ {"label":"k5a", "x":10.5, "y":6.75},
+ {"label":"kb0", "x":11.5, "y":6.75},
+ {"label":"kb1", "x":12.5, "y":6.75},
+ {"label":"kb2", "x":13.5, "y":6.75},
+ {"label":"kb3", "x":14.5, "y":6.75},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
]
},
- "LAYOUT_7u_space": {
- "key_count": 121,
+ "LAYOUT_1u_ansi": {
"layout": [
- {"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4.75, "y":0}, {"label":"k06", "x":6.25, "y":0}, {"label":"k07", "x":7.25, "y":0}, {"label":"k08", "x":8.25, "y":0}, {"label":"k09", "x":9.25, "y":0}, {"label":"k0a", "x":10.75, "y":0}, {"label":"k60", "x":11.75, "y":0}, {"label":"k61", "x":12.75, "y":0}, {"label":"k62", "x":13.75, "y":0}, {"label":"k63", "x":15.25, "y":0}, {"label":"k64", "x":16.25, "y":0}, {"label":"k65", "x":17.25, "y":0}, {"label":"k66", "x":18.25, "y":0}, {"label":"k67", "x":20, "y":0}, {"label":"k68", "x":21, "y":0}, {"label":"k69", "x":22, "y":0}, {"label":"k6a", "x":23, "y":0},
- {"label":"k10", "x":0, "y":1.25}, {"label":"k11", "x":1, "y":1.25}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1.25}, {"label":"k14", "x":4.5, "y":1.25}, {"label":"k15", "x":5.5, "y":1.25}, {"label":"k16", "x":6.5, "y":1.25}, {"label":"k17", "x":7.5, "y":1.25}, {"label":"k18", "x":8.5, "y":1.25}, {"label":"k19", "x":9.5, "y":1.25}, {"label":"k0a", "x":10.5, "y":1.25}, {"label":"k70", "x":11.5, "y":1.25}, {"label":"k71", "x":12.5, "y":1.25}, {"label":"k72", "x":13.5, "y":1.25}, {"label":"k73", "x":14.5, "y":1.25}, {"label":"k74", "x":15.5, "y":1.25}, {"label":"k75", "x":16.5, "y":1.25}, {"label":"k76", "x":17.5, "y":1.25, "w":2}, {"label":"k77", "x":20, "y":1.25}, {"label":"k78", "x":21, "y":1.25}, {"label":"k79", "x":22, "y":1.25}, {"label":"k7a", "x":23, "y":1.25},
- {"label":"k20", "x":0, "y":2.25, "h":2}, {"label":"k21", "x":1, "y":2.25}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2.25}, {"label":"k24", "x":4.5, "y":2.25, "w":1.5}, {"label":"k25", "x":6, "y":2.25}, {"label":"k26", "x":7, "y":2.25}, {"label":"k27", "x":8, "y":2.25}, {"label":"k28", "x":9, "y":2.25}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2a", "x":11, "y":2.25}, {"label":"k80", "x":12, "y":2.25}, {"label":"k81", "x":13, "y":2.25}, {"label":"k82", "x":14, "y":2.25}, {"label":"k83", "x":15, "y":2.25}, {"label":"k84", "x":16, "y":2.25}, {"label":"k85", "x":17, "y":2.25}, {"label":"k86", "x":18, "y":2.25, "w":1.5}, {"label":"k87", "x":20, "y":2.25}, {"label":"k88", "x":21, "y":2.25}, {"label":"k89", "x":22, "y":2.25}, {"label":"k8a", "x":23, "y":2.25, "h":2},
- {"label":"k31", "x":1, "y":3.25}, {"label":"k32", "x":2, "y":3.25}, {"label":"k33", "x":3, "y":3.25}, {"label":"k34", "x":4.5, "y":3.25, "w":1.75}, {"label":"k35", "x":6.25, "y":3.25}, {"label":"k36", "x":7.25, "y":3.25}, {"label":"k37", "x":8.25, "y":3.25}, {"label":"k38", "x":9.25, "y":3.25}, {"label":"k39", "x":10.25, "y":3.25}, {"label":"k3a", "x":11.25, "y":3.25}, {"label":"k90", "x":12.25, "y":3.25}, {"label":"k91", "x":13.25, "y":3.25}, {"label":"k92", "x":14.25, "y":3.25}, {"label":"k93", "x":15.25, "y":3.25}, {"label":"k94", "x":16.25, "y":3.25}, {"label":"k95", "x":17.25, "y":3.25, "w":2.25}, {"label":"k97", "x":20, "y":3.25}, {"label":"k98", "x":21, "y":3.25}, {"label":"k99", "x":22, "y":3.25},
- {"label":"k40", "x":0, "y":4.25, "h":2}, {"label":"k41", "x":1, "y":4.25}, {"label":"k42", "x":2, "y":4.25}, {"label":"k43", "x":3, "y":4.25}, {"label":"k45", "x":5.5, "y":4.25, "w":1.25}, {"label":"k46", "x":6.75, "y":4.25}, {"label":"k47", "x":7.75, "y":4.25}, {"label":"k48", "x":8.75, "y":4.25}, {"label":"k49", "x":9.75, "y":4.25}, {"label":"k4a", "x":10.75, "y":4.25}, {"label":"ka0", "x":11.75, "y":4.25}, {"label":"ka1", "x":12.75, "y":4.25}, {"label":"ka2", "x":13.75, "y":4.25}, {"label":"ka3", "x":14.75, "y":4.25}, {"label":"ka4", "x":15.75, "y":4.25}, {"label":"ka5", "x":16.75, "y":4.25, "w":1.75}, {"label":"ka7", "x":20, "y":4.25}, {"label":"ka8", "x":21, "y":4.25}, {"label":"ka9", "x":22, "y":4.25}, {"label":"kaa", "x":23, "y":4.25, "h":2}, {"label":"k44", "x":4.25, "y":4.5}, {"label":"k96", "x":18.75, "y":4.5},
- {"label":"k51", "x":1, "y":5.25}, {"label":"k52", "x":2, "y":5.25}, {"label":"k56", "x":6.5, "y":5.25}, {"label":"k57", "x":7.5, "y":5.25}, {"label":"kb0", "x":8.5, "y":5.25, "w":7}, {"label":"kb4", "x":15.5, "y":5.25}, {"label":"kb5", "x":16.5, "y":5.25}, {"label":"kb8", "x":21, "y":5.25}, {"label":"kb9", "x":22, "y":5.25}, {"label":"k53", "x":3.25, "y":5.5}, {"label":"k54", "x":4.25, "y":5.5}, {"label":"k55", "x":5.25, "y":5.5}, {"label":"ka6", "x":17.75, "y":5.5}, {"label":"kb6", "x":18.75, "y":5.5}, {"label":"kb7", "x":19.75, "y":5.5}
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k86", "x":18, "y":3.75, "w":1.5},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k95", "x":17.25, "y":4.75, "w":2.25},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"k58", "x":8.5, "y":6.75},
+ {"label":"k59", "x":9.5, "y":6.75},
+ {"label":"k5a", "x":10.5, "y":6.75},
+ {"label":"kb0", "x":11.5, "y":6.75},
+ {"label":"kb1", "x":12.5, "y":6.75},
+ {"label":"kb2", "x":13.5, "y":6.75},
+ {"label":"kb3", "x":14.5, "y":6.75},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
]
},
- "LAYOUT_4u_space": {
- "key_count": 124,
+ "LAYOUT_1u_iso": {
"layout": [
- {"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4.75, "y":0}, {"label":"k06", "x":6.25, "y":0}, {"label":"k07", "x":7.25, "y":0}, {"label":"k08", "x":8.25, "y":0}, {"label":"k09", "x":9.25, "y":0}, {"label":"k0a", "x":10.75, "y":0}, {"label":"k60", "x":11.75, "y":0}, {"label":"k61", "x":12.75, "y":0}, {"label":"k62", "x":13.75, "y":0}, {"label":"k63", "x":15.25, "y":0}, {"label":"k64", "x":16.25, "y":0}, {"label":"k65", "x":17.25, "y":0}, {"label":"k66", "x":18.25, "y":0}, {"label":"k67", "x":20, "y":0}, {"label":"k68", "x":21, "y":0}, {"label":"k69", "x":22, "y":0}, {"label":"k6a", "x":23, "y":0},
- {"label":"k10", "x":0, "y":1.25}, {"label":"k11", "x":1, "y":1.25}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1.25}, {"label":"k14", "x":4.5, "y":1.25}, {"label":"k15", "x":5.5, "y":1.25}, {"label":"k16", "x":6.5, "y":1.25}, {"label":"k17", "x":7.5, "y":1.25}, {"label":"k18", "x":8.5, "y":1.25}, {"label":"k19", "x":9.5, "y":1.25}, {"label":"k0a", "x":10.5, "y":1.25}, {"label":"k70", "x":11.5, "y":1.25}, {"label":"k71", "x":12.5, "y":1.25}, {"label":"k72", "x":13.5, "y":1.25}, {"label":"k73", "x":14.5, "y":1.25}, {"label":"k74", "x":15.5, "y":1.25}, {"label":"k75", "x":16.5, "y":1.25}, {"label":"k76", "x":17.5, "y":1.25, "w":2}, {"label":"k77", "x":20, "y":1.25}, {"label":"k78", "x":21, "y":1.25}, {"label":"k79", "x":22, "y":1.25}, {"label":"k7a", "x":23, "y":1.25},
- {"label":"k20", "x":0, "y":2.25, "h":2}, {"label":"k21", "x":1, "y":2.25}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2.25}, {"label":"k24", "x":4.5, "y":2.25, "w":1.5}, {"label":"k25", "x":6, "y":2.25}, {"label":"k26", "x":7, "y":2.25}, {"label":"k27", "x":8, "y":2.25}, {"label":"k28", "x":9, "y":2.25}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2a", "x":11, "y":2.25}, {"label":"k80", "x":12, "y":2.25}, {"label":"k81", "x":13, "y":2.25}, {"label":"k82", "x":14, "y":2.25}, {"label":"k83", "x":15, "y":2.25}, {"label":"k84", "x":16, "y":2.25}, {"label":"k85", "x":17, "y":2.25}, {"label":"k86", "x":18, "y":2.25, "w":1.5}, {"label":"k87", "x":20, "y":2.25}, {"label":"k88", "x":21, "y":2.25}, {"label":"k89", "x":22, "y":2.25}, {"label":"k8a", "x":23, "y":2.25, "h":2},
- {"label":"k31", "x":1, "y":3.25}, {"label":"k32", "x":2, "y":3.25}, {"label":"k33", "x":3, "y":3.25}, {"label":"k34", "x":4.5, "y":3.25, "w":1.75}, {"label":"k35", "x":6.25, "y":3.25}, {"label":"k36", "x":7.25, "y":3.25}, {"label":"k37", "x":8.25, "y":3.25}, {"label":"k38", "x":9.25, "y":3.25}, {"label":"k39", "x":10.25, "y":3.25}, {"label":"k3a", "x":11.25, "y":3.25}, {"label":"k90", "x":12.25, "y":3.25}, {"label":"k91", "x":13.25, "y":3.25}, {"label":"k92", "x":14.25, "y":3.25}, {"label":"k93", "x":15.25, "y":3.25}, {"label":"k94", "x":16.25, "y":3.25}, {"label":"k95", "x":17.25, "y":3.25, "w":2.25}, {"label":"k97", "x":20, "y":3.25}, {"label":"k98", "x":21, "y":3.25}, {"label":"k99", "x":22, "y":3.25},
- {"label":"k40", "x":0, "y":4.25, "h":2}, {"label":"k41", "x":1, "y":4.25}, {"label":"k42", "x":2, "y":4.25}, {"label":"k43", "x":3, "y":4.25}, {"label":"k45", "x":5.5, "y":4.25, "w":1.25}, {"label":"k46", "x":6.75, "y":4.25}, {"label":"k47", "x":7.75, "y":4.25}, {"label":"k48", "x":8.75, "y":4.25}, {"label":"k49", "x":9.75, "y":4.25}, {"label":"k4a", "x":10.75, "y":4.25}, {"label":"ka0", "x":11.75, "y":4.25}, {"label":"ka1", "x":12.75, "y":4.25}, {"label":"ka2", "x":13.75, "y":4.25}, {"label":"ka3", "x":14.75, "y":4.25}, {"label":"ka4", "x":15.75, "y":4.25}, {"label":"ka5", "x":16.75, "y":4.25, "w":1.75}, {"label":"ka7", "x":20, "y":4.25}, {"label":"ka8", "x":21, "y":4.25}, {"label":"ka9", "x":22, "y":4.25}, {"label":"kaa", "x":23, "y":4.25, "h":2}, {"label":"k44", "x":4.25, "y":4.5}, {"label":"k96", "x":18.75, "y":4.5},
- {"label":"k51", "x":1, "y":5.25}, {"label":"k52", "x":2, "y":5.25}, {"label":"k56", "x":6.5, "y":5.25}, {"label":"k57", "x":7.5, "y":5.25}, {"label":"k58", "x":8.5, "y":5.25}, {"label":"kb0", "x":9.5, "y":5.25, "w":4}, {"label":"kb2", "x":13.5, "y":5.25}, {"label":"kb3", "x":14.5, "y":5.25}, {"label":"kb4", "x":15.5, "y":5.25}, {"label":"kb5", "x":16.5, "y":5.25}, {"label":"kb8", "x":21, "y":5.25}, {"label":"kb9", "x":22, "y":5.25}, {"label":"k53", "x":3.25, "y":5.5}, {"label":"k54", "x":4.25, "y":5.5}, {"label":"k55", "x":5.25, "y":5.5}, {"label":"ka6", "x":17.75, "y":5.5}, {"label":"kb6", "x":18.75, "y":5.5}, {"label":"kb7", "x":19.75, "y":5.5}
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k9a", "x":17.25, "y":4.75},
+ {"label":"k95", "x":18.25, "y":3.75, "w":1.25, "h":2},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"k58", "x":8.5, "y":6.75},
+ {"label":"k59", "x":9.5, "y":6.75},
+ {"label":"k5a", "x":10.5, "y":6.75},
+ {"label":"kb0", "x":11.5, "y":6.75},
+ {"label":"kb1", "x":12.5, "y":6.75},
+ {"label":"kb2", "x":13.5, "y":6.75},
+ {"label":"kb3", "x":14.5, "y":6.75},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
+ ]
+ },
+ "LAYOUT_2u_ansi": {
+ "layout": [
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k86", "x":18, "y":3.75, "w":1.5},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k95", "x":17.25, "y":4.75, "w":2.25},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"k58", "x":8.5, "y":6.75},
+ {"label":"k59", "x":9.5, "y":6.75},
+ {"label":"kb0", "x":10.5, "y":6.75, "w":2},
+ {"label":"kb1", "x":12.5, "y":6.75},
+ {"label":"kb2", "x":13.5, "y":6.75},
+ {"label":"kb3", "x":14.5, "y":6.75},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
+ ]
+ },
+ "LAYOUT_2u_iso": {
+ "layout": [
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k9a", "x":17.25, "y":4.75},
+ {"label":"k95", "x":18.25, "y":3.75, "w":1.25, "h":2},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"k58", "x":8.5, "y":6.75},
+ {"label":"k59", "x":9.5, "y":6.75},
+ {"label":"kb0", "x":10.5, "y":6.75, "w":2},
+ {"label":"kb1", "x":12.5, "y":6.75},
+ {"label":"kb2", "x":13.5, "y":6.75},
+ {"label":"kb3", "x":14.5, "y":6.75},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
+ ]
+ },
+ "LAYOUT_4u_ansi": {
+ "layout": [
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k86", "x":18, "y":3.75, "w":1.5},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k95", "x":17.25, "y":4.75, "w":2.25},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"k58", "x":8.5, "y":6.75},
+ {"label":"kb0", "x":9.5, "y":6.75, "w":4},
+ {"label":"kb2", "x":13.5, "y":6.75},
+ {"label":"kb3", "x":14.5, "y":6.75},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
+ ]
+ },
+ "LAYOUT_4u_iso": {
+ "layout": [
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k9a", "x":17.25, "y":4.75},
+ {"label":"k95", "x":18.25, "y":3.75, "w":1.25, "h":2},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"k58", "x":8.5, "y":6.75},
+ {"label":"kb0", "x":9.5, "y":6.75, "w":4},
+ {"label":"kb2", "x":13.5, "y":6.75},
+ {"label":"kb3", "x":14.5, "y":6.75},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
+ ]
+ },
+ "LAYOUT_7u_ansi": {
+ "layout": [
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k86", "x":18, "y":3.75, "w":1.5},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k95", "x":17.25, "y":4.75, "w":2.25},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"kb0", "x":8.5, "y":6.75, "w":7},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
+ ]
+ },
+ "LAYOUT_7u_iso": {
+ "layout": [
+ {"label":"e00", "x":3, "y":0},
+ {"label":"e01", "x":4, "y":0},
+ {"label":"e02", "x":19, "y":0},
+ {"label":"e03", "x":20, "y":0},
+ {"label":"k00", "x":0, "y":1.5},
+ {"label":"k01", "x":1, "y":1.5},
+ {"label":"k02", "x":2, "y":1.5},
+ {"label":"k03", "x":3, "y":1.5},
+ {"label":"k04", "x":4.75, "y":1.5},
+ {"label":"k06", "x":6.25, "y":1.5},
+ {"label":"k07", "x":7.25, "y":1.5},
+ {"label":"k08", "x":8.25, "y":1.5},
+ {"label":"k09", "x":9.25, "y":1.5},
+ {"label":"k0a", "x":10.75, "y":1.5},
+ {"label":"k60", "x":11.75, "y":1.5},
+ {"label":"k61", "x":12.75, "y":1.5},
+ {"label":"k62", "x":13.75, "y":1.5},
+ {"label":"k63", "x":15.25, "y":1.5},
+ {"label":"k64", "x":16.25, "y":1.5},
+ {"label":"k65", "x":17.25, "y":1.5},
+ {"label":"k66", "x":18.25, "y":1.5},
+ {"label":"k67", "x":20, "y":1.5},
+ {"label":"k68", "x":21, "y":1.5},
+ {"label":"k69", "x":22, "y":1.5},
+ {"label":"k6a", "x":23, "y":1.5},
+ {"label":"k10", "x":0, "y":2.75},
+ {"label":"k11", "x":1, "y":2.75},
+ {"label":"k12", "x":2, "y":2.75},
+ {"label":"k13", "x":3, "y":2.75},
+ {"label":"k14", "x":4.5, "y":2.75},
+ {"label":"k15", "x":5.5, "y":2.75},
+ {"label":"k16", "x":6.5, "y":2.75},
+ {"label":"k17", "x":7.5, "y":2.75},
+ {"label":"k18", "x":8.5, "y":2.75},
+ {"label":"k19", "x":9.5, "y":2.75},
+ {"label":"k1a", "x":10.5, "y":2.75},
+ {"label":"k70", "x":11.5, "y":2.75},
+ {"label":"k71", "x":12.5, "y":2.75},
+ {"label":"k72", "x":13.5, "y":2.75},
+ {"label":"k73", "x":14.5, "y":2.75},
+ {"label":"k74", "x":15.5, "y":2.75},
+ {"label":"k75", "x":16.5, "y":2.75},
+ {"label":"k76", "x":17.5, "y":2.75, "w":2},
+ {"label":"k77", "x":20, "y":2.75},
+ {"label":"k78", "x":21, "y":2.75},
+ {"label":"k79", "x":22, "y":2.75},
+ {"label":"k7a", "x":23, "y":2.75},
+ {"label":"k20", "x":0, "y":3.75, "h":2},
+ {"label":"k21", "x":1, "y":3.75},
+ {"label":"k22", "x":2, "y":3.75},
+ {"label":"k23", "x":3, "y":3.75},
+ {"label":"k24", "x":4.5, "y":3.75, "w":1.5},
+ {"label":"k25", "x":6, "y":3.75},
+ {"label":"k26", "x":7, "y":3.75},
+ {"label":"k27", "x":8, "y":3.75},
+ {"label":"k28", "x":9, "y":3.75},
+ {"label":"k29", "x":10, "y":3.75},
+ {"label":"k2a", "x":11, "y":3.75},
+ {"label":"k80", "x":12, "y":3.75},
+ {"label":"k81", "x":13, "y":3.75},
+ {"label":"k82", "x":14, "y":3.75},
+ {"label":"k83", "x":15, "y":3.75},
+ {"label":"k84", "x":16, "y":3.75},
+ {"label":"k85", "x":17, "y":3.75},
+ {"label":"k87", "x":20, "y":3.75},
+ {"label":"k88", "x":21, "y":3.75},
+ {"label":"k89", "x":22, "y":3.75},
+ {"label":"k8a", "x":23, "y":3.75, "h":2},
+ {"label":"k31", "x":1, "y":4.75},
+ {"label":"k32", "x":2, "y":4.75},
+ {"label":"k33", "x":3, "y":4.75},
+ {"label":"k34", "x":4.5, "y":4.75, "w":1.75},
+ {"label":"k35", "x":6.25, "y":4.75},
+ {"label":"k36", "x":7.25, "y":4.75},
+ {"label":"k37", "x":8.25, "y":4.75},
+ {"label":"k38", "x":9.25, "y":4.75},
+ {"label":"k39", "x":10.25, "y":4.75},
+ {"label":"k3a", "x":11.25, "y":4.75},
+ {"label":"k90", "x":12.25, "y":4.75},
+ {"label":"k91", "x":13.25, "y":4.75},
+ {"label":"k92", "x":14.25, "y":4.75},
+ {"label":"k93", "x":15.25, "y":4.75},
+ {"label":"k94", "x":16.25, "y":4.75},
+ {"label":"k9a", "x":17.25, "y":4.75},
+ {"label":"k95", "x":18.25, "y":3.75, "w":1.25, "h":2},
+ {"label":"k97", "x":20, "y":4.75},
+ {"label":"k98", "x":21, "y":4.75},
+ {"label":"k99", "x":22, "y":4.75},
+ {"label":"k40", "x":0, "y":5.75, "h":2},
+ {"label":"k41", "x":1, "y":5.75},
+ {"label":"k42", "x":2, "y":5.75},
+ {"label":"k43", "x":3, "y":5.75},
+ {"label":"k44", "x":4.25, "y":6},
+ {"label":"k45", "x":5.5, "y":5.75, "w":1.25},
+ {"label":"k46", "x":6.75, "y":5.75},
+ {"label":"k47", "x":7.75, "y":5.75},
+ {"label":"k48", "x":8.75, "y":5.75},
+ {"label":"k49", "x":9.75, "y":5.75},
+ {"label":"k4a", "x":10.75, "y":5.75},
+ {"label":"ka0", "x":11.75, "y":5.75},
+ {"label":"ka1", "x":12.75, "y":5.75},
+ {"label":"ka2", "x":13.75, "y":5.75},
+ {"label":"ka3", "x":14.75, "y":5.75},
+ {"label":"ka4", "x":15.75, "y":5.75},
+ {"label":"ka5", "x":16.75, "y":5.75, "w":1.75},
+ {"label":"k96", "x":18.75, "y":6},
+ {"label":"ka7", "x":20, "y":5.75},
+ {"label":"ka8", "x":21, "y":5.75},
+ {"label":"ka9", "x":22, "y":5.75},
+ {"label":"kaa", "x":23, "y":5.75, "h":2},
+ {"label":"k51", "x":1, "y":6.75},
+ {"label":"k52", "x":2, "y":6.75},
+ {"label":"k53", "x":3.25, "y":7},
+ {"label":"k54", "x":4.25, "y":7},
+ {"label":"k55", "x":5.25, "y":7},
+ {"label":"k56", "x":6.5, "y":6.75},
+ {"label":"k57", "x":7.5, "y":6.75},
+ {"label":"kb0", "x":8.5, "y":6.75, "w":7},
+ {"label":"kb4", "x":15.5, "y":6.75},
+ {"label":"kb5", "x":16.5, "y":6.75},
+ {"label":"ka6", "x":17.75, "y":7},
+ {"label":"kb6", "x":18.75, "y":7},
+ {"label":"kb7", "x":19.75, "y":7},
+ {"label":"kb8", "x":21, "y":6.75},
+ {"label":"kb9", "x":22, "y":6.75}
]
}
}
diff --git a/keyboards/clueboard/66/keymaps/via/keymap.c b/keyboards/clueboard/66/keymaps/via/keymap.c
new file mode 100644
index 00000000000..f5c0c4644f4
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+#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.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+#define _EL 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: Base Layer (Default Layer)
+ */
+[_BL] = LAYOUT_66_ansi(
+ 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_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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ */
+[_FL] = LAYOUT_66_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_VOLU,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_MUTE, KC_VOLD,
+ _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_PGUP,
+ _______,_______,_______, _______, _______,MO(_FL),_______,KC_HOME,KC_PGDN,KC_END),
+
+ /* Keymap _CL: Control layer
+ */
+[_CL] = LAYOUT_66_ansi(
+ BL_STEP,RGB_M_P,RGB_M_B,RGB_M_R,RGB_M_SW,RGB_M_SN,RGB_M_K,RGB_M_X,RGB_M_G,_______,_______,_______,_______, RGB_TOG, RGB_VAI,
+ _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, RGB_VAD,
+ _______,_______,MO(_CL),_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, RGB_SAI,
+ _______,_______,_______, RGB_MOD, _______,MO(_FL),_______,RGB_HUD,RGB_SAD,RGB_HUI),
+
+ /* Keymap _EL: Empty layer
+ */
+[_EL] = LAYOUT_66_ansi(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,
+ _______,_______,_______, _______, _______,_______,_______,_______,_______,_______)
+};
\ No newline at end of file
diff --git a/keyboards/clueboard/66/keymaps/via/rules.mk b/keyboards/clueboard/66/keymaps/via/rules.mk
new file mode 100644
index 00000000000..e85bff468f6
--- /dev/null
+++ b/keyboards/clueboard/66/keymaps/via/rules.mk
@@ -0,0 +1,4 @@
+# rules.mk overrides to enable VIA
+
+VIA_ENABLE = yes
+LINK_TIME_OPTIMIZATION_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/clueboard/66_hotswap/gen1/info.json b/keyboards/clueboard/66_hotswap/gen1/info.json
index bab110f3d50..76c2b44208c 100644
--- a/keyboards/clueboard/66_hotswap/gen1/info.json
+++ b/keyboards/clueboard/66_hotswap/gen1/info.json
@@ -1,11 +1,165 @@
{
- "layouts": {
- "LAYOUT": {
- "layout": [{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"}, {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"}, {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"}, {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"}, {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}]
- },
+ "keyboard_name": "Clueboard 66% HotSwap Gen1",
+ "maintainer": "skullydazed",
+ "width": 16.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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},
- "LAYOUT_66_ansi": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
+ {"x": 15.5, "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.5, "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.25},
+
+ {"x": 14.5, "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": 2.75},
+ {"x": 6.5, "y": 4, "w": 2.25},
+ {"x": 8.75, "y": 4, "w": 1.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4},
+ {"x": 12.25, "y": 4, "w": 1.25},
+ {"x": 13.5, "y": 4},
+ {"x": 14.5, "y": 4},
+ {"x": 15.5, "y": 4}
+ ]
+ },
+ "LAYOUT_66_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.5, "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.5, "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.25},
+
+ {"x": 14.5, "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},
+ {"x": 12.25, "y": 4, "w": 1.25},
+
+ {"x": 13.5, "y": 4},
+ {"x": 14.5, "y": 4},
+ {"x": 15.5, "y": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/clueboard/66_hotswap/gen1/rules.mk b/keyboards/clueboard/66_hotswap/gen1/rules.mk
index 1de003ce5a9..c013268455c 100644
--- a/keyboards/clueboard/66_hotswap/gen1/rules.mk
+++ b/keyboards/clueboard/66_hotswap/gen1/rules.mk
@@ -21,4 +21,4 @@ AUDIO_ENABLE = yes
# project specific files
SRC = led.c
-LAYOUTS += 66_ansi
+LAYOUTS = 66_ansi
diff --git a/keyboards/clueboard/66_hotswap/info.json b/keyboards/clueboard/66_hotswap/info.json
deleted file mode 100644
index 04a748764c4..00000000000
--- a/keyboards/clueboard/66_hotswap/info.json
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- "keyboard_name": "Clueboard 66% HotSwap",
- "width": 16.5,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"x": 0, "y": 0, "label": "GRAVE"}, {"x": 1, "y": 0, "label": "1"}, {"x": 2, "y": 0, "label": "2"}, {"x": 3, "y": 0, "label": "3"}, {"x": 4, "y": 0, "label": "4"}, {"x": 5, "y": 0, "label": "5"}, {"x": 6, "y": 0, "label": "6"}, {"x": 7, "y": 0, "label": "7"}, {"x": 8, "y": 0, "label": "8"}, {"x": 9, "y": 0, "label": "9"}, {"x": 10, "y": 0, "label": "0"}, {"x": 11, "y": 0, "label": "DASH"}, {"x": 12, "y": 0, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 2, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "label": "PAGEUP"},
- {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "label": "Q"}, {"x": 2.5, "y": 1, "label": "W"}, {"x": 3.5, "y": 1, "label": "E"}, {"x": 4.5, "y": 1, "label": "R"}, {"x": 5.5, "y": 1, "label": "T"}, {"x": 6.5, "y": 1, "label": "Y"}, {"x": 7.5, "y": 1, "label": "U"}, {"x": 8.5, "y": 1, "label": "I"}, {"x": 9.5, "y": 1, "label": "O"}, {"x": 10.5, "y": 1, "label": "P"}, {"x": 11.5, "y": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "label": "PAGEDOWN"},
- {"x": 0, "y": 2, "w": 1.75, "label": "CAPS LOCK"}, {"x": 1.75, "y": 2, "label": "A"}, {"x": 2.75, "y": 2, "label": "S"}, {"x": 3.75, "y": 2, "label": "D"}, {"x": 4.75, "y": 2, "label": "F"}, {"x": 5.75, "y": 2, "label": "G"}, {"x": 6.75, "y": 2, "label": "H"}, {"x": 7.75, "y": 2, "label": "J"}, {"x": 8.75, "y": 2, "label": "K"}, {"x": 9.75, "y": 2, "label": "L"}, {"x": 10.75, "y": 2, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 2.25, "label": "ENTER"},
- {"x": 0, "y": 3, "w": 2.25, "label": "LSHIFT"}, {"x": 2.25, "y": 3, "label": "Z"}, {"x": 3.25, "y": 3, "label": "X"}, {"x": 4.25, "y": 3, "label": "C"}, {"x": 5.25, "y": 3, "label": "V"}, {"x": 6.25, "y": 3, "label": "B"}, {"x": 7.25, "y": 3, "label": "N"}, {"x": 8.25, "y": 3, "label": "M"}, {"x": 9.25, "y": 3, "label": "COMMA"}, {"x": 10.25, "y": 3, "label": "PERIOD"}, {"x": 11.25, "y": 3, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 2.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "label": "UP"},
- {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1.25, "label": "LGUI"}, {"x": 2.5, "y": 4, "w": 1.25, "label": "LALT"}, {"x": 3.75, "y": 4, "w": 2.75, "label": "SPACE1"}, {"x": 6.5, "y": 4, "w": 2.25, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "RGUI"}, {"x": 10, "y": 4, "w": 1.25, "label": "RALT"}, {"x": 11.25, "y": 4, "label": "FN"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "RCTRL"}, {"x": 13.5, "y": 4, "label": "LEFT"}, {"x": 14.5, "y": 4, "label": "DOWN"}, {"x": 15.5, "y": 4, "label": "RIGHT"}
- ]
- },
- "LAYOUT_66_ansi": {
- "layout": [
- {"label": "~", "x": 0, "y": 0}, {"label": "!", "x": 1, "y": 0}, {"label": "@", "x": 2, "y": 0}, {"label": "#", "x": 3, "y": 0}, {"label": "$", "x": 4, "y": 0}, {"label": "%", "x": 5, "y": 0}, {"label": "^", "x": 6, "y": 0}, {"label": "&", "x": 7, "y": 0}, {"label": "*", "x": 8, "y": 0}, {"label": "(", "x": 9, "y": 0}, {"label": ")", "x": 10, "y": 0}, {"label": "_", "x": 11, "y": 0}, {"label": "+", "x": 12, "y": 0}, {"label": "BACKSPACE", "x": 13, "y": 0, "w": 2}, {"label": "PAGEUP", "x": 15.5, "y": 0},
- {"label": "Tab", "x": 0, "y": 1, "w": 1.5}, {"label": "Q", "x": 1.5, "y": 1}, {"label": "W", "x": 2.5, "y": 1}, {"label": "E", "x": 3.5, "y": 1}, {"label": "R", "x": 4.5, "y": 1}, {"label": "T", "x": 5.5, "y": 1}, {"label": "Y", "x": 6.5, "y": 1}, {"label": "U", "x": 7.5, "y": 1}, {"label": "I", "x": 8.5, "y": 1}, {"label": "O", "x": 9.5, "y": 1}, {"label": "P", "x": 10.5, "y": 1}, {"label": "{", "x": 11.5, "y": 1}, {"label": "}", "x": 12.5, "y": 1}, {"label": "|", "x": 13.5, "y": 1, "w": 1.5}, {"label": "PAGEDOWN", "x": 15.5, "y": 1},
- {"label": "CAPS LOCK", "x": 0, "y": 2, "w": 1.75}, {"label": "A", "x": 1.75, "y": 2}, {"label": "S", "x": 2.75, "y": 2}, {"label": "D", "x": 3.75, "y": 2}, {"label": "F", "x": 4.75, "y": 2}, {"label": "G", "x": 5.75, "y": 2}, {"label": "H", "x": 6.75, "y": 2}, {"label": "J", "x": 7.75, "y": 2}, {"label": "K", "x": 8.75, "y": 2}, {"label": "L", "x": 9.75, "y": 2}, {"label": "SEMICOLON", "x": 10.75, "y": 2}, {"label": "QUOTE", "x": 11.75, "y": 2}, {"label": "ENTER", "x": 12.75, "y": 2, "w": 2.25},
- {"label": "LSHIFT", "x": 0, "y": 3, "w": 2.25}, {"label": "Z", "x": 2.25, "y": 3}, {"label": "X", "x": 3.25, "y": 3}, {"label": "C", "x": 4.25, "y": 3}, {"label": "V", "x": 5.25, "y": 3}, {"label": "B", "x": 6.25, "y": 3}, {"label": "N", "x": 7.25, "y": 3}, {"label": "M", "x": 8.25, "y": 3}, {"label": "COMMA", "x": 9.25, "y": 3}, {"label": "PERIOD", "x": 10.25, "y": 3}, {"label": "SLASH", "x": 11.25, "y": 3}, {"label": "RSHIFT", "x": 12.25, "y": 3, "w": 2.25}, {"label": "UP", "x": 14.5, "y": 3},
- {"label": "LCTRL", "x": 0, "y": 4, "w": 1.25}, {"label": "LGUI", "x": 1.25, "y": 4, "w": 1.25}, {"label": "LALT", "x": 2.5, "y": 4, "w": 1.25}, {"label": "SPACE", "x": 3.75, "y": 4, "w": 6.25}, {"label": "RALT", "x": 10, "y": 4, "w": 1.25}, {"label": "RGUI", "x": 11.25, "y": 4}, {"label": "FN", "x": 12.25, "y": 4, "w": 1.25}, {"label": "LEFT", "x": 13.5, "y": 4}, {"label": "DOWN", "x": 14.5, "y": 4}, {"label": "RIGHT", "x": 15.5, "y": 4}
- ]
- }
- }
-}
diff --git a/keyboards/clueboard/66_hotswap/prototype/info.json b/keyboards/clueboard/66_hotswap/prototype/info.json
new file mode 100644
index 00000000000..32bd51d0983
--- /dev/null
+++ b/keyboards/clueboard/66_hotswap/prototype/info.json
@@ -0,0 +1,245 @@
+{
+ "keyboard_name": "Clueboard 66% HotSwap Prototype",
+ "maintainer": "skullydazed",
+ "width": 16.5,
+ "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, "w": 2},
+
+ {"x": 15.5, "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.5, "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": 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},
+ {"x": 13.25, "y": 3, "w": 1.25},
+ {"x": 14.5, "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": 2.75},
+ {"x": 6.5, "y": 4, "w": 2.25},
+ {"x": 8.75, "y": 4, "w": 1.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4},
+ {"x": 12.25, "y": 4, "w": 1.25},
+ {"x": 13.5, "y": 4},
+ {"x": 14.5, "y": 4},
+ {"x": 15.5, "y": 4}
+ ]
+ },
+ "LAYOUT": {
+ "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.5, "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.5, "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.25},
+
+ {"x": 14.5, "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": 2.75},
+ {"x": 6.5, "y": 4, "w": 2.25},
+ {"x": 8.75, "y": 4, "w": 1.25},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4},
+ {"x": 12.25, "y": 4, "w": 1.25},
+ {"x": 13.5, "y": 4},
+ {"x": 14.5, "y": 4},
+ {"x": 15.5, "y": 4}
+ ]
+ },
+ "LAYOUT_66_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.5, "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.5, "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.25},
+
+ {"x": 14.5, "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},
+ {"x": 12.25, "y": 4, "w": 1.25},
+
+ {"x": 13.5, "y": 4},
+ {"x": 14.5, "y": 4},
+ {"x": 15.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/clueboard/card/keymaps/default/keymap.c b/keyboards/clueboard/card/keymaps/default/keymap.c
index 0fa1d9d9891..0d94eb46c92 100644
--- a/keyboards/clueboard/card/keymaps/default/keymap.c
+++ b/keyboards/clueboard/card/keymaps/default/keymap.c
@@ -38,6 +38,7 @@ void matrix_scan_user(void) {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
+#ifdef AUDIO_ENABLE
case SONG_SU:
if (record->event.pressed) {
PLAY_SONG(tone_startup);
@@ -58,7 +59,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
-
+#endif
default:
return true;
}
diff --git a/keyboards/clueboard/card/keymaps/default/rules.mk b/keyboards/clueboard/card/keymaps/default/rules.mk
index 998bb5e0eb1..82ee482bed1 100644
--- a/keyboards/clueboard/card/keymaps/default/rules.mk
+++ b/keyboards/clueboard/card/keymaps/default/rules.mk
@@ -10,7 +10,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = yes # Audio output on port C6
+AUDIO_ENABLE = no # Audio output
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/contra/config.h b/keyboards/contra/config.h
index b32d8686542..f4b84af5ae4 100755
--- a/keyboards/contra/config.h
+++ b/keyboards/contra/config.h
@@ -4,8 +4,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x4354 /* "CT" */
+#define PRODUCT_ID 0x0001
#define DEVICE_VER 0x0001
#define MANUFACTURER Cartel
#define PRODUCT Contra
diff --git a/keyboards/contra/keymaps/via/keymap.c b/keyboards/contra/keymaps/via/keymap.c
new file mode 100644
index 00000000000..4bf7a9c1719
--- /dev/null
+++ b/keyboards/contra/keymaps/via/keymap.c
@@ -0,0 +1,98 @@
+/* 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+
+enum planck_layers {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Adjst| Ctrl | Gui | Alt |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT_planck_mit(
+ KC_ESC, 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_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,
+ MO(_ADJUST), KC_LCTL, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_planck_mit(
+ 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, _______, _______, KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ /* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_planck_mit(
+ 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_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ /* Adjust
+ * ,----------------------------------------------------------- ------------------------.
+ * | | Reset| Debug| | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_planck_mit(
+ _______, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
\ No newline at end of file
diff --git a/keyboards/contra/keymaps/via/readme.md b/keyboards/contra/keymaps/via/readme.md
new file mode 100644
index 00000000000..3c863243d45
--- /dev/null
+++ b/keyboards/contra/keymaps/via/readme.md
@@ -0,0 +1,2 @@
+# A basic Contra Layout with VIA enabled
+
diff --git a/keyboards/contra/keymaps/via/rules.mk b/keyboards/contra/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/contra/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/converter/siemens_tastatur/info.json b/keyboards/converter/siemens_tastatur/info.json
new file mode 100644
index 00000000000..de9998cb713
--- /dev/null
+++ b/keyboards/converter/siemens_tastatur/info.json
@@ -0,0 +1,94 @@
+{
+ "keyboard_name": "Siemens Tastatur",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 20,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0, "w": 1.5},
+ {"x": 1.5, "y": 0},
+ {"x": 2.5, "y": 0},
+ {"x": 3.5, "y": 0},
+ {"x": 4.5, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+ {"x": 10.5, "y": 0},
+ {"x": 11.5, "y": 0},
+ {"x": 12.5, "y": 0},
+ {"x": 13.5, "y": 0, "h": 2},
+
+ {"x": 15, "y": 0},
+ {"x": 16, "y": 0},
+ {"x": 17, "y": 0},
+ {"x": 18, "y": 0},
+ {"x": 19, "y": 0},
+
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+ {"x": 3, "y": 1},
+ {"x": 4, "y": 1},
+ {"x": 5, "y": 1},
+ {"x": 6, "y": 1},
+ {"x": 7, "y": 1},
+ {"x": 8, "y": 1},
+ {"x": 9, "y": 1},
+ {"x": 10, "y": 1},
+ {"x": 11, "y": 1},
+ {"x": 12, "y": 1, "w": 1.5},
+
+ {"x": 15, "y": 1},
+ {"x": 16, "y": 1},
+ {"x": 17, "y": 1},
+ {"x": 18, "y": 1},
+ {"x": 19, "y": 1},
+
+ {"x": 0, "y": 2, "w": 1.25},
+ {"x": 1.25, "y": 2},
+ {"x": 2.25, "y": 2},
+ {"x": 3.25, "y": 2},
+ {"x": 4.25, "y": 2},
+ {"x": 5.25, "y": 2},
+ {"x": 6.25, "y": 2},
+ {"x": 7.25, "y": 2},
+ {"x": 8.25, "y": 2},
+ {"x": 9.25, "y": 2},
+ {"x": 10.25, "y": 2},
+ {"x": 11.25, "y": 2},
+ {"x": 12.25, "y": 2, "w": 1.25},
+ {"x": 13.5, "y": 2, "h": 2},
+
+ {"x": 15, "y": 2},
+ {"x": 16, "y": 2},
+ {"x": 17, "y": 2},
+ {"x": 18, "y": 2},
+ {"x": 19, "y": 2},
+
+ {"x": 0, "y": 3, "w": 1.75},
+ {"x": 1.75, "y": 3},
+ {"x": 2.75, "y": 3},
+ {"x": 3.75, "y": 3},
+ {"x": 4.75, "y": 3},
+ {"x": 5.75, "y": 3},
+ {"x": 6.75, "y": 3},
+ {"x": 7.75, "y": 3},
+ {"x": 8.75, "y": 3},
+ {"x": 9.75, "y": 3},
+ {"x": 10.75, "y": 3},
+
+ {"x": 15, "y": 3},
+ {"x": 16, "y": 3},
+ {"x": 17, "y": 3},
+ {"x": 18, "y": 3},
+ {"x": 19, "y": 3},
+
+ {"x": 3.5, "y": 4, "w": 6.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/siemens_tastatur/readme.md b/keyboards/converter/siemens_tastatur/readme.md
index ca1b6ec0f3d..651df9153f7 100644
--- a/keyboards/converter/siemens_tastatur/readme.md
+++ b/keyboards/converter/siemens_tastatur/readme.md
@@ -4,7 +4,7 @@
A Blue Pill STM32F103C8T6-based Converter board for a very very old keyboard.
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
Hardware Supported: Blue Pill STM32F103C8T6
Hardware Availability: Custom PCB available, contact me
diff --git a/keyboards/converter/siemens_tastatur/siemens_tastatur.h b/keyboards/converter/siemens_tastatur/siemens_tastatur.h
index 6a81b2550d7..f14cd82a8d7 100644
--- a/keyboards/converter/siemens_tastatur/siemens_tastatur.h
+++ b/keyboards/converter/siemens_tastatur/siemens_tastatur.h
@@ -30,7 +30,7 @@ along with this program. If not, see .
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g, k0h, k0i, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, k1f, k1g, k1h, k1i, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g, k2h, k2i, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3e, k3f, k3g, k3h, k3i, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3e, k3f, k3g, k3h, k3i, \
k3b \
) \
{ \
diff --git a/keyboards/converter/usb_usb/keymaps/chriskopher/keymap.c b/keyboards/converter/usb_usb/keymaps/chriskopher/keymap.c
index c472f78b7de..716ff19abdd 100644
--- a/keyboards/converter/usb_usb/keymaps/chriskopher/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/chriskopher/keymap.c
@@ -175,7 +175,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// clang-format on
// Configure ignore mod tap interrupt per key
-bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
+bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
// I don't like how mod tap interrupt feels with these keys specifically when I'm typing
case LCTL_T(KC_ESC):
diff --git a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
index 7e399081951..ce4876536f8 100644
--- a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
@@ -283,13 +283,9 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
CAPS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS, INS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
+ TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, TILD, TRNS,APP, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS
),
};
-const action_t PROGMEM fn_actions[] = {
- [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
-};
-
#endif
diff --git a/keyboards/coseyfannitutti/discipad/rules.mk b/keyboards/coseyfannitutti/discipad/rules.mk
index 53e16a4e918..cc81604a414 100644
--- a/keyboards/coseyfannitutti/discipad/rules.mk
+++ b/keyboards/coseyfannitutti/discipad/rules.mk
@@ -11,9 +11,6 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# disable debug code
-OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/coseyfannitutti/discipline/discipline.h b/keyboards/coseyfannitutti/discipline/discipline.h
index 3369d7efb41..61ac086c8cd 100644
--- a/keyboards/coseyfannitutti/discipline/discipline.h
+++ b/keyboards/coseyfannitutti/discipline/discipline.h
@@ -34,7 +34,7 @@
{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E} \
}
-#define LAYOUT_65_ansi_2_right_mods( \
+#define LAYOUT_65_ansi_blocker( \
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, K2D, K2E, \
@@ -48,6 +48,8 @@
{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, _x_, K4C, K4D, K4E} \
}
+#define LAYOUT_65_ansi_2_right_mods LAYOUT_65_ansi_blocker
+
#define LAYOUT_wkl_ansi_2_right_mods( \
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, \
@@ -90,7 +92,7 @@
{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E} \
}
-#define LAYOUT_65_iso_2_right_mods( \
+#define LAYOUT_65_iso_blocker( \
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, K1E, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K1D, K2E, \
@@ -104,6 +106,8 @@
{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, _x_, K4C, K4D, K4E} \
}
+#define LAYOUT_65_iso_2_right_mods LAYOUT_65_iso_blocker
+
#define LAYOUT_wkl_iso_2_right_mods( \
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, K1E, \
diff --git a/keyboards/coseyfannitutti/discipline/rules.mk b/keyboards/coseyfannitutti/discipline/rules.mk
index 33a0b07ddfb..f556cb1d446 100644
--- a/keyboards/coseyfannitutti/discipline/rules.mk
+++ b/keyboards/coseyfannitutti/discipline/rules.mk
@@ -14,9 +14,6 @@ F_CPU = 16000000
# ATmega328P USBasp
BOOTLOADER = USBasp
-# disable debug code
-OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
@@ -38,4 +35,4 @@ AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
-LAYOUTS = 65_ansi 65_iso
+LAYOUTS = 65_ansi 65_ansi_blocker 65_iso 65_iso_blocker
diff --git a/keyboards/coseyfannitutti/mysterium/rules.mk b/keyboards/coseyfannitutti/mysterium/rules.mk
index 453aef8ab6e..9628ac7135c 100644
--- a/keyboards/coseyfannitutti/mysterium/rules.mk
+++ b/keyboards/coseyfannitutti/mysterium/rules.mk
@@ -14,9 +14,6 @@ F_CPU = 16000000
# ATmega328P USBasp
BOOTLOADER = USBasp
-# disable debug code
-OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/coseyfannitutti/romeo/rules.mk b/keyboards/coseyfannitutti/romeo/rules.mk
index cfd0ff64607..154f663699b 100644
--- a/keyboards/coseyfannitutti/romeo/rules.mk
+++ b/keyboards/coseyfannitutti/romeo/rules.mk
@@ -11,10 +11,6 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# disable debug code
-OPT_DEFS = -DDEBUG_LEVEL=0
-
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/crkbd/keymaps/drashna/keymap.c b/keyboards/crkbd/keymaps/drashna/keymap.c
index 55d51eb08ac..d9c1605ce98 100644
--- a/keyboards/crkbd/keymaps/drashna/keymap.c
+++ b/keyboards/crkbd/keymaps/drashna/keymap.c
@@ -121,10 +121,20 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
}
#ifdef OLED_DRIVER_ENABLE
-oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+# ifndef SPLIT_KEYBOARD
+ if (is_master) {
+# endif
+ return OLED_ROTATION_270;
+# ifndef SPLIT_KEYBOARD
+ } else {
+ return rotation;
+ }
+# endif
+}
#endif
-uint16_t get_tapping_term(uint16_t keycode) {
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case ALT_T(KC_A):
return TAPPING_TERM + 100;
diff --git a/keyboards/crkbd/keymaps/gotham/README.md b/keyboards/crkbd/keymaps/gotham/README.md
new file mode 100644
index 00000000000..23c1d4fdd81
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/README.md
@@ -0,0 +1,16 @@
+# Gotham's custom CRKBD Layout
+
+My take on the 40% layout with programming in mind. Do read about the layers, it helps with forming a mental model to remember the keymap better than just memorization.
+
+## Layers
+- QWERTY: Base layer. The idea is to reduce thumb movement by placing commonly used keys and layers on resting thumb positions (center thumb keys). You might need to play around with TAPPING_TERM to find your perfect setting. Also, both Lower and Raise buttons appear on both halves for easy access (think of it as: middle thumb key is Lower, outer thumb key is Raise).
+- LOWER: Numbers, common symbols and navigation. Easiest layer to reach (middle thumb button on both halves). The nav is shaped as a T instead of an inverted T for a few reasons. First, Left and Right needed to be on the home row (since I use them a lot to navigate through code). But the Up key can't be on the top row because numbers occupy that space. So I moved the Up and Down keys one key down. It takes some getting used to, but I find this a great balance without separating the nav and number rows. The nav cluster also contains Home and End keys below Left and Right, making it a breeze to navigate through code.
+- RAISE: All symbols are here, arranged in a way that can be (kind of) deduced more by logic and less by memory. On the left hand, the first 2 cols contain the symbols for shifted numbers 1-6, with ! and @ in the home row instead of the top row. Think of the 3 rows as symbols for 3 and 4, 1 and 2, 5 and 6). The next 2 cols contain common brackets. On the right hand is everything else. Note that -, _ and = are close to the home row because of how common they are in code. Operators (&, | and !) are on the top row for convinience. Just try and remember where +, *, < and > located. Admitedlly, the locations for these symbols could use improvement.
+- ADJUST: Contains settings and Function keys. This is placed on the bottom-right corner (triggerred by the pinky), since the thumb keys already have multiple uses.
+
+## Custom OLED
+This keymap includes custom OLED font and code. The font contains some logos and status indidcators for some of the features I use (RGB and Audio). Enable OLED in rukes.mk to check it out. Feel free to reuse the font or parts of it.
+__KNOWN BUG:__ When the computer sleeps, one of the OLEDs is always on (they don't turn off on their own, and the timeout doesn't work). I haven't been able to figure out what's going on there and am open to suggestions/PRs.
+
+## Flashing
+Flash using `make crkbd:gotham:avrdude` for Pro Micro and `make crkbd:gotham:dfu` for Elite-C.
diff --git a/keyboards/crkbd/keymaps/gotham/config.h b/keyboards/crkbd/keymaps/gotham/config.h
new file mode 100644
index 00000000000..ed08203aa15
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/config.h
@@ -0,0 +1,88 @@
+#pragma once
+
+#define EE_HANDS
+#define SPLIT_USB_DETECT
+
+#undef USE_I2C
+#undef SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 250
+
+#define NO_ACTION_ONESHOT
+
+#ifdef AUDIO_ENABLE
+# define B5_AUDIO
+# define NO_MUSIC_MODE
+# define AUDIO_CLICKY
+#endif
+
+#define OLED_FONT_H "keyboards/crkbd/keymaps/gotham/glcdfont.c"
+
+#define RGBLIGHT_SLEEP
+
+#ifdef RGBLIGHT_ENABLE
+# undef RGBLED_NUM
+# define RGBLED_NUM 6
+# define RGBLIGHT_LIMIT_VAL 150
+# define RGBLIGHT_HUE_STEP 16
+# define RGBLIGHT_SAT_STEP 32
+# define RGBLIGHT_VAL_STEP 32
+
+# define RGBLIGHT_EFFECT_RAINBOW_MOOD
+# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+# define RGBLIGHT_EFFECT_KNIGHT
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+# define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
+# define RGB_MATRIX_HUE_STEP 32
+# define RGB_MATRIX_SAT_STEP 64
+# define RGB_MATRIX_VAL_STEP 64
+# define RGB_MATRIX_SPD_STEP 20
+# define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_COLOR
+
+/* Disable the animations you don't want/need. You will need to disable a good number of these *
+ * because they take up a lot of space. Disable until you can successfully compile your firmware. */
+# 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_DUAL_BEACON
+# define DISABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define DISABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define DISABLE_RGB_MATRIX_RAINBOW_BEACON
+# define DISABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define DISABLE_RGB_MATRIX_RAINDROPS
+# define DISABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define DISABLE_RGB_MATRIX_TYPING_HEATMAP
+# define DISABLE_RGB_MATRIX_DIGITAL_RAIN
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE
+# define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# 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
+#endif
diff --git a/keyboards/crkbd/keymaps/gotham/glcdfont.c b/keyboards/crkbd/keymaps/gotham/glcdfont.c
new file mode 100644
index 00000000000..656b13974a3
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/glcdfont.c
@@ -0,0 +1,18 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+// https://helixfonteditor.netlify.com/
+
+#include "progmem.h"
+
+// Standard ASCII 5x7 font
+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, 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, 0x18, 0x24, 0x24, 0x18, 0x7C, 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, 0x90, 0x90, 0x90, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x60, 0x30, 0x18, 0xF8, 0x18, 0x00, 0xC0, 0x70, 0x1C, 0x06, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0xC3, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x1C, 0x22, 0x41, 0x41, 0x41, 0x22, 0x1C, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0xF8, 0x0C, 0x04, 0xE7, 0xE4, 0xE4, 0x07, 0x04, 0xE4, 0xE7, 0xE4, 0x04, 0x07, 0xE4, 0xE4, 0xE7, 0x04, 0x0C, 0xF8, 0x20, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, 0x00, 0x14, 0x08, 0x14, 0x00, 0x00, 0x00, 0x1C, 0x1C, 0x3E, 0x7F, 0x7F, 0x00, 0x22, 0x1C, 0x41, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x18, 0x0C, 0x06, 0x0C, 0x18, 0x30, 0x77, 0x77, 0x77, 0x00, 0x77, 0x77,
+ 0x77, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x4A, 0x4F, 0x4A, 0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x60, 0x70, 0x3E, 0x1F, 0x19, 0x18, 0x0C, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0C, 0x06, 0x07, 0xFC, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x80, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x1C, 0x22, 0x00, 0x00, 0x1C, 0x3E, 0x7F, 0x63, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x49, 0xFF, 0x00, 0x00, 0x0F, 0x1F, 0x3F, 0x38, 0x30, 0xFF, 0xFF, 0xFF, 0x30, 0x38, 0x3F, 0x1F, 0x0F, 0x00, 0x00, 0xFF, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x40, 0x60, 0x6A, 0x64, 0x6A, 0x60, 0x40, 0x00, 0x00, 0x00, 0x00, 0x04, 0x42, 0x69, 0x65, 0x65, 0x65, 0x69, 0x42, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x30, 0x66, 0x66, 0x66, 0x00, 0x00, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x24, 0x24, 0xFC, 0x00, 0x00, 0x00, 0xF0, 0x90, 0x90, 0xF0, 0x90, 0x90, 0xF0, 0x98, 0x9C, 0xF2, 0x22, 0x21, 0xE1, 0x01, 0x01, 0x01, 0xF1, 0x91, 0x91, 0xFA, 0x4C, 0x4C, 0xF8, 0x48, 0x48, 0xF8, 0x48, 0x48, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x18, 0x30, 0x21, 0x21, 0x31, 0x18, 0x10, 0x30, 0x20, 0x60, 0x41, 0x60, 0x20, 0x30, 0x18, 0x30, 0x60, 0x40, 0x40, 0x47, 0x4C, 0x48, 0x68, 0x38, 0x1C, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x63, 0x7F, 0x3E, 0x1C,
+ 0x00, 0x00, 0x22, 0x1C, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x0F, 0x18, 0x10, 0x70, 0x10, 0x10, 0x70, 0x10, 0x13, 0x73, 0x13, 0x10, 0x70, 0x10, 0x10, 0x70, 0x10, 0x18, 0x0F, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x22, 0xC9, 0xD1, 0xC9, 0x22, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x10, 0x02, 0x38, 0xFC, 0xED, 0xFC, 0x38, 0x02, 0x10, 0x00, 0x00, 0x08, 0x0C, 0x7E, 0x7F, 0x7E, 0x0C, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x09, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x0F, 0x09, 0x09, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x04, 0x04, 0x07, 0x04, 0x04, 0x0F, 0x09, 0x09, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x04, 0x04, 0x07, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
diff --git a/keyboards/crkbd/keymaps/gotham/keycodes.h b/keyboards/crkbd/keymaps/gotham/keycodes.h
new file mode 100644
index 00000000000..9ba44c54a7c
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/keycodes.h
@@ -0,0 +1,28 @@
+#pragma once
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes { QWERTY = SAFE_RANGE, LOWER, RAISE, ADJUST, RGBRST };
+
+#define SFT_EQ MT(MOD_LSFT, KC_EQL)
+#define SFT_QT MT(MOD_RSFT, KC_QUOT)
+
+#define SFT_A MT(MOD_LSFT, KC_A)
+#define CTL_Z MT(MOD_LCTL, KC_Z)
+
+#define SFT_SCLN MT(MOD_RSFT, KC_SCLN)
+#define CTL_SLSH MT(MOD_RCTL, KC_SLSH)
+
+#define LOW_SPC LT(_LOWER, KC_SPC)
+#define RAI_EQ LT(_RAISE, KC_EQL)
+#define RAI_ENT LT(_RAISE, KC_ENT)
+#define LOW_BSP LT(_LOWER, KC_BSPC)
+#define LOW_DEL LT(_LOWER, KC_DEL)
+#define ADJ_GRV LT(_ADJUST, KC_GRV)
+#define KC_ANGL LSFT(KC_COMM)
+#define KC_ANGR LSFT(KC_DOT)
diff --git a/keyboards/crkbd/keymaps/gotham/keymap.c b/keyboards/crkbd/keymaps/gotham/keymap.c
new file mode 100644
index 00000000000..6657f21ee9d
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/keymap.c
@@ -0,0 +1,143 @@
+#include QMK_KEYBOARD_H
+#include "keycodes.h"
+
+#ifdef OLED_DRIVER_ENABLE
+# include "oled.c"
+#endif
+
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+# include "rgb.c"
+#endif
+
+// clang-format off
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //|-----------------------------------------------------| |-----------------------------------------------------|
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ SFT_EQ, SFT_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SFT_SCLN,SFT_QT,
+ //---------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, CTL_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, CTL_SLSH,ADJ_GRV,
+ //---------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LALT, LOW_SPC, RAI_EQ, RAI_ENT, LOW_BSP, KC_LGUI
+ //|--------------------------| |--------------------------|
+
+
+ ),
+
+ [_LOWER] = LAYOUT(
+ //|-----------------------------------------------------| |-----------------------------------------------------|
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, KC_ANGL, KC_ANGR, KC_LPRN, KC_RPRN, KC_PGUP, KC_MINS, KC_LEFT, KC_UP, KC_RIGHT,KC_PLUS, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, KC_PGDOWN, KC_UNDS, KC_HOME, KC_DOWN, KC_END, XXXXXXX, _______,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, LOW_DEL, _______
+ //|--------------------------| |--------------------------|
+ ),
+
+ [_RAISE] = LAYOUT(
+ //|-----------------------------------------------------| |-----------------------------------------------------|
+ KC_ESC, KC_HASH, KC_DLR, KC_LCBR, KC_RCBR, XXXXXXX, XXXXXXX, KC_AMPR, KC_PIPE, KC_EXLM, KC_ASTR, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, XXXXXXX, XXXXXXX, KC_UNDS, KC_EQL, KC_ANGL, KC_ANGR, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_MINS, KC_PLUS, XXXXXXX, KC_BSLS, _______,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______
+ //|--------------------------| |--------------------------|
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //|-----------------------------------------------------| |-----------------------------------------------------|
+ XXXXXXX, CK_RST, CK_DOWN, CK_UP, CK_TOGG, RGB_TOG, MU_TOG, KC_F12, KC_F7, KC_F8, KC_F9, XXXXXXX,\
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ XXXXXXX, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_MOD, MU_MOD, KC_F11, KC_F4, KC_F5, KC_F6, RESET, \
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ XXXXXXX, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGBRST, AU_TOG, KC_F10, KC_F1, KC_F2, KC_F3, _______,\
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, KC_VOLD, KC_VOLU \
+ //|--------------------------| |--------------------------|
+ )
+};
+// clang-format off
+
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+layer_state_t layer_state_set_user(layer_state_t state) {
+ /* For any layer other than default, save current RGB state and switch to layer-based RGB */
+ if (layer_state_cmp(state, 0)) {
+ restore_rgb_config();
+ } else {
+ uint8_t layer = get_highest_layer(state);
+ if (layer_state_cmp(layer_state, 0)) save_rgb_config();
+ rgb_by_layer(layer);
+ }
+ return state;
+}
+#endif
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+#ifdef OLED_DRIVER_ENABLE
+ if (record->event.pressed) {
+ oled_timer = timer_read();
+ add_keylog(keycode);
+ }
+#endif
+
+ switch (keycode) {
+ 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;
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+ case RGB_MOD:
+ case RGB_TOG:
+ case RGB_HUI:
+ case RGB_HUD:
+ case RGB_SAI:
+ case RGB_SAD:
+ case RGB_VAI:
+ case RGB_VAD:
+ case RGB_SPI:
+ case RGB_SPD:
+ /* Override layer-based RGB and resume RGB effect to be able to preview changes */
+ if (record->event.pressed) {
+ restore_rgb_config();
+ process_rgb(keycode, record);
+ save_rgb_config();
+ }
+ return false;
+ case RGBRST:
+ if (record->event.pressed) {
+# ifdef RGBLIGHT_ENABLE
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+# elif RGB_MATRIX_ENABLE
+ eeconfig_update_rgb_matrix_default();
+ rgb_matrix_enable();
+# endif
+ save_rgb_config();
+ }
+ return false;
+#endif
+ }
+ return true;
+}
diff --git a/keyboards/crkbd/keymaps/gotham/oled.c b/keyboards/crkbd/keymaps/gotham/oled.c
new file mode 100644
index 00000000000..ac6f236fc6b
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/oled.c
@@ -0,0 +1,265 @@
+#pragma once
+
+extern uint8_t is_master;
+
+#if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
+# include "rgb.c"
+#endif
+
+#ifdef AUDIO_ENABLE
+extern audio_config_t audio_config;
+#endif
+
+// 5x3 Logos
+
+void render_corne_logo(void) {
+ static const char PROGMEM font_logo[16] = {0x80, 0x81, 0x82, 0x83, 0x84, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0};
+ oled_write_P(font_logo, false);
+};
+
+void render_qmk_logo(void) {
+ static const char PROGMEM font_qmk_logo[16] = {0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0};
+ oled_write_P(font_qmk_logo, false);
+};
+
+// 5x2 Keyboard, Controller logos
+
+void render_keyboard(void) {
+ static const char PROGMEM font_keyboard[11] = {0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0};
+ oled_write_P(font_keyboard, false);
+};
+
+void render_kb_split(void) {
+ static const char PROGMEM font_kb_split[11] = {0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0};
+ oled_write_P(font_kb_split, false);
+};
+
+// 5x1 Layer indicator
+
+void render_layer(void) {
+ static const char PROGMEM font_layer[4][6] = {
+ {0x85, 0x86, 0x87, 0x88, 0x89, 0},
+ {0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0},
+ {0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0},
+ {0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0},
+ };
+ uint8_t layer = 0;
+ if (layer_state_is(_LOWER)) {
+ layer = 1;
+ } else if (layer_state_is(_RAISE)) {
+ layer = 2;
+ } else if (layer_state_is(_ADJUST)) {
+ layer = 3;
+ }
+ oled_write_P(font_layer[layer], false);
+};
+
+ // 2x1 Audio, clicky and RGB status indicators
+
+#ifdef AUDIO_ENABLE
+void render_audio_status(void) {
+ static const char PROGMEM font_audio_off[3] = {0x8f, 0x90, 0};
+ static const char PROGMEM font_audio_on[3] = {0x91, 0x92, 0};
+ oled_write_P(audio_config.enable ? font_audio_on : font_audio_off, false);
+};
+
+void render_clicky_status(void) {
+ static const char PROGMEM font_clicky_off[3] = {0xaf, 0xb0, 0};
+ static const char PROGMEM font_clicky_on[3] = {0xb1, 0xb2, 0};
+ oled_write_P(audio_config.clicky_enable ? font_clicky_on : font_clicky_off, false);
+};
+#endif
+
+#if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE)
+void render_rgb_status(void) {
+ static const char PROGMEM font_rgb_off[3] = {0xcf, 0xd0, 0};
+ static const char PROGMEM font_rgb_on[3] = {0xd1, 0xd2, 0};
+# ifdef RGBLIGHT_ENABLE
+ bool rgb_enabled = rgblight_config.enable;
+# elif RGB_MATRIX_ENABLE
+ bool rgb_enabled = rgb_matrix_config.enable;
+# endif
+ oled_write_P(rgb_enabled ? font_rgb_on : font_rgb_off, false);
+};
+#endif
+
+// 2x1 Ctrl, Alt, Shift, GUI, Mouse
+
+void render_mod_ctrl(void) {
+ static const char PROGMEM font_ctrl[3] = {0x93, 0x94, 0};
+ oled_write_P(font_ctrl, false);
+};
+
+void render_mod_alt(void) {
+ static const char PROGMEM font_alt[3] = {0xb3, 0xb4, 0};
+ oled_write_P(font_alt, false);
+};
+
+void render_mod_shift(void) {
+ static const char PROGMEM font_shift[3] = {0xd3, 0xd4, 0};
+ oled_write_P(font_shift, false);
+};
+
+void render_mod_gui(void) {
+ static const char PROGMEM font_gui[3] = {0x95, 0x96, 0};
+ oled_write_P(font_gui, false);
+};
+
+#ifdef MOUSEKEY_ENABLE
+void render_mod_mouse(void) {
+ static const char PROGMEM font_mouse[3] = {0x97, 0x98, 0};
+ oled_write_P(font_mouse, false);
+};
+#endif
+
+// 5x2 Mod and feature indicator clusters
+
+void render_mod_status(void) {
+#ifdef NO_ACTION_ONESHOT
+ uint8_t modifiers = get_mods();
+#else
+ uint8_t modifiers = get_mods() | get_oneshot_mods();
+#endif
+
+ (modifiers & MOD_MASK_CTRL) ? render_mod_ctrl() : oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(" "), false);
+ (modifiers & MOD_MASK_SHIFT) ? render_mod_shift() : oled_write_P(PSTR(" "), false);
+
+ (modifiers & MOD_MASK_ALT) ? render_mod_alt() : oled_write_P(PSTR(" "), false);
+ oled_write_P(PSTR(" "), false);
+ (modifiers & MOD_MASK_GUI) ? render_mod_gui() : oled_write_P(PSTR(" "), false);
+}
+
+void render_feature_status(void) {
+#if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE)
+ render_rgb_status();
+#endif
+
+#ifdef AUDIO_ENABLE
+ oled_write_P(PSTR(" "), false);
+ render_audio_status();
+#endif
+};
+
+// Keylogger
+#define KEYLOGGER_LENGTH 5
+static uint16_t oled_timer = 0;
+static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"};
+// clang-format off
+static const char PROGMEM code_to_name[0xFF] = {
+// 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
+ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
+ '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
+ ']','\\', '#', ';','\'', '`', ',', '.', '/', 128, ' ', ' ', ' ', ' ', ' ', ' ', // 3x
+ ' ', ' ', ' ', ' ', ' ', ' ', 'P', 'S', ' ', ' ', ' ', ' ', 16, ' ', ' ', ' ', // 4x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 5x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Cx
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Dx
+ 'C', 'S', 'A', 'C', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ex
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' // Fx
+};
+
+void add_keylog(uint16_t keycode) {
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX) || (keycode >= QK_MODS && keycode <= QK_MODS_MAX)) {
+ keycode = keycode & 0xFF;
+ } else if (keycode > 0xFF) {
+ keycode = 0;
+ }
+
+ for (uint8_t i = (KEYLOGGER_LENGTH - 1); i > 0; --i) {
+ keylog_str[i] = keylog_str[i - 1];
+ }
+
+ if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
+ }
+}
+
+void render_keylogger_status(void) {
+ oled_write(keylog_str, false);
+}
+
+void render_prompt(void) {
+ bool blink = (timer_read() % 1000) < 500;
+
+ if (layer_state_is(_LOWER)) {
+ oled_write_ln_P(blink ? PSTR("> lo_") : PSTR("> lo "), false);
+ } else if (layer_state_is(_RAISE)) {
+ oled_write_ln_P(blink ? PSTR("> hi_") : PSTR("> hi "), false);
+ } else if (layer_state_is(_ADJUST)) {
+ oled_write_ln_P(blink ? PSTR("> aj_") : PSTR("> aj "), false);
+ } else {
+ oled_write_ln_P(blink ? PSTR("> _ ") : PSTR("> "), false);
+ }
+};
+
+void render_status_secondary(void) {
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+
+ render_kb_split();
+
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+
+ render_layer();
+
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+
+ #if defined(RGB_MATRIX_ENABLE) || defined(RGBLIGHT_ENABLE) || defined(AUDIO_ENABLE)
+ layer_state_is(_ADJUST) ? render_feature_status() : render_mod_status();
+ #else
+ render_mod_status();
+ #endif
+};
+
+void render_status_main(void) {
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+
+ render_corne_logo();
+
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+
+ render_qmk_logo();
+
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+ oled_write_ln("", false);
+
+ render_prompt();
+}
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_270;
+}
+
+void oled_task_user(void) {
+ if (timer_elapsed(oled_timer) > 10000) {
+ oled_off();
+ return;
+ }
+ #ifndef SPLIT_KEYBOARD
+ else {
+ oled_on();
+ }
+ #endif
+
+ if (is_master) {
+ render_status_main();
+ } else {
+ render_status_secondary();
+ }
+}
diff --git a/keyboards/crkbd/keymaps/gotham/rgb.c b/keyboards/crkbd/keymaps/gotham/rgb.c
new file mode 100644
index 00000000000..9f66428836d
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/rgb.c
@@ -0,0 +1,79 @@
+#pragma once
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+rgblight_config_t RGB_current_config;
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+extern rgb_config_t rgb_matrix_config;
+rgb_config_t RGB_current_config;
+#endif
+
+void save_rgb_config(void) {
+#ifdef RGBLIGHT_ENABLE
+ RGB_current_config.enable = rgblight_config.enable;
+ RGB_current_config.mode = rgblight_get_mode();
+ RGB_current_config.speed = rgblight_get_speed();
+ RGB_current_config.hue = rgblight_get_hue();
+ RGB_current_config.sat = rgblight_get_sat();
+ RGB_current_config.val = rgblight_get_val();
+#elif RGB_MATRIX_ENABLE
+ RGB_current_config.enable = rgb_matrix_config.enable;
+ RGB_current_config.mode = rgb_matrix_get_mode();
+ RGB_current_config.speed = rgb_matrix_config.speed;
+ RGB_current_config.hsv = rgb_matrix_config.hsv;
+#endif
+}
+
+void restore_rgb_config(void) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_set_speed_noeeprom(RGB_current_config.speed);
+ if (rgblight_config.mode != RGB_current_config.mode) {
+ rgblight_mode_noeeprom(RGB_current_config.mode);
+ }
+ if ((RGB_current_config.hue != rgblight_config.hue) || (RGB_current_config.sat != rgblight_config.sat) || (RGB_current_config.val != rgblight_config.val)) {
+ rgblight_sethsv_noeeprom(RGB_current_config.hue, RGB_current_config.sat, RGB_current_config.val);
+ }
+ if (rgblight_config.enable) {
+ rgblight_enable_noeeprom();
+ } else {
+ rgblight_disable_noeeprom();
+ }
+#elif RGB_MATRIX_ENABLE
+ rgb_matrix_config.speed = RGB_current_config.speed;
+ if (rgb_matrix_config.mode != RGB_current_config.mode) {
+ rgb_matrix_mode_noeeprom(RGB_current_config.mode);
+ }
+ if ((RGB_current_config.hsv.h != rgb_matrix_config.hsv.h) || (RGB_current_config.hsv.s != rgb_matrix_config.hsv.s) || (RGB_current_config.hsv.v != rgb_matrix_config.hsv.v)) {
+ rgb_matrix_sethsv_noeeprom(RGB_current_config.hsv.h, RGB_current_config.hsv.s, RGB_current_config.hsv.v);
+ }
+ if (rgb_matrix_config.enable) {
+ rgb_matrix_enable_noeeprom();
+ } else {
+ rgb_matrix_disable_noeeprom();
+ }
+#endif
+}
+
+void rgb_by_layer(int layer) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+#elif RGB_MATRIX_ENABLE
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR);
+#endif
+
+ switch (layer) {
+ case _ADJUST:
+ rgblight_sethsv_noeeprom(9, 255, 255);
+ break;
+ case _RAISE:
+ rgblight_sethsv_noeeprom(HSV_CYAN);
+ break;
+ case _LOWER:
+ rgblight_sethsv_noeeprom(HSV_MAGENTA);
+ break;
+ default:
+ rgblight_sethsv_noeeprom(HSV_RED);
+ }
+}
diff --git a/keyboards/crkbd/keymaps/gotham/rules.mk b/keyboards/crkbd/keymaps/gotham/rules.mk
new file mode 100644
index 00000000000..eaf8f89fd1f
--- /dev/null
+++ b/keyboards/crkbd/keymaps/gotham/rules.mk
@@ -0,0 +1,6 @@
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+AUDIO_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+OLED_DRIVER_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/crkbd/keymaps/madhatter/config.h b/keyboards/crkbd/keymaps/madhatter/config.h
new file mode 100644
index 00000000000..9a4d85dfce9
--- /dev/null
+++ b/keyboards/crkbd/keymaps/madhatter/config.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#define EE_HANDS
+
+#define SSD1306OLED
+
+#ifdef RGBLIGHT_ENABLE
+# undef RGBLED_NUM
+# define RGBLIGHT_ANIMATIONS
+# define RGBLED_NUM 27
+# define RGBLIGHT_LIMIT_VAL 120
+# define RGBLIGHT_HUE_STEP 10
+# define RGBLIGHT_SAT_STEP 17
+# define RGBLIGHT_VAL_STEP 17
+#endif
+
+#undef PRODUCT
+#define PRODUCT MadHatter Hacked Corne Keyboard
diff --git a/keyboards/crkbd/keymaps/madhatter/keymap.c b/keyboards/crkbd/keymaps/madhatter/keymap.c
new file mode 100644
index 00000000000..9f52d3b540d
--- /dev/null
+++ b/keyboards/crkbd/keymaps/madhatter/keymap.c
@@ -0,0 +1,215 @@
+#include QMK_KEYBOARD_H
+
+
+#ifdef OLED_DRIVER_ENABLE
+# define KEYLOGGER_LENGTH 5
+static uint32_t oled_timer = 0;
+static char keylog_str[KEYLOGGER_LENGTH + 1] = {"\n"};
+static uint16_t log_timer = 0;
+// clang-format off
+static const char PROGMEM code_to_name[0xFF] = {
+// 0 1 2 3 4 5 6 7 8 9 A B c D E F
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', // 0x
+ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', // 1x
+ '3', '4', '5', '6', '7', '8', '9', '0', 20, 19, 27, 26, 22, '-', '=', '[', // 2x
+ ']','\\', '#', ';','\'', '`', ',', '.', '/', 128, ' ', ' ', ' ', ' ', ' ', ' ', // 3x
+ ' ', ' ', ' ', ' ', ' ', ' ', 'P', 'S', ' ', ' ', ' ', ' ', 16, ' ', ' ', ' ', // 4x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 5x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 6x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 7x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 8x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // 9x
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ax
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Bx
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Cx
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Dx
+ 'C', 'S', 'A', 'C', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', // Ex
+ ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' // Fx
+};
+
+void add_keylog(uint16_t keycode);
+#endif
+
+extern uint8_t is_master;
+
+enum corny_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ RGBRST
+};
+
+#define LY_LWR MO(_LOWER)
+#define LY_RSE MO(_RAISE)
+
+#define KY_CESC LCTL_T(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ 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_LCTL, 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_LALT, LY_LWR, KC_LCMD, KC_SPC, LY_RSE, KC_ENT
+ //`--------------------------' `--------------------------'
+
+ ),
+
+ [_LOWER] = LAYOUT(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LALT, LY_LWR, KC_LCMD, KC_SPC, LY_RSE, KC_ENT
+ //`--------------------------' `--------------------------'
+ ),
+
+ [_RAISE] = LAYOUT(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, XXXXXXX, KC_PGUP, KC_HOME, KC_END,KC_PGDN, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LALT, LY_LWR, KC_LCMD, KC_SPC, LY_RSE, KC_ENT
+ //`--------------------------' `--------------------------'
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //,-----------------------------------------------------. ,-----------------------------------------------------.
+ RESET, KC_BTN1, KC_MS_U, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ XXXXXXX, RGBRST, EEP_RST, AG_TOGG, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LALT, LY_LWR, KC_LCMD, KC_SPC, LY_RSE, KC_ENT
+ //`--------------------------' `--------------------------'
+ )
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+int RGB_current_mode;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_get_mode();
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+void matrix_scan_user(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ // If you want to change the display of OLED, you need to change here
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_keylog());
+ //matrix_write_ln(matrix, read_keylogs());
+ //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+ //matrix_write_ln(matrix, read_host_led_state());
+ //matrix_write_ln(matrix, read_timelog());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+#endif//SSD1306OLED
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+#ifdef SSD1306OLED
+ set_keylog(keycode, record);
+#endif
+ // set_timelog();
+ }
+
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/crkbd/keymaps/madhatter/rules.mk b/keyboards/crkbd/keymaps/madhatter/rules.mk
new file mode 100644
index 00000000000..dfee5a0bf87
--- /dev/null
+++ b/keyboards/crkbd/keymaps/madhatter/rules.mk
@@ -0,0 +1,11 @@
+BOOTLOADER = atmel-dfu # Elite-C
+
+MOUSEKEY_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/layer_state_reader.c \
+ ./lib/logo_reader.c \
+ ./lib/keylogger.c
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h b/keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h
index e2fe1824da3..a3d430b1e82 100644
--- a/keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h
+++ b/keyboards/crkbd/keymaps/manna-harbour_miryoku/config.h
@@ -2,17 +2,15 @@
#pragma once
-#define EE_HANDS
-
-#ifdef RGB_MATRIX_ENABLE
-#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
-#define RGB_DISABLE_WHEN_USB_SUSPENDED true // turn off effects when suspended
-#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
-#define RGB_MATRIX_HUE_STEP 8
-#define RGB_MATRIX_SAT_STEP 8
-#define RGB_MATRIX_VAL_STEP 8
-#define RGB_MATRIX_SPD_STEP 10
-#endif
-
-#define SSD1306OLED // old oled driver
+#define LAYOUT_miryoku( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
+ N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
+) \
+LAYOUT( \
+KC_NO, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, KC_NO, \
+KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
+KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, \
+ K32, K33, K34, K35, K36, K37 \
+)
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
index f5be6844f8c..a852ddd05cd 100644
--- a/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
+++ b/keyboards/crkbd/keymaps/manna-harbour_miryoku/keymap.c
@@ -1,54 +1 @@
// generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
-
-#define LAYOUT_miryoku( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
- N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
-) \
-LAYOUT( \
-KC_NO, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, KC_NO, \
-KC_NO, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, KC_NO, \
-KC_NO, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, \
- K32, K33, K34, K35, K36, K37 \
-)
-
-#include "manna-harbour_miryoku.c"
-
-
-#ifdef SSD1306OLED
-
-#include "ssd1306.h"
-
-void matrix_init_user(void) {
- iota_gfx_init(!has_usb()); // turns on the display
-}
-
-// When add source files to SRC in rules.mk, you can use functions.
-const char *read_logo(void);
-
-void matrix_scan_user(void) {
- iota_gfx_task();
-}
-
-void matrix_render_user(struct CharacterMatrix *matrix) {
- if (host_keyboard_leds() & (1<display, source->display, sizeof(dest->display))) {
- memcpy(dest->display, source->display, sizeof(dest->display));
- dest->dirty = true;
- }
-}
-
-void iota_gfx_task_user(void) {
- struct CharacterMatrix matrix;
- matrix_clear(&matrix);
- matrix_render_user(&matrix);
- matrix_update(&display, &matrix);
-}
-
-#endif //SSD1306OLED
diff --git a/keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk b/keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk
deleted file mode 100644
index c4fb15f3426..00000000000
--- a/keyboards/crkbd/keymaps/manna-harbour_miryoku/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-# generated from users/manna-harbour_miryoku/miryoku.org -*- buffer-read-only: t -*-
-
-RGB_MATRIX_ENABLE = WS2812
-
-# old oled driver
-SRC += ./lib/glcdfont.c \
- ./lib/logo_reader.c
diff --git a/keyboards/crkbd/rev1/split_scomm.c b/keyboards/crkbd/rev1/split_scomm.c
index a1fe6ba5b82..12b00f6840f 100644
--- a/keyboards/crkbd/rev1/split_scomm.c
+++ b/keyboards/crkbd/rev1/split_scomm.c
@@ -8,7 +8,7 @@
#include
#include "serial.h"
#ifdef CONSOLE_ENABLE
- #include
+ #include "debug.h"
#endif
uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
@@ -63,9 +63,11 @@ int serial_update_buffers(int master_update)
if( smatstatus == TRANSACTION_END ) {
s_change_old = s_change_new;
#ifdef CONSOLE_ENABLE
- uprintf("slave matrix = %b %b %b %b\n",
+ if (debug_matrix) {
+ uprintf("slave matrix = %b %b %b %b\n",
serial_slave_buffer[0], serial_slave_buffer[1],
serial_slave_buffer[2], serial_slave_buffer[3]);
+ }
#endif
}
} else {
diff --git a/keyboards/cu75/cu75.c b/keyboards/cu75/cu75.c
index 6dc28984545..60c92b708a6 100644
--- a/keyboards/cu75/cu75.c
+++ b/keyboards/cu75/cu75.c
@@ -26,7 +26,7 @@ void matrix_init_kb(void)
#ifdef AUDIO_ENABLE
audio_init();
- PLAY_NOTE_ARRAY(test_sound, false, STACCATO);
+ PLAY_SONG(test_sound);
// Fix port B5
cbi(DDRB, 5);
sbi(PORTB, 5);
diff --git a/keyboards/db/db63/rules.mk b/keyboards/db/db63/rules.mk
index 84eace5ed6d..3d51be11332 100644
--- a/keyboards/db/db63/rules.mk
+++ b/keyboards/db/db63/rules.mk
@@ -20,5 +20,3 @@ COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/ergoinu/config.h b/keyboards/dm9records/ergoinu/config.h
similarity index 100%
rename from keyboards/ergoinu/config.h
rename to keyboards/dm9records/ergoinu/config.h
diff --git a/keyboards/ergoinu/ergoinu.c b/keyboards/dm9records/ergoinu/ergoinu.c
similarity index 100%
rename from keyboards/ergoinu/ergoinu.c
rename to keyboards/dm9records/ergoinu/ergoinu.c
diff --git a/keyboards/ergoinu/ergoinu.h b/keyboards/dm9records/ergoinu/ergoinu.h
similarity index 100%
rename from keyboards/ergoinu/ergoinu.h
rename to keyboards/dm9records/ergoinu/ergoinu.h
diff --git a/keyboards/dm9records/ergoinu/info.json b/keyboards/dm9records/ergoinu/info.json
new file mode 100644
index 00000000000..3627049a5ed
--- /dev/null
+++ b/keyboards/dm9records/ergoinu/info.json
@@ -0,0 +1,87 @@
+{
+ "keyboard_name": "Ergoinu",
+ "url": "",
+ "maintainer": "hsgw(Takuya Urakawa)",
+ "width": 18,
+ "height": 5.4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 64,
+ "layout": [
+ { "x": 0, "y": 0.6, "label": "ESC" },
+ { "x": 1, "y": 0.4, "label": "1" },
+ { "x": 2, "y": 0.4, "label": "2" },
+ { "x": 3, "y": 0.25, "label": "3" },
+ { "x": 4, "y": 0, "label": "4" },
+ { "x": 5, "y": 0.25, "label": "5" },
+ { "x": 6, "y": 0.4, "label": "6" },
+
+ { "x": 11, "y": 0.4, "label": "7" },
+ { "x": 12, "y": 0.25, "label": "8" },
+ { "x": 13, "y": 0, "label": "9" },
+ { "x": 14, "y": 0.25, "label": "0" },
+ { "x": 15, "y": 0.4, "label": "MINUS" },
+ { "x": 16, "y": 0.4, "label": "EQUAL" },
+ { "x": 17, "y": 0.6, "label": "BACKSLASH" },
+
+ { "x": 0, "y": 1.6, "label": "DELETE" },
+ { "x": 1, "y": 1.4, "label": "TAB" },
+ { "x": 2, "y": 1.4, "label": "Q" },
+ { "x": 3, "y": 1.25, "label": "W" },
+ { "x": 4, "y": 1, "label": "E" },
+ { "x": 5, "y": 1.25, "label": "R" },
+ { "x": 6, "y": 1.4, "label": "T" },
+
+ { "x": 11, "y": 1.4, "label": "Y" },
+ { "x": 12, "y": 1.25, "label": "U" },
+ { "x": 13, "y": 1, "label": "I" },
+ { "x": 14, "y": 1.25, "label": "O" },
+ { "x": 15, "y": 1.4, "label": "P" },
+ { "x": 16, "y": 1.4, "label": "LBRACKET" },
+ { "x": 17, "y": 1.6, "label": "RBRACKET" },
+
+ { "x": 0.25, "y": 2.6, "w": 1.75, "label": "LCTRL" },
+ { "x": 2, "y": 2.4, "label": "A" },
+ { "x": 3, "y": 2.25, "label": "S" },
+ { "x": 4, "y": 2, "label": "D" },
+ { "x": 5, "y": 2.25, "label": "F" },
+ { "x": 6, "y": 2.4, "label": "G" },
+
+ { "x": 11, "y": 2.4, "label": "H" },
+ { "x": 12, "y": 2.25, "label": "J" },
+ { "x": 13, "y": 2, "label": "K" },
+ { "x": 14, "y": 2.25, "label": "L" },
+ { "x": 15, "y": 2.4, "label": "SEMICOLON" },
+ { "x": 16, "y": 2.4, "label": "QUOTE" },
+ { "x": 17, "y": 2.6, "label": "GRAVE" },
+
+ { "x": 0.25, "y": 3.6, "w": 1.75, "label": "LSHIFT" },
+ { "x": 2, "y": 3.4, "label": "Z" },
+ { "x": 3, "y": 3.25, "label": "X" },
+ { "x": 4, "y": 3, "label": "C" },
+ { "x": 5, "y": 3.25, "label": "V" },
+ { "x": 6, "y": 3.4, "label": "B" },
+
+ { "x": 11, "y": 3.4, "label": "N" },
+ { "x": 12, "y": 3.25, "label": "M" },
+ { "x": 13, "y": 3, "label": "COMMA" },
+ { "x": 14, "y": 3.25, "label": "DOT" },
+ { "x": 15, "y": 3.4, "label": "SLASH" },
+ { "x": 16, "y": 3.4, "label": "RSHIFT" },
+ { "x": 17, "y": 3.6, "label": "RSHIFT" },
+
+ { "x": 3, "y": 4.25, "label": "MO(META)" },
+ { "x": 4, "y": 4, "label": "LALT" },
+ { "x": 5, "y": 4.25, "label": "LGUI" },
+ { "x": 6, "y": 4.4, "label": "ENT" },
+ { "x": 7, "y": 4.4, "w": 1.5, "label": "SPACE" },
+
+ { "x": 9.5, "y": 4.4, "w": 1.5, "label": "ENTER" },
+ { "x": 11, "y": 4.4, "label": "BACKSPACE" },
+ { "x": 12, "y": 4.25, "label": "RGUI" },
+ { "x": 13, "y": 4, "label": "RALT" },
+ { "x": 14, "y": 4.25, "label": "MO(META)" }
+ ]
+ }
+ }
+}
diff --git a/keyboards/ergoinu/keymaps/default/config.h b/keyboards/dm9records/ergoinu/keymaps/default/config.h
similarity index 100%
rename from keyboards/ergoinu/keymaps/default/config.h
rename to keyboards/dm9records/ergoinu/keymaps/default/config.h
diff --git a/keyboards/ergoinu/keymaps/default/keymap.c b/keyboards/dm9records/ergoinu/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/ergoinu/keymaps/default/keymap.c
rename to keyboards/dm9records/ergoinu/keymaps/default/keymap.c
diff --git a/keyboards/ergoinu/keymaps/default/rules.mk b/keyboards/dm9records/ergoinu/keymaps/default/rules.mk
similarity index 100%
rename from keyboards/ergoinu/keymaps/default/rules.mk
rename to keyboards/dm9records/ergoinu/keymaps/default/rules.mk
diff --git a/keyboards/ergoinu/keymaps/default_jis/config.h b/keyboards/dm9records/ergoinu/keymaps/default_jis/config.h
similarity index 100%
rename from keyboards/ergoinu/keymaps/default_jis/config.h
rename to keyboards/dm9records/ergoinu/keymaps/default_jis/config.h
diff --git a/keyboards/ergoinu/keymaps/default_jis/keymap.c b/keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c
similarity index 100%
rename from keyboards/ergoinu/keymaps/default_jis/keymap.c
rename to keyboards/dm9records/ergoinu/keymaps/default_jis/keymap.c
diff --git a/keyboards/ergoinu/keymaps/default_jis/rules.mk b/keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk
similarity index 100%
rename from keyboards/ergoinu/keymaps/default_jis/rules.mk
rename to keyboards/dm9records/ergoinu/keymaps/default_jis/rules.mk
diff --git a/keyboards/ergoinu/matrix.c b/keyboards/dm9records/ergoinu/matrix.c
similarity index 100%
rename from keyboards/ergoinu/matrix.c
rename to keyboards/dm9records/ergoinu/matrix.c
diff --git a/keyboards/dm9records/ergoinu/readme.md b/keyboards/dm9records/ergoinu/readme.md
new file mode 100644
index 00000000000..de0a1c6c970
--- /dev/null
+++ b/keyboards/dm9records/ergoinu/readme.md
@@ -0,0 +1,21 @@
+ErgoInu
+===
+
+
+
+An (Not Portable But Small) Ergonomic Split Keyboard.
+
+Keyboard Maintainer: [hsgw](https://github.com/hsgw/) [twitter](https://twitter.com/hsgw)
+Hardware Supported: Pro Micro
+Hardware Availability & Repository: [https://github.com/hsgw/ergoinu](https://github.com/hsgw/ergoinu)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dm9records/ergoinu:default
+
+ (or)
+
+ make dm9records/ergoinu:default_jis
+
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/dm9records/ergoinu/rules.mk b/keyboards/dm9records/ergoinu/rules.mk
new file mode 100644
index 00000000000..493046ffa4d
--- /dev/null
+++ b/keyboards/dm9records/ergoinu/rules.mk
@@ -0,0 +1,49 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+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
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SUBPROJECT_rev1 = no
+USE_I2C = no # i2c is not supported
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+CUSTOM_MATRIX = yes
+SRC += matrix.c serial.c split_util.c
+
+# ergoinu configs
+DISABLE_PROMICRO_LEDs = yes
+
+ifneq ($(strip $(ERGOINU)),)
+ ifeq ($(findstring promicroled, $(ERGOINU)), promicroled)
+ DISABLE_PROMICRO_LEDs = no
+ endif
+endif
+
+ifeq ($(strip $(DISABLE_PROMICRO_LEDs)), yes)
+ OPT_DEFS += -DDISABLE_PROMICRO_LEDs
+endif
diff --git a/keyboards/ergoinu/serial.c b/keyboards/dm9records/ergoinu/serial.c
similarity index 100%
rename from keyboards/ergoinu/serial.c
rename to keyboards/dm9records/ergoinu/serial.c
diff --git a/keyboards/ergoinu/serial.h b/keyboards/dm9records/ergoinu/serial.h
similarity index 100%
rename from keyboards/ergoinu/serial.h
rename to keyboards/dm9records/ergoinu/serial.h
diff --git a/keyboards/ergoinu/serial_config.h b/keyboards/dm9records/ergoinu/serial_config.h
similarity index 100%
rename from keyboards/ergoinu/serial_config.h
rename to keyboards/dm9records/ergoinu/serial_config.h
diff --git a/keyboards/ergoinu/split_util.c b/keyboards/dm9records/ergoinu/split_util.c
similarity index 100%
rename from keyboards/ergoinu/split_util.c
rename to keyboards/dm9records/ergoinu/split_util.c
diff --git a/keyboards/ergoinu/split_util.h b/keyboards/dm9records/ergoinu/split_util.h
similarity index 100%
rename from keyboards/ergoinu/split_util.h
rename to keyboards/dm9records/ergoinu/split_util.h
diff --git a/keyboards/plaid/config.h b/keyboards/dm9records/plaid/config.h
similarity index 100%
rename from keyboards/plaid/config.h
rename to keyboards/dm9records/plaid/config.h
diff --git a/keyboards/dm9records/plaid/info.json b/keyboards/dm9records/plaid/info.json
new file mode 100644
index 00000000000..318154d7de1
--- /dev/null
+++ b/keyboards/dm9records/plaid/info.json
@@ -0,0 +1,113 @@
+{
+ "keyboard_name": "Plaid // Through Hole",
+ "keyboard_folder": "dm9records/plaid",
+ "url": "https://github.com/hsgw/plaid",
+ "maintainer": "hsgw(Takuya Urakawa)",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_plaid_mit": {
+ "key_count": 47,
+ "layout": [
+ { "w": 1, "x": 0, "y": 0 },
+ { "w": 1, "x": 1, "y": 0 },
+ { "w": 1, "x": 2, "y": 0 },
+ { "w": 1, "x": 3, "y": 0 },
+ { "w": 1, "x": 4, "y": 0 },
+ { "w": 1, "x": 5, "y": 0 },
+ { "w": 1, "x": 6, "y": 0 },
+ { "w": 1, "x": 7, "y": 0 },
+ { "w": 1, "x": 8, "y": 0 },
+ { "w": 1, "x": 9, "y": 0 },
+ { "w": 1, "x": 10, "y": 0 },
+ { "w": 1, "x": 11, "y": 0 },
+ { "w": 1, "x": 0, "y": 1 },
+ { "w": 1, "x": 1, "y": 1 },
+ { "w": 1, "x": 2, "y": 1 },
+ { "w": 1, "x": 3, "y": 1 },
+ { "w": 1, "x": 4, "y": 1 },
+ { "w": 1, "x": 5, "y": 1 },
+ { "w": 1, "x": 6, "y": 1 },
+ { "w": 1, "x": 7, "y": 1 },
+ { "w": 1, "x": 8, "y": 1 },
+ { "w": 1, "x": 9, "y": 1 },
+ { "w": 1, "x": 10, "y": 1 },
+ { "w": 1, "x": 11, "y": 1 },
+ { "w": 1, "x": 0, "y": 2 },
+ { "w": 1, "x": 1, "y": 2 },
+ { "w": 1, "x": 2, "y": 2 },
+ { "w": 1, "x": 3, "y": 2 },
+ { "w": 1, "x": 4, "y": 2 },
+ { "w": 1, "x": 5, "y": 2 },
+ { "w": 1, "x": 6, "y": 2 },
+ { "w": 1, "x": 7, "y": 2 },
+ { "w": 1, "x": 8, "y": 2 },
+ { "w": 1, "x": 9, "y": 2 },
+ { "w": 1, "x": 10, "y": 2 },
+ { "w": 1, "x": 11, "y": 2 },
+ { "w": 1, "x": 0, "y": 3 },
+ { "w": 1, "x": 1, "y": 3 },
+ { "w": 1, "x": 2, "y": 3 },
+ { "w": 1, "x": 3, "y": 3 },
+ { "w": 1, "x": 4, "y": 3 },
+ { "w": 2, "x": 5, "y": 3 },
+ { "w": 1, "x": 7, "y": 3 },
+ { "w": 1, "x": 8, "y": 3 },
+ { "w": 1, "x": 9, "y": 3 },
+ { "w": 1, "x": 10, "y": 3 },
+ { "w": 1, "x": 11, "y": 3 } ]
+ },
+ "LAYOUT_plaid_grid": {
+ "key_count": 48,
+ "layout": [
+ { "w": 1, "x": 0, "y": 0 },
+ { "w": 1, "x": 1, "y": 0 },
+ { "w": 1, "x": 2, "y": 0 },
+ { "w": 1, "x": 3, "y": 0 },
+ { "w": 1, "x": 4, "y": 0 },
+ { "w": 1, "x": 5, "y": 0 },
+ { "w": 1, "x": 6, "y": 0 },
+ { "w": 1, "x": 7, "y": 0 },
+ { "w": 1, "x": 8, "y": 0 },
+ { "w": 1, "x": 9, "y": 0 },
+ { "w": 1, "x": 10, "y": 0 },
+ { "w": 1, "x": 11, "y": 0 },
+ { "w": 1, "x": 0, "y": 1 },
+ { "w": 1, "x": 1, "y": 1 },
+ { "w": 1, "x": 2, "y": 1 },
+ { "w": 1, "x": 3, "y": 1 },
+ { "w": 1, "x": 4, "y": 1 },
+ { "w": 1, "x": 5, "y": 1 },
+ { "w": 1, "x": 6, "y": 1 },
+ { "w": 1, "x": 7, "y": 1 },
+ { "w": 1, "x": 8, "y": 1 },
+ { "w": 1, "x": 9, "y": 1 },
+ { "w": 1, "x": 10, "y": 1 },
+ { "w": 1, "x": 11, "y": 1 },
+ { "w": 1, "x": 0, "y": 2 },
+ { "w": 1, "x": 1, "y": 2 },
+ { "w": 1, "x": 2, "y": 2 },
+ { "w": 1, "x": 3, "y": 2 },
+ { "w": 1, "x": 4, "y": 2 },
+ { "w": 1, "x": 5, "y": 2 },
+ { "w": 1, "x": 6, "y": 2 },
+ { "w": 1, "x": 7, "y": 2 },
+ { "w": 1, "x": 8, "y": 2 },
+ { "w": 1, "x": 9, "y": 2 },
+ { "w": 1, "x": 10, "y": 2 },
+ { "w": 1, "x": 11, "y": 2 },
+ { "w": 1, "x": 0, "y": 3 },
+ { "w": 1, "x": 1, "y": 3 },
+ { "w": 1, "x": 2, "y": 3 },
+ { "w": 1, "x": 3, "y": 3 },
+ { "w": 1, "x": 4, "y": 3 },
+ { "w": 1, "x": 5, "y": 3 },
+ { "w": 1, "x": 6, "y": 3 },
+ { "w": 1, "x": 7, "y": 3 },
+ { "w": 1, "x": 8, "y": 3 },
+ { "w": 1, "x": 9, "y": 3 },
+ { "w": 1, "x": 10, "y": 3 },
+ { "w": 1, "x": 11, "y": 3 } ]
+ }
+ }
+}
diff --git a/keyboards/plaid/keymaps/brickbots/config.h b/keyboards/dm9records/plaid/keymaps/brickbots/config.h
similarity index 100%
rename from keyboards/plaid/keymaps/brickbots/config.h
rename to keyboards/dm9records/plaid/keymaps/brickbots/config.h
diff --git a/keyboards/plaid/keymaps/brickbots/keymap.c b/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
similarity index 100%
rename from keyboards/plaid/keymaps/brickbots/keymap.c
rename to keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
diff --git a/keyboards/plaid/keymaps/brickbots/readme.md b/keyboards/dm9records/plaid/keymaps/brickbots/readme.md
similarity index 100%
rename from keyboards/plaid/keymaps/brickbots/readme.md
rename to keyboards/dm9records/plaid/keymaps/brickbots/readme.md
diff --git a/keyboards/plaid/keymaps/default/config.h b/keyboards/dm9records/plaid/keymaps/default/config.h
similarity index 100%
rename from keyboards/plaid/keymaps/default/config.h
rename to keyboards/dm9records/plaid/keymaps/default/config.h
diff --git a/keyboards/plaid/keymaps/default/keymap.c b/keyboards/dm9records/plaid/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/plaid/keymaps/default/keymap.c
rename to keyboards/dm9records/plaid/keymaps/default/keymap.c
diff --git a/keyboards/plaid/keymaps/default/readme.md b/keyboards/dm9records/plaid/keymaps/default/readme.md
similarity index 100%
rename from keyboards/plaid/keymaps/default/readme.md
rename to keyboards/dm9records/plaid/keymaps/default/readme.md
diff --git a/keyboards/plaid/keymaps/thehalfdeafchef/config.h b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h
similarity index 100%
rename from keyboards/plaid/keymaps/thehalfdeafchef/config.h
rename to keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h
diff --git a/keyboards/plaid/keymaps/thehalfdeafchef/keymap.c b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/keymap.c
similarity index 100%
rename from keyboards/plaid/keymaps/thehalfdeafchef/keymap.c
rename to keyboards/dm9records/plaid/keymaps/thehalfdeafchef/keymap.c
diff --git a/keyboards/plaid/keymaps/thehalfdeafchef/readme.md b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/readme.md
similarity index 100%
rename from keyboards/plaid/keymaps/thehalfdeafchef/readme.md
rename to keyboards/dm9records/plaid/keymaps/thehalfdeafchef/readme.md
diff --git a/keyboards/plaid/keymaps/via/config.h b/keyboards/dm9records/plaid/keymaps/via/config.h
similarity index 100%
rename from keyboards/plaid/keymaps/via/config.h
rename to keyboards/dm9records/plaid/keymaps/via/config.h
diff --git a/keyboards/plaid/keymaps/via/keymap.c b/keyboards/dm9records/plaid/keymaps/via/keymap.c
similarity index 100%
rename from keyboards/plaid/keymaps/via/keymap.c
rename to keyboards/dm9records/plaid/keymaps/via/keymap.c
diff --git a/keyboards/plaid/keymaps/via/readme.md b/keyboards/dm9records/plaid/keymaps/via/readme.md
similarity index 100%
rename from keyboards/plaid/keymaps/via/readme.md
rename to keyboards/dm9records/plaid/keymaps/via/readme.md
diff --git a/keyboards/plaid/keymaps/via/rules.mk b/keyboards/dm9records/plaid/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/plaid/keymaps/via/rules.mk
rename to keyboards/dm9records/plaid/keymaps/via/rules.mk
diff --git a/keyboards/plaid/plaid.c b/keyboards/dm9records/plaid/plaid.c
similarity index 100%
rename from keyboards/plaid/plaid.c
rename to keyboards/dm9records/plaid/plaid.c
diff --git a/keyboards/plaid/plaid.h b/keyboards/dm9records/plaid/plaid.h
similarity index 100%
rename from keyboards/plaid/plaid.h
rename to keyboards/dm9records/plaid/plaid.h
diff --git a/keyboards/dm9records/plaid/readme.md b/keyboards/dm9records/plaid/readme.md
new file mode 100644
index 00000000000..79621deec8b
--- /dev/null
+++ b/keyboards/dm9records/plaid/readme.md
@@ -0,0 +1,23 @@
+# plaid // Through Hole
+
+
+
+12x4 ortholinear keyboard with only through hole components.
+
+Keyboard Maintainer: [hsgw](https://github.com/hsgw)
+Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/hsgw/plaid)
+Hardware Availability: Group buy in r/mk
+
+Make example for this keyboard (after setting up your build environment):
+ make dm9records/plaid:default
+
+Flashing example for this keyboard:
+
+ make dm9records/plaid:default:flash
+
+## Bootloader
+use usbasploader in my repository.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+
+
+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/dm9records/plaid/rules.mk b/keyboards/dm9records/plaid/rules.mk
new file mode 100644
index 00000000000..7c4112c9aa2
--- /dev/null
+++ b/keyboards/dm9records/plaid/rules.mk
@@ -0,0 +1,36 @@
+# MCU name
+MCU = atmega328p
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = USBasp
+
+# 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 on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+LAYOUTS = ortho_4x12 planck_mit
+LAYOUTS_HAS_RGB = no
diff --git a/keyboards/tartan/config.h b/keyboards/dm9records/tartan/config.h
similarity index 100%
rename from keyboards/tartan/config.h
rename to keyboards/dm9records/tartan/config.h
diff --git a/keyboards/dm9records/tartan/info.json b/keyboards/dm9records/tartan/info.json
new file mode 100644
index 00000000000..ff0ddfdf9dc
--- /dev/null
+++ b/keyboards/dm9records/tartan/info.json
@@ -0,0 +1,34 @@
+{
+ "keyboard_name": "Tartan # Through Hole",
+ "keyboard_folder": "dm9records/tartan",
+ "url": "https://github.com/hsgw/tartan",
+ "maintainer": "hsgw(Takuya Urakawa)",
+ "width": 13,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "key_count": 61,
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_ansi_split_bs": {
+ "key_count": 62,
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":1}, {"label":"", "x":14, "y":0, "w":1}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "key_count": 63,
+ "layout": [{"label":"ESC", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"BS", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_iso": {
+ "key_count": 62,
+ "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_iso_split_bs": {
+ "key_count": 63,
+ "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "key_count": 64,
+ "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/tartan/keymaps/default/keymap.c b/keyboards/dm9records/tartan/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/tartan/keymaps/default/keymap.c
rename to keyboards/dm9records/tartan/keymaps/default/keymap.c
diff --git a/keyboards/tartan/keymaps/default/readme.md b/keyboards/dm9records/tartan/keymaps/default/readme.md
similarity index 100%
rename from keyboards/tartan/keymaps/default/readme.md
rename to keyboards/dm9records/tartan/keymaps/default/readme.md
diff --git a/keyboards/dm9records/tartan/readme.md b/keyboards/dm9records/tartan/readme.md
new file mode 100644
index 00000000000..b8439ed2299
--- /dev/null
+++ b/keyboards/dm9records/tartan/readme.md
@@ -0,0 +1,25 @@
+# Tartan # Through Hole
+
+
+
+A 60% keyboard with only through hole components.
+
+* Keyboard Maintainer: [hsgw](https://github.com/hsgw)
+* Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/hsgw/tartan)
+* Hardware Availability: https://5z6p.com/products/tartan/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dm9records/tartan:default
+
+Flash firmware:
+
+ // In bootloader mode
+ make dm9records/tartan:default:flash
+
+## Bootloader
+use usbasploader in my repository.
+https://github.com/hsgw/USBaspLoader/tree/plaid
+
+
+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/dm9records/tartan/rules.mk b/keyboards/dm9records/tartan/rules.mk
new file mode 100644
index 00000000000..81130019189
--- /dev/null
+++ b/keyboards/dm9records/tartan/rules.mk
@@ -0,0 +1,36 @@
+# MCU name
+MCU = atmega328p
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = USBasp
+
+# 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 on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_iso 60_iso_split_bs_rshift
+LAYOUTS_HAS_RGB = no
diff --git a/keyboards/tartan/tartan.c b/keyboards/dm9records/tartan/tartan.c
similarity index 100%
rename from keyboards/tartan/tartan.c
rename to keyboards/dm9records/tartan/tartan.c
diff --git a/keyboards/tartan/tartan.h b/keyboards/dm9records/tartan/tartan.h
similarity index 100%
rename from keyboards/tartan/tartan.h
rename to keyboards/dm9records/tartan/tartan.h
diff --git a/keyboards/donutcables/budget96/rules.mk b/keyboards/donutcables/budget96/rules.mk
index 84eace5ed6d..3d51be11332 100644
--- a/keyboards/donutcables/budget96/rules.mk
+++ b/keyboards/donutcables/budget96/rules.mk
@@ -20,5 +20,3 @@ COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/doro67/multi/keymaps/konstantin/config.h b/keyboards/doro67/multi/keymaps/konstantin/config.h
index 3c2583e2d46..1d12c7db376 100644
--- a/keyboards/doro67/multi/keymaps/konstantin/config.h
+++ b/keyboards/doro67/multi/keymaps/konstantin/config.h
@@ -1,4 +1,6 @@
#pragma once
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
+
#define LAYER_FN
#define LAYER_NUMPAD
diff --git a/keyboards/doro67/multi/keymaps/konstantin/rules.mk b/keyboards/doro67/multi/keymaps/konstantin/rules.mk
index c3a73fd8450..50c3f77ddb4 100644
--- a/keyboards/doro67/multi/keymaps/konstantin/rules.mk
+++ b/keyboards/doro67/multi/keymaps/konstantin/rules.mk
@@ -1,11 +1,18 @@
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = no
+# Generic features
+BOOTMAGIC_ENABLE = lite
COMMAND_ENABLE = yes
CONSOLE_ENABLE = yes
EXTRAKEY_ENABLE = yes
-GRAVE_ESC_ENABLE = no
MOUSEKEY_ENABLE = yes
NKRO_ENABLE = yes
-SPACE_CADET_ENABLE = no
TAP_DANCE_ENABLE = yes
UNICODEMAP_ENABLE = yes
+
+# Keyboard-specific features
+BACKLIGHT_ENABLE = no
+VIA_ENABLE = yes
+
+# Firmware size reduction
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+SPACE_CADET_ENABLE = no
diff --git a/keyboards/dp60/config.h b/keyboards/dp60/config.h
index 3875d303ea4..2bedf51970b 100644
--- a/keyboards/dp60/config.h
+++ b/keyboards/dp60/config.h
@@ -11,7 +11,7 @@
#define PRODUCT_ID 0x00BE
#define DEVICE_VER 0x0001
#define MANUFACTURER astro
-#define PRODUCT Dumplings
+#define PRODUCT DP60
#define DESCRIPTION 60% rgb keyboard with ble extension
/* key matrix size */
diff --git a/keyboards/dp60/dp60.h b/keyboards/dp60/dp60.h
index 32bbb6dc0c6..a197ac2fa3a 100644
--- a/keyboards/dp60/dp60.h
+++ b/keyboards/dp60/dp60.h
@@ -9,6 +9,49 @@
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
+ // Matrix layout to accomodate all layouts. Good for VIA mapping correctly, and it doesnt exist yet
+ //
+ //┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐ ┌──────┐
+ //│0A││0B││0C││0D││0E││0F││0G││4H││0H││0I││0J││0K││0L││0M││0N│ │ 0N │ split backspace support
+ //└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘ └──────┘
+ // 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0e
+ //┌────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌────┐ ┌────┐
+ //│1A ││1B││1C││1D││1E││1F││1G││1H││1I││1J││1K││1L││1M││1N │ │ │ iso enter - see below
+ //└────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└────┘ └────┘
+ // 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1e
+ //┌─────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌───────┐ ┌──┐┌──┐
+ //│ 2A ││2B││2C││2D││2E││2F││2G││2H││2I││2J││2K││2L││ 2N │ │2M││2N│ iso enter
+ //└─────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└───────┘ └──┘└──┘
+ // 20 22 23 24 25 26 27 28 29 2a 2b 2c 2e 2d 2e
+ //┌───────┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌──┐┌─────────┐
+ //│3A │ 3B││3C││3D││3E││3F││3G││3H││3I││3J││3K││3L││ 3M │3N│ split shifts (left and right)
+ //└───────┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└──┘└─────────┘
+ // 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d
+ //┌───┐┌───┐┌───┐┌───────────────────────┐┌───┐┌───┐┌───┐┌───┐
+ //│4A ││4B ││4C ││ 4G ││4K ││4L ││4M ││4N │ wkl/hhkb use 4L (k49), 4M (k4a) , 4N (k4b)
+ //└───┘└───┘└───┘└───────────────────────┘└───┘└───┘└───┘└───┘
+ // 40 42 43 47 48 49 4a 4b
+ //end of mapping
+//
+//added k0d
+//added k2d KC_NUMS for iso
+//added k31 split l-shift, k3d split r-shift
+
+#define LAYOUT_all( \
+ 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, k1e, \
+k20, 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, \
+k40, k42, k43, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k08, k09, k0a, k0b, k0c, k0d, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e}, \
+ {k20, 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}, \
+ {k40, k42, k43, KC_NO, KC_NO, KC_NO, k47, k07, KC_NO, KC_NO, k48, k49, k4a, k4b} \
+}
+
#define LAYOUT_60_ansi( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
@@ -28,7 +71,7 @@
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
k20, 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,\
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
k40, k42, k43, k47, k48, k49, k4a, k4b \
) \
{ \
diff --git a/keyboards/dp60/keymaps/via/keymap.c b/keyboards/dp60/keymaps/via/keymap.c
index 8227055766e..1742f17b50c 100644
--- a/keyboards/dp60/keymaps/via/keymap.c
+++ b/keyboards/dp60/keymaps/via/keymap.c
@@ -1,31 +1,31 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_60_ansi_split_bs_rshift(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_DEL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(1),
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT,KC_RGUI, TG(1), KC_RCTL),
-
- [1] = LAYOUT_60_ansi_split_bs_rshift(
- _______, 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,
- RESET, RGB_TOG,RGB_MOD,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,
- _______, _______,_______,_______,_______,_______,KC_LEFT,KC_DOWN, KC_UP,KC_RIGHT,KC_HOME,KC_END,_______,
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
- _______,_______,_______, _______, _______,_______,TG(0),_______),
+ [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_DEL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_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_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI,KC_RALT, MO(1), KC_RCTL),
- [2] = LAYOUT_60_ansi_split_bs_rshift(
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,_______,KC_DEL,
+ RESET, _______,KC_UP,_______,_______,_______,_______,_______,KC_PAUS,KC_SLCK,KC_PSCR,KC_PGUP,_______,KC_INS,
+ _______, KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______, _______,_______,KC_HOME,KC_END,_______, _______,
+ _______,_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PGDN,_______,_______,
+ _______,_______,_______, _______, _______,MO(2),TG(0),_______),
+
+ [2] = LAYOUT_all(
+ _______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______,_______,_______,
+ _______, _______,KC_VOLU,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ KC_MUTE, KC_MPRV,KC_VOLD,KC_MNXT,_______,_______,_______,_______, _______,_______,_______,_______,_______, _______,
+ _______, _______, RGB_TOG,RGB_MOD,RGB_RMOD,RGB_VAI,RGB_VAD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,_______,_______,_______,
+ _______,_______,_______, KC_MPLY, _______,_______,_______,_______),
+
+ [3] = LAYOUT_all(
_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______,_______,_______,
_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
- _______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
- _______,_______,_______, _______, _______,_______,_______,_______),
-
- [3] = LAYOUT_60_ansi_split_bs_rshift(
- _______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______, _______,_______,_______,_______,
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
- _______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
- _______,_______,_______, _______, _______,_______,_______,_______)
-};
\ No newline at end of file
+ _______, _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ _______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,
+ _______,_______,_______, _______, _______,_______,_______,_______)
+};
diff --git a/keyboards/dp60/keymaps/via/rules.mk b/keyboards/dp60/keymaps/via/rules.mk
index 36b7ba9cbc9..e4b4d91da9a 100644
--- a/keyboards/dp60/keymaps/via/rules.mk
+++ b/keyboards/dp60/keymaps/via/rules.mk
@@ -1,2 +1,3 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
+RGBLIGHT_ENABLE = yes #enables underglow, but will not disable per key leds
diff --git a/keyboards/dp60/rules.mk b/keyboards/dp60/rules.mk
index 015e4fddb92..bcd6fb4c94a 100644
--- a/keyboards/dp60/rules.mk
+++ b/keyboards/dp60/rules.mk
@@ -22,14 +22,14 @@ 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
+NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-#RGBLIGHT_ENABLE = yes # Use RGB underglow light
+RGBLIGHT_ENABLE = no # Use RGB underglow light
RGB_MATRIX_ENABLE = yes # Use RGB matrix
LAYOUTS = 60_ansi 60_hhkb 60_iso 60_ansi_split_bs_rshift
diff --git a/keyboards/duck/readme.md b/keyboards/duck/readme.md
index 32076da7da4..f5f6593b5b2 100644
--- a/keyboards/duck/readme.md
+++ b/keyboards/duck/readme.md
@@ -14,4 +14,5 @@ Lightsaver V3
Octagon V1
Octagon V2
Orion V3
-Viper V2
\ No newline at end of file
+TC-V3
+Viper V2
diff --git a/keyboards/duck/tcv3/config.h b/keyboards/duck/tcv3/config.h
new file mode 100644
index 00000000000..524b12b835f
--- /dev/null
+++ b/keyboards/duck/tcv3/config.h
@@ -0,0 +1,45 @@
+/*
+Copyright 2019 MechMerlin
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x444B // Duck ("DK")
+#define PRODUCT_ID 0x5443 // TC-V3 ("TC")
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Duck
+#define PRODUCT TC-V3
+#define DESCRIPTION Duck TC-V3
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 20
+
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+#define RGBLIGHT_ANIMATIONS
+#define RGB_DI_PIN D6
+#define RGBLED_NUM 17
+
+/* Set to top left most key */
+#define BOOTMAGIC_LITE_ROW 5
+#define BOOTMAGIC_LITE_COLUMN 10
diff --git a/keyboards/duck/tcv3/indicator_leds.c b/keyboards/duck/tcv3/indicator_leds.c
new file mode 100644
index 00000000000..d7d641f9c2b
--- /dev/null
+++ b/keyboards/duck/tcv3/indicator_leds.c
@@ -0,0 +1,123 @@
+/*
+Copyright 2019 MechMerlin
+
+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 .
+*/
+#include
+#include
+#include
+#include
+#include "indicator_leds.h"
+
+#define LED_T1H 900
+#define LED_T1L 600
+#define LED_T0H 400
+#define LED_T0L 900
+
+void send_bit_d4(bool bitVal) {
+ if(bitVal) {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (4),
+ [onCycles] "I" (NS_TO_CYCLES(LED_T1H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(LED_T1L) - 2));
+ } else {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (4),
+ [onCycles] "I" (NS_TO_CYCLES(LED_T0H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(LED_T0L) - 2));
+ }
+}
+
+void send_bit_d6(bool bitVal)
+{
+ if(bitVal) {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (6),
+ [onCycles] "I" (NS_TO_CYCLES(LED_T1H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(LED_T1L) - 2));
+ } else {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (6),
+ [onCycles] "I" (NS_TO_CYCLES(LED_T0H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(LED_T0L) - 2));
+ }
+}
+
+void send_value(uint8_t byte, enum Device device) {
+ for(uint8_t b = 0; b < 8; b++) {
+ if(device == Device_STATUSLED) {
+ send_bit_d4(byte & 0b10000000);
+ }
+ if(device == Device_PCBRGB) {
+ send_bit_d6(byte & 0b10000000);
+ }
+ byte <<= 1;
+ }
+}
+
+void send_color(uint8_t r, uint8_t g, uint8_t b, enum Device device) {
+ send_value(r, device);
+ send_value(g, device);
+ send_value(b, device);
+}
+
+// Port from backlight_set_state
+void indicator_leds_set(bool leds[8]) {
+ cli();
+ send_color(leds[1] ? 255 : 0, leds[2] ? 255 : 0, leds[0] ? 255 : 0, Device_STATUSLED);
+ send_color(leds[4] ? 255 : 0, leds[3] ? 255 : 0, leds[5] ? 255 : 0, Device_STATUSLED);
+ leds[6] ? (PORTD &= ~0b10000000) : (PORTD |= 0b10000000);
+ sei();
+ show();
+}
diff --git a/keyboards/duck/tcv3/indicator_leds.h b/keyboards/duck/tcv3/indicator_leds.h
new file mode 100644
index 00000000000..ad3ec54f52a
--- /dev/null
+++ b/keyboards/duck/tcv3/indicator_leds.h
@@ -0,0 +1,7 @@
+#include "duck_led/duck_led.h"
+
+void indicator_leds_set(bool leds[8]);
+void backlight_toggle_rgb(bool enabled);
+void backlight_set_rgb(uint8_t cfg[17][3]);
+void backlight_init_ports(void);
+void send_color(uint8_t r, uint8_t g, uint8_t b, enum Device device);
diff --git a/keyboards/duck/tcv3/info.json b/keyboards/duck/tcv3/info.json
new file mode 100644
index 00000000000..e93c6b04f55
--- /dev/null
+++ b/keyboards/duck/tcv3/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "TCV3",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2.25, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":7.25, "y":0}, {"x":8.75, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.5, "y":0}, {"x":18.5, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2.25, "y":1.25}, {"x":3.25, "y":1.25}, {"x":4.25, "y":1.25}, {"x":5.25, "y":1.25}, {"x":6.25, "y":1.25}, {"x":7.25, "y":1.25}, {"x":8.25, "y":1.25}, {"x":9.25, "y":1.25}, {"x":10.25, "y":1.25}, {"x":11.25, "y":1.25}, {"x":12.25, "y":1.25}, {"x":13.25, "y":1.25}, {"x":14.25, "y":1.25}, {"x":15.25, "y":1.25}, {"x":16.25, "y":1.25}, {"x":17.5, "y":1.25}, {"x":18.5, "y":1.25}, {"x":0, "y":2.25}, {"x":1, "y":2.25}, {"x":2.25, "y":2.25, "w":1.5}, {"x":3.75, "y":2.25}, {"x":4.75, "y":2.25}, {"x":5.75, "y":2.25}, {"x":6.75, "y":2.25}, {"x":7.75, "y":2.25}, {"x":8.75, "y":2.25}, {"x":9.75, "y":2.25}, {"x":10.75, "y":2.25}, {"x":11.75, "y":2.25}, {"x":12.75, "y":2.25}, {"x":13.75, "y":2.25}, {"x":14.75, "y":2.25}, {"x":15.75, "y":2.25, "w":1.5}, {"x":17.5, "y":2.25}, {"x":18.5, "y":2.25}, {"x":0, "y":3.25}, {"x":1, "y":3.25}, {"x":2.25, "y":3.25, "w":1.75}, {"x":4, "y":3.25}, {"x":5, "y":3.25}, {"x":6, "y":3.25}, {"x":7, "y":3.25}, {"x":8, "y":3.25}, {"x":9, "y":3.25}, {"x":10, "y":3.25}, {"x":11, "y":3.25}, {"x":12, "y":3.25}, {"x":13, "y":3.25}, {"x":14, "y":3.25}, {"x":15, "y":3.25}, {"x":16, "y":3.25, "w":1.25}, {"x":17.5, "y":3.25}, {"x":18.5, "y":3.25}, {"x":0, "y":4.25}, {"x":1, "y":4.25}, {"x":2.25, "y":4.25, "w":1.25}, {"x":3.5, "y":4.25}, {"x":4.5, "y":4.25}, {"x":5.5, "y":4.25}, {"x":6.5, "y":4.25}, {"x":7.5, "y":4.25}, {"x":8.5, "y":4.25}, {"x":9.5, "y":4.25}, {"x":10.5, "y":4.25}, {"x":11.5, "y":4.25}, {"x":12.5, "y":4.25}, {"x":13.5, "y":4.25}, {"x":14.5, "y":4.25, "w":1.75}, {"x":16.25, "y":4.25}, {"x":17.5, "y":4.5}, {"x":0, "y":5.25}, {"x":1, "y":5.25}, {"x":2.25, "y":5.25, "w":1.5}, {"x":3.75, "y":5.25}, {"x":4.75, "y":5.25, "w":1.5}, {"x":6.25, "y":5.25, "w":6}, {"x":12.25, "y":5.25, "w":1.5}, {"x":13.75, "y":5.25}, {"x":14.75, "y":5.25, "w":1.5}, {"x":16.5, "y":5.5}, {"x":17.5, "y":5.5}, {"x":18.5, "y":5.5}]
+ },
+
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2.25, "y":0}, {"x":4.25, "y":0}, {"x":5.25, "y":0}, {"x":6.25, "y":0}, {"x":7.25, "y":0}, {"x":8.75, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":13.25, "y":0}, {"x":14.25, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.5, "y":0}, {"x":18.5, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2.25, "y":1.25}, {"x":3.25, "y":1.25}, {"x":4.25, "y":1.25}, {"x":5.25, "y":1.25}, {"x":6.25, "y":1.25}, {"x":7.25, "y":1.25}, {"x":8.25, "y":1.25}, {"x":9.25, "y":1.25}, {"x":10.25, "y":1.25}, {"x":11.25, "y":1.25}, {"x":12.25, "y":1.25}, {"x":13.25, "y":1.25}, {"x":14.25, "y":1.25}, {"x":15.25, "y":1.25, "w":2}, {"x":17.5, "y":1.25}, {"x":18.5, "y":1.25}, {"x":0, "y":2.25}, {"x":1, "y":2.25}, {"x":2.25, "y":2.25, "w":1.5}, {"x":3.75, "y":2.25}, {"x":4.75, "y":2.25}, {"x":5.75, "y":2.25}, {"x":6.75, "y":2.25}, {"x":7.75, "y":2.25}, {"x":8.75, "y":2.25}, {"x":9.75, "y":2.25}, {"x":10.75, "y":2.25}, {"x":11.75, "y":2.25}, {"x":12.75, "y":2.25}, {"x":13.75, "y":2.25}, {"x":14.75, "y":2.25}, {"x":15.75, "y":2.25, "w":1.5}, {"x":17.5, "y":2.25}, {"x":18.5, "y":2.25}, {"x":0, "y":3.25}, {"x":1, "y":3.25}, {"x":2.25, "y":3.25, "w":1.75}, {"x":4, "y":3.25}, {"x":5, "y":3.25}, {"x":6, "y":3.25}, {"x":7, "y":3.25}, {"x":8, "y":3.25}, {"x":9, "y":3.25}, {"x":10, "y":3.25}, {"x":11, "y":3.25}, {"x":12, "y":3.25}, {"x":13, "y":3.25}, {"x":14, "y":3.25}, {"x":15, "y":3.25, "w":2.25}, {"x":17.5, "y":3.25}, {"x":18.5, "y":3.25}, {"x":0, "y":4.25}, {"x":1, "y":4.25}, {"x":2.25, "y":4.25, "w":2.25}, {"x":4.5, "y":4.25}, {"x":5.5, "y":4.25}, {"x":6.5, "y":4.25}, {"x":7.5, "y":4.25}, {"x":8.5, "y":4.25}, {"x":9.5, "y":4.25}, {"x":10.5, "y":4.25}, {"x":11.5, "y":4.25}, {"x":12.5, "y":4.25}, {"x":13.5, "y":4.25}, {"x":14.5, "y":4.25, "w":2.75}, {"x":17.5, "y":4.5}, {"x":0, "y":5.25}, {"x":1, "y":5.25}, {"x":2.25, "y":5.25, "w":1.5}, {"x":3.75, "y":5.25}, {"x":4.75, "y":5.25, "w":1.5}, {"x":6.25, "y":5.25, "w":6}, {"x":12.25, "y":5.25, "w":1.5}, {"x":13.75, "y":5.25}, {"x":14.75, "y":5.25, "w":1.5}, {"x":16.5, "y":5.5}, {"x":17.5, "y":5.5}, {"x":18.5, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/duck/tcv3/keymaps/default/keymap.c b/keyboards/duck/tcv3/keymaps/default/keymap.c
new file mode 100644
index 00000000000..3f8e67954b1
--- /dev/null
+++ b/keyboards/duck/tcv3/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+#define _BL 0 // Base Layer
+#define _FL 1 // Fn Layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT(\
+ KC_F1, KC_F2, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS,
+ KC_F3, KC_F4, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_DEL,
+ KC_F5, KC_F6, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, KC_END,
+ KC_F7, KC_F8, 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_PGDN,
+ KC_F9, KC_F10, 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_F11, KC_F12, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FL] = LAYOUT(\
+ KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
\ No newline at end of file
diff --git a/keyboards/duck/tcv3/keymaps/default/readme.md b/keyboards/duck/tcv3/keymaps/default/readme.md
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/duck/tcv3/keymaps/via/config.h b/keyboards/duck/tcv3/keymaps/via/config.h
new file mode 100644
index 00000000000..1f4e07e39f8
--- /dev/null
+++ b/keyboards/duck/tcv3/keymaps/via/config.h
@@ -0,0 +1 @@
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
\ No newline at end of file
diff --git a/keyboards/duck/tcv3/keymaps/via/keymap.c b/keyboards/duck/tcv3/keymaps/via/keymap.c
new file mode 100644
index 00000000000..ed82d0e1256
--- /dev/null
+++ b/keyboards/duck/tcv3/keymaps/via/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2019 MechMerlin
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(\
+ KC_F1, KC_F2, KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS,
+ KC_F3, KC_F4, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_DEL,
+ KC_F5, KC_F6, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, KC_END,
+ KC_F7, KC_F8, 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_PGDN,
+ KC_F9, KC_F10, 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_F11, KC_F12, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT(\
+ KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [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, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
\ No newline at end of file
diff --git a/keyboards/duck/tcv3/keymaps/via/rules.mk b/keyboards/duck/tcv3/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/duck/tcv3/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/duck/tcv3/matrix.c b/keyboards/duck/tcv3/matrix.c
new file mode 100644
index 00000000000..38bc5c88237
--- /dev/null
+++ b/keyboards/duck/tcv3/matrix.c
@@ -0,0 +1,272 @@
+/*
+Copyright 2019 MechMerlin
+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 .
+*/
+
+#include
+#include
+#include
+#include "matrix.h"
+#include "util.h"
+#include "print.h"
+#include "debug.h"
+#include "debounce.h"
+#include "wait.h"
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static uint8_t read_rows(uint8_t col);
+static void init_rows(void);
+static void unselect_cols(void);
+static void select_col(uint8_t col);
+
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void backlight_init_ports(void)
+{
+ // DDRD |= 0b11010000;
+ // PORTD &= ~0b01010000;
+ // PORTD |= 0b10000000;
+ // DDRB |= 0b00011111;
+ // PORTB &= ~0b00001110;
+ // PORTB |= 0b00010001;
+ // DDRE |= 0b01000000;
+ // PORTE &= ~0b01000000;
+}
+
+void matrix_init(void) {
+ backlight_init_ports();
+ unselect_cols();
+ init_rows();
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ debounce_init(MATRIX_ROWS);
+
+ matrix_init_quantum();
+}
+uint8_t matrix_scan(void) {
+ bool changed = false;
+
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ wait_us(30);
+
+ uint8_t rows = read_rows(col);
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<
+ *
+ * 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 .
+ */
+#include "tcv3.h"
+#include "indicator_leds.h"
+
+enum BACKLIGHT_AREAS {
+ BACKLIGHT_ALPHA = 0b0000001,
+ BACKLIGHT_FROW = 0b0000010,
+ BACKLIGHT_MOD = 0b0000100,
+ BACKLIGHT_MACRO = 0b0001000,
+ BACKLIGHT_SWITCH = 0b0001111
+};
+
+// uint8_t backlight_rgb_r = 255;
+// uint8_t backlight_rgb_g = 0;
+// uint8_t backlight_rgb_b = 0;
+// uint8_t backlight_os_state = 0;
+// uint32_t backlight_layer_state = 0;
+
+// void backlight_toggle_rgb(bool enabled)
+// {
+// if(enabled) {
+// uint8_t rgb[17][3] = {
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+// {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b}
+// };
+// backlight_set_rgb(rgb);
+// } else {
+// uint8_t rgb[17][3] = {
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0},
+// {0, 0, 0}
+// };
+// backlight_set_rgb(rgb);
+// }
+// }
+
+// void backlight_set_rgb(uint8_t cfg[17][3])
+// {
+// cli();
+// for(uint8_t i = 0; i < 17; ++i) {
+// send_color(cfg[i][0], cfg[i][1], cfg[i][2], Device_PCBRGB);
+// }
+// sei();
+// show();
+// }
+
+// Q5, Q6, Q7 is connected to B1 - alphas
+// Q8, Q9 is connected to B2 - frow
+// Q1, Q2, Q3 is connected to B3 - mods
+// Q4 is connected to E6 - macro keys
+
+void backlight_set(uint8_t level) {
+ level & BACKLIGHT_ALPHA ? (PORTB |= 0b00000010) : (PORTB &= ~0b00000010);
+ level & BACKLIGHT_FROW ? (PORTB |= 0b00000100) : (PORTB &= ~0b00000100);
+ level & BACKLIGHT_MOD ? (PORTB |= 0b00001000) : (PORTB &= ~0b00001000);
+ level & BACKLIGHT_MACRO ? (PORTE |= 0b01000000) : (PORTE &= ~0b01000000);
+}
+
+// // Port from backlight_update_state
+// void led_set_kb(uint8_t usb_led) {
+// bool status[7] = {
+// backlight_os_state & (1<
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_all( \
+ K00, K01, K02, K04, K05, K06, K07, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0J, K0I, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2G, K2H, K2I, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3G, K3H, K3I, \
+ K40, K41, K42, k43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4E, K4F, K4G, K4H, \
+ K50, K51, K52, K53, K54, K5A, K5C, K5E, K5F, K5G, K5H, K5I \
+) { \
+ { K00, K01, K02, XXX, K04, K05, K06, K07, XXX, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, XXX, K0I, K0J }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, XXX }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, XXX, K2G, K2H, K2I, XXX }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, XXX, K3G, K3H, K3I, XXX }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, XXX, K4E, K4F, K4G, K4H, XXX, XXX }, \
+ { K50, K51, K52, K53, K54, XXX, XXX, XXX, XXX, XXX, K5A, XXX, K5C, XXX, K5E, K5F, K5G, K5H, K5I, XXX }, \
+}
+
+
+#define LAYOUT( \
+ K00, K01, K02, K04, K05, K06, K07, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0J, K0I, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1G, K1H, K1I, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2G, K2H, K2I, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3G, K3H, K3I, \
+ K40, K41, K42, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4E, K4F, K4H, \
+ K50, K51, K52, K53, K54, K5A, K5C, K5E, K5F, K5G, K5H, K5I \
+) { \
+ { K00, K01, K02, XXX, K04, K05, K06, K07, XXX, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, XXX, K0I, K0J }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, XXX, K1G, K1H, K1I, XXX }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, XXX, K2G, K2H, K2I, XXX }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, XXX, XXX, K3G, K3H, K3I, XXX }, \
+ { K40, K41, K42, XXX, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, XXX, K4E, K4F, XXX, K4H, XXX, XXX }, \
+ { K50, K51, K52, K53, K54, XXX, XXX, XXX, XXX, XXX, K5A, XXX, K5C, XXX, K5E, K5F, K5G, K5H, K5I, XXX }, \
+}
diff --git a/keyboards/dz60/config.h b/keyboards/dz60/config.h
index d77de120cb4..bb7b6ae7da3 100644
--- a/keyboards/dz60/config.h
+++ b/keyboards/dz60/config.h
@@ -1,5 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -15,37 +14,43 @@
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
-/* key matrix pins */
+/*
+ * 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 { D0, D1, D2, D3, D5 }
#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 }
#define UNUSED_PINS
-/* COL2ROW or ROW2COL */
+/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
-/* number of backlight levels */
#define BACKLIGHT_PIN B6
-#ifdef BACKLIGHT_PIN
#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+# define RGBLIGHT_ANIMATIONS
+# define RGBLED_NUM 16
+# define RGBLIGHT_HUE_STEP 8
+# define RGBLIGHT_SAT_STEP 8
+# define RGBLIGHT_VAL_STEP 8
+# define RGBLIGHT_SLEEP
#endif
-/* Set 0 if debouncing isn't needed */
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* 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
-#define RGB_DI_PIN E2
-#ifdef RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 16
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#define RGBLIGHT_SLEEP
-#endif
-#endif
/* VIA related config */
#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
diff --git a/keyboards/dz60/dz60.c b/keyboards/dz60/dz60.c
index 8295fb432c7..936d027a318 100644
--- a/keyboards/dz60/dz60.c
+++ b/keyboards/dz60/dz60.c
@@ -1,31 +1,20 @@
#include "dz60.h"
-#include "led.h"
void matrix_init_kb(void) {
- // Keyboard start-up code goes here
- // Runs once when the firmware starts up
- matrix_init_user();
- led_init_ports();
-};
-
-void matrix_scan_kb(void) {
- // Looping keyboard code goes here
- // This runs every cycle (a lot)
- matrix_scan_user();
+ matrix_init_user();
+ led_init_ports();
};
void led_init_ports(void) {
- // Set caps lock LED pin as output
- DDRB |= (1 << 2);
- // Default to off
- PORTB |= (1 << 2);
+ setPinOutput(B2);
+ writePinHigh(B2);
}
void led_set_kb(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- PORTB &= ~(1 << 2);
+ writePinLow(B2);
} else {
- PORTB |= (1 << 2);
+ writePinHigh(B2);
}
led_set_user(usb_led);
diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h
index c5c1c84958c..a718c454a0c 100644
--- a/keyboards/dz60/dz60.h
+++ b/keyboards/dz60/dz60.h
@@ -1,11 +1,9 @@
-#ifndef DZ60_H
-#define DZ60_H
+#pragma once
#include "quantum.h"
// Corresponding changes to the layout names and/or definitions must also be made to info.json
-
// 标准配列
/* Standard arrangement / LAYOUT
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -655,4 +653,3 @@
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
{ k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d, k4e } \
}
-#endif
diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json
index 2d022035289..8bd164150ec 100644
--- a/keyboards/dz60/info.json
+++ b/keyboards/dz60/info.json
@@ -1,101 +1,1736 @@
{
- "keyboard_name": "DZ60",
- "url": "",
- "maintainer": "qmk",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "key_count": 67,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
- },
- "LAYOUT_true_hhkb": {
- "key_count": 61,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Ctrl", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"x":10, "y":4, "w":1.5}, {"label":"Alt", "x":11.5, "y":4}]
- },
- "LAYOUT_directional": {
- "key_count": 67,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
- },
- "LAYOUT_all": {
- "key_count": 68,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
- },
- "LAYOUT_60_ansi": {
- "key_count": 61,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
- "LAYOUT_60_ansi_split": {
- "key_count": 63,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
- "LAYOUT_60_ansi_split_space_rshift": {
- "key_count": 64,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"FN", "x":14, "y": 3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
- "LAYOUT_60_iso": {
- "key_count": 62,
- "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
- "LAYOUT_60_hhkb": {
- "key_count": 60,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"\\", "x":13, "y":0}, {"label":"`", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
- },
- "LAYOUT_60_iso_5x1u": {
- "key_count": 63,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"|", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"~", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}]
- },
- "LAYOUT_60_iso_5x1u_split_rshift": {
- "key_count": 64,
- "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4}, {"label":"\u2190", "x":11, "y":4}, {"label":"\u2193", "x":12, "y":4}, {"label":"\u2191", "x":13, "y":4}, {"label":"\u2192", "x":14, "y":4}]
- },
- "LAYOUT_60_iso_split": {
- "key_count": 64,
- "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
- "LAYOUT_60_b_ansi": {
- "key_count": 66,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"\\", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}]
- },
- "LAYOUT_60_b_iso": {
- "key_count": 67,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"#", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"\\", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}]
- },
- "LAYOUT_60_tsangan": {
- "keycount": 61,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
- },
- "LAYOUT_60_tsangan_hhkb": {
- "key_count": 62,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
- },
- "LAYOUT_60_calbatr0ss": {
- "key_count": 65,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Ctrl", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Caps Lock", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Shift", "x":3.75, "y":4, "w":2.25}, {"label":"Fn", "x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
- "LAYOUT_60_iso_split_space_bs_rshift": {
- "key_count": 66,
- "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Del", "x":13, "y":0, "w":1}, {"label":"Backspace", "x":14, "y":0, "w":1}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Print screen", "x":14, "y":3, "w":1}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"label":"FN", "x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
- "LAYOUT_60_2_function": {
- "key_count": 63,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"GUI", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.5}, {"label":"Control", "x":11.5, "y":4, "w":1.5}, {"label":"GUI", "x":13, "y":4}, {"label":"Fn2", "x":14, "y":4}]
- },
- "LAYOUT_60_iso_5x1u_split_bs_rshift_spc": {
- "key_count": 67,
- "layout": [{"label":"Esc/¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Del", "x":13, "y":0, "w":1}, {"label":"Backspace", "x":14, "y":0, "w":1}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"VolUp", "x":14, "y":3, "w":1}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6.00, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"label":"Left", "x":10, "y":4, "w":1}, {"label":"Down", "x":11, "y":4, "w":1}, {"label":"Up", "x":12, "y":4, "w":1}, {"label":"Right", "x":13, "y":4, "w":1}, {"label":"VolDown", "x":14, "y":4, "w":1}]
- },
- "LAYOUT_olivierko": {
- "key_count": 63,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Fn", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"↑", "x":12, "y":3}, {"label":"Shift", "x":13, "y":3, "w":2}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"→", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
- },
- "LAYOUT_60_abnt2": {
- "key_count": 63,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"\u00a8", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"`", "x":11.5, "y":1}, {"label":"{", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":"\u00c7", "x":10.75, "y":2}, {"label":"^", "x":11.75, "y":2}, {"label":"}", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":":", "x":11.25, "y":3}, {"label":"?", "x":12.25, "y":3}, {"label":"Shift", "x":13.25, "y":3, "w":1.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ "keyboard_name": "DZ60",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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": 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": 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": 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": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
},
- "LAYOUT_60_iso_4th_row_all_1u": {
- "key_count": 65,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"|", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}]
+ "LAYOUT_true_hhkb": {
+ "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": 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": 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": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 6},
+ {"x": 10, "y": 4, "w": 1.5},
+ {"x": 11.5, "y": 4}
+ ]
+ },
+ "LAYOUT_directional": {
+ "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": 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},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+ {"x": 6, "y": 3},
+ {"x": 7, "y": 3},
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+ {"x": 13, "y": 3},
+ {"x": 14, "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": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "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": 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},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+ {"x": 6, "y": 3},
+ {"x": 7, "y": 3},
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+ {"x": 13, "y": 3},
+ {"x": 14, "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": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split": {
+ "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": 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": 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": 2.25},
+ {"x": 6.00, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_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},
+ {"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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_space_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": 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": 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": 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": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "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": 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": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso_5x1u": {
+ "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": 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": 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},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso_5x1u_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": 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.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"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": 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": 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},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso_split": {
+ "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": 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": 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": 2.25},
+ {"x": 6.00, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_b_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},
+ {"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": 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, "w": 1.75},
+ {"x": 13, "y": 3},
+ {"x": 14, "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": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_b_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},
+ {"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": 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, "w": 1.75},
+ {"x": 13, "y": 3},
+ {"x": 14, "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": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_tsangan": {
+ "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": 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": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "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": 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": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_calbatr0ss": {
+ "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": 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": 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": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_space_bs_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},
+ {"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": 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": 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": 2.25},
+ {"x": 6.00, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_2_function": {
+ "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": 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": 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.5},
+ {"x": 11.5, "y": 4, "w": 1.5},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso_5x1u_split_bs_rshift_spc": {
+ "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": 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": 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": 2.25},
+ {"x": 6.00, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_olivierko": {
+ "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": 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},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+ {"x": 6, "y": 3},
+ {"x": 7, "y": 3},
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+ {"x": 13, "y": 3, "w": 2},
+
+ {"x": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_abnt2": {
+ "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": 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},
+ {"x": 13.25, "y": 3, "w": 1.75},
+
+ {"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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_4th_row_all_1u": {
+ "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": 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},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+ {"x": 6, "y": 3},
+ {"x": 7, "y": 3},
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+ {"x": 13, "y": 3},
+ {"x": 14, "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},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/dz60/keymaps/default/keymap.c b/keyboards/dz60/keymaps/default/keymap.c
index 1d375a3c63b..5b7a24922d8 100644
--- a/keyboards/dz60/keymaps/default/keymap.c
+++ b/keyboards/dz60/keymaps/default/keymap.c
@@ -1,25 +1,19 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT(
+ 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, XXXXXXX, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, XXXXXXX, XXXXXXX, MO(1), KC_RCTL
+ ),
- LAYOUT(
- 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_NO, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(2), KC_NO, MO(1), KC_RCTL),
-
- 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_TRNS, KC_DEL,
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, 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, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-
- LAYOUT(
- KC_TRNS, M(1), M(2), M(3), M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), M(12), KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ 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_DEL,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
};
diff --git a/keyboards/dz60/keymaps/iso_split-spacebar/README.md b/keyboards/dz60/keymaps/iso_split-spacebar/README.md
index 7d96f2225fa..2600d227157 100644
--- a/keyboards/dz60/keymaps/iso_split-spacebar/README.md
+++ b/keyboards/dz60/keymaps/iso_split-spacebar/README.md
@@ -1,69 +1,86 @@
-# iso layout with a split spacebar
+# ISO layout with a split spacebar
-i needed to have an ISO layout
-and i wanted to have a split spacebar
-i couldn't find anything ready so i cobbled this together
+I needed to have an ISO layout
+and I wanted to have a split spacebar
+I couldn't find anything ready
+so i cobbled this together
----- Layer 0 - BL
-this is basically the standard iso layout with the addition of the split spacebar
+## Layer 0 - BL
+
+standard ISO layout with the addition of the split spacebar
menu key (KC_APP) is used to move to the next layer
the key in between the two spacebars is the function key
- *,-----------------------------------------------------------.
- *| ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |
- *|-----------------------------------------------------------|
- *| Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter|
- *|------------------------------------------------------ |
- *| Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | |
- *|-----------------------------------------------------------|
- *|Shft| < | z | x | c | v | b | n | m | , | . | / | Shift |
- *|-----------------------------------------------------------|
- *|Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl |
- *`-----------------------------------------------------------'
----- Layer 1 - FL
+```
+,-----------------------------------------------------------.
+| ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |
+|-----------------------------------------------------------|
+| Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter|
+|------------------------------------------------------ |
+| Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | |
+|-----------------------------------------------------------|
+|Shft| < | z | x | c | v | b | n | m | , | . | / | Shift |
+|-----------------------------------------------------------|
+|Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl |
+`-----------------------------------------------------------'
+```
+
+## Layer 1 - FL
+
quite standard function layer
arrow keys and mouse movement/buttons on the home row
- *,-----------------------------------------------------------.
- *|ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL |
- *|-----------------------------------------------------------|
- *| | | | | | | | | | |prt| | | |
- *|------------------------------------------------------ |
- *| |m l|m d|m u|m r| | | l | d | u | r | | | |
- *|-----------------------------------------------------------|
- *| | | | | |mb1|mb2| |hm |pgd|pgu|end| |
- *|-----------------------------------------------------------|
- *| | | | | | | | | | |
- *`-----------------------------------------------------------'
----- Layer 2 - NL
+```
+,-----------------------------------------------------------.
+|ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL |
+|-----------------------------------------------------------|
+| | | | | | | | | | |prt| | | |
+|------------------------------------------------------ |
+| |m l|m d|m u|m r| | | l | d | u | r | | | |
+|-----------------------------------------------------------|
+| | | | | |mb1|mb2| |hm |pgd|pgu|end| |
+|-----------------------------------------------------------|
+| | | | | | | | | | |
+`-----------------------------------------------------------'
+```
+
+## Layer 2 - NL
+
numbers numbers numbers...
first key (top left) to return to BL
menu key (KC_APP) is used to move to the next layer
- *,-----------------------------------------------------------.
- *|BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | |
- *|-----------------------------------------------------------|
- *| | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | |
- *|------------------------------------------------------ |
- *| | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | |
- *|-----------------------------------------------------------|
- *| | | 0 | , | . | = | | | 0 | , | . | = | |
- *|-----------------------------------------------------------|
- *| | | | | | | | | RL | |
- *`-----------------------------------------------------------'
+
+```
+,-----------------------------------------------------------.
+|BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | |
+|-----------------------------------------------------------|
+| | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | |
+|------------------------------------------------------ |
+| | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | |
+|-----------------------------------------------------------|
+| | | 0 | , | . | = | | | 0 | , | . | = | |
+|-----------------------------------------------------------|
+| | | | | | | | | RL | |
+`-----------------------------------------------------------'
+```
----- Layer 3 - BL
+## Layer 3 - BL
+
all the fancy lights
and useful reset button (top right)
- *,-----------------------------------------------------------.
- *|BL | | | | | | | | | | | | |Reset |
- *|-----------------------------------------------------------|
- *| |tog|mod|hui|hud| | |sai|sad|vai|vad| | | |
- *|------------------------------------------------------ |
- *| |sta|bre|rai|swi| | |sna|kni|gra|xms| | | |
- *|-----------------------------------------------------------|
- *| | |bd |bt |bi |bs | | | | | | | |
- *|-----------------------------------------------------------|
- *| | | | | | | | | BL | |
- *`-----------------------------------------------------------'
+
+```
+,-----------------------------------------------------------.
+|BL | | | | | | | | | | | | |Reset |
+|-----------------------------------------------------------|
+| |tog|mod|hui|hud| | |sai|sad|vai|vad| | | |
+|------------------------------------------------------ |
+| |sta|bre|rai|swi| | |sna|kni|gra|xms| | | |
+|-----------------------------------------------------------|
+| | |bd |bt |bi |bs | | | | | | | |
+|-----------------------------------------------------------|
+| | | | | | | | | BL | |
+`-----------------------------------------------------------'
+```
diff --git a/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c b/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c
index a54c06f5578..a9e811f9a41 100644
--- a/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c
+++ b/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c
@@ -112,12 +112,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
[NL] = LAYOUT_60_iso_split(
- // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
- TG(NL), 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_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______, KC_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______,
- _______, KC_7, KC_8, KC_9, KC_PPLS, KC_PMNS, _______, KC_1, KC_2, KC_3, KC_PPLS, KC_PMNS, _______, _______,
- _______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______, _______, _______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______,
- _______, _______, _______, _______, MO(FL), _______, _______, _______, TG(RL), _______),
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ TG(NL), KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PPLS, KC_PMNS, _______,
+ _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, _______,
+ _______, KC_P7, KC_P8, KC_P9, KC_PPLS, KC_PMNS, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PMNS, _______, _______,
+ _______, KC_P0, KC_COMM, KC_DOT, KC_PEQL, KC_PSLS, KC_PMNS, _______, KC_P0, KC_COMM, KC_DOT, KC_PEQL, _______,
+ _______, _______, _______, _______, MO(FL), _______, _______, _______, TG(RL), _______),
/* Keymap RL: RGB Layer
*
@@ -150,6 +150,23 @@ void persistent_default_layer_set(uint16_t default_layer) {
default_layer_set(default_layer);
}
+// always enable num lock on layer NL and disable on other layers
+// thanks to spidey3 & Erovia on discord
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case NL:
+ if (!host_keyboard_led_state().num_lock) {
+ tap_code16(KC_NLCK);
+ }
+ break;
+ default: // for any other layers, or the default layer
+ if (host_keyboard_led_state().num_lock) {
+ tap_code16(KC_NLCK);
+ }
+ break;
+ }
+ return state;
+}
// layer-activated RGB underglow
@@ -172,11 +189,11 @@ void matrix_scan_user(void) {
break;
case NL:
RGB_NL_MODE;
- // RGB_NL_LIGHT;
+ RGB_NL_LIGHT;
break;
case RL:
RGB_RL_MODE;
- // RGB_RL_LIGHT;
+ RGB_RL_LIGHT;
break;
}
diff --git a/keyboards/dz60/keymaps/lint_kid/config.h b/keyboards/dz60/keymaps/lint_kid/config.h
new file mode 100644
index 00000000000..090dcf74715
--- /dev/null
+++ b/keyboards/dz60/keymaps/lint_kid/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define GRAVE_ESC_GUI_OVERRIDE // Always send Escape if GUI is pressed
diff --git a/keyboards/dz60/keymaps/lint_kid/keymap.c b/keyboards/dz60/keymaps/lint_kid/keymap.c
new file mode 100644
index 00000000000..5134836a261
--- /dev/null
+++ b/keyboards/dz60/keymaps/lint_kid/keymap.c
@@ -0,0 +1,56 @@
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // layer 0
+ LAYOUT_directional(
+ 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_DEL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, LT(5,KC_SPC), LT(5,KC_SPC), LT(5,KC_SPC), LT(3,KC_LEFT), KC_DOWN, _______, KC_UP, KC_RIGHT
+ ),
+
+ // layer 1 toggle hardware caps layer
+ LAYOUT_directional(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ LT(4,KC_ENT), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ //layer 2 toggle space layer
+ LAYOUT_directional(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_SPC, KC_SPC, KC_SPC, _______, _______, _______, _______, _______
+ ),
+
+ // layer 3 FN
+ LAYOUT_directional(
+ 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, _______, RESET,
+ KC_TILD, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ TG(1), BL_TOGG, BL_STEP, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, TG(2), TG(2), TG(2), _______, _______, _______, _______, _______
+ ),
+
+ // layer 4 caps
+ LAYOUT_directional(
+ 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_TILD, KC_DEL, KC_UP,LSFT(LCTL(KC_TAB)), LCTL(KC_TAB), _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_W), _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_LPRN, KC_RPRN, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_BSPC, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______
+ ),
+
+ // layer 5 space
+ LAYOUT_directional(
+ 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_TILD, KC_LCBR, KC_RCBR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_BSLS, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_LPRN, KC_RPRN, KC_UNDS, KC_PLUS, KC_PIPE, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/dz60/keymaps/lint_kid/readme.md b/keyboards/dz60/keymaps/lint_kid/readme.md
new file mode 100644
index 00000000000..265668016d5
--- /dev/null
+++ b/keyboards/dz60/keymaps/lint_kid/readme.md
@@ -0,0 +1,11 @@
+# DZ60
+
+
+
+https://kbdfans.com/products/dz60-60-pcb
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb dz60 -km lint_kid
+
+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/dz60/keymaps/pinpox/keymap.c b/keyboards/dz60/keymaps/pinpox/keymap.c
new file mode 100644
index 00000000000..0a6497581a8
--- /dev/null
+++ b/keyboards/dz60/keymaps/pinpox/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Qwerty
+ [0] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, MO(1), KC_SPC, KC_ALGR, KC_RGUI, KC_LALT, KC_RCTL
+ ),
+
+ // Special keys
+ [1] = LAYOUT_60_ansi(
+ KC_SLEP, KC_F1, KC_F2, KC_F3, KC_F3, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_NO, RGB_MOD, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_PGDOWN,KC_NO,
+ KC_CAPSLOCK, BL_TOGG, RGB_TOG, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MFFD,
+ KC_NO, BL_INC, BL_DEC, BL_BRTG, KC_NO, KC_NO, KC_UP, KC_NO, KC_HOME, KC_END, KC_NO, KC_PSCR,
+ KC_NO, KC_NO, KC_TRNS, KC_MPLY, KC_NO, KC_NO, KC_TRNS, KC_NO
+ )
+};
diff --git a/keyboards/dz60/keymaps/pinpox/rules.mk b/keyboards/dz60/keymaps/pinpox/rules.mk
new file mode 100644
index 00000000000..fcf3767e166
--- /dev/null
+++ b/keyboards/dz60/keymaps/pinpox/rules.mk
@@ -0,0 +1 @@
+BOOTMAGIC_ENABLE = lite
diff --git a/keyboards/dz60/readme.md b/keyboards/dz60/readme.md
index a06db93b5f3..eb6d28d5d61 100644
--- a/keyboards/dz60/readme.md
+++ b/keyboards/dz60/readme.md
@@ -4,12 +4,12 @@
A customizable 60% keyboard.
-Keyboard Maintainer: QMK Community
-Hardware Supported: DZ60
-Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/collections/pcb/products/dz60-60-pcb?variant=40971616717)
+* Keyboard Maintainer: QMK Community
+* Hardware Supported: DZ60
+* Hardware Availability: [KBDfans](https://kbdfans.myshopify.com/collections/pcb/products/dz60-60-pcb?variant=40971616717)
Make example for this keyboard (after setting up your build environment):
make dz60:default
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+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/dz60/rules.mk b/keyboards/dz60/rules.mk
index 73b1d2ecb96..55e5bada399 100644
--- a/keyboards/dz60/rules.mk
+++ b/keyboards/dz60/rules.mk
@@ -12,17 +12,22 @@ MCU = atmega32u4
BOOTLOADER = atmel-dfu
# Build Options
-# comment out to disable the options.
+# change yes to no to disable
#
-BOOTMAGIC_ENABLE = yes # 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
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable per-key backlight LEDs
-AUDIO_ENABLE = no # There is no speaker on this PCB
-RGBLIGHT_ENABLE = yes # Enable the RGB underglow LEDs
+BOOTMAGIC_ENABLE = yes # 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
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_hhkb 60_iso 60_abnt2 60_tsangan_hhkb
diff --git a/keyboards/dztech/dz65rgb/dz65rgb.c b/keyboards/dztech/dz65rgb/dz65rgb.c
index 5d35bc89821..43d8f3494b6 100644
--- a/keyboards/dztech/dz65rgb/dz65rgb.c
+++ b/keyboards/dztech/dz65rgb/dz65rgb.c
@@ -81,7 +81,7 @@ led_config_t g_led_config = {
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 },
{ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43 },
- { 44, 45, 46, 47, 48, 49, 59, 51, 52, 53, 54, 55, NO_LED, 56, 57 },
+ { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, NO_LED, 56, 57 },
{ 58, 59, 60, NO_LED, NO_LED, 61, NO_LED, NO_LED, 62, 63, 64, 65, NO_LED, 66, 67 }
}, {
{ 0, 0 }, { 15, 0 }, { 30, 0 }, { 45, 0 }, { 60, 0 }, { 75, 0 }, { 90, 0 }, { 105, 0 }, { 120, 0 }, { 135, 0 }, { 150, 0 }, { 165, 0 }, { 180, 0 }, { 203, 0 }, { 224, 0 },
diff --git a/keyboards/dztech/dz65rgb/keymaps/catrielmuller/keymap.c b/keyboards/dztech/dz65rgb/keymaps/catrielmuller/keymap.c
index 597f6530d8b..8bd60691079 100644
--- a/keyboards/dztech/dz65rgb/keymaps/catrielmuller/keymap.c
+++ b/keyboards/dztech/dz65rgb/keymaps/catrielmuller/keymap.c
@@ -21,19 +21,19 @@ enum layers {
}
const layers_leds_map[] = {
- [_MAIN] = 17,
- [_INDEX] = 16,
- [_FN] = 15,
- [_MULTIMEDIA] = 14,
- [_EMOJI] = 13,
- [_EXT1] = 12,
- [_EXT2] = 11,
- [_EXT3] = 10,
- [_EXT4] = 9,
- [_EXT5] = 18,
- [_EXT6] = 19,
- [_RGB] = 20,
- [_CONFIG] = 21,
+ [_MAIN] = 0,
+ [_INDEX] = 1,
+ [_FN] = 2,
+ [_MULTIMEDIA] = 3,
+ [_EMOJI] = 4,
+ [_EXT1] = 5,
+ [_EXT2] = 6,
+ [_EXT3] = 7,
+ [_EXT4] = 8,
+ [_EXT5] = 9,
+ [_EXT6] = 10,
+ [_RGB] = 11,
+ [_CONFIG] = 12,
};
enum unicode_names {
@@ -234,7 +234,7 @@ void rgb_matrix_indicators_user(void) {
// CapsLock Light
if (IS_HOST_LED_ON(USB_LED_CAPS_LOCK)) {
- rgb_matrix_set_color(8, MAIN_COLOR[0], MAIN_COLOR[1], MAIN_COLOR[2]);
+ rgb_matrix_set_color(30, MAIN_COLOR[0], MAIN_COLOR[1], MAIN_COLOR[2]);
}
// Show Selected Layer
diff --git a/keyboards/eco/rules.mk b/keyboards/eco/rules.mk
index 7f7f20ed3b8..078131da7c7 100644
--- a/keyboards/eco/rules.mk
+++ b/keyboards/eco/rules.mk
@@ -23,7 +23,7 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = yes # MIDI controls
-AUDIO_ENABLE = yes # Audio output on port C6
+AUDIO_ENABLE = no # Audio output
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
diff --git a/keyboards/ergodone/keymaps/art/keymap.c b/keyboards/ergodone/keymaps/art/keymap.c
new file mode 100644
index 00000000000..7fcbd5b6157
--- /dev/null
+++ b/keyboards/ergodone/keymaps/art/keymap.c
@@ -0,0 +1,446 @@
+#include "art.h"
+#include "sendstring_workman_zxcvm.h"
+
+bool is_win = true;
+
+enum custom_keycodes {
+ keyboardSpecificKeyCode = NEW_SAFE_RANGE //not used
+};
+
+void led_show_current_os(void) {
+ if (is_win) {
+ ergodox_right_led_1_on();
+ wait_ms(50);
+ ergodox_right_led_1_off();
+ wait_ms(50);
+ ergodox_right_led_1_on();
+ wait_ms(50);
+ ergodox_right_led_1_off();
+ wait_ms(50);
+ ergodox_right_led_1_on();
+ wait_ms(50);
+ ergodox_right_led_1_off();
+ wait_ms(50);
+ } else {
+ ergodox_right_led_3_on();
+ wait_ms(50);
+ ergodox_right_led_3_off();
+ wait_ms(50);
+ ergodox_right_led_3_on();
+ wait_ms(50);
+ ergodox_right_led_3_off();
+ wait_ms(50);
+ ergodox_right_led_3_on();
+ wait_ms(50);
+ ergodox_right_led_3_off();
+ wait_ms(50);
+ }
+}
+
+void matrix_init_user(void) {
+ led_show_current_os();
+}
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<.
*/
-#ifndef ERGODOX_EZ_CONFIG_H
-#define ERGODOX_EZ_CONFIG_H
+#pragma once
#include "config_common.h"
@@ -25,9 +24,8 @@ along with this program. If not, see .
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x1307
#define DEVICE_VER 0x0001
-#define MANUFACTURER ErgoDox EZ
+#define MANUFACTURER ZSA Technology Labs Inc
#define PRODUCT ErgoDox EZ
-#define DESCRIPTION QMK keyboard firmware for Ergodox EZ
/* key matrix size */
#define MATRIX_ROWS 14
@@ -149,5 +147,3 @@ along with this program. If not, see .
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
//#define DEBUG_MATRIX_SCAN_RATE
-
-#endif
diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox_ez/ergodox_ez.h
index 7ff62d38a16..88a0a2ee9fc 100644
--- a/keyboards/ergodox_ez/ergodox_ez.h
+++ b/keyboards/ergodox_ez/ergodox_ez.h
@@ -1,5 +1,4 @@
-#ifndef ERGODOX_EZ_H
-#define ERGODOX_EZ_H
+#pragma once
#include "quantum.h"
#include
@@ -65,8 +64,7 @@ inline void ergodox_left_led_2_off(void) { ergodox_left_led_2 = 0; }
inline void ergodox_left_led_3_off(void) { ergodox_left_led_3 = 0; }
#endif // LEFT_LEDS
-inline void ergodox_led_all_on(void)
-{
+inline void ergodox_led_all_on(void) {
ergodox_board_led_on();
ergodox_right_led_1_on();
ergodox_right_led_2_on();
@@ -100,19 +98,20 @@ inline void ergodox_right_led_set(uint8_t led, uint8_t n) {
(OCR1C = n);
}
-inline void ergodox_led_all_set(uint8_t n)
-{
+inline void ergodox_led_all_set(uint8_t n) {
ergodox_right_led_1_set(n);
ergodox_right_led_2_set(n);
ergodox_right_led_3_set(n);
}
-#ifdef ORYX_CONFIGURATOR
enum ergodox_ez_keycodes {
LED_LEVEL = SAFE_RANGE,
TOGGLE_LAYER_COLOR,
EZ_SAFE_RANGE,
};
+
+#ifndef WEBUSB_ENABLE
+# define WEBUSB_PAIR KC_NO
#endif
typedef union {
@@ -271,5 +270,3 @@ extern keyboard_config_t keyboard_config;
{ R05, R15, R25, R35, R45, R55 }, \
{ R06, R16, R26, R36, R46, KC_NO } \
}
-
-#endif
diff --git a/keyboards/ergodox_ez/info.json b/keyboards/ergodox_ez/info.json
index e543206fedc..61ba58051da 100644
--- a/keyboards/ergodox_ez/info.json
+++ b/keyboards/ergodox_ez/info.json
@@ -1,7 +1,8 @@
{
"keyboard_name": "ErgoDox EZ",
"url": "ergodox-ez.com",
- "maintainer": "ZSA",
+ "maintainer": "ZSA via Drashna",
+ "manufacturer": "ZSA Technology Labs Inc",
"width": 17,
"height": 8,
diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c
index 20c78bd57e3..9079e48fcb3 100644
--- a/keyboards/ergodox_ez/keymaps/default/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/default/keymap.c
@@ -1,17 +1,18 @@
#include QMK_KEYBOARD_H
#include "version.h"
-#define BASE 0 // default layer
-#define SYMB 1 // symbols
-#define MDIA 2 // media keys
+enum layers {
+ BASE, // default layer
+ SYMB, // symbols
+ MDIA, // media keys
+};
enum custom_keycodes {
#ifdef ORYX_CONFIGURATOR
- EPRM = EZ_SAFE_RANGE,
+ VRSN = EZ_SAFE_RANGE,
#else
- EPRM = SAFE_RANGE,
+ VRSN = SAFE_RANGE,
#endif
- VRSN,
RGB_SLD
};
@@ -37,25 +38,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
-[BASE] = LAYOUT_ergodox(
+[BASE] = LAYOUT_ergodox_pretty(
// left hand
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
- KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
- KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
- LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
- ALT_T(KC_APP), KC_LGUI,
- KC_HOME,
- KC_SPC, KC_BSPC, KC_END,
- // right hand
- KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
- MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
- KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, TT(SYMB),
- KC_LALT, CTL_T(KC_ESC),
- KC_PGUP,
- KC_PGDN, KC_TAB, KC_ENT
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO), MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT, KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, TT(SYMB),
+ ALT_T(KC_APP), KC_LGUI, KC_LALT, CTL_T(KC_ESC),
+ KC_HOME, KC_PGUP,
+ KC_SPC, KC_BSPC, KC_END, KC_PGDN, KC_TAB, KC_ENT
),
/* Keymap 1: Symbol Layer
*
@@ -78,25 +70,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
-[SYMB] = LAYOUT_ergodox(
+[SYMB] = LAYOUT_ergodox_pretty(
// left hand
- VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
- KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
- KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
- KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
- EPRM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- RGB_MOD, KC_TRNS,
- KC_TRNS,
- RGB_VAD, RGB_VAI, KC_TRNS,
- // right hand
- KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
- KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
- KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
- KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
- RGB_TOG, RGB_SLD,
- KC_TRNS,
- KC_TRNS, RGB_HUD, RGB_HUI
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS, KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ EEP_RST, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ RGB_MOD, KC_TRNS, RGB_TOG, RGB_SLD,
+ KC_TRNS, KC_TRNS,
+ RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, RGB_HUD, RGB_HUI
),
/* Keymap 2: Media and mouse keys
*
@@ -119,34 +102,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
-[MDIA] = LAYOUT_ergodox(
+[MDIA] = LAYOUT_ergodox_pretty(
// left hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
- // right hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
- KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_WBAK
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WBAK
),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
- case EPRM:
- eeconfig_init();
- return false;
case VRSN:
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
return false;
@@ -161,7 +133,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
// Runs just one time when the keyboard initializes.
-void matrix_init_user(void) {
+void keyboard_post_init_user(void) {
#ifdef RGBLIGHT_COLOR_LAYER_0
rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
#endif
@@ -179,10 +151,6 @@ layer_state_t layer_state_set_user(layer_state_t state) {
case 0:
#ifdef RGBLIGHT_COLOR_LAYER_0
rgblight_setrgb(RGBLIGHT_COLOR_LAYER_0);
- #else
- #ifdef RGBLIGHT_ENABLE
- rgblight_init();
- #endif
#endif
break;
case 1:
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
index dc18edac8f2..22b8a9b9e0c 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
@@ -50,30 +50,23 @@ enum custom_keycodes {
SHELL_EXPAND_OE_LOGPATTERN,
SHELL_EXPAND_OE_TRANPATTERN,
- // Cloud9 macros
- CLOUD9_TAB_LEFT,
- CLOUD9_TAB_RIGHT,
- CLOUD9_TAB_CLOSE,
- CLOUD9_GOTO_SYMBOL,
- CLOUD9_GOTO_LINE,
- CLOUD9_NAVIGATE,
-
// Windows 10 macros,
WINDOWS10_WORKSPACE_LEFT,
WINDOWS10_WORKSPACE_RIGHT,
+ WINDOWS10_TASK_VIEW
};
#define BASE 0 // base dvorak layer
-#define BASE_ALTERNATE 1 // base dvorak layer, with different layer toggling
-#define KEYNAV 2 // arrow navigation (right hand)
-#define KEYSEL 3 // arrow navigation + shift (allow text selection)
-#define SHELL_NAV 4 // bash shortcuts
-#define SHELL_SCREEN 5 // linux screen shortcuts
-#define SCREEN_NAV 6 // navigate between linux screen tabs
-#define BROWSER_CONTROL 7 // control browser and mouse
-#define COMBINED 8 // combined numbers and symbols layer
-#define ANDROID_STUDIO 9
+#define KEYNAV 1 // arrow navigation (right hand)
+#define KEYSEL 2 // arrow navigation + shift (allow text selection)
+#define SHELL_NAV 3 // bash shortcuts
+#define SHELL_SCREEN 4 // linux screen shortcuts
+#define SCREEN_NAV 5 // navigate between linux screen tabs
+#define BROWSER_CONTROL 6 // control browser and mouse
+#define COMBINED 7 // combined numbers and symbols layer
+#define ANDROID_STUDIO 8 // android studio specific layer
+#define VSCODE 9 // visual studio code specific layer
// macros
@@ -117,6 +110,34 @@ enum custom_keycodes {
#define AS_CLOSETAB LCTL(KC_F4)
#define AS_CLOSETOOLWINDOW LCTL(LSFT(KC_F4))
+// visual studio code shortcuts
+#define VS_FILE LCTL(KC_P)
+#define VS_LINE LCTL(KC_G)
+#define VS_SYMBOLEDITOR LCTL(LSFT(KC_O))
+#define VS_DEFINITION KC_F12
+#define VS_IMPLEMENTATION LCTL(KC_F12)
+#define VS_REFERENCES LSFT(KC_F12)
+#define VS_BACK LALT(KC_LEFT)
+#define VS_BRACKET LCTL(LSFT(KC_BSLS))
+#define VS_TABLEFT LCTL(KC_PGUP)
+#define VS_TABRIGHT LCTL(KC_PGDN)
+#define VS_CLOSETAB LCTL(KC_W)
+#define VS_CLOSEPANEL LCTL(LSFT(KC_W))
+#define VS_TERMINAL LCTL(KC_GRAVE)
+#define VS_BUILD LCTL(LSFT(KC_B))
+#define VS_COMMANDS LCTL(LSFT(KC_P))
+#define VS_CMT_BLOCK LSFT(LALT(KC_A))
+#define VS_CMT_LINE LCTL(KC_SLSH)
+#define VS_DEL_LINE LCTL(LSFT(KC_K))
+#define VS_COPYLINEDOWN LSFT(LALT(KC_DOWN))
+// visual studio bookmark commands
+#define VS_BM_LIST LCTL(LALT(KC_L))
+#define VS_BM_LISTALL LCTL(LALT(KC_A))
+#define VS_BM_PREV LCTL(LALT(KC_P))
+#define VS_BM_NEXT LCTL(LALT(KC_N))
+#define VS_BM_TOGGLE LCTL(LALT(KC_K))
+#define VS_BM_LABEL LCTL(LALT(KC_B))
+
#define MACRO_SCREEN_NUM(MACRO_NAME,NUM) \
case MACRO_NAME:\
@@ -166,12 +187,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
OSL(SCREEN_NAV), KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, MEH(KC_2),
OSL(SHELL_NAV), KC_A, KC_O, KC_E, KC_U, KC_I,
- OSL(SHELL_SCREEN), KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, MEH(KC_3),
+ OSL(SHELL_SCREEN), KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, MO(VSCODE),
MEH(KC_1), OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL),
// left thumb cluster
WINDOWS10_WORKSPACE_LEFT, WINDOWS10_WORKSPACE_RIGHT,
- MEH(KC_6),
+ WINDOWS10_TASK_VIEW,
MO(COMBINED),MO(KEYNAV), OSM(MOD_LALT),
// right hand
@@ -186,39 +207,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
- // alternate base layout
- [BASE_ALTERNATE] = LAYOUT_ergodox(
- // left hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- OSL(ANDROID_STUDIO),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- // bottom row
- KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- // thumb cluster
- KC_TRNS,KC_TRNS,
- KC_TRNS,
- KC_TRNS,KC_TRNS,KC_TRNS,
- // right hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- // bottom row
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- // thumb cluster
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS
- ),
-
[KEYNAV] = LAYOUT_ergodox(
// left hand
- KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS,KC_ESC, CLOUD9_GOTO_LINE, RCTL(KC_Z), RCTL(KC_S), MEH(KC_F10), KC_TRNS,
- KC_TRNS,KC_LSFT, CLOUD9_GOTO_SYMBOL, RSFT(KC_TAB), KC_TAB, MEH(KC_A),
- KC_TRNS,MEH(KC_B), CLOUD9_NAVIGATE, CLOUD9_TAB_LEFT, CLOUD9_TAB_RIGHT, CLOUD9_TAB_CLOSE, KC_TRNS,
- KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_ESC, KC_TRNS, RCTL(KC_Z), RCTL(KC_S), KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_LSFT, KC_TRNS, RSFT(KC_TAB), KC_TAB, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// left thumb cluster
KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
@@ -242,7 +237,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,MEH(KC_L), MEH(KC_M),MEH(KC_N), MEH(KC_O), MEH(KC_P),
KC_TRNS,MEH(KC_Q), MEH(KC_R),MEH(KC_S), MEH(KC_T), MEH(KC_U), KC_TRNS,
// bottom row
- RESET,DF(BASE),DF(BASE_ALTERNATE),KC_TRNS,KC_TRNS,
+ RESET,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
// thumb cluster
KC_TRNS,KC_TRNS,
KC_TRNS,
@@ -355,10 +350,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS,
KC_TRNS,KC_TRNS,KC_TRNS,
// right hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, AS_FINDUSAGE, AS_GO_DECLARATION, AS_GO_IMPLEMENTATION, KC_TRNS,
- KC_TRNS, AS_TABLEFT, AS_TABRIGHT, AS_SYMBOL, AS_CLASS, AS_BACK,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, AS_CLOSETAB, AS_CLOSETOOLWINDOW, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, AS_FINDUSAGE, AS_GO_DECLARATION, AS_GO_IMPLEMENTATION, KC_TRNS,
+ AS_CLOSETAB, AS_TABLEFT, AS_TABRIGHT, AS_SYMBOL, AS_CLASS, AS_BACK,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, AS_CLOSETOOLWINDOW, KC_TRNS,
// bottom row
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
// thumb cluster
@@ -367,6 +362,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS
),
+ // vscode shortcuts shortcuts
+ [VSCODE] = LAYOUT_ergodox(
+ // left hand
+ KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ // bottom row
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ // thumb cluster
+ KC_TRNS,KC_TRNS,
+ KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ VS_CMT_LINE, VS_COPYLINEDOWN, VS_REFERENCES, VS_DEFINITION, VS_IMPLEMENTATION, VS_LINE, VS_BRACKET,
+ VS_CLOSETAB, VS_TABLEFT, VS_TABRIGHT, VS_SYMBOLEDITOR, VS_FILE, VS_BACK,
+ VS_CMT_BLOCK, KC_TRNS, VS_BM_PREV, VS_BM_NEXT, VS_BM_LIST, VS_BM_LISTALL, VS_BM_TOGGLE,
+ // bottom row
+ VS_COMMANDS, VS_BUILD, VS_TERMINAL, VS_CLOSEPANEL, VS_BM_LABEL,
+ // thumb cluster
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, VS_DEL_LINE, KC_TRNS
+ ),
+
[COMBINED] = LAYOUT_ergodox(
// left hand
@@ -407,10 +428,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// right hand
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_UP, KC_PGUP, KC_PGDN, KC_MS_WH_UP, KC_TRNS, KC_TRNS,
- KC_DOWN, RSFT(RCTL(KC_TAB)), RCTL(KC_TAB), KC_MS_WH_DOWN, LALT(KC_LEFT), KC_TRNS,
+ KC_DOWN, RCTL(KC_PGUP), RCTL(KC_PGDN),KC_MS_WH_DOWN, LALT(KC_LEFT), KC_TRNS,
KC_TRNS, KC_TRNS, RCTL(KC_1), RCTL(KC_9), KC_F6, KC_F5, KC_TRNS,
// bottom row
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RCTL(LSFT(KC_TAB)), RCTL(KC_TAB), KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS,
KC_TRNS,
KC_TRNS, RCTL(KC_W), RCTL(KC_T)
@@ -623,31 +644,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
SEND_STRING(" | dumptlog - ");
return true;
break;
- // Cloud9 macros
- case CLOUD9_TAB_LEFT:
- SEND_STRING(SS_LCTRL("["));
- return true;
- break;
- case CLOUD9_TAB_RIGHT:
- SEND_STRING(SS_LCTRL("]"));
- return true;
- break;
- case CLOUD9_TAB_CLOSE:
- SEND_STRING(SS_LALT("w"));
- return true;
- break;
- case CLOUD9_GOTO_SYMBOL:
- SEND_STRING(SS_LSFT(SS_LCTRL("e")));
- return true;
- break;
- case CLOUD9_GOTO_LINE:
- SEND_STRING(SS_LCTRL("g"));
- return true;
- break;
- case CLOUD9_NAVIGATE:
- SEND_STRING(SS_LCTRL("e"));
- return true;
- break;
case WINDOWS10_WORKSPACE_LEFT:
SEND_STRING(SS_LGUI(SS_LCTRL(SS_TAP(X_LEFT))));
return true;
@@ -655,6 +651,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case WINDOWS10_WORKSPACE_RIGHT:
SEND_STRING(SS_LGUI(SS_LCTRL(SS_TAP(X_RIGHT))));
break;
+ case WINDOWS10_TASK_VIEW:
+ SEND_STRING(SS_LGUI(SS_TAP(X_TAB)));
+ break;
}
}
@@ -686,6 +685,7 @@ void matrix_scan_user(void) {
case KEYNAV:
case KEYSEL:
case SCREEN_NAV:
+ case VSCODE:
ergodox_right_led_3_on();
break;
case BROWSER_CONTROL:
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h b/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
new file mode 100644
index 00000000000..6d69b001126
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/config.h
@@ -0,0 +1,29 @@
+/*
+ Set any config.h overrides for your specific keymap here.
+ See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
+*/
+#define ORYX_CONFIGURATOR
+#undef TAPPING_TERM
+#define TAPPING_TERM 175
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 20
+
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 14
+
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 30
+
+#undef MOUSEKEY_WHEEL_INTERVAL
+#define MOUSEKEY_WHEEL_INTERVAL 50
+
+// /* 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
+
+/* Turning permissive hold and ignore mod tap interrupt off in order to test the tapping term. */
+#undef PERMISSIVE_HOLD
+#define PERMISSIVE_HOLD
+#undef IGNORE_MOD_TAP_INTERRUPT
+#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c b/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
new file mode 100644
index 00000000000..c2960cfa16e
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/keymap.c
@@ -0,0 +1,351 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "keymap_german.h"
+#include "keymap_nordic.h"
+#include "keymap_french.h"
+#include "keymap_spanish.h"
+#include "keymap_hungarian.h"
+#include "keymap_swedish.h"
+#include "keymap_br_abnt2.h"
+#include "keymap_canadian_multilingual.h"
+#include "keymap_german_ch.h"
+#include "keymap_jp.h"
+#include "keymap_bepo.h"
+
+#define KC_MAC_UNDO LGUI(KC_Z)
+#define KC_MAC_CUT LGUI(KC_X)
+#define KC_MAC_COPY LGUI(KC_C)
+#define KC_MAC_PASTE LGUI(KC_V)
+#define KC_PC_UNDO LCTL(KC_Z)
+#define KC_PC_CUT LCTL(KC_X)
+#define KC_PC_COPY LCTL(KC_C)
+#define KC_PC_PASTE LCTL(KC_V)
+#define ES_LESS_MAC KC_GRAVE
+#define ES_GRTR_MAC LSFT(KC_GRAVE)
+#define ES_BSLS_MAC ALGR(KC_6)
+#define NO_PIPE_ALT KC_GRAVE
+#define NO_BSLS_ALT KC_EQUAL
+
+enum custom_keycodes {
+ RGB_SLD = EZ_SAFE_RANGE,
+};
+
+// tapdance keycodes
+enum td_keycodes {
+ CTRL_TO12,
+ SHIFT_TO13,
+ ALT_TO11
+};
+
+// define a type containing as many tapdance states as you need
+typedef enum {
+ SINGLE_TAP,
+ SINGLE_HOLD,
+} td_state_t;
+
+// create a global instance of the tapdance state type
+static td_state_t td_state;
+
+// declare your tapdance functions:
+
+// function to determine the current tapdance state
+int cur_dance (qk_tap_dance_state_t *state);
+
+// `finished` and `reset` functions for each tapdance keycode
+void ctrlto12_finished (qk_tap_dance_state_t *state, void *user_data);
+void ctrlto12_reset (qk_tap_dance_state_t *state, void *user_data);
+void altto11_finished (qk_tap_dance_state_t *state, void *user_data);
+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,
+ KC_INSERT, KC_Q, LGUI_T(KC_W), MT(MOD_HYPR, KC_E),LT(5,KC_R), KC_T, KC_NO, KC_NO, KC_Y, LT(6,KC_U), MT(MOD_HYPR, KC_I),RGUI_T(KC_O), KC_P, KC_PSCREEN,
+ KC_ESCAPE, LSFT_T(KC_A), LCTL_T(KC_S), LALT_T(KC_D), LT(1,KC_F), KC_G, KC_H, LT(2,KC_J), RALT_T(KC_K), RCTL_T(KC_L), RSFT_T(KC_SCOLON),KC_CAPSLOCK,
+ KC_HOME, LT(9,KC_Z), MT(MOD_LGUI | MOD_LCTL,KC_X), LT(7,KC_C), LT(3,KC_V), KC_B, KC_NO, KC_NO, KC_N, LT(4,KC_M), LT(8,KC_COMMA), MT(MOD_RGUI | MOD_RCTL, KC_DOT), KC_QUOTE, KC_END,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_DELETE, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO,
+ TO(10), KC_BSPACE, KC_NO, KC_NO, KC_ENTER, KC_SPACE
+ ),
+ [1] = 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_7, KC_8, KC_9, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_TRANSPARENT, KC_NO, KC_NO, KC_4, KC_5, KC_6, KC_0, 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_1, KC_2, KC_3, 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
+ ),
+ [2] = 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, KC_HYPR, KC_RGUI, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LPRN, KC_RPRN, KC_ASTR, KC_SLASH, KC_NO, KC_NO, KC_TRANSPARENT, KC_RALT, KC_RCTRL, KC_RSHIFT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, MT(MOD_RGUI | MOD_RCTL, 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
+ ),
+ [3] = 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_F9, KC_F10, KC_F11, KC_F12, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, MT(MOD_LGUI | MOD_LCTL,KC_NO), KC_NO, KC_TRANSPARENT, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, 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
+ ),
+ [4] = 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, KC_HYPR, KC_RGUI, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LBRACKET, KC_RBRACKET, KC_QUES, KC_EXLM, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RCTRL, KC_RSHIFT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_TRANSPARENT, KC_NO, MT(MOD_RGUI | MOD_RCTL, 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
+ ),
+ [5] = 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_TRANSPARENT, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_HASH, KC_BSLASH, KC_GRAVE, KC_TILD, 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_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
+ ),
+ [6] = 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_TRANSPARENT, KC_HYPR, KC_RGUI, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_UNDS, KC_EQUAL, KC_MINUS, KC_PLUS, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RCTRL, KC_RSHIFT, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT, KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, MT(MOD_RGUI | MOD_RCTL, 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
+ ),
+ [7] = 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, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_AT, KC_DLR, KC_PERC, KC_CIRC, 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
+ ),
+ [8] = 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, KC_NO, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LCBR, KC_RCBR, KC_AMPR, KC_PIPE, KC_NO, KC_NO, 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, KC_NO, KC_TRANSPARENT, 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
+ ),
+ [9] = 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, KC_AUDIO_VOL_UP,KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MEDIA_PREV_TRACK,KC_AUDIO_VOL_DOWN,KC_MEDIA_NEXT_TRACK,KC_MEDIA_PLAY_PAUSE,KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, 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_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
+ ),
+ [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, 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_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, TO(0)
+ ),
+ [11] = 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_UP, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_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_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, TO(0)
+ ),
+ [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_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_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, TO(0)
+ ),
+ [13] = 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_PGUP, KC_NO, KC_NO, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDOWN, KC_NO, 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_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, TO(0)
+ ),
+};
+
+
+/* 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();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ case 4:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ break;
+ case 5:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ break;
+ case 6:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case 7:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ default:
+ break;
+ }
+ return 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; }
+ 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);
+ switch (td_state) {
+ case SINGLE_TAP:
+ layer_on(12);
+ break;
+ case SINGLE_HOLD:
+ register_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
+ break;
+ }
+}
+
+void ctrlto12_reset (qk_tap_dance_state_t *state, void *user_data) {
+ switch (td_state) {
+ case SINGLE_TAP:
+ break;
+ case SINGLE_HOLD:
+ unregister_mods(MOD_BIT(KC_LCTRL)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
+ break;
+ }
+}
+
+void shiftto13_finished (qk_tap_dance_state_t *state, void *user_data) {
+ td_state = cur_dance(state);
+ switch (td_state) {
+ case SINGLE_TAP:
+ layer_on(13);
+ break;
+ case SINGLE_HOLD:
+ register_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
+ break;
+ }
+}
+
+void shiftto13_reset (qk_tap_dance_state_t *state, void *user_data) {
+ switch (td_state) {
+ case SINGLE_TAP:
+ break;
+ case SINGLE_HOLD:
+ unregister_mods(MOD_BIT(KC_LSHIFT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
+ break;
+ }
+}
+
+void altto11_finished (qk_tap_dance_state_t *state, void *user_data) {
+ td_state = cur_dance(state);
+ switch (td_state) {
+ case SINGLE_TAP:
+ layer_on(11);
+ break;
+ case SINGLE_HOLD:
+ register_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_on(_MY_LAYER)` here
+ break;
+ }
+}
+
+void altto11_reset (qk_tap_dance_state_t *state, void *user_data) {
+ switch (td_state) {
+ case SINGLE_TAP:
+ break;
+ case SINGLE_HOLD:
+ unregister_mods(MOD_BIT(KC_LALT)); // for a layer-tap key, use `layer_off(_MY_LAYER)` here
+ break;
+ }
+}
+
+// define `ACTION_TAP_DANCE_FN_ADVANCED()` for each tapdance keycode, passing in `finished` and `reset` functions
+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)
+};
+
+/* Debugging functions */
+
+void keyboard_post_init_user(void) {
+ // Customise these values to desired behaviour
+// debug_enable=true;
+// debug_matrix=true;
+// debug_keyboard=true;
+// debug_mouse=true;
+}
+
+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;
+}
+
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md b/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
new file mode 100644
index 00000000000..5570d9881c8
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/readme.md
@@ -0,0 +1,26 @@
+# 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.
+
+## Layers
+
+* Base Layer
+ * The two main thumb keys provide a loop to the mouse key layer. Pressing the left followed by the right always guarantees that you are on the base layer.
+ * There are a lot of dual function keys on the base layer.
+ * The layout of the letters is qwerty.
+ * Pinkys, ring fingers, and middle fingers apply dual function modifiers (along with the keys above and below the ring fingers.)
+* Numbers, Symbols, and Function Keys.
+ * From the base layer, many keys are dual function layer switches.
+ * The switch on one hand changes the home row of the other hand to a row of symbols in most cases.
+ * The left index finger, and the key below it, change the right hand to the numbers and function keys
+ respectfully.
+* Mouse Layer
+ * Clicking the main left thumb key navigates to the mouse layer (10.) Some dual function keys (technically tap dance functions) allow the left hand to apply modifiers to mouse clicks while tapping switches to
+ navigation layers.
+* Navigation Layers
+ * From the Mouse Layer, taps to the left home row navigate to scroll keys, arrow keys, and page keys.
+
+Here is the image of my keymap:
+
+
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk b/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
new file mode 100644
index 00000000000..b41c275dd13
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/nathanvercaemert/rules.mk
@@ -0,0 +1,10 @@
+# Set any rules.mk overrides for your specific keymap here.
+# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
+LINK_TIME_OPTIMIZATION_ENABLE = yes
+COMMAND_ENABLE = no
+RGBLIGHT_ENABLE = no
+TAP_DANCE_ENABLE=yes
+
+
+#Beginning debugging process for LT() and permissive hold
+CONSOLE_ENABLE = yes
diff --git a/keyboards/ergodox_ez/keymaps/rmw/config.h b/keyboards/ergodox_ez/keymaps/rmw/config.h
new file mode 100644
index 00000000000..7b90c2327a8
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/config.h
@@ -0,0 +1,59 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2013 Oleg Kostyuk
+Edited like hell 2017+ by Reed Williams
+
+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 .
+*/
+#pragma once
+
+#define MACOSX
+
+/* USB Device descriptor parameter */
+#ifndef DESCRIPTION
+#define DESCRIPTION QMK keyboard firmware for Ergodox EZ
+#endif
+
+#define USB_MAX_POWER_CONSUMPTION 500
+
+#define QMK_KEYS_PER_SCAN 4
+/* Set 0 if debouncing isn't needed */
+#undef DEBOUNCE
+#define DEBOUNCE 5
+
+
+#define ONESHOT_TIMEOUT 900 // how long before oneshot times out
+//#define ONESHOT_TAP_TOGGLE 2 // how many taps before oneshot toggle is triggered
+
+#undef LOCKING_SUPPORT_ENABLE
+#undef LOCKING_RESYNC_ENABLE
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 20
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 6
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 254
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 10
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 254
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+//#define DEBUG_MATRIX_SCAN_RATE
diff --git a/keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c b/keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c
new file mode 100644
index 00000000000..7a78ce98e79
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/keymap-mac.c
@@ -0,0 +1,188 @@
+#include "rmw.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [QWERTY] = LAYOUT_ergodox(
+ TD(FRBK2), KC_1, KC_2, KC_3, KC_4, KC_5, KC_F4,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TO(EDIT),
+ OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_D, LT(FSYM,KC_F), KC_G,
+ LCTL(KC_LEFT), KC_Z, KC_X, KC_C, KC_V, SFT_T(KC_B), KC_TAB,
+ TD(CTLALL), OSL(ADJUST), TD(GUCTL), TD(SGCA), TD(AGC),
+ OS_CMD, OS_CTL ,
+ KC_ESCAPE,
+ KC_BSPACE, TD(SHENT), OSL(EDIT),
+
+ KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ TO(NUMPAD), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, LT(JSYM,KC_J), KC_K, KC_L, LT(EDIT,KC_SCLN), KC_QUOTE,
+ CTL_T(KC_B), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), LCTL(KC_RIGHT),
+ TD(GCA), TD(CTLALL), KC_LBRC, KC_RBRC, KC_MS_BTN1,
+ OS_CALT, KC_TAB,
+ KC_DEL,
+ KC_CAPS, SFTENT, KC_SPC),
+
+
+ [MINIMAK4] = LAYOUT_ergodox(
+ TD(FRBK2), KC_1, KC_2, KC_3, KC_4, KC_5, KC_F4,
+ KC_TAB, KC_Q, KC_W, KC_D, KC_R, KC_K, TO(EDIT),
+ OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_T, LT(FSYM,KC_F), KC_G,
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, SFT_T(KC_B), KC_TAB,
+ TD(CTLALL), OSL(ADJUST), TD(GUCTL), TD(SGCA), TD(AGC),
+ OS_CMD, OS_CTL ,
+ KC_ESCAPE,
+ KC_BSPACE, TD(SHENT), OSL(EDIT),
+ KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ TO(NUMPAD), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, LT(JSYM,KC_J), KC_E, KC_L, LT(EDIT,KC_SCLN), KC_QUOTE,
+ CTL_T(KC_B), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), KC_MS_BTN1,
+ TD(GCA), TD(CTLALL), LGUI(KC_GRV), KC_RBRC, KC_MS_BTN1,
+ OS_ALT, KC_TAB,
+ KC_DEL,
+ KC_CAPS, SFT_T(KC_ENT), KC_SPC),
+
+ [NUMPAD] = LAYOUT_ergodox(VRSN, KC_F11, KC_F12, KC_F1, KC_F2, KC_F3, _______,
+ _______, _______, KC_PGUP, KC_UP, KC_PGDOWN, _______, TO(QWERTY),
+ _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,
+ _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_Y), _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, KC_PSCREEN, _______, _______, TO(QWERTY),
+
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ TO(EDIT), _______, KC_7, KC_8, KC_9, KC_KP_MINUS, _______,
+ _______, KC_4, KC_5, KC_6, KC_KP_PLUS, _______,
+ _______, KC_COMM, KC_1, KC_2, KC_3, KC_KP_SLASH, _______,
+ KC_0, KC_DOT, KC_EQUAL, KC_KP_ASTERISK, _______,
+ _______, _______, KC_INSERT, TO(EDIT), _______, _______),
+
+ [EDIT] = LAYOUT_ergodox(_______, _______, KC_MS_WH_UP, KC_MS_BTN1, KC_MS_BTN2, _______, _______,
+ _______, LGUI(LALT(KC_ESCAPE)), KC_MS_WH_DOWN, LALT(S(KC_LEFT)), LALT(S(KC_RIGHT)), _______, TO(NUMPAD),
+ _______, _______, LGUI(KC_GRV), LALT(KC_LEFT), LALT(KC_RIGHT), _______,
+ LCTL(KC_RIGHT), LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_Y), _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, TO(NUMPAD),
+ _______, _______, _______, S(KC_UP), _______, _______, KC_DELETE,
+ TO(QWERTY), LGUI(KC_T), KC_PGUP, KC_UP, KC_PGDOWN, KC_PSCREEN, _______,
+ LGUI(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LGUI(KC_RIGHT), _______,
+ _______, S(LGUI(KC_LEFT)), S(KC_LEFT), S(KC_DOWN), S(KC_RIGHT), S(LGUI(KC_RIGHT)), LCTL(KC_LEFT),
+ _______, _______, FORM_GET, FORM_PUT, _______,
+ _______, _______, _______, S(KC_F10), _______, _______),
+
+ [FSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_TILD, KC_EXLM, _______, _______,
+ LCTL(KC_RIGHT), _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, DEL_WRD, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_CIRC, KC_AMPR , KC_ASTR, KC_GRV , _______, _______,
+ KC_EQUAL, KC_MINUS, KC_UNDS, KC_BSLS, KC_COLON, KC_DQT ,
+ _______, _______, KC_PLUS , KC_SLSH, KC_PIPE, _______ , _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______),
+
+ [JSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
+ _______, KC_GRV, KC_AT , KC_LCBR, KC_RCBR, _______, _______,
+ _______, KC_HASH, KC_DLR , KC_LPRN, KC_RPRN, KC_LEFT,
+ _______, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_QUES, KC_SLSH, KC_COLON, _______,
+ _______, _______, _______, _______, _______, _______, LCTL(KC_LEFT),
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, LGUI(KC_DOWN), _______),
+
+ [MEDIA] = LAYOUT_ergodox(_______, _______, KC_MS_BTN4, _______, KC_MS_BTN5, _______, _______,
+ _______, KC_MS_WH_UP, KC_MS_WH_LEFT, KC_MS_UP, KC_MS_WH_RIGHT, _______, _______,
+ _______, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______,
+ _______, _______, KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______,
+ _______, _______, _______, _______, KC_MS_BTN3,
+ _______, _______, _______, KC_MS_BTN1, KC_MS_BTN2, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, _______, _______,
+ KC_MEDIA_REWIND, KC_MEDIA_FAST_FORWARD, _______, _______, _______,
+ _______, _______, _______, _______, KC_MS_BTN1, KC_MEDIA_PLAY_PAUSE),
+
+ [ADJUST] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, TO(EDIT), TO(NUMPAD), TO(FSYM), TO(JSYM), TO(MEDIA),
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, TO(QWERTY), DF(MINIMAK4), DF(QWERTY), _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ case FORM_GET:
+ if (record->event.pressed) {
+ tap_code(KC_BTN1);
+ tap_code16(G(KC_A));
+ tap_code16(G(KC_C));
+ }
+ return false;
+ case FORM_PUT:
+ if (record->event.pressed) {
+ tap_code(KC_BTN1);
+ tap_code16(G(KC_A));
+ tap_code16(G(KC_V));
+ }
+ return false;
+ }
+ return true;
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case QWERTY:
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ break;
+ case NUMPAD:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ break;
+ case EDIT:
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_off();
+ break;
+ case FSYM:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_off();
+ break;
+ case JSYM:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_on();
+ break;
+ case MEDIA:
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case ADJUST:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ }
+ return state;
+}
diff --git a/keyboards/ergodox_ez/keymaps/rmw/keymap-win.c b/keyboards/ergodox_ez/keymaps/rmw/keymap-win.c
new file mode 100644
index 00000000000..9f7435c0d7e
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/keymap-win.c
@@ -0,0 +1,159 @@
+#include "rmw.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [QWERTY] = LAYOUT_ergodox( // LEFT HAND
+ TD(FRBK), KC_1, KC_2, KC_3, KC_4, KC_5, KC_F4,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TO(EDIT),
+ OSL(EDIT), KC_A, LT(NUMPAD,KC_S), KC_D, LT(FSYM,KC_F), KC_G,
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, SFT_T(KC_B), KC_TAB,
+ TD(CTLAND), OSL(ADJUST), TD(SCAG), TD(TDGUI), TD(ACG),
+ OS_ALT, OS_CTL ,
+ KC_ESCAPE,
+ KC_BSPACE, TD(SHENT), OSL(EDIT),
+
+ // RIGHT HAND
+ KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ TO(NUMPAD), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, LT(JSYM,KC_J), KC_K, KC_L, LT(EDIT,KC_SCLN), KC_QUOTE,
+ CTL_T(KC_B), KC_N, KC_M, KC_COMM, KC_DOT, LT(MEDIA,KC_SLSH), TD(SHENT),
+ TD(CAG), TD(TDGUI), KC_LBRC, KC_RBRC, KC_MS_BTN1,
+ OS_ALT, KC_TAB,
+ KC_DEL,
+ KC_CAPS, SFT_T(KC_ENT), KC_SPC),
+
+
+ [NUMPAD] = LAYOUT_ergodox(VRSN, KC_F11, KC_F12, KC_F1, KC_F2, KC_F3, _______,
+ _______, _______, KC_PGUP, KC_UP, KC_PGDOWN, _______, TO(0),
+ _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_Y), _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, KC_PSCREEN, _______, _______, TO(0),
+
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ TO(EDIT), _______, KC_7, KC_8, KC_9, KC_KP_MINUS, _______,
+ _______, KC_4, KC_5, KC_6, KC_KP_PLUS, _______,
+ _______, KC_COMM, KC_1, KC_2, KC_3, KC_KP_SLASH, _______,
+ KC_0, KC_DOT, KC_EQUAL, KC_KP_ASTERISK, _______,
+ _______, _______, KC_INSERT, TO(EDIT), _______, _______),
+
+ [EDIT] = LAYOUT_ergodox(KC_ESCAPE, LALT(LCTL(KC_DELETE)), KC_MS_WH_UP, KC_MS_BTN1, KC_MS_BTN2, _______, _______,
+ _______, LCTL(S(KC_ESCAPE)), KC_MS_WH_DOWN, LCTL(S(KC_LEFT)), LCTL(S(KC_RIGHT)), _______, TO(NUMPAD),
+ _______, _______, KC_LEFT, LCTL(KC_LEFT), LCTL(KC_RIGHT), _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_Y), _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, TO(NUMPAD),
+ _______, _______, _______, S(KC_UP), _______, _______, KC_DELETE,
+ TO(0), LCTL(KC_T), KC_PGUP, KC_UP, KC_PGDOWN, KC_PSCREEN, _______,
+ KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, _______,
+ _______, S(KC_HOME), S(KC_LEFT), S(KC_DOWN), S(KC_RIGHT), S(KC_END), _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, S(KC_F10), _______, _______),
+
+ [FSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_TILD, KC_EXLM, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_CIRC, KC_AMPR , KC_ASTR, KC_GRV , _______, _______,
+ KC_EQUAL, KC_MINUS, KC_UNDS, KC_BSLS, KC_COLON, KC_DQT ,
+ _______, _______, KC_PLUS , KC_SLSH, KC_PIPE, _______ , _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______),
+
+ [JSYM] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
+ _______, KC_GRV, KC_AT , KC_LCBR, KC_RCBR, _______, _______,
+ _______, KC_HASH, KC_DLR , KC_LPRN, KC_RPRN, KC_LEFT,
+ _______, KC_PERC, KC_CIRC, KC_LBRACKET, KC_RBRACKET, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_QUES, KC_SLSH, KC_COLON, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______),
+
+ [MEDIA] = LAYOUT_ergodox(_______, _______, KC_MS_BTN4, _______, KC_MS_BTN5, _______, _______,
+ _______, KC_MS_WH_UP, KC_MS_WH_LEFT, KC_MS_UP, KC_MS_WH_RIGHT, _______, _______,
+ _______, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______,
+ _______, _______, KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______,
+ _______, _______, _______, _______, KC_MS_BTN3,
+ _______, _______, _______, KC_MS_BTN1, KC_MS_BTN2, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_AUDIO_VOL_DOWN, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, _______, _______,
+ KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, _______, _______, _______,
+ _______, _______, _______, _______, KC_MS_BTN1, KC_MEDIA_PLAY_PAUSE),
+
+ [ADJUST] = LAYOUT_ergodox(_______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, TO(EDIT), TO(NUMPAD), TO(FSYM), TO(JSYM), TO(MEDIA),
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, TO(QWERTY), _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ }
+ return true;
+}
+
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ switch (get_highest_layer(state)) {
+ case QWERTY:
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ break;
+ case NUMPAD:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ break;
+ case EDIT:
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_off();
+ break;
+ case FSYM:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_off();
+ break;
+ case JSYM:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_on();
+ break;
+ case MEDIA:
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ case ADJUST:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ break;
+ }
+ return state;
+}
diff --git a/keyboards/ergodox_ez/keymaps/rmw/keymap.c b/keyboards/ergodox_ez/keymaps/rmw/keymap.c
new file mode 100644
index 00000000000..b0b9bf13cdd
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/keymap.c
@@ -0,0 +1,13 @@
+#include "ergodox_ez.h"
+#include "version.h"
+
+#define LONGPRESS_DELAY 180
+#define LAYER_TOGGLE_DELAY 350
+
+#ifdef MACOSX
+#include "keymap-mac.c"
+#endif
+
+#ifdef WINDOWS
+#include "keymap-win.c"
+#endif
diff --git a/keyboards/ergodox_ez/keymaps/rmw/readme.md b/keyboards/ergodox_ez/keymaps/rmw/readme.md
new file mode 100644
index 00000000000..36e0d1de00d
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/readme.md
@@ -0,0 +1,11 @@
+# RMW Ergodox_EZ Layout
+
+This is the keymap I use on the Ergodox_EZ I use for work. I write reports and code in a variety of languages on this board and the various layers provide plenty of flexibility for navigating, editing text, and writing code and prose.
+
+I switched to a Mac in the past year, so my keymap now mostly gets used in the Mac mode; simply edit the keymap.c file to uncomment \#include keymap-win.c and comment out \#include keymap-mac.c to change back to the Windows version, but I haven't been updating that map as I've made changes moving forward on the Mac version.
+
+## The theory of this keymap
+
+The base layer is either QWERTY or MINIMAK4, as desired. Overlaid on that base layer are various layers triggered by one-shots, TOs, and LTs. Tapdances are used to cram lots of mods into few keys and provide freedom to hit combinations with either hand. Mods and layer things are one-shot (where reasonable) because I prefer that.
+
+An EDIT layer provides text navigation, selection, and editing capabilities in home position. The EXCEL layer offers a numpad and various spreadsheet-useful navigations and operations. Holding S will put the numpad under your right hand in home position. Keys F and J offer various useful symbols (mostly) on the opposite hand when held, including \[\]\(\)\{\} under the left pointer and middle fingers on bottom, middle, and top rows respectively. The MEDIA layer provides media controls (obvs) and some mouse movement and nav, in case I don't feel like reaching for the trackball/trackpad/mouse.
diff --git a/keyboards/ergodox_ez/keymaps/rmw/rules.mk b/keyboards/ergodox_ez/keymaps/rmw/rules.mk
new file mode 100644
index 00000000000..31e0fcf2933
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rmw/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE=yes
diff --git a/keyboards/ergodox_ez/readme.md b/keyboards/ergodox_ez/readme.md
index bce8ff3c6ff..796e96ce531 100644
--- a/keyboards/ergodox_ez/readme.md
+++ b/keyboards/ergodox_ez/readme.md
@@ -1,41 +1,44 @@
# ErgoDox EZ
-The Ez uses the [Teensy Loader](https://www.pjrc.com/teensy/loader.html).
+
-Linux users need to modify udev rules as described on the [Teensy
-Linux page]. Some distributions provide a binary, maybe called
-`teensy-loader-cli`.
+The ErgoDox EZ is a mass produced version of the original ErgoDox keyboard, with optional support for RGB Light (Shine) or RGB Matrix (Glow).
-[Teensy Linux page]: https://www.pjrc.com/teensy/loader_linux.html
+* Keyboard Maintainer: [ZSA Technology Labs Inc](https://github.com/zsa), Firmware maintained by [drashna](https://github.com/drashna)
+* Hardware Supported: Original ErgoDox, ErgoDox EZ
+* Hardware Availability: [ErgoDox EZ](https://ergodox-ez.com/), [ErgoDox.io](https://ergodox.io)
-To flash the firmware:
+Make example for this keyboard (after setting up your build environment):
- - Build the firmware with `make :`, for example `make ergodox_ez:default`
+ make ergodox_ez:default:flash
- - This will result in a hex file called `ergodox_ez_keymapname.hex`, e.g.
- `ergodox_ez_default.hex`
+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).
- - Start the teensy loader.
+## Oryx Configuation
- - Load the .hex file into it.
+If you have `ORYX_CONFIGURATOR` defined in your keymap's `config.h`, this enables a number of the built in options from the Oryx Configurator.
- - Press the Reset button by inserting a paperclip gently into the reset hole
- in the top right corner.
+### Indicator LEDs
- - Click the button in the Teensy app to download the firmware.
+You can use the `LED_LEVEL` keycode to cycle through the brightness levels for the LEDs on the top right of the keyboard. These settings are saved in eeprom (persistant memory).
-See also [video demonstration](https://www.youtube.com/watch?v=9PyiGUO9_KQ) using Teensy in auto mode.
+Alternatively, you can set the brightness by calling the following functions:
-To flash with ´teensy-loader-cli´:
+```c
+void ergodox_led_all_set(uint8_t level);
+void ergodox_right_led_1_set(uint8_t level);
+void ergodox_right_led_2_set(uint8_t level);
+void ergodox_right_led_3_set(uint8_t level);
+```
- - Build the firmware with `make keymapname`, for example `make default`
+These settings are not persistent, so you'd need to reset it every time the board starts.
- - Run ´teensy_loader_cli -mmcu=atmega32u4 -w ergodox_ez_.hex´
+These are on a 0-255 scale
- - Press the Reset button by inserting a paperclip gently into the reset hole
- in the top right corder.
+### RGB Matrix Features
-## Settings
+If you're using the Smart LED (layer indication) feature from the Oryx Configurator, you want to make sure that you enable these options by adding `#define ORYX_CONFIGURATOR` to your keymap's `config.h`.
-You may want to enable QMK_KEYS_PER_SCAN because the Ergodox has a relatively
-slow scan rate.
+This changes the `RGB_TOG` keycode so that it will toggle the lights on and off, in a way that will allow the Smart LEDs to continue to work, even with the rest of the LEDs turned off.
+
+Additionally, a new keycode has been added to toggle the Smart LEDs. Use `TOGGLE_LAYER_COLOR`, if you aren't already.
diff --git a/keyboards/ergodox_stm32/keymaps/default/keymap.c b/keyboards/ergodox_stm32/keymaps/default/keymap.c
index dcf8d15b7b7..04a12962e3e 100644
--- a/keyboards/ergodox_stm32/keymaps/default/keymap.c
+++ b/keyboards/ergodox_stm32/keymaps/default/keymap.c
@@ -9,10 +9,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
- [1] = TT(1)
-};
-
layer_state_t layer_state_set_user(layer_state_t state) {
uint8_t layer = get_highest_layer(state);
diff --git a/keyboards/ergodox_stm32/readme.md b/keyboards/ergodox_stm32/readme.md
new file mode 100644
index 00000000000..f8b9c4c553e
--- /dev/null
+++ b/keyboards/ergodox_stm32/readme.md
@@ -0,0 +1,9 @@
+# ergodox_stm32
+
+* Keyboard Maintainer: [Codetector1374](https://github.com/Codetector1374)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ergodox_stm32: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/ergoinu/info.json b/keyboards/ergoinu/info.json
deleted file mode 100644
index 81f53fd2557..00000000000
--- a/keyboards/ergoinu/info.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "keyboard_name": "Ergoinu",
- "url": "",
- "maintainer": "hsgw",
- "width": 18,
- "height": 5.4,
- "layouts": {
- "LAYOUT": {
- "key_count": 64,
- "layout": [
- { "x": 0, "y": 0.6, "label": "ESC" },
- { "x": 1, "y": 0.4, "label": "1" },
- { "x": 2, "y": 0.4, "label": "2" },
- { "x": 3, "y": 0.25, "label": "3" },
- { "x": 4, "y": 0, "label": "4" },
- { "x": 5, "y": 0.25, "label": "5" },
- { "x": 6, "y": 0.4, "label": "6" },
-
- { "x": 11, "y": 0.4, "label": "7" },
- { "x": 12, "y": 0.25, "label": "8" },
- { "x": 13, "y": 0, "label": "9" },
- { "x": 14, "y": 0.25, "label": "0" },
- { "x": 15, "y": 0.4, "label": "MINUS" },
- { "x": 16, "y": 0.4, "label": "EQUAL" },
- { "x": 17, "y": 0.6, "label": "BACKSLASH" },
-
- { "x": 0, "y": 1.6, "label": "DELETE" },
- { "x": 1, "y": 1.4, "label": "TAB" },
- { "x": 2, "y": 1.4, "label": "Q" },
- { "x": 3, "y": 1.25, "label": "W" },
- { "x": 4, "y": 1, "label": "E" },
- { "x": 5, "y": 1.25, "label": "R" },
- { "x": 6, "y": 1.4, "label": "T" },
-
- { "x": 11, "y": 1.4, "label": "Y" },
- { "x": 12, "y": 1.25, "label": "U" },
- { "x": 13, "y": 1, "label": "I" },
- { "x": 14, "y": 1.25, "label": "O" },
- { "x": 15, "y": 1.4, "label": "P" },
- { "x": 16, "y": 1.4, "label": "LBRACKET" },
- { "x": 17, "y": 1.6, "label": "RBRACKET" },
-
- { "x": 0.25, "y": 2.6, "w": 1.75, "label": "LCTRL" },
- { "x": 2, "y": 2.4, "label": "A" },
- { "x": 3, "y": 2.25, "label": "S" },
- { "x": 4, "y": 2, "label": "D" },
- { "x": 5, "y": 2.25, "label": "F" },
- { "x": 6, "y": 2.4, "label": "G" },
-
- { "x": 11, "y": 2.4, "label": "H" },
- { "x": 12, "y": 2.25, "label": "J" },
- { "x": 13, "y": 2, "label": "K" },
- { "x": 14, "y": 2.25, "label": "L" },
- { "x": 15, "y": 2.4, "label": "SEMICOLON" },
- { "x": 16, "y": 2.4, "label": "QUOTE" },
- { "x": 17, "y": 2.6, "label": "GRAVE" },
-
- { "x": 0.25, "y": 3.6, "w": 1.75, "label": "LSHIFT" },
- { "x": 2, "y": 3.4, "label": "Z" },
- { "x": 3, "y": 3.25, "label": "X" },
- { "x": 4, "y": 3, "label": "C" },
- { "x": 5, "y": 3.25, "label": "V" },
- { "x": 6, "y": 3.4, "label": "B" },
-
- { "x": 11, "y": 3.4, "label": "N" },
- { "x": 12, "y": 3.25, "label": "M" },
- { "x": 13, "y": 3, "label": "COMMA" },
- { "x": 14, "y": 3.25, "label": "DOT" },
- { "x": 15, "y": 3.4, "label": "SLASH" },
- { "x": 16, "y": 3.4, "label": "RSHIFT" },
- { "x": 17, "y": 3.6, "label": "RSHIFT" },
-
- { "x": 3, "y": 4.25, "label": "MO(META)" },
- { "x": 4, "y": 4, "label": "LALT" },
- { "x": 5, "y": 4.25, "label": "LGUI" },
- { "x": 6, "y": 4.4, "label": "ENT" },
- { "x": 7, "y": 4.4, "w": 1.5, "label": "SPACE" },
-
- { "x": 9.5, "y": 4.4, "w": 1.5, "label": "ENTER" },
- { "x": 11, "y": 4.4, "label": "BACKSPACE" },
- { "x": 12, "y": 4.25, "label": "RGUI" },
- { "x": 13, "y": 4, "label": "RALT" },
- { "x": 14, "y": 4.25, "label": "MO(META)" }
- ]
- }
- }
-}
diff --git a/keyboards/ergoinu/readme.md b/keyboards/ergoinu/readme.md
deleted file mode 100644
index 06e0cf352eb..00000000000
--- a/keyboards/ergoinu/readme.md
+++ /dev/null
@@ -1,21 +0,0 @@
-ErgoInu
-===
-
-
-
-An (Not Portable But Small) Ergonomic Split Keyboard.
-
-Keyboard Maintainer: [hsgw](https://github.com/hsgw/) [twitter](https://twitter.com/hsgw)
-Hardware Supported: Pro Micro
-Hardware Availability & Repository: [https://github.com/hsgw/ergoinu](https://github.com/hsgw/ergoinu)
-
-Make example for this keyboard (after setting up your build environment):
-
- make ergoinu:default
-
- (or)
-
- make ergoinu:default_jis
-
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/ergoinu/rules.mk b/keyboards/ergoinu/rules.mk
deleted file mode 100644
index 6f5debe00c3..00000000000
--- a/keyboards/ergoinu/rules.mk
+++ /dev/null
@@ -1,51 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
-BOOTLOADER = caterina
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-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
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-SUBPROJECT_rev1 = no
-USE_I2C = no # i2c is not supported
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-CUSTOM_MATRIX = yes
-SRC += matrix.c serial.c split_util.c
-
-DEFAULT_FOLDER = ergoinu
-
-# ergoinu configs
-DISABLE_PROMICRO_LEDs = yes
-
-ifneq ($(strip $(ERGOINU)),)
- ifeq ($(findstring promicroled, $(ERGOINU)), promicroled)
- DISABLE_PROMICRO_LEDs = no
- endif
-endif
-
-ifeq ($(strip $(DISABLE_PROMICRO_LEDs)), yes)
- OPT_DEFS += -DDISABLE_PROMICRO_LEDs
-endif
diff --git a/keyboards/ergotravel/keymaps/ckofy/keymap.c b/keyboards/ergotravel/keymaps/ckofy/keymap.c
index 691d4aa943b..b9a2c140d87 100644
--- a/keyboards/ergotravel/keymaps/ckofy/keymap.c
+++ b/keyboards/ergotravel/keymaps/ckofy/keymap.c
@@ -18,17 +18,6 @@ enum custom_keycodes {
ADJUST,
};
-/* Fn keys */
-
-enum {
-
- F_SFT = 0,
- F_ALT,
- F_CTRL,
- F_NUMPAD
-// F_LOWER,
-// F_RAISE,
-};
#define KC_ KC_TRNS
#define KC_XXXX KC_NO
@@ -57,8 +46,8 @@ enum {
#define KC_UDO LCTL(KC_Z)
#define KC_CUT LCTL(KC_X)
#define KC_SVE LCTL(KC_S)
-#define KC_OSH F(F_SFT)
-#define KC_OCTL F(F_CTRL)
+#define KC_OSH OSM(MOD_LSFT)
+#define KC_OCTL OSM(MOD_LCTL)
#define KC_NUMP TT(_NUMPAD)
#define KC_SHESC MT(MOD_LSFT,KC_ESC)
#define KC_SHENT MT(MOD_RSFT,KC_ENT)
@@ -142,14 +131,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
- [F_SFT] = ACTION_MODS_ONESHOT (MOD_LSFT)
- ,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
- ,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
-};
-
-
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case COLEMAK:
diff --git a/keyboards/ericrlau/numdiscipline/info.json b/keyboards/ericrlau/numdiscipline/info.json
new file mode 100644
index 00000000000..fbd40f399d1
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/info.json
@@ -0,0 +1,21 @@
+{
+ "keyboard_name": "ELau NumDiscipline KB",
+ "url": "https://github.com/ericrlau/NumDiscipline",
+ "maintainer": "ericrlau",
+ "width": 19.5,
+ "height": 5.25,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"BackSpace", "x":13, "y":0, "w":2}, {"label":"Del", "x":15.5, "y":0}, {"label":"", "x":16.5, "y":0}, {"label":"", "x":17.5, "y":0}, {"label":"", "x":18.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.5, "y":1, "h":2}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"Left Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Right Shift", "x":12.25, "y":3, "w":1.75}, {"label":"", "x":14.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3, "h":2}, {"label":"Left Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Left Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"Right Alt", "x":10, "y":4}, {"label":"Right Ctrl", "x":11, "y":4}, {"label":"Func", "x":12, "y":4}, {"label":"", "x":13.25, "y":4.25}, {"label":"", "x":14.25, "y":4.25}, {"label":"", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}]
+ },
+ "LAYOUT_std_2_right_mods": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"BackSpace", "x":13, "y":0, "w":2}, {"label":"Del", "x":15.5, "y":0}, {"label":"", "x":16.5, "y":0}, {"label":"", "x":17.5, "y":0}, {"label":"", "x":18.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.5, "y":1, "h":2}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"Left Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Right Shift", "x":12.25, "y":3, "w":1.75}, {"label":"", "x":14.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3, "h":2}, {"label":"Left Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Left Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"Right Ctrl", "x":10, "y":4, "w":1.5}, {"label":"Func", "x":11.5, "y":4, "w":1.5}, {"label":"", "x":13.25, "y":4.25}, {"label":"", "x":14.25, "y":4.25}, {"label":"", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}]
+ },
+ "LAYOUT_wkl_2_right_mods": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"BackSpace", "x":13, "y":0, "w":2}, {"label":"Del", "x":15.5, "y":0}, {"label":"", "x":16.5, "y":0}, {"label":"", "x":17.5, "y":0}, {"label":"", "x":18.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.5, "y":1, "h":2}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"Left Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Right Shift", "x":12.25, "y":3, "w":1.75}, {"label":"", "x":14.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3, "h":2}, {"label":"Left Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Left Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"Right Ctrl", "x":10, "y":4, "w":1.5}, {"label":"Func", "x":11.5, "y":4, "w":1.5}, {"label":"", "x":13.25, "y":4.25}, {"label":"", "x":14.25, "y":4.25}, {"label":"", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}]
+ },
+ "LAYOUT_wkl_3_right_mods": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"BackSpace", "x":13, "y":0, "w":2}, {"label":"Del", "x":15.5, "y":0}, {"label":"", "x":16.5, "y":0}, {"label":"", "x":17.5, "y":0}, {"label":"", "x":18.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"7", "x":15.5, "y":1}, {"label":"8", "x":16.5, "y":1}, {"label":"9", "x":17.5, "y":1}, {"label":"+", "x":18.5, "y":1, "h":2}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":15.5, "y":2}, {"label":"5", "x":16.5, "y":2}, {"label":"6", "x":17.5, "y":2}, {"label":"Left Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Right Shift", "x":12.25, "y":3, "w":1.75}, {"label":"", "x":14.25, "y":3.25}, {"label":"1", "x":15.5, "y":3}, {"label":"2", "x":16.5, "y":3}, {"label":"3", "x":17.5, "y":3}, {"label":"Enter", "x":18.5, "y":3, "h":2}, {"label":"Left Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Left Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"Right Alt", "x":10, "y":4}, {"label":"Right Ctrl", "x":11, "y":4}, {"label":"Func", "x":12, "y":4}, {"label":"", "x":13.25, "y":4.25}, {"label":"", "x":14.25, "y":4.25}, {"label":"", "x":15.25, "y":4.25}, {"label":"0", "x":16.5, "y":4}, {"label":".", "x":17.5, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/ericrlau/numdiscipline/keymaps/default/keymap.c b/keyboards/ericrlau/numdiscipline/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c24713eb6e3
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/keymaps/default/keymap.c
@@ -0,0 +1,44 @@
+/* Copyright 2020 Eric Lau
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = 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_BSPC, KC_DEL, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ 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_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT),
+
+ [_FN] = LAYOUT_all(
+ /* esc 1 2 3 4 5 6 7 8 9 0 - = bkspc del / * - */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS, KC_PSLS, KC_PAST, KC_PMNS,
+ /* tab Q W E R T Y U I O P [ ] \ 7 8 9 + */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS,
+ /* caps A S D F G H J K L ; ' enter 4 5 6 */
+ KC_TRNS, KC_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,
+ /* shift Z X C V B N M , . / shift up 1 2 3 enter*/
+ KC_TRNS, 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_PGDN, KC_P2, KC_P3, KC_PENT,
+ /* ctrl win alt space alt fn ctrl left down right 0 . */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS )
+
+};
diff --git a/keyboards/ericrlau/numdiscipline/keymaps/default/readme.md b/keyboards/ericrlau/numdiscipline/keymaps/default/readme.md
new file mode 100644
index 00000000000..1e3a04f7359
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for NumDiscipline
diff --git a/keyboards/ericrlau/numdiscipline/readme.md b/keyboards/ericrlau/numdiscipline/readme.md
new file mode 100644
index 00000000000..bd040df2a51
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/readme.md
@@ -0,0 +1,23 @@
+# NumDiscipline
+
+
+
+A modified version of the through hole 65% Discipline keyboard by cftkb.
+
+* Modifications from original Discipline
+* Add numpad on right.
+* Move arrow keys 0.25U down and right, similar to 1800 layout.
+* Adjust component layout on top of board, moving ATMega and buttons to the right, adding in more diodes in center.
+* Removed ~, Delete, Page Up, Page Down keys. These will be on alternate layer.
+
+Other Information:
+
+* Keyboard Maintainer: [ELau](https://github.com/ericrlau)
+* Hardware Supported: The PCBs, controllers supported
+* Hardware Availability: https://github.com/ericrlau/NumDiscipline
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ericrlau/numdiscipline/rev1: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/ericrlau/numdiscipline/rev1/config.h b/keyboards/ericrlau/numdiscipline/rev1/config.h
new file mode 100644
index 00000000000..008d5f0c324
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/rev1/config.h
@@ -0,0 +1,248 @@
+/*
+Copyright 2020 Eric Lau
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x454C // EL
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ELau
+#define PRODUCT NumDiscipline
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 18
+
+/*
+ * 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 { B2, A1, B1, A0, B0 }
+#define MATRIX_COL_PINS { A2, B3, A3, B4, A4, D5, D6, C6, C5, C4, C3, C2, C1, C0, D7, A5, A6, A7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define USB_MAX_POWER_CONSUMPTION 100
+
+/*
+ * 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
+// #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
+
+/* number of backlight levels */
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/ericrlau/numdiscipline/rev1/rev1.c b/keyboards/ericrlau/numdiscipline/rev1/rev1.c
new file mode 100644
index 00000000000..9f3a0ba4a44
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/rev1/rev1.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Eric Lau
+ *
+ * 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 .
+ */
+
+#include "rev1.h"
diff --git a/keyboards/ericrlau/numdiscipline/rev1/rev1.h b/keyboards/ericrlau/numdiscipline/rev1/rev1.h
new file mode 100644
index 00000000000..e7bea655782
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/rev1/rev1.h
@@ -0,0 +1,77 @@
+/* Copyright 2020 Eric Lau
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#define _x_ KC_NO
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, K2F, K2G, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, \
+ K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G \
+){ \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, _x_, K2D, K2E, K2F, K2G, _x_ }, \
+{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H }, \
+{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, _x_} \
+}
+
+#define LAYOUT_std_2_right_mods( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, K2F, K2G, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, \
+ K40, K41, K42, K46, K49, K4A, K4C, K4D, K4E, K4F, K4G \
+){ \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, _x_, K2D, K2E, K2F, K2G, _x_ }, \
+{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H }, \
+{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, _x_, K4C, K4D, K4E, K4F, K4G, _x_} \
+}
+
+#define LAYOUT_wkl_2_right_mods( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, K2F, K2G, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, \
+ K40, K42, K46, K49, K4A, K4C, K4D, K4E, K4F, K4G \
+){ \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, _x_, K2D, K2E, K2F, K2G, _x_ }, \
+{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H }, \
+{ K40, _x_, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, _x_, K4C, K4D, K4E, K4F, K4G, _x_} \
+}
+
+#define LAYOUT_wkl_3_right_mods( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, K2F, K2G, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, \
+ K40, K42, K46, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G \
+){ \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, K0H }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, _x_, K2D, K2E, K2F, K2G, _x_ }, \
+{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H }, \
+{ K40, _x_, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, _x_} \
+}
diff --git a/keyboards/ericrlau/numdiscipline/rev1/rules.mk b/keyboards/ericrlau/numdiscipline/rev1/rules.mk
new file mode 100644
index 00000000000..5a54d412393
--- /dev/null
+++ b/keyboards/ericrlau/numdiscipline/rev1/rules.mk
@@ -0,0 +1,36 @@
+# MCU name
+MCU = atmega32a
+
+# Processor frequency
+F_CPU = 16000000
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = USBasp
+
+# 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 = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
diff --git a/keyboards/eve/meteor/rules.mk b/keyboards/eve/meteor/rules.mk
index a0ffab29015..93bb0a56eb7 100644
--- a/keyboards/eve/meteor/rules.mk
+++ b/keyboards/eve/meteor/rules.mk
@@ -20,5 +20,3 @@ COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no
WS2812_DRIVER = i2c
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/exclusive/e6v2/le_bmc/rules.mk b/keyboards/exclusive/e6v2/le_bmc/rules.mk
index 9fe162b893e..a5e8b449ee1 100644
--- a/keyboards/exclusive/e6v2/le_bmc/rules.mk
+++ b/keyboards/exclusive/e6v2/le_bmc/rules.mk
@@ -32,5 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/exclusive/e6v2/oe_bmc/rules.mk b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
index 9fe162b893e..a5e8b449ee1 100644
--- a/keyboards/exclusive/e6v2/oe_bmc/rules.mk
+++ b/keyboards/exclusive/e6v2/oe_bmc/rules.mk
@@ -32,5 +32,3 @@ BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/exclusive/e7v1/config.h b/keyboards/exclusive/e7v1/config.h
index 689d7e8621f..c8f15012508 100644
--- a/keyboards/exclusive/e7v1/config.h
+++ b/keyboards/exclusive/e7v1/config.h
@@ -3,8 +3,8 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x7050
+#define VENDOR_ID 0x4558 // EX
+#define PRODUCT_ID 0xE701 // E7-V1
#define DEVICE_VER 0x0001
#define MANUFACTURER Exclusive / E-Team
#define PRODUCT E7-V1
diff --git a/keyboards/exclusive/e7v1/keymaps/via/keymap.c b/keyboards/exclusive/e7v1/keymaps/via/keymap.c
new file mode 100644
index 00000000000..2f2f9dcc4a7
--- /dev/null
+++ b/keyboards/exclusive/e7v1/keymaps/via/keymap.c
@@ -0,0 +1,51 @@
+#include QMK_KEYBOARD_H
+
+/*
+ * ,---------------------------------------------------------------------|
+ * |Esc|▓|F1 |F2 |F3 |F4 |▓|F5 |F6 |F7 |F8 |▓|F9 |F10|F11|F12|▓|Ins|▓|Del|
+ * |---------------------------------------------------------------------|
+ * |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace|▓PgU |
+ * |---------------------------------------------------------------------|
+ * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ |▓PgDn|
+ * |---------------------------------------------------------------------|
+ * |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter |▓▓▓▓▓▓▓|
+ * |---------------------------------------------------------------------|
+ * |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |▓| Up |▓▓|
+ * |---------------------------------------------------------------------|
+ * |Ctrl|GUI |Alt | Space |Alt |Fn |▓|Lt |Dn |Rt |
+ * `---------------------------------------------------------------------|'
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_75_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_75_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, BL_DEC, BL_INC, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ _______, _______, _______, _______, _______, MO(1), RGB_MOD, RGB_VAD, RGB_HUD),
+
+ [2] = LAYOUT_75_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_75_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
diff --git a/keyboards/exclusive/e7v1/keymaps/via/rules.mk b/keyboards/exclusive/e7v1/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/exclusive/e7v1/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/exclusive/e7v1/readme.md b/keyboards/exclusive/e7v1/readme.md
index 9d1b8538b49..6912f379707 100644
--- a/keyboards/exclusive/e7v1/readme.md
+++ b/keyboards/exclusive/e7v1/readme.md
@@ -4,9 +4,9 @@
A 75% keyboard made by Exclusive and run in a Geekhack group buy.
-Keyboard Maintainer: [masterzen](https://github.com/masterzen)
-Hardware Supported: E7 - V1 QMK PCB LED
-Hardware Availability: [https://geekhack.org/index.php?topic=97182.msg2654226#msg2654226](https://geekhack.org/index.php?topic=97182.msg2654226#msg2654226)
+* Keyboard Maintainer: [masterzen](https://github.com/masterzen)
+* Hardware Supported: E7-V1 QMK PCB
+* Hardware Availability: [GeekHack Group Buy in 2018](https://geekhack.org/index.php?topic=97182.msg2654226#msg2654226)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/exclusive/e85/config.h b/keyboards/exclusive/e85/config.h
new file mode 100644
index 00000000000..d122c93619c
--- /dev/null
+++ b/keyboards/exclusive/e85/config.h
@@ -0,0 +1,209 @@
+/*
+Copyright 2020 MechMerlin
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4558 // EX
+#define PRODUCT_ID 0xE851 // E8.5 Version 1
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Exclusive
+#define PRODUCT E8.5 Hotswap PCB
+#define DESCRIPTION A custom TKL keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 11
+#define MATRIX_COLS 9
+
+/*
+ * 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)
+ *
+ */
+
+// 0 1 2 3 4 5 6 7 8 9 A
+#define MATRIX_ROW_PINS { E6, B0, B1, B2, B3, B7, F7, F6, F5, F4, F1 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION ROW2COL
+
+/*
+ * 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 B6
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 6
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 18
+ #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
+#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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/exclusive/e85/e85.c b/keyboards/exclusive/e85/e85.c
new file mode 100644
index 00000000000..20cd0e03f5f
--- /dev/null
+++ b/keyboards/exclusive/e85/e85.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 MechMerlin
+ *
+ * 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 .
+ */
+
+#include "e85.h"
diff --git a/keyboards/exclusive/e85/e85.h b/keyboards/exclusive/e85/e85.h
new file mode 100644
index 00000000000..19b2dff5507
--- /dev/null
+++ b/keyboards/exclusive/e85/e85.h
@@ -0,0 +1,87 @@
+/* Copyright 2020 MechMerlin
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ___ KC_NO
+
+// This is the layout for the soldered PCB
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K68, K67, K65, K64, K63, K66, K62, K61, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K78, K70, K77, K75, K74, K73, K76, K72, K71, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K88, K87, K85, K84, K94, K86, K82, K81, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K98, K97, K95, K83, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, KA8, KA7, KA5, KA4, KA3, K92, \
+ K50, K51, K52, K56, K58, K57, K54, K53, KA6, KA2, KA1 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48 }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, K57, K58 }, \
+ { KC_NO, K61, K62, K63, K64, K65, K66, K67, K68 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
+ { KC_NO, K81, K82, K83, K84, K85, K86, K87, K88 }, \
+ { KC_NO, KC_NO, K92, KC_NO, K94, K95, KC_NO, K97, K98 }, \
+ { KC_NO, KA1, KA2, KA3, KA4, KA5, KA6, KA7, KA8 }, \
+}
+
+// This is the layout for one hotswap PCB and can also be used on the soldered edition
+#define LAYOUT_ansi_standard( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K68, K67, K65, K64, K63, K66, K62, K61, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K78, K70, K77, K75, K73, K76, K72, K71, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K88, K87, K85, K84, K83, K86, K82, K81, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K98, K97, K95, K93, \
+ K40, K42, K43, K44, K45, K46, K47, K48, KA8, KA7, KA5, KA4, K92, \
+ K50, K51, K52, K56, K58, K57, K54, K53, KA6, KA2, KA1 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
+ { K40, KC_NO, K42, K43, K44, K45, K46, K47, K48 }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, K57, K58 }, \
+ { KC_NO, K61, K62, K63, K64, K65, K66, K67, K68 }, \
+ { K70, K71, K72, K73, KC_NO, K75, K76, K77, K78 }, \
+ { KC_NO, K81, K82, K83, K84, K85, K86, K87, K88 }, \
+ { KC_NO, KC_NO, K92, K93, KC_NO, K95, KC_NO, K97, K98 }, \
+ { KC_NO, KA1, KA2, KC_NO, KA4, KA5, KA6, KA7, KA8 }, \
+}
+
+// This is the layout for one hotswap PCB and can also be used on the soldered edition
+#define LAYOUT_ansi_tsangan( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K68, K67, K65, K64, K63, K66, K62, K61, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K78, K70, K77, K75, K73, K76, K72, K71, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K88, K87, K85, K84, K83, K86, K82, K81, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K98, K97, K95, K93, \
+ K40, K42, K43, K44, K45, K46, K47, K48, KA8, KA7, KA5, KA4, K92, \
+ K50, K51, K52, K56, K57, K54, K53, KA6, KA2, KA1 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38 }, \
+ { K40, KC_NO, K42, K43, K44, K45, K46, K47, K48 }, \
+ { K50, K51, K52, K53, K54, KC_NO, K56, K57, KC_NO }, \
+ { KC_NO, K61, K62, K63, K64, K65, K66, K67, K68 }, \
+ { K70, K71, K72, K73, KC_NO, K75, K76, K77, K78 }, \
+ { KC_NO, K81, K82, K83, K84, K85, K86, K87, K88 }, \
+ { KC_NO, KC_NO, K92, K93, KC_NO, K95, KC_NO, K97, K98 }, \
+ { KC_NO, KA1, KA2, KC_NO, KA4, KA5, KA6, KA7, KA8 }, \
+}
diff --git a/keyboards/exclusive/e85/info.json b/keyboards/exclusive/e85/info.json
new file mode 100644
index 00000000000..cc888a1576b
--- /dev/null
+++ b/keyboards/exclusive/e85/info.json
@@ -0,0 +1,293 @@
+{
+ "keyboard_name": "Exclusive E8.5 TKL",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "key_count": 91,
+ "layout": [
+ {"label":"K00 (E6,D0)", "x":0, "y":0},
+ {"label":"K01 (E6,D1)", "x":1.25, "y":0},
+ {"label":"K02 (E6,D2)", "x":2.25, "y":0},
+ {"label":"K03 (E6,D3)", "x":3.25, "y":0},
+ {"label":"K04 (E6,D5)", "x":4.25, "y":0},
+ {"label":"K05 (E6,D4)", "x":5.5, "y":0},
+ {"label":"K06 (E6,D6)", "x":6.5, "y":0},
+ {"label":"K07 (E6,D7)", "x":7.5, "y":0},
+ {"label":"K08 (E6,B4)", "x":8.5, "y":0},
+ {"label":"K68 (F7,B4)", "x":9.75, "y":0},
+ {"label":"K67 (F7,D7)", "x":10.75, "y":0},
+ {"label":"K65 (F7,D4)", "x":11.75, "y":0},
+ {"label":"K64 (F7,D5)", "x":12.75, "y":0},
+ {"label":"K63 (F7,D3)", "x":14, "y":0},
+ {"label":"K66 (F7,D6)", "x":15.25, "y":0},
+ {"label":"K62 (F7,D2)", "x":16.25, "y":0},
+ {"label":"K61 (F7,D1)", "x":17.25, "y":0},
+ {"label":"K10 (B0,D0)", "x":0, "y":1.5},
+ {"label":"K11 (B0,D1)", "x":1, "y":1.5},
+ {"label":"K12 (B0,D2)", "x":2, "y":1.5},
+ {"label":"K13 (B0,D3)", "x":3, "y":1.5},
+ {"label":"K14 (B0,D5)", "x":4, "y":1.5},
+ {"label":"K15 (B0,D4)", "x":5, "y":1.5},
+ {"label":"K16 (B0,D6)", "x":6, "y":1.5},
+ {"label":"K17 (B0,D7)", "x":7, "y":1.5},
+ {"label":"K18 (B0,B4)", "x":8, "y":1.5},
+ {"label":"K78 (F6,B4)", "x":9, "y":1.5},
+ {"label":"K70 (F6,D0)", "x":10, "y":1.5},
+ {"label":"K77 (F6,D7)", "x":11, "y":1.5},
+ {"label":"K75 (F6,D4)", "x":12, "y":1.5},
+ {"label":"K74 (F6,D5)", "x":13, "y":1.5},
+ {"label":"K73 (F6,D3)", "x":14, "y":1.5},
+ {"label":"K76 (F6,D6)", "x":15.25, "y":1.5},
+ {"label":"K72 (F6,D2)", "x":16.25, "y":1.5},
+ {"label":"K71 (F6,D1)", "x":17.25, "y":1.5},
+ {"label":"K20 (B1,D0)", "x":0, "y":2.5, "w":1.5},
+ {"label":"K21 (B1,D1)", "x":1.5, "y":2.5},
+ {"label":"K22 (B1,D2)", "x":2.5, "y":2.5},
+ {"label":"K23 (B1,D3)", "x":3.5, "y":2.5},
+ {"label":"K24 (B1,D5)", "x":4.5, "y":2.5},
+ {"label":"K25 (B1,D4)", "x":5.5, "y":2.5},
+ {"label":"K26 (B1,D6)", "x":6.5, "y":2.5},
+ {"label":"K27 (B1,D7)", "x":7.5, "y":2.5},
+ {"label":"K28 (B1,B4)", "x":8.5, "y":2.5},
+ {"label":"K88 (F5,B4)", "x":9.5, "y":2.5},
+ {"label":"K87 (F5,D7)", "x":10.5, "y":2.5},
+ {"label":"K85 (F5,D4)", "x":11.5, "y":2.5},
+ {"label":"K84 (F5,D5)", "x":12.5, "y":2.5},
+ {"label":"K94 (F4,D5)", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K86 (F5,D6)", "x":15.25, "y":2.5},
+ {"label":"K82 (F5,D2)", "x":16.25, "y":2.5},
+ {"label":"K81 (F5,D1)", "x":17.25, "y":2.5},
+ {"label":"K30 (B2,D0)", "x":0, "y":3.5, "w":1.75},
+ {"label":"K31 (B2,D1)", "x":1.75, "y":3.5},
+ {"label":"K32 (B2,D2)", "x":2.75, "y":3.5},
+ {"label":"K33 (B2,D3)", "x":3.75, "y":3.5},
+ {"label":"K34 (B2,D5)", "x":4.75, "y":3.5},
+ {"label":"K35 (B2,D4)", "x":5.75, "y":3.5},
+ {"label":"K36 (B2,D6)", "x":6.75, "y":3.5},
+ {"label":"K37 (B2,D7)", "x":7.75, "y":3.5},
+ {"label":"K38 (B2,B4)", "x":8.75, "y":3.5},
+ {"label":"K98 (F4,B4)", "x":9.75, "y":3.5},
+ {"label":"K97 (F4,D7)", "x":10.75, "y":3.5},
+ {"label":"K95 (F4,D4)", "x":11.75, "y":3.5},
+ {"label":"K83 (F5,D3)", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"K40 (B3,D0)", "x":0, "y":4.5, "w":1.25},
+ {"label":"K41 (B3,D1)", "x":1.25, "y":4.5},
+ {"label":"K42 (B3,D2)", "x":2.25, "y":4.5},
+ {"label":"K43 (B3,D3)", "x":3.25, "y":4.5},
+ {"label":"K44 (B3,D5)", "x":4.25, "y":4.5},
+ {"label":"K45 (B3,D4)", "x":5.25, "y":4.5},
+ {"label":"K46 (B3,D6)", "x":6.25, "y":4.5},
+ {"label":"K47 (B3,D7)", "x":7.25, "y":4.5},
+ {"label":"K48 (B3,B4)", "x":8.25, "y":4.5},
+ {"label":"KA8 (F1,B4)", "x":9.25, "y":4.5},
+ {"label":"KA7 (F1,D7)", "x":10.25, "y":4.5},
+ {"label":"KA5 (F1,D4)", "x":11.25, "y":4.5},
+ {"label":"KA4 (F1,D5)", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"KA3 (F1,D3)", "x":14, "y":4.5},
+ {"label":"K92 (F4,D2)", "x":16.25, "y":4.5},
+ {"label":"K50 (B7,D0)", "x":0, "y":5.5, "w":1.25},
+ {"label":"K51 (B7,D1)", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"K52 (B7,D2)", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"K56 (B7,D6)", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"K58 (B7,B4)", "x":10, "y":5.5, "w":1.25},
+ {"label":"K57 (B7,D7)", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"K54 (B7,D5)", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"K53 (B7,D3)", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"KA6 (F1,D6)", "x":15.25, "y":5.5},
+ {"label":"KA2 (F1,D2)", "x":16.25, "y":5.5},
+ {"label":"KA1 (F1,D1)", "x":17.25, "y":5.5}
+ ]
+ },
+
+ "LAYOUT_ansi_standard": {
+ "key_count": 88,
+ "layout": [
+ {"label":"K00 (E6,D0)", "x":0, "y":0},
+ {"label":"K01 (E6,D1)", "x":1.25, "y":0},
+ {"label":"K02 (E6,D2)", "x":2.25, "y":0},
+ {"label":"K03 (E6,D3)", "x":3.25, "y":0},
+ {"label":"K04 (E6,D5)", "x":4.25, "y":0},
+ {"label":"K05 (E6,D4)", "x":5.5, "y":0},
+ {"label":"K06 (E6,D6)", "x":6.5, "y":0},
+ {"label":"K07 (E6,D7)", "x":7.5, "y":0},
+ {"label":"K08 (E6,B4)", "x":8.5, "y":0},
+ {"label":"K68 (F7,B4)", "x":9.75, "y":0},
+ {"label":"K67 (F7,D7)", "x":10.75, "y":0},
+ {"label":"K65 (F7,D4)", "x":11.75, "y":0},
+ {"label":"K64 (F7,D5)", "x":12.75, "y":0},
+ {"label":"K63 (F7,D3)", "x":14, "y":0},
+ {"label":"K66 (F7,D6)", "x":15.25, "y":0},
+ {"label":"K62 (F7,D2)", "x":16.25, "y":0},
+ {"label":"K61 (F7,D1)", "x":17.25, "y":0},
+ {"label":"K10 (B0,D0)", "x":0, "y":1.5},
+ {"label":"K11 (B0,D1)", "x":1, "y":1.5},
+ {"label":"K12 (B0,D2)", "x":2, "y":1.5},
+ {"label":"K13 (B0,D3)", "x":3, "y":1.5},
+ {"label":"K14 (B0,D5)", "x":4, "y":1.5},
+ {"label":"K15 (B0,D4)", "x":5, "y":1.5},
+ {"label":"K16 (B0,D6)", "x":6, "y":1.5},
+ {"label":"K17 (B0,D7)", "x":7, "y":1.5},
+ {"label":"K18 (B0,B4)", "x":8, "y":1.5},
+ {"label":"K78 (F6,B4)", "x":9, "y":1.5},
+ {"label":"K70 (F6,D0)", "x":10, "y":1.5},
+ {"label":"K77 (F6,D7)", "x":11, "y":1.5},
+ {"label":"K75 (F6,D4)", "x":12, "y":1.5},
+ {"label":"K73 (F6,D3)", "x":13, "y":1.5, "w":2},
+ {"label":"K76 (F6,D6)", "x":15.25, "y":1.5},
+ {"label":"K72 (F6,D2)", "x":16.25, "y":1.5},
+ {"label":"K71 (F6,D1)", "x":17.25, "y":1.5},
+ {"label":"K20 (B1,D0)", "x":0, "y":2.5, "w":1.5},
+ {"label":"K21 (B1,D1)", "x":1.5, "y":2.5},
+ {"label":"K22 (B1,D2)", "x":2.5, "y":2.5},
+ {"label":"K23 (B1,D3)", "x":3.5, "y":2.5},
+ {"label":"K24 (B1,D5)", "x":4.5, "y":2.5},
+ {"label":"K25 (B1,D4)", "x":5.5, "y":2.5},
+ {"label":"K26 (B1,D6)", "x":6.5, "y":2.5},
+ {"label":"K27 (B1,D7)", "x":7.5, "y":2.5},
+ {"label":"K28 (B1,B4)", "x":8.5, "y":2.5},
+ {"label":"K88 (F5,B4)", "x":9.5, "y":2.5},
+ {"label":"K87 (F5,D7)", "x":10.5, "y":2.5},
+ {"label":"K85 (F5,D4)", "x":11.5, "y":2.5},
+ {"label":"K84 (F5,D5)", "x":12.5, "y":2.5},
+ {"label":"K83 (F5,D3)", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K86 (F5,D6)", "x":15.25, "y":2.5},
+ {"label":"K82 (F5,D2)", "x":16.25, "y":2.5},
+ {"label":"K81 (F5,D1)", "x":17.25, "y":2.5},
+ {"label":"K30 (B2,D0)", "x":0, "y":3.5, "w":1.75},
+ {"label":"K31 (B2,D1)", "x":1.75, "y":3.5},
+ {"label":"K32 (B2,D2)", "x":2.75, "y":3.5},
+ {"label":"K33 (B2,D3)", "x":3.75, "y":3.5},
+ {"label":"K34 (B2,D5)", "x":4.75, "y":3.5},
+ {"label":"K35 (B2,D4)", "x":5.75, "y":3.5},
+ {"label":"K36 (B2,D6)", "x":6.75, "y":3.5},
+ {"label":"K37 (B2,D7)", "x":7.75, "y":3.5},
+ {"label":"K38 (B2,B4)", "x":8.75, "y":3.5},
+ {"label":"K98 (F4,B4)", "x":9.75, "y":3.5},
+ {"label":"K97 (F4,D7)", "x":10.75, "y":3.5},
+ {"label":"K95 (F4,D4)", "x":11.75, "y":3.5},
+ {"label":"K93 (F4,D3)", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"K40 (B3,D0)", "x":0, "y":4.5, "w":2.25},
+ {"label":"K42 (B3,D2)", "x":2.25, "y":4.5},
+ {"label":"K43 (B3,D3)", "x":3.25, "y":4.5},
+ {"label":"K44 (B3,D5)", "x":4.25, "y":4.5},
+ {"label":"K45 (B3,D4)", "x":5.25, "y":4.5},
+ {"label":"K46 (B3,D6)", "x":6.25, "y":4.5},
+ {"label":"K47 (B3,D7)", "x":7.25, "y":4.5},
+ {"label":"K48 (B3,B4)", "x":8.25, "y":4.5},
+ {"label":"KA8 (F1,B4)", "x":9.25, "y":4.5},
+ {"label":"KA7 (F1,D7)", "x":10.25, "y":4.5},
+ {"label":"KA5 (F1,D4)", "x":11.25, "y":4.5},
+ {"label":"KA4 (F1,D5)", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"K92 (F4,D2)", "x":16.25, "y":4.5},
+ {"label":"K50 (B7,D0)", "x":0, "y":5.5, "w":1.25},
+ {"label":"K51 (B7,D1)", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"K52 (B7,D2)", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"K56 (B7,D6)", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"K58 (B7,B4)", "x":10, "y":5.5, "w":1.25},
+ {"label":"K57 (B7,D7)", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"K54 (B7,D5)", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"K53 (B7,D3)", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"KA6 (F1,D6)", "x":15.25, "y":5.5},
+ {"label":"KA2 (F1,D2)", "x":16.25, "y":5.5},
+ {"label":"KA1 (F1,D1)", "x":17.25, "y":5.5}
+ ]
+ },
+
+ "LAYOUT_ansi_tsangan": {
+ "key_count": 87,
+ "layout": [
+ {"label":"K00 (E6,D0)", "x":0, "y":0},
+ {"label":"K01 (E6,D1)", "x":1.25, "y":0},
+ {"label":"K02 (E6,D2)", "x":2.25, "y":0},
+ {"label":"K03 (E6,D3)", "x":3.25, "y":0},
+ {"label":"K04 (E6,D5)", "x":4.25, "y":0},
+ {"label":"K05 (E6,D4)", "x":5.5, "y":0},
+ {"label":"K06 (E6,D6)", "x":6.5, "y":0},
+ {"label":"K07 (E6,D7)", "x":7.5, "y":0},
+ {"label":"K08 (E6,B4)", "x":8.5, "y":0},
+ {"label":"K68 (F7,B4)", "x":9.75, "y":0},
+ {"label":"K67 (F7,D7)", "x":10.75, "y":0},
+ {"label":"K65 (F7,D4)", "x":11.75, "y":0},
+ {"label":"K64 (F7,D5)", "x":12.75, "y":0},
+ {"label":"K63 (F7,D3)", "x":14, "y":0},
+ {"label":"K66 (F7,D6)", "x":15.25, "y":0},
+ {"label":"K62 (F7,D2)", "x":16.25, "y":0},
+ {"label":"K61 (F7,D1)", "x":17.25, "y":0},
+ {"label":"K10 (B0,D0)", "x":0, "y":1.5},
+ {"label":"K11 (B0,D1)", "x":1, "y":1.5},
+ {"label":"K12 (B0,D2)", "x":2, "y":1.5},
+ {"label":"K13 (B0,D3)", "x":3, "y":1.5},
+ {"label":"K14 (B0,D5)", "x":4, "y":1.5},
+ {"label":"K15 (B0,D4)", "x":5, "y":1.5},
+ {"label":"K16 (B0,D6)", "x":6, "y":1.5},
+ {"label":"K17 (B0,D7)", "x":7, "y":1.5},
+ {"label":"K18 (B0,B4)", "x":8, "y":1.5},
+ {"label":"K78 (F6,B4)", "x":9, "y":1.5},
+ {"label":"K70 (F6,D0)", "x":10, "y":1.5},
+ {"label":"K77 (F6,D7)", "x":11, "y":1.5},
+ {"label":"K75 (F6,D4)", "x":12, "y":1.5},
+ {"label":"K73 (F6,D3)", "x":13, "y":1.5, "w":2},
+ {"label":"K76 (F6,D6)", "x":15.25, "y":1.5},
+ {"label":"K72 (F6,D2)", "x":16.25, "y":1.5},
+ {"label":"K71 (F6,D1)", "x":17.25, "y":1.5},
+ {"label":"K20 (B1,D0)", "x":0, "y":2.5, "w":1.5},
+ {"label":"K21 (B1,D1)", "x":1.5, "y":2.5},
+ {"label":"K22 (B1,D2)", "x":2.5, "y":2.5},
+ {"label":"K23 (B1,D3)", "x":3.5, "y":2.5},
+ {"label":"K24 (B1,D5)", "x":4.5, "y":2.5},
+ {"label":"K25 (B1,D4)", "x":5.5, "y":2.5},
+ {"label":"K26 (B1,D6)", "x":6.5, "y":2.5},
+ {"label":"K27 (B1,D7)", "x":7.5, "y":2.5},
+ {"label":"K28 (B1,B4)", "x":8.5, "y":2.5},
+ {"label":"K88 (F5,B4)", "x":9.5, "y":2.5},
+ {"label":"K87 (F5,D7)", "x":10.5, "y":2.5},
+ {"label":"K85 (F5,D4)", "x":11.5, "y":2.5},
+ {"label":"K84 (F5,D5)", "x":12.5, "y":2.5},
+ {"label":"K83 (F5,D3)", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K86 (F5,D6)", "x":15.25, "y":2.5},
+ {"label":"K82 (F5,D2)", "x":16.25, "y":2.5},
+ {"label":"K81 (F5,D1)", "x":17.25, "y":2.5},
+ {"label":"K30 (B2,D0)", "x":0, "y":3.5, "w":1.75},
+ {"label":"K31 (B2,D1)", "x":1.75, "y":3.5},
+ {"label":"K32 (B2,D2)", "x":2.75, "y":3.5},
+ {"label":"K33 (B2,D3)", "x":3.75, "y":3.5},
+ {"label":"K34 (B2,D5)", "x":4.75, "y":3.5},
+ {"label":"K35 (B2,D4)", "x":5.75, "y":3.5},
+ {"label":"K36 (B2,D6)", "x":6.75, "y":3.5},
+ {"label":"K37 (B2,D7)", "x":7.75, "y":3.5},
+ {"label":"K38 (B2,B4)", "x":8.75, "y":3.5},
+ {"label":"K98 (F4,B4)", "x":9.75, "y":3.5},
+ {"label":"K97 (F4,D7)", "x":10.75, "y":3.5},
+ {"label":"K95 (F4,D4)", "x":11.75, "y":3.5},
+ {"label":"K93 (F4,D3)", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"K40 (B3,D0)", "x":0, "y":4.5, "w":2.25},
+ {"label":"K42 (B3,D2)", "x":2.25, "y":4.5},
+ {"label":"K43 (B3,D3)", "x":3.25, "y":4.5},
+ {"label":"K44 (B3,D5)", "x":4.25, "y":4.5},
+ {"label":"K45 (B3,D4)", "x":5.25, "y":4.5},
+ {"label":"K46 (B3,D6)", "x":6.25, "y":4.5},
+ {"label":"K47 (B3,D7)", "x":7.25, "y":4.5},
+ {"label":"K48 (B3,B4)", "x":8.25, "y":4.5},
+ {"label":"KA8 (F1,B4)", "x":9.25, "y":4.5},
+ {"label":"KA7 (F1,D7)", "x":10.25, "y":4.5},
+ {"label":"KA5 (F1,D4)", "x":11.25, "y":4.5},
+ {"label":"KA4 (F1,D5)", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"K92 (F4,D2)", "x":16.25, "y":4.5},
+ {"label":"K50 (B7,D0)", "x":0, "y":5.5, "w":1.5},
+ {"label":"K51 (B7,D1)", "x":1.5, "y":5.5},
+ {"label":"K52 (B7,D2)", "x":2.5, "y":5.5, "w":1.5},
+ {"label":"K56 (B7,D6)", "x":4, "y":5.5, "w":7},
+ {"label":"K57 (B7,D7)", "x":11, "y":5.5, "w":1.5},
+ {"label":"K54 (B7,D5)", "x":12.5, "y":5.5},
+ {"label":"K53 (B7,D3)", "x":13.5, "y":5.5, "w":1.5},
+ {"label":"KA6 (F1,D6)", "x":15.25, "y":5.5},
+ {"label":"KA2 (F1,D2)", "x":16.25, "y":5.5},
+ {"label":"KA1 (F1,D1)", "x":17.25, "y":5.5}
+ ]
+ }
+ }
+ ,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
+}
diff --git a/keyboards/exclusive/e85/keymaps/default/keymap.c b/keyboards/exclusive/e85/keymaps/default/keymap.c
new file mode 100644
index 00000000000..80f8e0eeb4b
--- /dev/null
+++ b/keyboards/exclusive/e85/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2020 MechMerlin
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MO(1), KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi_tsangan(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/exclusive/e85/keymaps/standard/keymap.c b/keyboards/exclusive/e85/keymaps/standard/keymap.c
new file mode 100644
index 00000000000..c6778180be1
--- /dev/null
+++ b/keyboards/exclusive/e85/keymaps/standard/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2020 MechMerlin
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi_standard(
+ 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, MO(1), KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi_standard(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/exclusive/e85/keymaps/tsangan/keymap.c b/keyboards/exclusive/e85/keymaps/tsangan/keymap.c
new file mode 100644
index 00000000000..80f8e0eeb4b
--- /dev/null
+++ b/keyboards/exclusive/e85/keymaps/tsangan/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2020 MechMerlin
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MO(1), KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi_tsangan(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/exclusive/e85/keymaps/via/config.h b/keyboards/exclusive/e85/keymaps/via/config.h
new file mode 100644
index 00000000000..78f3f6a6965
--- /dev/null
+++ b/keyboards/exclusive/e85/keymaps/via/config.h
@@ -0,0 +1 @@
+ #define DYNAMIC_KEYMAP_LAYER_COUNT 3
\ No newline at end of file
diff --git a/keyboards/exclusive/e85/keymaps/via/keymap.c b/keyboards/exclusive/e85/keymaps/via/keymap.c
new file mode 100644
index 00000000000..c55c35ce192
--- /dev/null
+++ b/keyboards/exclusive/e85/keymaps/via/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2020 MechMerlin
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, MO(1), KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi_tsangan(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RGB_MOD, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [2] = LAYOUT_ansi_tsangan(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/exclusive/e85/keymaps/via/rules.mk b/keyboards/exclusive/e85/keymaps/via/rules.mk
new file mode 100644
index 00000000000..29a6f75191f
--- /dev/null
+++ b/keyboards/exclusive/e85/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
\ No newline at end of file
diff --git a/keyboards/exclusive/e85/readme.md b/keyboards/exclusive/e85/readme.md
new file mode 100644
index 00000000000..fe5af17de8d
--- /dev/null
+++ b/keyboards/exclusive/e85/readme.md
@@ -0,0 +1,17 @@
+# Exclusive E8.5 Hotswap
+
+Custom hotswap PCB for Exclusive E8.5.
+
+The switch matrix is identical between all three PCB variants of this board. Choose the correct LAYOUT that best matches the physical LAYOUT of your PCB.
+
+* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+* Hardware Supported: E8.5 Hotswap/Soldered, atmega32u4
+* Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=103520)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make exclusive/e85:default
+
+**Reset Key**: The board can be reset by shorting the two holes underneath the PCB, or pressing the reset button on the reverse side.
+
+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/exclusive/e85/rules.mk b/keyboards/exclusive/e85/rules.mk
new file mode 100644
index 00000000000..e9c1ed8f1f8
--- /dev/null
+++ b/keyboards/exclusive/e85/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+LTO_ENABLE = yes
diff --git a/keyboards/exclusive/readme.md b/keyboards/exclusive/readme.md
index 486e07d99b2..bee613bf450 100644
--- a/keyboards/exclusive/readme.md
+++ b/keyboards/exclusive/readme.md
@@ -8,3 +8,4 @@ All files related to firmware of keyboards designed by Exclusive.
* [e6-v2](./e6v2/): maintainers [MechMerlin](https://github.com/mechmerlin), [amnesia0287](https://github.com/amnesia0287)
* [e7-v1](./e7v1): maintainer [masterzen](https://github.com/masterzen)
* [e6.5](./e65): maintainer [masterzen](https://github.com/masterzen)
+* [e8.5](./e85): maintainer [MechMerlin](https://github.com/mechmerlin)
diff --git a/keyboards/exent/rules.mk b/keyboards/exent/rules.mk
index 4f412573267..0bafc868149 100644
--- a/keyboards/exent/rules.mk
+++ b/keyboards/exent/rules.mk
@@ -21,6 +21,4 @@ BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
-OPT_DEFS = -DDEBUG_LEVEL=0
-
LAYOUTS = 65_ansi 65_iso
diff --git a/keyboards/facew/rules.mk b/keyboards/facew/rules.mk
index 81cfb758c05..72ccebf874c 100644
--- a/keyboards/facew/rules.mk
+++ b/keyboards/facew/rules.mk
@@ -21,6 +21,4 @@ BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
-OPT_DEFS = -DDEBUG_LEVEL=0
-
LAYOUTS = 60_ansi
diff --git a/keyboards/fallacy/config.h b/keyboards/fallacy/config.h
new file mode 100755
index 00000000000..6904b419eae
--- /dev/null
+++ b/keyboards/fallacy/config.h
@@ -0,0 +1,69 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter
+ */
+#define VENDOR_ID 0xBF00
+#define PRODUCT_ID 0xBFFA
+#define DEVICE_VER 0x0001
+#define MANUFACTURER SheuBox
+#define PRODUCT Fallacy
+#define DESCRIPTION Aluminum Alice Clone
+
+/* key matrix size
+ */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pins
+ */
+#define MATRIX_ROW_PINS { B1, B2, B3, C6, C7 }
+#define MATRIX_COL_PINS { E6, F0, F1, F4, F5, F6, F7, B6, B5, B4, D7, D6, D4, D5, D3 }
+#define UNUSED_PINS { B0, B7 }
+
+/* COL2ROW or ROW2COL
+ */
+#define DIODE_DIRECTION COL2ROW
+
+/* IS31FL3731 driver address (for status LEDs)
+ * Using the default defines here, but using a custom implementation
+ */
+#define LED_DRIVER_ADDR_1 0b1110100
+#define LED_DRIVER_COUNT 1
+#define LED_DRIVER_LED_COUNT 3
+
+/* Set 0 if debouncing isn't needed
+ */
+#define DEBOUNCE 5
+
+/* 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
+
+/* prevent stuck modifiers
+ */
+#define PREVENT_STUCK_MODIFIERS
+
+#define RGB_DI_PIN D2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
diff --git a/keyboards/fallacy/fallacy.c b/keyboards/fallacy/fallacy.c
new file mode 100755
index 00000000000..103860f0f81
--- /dev/null
+++ b/keyboards/fallacy/fallacy.c
@@ -0,0 +1,40 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+
+#include "fallacy.h"
+#include "indicators.h"
+
+void matrix_init_kb(void) {
+ init_fallacy_leds();
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ update_fallacy_leds();
+ matrix_scan_user();
+}
+
+/* update LED driver with usb led_state
+ */
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ set_fallacy_led(2, led_state.caps_lock); /* caps */
+ set_fallacy_led(1, led_state.num_lock); /* num lock */
+ set_fallacy_led(0, led_state.scroll_lock); /* scroll lock */
+ }
+ return res;
+}
diff --git a/keyboards/fallacy/fallacy.h b/keyboards/fallacy/fallacy.h
new file mode 100755
index 00000000000..46480e66882
--- /dev/null
+++ b/keyboards/fallacy/fallacy.h
@@ -0,0 +1,54 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+/* All keys in matrix active:
+ * - Split Backspace
+ * - Split Right Shift
+ */
+#define LAYOUT_all( \
+ K100, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K200, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K300, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
+ K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
+ K401, K403, K405, K406, K408, K410, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+ { KC_NO, K401, KC_NO, K403, KC_NO, K405, K406, KC_NO, K408, KC_NO, K410, KC_NO, KC_NO, KC_NO, K414 } \
+}
+
+/* Disable position 013 and 314 for:
+ * - Full size Backspace
+ * - Full size Right Shift
+ */
+#define LAYOUT_default( \
+ K100, K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
+ K200, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K300, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
+ K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
+ K401, K403, K405, K406, K408, K410, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+ { KC_NO, K401, KC_NO, K403, KC_NO, K405, K406, KC_NO, K408, KC_NO, K410, KC_NO, KC_NO, KC_NO, K414 } \
+}
diff --git a/keyboards/fallacy/indicators.c b/keyboards/fallacy/indicators.c
new file mode 100755
index 00000000000..deda752faab
--- /dev/null
+++ b/keyboards/fallacy/indicators.c
@@ -0,0 +1,61 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+
+#include "indicators.h"
+#include "drivers/issi/is31fl3731-simple.h"
+#include "i2c_master.h"
+
+/* Set up IS31FL3731 for use in powering indicator LEDs. Absolutely overkill for this job but it was already in the design.
+ * init IS31FL3731 and i2c
+ */
+void init_fallacy_leds(void) {
+ i2c_init();
+ IS31FL3731_init(LED_DRIVER_ADDR_1);
+
+ for (int i = 0; i < LED_DRIVER_LED_COUNT; i++) {
+ IS31FL3731_set_led_control_register(i, true);
+ }
+
+ IS31FL3731_update_led_control_registers(LED_DRIVER_ADDR_1, 0);
+}
+
+
+/* update the buffer
+ */
+void update_fallacy_leds(void) {
+ IS31FL3731_update_pwm_buffers(LED_DRIVER_ADDR_1, 0);
+}
+
+
+/* wrapper to actually set the LED PWM
+ */
+void set_fallacy_led(int index, bool state) {
+ if (state) {
+ IS31FL3731_set_value(index, 128);
+ }
+ else {
+ IS31FL3731_set_value(index, 0);
+ }
+}
+
+
+/* define LED matrix
+ */
+const is31_led g_is31_leds[LED_DRIVER_LED_COUNT] = {
+ {0, C1_1},
+ {0, C2_1},
+ {0, C3_1},
+};
diff --git a/keyboards/fallacy/indicators.h b/keyboards/fallacy/indicators.h
new file mode 100755
index 00000000000..6de374cda8e
--- /dev/null
+++ b/keyboards/fallacy/indicators.h
@@ -0,0 +1,23 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+
+void init_fallacy_leds(void);
+void update_fallacy_leds(void);
+void set_fallacy_led(int index, bool state);
diff --git a/keyboards/fallacy/info.json b/keyboards/fallacy/info.json
new file mode 100644
index 00000000000..fe30e1bfe26
--- /dev/null
+++ b/keyboards/fallacy/info.json
@@ -0,0 +1,147 @@
+{
+ "keyboard_name": "Fallacy",
+ "maintainer": "Toraifu",
+ "width": 18.75,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"Esc", "x":0.5, "y":0},
+ {"label":"~", "x":1.75, "y":0},
+ {"label":"!", "x":2.75, "y":0},
+ {"label":"@", "x":3.75, "y":0},
+ {"label":"#", "x":4.75, "y":0},
+ {"label":"$", "x":5.75, "y":0},
+ {"label":"%", "x":6.75, "y":0},
+ {"label":"^", "x":7.75, "y":0},
+ {"label":"&", "x":10, "y":0},
+ {"label":"*", "x":11, "y":0},
+ {"label":"(", "x":12, "y":0},
+ {"label":")", "x":13, "y":0},
+ {"label":"_", "x":14, "y":0},
+ {"label":"+", "x":15, "y":0},
+ {"label":"|", "x":16, "y":0},
+ {"label":"~", "x":17, "y":0},
+ {"label":"PgUp", "x":0.25, "y":1},
+ {"label":"Tab", "x":1.5, "y":1, "w":1.5},
+ {"label":"Q", "x":3, "y":1},
+ {"label":"W", "x":4, "y":1},
+ {"label":"E", "x":5, "y":1},
+ {"label":"R", "x":6, "y":1},
+ {"label":"T", "x":7, "y":1},
+ {"label":"Y", "x":9.75, "y":1},
+ {"label":"U", "x":10.75, "y":1},
+ {"label":"I", "x":11.75, "y":1},
+ {"label":"O", "x":12.75, "y":1},
+ {"label":"P", "x":13.75, "y":1},
+ {"label":"{", "x":14.75, "y":1},
+ {"label":"}", "x":15.75, "y":1},
+ {"label":"Backspace", "x":16.75, "y":1, "w":1.5},
+ {"label":"PgDn", "x":0, "y":2},
+ {"label":"Control", "x":1.25, "y":2, "w":1.75},
+ {"label":"A", "x":3, "y":2},
+ {"label":"S", "x":4, "y":2},
+ {"label":"D", "x":5, "y":2},
+ {"label":"F", "x":6, "y":2},
+ {"label":"G", "x":7, "y":2},
+ {"label":"H", "x":10.25, "y":2},
+ {"label":"J", "x":11.25, "y":2},
+ {"label":"K", "x":12.25, "y":2},
+ {"label":"L", "x":13.25, "y":2},
+ {"label":":", "x":14.25, "y":2},
+ {"label":"\"", "x":15.25, "y":2},
+ {"label":"Enter", "x":16.25, "y":2, "w":2.25},
+ {"label":"Shift", "x":1, "y":3, "w":2.25},
+ {"label":"Z", "x":3.25, "y":3},
+ {"label":"X", "x":4.25, "y":3},
+ {"label":"C", "x":5.25, "y":3},
+ {"label":"V", "x":6.25, "y":3},
+ {"label":"B", "x":7.25, "y":3},
+ {"label":"B", "x":10, "y":3},
+ {"label":"N", "x":11, "y":3},
+ {"label":"M", "x":12, "y":3},
+ {"label":"<", "x":13, "y":3},
+ {"label":">", "x":14, "y":3},
+ {"label":"?", "x":15, "y":3},
+ {"label":"Shift", "x":16, "y":3, "w":1.75},
+ {"label":"Fn1", "x":17.75, "y":3},
+ {"label":"Ctrl", "x":1, "y":4, "w":1.5},
+ {"label":"Alt", "x":4, "y":4, "w":1.5},
+ {"label":"LSpace", "x":5.5, "y":4, "w":2.25},
+ {"label":"Fn2", "x":7.75, "y":4},
+ {"label":"RSpace", "x":10, "y":4, "w":2.75},
+ {"label":"RAlt", "x":12.75, "y":4, "w":1.5},
+ {"label":"RCtl", "x":17, "y":4, "w":1.5}
+ ]
+ },
+ "LAYOUT_default": {
+ "layout": [
+ {"label":"Esc", "x":0.5, "y":0},
+ {"label":"~", "x":1.75, "y":0},
+ {"label":"!", "x":2.75, "y":0},
+ {"label":"@", "x":3.75, "y":0},
+ {"label":"#", "x":4.75, "y":0},
+ {"label":"$", "x":5.75, "y":0},
+ {"label":"%", "x":6.75, "y":0},
+ {"label":"^", "x":7.75, "y":0},
+ {"label":"&", "x":10, "y":0},
+ {"label":"*", "x":11, "y":0},
+ {"label":"(", "x":12, "y":0},
+ {"label":")", "x":13, "y":0},
+ {"label":"_", "x":14, "y":0},
+ {"label":"+", "x":15, "y":0},
+ {"label":"Backspace", "x":16, "y":0, "w":2},
+ {"label":"PgUp", "x":0.25, "y":1},
+ {"label":"Tab", "x":1.5, "y":1, "w":1.5},
+ {"label":"Q", "x":3, "y":1},
+ {"label":"W", "x":4, "y":1},
+ {"label":"E", "x":5, "y":1},
+ {"label":"R", "x":6, "y":1},
+ {"label":"T", "x":7, "y":1},
+ {"label":"Y", "x":9.75, "y":1},
+ {"label":"U", "x":10.75, "y":1},
+ {"label":"I", "x":11.75, "y":1},
+ {"label":"O", "x":12.75, "y":1},
+ {"label":"P", "x":13.75, "y":1},
+ {"label":"{", "x":14.75, "y":1},
+ {"label":"}", "x":15.75, "y":1},
+ {"label":"Backspace", "x":16.75, "y":1, "w":1.5},
+ {"label":"PgDn", "x":0, "y":2},
+ {"label":"Control", "x":1.25, "y":2, "w":1.75},
+ {"label":"A", "x":3, "y":2},
+ {"label":"S", "x":4, "y":2},
+ {"label":"D", "x":5, "y":2},
+ {"label":"F", "x":6, "y":2},
+ {"label":"G", "x":7, "y":2},
+ {"label":"H", "x":10.25, "y":2},
+ {"label":"J", "x":11.25, "y":2},
+ {"label":"K", "x":12.25, "y":2},
+ {"label":"L", "x":13.25, "y":2},
+ {"label":":", "x":14.25, "y":2},
+ {"label":"\"", "x":15.25, "y":2},
+ {"label":"Enter", "x":16.25, "y":2, "w":2.25},
+ {"label":"Shift", "x":1, "y":3, "w":2.25},
+ {"label":"Z", "x":3.25, "y":3},
+ {"label":"X", "x":4.25, "y":3},
+ {"label":"C", "x":5.25, "y":3},
+ {"label":"V", "x":6.25, "y":3},
+ {"label":"B", "x":7.25, "y":3},
+ {"label":"B", "x":10, "y":3},
+ {"label":"N", "x":11, "y":3},
+ {"label":"M", "x":12, "y":3},
+ {"label":"<", "x":13, "y":3},
+ {"label":">", "x":14, "y":3},
+ {"label":"?", "x":15, "y":3},
+ {"label":"Shift", "x":16, "y":3, "w":1.75},
+ {"label":"Fn1", "x":17.75, "y":3},
+ {"label":"Ctrl", "x":1, "y":4, "w":1.5},
+ {"label":"Alt", "x":4, "y":4, "w":1.5},
+ {"label":"LSpace", "x":5.5, "y":4, "w":2.25},
+ {"label":"Fn2", "x":7.75, "y":4},
+ {"label":"RSpace", "x":10, "y":4, "w":2.75},
+ {"label":"RAlt", "x":12.75, "y":4, "w":1.5},
+ {"label":"RCtl", "x":17, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/fallacy/keymaps/default/keymap.c b/keyboards/fallacy/keymaps/default/keymap.c
new file mode 100755
index 00000000000..d0e32c42c9c
--- /dev/null
+++ b/keyboards/fallacy/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_default(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_RGUI, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL),
+
+ [1] = LAYOUT_default(
+ KC_TRNS, RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/fallacy/keymaps/default_split_bs/keymap.c b/keyboards/fallacy/keymaps/default_split_bs/keymap.c
new file mode 100755
index 00000000000..957e876c4bb
--- /dev/null
+++ b/keyboards/fallacy/keymaps/default_split_bs/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_RGUI, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/fallacy/keymaps/via/keymap.c b/keyboards/fallacy/keymaps/via/keymap.c
new file mode 100755
index 00000000000..d6a7b0744d9
--- /dev/null
+++ b/keyboards/fallacy/keymaps/via/keymap.c
@@ -0,0 +1,47 @@
+/* Copyright 2020 B. Fletcher (toraifu)
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_RGUI, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/fallacy/keymaps/via/rules.mk b/keyboards/fallacy/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/fallacy/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/fallacy/readme.md b/keyboards/fallacy/readme.md
new file mode 100644
index 00000000000..e4a74de5279
--- /dev/null
+++ b/keyboards/fallacy/readme.md
@@ -0,0 +1,21 @@
+# Fallacy
+
+
+ A PCB designed for the Fallacy custom keyboard, but fully compatible with the Alice and its clones.
+
+* Keyboard Maintainer: [toraifu](https://github.com/toraifu)
+* Hardware: [geekhack](https://geekhack.org/index.php?topic=103728.0)
+* Other general info: [fallacy](https://github.com/toraifu/fallacy)
+
+### Features:
+* VIA support
+* As minimal as possible design (no in-switch LEDs)
+* Support for the use of fourteen WS2812B RGB-LEDs for keyboards for which underglow is desired.
+* Misc features such as ESD protection, indicator LEDs, etc.
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fallacy: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/fallacy/rules.mk b/keyboards/fallacy/rules.mk
new file mode 100755
index 00000000000..1ab94f774eb
--- /dev/null
+++ b/keyboards/fallacy/rules.mk
@@ -0,0 +1,29 @@
+# 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 = yes # 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 = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+# project specific files
+SRC += indicators.c \
+ drivers/issi/is31fl3731-simple.c
+QUANTUM_LIB_SRC += i2c_master.c
diff --git a/keyboards/fc660c/config.h b/keyboards/fc660c/config.h
index e55896e6c91..bba402ca48b 100644
--- a/keyboards/fc660c/config.h
+++ b/keyboards/fc660c/config.h
@@ -21,15 +21,15 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
+#define VENDOR_ID 0x4853 /* HS */
#define PRODUCT_ID 0x660C
#define DEVICE_VER 0x0100
-#define MANUFACTURER QMK
-#define PRODUCT Leopold FC660C with QMK
+#define MANUFACTURER Hasu
+#define PRODUCT FC660C
#define DESCRIPTION Leopold FC660C with Hasu alternative controller using QMK
/* key matrix size */
-#define MATRIX_ROWS 8
+#define MATRIX_ROWS 5
#define MATRIX_COLS 16
//#define DIODE_DIRECTION
diff --git a/keyboards/fc660c/fc660c.h b/keyboards/fc660c/fc660c.h
index 63c4029c0dd..e3621570dd1 100644
--- a/keyboards/fc660c/fc660c.h
+++ b/keyboards/fc660c/fc660c.h
@@ -36,13 +36,7 @@ along with this program. If not, see .
{ KC_NO, K31, K32, K33, K34, K35, K36, K37, \
K38, K39, K3A, K3B, K3C, K3D, KC_NO, KC_NO }, \
{ K40, K41, K42, K43, K44, K45, K46, K47, \
- K48, K49, K4A, K4B, KC_NO, KC_NO, K4E, 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, KC_NO, KC_NO, KC_NO } \
+ K48, K49, K4A, K4B, KC_NO, KC_NO, K4E, KC_NO } \
}
/*
KEYMAP(
diff --git a/keyboards/fc660c/keymaps/via/README.md b/keyboards/fc660c/keymaps/via/README.md
new file mode 100644
index 00000000000..c1ce51b7f3a
--- /dev/null
+++ b/keyboards/fc660c/keymaps/via/README.md
@@ -0,0 +1,5 @@
+# The default keymap for the FC660C with Via enabled
+
+Emulates original keymap.
+
+
\ No newline at end of file
diff --git a/keyboards/fc660c/keymaps/via/keymap.c b/keyboards/fc660c/keymaps/via/keymap.c
new file mode 100644
index 00000000000..6de89329e30
--- /dev/null
+++ b/keyboards/fc660c/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+/*
+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 .
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS,
+ 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_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(1), 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,KC_SLCK,KC_PAUS,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,KC_PGUP,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,KC_END, KC_PGDN,_______,_______, _______,
+ _______,_______,_______, _______, _______,_______,_______, _______,_______,_______
+ ),
+ [2] = LAYOUT(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______, _______, _______,_______,_______, _______,_______,_______
+ ),
+ [3] = LAYOUT(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,
+ _______,_______,_______, _______, _______,_______,_______, _______,_______,_______
+ )
+};
diff --git a/keyboards/fc660c/keymaps/via/rules.mk b/keyboards/fc660c/keymaps/via/rules.mk
new file mode 100644
index 00000000000..43061db1dd4
--- /dev/null
+++ b/keyboards/fc660c/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/fc660c/rules.mk b/keyboards/fc660c/rules.mk
index 3a3ac4e5d27..54fadc82645 100644
--- a/keyboards/fc660c/rules.mk
+++ b/keyboards/fc660c/rules.mk
@@ -15,11 +15,11 @@ BOOTLOADER = atmel-dfu
# comment out to disable the options.
#
# BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
-MOUSEKEY_ENABLE ?= yes # Mouse keys
-EXTRAKEY_ENABLE ?= yes # Audio control and System control
-CONSOLE_ENABLE ?= yes # Console for debug
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= yes # USB Nkey Rollover - not yet supported in LUFA
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
# Optimize size but this may cause error "relocation truncated to fit"
#EXTRALDFLAGS = -Wl,--relax
diff --git a/keyboards/foxlab/key65/hotswap/config.h b/keyboards/foxlab/key65/hotswap/config.h
new file mode 100644
index 00000000000..b6551f5a862
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/config.h
@@ -0,0 +1,172 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x464C // "FL"
+#define PRODUCT_ID 0x0003
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Fox Lab
+#define PRODUCT Key 65 Hotswap
+#define DESCRIPTION Key 65 Hotswap
+
+/* 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, D1, D0, D3, B3 }
+#define MATRIX_COL_PINS { F5, F4, F1, F0, B0, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 8
+ #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 */
+ #define RGBLIGHT_ANIMATIONS
+#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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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/foxlab/key65/hotswap/hotswap.c b/keyboards/foxlab/key65/hotswap/hotswap.c
new file mode 100644
index 00000000000..6b3950d3612
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/hotswap.c
@@ -0,0 +1,34 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#include "hotswap.h"
+
+void keyboard_pre_init_kb(void) {
+ led_init_ports();
+ keyboard_pre_init_user();
+}
+
+void led_init_ports(void) {
+ setPinOutput(E6);
+ writePinHigh(E6);
+}
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(E6, !led_state.caps_lock);
+ }
+ return true;
+}
diff --git a/keyboards/foxlab/key65/hotswap/hotswap.h b/keyboards/foxlab/key65/hotswap/hotswap.h
new file mode 100644
index 00000000000..878a61bcef0
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/hotswap.h
@@ -0,0 +1,33 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ 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, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K47, 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, KC_NO, K2E }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E }, \
+}
diff --git a/keyboards/foxlab/key65/hotswap/info.json b/keyboards/foxlab/key65/hotswap/info.json
new file mode 100644
index 00000000000..99e5615dfe9
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "Key 65 Hotswap",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 66,
+ "layout": [
+ {"label":"K00 (D2,F5)", "x":0, "y":0},
+ {"label":"K01 (D2,F4)", "x":1, "y":0},
+ {"label":"K02 (D2,F1)", "x":2, "y":0},
+ {"label":"K03 (D2,F0)", "x":3, "y":0},
+ {"label":"K04 (D2,B0)", "x":4, "y":0},
+ {"label":"K05 (D2,F6)", "x":5, "y":0},
+ {"label":"K06 (D2,F7)", "x":6, "y":0},
+ {"label":"K07 (D2,C7)", "x":7, "y":0},
+ {"label":"K08 (D2,C6)", "x":8, "y":0},
+ {"label":"K09 (D2,B6)", "x":9, "y":0},
+ {"label":"K0A (D2,B5)", "x":10, "y":0},
+ {"label":"K0B (D2,B4)", "x":11, "y":0},
+ {"label":"K0C (D2,D7)", "x":12, "y":0},
+ {"label":"K0D (D2,D6)", "x":13, "y":0, "w":2},
+ {"label":"K0E (D2,D4)", "x":15, "y":0},
+ {"label":"K10 (D1,F5)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (D1,F4)", "x":1.5, "y":1},
+ {"label":"K12 (D1,F1)", "x":2.5, "y":1},
+ {"label":"K13 (D1,F0)", "x":3.5, "y":1},
+ {"label":"K14 (D1,B0)", "x":4.5, "y":1},
+ {"label":"K15 (D1,F6)", "x":5.5, "y":1},
+ {"label":"K16 (D1,F7)", "x":6.5, "y":1},
+ {"label":"K17 (D1,C7)", "x":7.5, "y":1},
+ {"label":"K18 (D1,C6)", "x":8.5, "y":1},
+ {"label":"K19 (D1,B6)", "x":9.5, "y":1},
+ {"label":"K1A (D1,B5)", "x":10.5, "y":1},
+ {"label":"K1B (D1,B4)", "x":11.5, "y":1},
+ {"label":"K1C (D1,D7)", "x":12.5, "y":1},
+ {"label":"K1D (D1,D6)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1E (D1,D4)", "x":15, "y":1},
+ {"label":"K20 (D0,F5)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (D0,F4)", "x":1.75, "y":2},
+ {"label":"K22 (D0,F1)", "x":2.75, "y":2},
+ {"label":"K23 (D0,F0)", "x":3.75, "y":2},
+ {"label":"K24 (D0,B0)", "x":4.75, "y":2},
+ {"label":"K25 (D0,F6)", "x":5.75, "y":2},
+ {"label":"K26 (D0,F7)", "x":6.75, "y":2},
+ {"label":"K27 (D0,C7)", "x":7.75, "y":2},
+ {"label":"K28 (D0,C6)", "x":8.75, "y":2},
+ {"label":"K29 (D0,B6)", "x":9.75, "y":2},
+ {"label":"K2A (D0,B5)", "x":10.75, "y":2},
+ {"label":"K2B (D0,B4)", "x":11.75, "y":2},
+ {"label":"K2C (D0,D7)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2E (D0,D4)", "x":15, "y":2},
+ {"label":"K30 (D3,F5)", "x":0, "y":3, "w":2.25},
+ {"label":"K32 (D3,F1)", "x":2.25, "y":3},
+ {"label":"K33 (D3,F0)", "x":3.25, "y":3},
+ {"label":"K34 (D3,B0)", "x":4.25, "y":3},
+ {"label":"K35 (D3,F6)", "x":5.25, "y":3},
+ {"label":"K36 (D3,F7)", "x":6.25, "y":3},
+ {"label":"K37 (D3,C7)", "x":7.25, "y":3},
+ {"label":"K38 (D3,C6)", "x":8.25, "y":3},
+ {"label":"K39 (D3,B6)", "x":9.25, "y":3},
+ {"label":"K3A (D3,B5)", "x":10.25, "y":3},
+ {"label":"K3B (D3,B4)", "x":11.25, "y":3},
+ {"label":"K3C (D3,D7)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (D3,D6)", "x":14, "y":3},
+ {"label":"K3E (D3,D4)", "x":15, "y":3},
+ {"label":"K40 (B3,F5)", "x":0, "y":4, "w":1.5},
+ {"label":"K41 (B3,F4)", "x":1.5, "y":4},
+ {"label":"K42 (B3,F1)", "x":2.5, "y":4, "w":1.5},
+ {"label":"K47 (B3,C7)", "x":4, "y":4, "w":7},
+ {"label":"K4B (B3,B4)", "x":11, "y":4, "w":1.5},
+ {"label":"K4C (B3,D7)", "x":13, "y":4},
+ {"label":"K4D (B3,D6)", "x":14, "y":4},
+ {"label":"K4E (B3,D4)", "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/foxlab/key65/hotswap/keymaps/default/keymap.c b/keyboards/foxlab/key65/hotswap/keymaps/default/keymap.c
new file mode 100644
index 00000000000..956b7ac2ee4
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
diff --git a/keyboards/foxlab/key65/hotswap/keymaps/via/keymap.c b/keyboards/foxlab/key65/hotswap/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9bc43b766e9
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/foxlab/key65/hotswap/keymaps/via/rules.mk b/keyboards/foxlab/key65/hotswap/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/foxlab/key65/hotswap/readme.md b/keyboards/foxlab/key65/hotswap/readme.md
new file mode 100644
index 00000000000..61a6b6d924a
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/readme.md
@@ -0,0 +1,18 @@
+# Foxlab Key 65 Hotswap
+
+
+
+Key 65 is featured with the three-layer case and dual-gasket structure. The plate mounting system is an improved version of the gasket sandwich on Leaf 60. In addition, we add gaskets between the middle case and the bottom case. There's an optional rubber sheet between the PCB and the plate. The numerous options will offer you the most freedom to make the keyboard look and feel as you wish.
+
+* Keyboard Maintainer: QMK
+* Hardware Supported: Key 65 Hotswap PCB
+* Hardware Availability: [Group Buy](https://geekhack.org/index.php?topic=102609.0)
+
+This version is for the hotswap variant with the fixed layout below:
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make foxlab/key65/hotswap: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/foxlab/key65/hotswap/rules.mk b/keyboards/foxlab/key65/hotswap/rules.mk
new file mode 100644
index 00000000000..15ccf06490e
--- /dev/null
+++ b/keyboards/foxlab/key65/hotswap/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+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 = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/foxlab/key65/universal/config.h b/keyboards/foxlab/key65/universal/config.h
new file mode 100644
index 00000000000..10efc25d1ab
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/config.h
@@ -0,0 +1,172 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x464C // "FL"
+#define PRODUCT_ID 0x0004
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Fox Lab
+#define PRODUCT Key 65 Universal
+#define DESCRIPTION Key 65 Universal
+
+/* 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 { D0, D1, F0, F4, F1 }
+#define MATRIX_COL_PINS { B1, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2, B0 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN E2
+#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 */
+ #define RGBLIGHT_ANIMATIONS
+#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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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/foxlab/key65/universal/info.json b/keyboards/foxlab/key65/universal/info.json
new file mode 100644
index 00000000000..ce95ecd8cc6
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/info.json
@@ -0,0 +1,306 @@
+{
+ "keyboard_name": "Key 65 Universal",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "key_count": 68,
+ "layout": [
+ {"label":"K00 (D0,B1)", "x":0, "y":0},
+ {"label":"K01 (D0,F5)", "x":1, "y":0},
+ {"label":"K02 (D0,F6)", "x":2, "y":0},
+ {"label":"K03 (D0,F7)", "x":3, "y":0},
+ {"label":"K04 (D0,C7)", "x":4, "y":0},
+ {"label":"K05 (D0,C6)", "x":5, "y":0},
+ {"label":"K06 (D0,B6)", "x":6, "y":0},
+ {"label":"K07 (D0,B5)", "x":7, "y":0},
+ {"label":"K08 (D0,B4)", "x":8, "y":0},
+ {"label":"K09 (D0,D7)", "x":9, "y":0},
+ {"label":"K0A (D0,D6)", "x":10, "y":0},
+ {"label":"K0B (D0,D4)", "x":11, "y":0},
+ {"label":"K0C (D0,D5)", "x":12, "y":0},
+ {"label":"K0D (D0,D3)", "x":13, "y":0},
+ {"label":"K0E (D0,D2)", "x":14, "y":0},
+ {"label":"K0F (D0,B0)", "x":15, "y":0},
+ {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (D1,F5)", "x":1.5, "y":1},
+ {"label":"K12 (D1,F6)", "x":2.5, "y":1},
+ {"label":"K13 (D1,F7)", "x":3.5, "y":1},
+ {"label":"K14 (D1,C7)", "x":4.5, "y":1},
+ {"label":"K15 (D1,C6)", "x":5.5, "y":1},
+ {"label":"K16 (D1,B6)", "x":6.5, "y":1},
+ {"label":"K17 (D1,B5)", "x":7.5, "y":1},
+ {"label":"K18 (D1,B4)", "x":8.5, "y":1},
+ {"label":"K19 (D1,D7)", "x":9.5, "y":1},
+ {"label":"K1A (D1,D6)", "x":10.5, "y":1},
+ {"label":"K1B (D1,D4)", "x":11.5, "y":1},
+ {"label":"K1C (D1,D5)", "x":12.5, "y":1},
+ {"label":"K1D (D1,D3)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1F (D1,B0)", "x":15, "y":1},
+ {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (F0,F5)", "x":1.75, "y":2},
+ {"label":"K22 (F0,F6)", "x":2.75, "y":2},
+ {"label":"K23 (F0,F7)", "x":3.75, "y":2},
+ {"label":"K24 (F0,C7)", "x":4.75, "y":2},
+ {"label":"K25 (F0,C6)", "x":5.75, "y":2},
+ {"label":"K26 (F0,B6)", "x":6.75, "y":2},
+ {"label":"K27 (F0,B5)", "x":7.75, "y":2},
+ {"label":"K28 (F0,B4)", "x":8.75, "y":2},
+ {"label":"K29 (F0,D7)", "x":9.75, "y":2},
+ {"label":"K2A (F0,D6)", "x":10.75, "y":2},
+ {"label":"K2B (F0,D4)", "x":11.75, "y":2},
+ {"label":"K2D (F0,D3)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2F (F0,B0)", "x":15, "y":2},
+ {"label":"K30 (F4,B1)", "x":0, "y":3, "w":2.25},
+ {"label":"K32 (F4,F6)", "x":2.25, "y":3},
+ {"label":"K33 (F4,F7)", "x":3.25, "y":3},
+ {"label":"K34 (F4,C7)", "x":4.25, "y":3},
+ {"label":"K35 (F4,C6)", "x":5.25, "y":3},
+ {"label":"K36 (F4,B6)", "x":6.25, "y":3},
+ {"label":"K37 (F4,B5)", "x":7.25, "y":3},
+ {"label":"K38 (F4,B4)", "x":8.25, "y":3},
+ {"label":"K39 (F4,D7)", "x":9.25, "y":3},
+ {"label":"K3A (F4,D6)", "x":10.25, "y":3},
+ {"label":"K3B (F4,D4)", "x":11.25, "y":3},
+ {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (F4,D3)", "x":14, "y":3},
+ {"label":"K3F (F4,B0)", "x":15, "y":3},
+ {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (F1,F5)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K46 (F1,B6)", "x":3.75, "y":4, "w":6.25},
+ {"label":"K4A (F1,D6)", "x":10, "y":4, "w":1.25},
+ {"label":"K4B (F1,D4)", "x":11.25, "y":4, "w":1.25},
+ {"label":"K4C (F1,D5)", "x":13, "y":4},
+ {"label":"K4D (F1,D3)", "x":14, "y":4},
+ {"label":"K4F (F1,B0)", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_tsangan_split_bs": {
+ "key_count": 67,
+ "layout": [
+ {"label":"K00 (D0,B1)", "x":0, "y":0},
+ {"label":"K01 (D0,F5)", "x":1, "y":0},
+ {"label":"K02 (D0,F6)", "x":2, "y":0},
+ {"label":"K03 (D0,F7)", "x":3, "y":0},
+ {"label":"K04 (D0,C7)", "x":4, "y":0},
+ {"label":"K05 (D0,C6)", "x":5, "y":0},
+ {"label":"K06 (D0,B6)", "x":6, "y":0},
+ {"label":"K07 (D0,B5)", "x":7, "y":0},
+ {"label":"K08 (D0,B4)", "x":8, "y":0},
+ {"label":"K09 (D0,D7)", "x":9, "y":0},
+ {"label":"K0A (D0,D6)", "x":10, "y":0},
+ {"label":"K0B (D0,D4)", "x":11, "y":0},
+ {"label":"K0C (D0,D5)", "x":12, "y":0},
+ {"label":"K0D (D0,D3)", "x":13, "y":0},
+ {"label":"K0E (D0,D2)", "x":14, "y":0},
+ {"label":"K0F (D0,B0)", "x":15, "y":0},
+ {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (D1,F5)", "x":1.5, "y":1},
+ {"label":"K12 (D1,F6)", "x":2.5, "y":1},
+ {"label":"K13 (D1,F7)", "x":3.5, "y":1},
+ {"label":"K14 (D1,C7)", "x":4.5, "y":1},
+ {"label":"K15 (D1,C6)", "x":5.5, "y":1},
+ {"label":"K16 (D1,B6)", "x":6.5, "y":1},
+ {"label":"K17 (D1,B5)", "x":7.5, "y":1},
+ {"label":"K18 (D1,B4)", "x":8.5, "y":1},
+ {"label":"K19 (D1,D7)", "x":9.5, "y":1},
+ {"label":"K1A (D1,D6)", "x":10.5, "y":1},
+ {"label":"K1B (D1,D4)", "x":11.5, "y":1},
+ {"label":"K1C (D1,D5)", "x":12.5, "y":1},
+ {"label":"K1D (D1,D3)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1F (D1,B0)", "x":15, "y":1},
+ {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (F0,F5)", "x":1.75, "y":2},
+ {"label":"K22 (F0,F6)", "x":2.75, "y":2},
+ {"label":"K23 (F0,F7)", "x":3.75, "y":2},
+ {"label":"K24 (F0,C7)", "x":4.75, "y":2},
+ {"label":"K25 (F0,C6)", "x":5.75, "y":2},
+ {"label":"K26 (F0,B6)", "x":6.75, "y":2},
+ {"label":"K27 (F0,B5)", "x":7.75, "y":2},
+ {"label":"K28 (F0,B4)", "x":8.75, "y":2},
+ {"label":"K29 (F0,D7)", "x":9.75, "y":2},
+ {"label":"K2A (F0,D6)", "x":10.75, "y":2},
+ {"label":"K2B (F0,D4)", "x":11.75, "y":2},
+ {"label":"K2D (F0,D3)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2F (F0,B0)", "x":15, "y":2},
+ {"label":"K30 (F4,B1)", "x":0, "y":3, "w":2.25},
+ {"label":"K32 (F4,F6)", "x":2.25, "y":3},
+ {"label":"K33 (F4,F7)", "x":3.25, "y":3},
+ {"label":"K34 (F4,C7)", "x":4.25, "y":3},
+ {"label":"K35 (F4,C6)", "x":5.25, "y":3},
+ {"label":"K36 (F4,B6)", "x":6.25, "y":3},
+ {"label":"K37 (F4,B5)", "x":7.25, "y":3},
+ {"label":"K38 (F4,B4)", "x":8.25, "y":3},
+ {"label":"K39 (F4,D7)", "x":9.25, "y":3},
+ {"label":"K3A (F4,D6)", "x":10.25, "y":3},
+ {"label":"K3B (F4,D4)", "x":11.25, "y":3},
+ {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (F4,D3)", "x":14, "y":3},
+ {"label":"K3F (F4,B0)", "x":15, "y":3},
+ {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.5},
+ {"label":"K41 (F1,F5)", "x":1.5, "y":4},
+ {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.5},
+ {"label":"K46 (F1,B6)", "x":4, "y":4, "w":7},
+ {"label":"K4A (F1,D6)", "x":11, "y":4, "w":1.5},
+ {"label":"K4C (F1,D5)", "x":13, "y":4},
+ {"label":"K4D (F1,D3)", "x":14, "y":4},
+ {"label":"K4F (F1,B0)", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_iso_all": {
+ "key_count": 71,
+ "layout": [
+ {"label":"K00 (D0,B1)", "x":0, "y":0},
+ {"label":"K01 (D0,F5)", "x":1, "y":0},
+ {"label":"K02 (D0,F6)", "x":2, "y":0},
+ {"label":"K03 (D0,F7)", "x":3, "y":0},
+ {"label":"K04 (D0,C7)", "x":4, "y":0},
+ {"label":"K05 (D0,C6)", "x":5, "y":0},
+ {"label":"K06 (D0,B6)", "x":6, "y":0},
+ {"label":"K07 (D0,B5)", "x":7, "y":0},
+ {"label":"K08 (D0,B4)", "x":8, "y":0},
+ {"label":"K09 (D0,D7)", "x":9, "y":0},
+ {"label":"K0A (D0,D6)", "x":10, "y":0},
+ {"label":"K0B (D0,D4)", "x":11, "y":0},
+ {"label":"K0C (D0,D5)", "x":12, "y":0},
+ {"label":"K0D (D0,D3)", "x":13, "y":0},
+ {"label":"K0E (D0,D2)", "x":14, "y":0},
+ {"label":"K0F (D0,B0)", "x":15, "y":0},
+ {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (D1,F5)", "x":1.5, "y":1},
+ {"label":"K12 (D1,F6)", "x":2.5, "y":1},
+ {"label":"K13 (D1,F7)", "x":3.5, "y":1},
+ {"label":"K14 (D1,C7)", "x":4.5, "y":1},
+ {"label":"K15 (D1,C6)", "x":5.5, "y":1},
+ {"label":"K16 (D1,B6)", "x":6.5, "y":1},
+ {"label":"K17 (D1,B5)", "x":7.5, "y":1},
+ {"label":"K18 (D1,B4)", "x":8.5, "y":1},
+ {"label":"K19 (D1,D7)", "x":9.5, "y":1},
+ {"label":"K1A (D1,D6)", "x":10.5, "y":1},
+ {"label":"K1B (D1,D4)", "x":11.5, "y":1},
+ {"label":"K1C (D1,D5)", "x":12.5, "y":1},
+ {"label":"K1F (D1,B0)", "x":15, "y":1},
+ {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (F0,F5)", "x":1.75, "y":2},
+ {"label":"K22 (F0,F6)", "x":2.75, "y":2},
+ {"label":"K23 (F0,F7)", "x":3.75, "y":2},
+ {"label":"K24 (F0,C7)", "x":4.75, "y":2},
+ {"label":"K25 (F0,C6)", "x":5.75, "y":2},
+ {"label":"K26 (F0,B6)", "x":6.75, "y":2},
+ {"label":"K27 (F0,B5)", "x":7.75, "y":2},
+ {"label":"K28 (F0,B4)", "x":8.75, "y":2},
+ {"label":"K29 (F0,D7)", "x":9.75, "y":2},
+ {"label":"K2A (F0,D6)", "x":10.75, "y":2},
+ {"label":"K2B (F0,D4)", "x":11.75, "y":2},
+ {"label":"K1D (D1,D3)", "x":12.75, "y":2},
+ {"label":"K2D (F0,D3)", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"K2F (F0,B0)", "x":15, "y":2},
+ {"label":"K30 (F4,B1)", "x":0, "y":3, "w":1.25},
+ {"label":"K31 (F4,F5)", "x":1.25, "y":3},
+ {"label":"K32 (F4,F6)", "x":2.25, "y":3},
+ {"label":"K33 (F4,F7)", "x":3.25, "y":3},
+ {"label":"K34 (F4,C7)", "x":4.25, "y":3},
+ {"label":"K35 (F4,C6)", "x":5.25, "y":3},
+ {"label":"K36 (F4,B6)", "x":6.25, "y":3},
+ {"label":"K37 (F4,B5)", "x":7.25, "y":3},
+ {"label":"K38 (F4,B4)", "x":8.25, "y":3},
+ {"label":"K39 (F4,D7)", "x":9.25, "y":3},
+ {"label":"K3A (F4,D6)", "x":10.25, "y":3},
+ {"label":"K3B (F4,D4)", "x":11.25, "y":3},
+ {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (F4,D3)", "x":14, "y":3},
+ {"label":"K3F (F4,B0)", "x":15, "y":3},
+ {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (F1,F5)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K44 (F1,C7)", "x":3.75, "y":4, "w":2.25},
+ {"label":"K46 (F1,B6)", "x":6, "y":4, "w":1.25},
+ {"label":"K48 (F1,B4)", "x":7.25, "y":4, "w":2.75},
+ {"label":"K4A (F1,D6)", "x":10, "y":4, "w":1.25},
+ {"label":"K4B (F1,D4)", "x":11.25, "y":4, "w":1.25},
+ {"label":"K4C (F1,D5)", "x":13, "y":4},
+ {"label":"K4D (F1,D3)", "x":14, "y":4},
+ {"label":"K4F (F1,B0)", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_all": {
+ "key_count": 71,
+ "layout": [
+ {"label":"K00 (D0,B1)", "x":0, "y":0},
+ {"label":"K01 (D0,F5)", "x":1, "y":0},
+ {"label":"K02 (D0,F6)", "x":2, "y":0},
+ {"label":"K03 (D0,F7)", "x":3, "y":0},
+ {"label":"K04 (D0,C7)", "x":4, "y":0},
+ {"label":"K05 (D0,C6)", "x":5, "y":0},
+ {"label":"K06 (D0,B6)", "x":6, "y":0},
+ {"label":"K07 (D0,B5)", "x":7, "y":0},
+ {"label":"K08 (D0,B4)", "x":8, "y":0},
+ {"label":"K09 (D0,D7)", "x":9, "y":0},
+ {"label":"K0A (D0,D6)", "x":10, "y":0},
+ {"label":"K0B (D0,D4)", "x":11, "y":0},
+ {"label":"K0C (D0,D5)", "x":12, "y":0},
+ {"label":"K0D (D0,D3)", "x":13, "y":0},
+ {"label":"K0E (D0,D2)", "x":14, "y":0},
+ {"label":"K0F (D0,B0)", "x":15, "y":0},
+ {"label":"K10 (D1,B1)", "x":0, "y":1, "w":1.5},
+ {"label":"K11 (D1,F5)", "x":1.5, "y":1},
+ {"label":"K12 (D1,F6)", "x":2.5, "y":1},
+ {"label":"K13 (D1,F7)", "x":3.5, "y":1},
+ {"label":"K14 (D1,C7)", "x":4.5, "y":1},
+ {"label":"K15 (D1,C6)", "x":5.5, "y":1},
+ {"label":"K16 (D1,B6)", "x":6.5, "y":1},
+ {"label":"K17 (D1,B5)", "x":7.5, "y":1},
+ {"label":"K18 (D1,B4)", "x":8.5, "y":1},
+ {"label":"K19 (D1,D7)", "x":9.5, "y":1},
+ {"label":"K1A (D1,D6)", "x":10.5, "y":1},
+ {"label":"K1B (D1,D4)", "x":11.5, "y":1},
+ {"label":"K1C (D1,D5)", "x":12.5, "y":1},
+ {"label":"K1D (D1,D3)", "x":13.5, "y":1, "w":1.5},
+ {"label":"K1F (D1,B0)", "x":15, "y":1},
+ {"label":"K20 (F0,B1)", "x":0, "y":2, "w":1.75},
+ {"label":"K21 (F0,F5)", "x":1.75, "y":2},
+ {"label":"K22 (F0,F6)", "x":2.75, "y":2},
+ {"label":"K23 (F0,F7)", "x":3.75, "y":2},
+ {"label":"K24 (F0,C7)", "x":4.75, "y":2},
+ {"label":"K25 (F0,C6)", "x":5.75, "y":2},
+ {"label":"K26 (F0,B6)", "x":6.75, "y":2},
+ {"label":"K27 (F0,B5)", "x":7.75, "y":2},
+ {"label":"K28 (F0,B4)", "x":8.75, "y":2},
+ {"label":"K29 (F0,D7)", "x":9.75, "y":2},
+ {"label":"K2A (F0,D6)", "x":10.75, "y":2},
+ {"label":"K2B (F0,D4)", "x":11.75, "y":2},
+ {"label":"K2D (F0,D3)", "x":12.75, "y":2, "w":2.25},
+ {"label":"K2F (F0,B0)", "x":15, "y":2},
+ {"label":"K30 (F4,B1)", "x":0, "y":3, "w":1.25},
+ {"label":"K31 (F4,F5)", "x":1.25, "y":3},
+ {"label":"K32 (F4,F6)", "x":2.25, "y":3},
+ {"label":"K33 (F4,F7)", "x":3.25, "y":3},
+ {"label":"K34 (F4,C7)", "x":4.25, "y":3},
+ {"label":"K35 (F4,C6)", "x":5.25, "y":3},
+ {"label":"K36 (F4,B6)", "x":6.25, "y":3},
+ {"label":"K37 (F4,B5)", "x":7.25, "y":3},
+ {"label":"K38 (F4,B4)", "x":8.25, "y":3},
+ {"label":"K39 (F4,D7)", "x":9.25, "y":3},
+ {"label":"K3A (F4,D6)", "x":10.25, "y":3},
+ {"label":"K3B (F4,D4)", "x":11.25, "y":3},
+ {"label":"K3C (F4,D5)", "x":12.25, "y":3, "w":1.75},
+ {"label":"K3D (F4,D3)", "x":14, "y":3},
+ {"label":"K3F (F4,B0)", "x":15, "y":3},
+ {"label":"K40 (F1,B1)", "x":0, "y":4, "w":1.25},
+ {"label":"K41 (F1,F5)", "x":1.25, "y":4, "w":1.25},
+ {"label":"K42 (F1,F6)", "x":2.5, "y":4, "w":1.25},
+ {"label":"K44 (F1,C7)", "x":3.75, "y":4, "w":2.25},
+ {"label":"K46 (F1,B6)", "x":6, "y":4, "w":1.25},
+ {"label":"K48 (F1,B4)", "x":7.25, "y":4, "w":2.75},
+ {"label":"K4A (F1,D6)", "x":10, "y":4, "w":1.25},
+ {"label":"K4B (F1,D4)", "x":11.25, "y":4, "w":1.25},
+ {"label":"K4C (F1,D5)", "x":13, "y":4},
+ {"label":"K4D (F1,D3)", "x":14, "y":4},
+ {"label":"K4F (F1,B0)", "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/foxlab/key65/universal/keymaps/default/keymap.c b/keyboards/foxlab/key65/universal/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9c2071f01ac
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#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_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS,
+ 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_SPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
diff --git a/keyboards/foxlab/key65/universal/keymaps/via/keymap.c b/keyboards/foxlab/key65/universal/keymaps/via/keymap.c
new file mode 100644
index 00000000000..8d44f2c4610
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#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_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_INS,
+ 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_SPC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/foxlab/key65/universal/keymaps/via/rules.mk b/keyboards/foxlab/key65/universal/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/foxlab/key65/universal/readme.md b/keyboards/foxlab/key65/universal/readme.md
new file mode 100644
index 00000000000..967b9565f24
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/readme.md
@@ -0,0 +1,22 @@
+# Foxlab Key 65 Universal
+
+
+
+Key 65 is featured with the three-layer case and dual-gasket structure. The plate mounting system is an improved version of the gasket sandwich on Leaf 60. In addition, we add gaskets between the middle case and the bottom case. There's an optional rubber sheet between the PCB and the plate. The numerous options will offer you the most freedom to make the keyboard look and feel as you wish.
+
+* Keyboard Maintainer: QMK
+* Hardware Supported: Key 65 Universal PCB
+* Hardware Availability: [Group Buy](https://geekhack.org/index.php?topic=102609.0)
+
+This version is for the universal variant with the layouts below available:
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make foxlab/key65/universal: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).
+
+## RGB LED support
+
+The universal PCB supports RGB LEDs as an LED strip, but is not supplied with one. To use RGB LEDs, you should configure the RGBLED_NUM to match the number of LEDs on your strip.
diff --git a/keyboards/foxlab/key65/universal/rules.mk b/keyboards/foxlab/key65/universal/rules.mk
new file mode 100644
index 00000000000..24a570cf2d7
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/rules.mk
@@ -0,0 +1,29 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+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 = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = 65_ansi_blocker_split_bs # Support community layouts
diff --git a/keyboards/foxlab/key65/universal/universal.c b/keyboards/foxlab/key65/universal/universal.c
new file mode 100644
index 00000000000..361f3ad7f21
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/universal.c
@@ -0,0 +1,34 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#include "universal.h"
+
+void keyboard_pre_init_kb(void) {
+ led_init_ports();
+ keyboard_pre_init_user();
+}
+
+void led_init_ports(void) {
+ setPinOutput(E6);
+ writePinHigh(E6);
+}
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(E6, !led_state.caps_lock);
+ }
+ return true;
+}
diff --git a/keyboards/foxlab/key65/universal/universal.h b/keyboards/foxlab/key65/universal/universal.h
new file mode 100644
index 00000000000..9d92030c817
--- /dev/null
+++ b/keyboards/foxlab/key65/universal/universal.h
@@ -0,0 +1,75 @@
+/* Copyright 2020 Jumail Mundekkat / MxBlue
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_65_ansi_blocker_split_bs( \
+ 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, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D, 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, KC_NO, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, KC_NO, K4F }, \
+}
+
+#define LAYOUT_65_ansi_blocker_tsangan_split_bs( \
+ 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, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
+ K40, K41, K42, K46, K4B, K4C, K4D, 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, KC_NO, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, KC_NO, K4F }, \
+}
+
+#define LAYOUT_iso_all( \
+ 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, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
+ K40, K41, K42, K44, K46, K48, K4A, K4B, K4C, K4D, 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, KC_NO, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
+ { K40, K41, K42, KC_NO, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, KC_NO, K4F }, \
+}
+
+#define LAYOUT_all( \
+ 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, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3F, \
+ K40, K41, K42, K44, K46, K48, K4A, K4B, K4C, K4D, 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, KC_NO, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, K3F }, \
+ { K40, K41, K42, KC_NO, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, KC_NO, K4F }, \
+}
diff --git a/keyboards/ft/mars80/rules.mk b/keyboards/ft/mars80/rules.mk
index e3f2c93ce3c..2cd62815376 100644
--- a/keyboards/ft/mars80/rules.mk
+++ b/keyboards/ft/mars80/rules.mk
@@ -21,6 +21,4 @@ BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
-OPT_DEFS = -DDEBUG_LEVEL=0
-
LAYOUTS = tkl_ansi tkl_iso
diff --git a/keyboards/gami_studio/lex60/info.json b/keyboards/gami_studio/lex60/info.json
new file mode 100644
index 00000000000..2a2afd40c74
--- /dev/null
+++ b/keyboards/gami_studio/lex60/info.json
@@ -0,0 +1,79 @@
+{
+ "keyboard_name": "Gami Studio Lex60",
+ "url": "",
+ "maintainer": "GamiStudio",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"\\", "x":13, "y":0},
+ {"label":"Backspace", "x":14, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"LCtl / Esc", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"ISO #", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Up", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"GUI", "x":1.5, "y":4, "w":1.5},
+ {"label":"LAlt", "x":3, "y":4, "w":1.5},
+ {"label":"Space", "x":4.5, "y":4, "w":2.25},
+ {"label":"Fn / Enter", "x":6.75, "y":4, "w":2.75},
+ {"label":"GUI", "x":9.5, "y":4, "w":1.5},
+ {"label":"RAlt", "x":11, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.25, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/gboards/engine/rules.mk b/keyboards/gboards/engine/rules.mk
deleted file mode 100644
index 186f59386d7..00000000000
--- a/keyboards/gboards/engine/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-SRC += engine.c
diff --git a/keyboards/gboards/g/keymap_combo.h b/keyboards/gboards/g/keymap_combo.h
index 674d3356cc8..1302c460352 100644
--- a/keyboards/gboards/g/keymap_combo.h
+++ b/keyboards/gboards/g/keymap_combo.h
@@ -11,14 +11,21 @@
case name: \
if (pressed) SEND_STRING(string); \
break;
-#define BLANK(...)
+#define A_TOGG(name, layer, ...) \
+ case name: \
+ if (pressed) layer_invert(layer); \
+ break;
+
+#define BLANK(...)
// Generate data needed for combos/actions
// Create Enum
#undef COMB
#undef SUBS
+#undef TOGG
#define COMB K_ENUM
#define SUBS A_ENUM
+#define TOGG A_ENUM
enum combos {
#include "combos.def"
};
@@ -26,20 +33,25 @@ enum combos {
// Bake combos into mem
#undef COMB
#undef SUBS
+#undef TOGG
#define COMB K_DATA
#define SUBS A_DATA
+#define TOGG A_DATA
#include "combos.def"
#undef COMB
#undef SUBS
+#undef TOGG
// Fill combo array
#define COMB K_COMB
#define SUBS A_COMB
+#define TOGG A_COMB
combo_t key_combos[] = {
#include "combos.def"
};
#undef COMB
#undef SUBS
+#undef TOGG
// Export length to combo module
int COMBO_LEN = sizeof(key_combos) / sizeof(key_combos[0]);
@@ -47,10 +59,17 @@ int COMBO_LEN = sizeof(key_combos) / sizeof(key_combos[0]);
// Fill QMK hook
#define COMB BLANK
#define SUBS A_ACTI
+#define TOGG A_TOGG
void process_combo_event(uint8_t combo_index, bool pressed) {
switch (combo_index) {
#include "combos.def"
}
+
+ // Allow user overrides per keymap
+#if __has_include("inject.h")
+# include "inject.h"
+#endif
}
#undef COMB
#undef SUBS
+#undef TOGG
diff --git a/keyboards/gboards/g/rules.mk b/keyboards/gboards/g/rules.mk
deleted file mode 100644
index 186f59386d7..00000000000
--- a/keyboards/gboards/g/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-SRC += engine.c
diff --git a/keyboards/gergo/keymaps/abstractkb/config.h b/keyboards/gergo/keymaps/abstractkb/config.h
new file mode 100644
index 00000000000..bc7b9f78451
--- /dev/null
+++ b/keyboards/gergo/keymaps/abstractkb/config.h
@@ -0,0 +1,6 @@
+#pragma once
+
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#undef DEBOUNCE
+#define DEBOUNCE 10
diff --git a/keyboards/gergo/keymaps/abstractkb/keymap.c b/keyboards/gergo/keymaps/abstractkb/keymap.c
new file mode 100644
index 00000000000..6ee37f8175e
--- /dev/null
+++ b/keyboards/gergo/keymaps/abstractkb/keymap.c
@@ -0,0 +1,128 @@
+/* Good on you for modifying your layout! if you don't have
+ * time to read the QMK docs, a list of keycodes can be found at
+ *
+ * https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md
+ *
+ * There's also a template for adding new layers at the bottom of this file!
+ */
+
+#include QMK_KEYBOARD_H
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define NUMB 2 // numbers/motion
+
+// Blank template at the bottom
+
+enum customKeycodes {
+ URL = 1
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | L1/ESC | Q | W | E | R | T | | Y | U | I | O | P | | \ |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * |Ctrl/BS | A | S | D | F | G | RMB | | | H | J | K | L | ; : | ' " |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | LMB | | | N | M | , < | . > | / ? |RShft/-_|
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .----------. .-------. .------. .-----.
+ * | GUI/Del | |Ent/ALT| | Tab | |GUI |
+ * '----------' '-------' `------. '-----'
+ * ,-------. ,-------.
+ * | MMB | | PgDn |
+ * ,------|-------| |-------|------.
+ * | SYMB | NUMB | | SYMB | NUMB |
+ * | Space| Escape| | Mod |Space |
+ * | | | | | |
+ * `--------------' `--------------'
+ */
+[BASE] = LAYOUT_gergo(
+ LT(NUMB, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PIPE,
+ MT(MOD_LCTL, KC_BSPC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_BTN2, KC_TRNS, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_BTN1, KC_BTN3, KC_PGDN, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_MINS),
+ MT(MOD_LGUI, KC_DEL), MT(MOD_LALT, KC_ENT), LT(SYMB, KC_SPC), LT(NUMB, KC_ESC), LT(SYMB, KC_ENT), LT(NUMB, KC_SPC), KC_TAB, KC_LGUI
+ ),
+/* Keymap 1: Symbols layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | ! | @ | { | } | | | | | | | | | \ | |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` | | | | + | - | / | * | % | ' " |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | = | , | . | / ? | - _ |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .------. .------. .------. .-----.
+ * | | | | | | | DEL |
+ * '------' '------' `------. '-----'
+ * ,-------. ,-------.
+ * | | | PgUp |
+ * ,------|-------| |-------|------.
+ * | | | | | |
+ * | ; | = | | = | ; |
+ * | | | | | |
+ * `--------------' `--------------'
+ */
+[SYMB] = LAYOUT_gergo(
+ KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS,
+ KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_TRNS, KC_TRNS, KC_PLUS, KC_MINS, KC_SLSH, KC_ASTR, KC_PERC, KC_QUOT,
+ KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AMPR, KC_EQL, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+ KC_TRNS, KC_TRNS, KC_SCLN, KC_EQL, KC_EQL, KC_SCLN, KC_PGUP, KC_DEL
+ ),
+/* Keymap 2: Pad/Function layer
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | BTN1 | | | LEFT | DOWN | UP | RIGHT|VolDn | VolUp |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | F7 | F8 | F9 | F10 | F11 | F12 | BTN2 | | | MLFT | MDWN | MUP | MRGHT|Ply/Pa| Skip |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .------. .------. .------. .-----.
+ * | | | | | | | |
+ * '------' '------' `------. '-----'
+ * ,-------. ,-------.
+ * | | | PgUp |
+ * ,------|-------| |-------|------.
+ * | | | | | |
+ * | | | | | |
+ * | | | | | |
+ * `--------------' `--------------'
+ */
+[NUMB] = LAYOUT_gergo(
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_VOLD, KC_VOLU,
+ KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_MPLY, KC_MNXT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
+
+/* Keymap template
+ *
+ * ,-------------------------------------------. ,-------------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------|------. .------|------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------|------| |------|------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * .------. .------. .------. .-----.
+ * | | | | | | | |
+ * '------' '------' `------. '-----'
+ * ,-------. ,-------.
+ * | | | |
+ * ,------|-------| |-------|------.
+ * | | | | | |
+ * | | | | | |
+ * | | | | | |
+ * `--------------' `--------------'
+[SYMB] = LAYOUT_gergo(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/gergo/keymaps/abstractkb/readme.md b/keyboards/gergo/keymaps/abstractkb/readme.md
new file mode 100644
index 00000000000..0b07136e89a
--- /dev/null
+++ b/keyboards/gergo/keymaps/abstractkb/readme.md
@@ -0,0 +1,10 @@
+# [Gergo! By g Heavy Industries](http://gboards.ca)
+
+
+
+This is my personal modification to the stock gergo keymap.
+
+## Settings
+To edit various settings, enable the 1u trackball and whatnot please modify /keyboards/gergo/keymaps/default/rules.mk
+
+Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
diff --git a/keyboards/gergo/keymaps/abstractkb/rules.mk b/keyboards/gergo/keymaps/abstractkb/rules.mk
new file mode 100644
index 00000000000..b87e599734a
--- /dev/null
+++ b/keyboards/gergo/keymaps/abstractkb/rules.mk
@@ -0,0 +1,37 @@
+#----------------------------------------------------------------------------
+# make gergo:germ:dfu
+# Make sure you have dfu-programmer installed!
+#----------------------------------------------------------------------------
+# Firmware options
+BALLER = no # Enable to ball out
+BALLSTEP = 20 # Multiple in px to move, multiplied by layer number
+SCROLLSTEP = 1 # Lines to scroll with ball
+MOUSEKEY_ENABLE = yes # Mouse keys, needed for baller
+
+#Debug options
+VERBOSE = yes
+DEBUG_MATRIX_SCAN_RATE = no
+DEBUG_BALLER = no
+DEBUG_MATRIX = yes
+
+# A bunch of stuff that you shouldn't touch unless you
+# know what you're doing.
+#
+# No touchy, capiche?
+
+ifneq ($(strip $(BALLSTEP)),)
+ OPT_DEFS += -DTRKSTEP=$(strip $(BALLSTEP))
+endif
+ifneq ($(strip $(SCROLLSTEP)),)
+ OPT_DEFS += -DSCROLLSTEP=$(strip $(SCROLLSTEP))
+endif
+ifeq ($(strip $(BALLER)), yes)
+ POINTING_DEVICE_ENABLE = yes
+ OPT_DEFS += -DBALLER
+endif
+ifeq ($(strip $(DEBUG_BALLER)), yes)
+ OPT_DEFS += -DDEBUG_BALLER
+endif
+ifeq ($(strip $(DEBUG_MATRIX)), yes)
+ OPT_DEFS += -DDEBUG_MATRIX
+endif
diff --git a/keyboards/gh60/revc/info.json b/keyboards/gh60/revc/info.json
index 7a8a19c1ece..9d25629dae9 100644
--- a/keyboards/gh60/revc/info.json
+++ b/keyboards/gh60/revc/info.json
@@ -6,38 +6,574 @@
"height": 5,
"layouts": {
"LAYOUT_all": {
- "key_count":65,
- "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0},{"label":"Backspace Extra","x":14,"y":0},{"label":"Tab","x":0,"y":1,"w":1.5},{"label":"Q","x":1.5,"y":1},{"label":"W","x":2.5,"y":1},{"label":"E","x":3.5,"y":1},{"label":"R","x":4.5,"y":1},{"label":"T","x":5.5,"y":1},{"label":"Y","x":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","x":0,"y":2,"w":1.75},{"label":"A","x":1.75,"y":2},{"label":"S","x":2.75,"y":2},{"label":"D","x":3.75,"y":2},{"label":"F","x":4.75,"y":2},{"label":"G","x":5.75,"y":2},{"label":"H","x":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"ISO Hash","x":12.75,"y":2},{"label":"Enter","x":13.75,"y":2,"w":1.25},{"label":"Shift","x":0,"y":3,"w":1.25},{"label":"ISO Backslash","x":1.25,"y":3},{"label":"Z","x":2.25,"y":3},{"label":"X","x":3.25,"y":3},{"label":"C","x":4.25,"y":3},{"label":"V","x":5.25,"y":3},{"label":"B","x":6.25,"y":3},{"label":"N","x":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":1.75},{"label":"HHKB Fn","x":14,"y":3},{"label":"Ctrl","x":0,"y":4,"w":1.25},{"label":"Win","x":1.25,"y":4,"w":1.25},{"label":"Alt","x":2.5,"y":4,"w":1.25},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
- },
+ "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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
"LAYOUT": {
- "key_count":65,
- "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0},{"label":"Tab","x":0,"y":1,"w":1.5},{"label":"Q","x":1.5,"y":1},{"label":"W","x":2.5,"y":1},{"label":"E","x":3.5,"y":1},{"label":"R","x":4.5,"y":1},{"label":"T","x":5.5,"y":1},{"label":"Y","x":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","x":0,"y":2,"w":1.75},{"label":"A","x":1.75,"y":2},{"label":"S","x":2.75,"y":2},{"label":"D","x":3.75,"y":2},{"label":"F","x":4.75,"y":2},{"label":"G","x":5.75,"y":2},{"label":"H","x":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"ISO Hash","x":12.75,"y":2},{"label":"Enter","x":13.75,"y":2,"w":1.25},{"label":"Shift","x":0,"y":3,"w":1.25},{"label":"ISO Backslash","x":1.25,"y":3},{"label":"Z","x":2.25,"y":3},{"label":"X","x":3.25,"y":3},{"label":"C","x":4.25,"y":3},{"label":"V","x":5.25,"y":3},{"label":"B","x":6.25,"y":3},{"label":"N","x":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":1.75},{"label":"HHKB Fn","x":14,"y":3},{"label":"Ctrl","x":0,"y":4,"w":1.25},{"label":"Win","x":1.25,"y":4,"w":1.25},{"label":"Alt","x":2.5,"y":4,"w":1.25},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Backspace Extra","x":14,"y":0},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
+ "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": 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": 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": 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": 14, "y": 0},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25}
+ ]
},
"LAYOUT_60_ansi": {
- "key_count":61,
- "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0,"w":2},{"label":"Tab","x":0,"y":1,"w":1.5},{"label":"Q","x":1.5,"y":1},{"label":"W","x":2.5,"y":1},{"label":"E","x":3.5,"y":1},{"label":"R","x":4.5,"y":1},{"label":"T","x":5.5,"y":1},{"label":"Y","x":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","x":0,"y":2,"w":1.75},{"label":"A","x":1.75,"y":2},{"label":"S","x":2.75,"y":2},{"label":"D","x":3.75,"y":2},{"label":"F","x":4.75,"y":2},{"label":"G","x":5.75,"y":2},{"label":"H","x":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"Enter","x":12.75,"y":2,"w":2.25},{"label":"Shift","x":0,"y":3,"w":2.25},{"label":"Z","x":2.25,"y":3},{"label":"X","x":3.25,"y":3},{"label":"C","x":4.25,"y":3},{"label":"V","x":5.25,"y":3},{"label":"B","x":6.25,"y":3},{"label":"N","x":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":2.75},{"label":"Ctrl","x":0,"y":4,"w":1.25},{"label":"Win","x":1.25,"y":4,"w":1.25},{"label":"Alt","x":2.5,"y":4,"w":1.25},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
+ "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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
},
"LAYOUT_60_iso": {
- "key_count": 62,
- "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ "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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
},
"LAYOUT_60_ansi_split_bs_rshift": {
- "key_count":63,
- "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0},{"label":"Backspace Extra","x":14,"y":0},{"label":"Tab","x":0,"y":1,"w":1.5},{"label":"Q","x":1.5,"y":1},{"label":"W","x":2.5,"y":1},{"label":"E","x":3.5,"y":1},{"label":"R","x":4.5,"y":1},{"label":"T","x":5.5,"y":1},{"label":"Y","x":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","x":0,"y":2,"w":1.75},{"label":"A","x":1.75,"y":2},{"label":"S","x":2.75,"y":2},{"label":"D","x":3.75,"y":2},{"label":"F","x":4.75,"y":2},{"label":"G","x":5.75,"y":2},{"label":"H","x":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"Enter","x":12.75,"y":2,"w":2.25},{"label":"Shift","x":0,"y":3,"w":2.25},{"label":"Z","x":2.25,"y":3},{"label":"X","x":3.25,"y":3},{"label":"C","x":4.25,"y":3},{"label":"V","x":5.25,"y":3},{"label":"B","x":6.25,"y":3},{"label":"N","x":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":1.75},{"label":"HHKB Fn","x":14,"y":3},{"label":"Ctrl","x":0,"y":4,"w":1.5},{"label":"Win","x":1.5,"y":4},{"label":"Alt","x":2.5,"y":4,"w":1.5},{"label":"Space","x":4,"y":4,"w":6},{"label":"Alt","x":10,"y":4,"w":1.5},{"label":"Win","x":11.5,"y":4},{"label":"Menu","x":12.5,"y":4},{"label":"Ctrl","x":13.5,"y":4,"w":1.5}]
- },
+ "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": 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": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 6},
+ {"x": 10, "y": 4, "w": 1.5},
+ {"x": 11.5, "y": 4},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
"LAYOUT_60_ansi_split_rshift": {
- "key_count": 62,
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"HHKB Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
+ "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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
"LAYOUT_60_abnt2": {
- "key_count": 63,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"\u00a8", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"`", "x":11.5, "y":1}, {"label":"{", "x":12.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":"\u00c7", "x":10.75, "y":2}, {"label":"^", "x":11.75, "y":2}, {"label":"}", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":":", "x":11.25, "y":3}, {"label":"?", "x":12.25, "y":3}, {"label":"Shift", "x":13.25, "y":3, "w":1.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ "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": 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},
+ {"x": 13.25, "y": 3, "w": 1.75},
+
+ {"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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "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": 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": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
}
}
}
diff --git a/keyboards/gh60/revc/keymaps/robotmaxtron/keymap.c b/keyboards/gh60/revc/keymaps/robotmaxtron/keymap.c
index d7d8316c66a..770fe723b56 100644
--- a/keyboards/gh60/revc/keymaps/robotmaxtron/keymap.c
+++ b/keyboards/gh60/revc/keymaps/robotmaxtron/keymap.c
@@ -65,9 +65,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FL] = LAYOUT(
KC_GRAVE,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_DELETE, \
- KC_TRNS,F(1),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, \
+ KC_TRNS,TG(1),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_CALC,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_SLCK,KC_PAUS,KC_TRNS, \
KC_TRNS,KC_MUTE,KC__VOLDOWN,KC__VOLUP,KC_TRNS,KC_TRNS,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,KC_TRNS,KC_TRNS,KC_TRNS, \
- KC_TRNS,KC_TRNS,F(3),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_END,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,TG(3),KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_END,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS),
/*
@@ -106,8 +106,6 @@ enum function_id {
};
const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TOGGLE(1), // Toggle Arrow Layer overlay
- [3] = ACTION_LAYER_TOGGLE(3), // Toggle Underglow Layer overlay
[4] = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
[5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
[6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
diff --git a/keyboards/gh60/satan/keymaps/denolfe/keymap.c b/keyboards/gh60/satan/keymaps/denolfe/keymap.c
index 98fcd9b989a..a70c409fe86 100644
--- a/keyboards/gh60/satan/keymaps/denolfe/keymap.c
+++ b/keyboards/gh60/satan/keymaps/denolfe/keymap.c
@@ -62,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_PGUP, KC_TRNS, KC_END, KC_MPRV, KC_MNXT, KC_MPLY, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, KC_HOME, LCTL(KC_LEFT), LCTL(KC_END), LCTL(KC_RIGHT), KC_TRNS, RESET, \
- KC_TRNS, KC_TRNS, F(9), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ KC_TRNS, KC_TRNS, LM(2, MOD_LSFT), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
#endif
[_SL] = LAYOUT_60_ansi(
@@ -99,7 +99,6 @@ const uint16_t PROGMEM fn_actions[] = {
[7] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
[8] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
#endif
- [9] = ACTION_LAYER_MODS(2, MOD_LSFT)
};
void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
diff --git a/keyboards/gh80_3000/rules.mk b/keyboards/gh80_3000/rules.mk
index 524303ec24e..d6cb5fcfa5f 100644
--- a/keyboards/gh80_3000/rules.mk
+++ b/keyboards/gh80_3000/rules.mk
@@ -14,15 +14,15 @@ BOOTLOADER = atmel-dfu
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= no # 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
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-NKRO_ENABLE ?= yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
-AUDIO_ENABLE ?= no
-RGBLIGHT_ENABLE ?= no
+BOOTMAGIC_ENABLE = no # 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
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
LAYOUTS = fullsize_ansi fullsize_iso
diff --git a/keyboards/ghs/rar/config.h b/keyboards/ghs/rar/config.h
new file mode 100644
index 00000000000..f3b425bc259
--- /dev/null
+++ b/keyboards/ghs/rar/config.h
@@ -0,0 +1,196 @@
+/*
+Copyright 2020 Gone Hacking Studio
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x0645
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Gone Hacking Studio
+#define PRODUCT GHS.RAR
+#define DESCRIPTION A 75% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 8
+
+/*
+ * 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 { B0, B7, C6, B6, B5, B4, D7, D6, D4, D5, D3, D2 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, D1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN D0
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 17
+ #define RGBLIGHT_ANIMATIONS
+#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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/ghs/rar/info.json b/keyboards/ghs/rar/info.json
new file mode 100644
index 00000000000..3d2ffe1a43c
--- /dev/null
+++ b/keyboards/ghs/rar/info.json
@@ -0,0 +1,512 @@
+{
+ "keyboard_name": "GHS.RAR",
+ "url": "https://gonehacking.studio/",
+ "maintainer": "Gone Hacking Studio",
+ "width": 16.5,
+ "height": 6.75,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "layout": [
+ {"x": 0, "y": 0},
+
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 15.5, "y": 0},
+
+ {"x": 0, "y": 1.5},
+ {"x": 1, "y": 1.5},
+ {"x": 2, "y": 1.5},
+ {"x": 3, "y": 1.5},
+ {"x": 4, "y": 1.5},
+ {"x": 5, "y": 1.5},
+ {"x": 6, "y": 1.5},
+ {"x": 7, "y": 1.5},
+ {"x": 8, "y": 1.5},
+ {"x": 9, "y": 1.5},
+ {"x": 10, "y": 1.5},
+ {"x": 11, "y": 1.5},
+ {"x": 12, "y": 1.5},
+ {"x": 13, "y": 1.5, "w": 2},
+
+ {"x": 15.5, "y": 1.5},
+
+ {"x": 0, "y": 2.5, "w": 1.5},
+ {"x": 1.5, "y": 2.5},
+ {"x": 2.5, "y": 2.5},
+ {"x": 3.5, "y": 2.5},
+ {"x": 4.5, "y": 2.5},
+ {"x": 5.5, "y": 2.5},
+ {"x": 6.5, "y": 2.5},
+ {"x": 7.5, "y": 2.5},
+ {"x": 8.5, "y": 2.5},
+ {"x": 9.5, "y": 2.5},
+ {"x": 10.5, "y": 2.5},
+ {"x": 11.5, "y": 2.5},
+ {"x": 12.5, "y": 2.5},
+ {"x": 13.5, "y": 2.5, "w": 1.5},
+
+ {"x": 15.5, "y": 2.5},
+
+ {"x": 0, "y": 3.5, "w": 1.75},
+ {"x": 1.75, "y": 3.5},
+ {"x": 2.75, "y": 3.5},
+ {"x": 3.75, "y": 3.5},
+ {"x": 4.75, "y": 3.5},
+ {"x": 5.75, "y": 3.5},
+ {"x": 6.75, "y": 3.5},
+ {"x": 7.75, "y": 3.5},
+ {"x": 8.75, "y": 3.5},
+ {"x": 9.75, "y": 3.5},
+ {"x": 10.75, "y": 3.5},
+ {"x": 11.75, "y": 3.5},
+ {"x": 12.75, "y": 3.5, "w": 2.25},
+
+ {"x": 15.5, "y": 3.5},
+
+ {"x": 0, "y": 4.5, "w": 2.25},
+ {"x": 2.25, "y": 4.5},
+ {"x": 3.25, "y": 4.5},
+ {"x": 4.25, "y": 4.5},
+ {"x": 5.25, "y": 4.5},
+ {"x": 6.25, "y": 4.5},
+ {"x": 7.25, "y": 4.5},
+ {"x": 8.25, "y": 4.5},
+ {"x": 9.25, "y": 4.5},
+ {"x": 10.25, "y": 4.5},
+ {"x": 11.25, "y": 4.5},
+ {"x": 12.25, "y": 4.5, "w": 1.75},
+
+ {"x": 14.25, "y": 4.75},
+
+ {"x": 15.5, "y": 4.5},
+
+ {"x": 0, "y": 5.5, "w": 1.25},
+ {"x": 1.25, "y": 5.5, "w": 1.25},
+ {"x": 2.5, "y": 5.5, "w": 1.25},
+ {"x": 3.75, "y": 5.5, "w": 6.25},
+ {"x": 10, "y": 5.5, "w": 1.5},
+ {"x": 11.5, "y": 5.5, "w": 1.5},
+
+ {"x": 13.25, "y": 5.75},
+ {"x": 14.25, "y": 5.75},
+ {"x": 15.25, "y": 5.75}
+ ]
+ },
+ "LAYOUT_ansi_wkl": {
+ "layout": [
+ {"x": 0, "y": 0},
+
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 15.5, "y": 0},
+
+ {"x": 0, "y": 1.5},
+ {"x": 1, "y": 1.5},
+ {"x": 2, "y": 1.5},
+ {"x": 3, "y": 1.5},
+ {"x": 4, "y": 1.5},
+ {"x": 5, "y": 1.5},
+ {"x": 6, "y": 1.5},
+ {"x": 7, "y": 1.5},
+ {"x": 8, "y": 1.5},
+ {"x": 9, "y": 1.5},
+ {"x": 10, "y": 1.5},
+ {"x": 11, "y": 1.5},
+ {"x": 12, "y": 1.5},
+ {"x": 13, "y": 1.5, "w": 2},
+
+ {"x": 15.5, "y": 1.5},
+
+ {"x": 0, "y": 2.5, "w": 1.5},
+ {"x": 1.5, "y": 2.5},
+ {"x": 2.5, "y": 2.5},
+ {"x": 3.5, "y": 2.5},
+ {"x": 4.5, "y": 2.5},
+ {"x": 5.5, "y": 2.5},
+ {"x": 6.5, "y": 2.5},
+ {"x": 7.5, "y": 2.5},
+ {"x": 8.5, "y": 2.5},
+ {"x": 9.5, "y": 2.5},
+ {"x": 10.5, "y": 2.5},
+ {"x": 11.5, "y": 2.5},
+ {"x": 12.5, "y": 2.5},
+ {"x": 13.5, "y": 2.5, "w": 1.5},
+
+ {"x": 15.5, "y": 2.5},
+
+ {"x": 0, "y": 3.5, "w": 1.75},
+ {"x": 1.75, "y": 3.5},
+ {"x": 2.75, "y": 3.5},
+ {"x": 3.75, "y": 3.5},
+ {"x": 4.75, "y": 3.5},
+ {"x": 5.75, "y": 3.5},
+ {"x": 6.75, "y": 3.5},
+ {"x": 7.75, "y": 3.5},
+ {"x": 8.75, "y": 3.5},
+ {"x": 9.75, "y": 3.5},
+ {"x": 10.75, "y": 3.5},
+ {"x": 11.75, "y": 3.5},
+ {"x": 12.75, "y": 3.5, "w": 2.25},
+
+ {"x": 15.5, "y": 3.5},
+
+ {"x": 0, "y": 4.5, "w": 2.25},
+ {"x": 2.25, "y": 4.5},
+ {"x": 3.25, "y": 4.5},
+ {"x": 4.25, "y": 4.5},
+ {"x": 5.25, "y": 4.5},
+ {"x": 6.25, "y": 4.5},
+ {"x": 7.25, "y": 4.5},
+ {"x": 8.25, "y": 4.5},
+ {"x": 9.25, "y": 4.5},
+ {"x": 10.25, "y": 4.5},
+ {"x": 11.25, "y": 4.5},
+ {"x": 12.25, "y": 4.5, "w": 1.75},
+
+ {"x": 14.25, "y": 4.75},
+
+ {"x": 15.5, "y": 4.5},
+
+ {"x": 0, "y": 5.5, "w": 1.5},
+ {"x": 1.5, "y": 5.5, "w": 1.5},
+ {"x": 3, "y": 5.5, "w": 7},
+ {"x": 10, "y": 5.5, "w": 1.5},
+ {"x": 11.5, "y": 5.5, "w": 1.5},
+
+ {"x": 13.25, "y": 5.75},
+ {"x": 14.25, "y": 5.75},
+ {"x": 15.25, "y": 5.75}
+ ]
+ },
+ "LAYOUT_iso": {
+ "layout": [
+ {"x": 0, "y": 0},
+
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 15.5, "y": 0},
+
+ {"x": 0, "y": 1.5},
+ {"x": 1, "y": 1.5},
+ {"x": 2, "y": 1.5},
+ {"x": 3, "y": 1.5},
+ {"x": 4, "y": 1.5},
+ {"x": 5, "y": 1.5},
+ {"x": 6, "y": 1.5},
+ {"x": 7, "y": 1.5},
+ {"x": 8, "y": 1.5},
+ {"x": 9, "y": 1.5},
+ {"x": 10, "y": 1.5},
+ {"x": 11, "y": 1.5},
+ {"x": 12, "y": 1.5},
+ {"x": 13, "y": 1.5, "w": 2},
+
+ {"x": 15.5, "y": 1.5},
+
+ {"x": 0, "y": 2.5, "w": 1.5},
+ {"x": 1.5, "y": 2.5},
+ {"x": 2.5, "y": 2.5},
+ {"x": 3.5, "y": 2.5},
+ {"x": 4.5, "y": 2.5},
+ {"x": 5.5, "y": 2.5},
+ {"x": 6.5, "y": 2.5},
+ {"x": 7.5, "y": 2.5},
+ {"x": 8.5, "y": 2.5},
+ {"x": 9.5, "y": 2.5},
+ {"x": 10.5, "y": 2.5},
+ {"x": 11.5, "y": 2.5},
+ {"x": 12.5, "y": 2.5},
+ {"x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+
+ {"x": 15.5, "y": 2.5},
+
+ {"x": 0, "y": 3.5, "w": 1.75},
+ {"x": 1.75, "y": 3.5},
+ {"x": 2.75, "y": 3.5},
+ {"x": 3.75, "y": 3.5},
+ {"x": 4.75, "y": 3.5},
+ {"x": 5.75, "y": 3.5},
+ {"x": 6.75, "y": 3.5},
+ {"x": 7.75, "y": 3.5},
+ {"x": 8.75, "y": 3.5},
+ {"x": 9.75, "y": 3.5},
+ {"x": 10.75, "y": 3.5},
+ {"x": 11.75, "y": 3.5},
+ {"x": 12.75, "y": 3.5},
+
+ {"x": 15.5, "y": 3.5},
+
+ {"x": 0, "y": 4.5, "w": 1.25},
+ {"x": 1.25, "y": 4.5},
+ {"x": 2.25, "y": 4.5},
+ {"x": 3.25, "y": 4.5},
+ {"x": 4.25, "y": 4.5},
+ {"x": 5.25, "y": 4.5},
+ {"x": 6.25, "y": 4.5},
+ {"x": 7.25, "y": 4.5},
+ {"x": 8.25, "y": 4.5},
+ {"x": 9.25, "y": 4.5},
+ {"x": 10.25, "y": 4.5},
+ {"x": 11.25, "y": 4.5},
+ {"x": 12.25, "y": 4.5, "w": 1.75},
+
+ {"x": 14.25, "y": 4.75},
+
+ {"x": 15.5, "y": 4.5},
+
+ {"x": 0, "y": 5.5, "w": 1.25},
+ {"x": 1.25, "y": 5.5, "w": 1.25},
+ {"x": 2.5, "y": 5.5, "w": 1.25},
+ {"x": 3.75, "y": 5.5, "w": 6.25},
+ {"x": 10, "y": 5.5, "w": 1.5},
+ {"x": 11.5, "y": 5.5, "w": 1.5},
+
+ {"x": 13.25, "y": 5.75},
+ {"x": 14.25, "y": 5.75},
+ {"x": 15.25, "y": 5.75}
+ ]
+ },
+ "LAYOUT_iso_wkl": {
+ "layout": [
+ {"x": 0, "y": 0},
+
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 15.5, "y": 0},
+
+ {"x": 0, "y": 1.5},
+ {"x": 1, "y": 1.5},
+ {"x": 2, "y": 1.5},
+ {"x": 3, "y": 1.5},
+ {"x": 4, "y": 1.5},
+ {"x": 5, "y": 1.5},
+ {"x": 6, "y": 1.5},
+ {"x": 7, "y": 1.5},
+ {"x": 8, "y": 1.5},
+ {"x": 9, "y": 1.5},
+ {"x": 10, "y": 1.5},
+ {"x": 11, "y": 1.5},
+ {"x": 12, "y": 1.5},
+ {"x": 13, "y": 1.5, "w": 2},
+
+ {"x": 15.5, "y": 1.5},
+
+ {"x": 0, "y": 2.5, "w": 1.5},
+ {"x": 1.5, "y": 2.5},
+ {"x": 2.5, "y": 2.5},
+ {"x": 3.5, "y": 2.5},
+ {"x": 4.5, "y": 2.5},
+ {"x": 5.5, "y": 2.5},
+ {"x": 6.5, "y": 2.5},
+ {"x": 7.5, "y": 2.5},
+ {"x": 8.5, "y": 2.5},
+ {"x": 9.5, "y": 2.5},
+ {"x": 10.5, "y": 2.5},
+ {"x": 11.5, "y": 2.5},
+ {"x": 12.5, "y": 2.5},
+ {"x": 13.75, "y": 2.5, "w": 1.25, "h": 2},
+
+ {"x": 15.5, "y": 2.5},
+
+ {"x": 0, "y": 3.5, "w": 1.75},
+ {"x": 1.75, "y": 3.5},
+ {"x": 2.75, "y": 3.5},
+ {"x": 3.75, "y": 3.5},
+ {"x": 4.75, "y": 3.5},
+ {"x": 5.75, "y": 3.5},
+ {"x": 6.75, "y": 3.5},
+ {"x": 7.75, "y": 3.5},
+ {"x": 8.75, "y": 3.5},
+ {"x": 9.75, "y": 3.5},
+ {"x": 10.75, "y": 3.5},
+ {"x": 11.75, "y": 3.5},
+ {"x": 12.75, "y": 3.5},
+
+ {"x": 15.5, "y": 3.5},
+
+ {"x": 0, "y": 4.5, "w": 1.25},
+ {"x": 1.25, "y": 4.5},
+ {"x": 2.25, "y": 4.5},
+ {"x": 3.25, "y": 4.5},
+ {"x": 4.25, "y": 4.5},
+ {"x": 5.25, "y": 4.5},
+ {"x": 6.25, "y": 4.5},
+ {"x": 7.25, "y": 4.5},
+ {"x": 8.25, "y": 4.5},
+ {"x": 9.25, "y": 4.5},
+ {"x": 10.25, "y": 4.5},
+ {"x": 11.25, "y": 4.5},
+ {"x": 12.25, "y": 4.5, "w": 1.75},
+
+ {"x": 14.25, "y": 4.75},
+
+ {"x": 15.5, "y": 4.5},
+
+ {"x": 0, "y": 5.5, "w": 1.5},
+ {"x": 1.5, "y": 5.5, "w": 1.5},
+ {"x": 3, "y": 5.5, "w": 7},
+ {"x": 10, "y": 5.5, "w": 1.5},
+ {"x": 11.5, "y": 5.5, "w": 1.5},
+
+ {"x": 13.25, "y": 5.75},
+ {"x": 14.25, "y": 5.75},
+ {"x": 15.25, "y": 5.75}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"x": 0, "y": 0},
+
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
+ {"x": 9.5, "y": 0},
+
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 15.5, "y": 0},
+
+ {"x": 0, "y": 1.5},
+ {"x": 1, "y": 1.5},
+ {"x": 2, "y": 1.5},
+ {"x": 3, "y": 1.5},
+ {"x": 4, "y": 1.5},
+ {"x": 5, "y": 1.5},
+ {"x": 6, "y": 1.5},
+ {"x": 7, "y": 1.5},
+ {"x": 8, "y": 1.5},
+ {"x": 9, "y": 1.5},
+ {"x": 10, "y": 1.5},
+ {"x": 11, "y": 1.5},
+ {"x": 12, "y": 1.5},
+ {"x": 13, "y": 1.5},
+ {"x": 14, "y": 1.5},
+
+ {"x": 15.5, "y": 1.5},
+
+ {"x": 0, "y": 2.5, "w": 1.5},
+ {"x": 1.5, "y": 2.5},
+ {"x": 2.5, "y": 2.5},
+ {"x": 3.5, "y": 2.5},
+ {"x": 4.5, "y": 2.5},
+ {"x": 5.5, "y": 2.5},
+ {"x": 6.5, "y": 2.5},
+ {"x": 7.5, "y": 2.5},
+ {"x": 8.5, "y": 2.5},
+ {"x": 9.5, "y": 2.5},
+ {"x": 10.5, "y": 2.5},
+ {"x": 11.5, "y": 2.5},
+ {"x": 12.5, "y": 2.5},
+ {"x": 13.5, "y": 2.5, "w": 1.5},
+
+ {"x": 15.5, "y": 2.5},
+
+ {"x": 0, "y": 3.5, "w": 1.75},
+ {"x": 1.75, "y": 3.5},
+ {"x": 2.75, "y": 3.5},
+ {"x": 3.75, "y": 3.5},
+ {"x": 4.75, "y": 3.5},
+ {"x": 5.75, "y": 3.5},
+ {"x": 6.75, "y": 3.5},
+ {"x": 7.75, "y": 3.5},
+ {"x": 8.75, "y": 3.5},
+ {"x": 9.75, "y": 3.5},
+ {"x": 10.75, "y": 3.5},
+ {"x": 11.75, "y": 3.5},
+ {"x": 12.75, "y": 3.5, "w": 2.25},
+
+ {"x": 15.5, "y": 3.5},
+
+ {"x": 0, "y": 4.5, "w": 1.25},
+ {"x": 1.25, "y": 4.5},
+ {"x": 2.25, "y": 4.5},
+ {"x": 3.25, "y": 4.5},
+ {"x": 4.25, "y": 4.5},
+ {"x": 5.25, "y": 4.5},
+ {"x": 6.25, "y": 4.5},
+ {"x": 7.25, "y": 4.5},
+ {"x": 8.25, "y": 4.5},
+ {"x": 9.25, "y": 4.5},
+ {"x": 10.25, "y": 4.5},
+ {"x": 11.25, "y": 4.5},
+ {"x": 12.25, "y": 4.5, "w": 1.75},
+
+ {"x": 14.25, "y": 4.75},
+
+ {"x": 15.5, "y": 4.5},
+
+ {"x": 0, "y": 5.5, "w": 1.25},
+ {"x": 1.25, "y": 5.5, "w": 1.25},
+ {"x": 2.5, "y": 5.5, "w": 1.25},
+ {"x": 3.75, "y": 5.5, "w": 6.25},
+ {"x": 10, "y": 5.5},
+ {"x": 11, "y": 5.5},
+ {"x": 12, "y": 5.5},
+
+ {"x": 13.25, "y": 5.75},
+ {"x": 14.25, "y": 5.75},
+ {"x": 15.25, "y": 5.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ghs/rar/keymaps/default/keymap.c b/keyboards/ghs/rar/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7e48f080cde
--- /dev/null
+++ b/keyboards/ghs/rar/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2020 Gone Hacking Studio
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FN] = LAYOUT_ansi(
+ RGB_TOG, 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, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAI, RGB_HUD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_MOD, RGB_VAD, RGB_RMOD
+ )
+};
diff --git a/keyboards/ghs/rar/keymaps/iso/keymap.c b/keyboards/ghs/rar/keymaps/iso/keymap.c
new file mode 100644
index 00000000000..4af55102d38
--- /dev/null
+++ b/keyboards/ghs/rar/keymaps/iso/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2020 Gone Hacking Studio
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT_iso(
+ 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_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_PGDN,
+ 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_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FN] = LAYOUT_iso(
+ RGB_TOG, 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, RGB_HUI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAI,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SAD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAI, RGB_HUD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, RGB_MOD, RGB_VAD, RGB_RMOD
+ )
+};
diff --git a/keyboards/ghs/rar/keymaps/via/keymap.c b/keyboards/ghs/rar/keymaps/via/keymap.c
new file mode 100644
index 00000000000..af72c4fb7a4
--- /dev/null
+++ b/keyboards/ghs/rar/keymaps/via/keymap.c
@@ -0,0 +1,52 @@
+/* Copyright 2020 Gone Hacking Studio
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT_all(
+ 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_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_NO, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, RGB_HUD,
+ _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_VAD, RGB_RMOD
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/ghs/rar/keymaps/via/rules.mk b/keyboards/ghs/rar/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/ghs/rar/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/ghs/rar/rar.c b/keyboards/ghs/rar/rar.c
new file mode 100644
index 00000000000..72f0654fc1e
--- /dev/null
+++ b/keyboards/ghs/rar/rar.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Gone Hacking Studio
+ *
+ * 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 .
+ */
+
+#include "rar.h"
diff --git a/keyboards/ghs/rar/rar.h b/keyboards/ghs/rar/rar.h
new file mode 100644
index 00000000000..fc68f85bd4b
--- /dev/null
+++ b/keyboards/ghs/rar/rar.h
@@ -0,0 +1,145 @@
+/* Copyright 2020 Gone Hacking Studio
+ *
+ * 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 .
+ */
+
+#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 XXX KC_NO
+
+#define LAYOUT_ansi( \
+ k00, k01, k11, k02, k12, k03, k13, k04, k14, k15, k06, k16, k07, k17, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k56, k47, k57, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k76, k77, \
+ k80, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k87, k97, \
+ ka0, kb0, ka1, ka3, ka5, ka6, kb6, ka7, kb7 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, XXX, k06, k07 }, \
+ { XXX, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, k43, k44, k45, XXX, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, XXX, XXX }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77 }, \
+ { k80, k81, k82, k83, k84, k85, k86, k87 }, \
+ { XXX, k91, k92, k93, k94, k95, XXX, k97 }, \
+ { ka0, ka1, XXX, ka3, XXX, ka5, ka6, ka7 }, \
+ { kb0, XXX, XXX, XXX, XXX, XXX, kb6, kb7 }, \
+}
+
+#define LAYOUT_ansi_wkl( \
+ k00, k01, k11, k02, k12, k03, k13, k04, k14, k15, k06, k16, k07, k17, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k56, k47, k57, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k76, k77, \
+ k80, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k87, k97, \
+ ka0, kb0, ka3, ka5, ka6, kb6, ka7, kb7 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, XXX, k06, k07 }, \
+ { XXX, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, k43, k44, k45, XXX, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, XXX, XXX }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77 }, \
+ { k80, k81, k82, k83, k84, k85, k86, k87 }, \
+ { XXX, k91, k92, k93, k94, k95, XXX, k97 }, \
+ { ka0, XXX, XXX, ka3, XXX, ka5, ka6, ka7 }, \
+ { kb0, XXX, XXX, XXX, XXX, XXX, kb6, kb7 }, \
+}
+
+#define LAYOUT_iso( \
+ k00, k01, k11, k02, k12, k03, k13, k04, k14, k15, k06, k16, k07, k17, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k56, k47, k57, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k76, k77, \
+ k80, k90, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k87, k97, \
+ ka0, kb0, ka1, ka3, ka5, ka6, kb6, ka7, kb7 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, XXX, k06, k07 }, \
+ { XXX, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, k43, k44, k45, XXX, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, XXX, XXX }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77 }, \
+ { k80, k81, k82, k83, k84, k85, k86, k87 }, \
+ { k90, k91, k92, k93, k94, k95, XXX, k97 }, \
+ { ka0, ka1, XXX, ka3, XXX, ka5, ka6, ka7 }, \
+ { kb0, XXX, XXX, XXX, XXX, XXX, kb6, kb7 }, \
+}
+
+#define LAYOUT_iso_wkl( \
+ k00, k01, k11, k02, k12, k03, k13, k04, k14, k15, k06, k16, k07, k17, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k37, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k56, k47, k57, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k76, k77, \
+ k80, k90, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k87, k97, \
+ ka0, kb0, ka3, ka5, ka6, kb6, ka7, kb7 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, XXX, k06, k07 }, \
+ { XXX, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, XXX }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, k43, k44, k45, XXX, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, XXX, XXX }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77 }, \
+ { k80, k81, k82, k83, k84, k85, k86, k87 }, \
+ { k90, k91, k92, k93, k94, k95, XXX, k97 }, \
+ { ka0, XXX, XXX, ka3, XXX, ka5, ka6, ka7 }, \
+ { kb0, XXX, XXX, XXX, XXX, XXX, kb6, kb7 }, \
+}
+
+#define LAYOUT_all( \
+ k00, k01, k11, k02, k12, k03, k13, k04, k14, k15, k06, k16, k07, k17, \
+ k20, k30, k21, k31, k22, k32, k23, k33, k24, k34, k25, k35, k26, k36, k27, k37, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k56, k47, k57, \
+ k60, k70, k61, k71, k62, k72, k63, k73, k64, k74, k65, k75, k76, k77, \
+ k80, k90, k81, k91, k82, k92, k83, k93, k84, k94, k85, k95, k86, k87, k97, \
+ ka0, kb0, ka1, ka3, ka5, kb5, ka6, kb6, ka7, kb7 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, XXX, k06, k07 }, \
+ { XXX, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, k43, k44, k45, XXX, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, XXX, XXX }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77 }, \
+ { k80, k81, k82, k83, k84, k85, k86, k87 }, \
+ { k90, k91, k92, k93, k94, k95, XXX, k97 }, \
+ { ka0, ka1, XXX, ka3, XXX, ka5, ka6, ka7 }, \
+ { kb0, XXX, XXX, XXX, XXX, kb5, kb6, kb7 }, \
+}
diff --git a/keyboards/ghs/rar/readme.md b/keyboards/ghs/rar/readme.md
new file mode 100644
index 00000000000..cb08e9334a1
--- /dev/null
+++ b/keyboards/ghs/rar/readme.md
@@ -0,0 +1,15 @@
+# GHS.RAR
+
+
+
+A seamless screwless 75% keyboard.
+
+* Keyboard Maintainer: [Ramon Imbao](https://github.com/ramonimbao)
+* Hardware Supported: ATmega32u4
+* Hardware Availability: [Gone Hacking Studio](https://gonehacking.studio)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ghs/rar: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/ghs/rar/rules.mk b/keyboards/ghs/rar/rules.mk
new file mode 100644
index 00000000000..c291ba80278
--- /dev/null
+++ b/keyboards/ghs/rar/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/gingham/readme.md b/keyboards/gingham/readme.md
index d0c3e6fad79..089af1cf5ee 100644
--- a/keyboards/gingham/readme.md
+++ b/keyboards/gingham/readme.md
@@ -4,7 +4,7 @@
A 60% keyboard with only through hole components.
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
Hardware Supported: ATMEGA328p with vusb [PCB](https://github.com/yiancar/gingham_pcb)
Hardware Availability: https://yiancar-designs.com/, https://novelkeys.xyz, https://mechboards.co.uk/
diff --git a/keyboards/gingham/rules.mk b/keyboards/gingham/rules.mk
index 8448cf64680..e1046c017bb 100644
--- a/keyboards/gingham/rules.mk
+++ b/keyboards/gingham/rules.mk
@@ -14,9 +14,6 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# disable debug code
-OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/gowla/config.h b/keyboards/gowla/config.h
new file mode 100644
index 00000000000..65fd8ca1e73
--- /dev/null
+++ b/keyboards/gowla/config.h
@@ -0,0 +1,38 @@
+/*
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xE9B6
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Gowla
+#define PRODUCT Gowla Macro Board
+#define DESCRIPTION 3x3 PCB
+
+/* Matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/* Pin-out */
+#define MATRIX_ROW_PINS { D1, D0, D4 }
+#define MATRIX_COL_PINS { B5, B4, E6 }
+#define UNUSED_PINS
+
+/* ROW2COL */
+#define DIODE_DIRECTION ROW2COL
diff --git a/keyboards/gowla/gowla.c b/keyboards/gowla/gowla.c
new file mode 100644
index 00000000000..13781bce3c4
--- /dev/null
+++ b/keyboards/gowla/gowla.c
@@ -0,0 +1 @@
+#include "gowla.h"
diff --git a/keyboards/gowla/gowla.h b/keyboards/gowla/gowla.h
new file mode 100644
index 00000000000..fa98c1f403b
--- /dev/null
+++ b/keyboards/gowla/gowla.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_3x3( \
+ k00, k01, k02, \
+ k10, k11, k12, \
+ k20, k21, k22 \
+) { \
+ { k00, k01, k02 }, \
+ { k10, k11, k12 }, \
+ { k20, k21, k22 } \
+}
diff --git a/keyboards/gowla/info.json b/keyboards/gowla/info.json
new file mode 100644
index 00000000000..4d1a5e1673c
--- /dev/null
+++ b/keyboards/gowla/info.json
@@ -0,0 +1,24 @@
+{
+ "keyboard_name": "Gowla Macro Pad",
+ "url": "https://github.com/SamGowland/Gowla-Macro-Board",
+ "maintainer": "Gowla",
+ "width": 3,
+ "height": 3,
+ "layouts": {
+ "LAYOUT_ortho_3x3": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/gowla/keymaps/default/keymap.c b/keyboards/gowla/keymaps/default/keymap.c
new file mode 100644
index 00000000000..326c8f0e91a
--- /dev/null
+++ b/keyboards/gowla/keymaps/default/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x3(
+ LT(1, KC_MPRV), KC_MNXT, KC_MPLY,
+ KC_VOLD, KC_UP, KC_VOLU,
+ KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_ortho_3x3(
+ KC_ESC, KC_MPLY, RESET,
+ KC_P7, KC_P1, KC_F1,
+ KC_F2, KC_F3, KC_F4
+ )
+};
diff --git a/keyboards/gowla/readme.md b/keyboards/gowla/readme.md
new file mode 100644
index 00000000000..caf27c75ff9
--- /dev/null
+++ b/keyboards/gowla/readme.md
@@ -0,0 +1,15 @@
+# Gowla Macro Board
+
+
+
+Simple Compact 3x3 Macro Board for use with QMK, designed and sold by Gowla.
+
+* Keyboard Maintainer: [Gowla](https://github.com/SamGowland/)
+* Hardware Supported: Pro Micro ATmega32U4, Cherry Mount Switches
+* Hardware Availability: [Repo](https://github.com/SamGowland/Gowla-Macro-Board)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make gowla: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/gowla/rules.mk b/keyboards/gowla/rules.mk
new file mode 100644
index 00000000000..19b6f44b8f9
--- /dev/null
+++ b/keyboards/gowla/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # 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 = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/gray_studio/hb85/rules.mk b/keyboards/gray_studio/hb85/rules.mk
index a9746c0d3dd..981f6b514f9 100644
--- a/keyboards/gray_studio/hb85/rules.mk
+++ b/keyboards/gray_studio/hb85/rules.mk
@@ -20,5 +20,3 @@ COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/gray_studio/space65/info.json b/keyboards/gray_studio/space65/info.json
index 72674bdef69..5bd848ddcc6 100644
--- a/keyboards/gray_studio/space65/info.json
+++ b/keyboards/gray_studio/space65/info.json
@@ -1,16 +1,241 @@
{
- "keyboard_name": "Gray Studio Space65",
- "url": "",
- "maintainer": "qmk",
- "width": 16,
- "height": 5,
+ "keyboard_name": "Gray Studio Space65",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
"layouts": {
"LAYOUT": {
- "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, "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":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.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
- },
+ "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, "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": 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.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 2.25},
+ {"x": 6, "y": 4, "w": 1.25},
+ {"x": 7.25, "y": 4, "w": 2.75},
+ {"x": 10, "y": 4, "w": 1.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
"LAYOUT_65_ansi_blocker": {
- "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, "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.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":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
+ "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, "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.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": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "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, "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.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": 13, "y": 4},
+ {"x": 14, "y": 4},
+ {"x": 15, "y": 4}
+ ]
}
}
}
diff --git a/keyboards/gray_studio/space65/keymaps/madhatter/config.h b/keyboards/gray_studio/space65/keymaps/madhatter/config.h
new file mode 100644
index 00000000000..e297ebedc54
--- /dev/null
+++ b/keyboards/gray_studio/space65/keymaps/madhatter/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#undef PRODUCT
+#define PRODUCT MadHatter\x27s Custom Spacc
diff --git a/keyboards/gray_studio/space65/keymaps/madhatter/keymap.c b/keyboards/gray_studio/space65/keymaps/madhatter/keymap.c
new file mode 100644
index 00000000000..2fa47f427b3
--- /dev/null
+++ b/keyboards/gray_studio/space65/keymaps/madhatter/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2019 Khader Syed
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _QWERTY,
+ _FNM
+};
+
+#define FNM MO(_FNM)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT(
+ 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_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_BSPC, KC_PGUP,
+ KC_GRV, 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_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, FNM, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+[_FNM] = LAYOUT(
+ 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, KC_VOLD, KC_VOLU, KC_MFFD,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, RESET, KC_MRWD,
+ KC_TRNS, RGB_M_P, RGB_M_G, RGB_M_K, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS,
+ AG_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BRID, KC_BRIU, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+
+};
diff --git a/keyboards/gray_studio/space65/keymaps/madhatter/rules.mk b/keyboards/gray_studio/space65/keymaps/madhatter/rules.mk
new file mode 100644
index 00000000000..1e9835b3bd6
--- /dev/null
+++ b/keyboards/gray_studio/space65/keymaps/madhatter/rules.mk
@@ -0,0 +1,5 @@
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+SLEEP_LED_ENABLE = no
+NKRO_ENABLE = yes
diff --git a/keyboards/handwired/brain/brain.c b/keyboards/handwired/brain/brain.c
new file mode 100644
index 00000000000..2f792f04cfd
--- /dev/null
+++ b/keyboards/handwired/brain/brain.c
@@ -0,0 +1 @@
+#include "brain.h"
diff --git a/keyboards/handwired/brain/brain.h b/keyboards/handwired/brain/brain.h
new file mode 100644
index 00000000000..a0f2ad6848d
--- /dev/null
+++ b/keyboards/handwired/brain/brain.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include "quantum.h"
+
+
+
+
+
+#define LAYOUT( \
+ L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L31, L32, L33, L34, L35, R31, R32, R33, R34, R35, \
+ L43, L44, L45, R41, R42, R43 \
+ ) \
+ { \
+ { KC_NO, L01, L02, L03, L04, L05, L06}, \
+ { L10, L11, L12, L13, L14, L15, L16}, \
+ { L20, L21, L22, L23, L24, L25, L26}, \
+ { KC_NO, L31, L32, L33, L34, L35, KC_NO}, \
+ { KC_NO, KC_NO, KC_NO, L43, L44, L45, KC_NO}, \
+\
+ { R00, R01, R02, R03, R04, R05, KC_NO }, \
+ { R10, R11, R12, R13, R14, R15, R16 }, \
+ { R20, R21, R22, R23, R24, R25, R26 }, \
+ { KC_NO, R31, R32, R33, R34, R35, KC_NO }, \
+ { KC_NO, R41, R42, R43, KC_NO, KC_NO, KC_NO }, \
+}
diff --git a/keyboards/handwired/brain/config.h b/keyboards/handwired/brain/config.h
new file mode 100644
index 00000000000..3779cfb9c17
--- /dev/null
+++ b/keyboards/handwired/brain/config.h
@@ -0,0 +1,111 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 Jack Humbert
+Copyright 2020 James Smith @klackygears
+
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4A53
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER klackygears
+#define PRODUCT Brain
+#define DESCRIPTION A split ergonomic keyboard with sculpted shell
+
+#define SPLIT_USB_DETECT
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 7
+
+// wiring of each half
+
+#define MATRIX_COL_PINS \
+ { D1, D4, C6, D7, E6, B4, B5 }
+#define MATRIX_ROW_PINS \
+ { F4, F5, F6, F7, B1 }
+
+#define MATRIX_COL_PINS_RIGHT \
+ { B5, B4, E6, D7, C6, D4, D1 }
+
+#define DIODE_DIRECTION COL2ROW
+
+/* mouse config */
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+/* Set 0 if debouncing isn't needed */
+
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+#define EE_HANDS
+
+//#define SPLIT_HAND_PIN B7
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Enables This makes it easier for fast typists to use dual-function keys */
+#define PERMISSIVE_HOLD
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 28 // Number of LEDs
+
+
+#define RGBLIGHT_LIMIT_VAL 120
+
+#define RGBLIGHT_SPLIT
+
+/*
+ * 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
+
+//#define PREVENT_STUCK_MODIFIERS
+//#define TAPPING_TERM 150
+//#define IGNORE_MOD_TAP_INTERRUPT
+//#define TAPPING_FORCE_HOLD
+
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 6
+#define BOOTMAGIC_LITE_ROW_RIGHT 5
+#define BOOTMAGIC_LITE_COLUMN_RIGHT 0
diff --git a/keyboards/handwired/brain/keymaps/default/keymap.c b/keyboards/handwired/brain/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a3f750542b8
--- /dev/null
+++ b/keyboards/handwired/brain/keymaps/default/keymap.c
@@ -0,0 +1,119 @@
+#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 layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+[_QWERTY] = LAYOUT(
+ // |------------------------------------------. ,---------------------------------------------,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ //|------+------+------+------+------+------+-------| |------+------+------+-------+--------+-------+--------,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, 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_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC,
+ //|------+------+------+------+------+------+-------| |------+------+------+-------+-------+--------+--------|
+ KC_NO, KC_NO, KC_NO, LOWER, KC_SPC, KC_ENT, RAISE, KC_NO, KC_NO, KC_NO,
+ //|------+------| //|-------+------+-------| |------+------+------| |-------+--------|
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ //`----------------------' `--------------------'
+
+ ),
+
+[_LOWER] = LAYOUT(
+ // |-----------------------------------------------. ,--------------------------------------------------------,
+ KC_1, KC_2, KC_3, KC_3, KC_4, KC_ESC, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ //|------+------+------+--------+-------+------+---------| |--------+--------+--------+---------+---------+---------+--------,
+ KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_NO, KC_BSPC,
+ //|------+------+------+--------+-------+------+---------| |--------+--------+--------+---------+---------+---------+--------,
+ KC_LSFT, 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_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_NO, KC_NO,
+ //|------+------| //|------+------+----------| |--------+------+----------| |---------+---------|
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ //`------------------------' `--------------------------'
+ ),
+
+[_RAISE] = LAYOUT(
+ // |------------------------------------------------. ,-----------------------------------------------------,
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_ESC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ //|------+------+------+--------+-------+------+---------| |--------+--------+--------+--------+--------+--------+--------,
+ KC_LCTL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+ //|------+------+------+--------+-------+------+---------| |--------+--------+--------+--------+--------+--------+--------,
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+ //|------+------+------+---+----+-------+------+---------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_NO, KC_NO, KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_NO, KC_NO,
+ //|------+------| //|------+------+----------| |--------+------+----------| |--------+--------|
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ //`------------------------' `--------------------------'
+ ),
+
+
+[_ADJUST] = 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_LCTL, 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_LSFT, 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_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_NO, KC_NO,
+ //|------+------| //|------+------+----------| |--------+------+----------| |--------+--------|
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ //`------------------------' `--------------------------'
+ )
+
+
+};
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/handwired/brain/keymaps/klackygears/config.h b/keyboards/handwired/brain/keymaps/klackygears/config.h
new file mode 100644
index 00000000000..4dd99c8b3a2
--- /dev/null
+++ b/keyboards/handwired/brain/keymaps/klackygears/config.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2020 James Smith
+
+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 .
+*/
+
+#pragma once
+
+//#define USE_SERIAL
+
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 150
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#undef RGBLIGHT_RAINBOW_SWIRL_RANGE
+#define RGBLIGHT_RAINBOW_SWIRL_RANGE 75
+#define RGBLIGHT_EFFECT_SNAKE
+#undef RGBLIGHT_EFFECT_SNAKE_LENGTH
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 20
+#define RGBLIGHT_EFFECT_KNIGHT
+#undef RGBLIGHT_EFFECT_KNIGHT_LENGTH
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 20
+
+// #define RGBLIGHT_EFFECT_CHRISTMAS
+// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+// #define RGBLIGHT_EFFECT_RGB_TEST
+// #define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1 / 127
diff --git a/keyboards/handwired/brain/keymaps/klackygears/keymap.c b/keyboards/handwired/brain/keymaps/klackygears/keymap.c
new file mode 100644
index 00000000000..07185446db6
--- /dev/null
+++ b/keyboards/handwired/brain/keymaps/klackygears/keymap.c
@@ -0,0 +1,99 @@
+#include QMK_KEYBOARD_H
+#include "klackygears.h"
+
+//For an explanation of what's going on here with the keymap wrappers, check out drashna's user folder.
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_WINBASE] = LAYOUT_wrapper(
+ _______________DVORAK_L1___________________, KC_ESC, KC_GAMER, _______________DVORAK_R1___________________,
+ RGB_TOG, _______________DVORAK_L2___________________, _______, KC_GAMR1, _______________DVORAK_R2___________________, RGB_TOG,
+ RGB_MOD, _______________WINDVK_L3___________________, _______, KC_GAMR2, _______________WINDVK_R3___________________, RGB_MOD,
+ _______, _______, __________________WIN_THUMB_CLUSTER_V2______________ , _______, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+
+ [_MACBASE] = LAYOUT_wrapper(
+ _______________DVORAK_L1___________________, KC_ESC, _______, _______________DVORAK_R1___________________,
+ RGB_TOG, _______________DVORAK_L2___________________, _______, _______, _______________DVORAK_R2___________________, RGB_TOG,
+ RGB_MOD, _______________MACDVK_L3___________________, _______, _______, _______________MACDVK_R3___________________, RGB_MOD,
+ _______, _______, __________________MAC_THUMB_CLUSTER_V2______________ , _______, _______,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+
+
+ [_QWERTY] = LAYOUT_wrapper(
+ _________________QWERTY_L1_________________, KC_ESC, _______, _________________QWERTY_R1_________________,
+ KC_CAPS, _________________QWERTY_L2_________________, _______, _______, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _______, _______, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_LGUI, MO(_MNMB), MO(_SYMB), MO(_SYMB), MO(_MNMB), KC_RGUI, MO(_MDIA), MO(_FUNC),
+ KC_LSFT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RSFT
+ ),
+ //Jedi - Fallen Order
+ [_GAMER] = LAYOUT_wrapper(
+ KC_R, KC_Q, KC_W, KC_E, KC_1, KC_ESC, KC_WINBASE, _________________RGB_1_____________________,
+ KC_TAB, KC_F, KC_A, KC_S, KC_D, KC_2, LSFT(KC_F2), KC_GAMR1, _________________RGB_2_____________________, RGB_TOG,
+ KC_TAB, KC_TAB, KC_X, KC_Z, KC_C, KC_3, KC_M, KC_GAMR2, _________________MEDIA_____________________, RGB_MOD,
+ KC_LCTL, KC_LALT, KC_LCTL, KC_LSFT, KC_SPC, _______, KC_UP, _______, _______, _______,
+ KC_NO, KC_LSFT, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ //Borderlands
+ [_GAMR1] = LAYOUT_wrapper(
+ KC_R, KC_G, KC_W, KC_E, KC_1, KC_ESC, KC_WINBASE, _________________RGB_1_____________________,
+ KC_TAB, KC_V, KC_A, KC_S, KC_D, KC_2, KC_L, KC_GAMR1, _________________RGB_2_____________________, RGB_TOG,
+ KC_T, KC_I, KC_F, KC_Q, KC_4, KC_3, KC_M, KC_GAMR2, _________________MEDIA_____________________, RGB_MOD,
+ KC_X, KC_K, KC_C, KC_LSFT, KC_SPC, _______, KC_UP, _______, _______, _______,
+ KC_Z, KC_LSFT, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ //Witcher
+ [_GAMR2] = LAYOUT_wrapper(
+ KC_R, KC_Q, KC_W, KC_E, KC_1, KC_ESC, KC_WINBASE, _________________RGB_1_____________________,
+ KC_TAB, KC_LALT, KC_A, KC_S, KC_D, KC_2, KC_J, KC_GAMR1, _________________RGB_2_____________________, RGB_TOG,
+ KC_X, KC_I, KC_F, KC_C, KC_V, KC_3, KC_M, KC_GAMR2, _________________MEDIA_____________________, RGB_MOD,
+ KC_LCTL, KC_V, KC_HOME, KC_LSFT, KC_SPC, _______, KC_UP, _______, _______, _______,
+ KC_ENT, KC_LCTL, KC_LSFT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_SYMB] = LAYOUT_wrapper(
+ _________________PUNC_L1_ALT_______________, _______, _______, _________________PUNC_R1___________________,
+ _______, _________________PUNC_L3___________________, _______, _______, _________________PUNC_R2___________________, _______,
+ RGB_MOD, _________________PUNC_L3_ALT_______________, _______, _______, _________________PUNC_R3___________________, _______,
+ _______, _______, _______, _______, KC_DEL, KC_CAPS, _______, _______, _______, _______,
+ _______, _______, KC_DEL, KC_CAPS, _______, _______
+ ),
+
+ [_FUNC] = LAYOUT_wrapper(
+ _____________FUNC_L1_______________________, _______, _______, _______, _____________FUNC_1_______________,
+ _______, ________MAC_MISSION_CTRL__________, LGUI(KC_L), _______, _______, _______, _____________FUNC_2_______________, _______,
+ RGB_MOD, _____________FUNC_L3_______________________, _______, _______, _______, _____________FUNC_3_______________, _______,
+ _______, _______, _______, _______, _______, KC_CAPS, _______, _______, _______, _______,
+ _______, _______, _______, KC_CAPS, _______, _______
+ ),
+
+ [_MNMB] = LAYOUT_wrapper(
+ _________________MACNAV_L1_________________, _______, _______, _________________NUMB_R1___________________,
+ _______, _________________MACNAV_L2_________________, _______, _______, _________________NUMB_R2___________________, _______,
+ RGB_MOD, _________________MACNAV_L3_________________, _______, _______, _________________NUMB_R3_MAC_______________, _______,
+ _______, _______, _______, _______, _______, _______, RSFT_T(KC_ENT), KC_RSFT, _______, _______,
+ _______, _______, _______, _______, RSFT_T(KC_ENT), KC_RSFT
+ ),
+
+
+ [_NUMB] = LAYOUT_wrapper(
+ _________________WINNAV_L1_________________, _______, _______, _________________NUMB_R1___________________,
+ _______, _________________WINNAV_L2_________________, _______, _______, _________________NUMB_R2___________________, _______,
+ RGB_MOD, _________________WINNAV_L3_________________, _______, _______, _________________NUMB_R3_WIN_______________, _______,
+ _______, _______, _______, _______, _______, _______, RSFT_T(KC_ENT), KC_RSFT, _______, _______,
+ _______, _______, _______, _______, RSFT_T(KC_ENT), KC_RSFT
+ ),
+
+ [_MDIA] = LAYOUT_wrapper(
+ _________________LYOUT_____________________, _______, RGB_TOG, _________________RGB_1_____________________,
+ _______, _________________KC_BLANK__________________, _______, _______, _________________RGB_2_____________________, _______,
+ RGB_MOD, _________________KC_BLANK__________________, _______, _______, _________________MEDIA_____________________, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+
+ };
diff --git a/keyboards/handwired/brain/keymaps/klackygears/rules.mk b/keyboards/handwired/brain/keymaps/klackygears/rules.mk
new file mode 100644
index 00000000000..26c9daf6ad3
--- /dev/null
+++ b/keyboards/handwired/brain/keymaps/klackygears/rules.mk
@@ -0,0 +1,3 @@
+
+RGBLIGHT_ENABLE = yes #Enable WS2812 RGB underlight.
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/handwired/brain/readme.md b/keyboards/handwired/brain/readme.md
new file mode 100644
index 00000000000..4a5ad4b94d1
--- /dev/null
+++ b/keyboards/handwired/brain/readme.md
@@ -0,0 +1 @@
+#The Brain is a tented ergo split handwired keyboard with a sculped shell that can be changed out for other options.
diff --git a/keyboards/handwired/brain/rules.mk b/keyboards/handwired/brain/rules.mk
new file mode 100644
index 00000000000..2c24d019b44
--- /dev/null
+++ b/keyboards/handwired/brain/rules.mk
@@ -0,0 +1,24 @@
+# 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
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI controls
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/handwired/fruity60/readme.md b/keyboards/handwired/fruity60/readme.md
index ed476d26435..23aafc49ac3 100644
--- a/keyboards/handwired/fruity60/readme.md
+++ b/keyboards/handwired/fruity60/readme.md
@@ -5,7 +5,7 @@
A 60% tsangan, split bs/rs keyboard designed to support the bluefruit 32u4 ble controller
Keyboard Maintainer: [Yan-Fa Li](https://github.com/yanfali)
-Hardware Supported: [github](https://github.com/yanfali/fruity60)
+Hardware Supported: [GitHub](https://github.com/yanfali/fruity60)
Hardware Availability: You can make them yourself by downloading kicad and generating gerbers.
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/handwired/hnah40/rules.mk b/keyboards/handwired/hnah40/rules.mk
index a705bff6abf..0df52f7de63 100644
--- a/keyboards/handwired/hnah40/rules.mk
+++ b/keyboards/handwired/hnah40/rules.mk
@@ -11,9 +11,6 @@ MCU = atmega328p
# ATmega328P USBasp
BOOTLOADER = USBasp
-# disable debug code
-OPT_DEFS = -DDEBUG_LEVEL=0
-
# Build Options
# change yes to no to disable
#
diff --git a/keyboards/handwired/jotanck/keymaps/default/keymap.c b/keyboards/handwired/jotanck/keymaps/default/keymap.c
index 3de30d396b7..1524c758abe 100644
--- a/keyboards/handwired/jotanck/keymaps/default/keymap.c
+++ b/keyboards/handwired/jotanck/keymaps/default/keymap.c
@@ -1,9 +1,7 @@
-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-// this is the style you want to emulate.
+// This is the default layout for the handwired/jotanck keyboard
#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
@@ -12,14 +10,11 @@
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
+#define _ADJUST 3
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
-static bool is_ctl_pressed;
-static bool is_esc_pressed;
-static bool is_bspc_pressed;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -75,6 +70,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
),
+
+[_ADJUST] = LAYOUT_ortho_4x12 (
+ _______, RESET, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
};
@@ -95,26 +97,5 @@ layer_state_t layer_state_set_user(layer_state_t state) {
break;
};
#endif
- return state;
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case KC_LCTL:
- is_ctl_pressed = record->event.pressed;
- break;
- case KC_ESC:
- is_esc_pressed = record->event.pressed;
- break;
- case KC_BSPC:
- is_bspc_pressed = record->event.pressed;
- break;
- };
- return true;
-}
-
-void matrix_scan_user(void) {
- if (is_ctl_pressed && is_esc_pressed && is_bspc_pressed) {
- reset_keyboard();
- }
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
diff --git a/keyboards/handwired/jotanck/readme.md b/keyboards/handwired/jotanck/readme.md
index 3ceea1ef4c1..4e4b71d4e8b 100644
--- a/keyboards/handwired/jotanck/readme.md
+++ b/keyboards/handwired/jotanck/readme.md
@@ -35,6 +35,6 @@ Make example for this keyboard (after setting up your build environment):

-To reset the keyboard press Ctrl+Esc+BackSpace
+To reset the keyboard press Lower+Raise+Q
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/juliet/config.h b/keyboards/handwired/juliet/config.h
new file mode 100644
index 00000000000..6713749d867
--- /dev/null
+++ b/keyboards/handwired/juliet/config.h
@@ -0,0 +1,220 @@
+/*
+Copyright 2020 na-cly
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+#define VENDOR_ID 0x6B62
+#define PRODUCT_ID 0x4069
+#define DEVICE_VER 0x0001
+#define MANUFACTURER nacly
+#define PRODUCT juliet
+#define DESCRIPTION Pro Micro Enabled ROMEO: ROMEO by coseyfannitutti
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * 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)
+ *
+ */
+
+/* A Custom matrix.c is used to poll the port expander C6 shows that the pins are hardwired there */
+/* 0 1 2 3 4 5 6 7 8 9 10 11*/
+#define MATRIX_ROW_PINS { F5, D2, D3, F4 }
+#define MATRIX_COL_PINS { D1, D0, D4, C6, D7, E6, B4, B5, B1, B3, B2, B6}
+
+/* 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
+// #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
+
+/* number of backlight levels */
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
+
+
+/* Bootmagic Lite key configuration
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
+*/
diff --git a/keyboards/handwired/juliet/info.json b/keyboards/handwired/juliet/info.json
new file mode 100644
index 00000000000..1cf2a192e15
--- /dev/null
+++ b/keyboards/handwired/juliet/info.json
@@ -0,0 +1,21 @@
+{
+ "keyboard_name": "juliet",
+ "url": "https://github.com/Na-Cly/juliet",
+ "maintainer": "Na-Cly",
+ "width": 13,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"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}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"1.25u", "x":0, "y":2, "w":1.25}, {"x":1.25, "y":2}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1.25u", "x":2.25, "y":3, "w":1.25}, {"label":"2.25u", "x":3.5, "y":3, "w":2.25}, {"label":"1u", "x":5.75, "y":3}, {"label":"2.75u", "x":6.75, "y":3, "w":2.75}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
+ },
+ "LAYOUT_ansi_split_lshift": {
+ "layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"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}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"1.25u", "x":0, "y":2, "w":1.25}, {"x":1.25, "y":2}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1u", "x":2.25, "y":3}, {"label":"6.25u", "x":3.25, "y":3, "w":6.25}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
+ },
+ "LAYOUT_ansi_split_space": {
+ "layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"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}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"2.25u", "x":0, "y":2, "w":2.25}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1.25u", "x":2.25, "y":3, "w":1.25}, {"label":"2.25u", "x":3.5, "y":3, "w":2.25}, {"label":"1u", "x":5.75, "y":3}, {"label":"2.75u", "x":6.75, "y":3, "w":2.75}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
+ },
+ "LAYOUT_ansi_40": {
+ "layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"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}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"2.25u", "x":0, "y":2, "w":2.25}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1u", "x":2.25, "y":3}, {"label":"6.25u", "x":3.25, "y":3, "w":6.25}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/juliet/juliet.c b/keyboards/handwired/juliet/juliet.c
new file mode 100644
index 00000000000..fd8a9bf8686
--- /dev/null
+++ b/keyboards/handwired/juliet/juliet.c
@@ -0,0 +1,16 @@
+/* Copyright 2019 coseyfannitutti
+ *
+ * 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 .
+ */
+#include "juliet.h"
diff --git a/keyboards/handwired/juliet/juliet.h b/keyboards/handwired/juliet/juliet.h
new file mode 100644
index 00000000000..971a391b433
--- /dev/null
+++ b/keyboards/handwired/juliet/juliet.h
@@ -0,0 +1,76 @@
+/* Copyright 2019 coseyfannitutti
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define _x_ 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, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K34, K36, K37, K39, K3A, K3B \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
+{ K30, K31, K32, _x_, K34, _x_, K36, K37, _x_, K39, K3A, K3B, } \
+}
+
+#define LAYOUT_ansi_40( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K36, K39, K3A, K3B \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
+{ K20, _x_, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
+{ K30, K31, K32, _x_, _x_, _x_, K36, _x_, _x_, K39, K3A, K3B, } \
+}
+
+#define LAYOUT_ansi_split_lshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K36, K39, K3A, K3B \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
+{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
+{ K30, K31, K32, _x_, _x_, _x_, K36, _x_, _x_, K39, K3A, K3B, } \
+}
+
+#define LAYOUT_ansi_split_space( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K34, K36, K37, K39, K3A, K3B \
+) { \
+{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
+{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
+{ K20, _x_, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
+{ K30, K31, K32, _x_, K34, _x_, K36, K37, _x_, K39, K3A, K3B, } \
+}
diff --git a/keyboards/handwired/juliet/keymaps/default/keymap.c b/keyboards/handwired/juliet/keymaps/default/keymap.c
new file mode 100644
index 00000000000..1d7f5569a2c
--- /dev/null
+++ b/keyboards/handwired/juliet/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
+/* Copyright 2019 COSEYFANNITUTTI
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ 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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,
+ KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_ENT, KC_SPC, KC_RALT, MO(1), KC_RCTL ),
+
+ [1] = 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_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_ENT,
+ KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_SLSH, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
+};
diff --git a/keyboards/handwired/juliet/readme.md b/keyboards/handwired/juliet/readme.md
new file mode 100644
index 00000000000..59853c133f0
--- /dev/null
+++ b/keyboards/handwired/juliet/readme.md
@@ -0,0 +1,15 @@
+# juliet
+
+Pro Micro Enabled ROMEO.
+
+Original PCB design by coseyfannitutti
+
+* Keyboard Maintainer: [NaCly](https://github.com/Na-Cly)
+* Hardware Supported: juliet PCB, Pro Micro
+* Hardware Availability: https://github.com/Na-Cly/juliet
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/juliet: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/juliet/rules.mk b/keyboards/handwired/juliet/rules.mk
new file mode 100644
index 00000000000..25dfc3947c5
--- /dev/null
+++ b/keyboards/handwired/juliet/rules.mk
@@ -0,0 +1,32 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# 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
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/handwired/k8split/README.md b/keyboards/handwired/k8split/README.md
new file mode 100644
index 00000000000..01c3365abc1
--- /dev/null
+++ b/keyboards/handwired/k8split/README.md
@@ -0,0 +1,21 @@
+# k8split
+
+
+
+my personal 8x6(x2) split keyboard, aiming to be a mostly normal keyboard layout with plenty of keys. see the hardware repo for more info.
+
+* Keyboard Maintainer: [Ckath](https://github.com/Ckath)
+* Hardware: https://github.com/Ckath/k8split
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/k8split:default
+
+Flashing (both halves are separate keyboards and the default layout is just for debugging):
+
+ # left
+ make handwired/k8split:left:flash
+ # right
+ make handwired/k8split:right: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/handwired/k8split/config.h b/keyboards/handwired/k8split/config.h
new file mode 100644
index 00000000000..234ab1adb38
--- /dev/null
+++ b/keyboards/handwired/k8split/config.h
@@ -0,0 +1,48 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC81D
+#define PRODUCT_ID 0xC868
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Ckat
+#define PRODUCT k8split
+#define DESCRIPTION custom split keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 8
+
+/*
+ * 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 { D5, D3, D2, D1, D0, B7 }
+#define MATRIX_COL_PINS { C7, C6, B6, B5, B4, D7, D6, D4 }
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/handwired/k8split/k8split.c b/keyboards/handwired/k8split/k8split.c
new file mode 100644
index 00000000000..300a075ae47
--- /dev/null
+++ b/keyboards/handwired/k8split/k8split.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#include "k8split.h"
diff --git a/keyboards/handwired/k8split/k8split.h b/keyboards/handwired/k8split/k8split.h
new file mode 100644
index 00000000000..247c0d775a9
--- /dev/null
+++ b/keyboards/handwired/k8split/k8split.h
@@ -0,0 +1,37 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00, k06, k12, k18, k24, k30, k36, k42, \
+ k01, k07, k13, k19, k25, k31, k37, k43, \
+ k02, k08, k14, k20, k26, k32, k38, k44, \
+ k03, k09, k15, k21, k27, k33, k39, k45, \
+ k04, k10, k16, k22, k28, k34, k40, k46, \
+ k05, k11, k17, k23, k29, k35, k41, k47 \
+) \
+{ \
+ { k00, k06, k12, k18, k24, k30, k36, k42 }, \
+ { k01, k07, k13, k19, k25, k31, k37, k43 }, \
+ { k02, k08, k14, k20, k26, k32, k38, k44 }, \
+ { k03, k09, k15, k21, k27, k33, k39, k45 }, \
+ { k04, k10, k16, k22, k28, k34, k40, k46 }, \
+ { k05, k11, k17, k23, k29, k35, k41, k47 } \
+}
diff --git a/keyboards/handwired/k8split/keymaps/default/keymap.c b/keyboards/handwired/k8split/keymaps/default/keymap.c
new file mode 100644
index 00000000000..84dc7498ccf
--- /dev/null
+++ b/keyboards/handwired/k8split/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+/* DEBUG
+ default map is strictly for debugging shorts
+ flash either the left or right keymap accordingly */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_0, KC_5, KC_0, KC_5, KC_0, KC_5, KC_0, KC_5,
+ KC_1, KC_4, KC_1, KC_4, KC_1, KC_4, KC_1, KC_4,
+ KC_2, KC_3, KC_2, KC_3, KC_2, KC_3, KC_2, KC_3,
+ KC_3, KC_2, KC_3, KC_2, KC_3, KC_2, KC_3, KC_2,
+ KC_4, KC_1, KC_4, KC_1, KC_4, KC_1, KC_4, KC_1,
+ KC_5, KC_0, KC_5, KC_0, KC_5, KC_0, KC_5, KC_0
+ )
+};
diff --git a/keyboards/handwired/k8split/keymaps/left/config.h b/keyboards/handwired/k8split/keymaps/left/config.h
new file mode 100644
index 00000000000..968a6eb413c
--- /dev/null
+++ b/keyboards/handwired/k8split/keymaps/left/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#pragma once
+
+/* ensure NKRO is on */
+#define FORCE_NKRO
diff --git a/keyboards/handwired/k8split/keymaps/left/keymap.c b/keyboards/handwired/k8split/keymaps/left/keymap.c
new file mode 100644
index 00000000000..473a3b9f76e
--- /dev/null
+++ b/keyboards/handwired/k8split/keymaps/left/keymap.c
@@ -0,0 +1,47 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+#define KC_AUDIO_MMUTE KC_F20
+#define KC_COMP KC_APP
+
+/* LEFT
+ +---------------------------------------+
+ | ESC| F1 | F2 | F3 | F4 | F5 | F6 |MUTE|
+ +---------------------------------------|
+ | ` | 1 | 2 | 3 | 4 | 5 | 6 |MMIC|
+ +-----------------------------------------+
+ | TAB | q | w | e | r | t | JP | MWU|
+ +------------------------------------------+
+ | CTRL | a | s | d | f | g |COMP| MWD|
+ +---------------------------------------------|
+ | SHIFT | z | x | c | v | b | F13| F14|
+ +-------------------------------------------------+
+ | CTRL |CAPS|SUPR| ALT | SPACE | F15| F16| F17|
+ +-------------------------------------------------+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_AUDIO_MUTE,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_AUDIO_MMUTE,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MHEN, KC_MS_WH_UP,
+ KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_COMP, KC_MS_WH_DOWN,
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F13, KC_F14,
+ KC_LCTRL, KC_CAPS, KC_LWIN, KC_LALT, KC_SPC, KC_F15, KC_F16, KC_F17
+ )
+};
diff --git a/keyboards/handwired/k8split/keymaps/right/config.h b/keyboards/handwired/k8split/keymaps/right/config.h
new file mode 100644
index 00000000000..968a6eb413c
--- /dev/null
+++ b/keyboards/handwired/k8split/keymaps/right/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#pragma once
+
+/* ensure NKRO is on */
+#define FORCE_NKRO
diff --git a/keyboards/handwired/k8split/keymaps/right/keymap.c b/keyboards/handwired/k8split/keymaps/right/keymap.c
new file mode 100644
index 00000000000..3c804f2cae7
--- /dev/null
+++ b/keyboards/handwired/k8split/keymaps/right/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Ckat
+
+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 .
+*/
+
+#include QMK_KEYBOARD_H
+
+/* RIGHT
+ +---------------------------------------+
+ | F7 | F8 | F9 | F10| F11| F12| INS|PSCR|
+ +--------------------------------------------|
+ | DEL| 7 | 8 | 9 | 0 | - | = | BCKSPC |
+ +--------------------------------------------|
+ | y | u | i | o | p | [ | ] | \ |
+ +---------------------------------------------|
+ |PGUP| h | j | k | l | ; | ' | ENTER |
+ +-----------------------------------------------|
+ |HOME|PGDN| n | m | , | . | / | SHIFT |
+ +-------------------------------------------------+
+ | END| SPACE | ALT | <- | ↓ | ↑ | -> | CTRL |
+ +-------------------------------------------------+ */
+
+/* /!\: rows are reversed in this half because I did all pcb design drunk */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_END, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_RCTRL,
+ KC_HOME, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT,
+ KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_DEL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_PSCR
+ )
+};
diff --git a/keyboards/handwired/k8split/rules.mk b/keyboards/handwired/k8split/rules.mk
new file mode 100644
index 00000000000..3c7b0282c59
--- /dev/null
+++ b/keyboards/handwired/k8split/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# 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 = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/handwired/k_numpad17/info.json b/keyboards/handwired/k_numpad17/info.json
new file mode 100644
index 00000000000..65bc57d7866
--- /dev/null
+++ b/keyboards/handwired/k_numpad17/info.json
@@ -0,0 +1,34 @@
+{
+ "keyboard_name": "K-Numpad17",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_numpad_5x4": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2},
+ {"x": 3, "y": 1, "h": 2},
+
+ {"x": 0, "y": 3},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+
+ {"x": 0, "y": 4, "w": 2},
+ {"x": 2, "y": 4},
+ {"x": 3, "y": 3, "h": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/lovelive9/info.json b/keyboards/handwired/lovelive9/info.json
index 4f81d321d9e..fffeb342d38 100644
--- a/keyboards/handwired/lovelive9/info.json
+++ b/keyboards/handwired/lovelive9/info.json
@@ -1,12 +1,22 @@
{
- "keyboard_name": "lovelive9",
- "url": "https://github.com/ginjake",
- "maintainer": "ginjake",
- "width": 9,
- "height": 1,
- "layouts": {
- "LAYOUT": {
- "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"k07", "x":7, "y":0}, {"label":"k08", "x":8, "y":0}]
+ "keyboard_name": "lovelive9",
+ "url": "https://github.com/ginjake",
+ "maintainer": "ginjake",
+ "width": 9,
+ "height": 4.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 0.5, "y": 1.25},
+ {"x": 1.5, "y": 2.5},
+ {"x": 2.75, "y": 3.25},
+ {"x": 4, "y": 3.5},
+ {"x": 5.25, "y": 3.25},
+ {"x": 6.5, "y": 2.5},
+ {"x": 7.5, "y": 1.25},
+ {"x": 8, "y": 0}
+ ]
+ }
}
- }
}
diff --git a/keyboards/handwired/magicforce61/rules.mk b/keyboards/handwired/magicforce61/rules.mk
index d1ed63f65b3..b72fff09602 100644
--- a/keyboards/handwired/magicforce61/rules.mk
+++ b/keyboards/handwired/magicforce61/rules.mk
@@ -14,17 +14,17 @@ BOOTLOADER = halfkay
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # 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
+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 on B7 by default
-MIDI_ENABLE ?= no # MIDI controls
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no # Audio output on port C6
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
diff --git a/keyboards/handwired/mechboards_micropad/readme.md b/keyboards/handwired/mechboards_micropad/readme.md
index 36230b1281b..c669d0f0d93 100644
--- a/keyboards/handwired/mechboards_micropad/readme.md
+++ b/keyboards/handwired/mechboards_micropad/readme.md
@@ -3,7 +3,7 @@ Mechboards Micropad
This was a freebie, use me and find out more about me :)
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
Hardware Supported: ATMega32u4
Hardware Availability: Random mechboards.co.uk order and UK meetups!
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c
index 602bdd157bc..94d9289cdcd 100644
--- a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c
@@ -29,7 +29,6 @@ TRAN
#define TT_SYM MO(_SYM)
#define TT_MOV LT(_MOV,KC_BSPC)
#define TT_NUM MO(_NUM)
-#define SSFT ACTION_MODS_ONESHOT(MOD_LSFT)
enum macro_keycodes {
DHPASTE=1,
diff --git a/keyboards/handwired/myskeeb/readme.md b/keyboards/handwired/myskeeb/readme.md
new file mode 100644
index 00000000000..80be57e4b68
--- /dev/null
+++ b/keyboards/handwired/myskeeb/readme.md
@@ -0,0 +1,11 @@
+# myskeeb
+
+Handwired Keyboard based on the Ergodash, with an OLED similar to Kyria.
+
+* Keyboard Maintainer: [su8044](https://github.com/su8044)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/myskeeb: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/not_so_minidox/rules.mk b/keyboards/handwired/not_so_minidox/rules.mk
index ae5cb83b7bf..6e87d7545cb 100644
--- a/keyboards/handwired/not_so_minidox/rules.mk
+++ b/keyboards/handwired/not_so_minidox/rules.mk
@@ -15,21 +15,21 @@ BOOTLOADER = caterina
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= no # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no # Audio output on port C6
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight.
-USE_I2C ?= no
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+USE_I2C = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes
SRC += matrix.c \
diff --git a/keyboards/handwired/novem/info.json b/keyboards/handwired/novem/info.json
index df0b6932010..6a18a5af211 100644
--- a/keyboards/handwired/novem/info.json
+++ b/keyboards/handwired/novem/info.json
@@ -10,8 +10,12 @@
{"label":"k00", "x":0, "y":0},
{"label":"k01", "x":1, "y":0},
{"label":"k02", "x":2, "y":0},
- {"label":"k10", "x":0, "y":1, "w":1.5},
- {"label":"k12", "x":1.5, "y":1, "w":1.5}
+ {"label":"k03", "x":0, "y":1},
+ {"label":"k04", "x":1, "y":1},
+ {"label":"k05", "x":2, "y":1},
+ {"label":"k06", "x":0, "y":2},
+ {"label":"k07", "x":1, "y":2},
+ {"label":"k08", "x":2, "y":2}
]
}
}
diff --git a/keyboards/handwired/onekey/blackpill_f401/rules.mk b/keyboards/handwired/onekey/blackpill_f401/rules.mk
index 36093820c98..609262049ca 100644
--- a/keyboards/handwired/onekey/blackpill_f401/rules.mk
+++ b/keyboards/handwired/onekey/blackpill_f401/rules.mk
@@ -20,7 +20,7 @@ MCU = cortex-m4
ARMV = 7
USE_FPU = yes
# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Options to pass to dfu-util when flashing
DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
diff --git a/keyboards/handwired/onekey/blackpill_f411/rules.mk b/keyboards/handwired/onekey/blackpill_f411/rules.mk
index 18fb92dbe88..f2e0f2b4f95 100644
--- a/keyboards/handwired/onekey/blackpill_f411/rules.mk
+++ b/keyboards/handwired/onekey/blackpill_f411/rules.mk
@@ -20,7 +20,7 @@ MCU = cortex-m4
ARMV = 7
USE_FPU = yes
# Address of the booloader in system memory
-STM32_BOOTLOADER_ADDRESS ?= 0x1FFF0000
+STM32_BOOTLOADER_ADDRESS = 0x1FFF0000
# Options to pass to dfu-util when flashing
DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
diff --git a/keyboards/handwired/onekey/keymaps/adc/keymap.c b/keyboards/handwired/onekey/keymaps/adc/keymap.c
index 6626894fac1..00238b8e6c6 100644
--- a/keyboards/handwired/onekey/keymaps/adc/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/adc/keymap.c
@@ -7,7 +7,7 @@ enum custom_keycodes {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT(ADC_SAMPLE) //
+ LAYOUT_ortho_1x1(ADC_SAMPLE)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
@@ -16,7 +16,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
int16_t val = analogReadPin(ADC_PIN);
- char buffer [50];
+ char buffer[50];
sprintf(buffer, "ADC:%u\n", val);
#ifdef CONSOLE_ENABLE
printf(buffer);
@@ -30,5 +30,5 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
};
// adc_mux pinToMux(pin_t pin) {
-// return TO_MUX( ADC_CHANNEL_IN1, 0 );
+// return TO_MUX(ADC_CHANNEL_IN1, 0);
// };
diff --git a/keyboards/handwired/onekey/keymaps/backlight/keymap.c b/keyboards/handwired/onekey/keymaps/backlight/keymap.c
index 1f4be16a623..1fbbc632da0 100644
--- a/keyboards/handwired/onekey/keymaps/backlight/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/backlight/keymap.c
@@ -2,39 +2,38 @@
//Tap Dance Declarations
enum {
- TD_BL = 0
+ TD_BL = 0
};
-void dance_cln_finished (qk_tap_dance_state_t *state, void *user_data) {
- // noop
+void dance_cln_finished(qk_tap_dance_state_t *state, void *user_data) {
+ // noop
}
-void dance_cln_reset (qk_tap_dance_state_t *state, void *user_data) {
- switch (state->count) {
- case 1:
- // single tap - step through backlight
- backlight_step();
- break;
+void dance_cln_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (state->count) {
+ case 1:
+ // single tap - step through backlight
+ backlight_step();
+ break;
#ifdef BACKLIGHT_BREATHING
- case 2:
- // double tap - toggle breathing
- breathing_toggle();
- break;
- case 3:
- //tripple tap - do some pulse stuff
- breathing_pulse();
- break;
+ case 2:
+ // double tap - toggle breathing
+ breathing_toggle();
+ break;
+ case 3:
+ // triple tap - do some pulse stuff
+ breathing_pulse();
+ break;
#endif
- default:
- // more - nothing
- break;
- }
+ default:
+ break;
+ }
}
qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_BL] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_cln_finished, dance_cln_reset)
+ [TD_BL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_cln_finished, dance_cln_reset)
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT( TD(TD_BL) )
+ LAYOUT_ortho_1x1(TD(TD_BL))
};
diff --git a/keyboards/handwired/onekey/keymaps/default/keymap.c b/keyboards/handwired/onekey/keymaps/default/keymap.c
index dd64f9fa55b..a5782f7a136 100644
--- a/keyboards/handwired/onekey/keymaps/default/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/default/keymap.c
@@ -1,5 +1,5 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT( KC_A )
+ LAYOUT_ortho_1x1(KC_A)
};
diff --git a/keyboards/handwired/onekey/keymaps/default_json/keymap.json b/keyboards/handwired/onekey/keymaps/default_json/keymap.json
new file mode 100644
index 00000000000..ce4c4b474df
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/default_json/keymap.json
@@ -0,0 +1,9 @@
+{
+ "keyboard": "handwired/onekey/pytest",
+ "keymap": "default_json",
+ "layout": "LAYOUT_ortho_1x1",
+ "layers": [["KC_A"]],
+ "author": "qmk",
+ "notes": "This file is a keymap.json file for handwired/onekey/pytest",
+ "version": 1
+}
diff --git a/keyboards/handwired/onekey/keymaps/eep_rst/keymap.c b/keyboards/handwired/onekey/keymaps/eep_rst/keymap.c
new file mode 100644
index 00000000000..3f7a6b8502c
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/eep_rst/keymap.c
@@ -0,0 +1,5 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ortho_1x1(EEP_RST)
+};
diff --git a/keyboards/handwired/onekey/keymaps/i2c_scanner/keymap.c b/keyboards/handwired/onekey/keymaps/i2c_scanner/keymap.c
index 262bd588f2b..ea8443709df 100644
--- a/keyboards/handwired/onekey/keymaps/i2c_scanner/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/i2c_scanner/keymap.c
@@ -21,7 +21,7 @@ i2c_status_t i2c_start_bodge(uint8_t address, uint16_t timeout) {
#endif
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT(KC_A) //
+ LAYOUT_ortho_1x1(KC_A)
};
void do_scan(void) {
diff --git a/keyboards/handwired/onekey/keymaps/reset/keymap.c b/keyboards/handwired/onekey/keymaps/reset/keymap.c
index 6a68fda8188..ec1b33e64fe 100644
--- a/keyboards/handwired/onekey/keymaps/reset/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/reset/keymap.c
@@ -1,5 +1,5 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT( RESET )
+ LAYOUT_ortho_1x1(RESET)
};
diff --git a/keyboards/handwired/onekey/keymaps/rgb/keymap.c b/keyboards/handwired/onekey/keymaps/rgb/keymap.c
index a96c6f38639..c3e77f1ec1b 100644
--- a/keyboards/handwired/onekey/keymaps/rgb/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/rgb/keymap.c
@@ -1,11 +1,11 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT( RGB_MOD )
+ LAYOUT_ortho_1x1(RGB_MOD)
};
void keyboard_post_init_user(void) {
- rgblight_enable_noeeprom();
- rgblight_sethsv_noeeprom_cyan();
- rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL);
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom_cyan();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL);
}
diff --git a/keyboards/handwired/onekey/onekey.h b/keyboards/handwired/onekey/onekey.h
index 2924ff3ff8d..72cab45be50 100644
--- a/keyboards/handwired/onekey/onekey.h
+++ b/keyboards/handwired/onekey/onekey.h
@@ -18,8 +18,8 @@
#include "quantum.h"
-#define LAYOUT( \
+#define LAYOUT_ortho_1x1( \
k00 \
- ) { \
- { k00 } \
+) { \
+ { k00 } \
}
diff --git a/keyboards/handwired/onekey/pytest/templates/keymap.c b/keyboards/handwired/onekey/pytest/templates/keymap.c
index d355210c47f..6cb25d52263 100644
--- a/keyboards/handwired/onekey/pytest/templates/keymap.c
+++ b/keyboards/handwired/onekey/pytest/templates/keymap.c
@@ -1 +1,2 @@
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {__KEYMAP_GOES_HERE__};
diff --git a/keyboards/handwired/p1800fl/info.json b/keyboards/handwired/p1800fl/info.json
index 1509b59d96a..93f4e8aaebc 100644
--- a/keyboards/handwired/p1800fl/info.json
+++ b/keyboards/handwired/p1800fl/info.json
@@ -75,11 +75,11 @@
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Up", "x":14.25, "y":3.25},
{"label":"1", "x":15.5, "y":3},
{"label":"2", "x":16.5, "y":3},
{"label":"3", "x":17.5, "y":3},
{"label":"Enter", "x":18.5, "y":3},
- {"label":"Up", "x":14.25, "y":3.25},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
@@ -87,12 +87,12 @@
{"label":"Ctrl", "x":10, "y":4},
{"label":"Win", "x":11, "y":4},
{"label":"Alt", "x":12, "y":4},
- {"label":"0", "x":16.5, "y":4},
- {"label":".", "x":17.5, "y":4},
- {"label":"Enter", "x":18.5, "y":4},
{"label":"Left", "x":13.25, "y":4.25},
{"label":"Down", "x":14.25, "y":4.25},
- {"label":"Right", "x":15.25, "y":4.25}
+ {"label":"Right", "x":15.25, "y":4.25},
+ {"label":"0", "x":16.5, "y":4},
+ {"label":".", "x":17.5, "y":4},
+ {"label":"Enter", "x":18.5, "y":4}
]
}
}
diff --git a/keyboards/handwired/twadlee/tp69/chconf.h b/keyboards/handwired/twadlee/tp69/chconf.h
new file mode 100644
index 00000000000..f1640bb1996
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/chconf.h
@@ -0,0 +1,700 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file rt/templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+# define CHCONF_H
+
+# define _CHIBIOS_RT_CONF_
+# define _CHIBIOS_RT_CONF_VER_6_0_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+# if !defined(CH_CFG_ST_RESOLUTION)
+# define CH_CFG_ST_RESOLUTION 32
+# endif
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+# if !defined(CH_CFG_ST_FREQUENCY)
+# define CH_CFG_ST_FREQUENCY 1000
+# endif
+
+/**
+ * @brief Time intervals data size.
+ * @note Allowed values are 16, 32 or 64 bits.
+ */
+# if !defined(CH_CFG_INTERVALS_SIZE)
+# define CH_CFG_INTERVALS_SIZE 32
+# endif
+
+/**
+ * @brief Time types data size.
+ * @note Allowed values are 16 or 32 bits.
+ */
+# if !defined(CH_CFG_TIME_TYPES_SIZE)
+# define CH_CFG_TIME_TYPES_SIZE 32
+# endif
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+# if !defined(CH_CFG_ST_TIMEDELTA)
+# define CH_CFG_ST_TIMEDELTA 0
+# endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+# if !defined(CH_CFG_TIME_QUANTUM)
+# define CH_CFG_TIME_QUANTUM 20
+# endif
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+# if !defined(CH_CFG_MEMCORE_SIZE)
+# define CH_CFG_MEMCORE_SIZE 0
+# endif
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+# if !defined(CH_CFG_NO_IDLE_THREAD)
+# define CH_CFG_NO_IDLE_THREAD FALSE
+# endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_OPTIMIZE_SPEED)
+# define CH_CFG_OPTIMIZE_SPEED TRUE
+# endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_TM)
+# define CH_CFG_USE_TM FALSE
+# endif
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_REGISTRY)
+# define CH_CFG_USE_REGISTRY TRUE
+# endif
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_WAITEXIT)
+# define CH_CFG_USE_WAITEXIT TRUE
+# endif
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_SEMAPHORES)
+# define CH_CFG_USE_SEMAPHORES TRUE
+# endif
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+# if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY)
+# define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+# endif
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_MUTEXES)
+# define CH_CFG_USE_MUTEXES TRUE
+# endif
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+# if !defined(CH_CFG_USE_MUTEXES_RECURSIVE)
+# define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+# endif
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+# if !defined(CH_CFG_USE_CONDVARS)
+# define CH_CFG_USE_CONDVARS TRUE
+# endif
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+# if !defined(CH_CFG_USE_CONDVARS_TIMEOUT)
+# define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+# endif
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_EVENTS)
+# define CH_CFG_USE_EVENTS TRUE
+# endif
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+# if !defined(CH_CFG_USE_EVENTS_TIMEOUT)
+# define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+# endif
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_MESSAGES)
+# define CH_CFG_USE_MESSAGES TRUE
+# endif
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+# if !defined(CH_CFG_USE_MESSAGES_PRIORITY)
+# define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+# endif
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+# if !defined(CH_CFG_USE_MAILBOXES)
+# define CH_CFG_USE_MAILBOXES TRUE
+# endif
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_MEMCORE)
+# define CH_CFG_USE_MEMCORE TRUE
+# endif
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+# if !defined(CH_CFG_USE_HEAP)
+# define CH_CFG_USE_HEAP TRUE
+# endif
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_MEMPOOLS)
+# define CH_CFG_USE_MEMPOOLS TRUE
+# endif
+
+/**
+ * @brief Objects FIFOs APIs.
+ * @details If enabled then the objects FIFOs APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_OBJ_FIFOS)
+# define CH_CFG_USE_OBJ_FIFOS TRUE
+# endif
+
+/**
+ * @brief Pipes APIs.
+ * @details If enabled then the pipes APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+# if !defined(CH_CFG_USE_PIPES)
+# define CH_CFG_USE_PIPES TRUE
+# endif
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+# if !defined(CH_CFG_USE_DYNAMIC)
+# define CH_CFG_USE_DYNAMIC TRUE
+# endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Objects factory options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Objects Factory APIs.
+ * @details If enabled then the objects factory APIs are included in the
+ * kernel.
+ *
+ * @note The default is @p FALSE.
+ */
+# if !defined(CH_CFG_USE_FACTORY)
+# define CH_CFG_USE_FACTORY TRUE
+# endif
+
+/**
+ * @brief Maximum length for object names.
+ * @details If the specified length is zero then the name is stored by
+ * pointer but this could have unintended side effects.
+ */
+# if !defined(CH_CFG_FACTORY_MAX_NAMES_LENGTH)
+# define CH_CFG_FACTORY_MAX_NAMES_LENGTH 8
+# endif
+
+/**
+ * @brief Enables the registry of generic objects.
+ */
+# if !defined(CH_CFG_FACTORY_OBJECTS_REGISTRY)
+# define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
+# endif
+
+/**
+ * @brief Enables factory for generic buffers.
+ */
+# if !defined(CH_CFG_FACTORY_GENERIC_BUFFERS)
+# define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
+# endif
+
+/**
+ * @brief Enables factory for semaphores.
+ */
+# if !defined(CH_CFG_FACTORY_SEMAPHORES)
+# define CH_CFG_FACTORY_SEMAPHORES TRUE
+# endif
+
+/**
+ * @brief Enables factory for mailboxes.
+ */
+# if !defined(CH_CFG_FACTORY_MAILBOXES)
+# define CH_CFG_FACTORY_MAILBOXES TRUE
+# endif
+
+/**
+ * @brief Enables factory for objects FIFOs.
+ */
+# if !defined(CH_CFG_FACTORY_OBJ_FIFOS)
+# define CH_CFG_FACTORY_OBJ_FIFOS TRUE
+# endif
+
+/**
+ * @brief Enables factory for Pipes.
+ */
+# if !defined(CH_CFG_FACTORY_PIPES) || defined(__DOXYGEN__)
+# define CH_CFG_FACTORY_PIPES TRUE
+# endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+# if !defined(CH_DBG_STATISTICS)
+# define CH_DBG_STATISTICS FALSE
+# endif
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+# if !defined(CH_DBG_SYSTEM_STATE_CHECK)
+# define CH_DBG_SYSTEM_STATE_CHECK TRUE
+# endif
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+# if !defined(CH_DBG_ENABLE_CHECKS)
+# define CH_DBG_ENABLE_CHECKS TRUE
+# endif
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+# if !defined(CH_DBG_ENABLE_ASSERTS)
+# define CH_DBG_ENABLE_ASSERTS TRUE
+# endif
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+# if !defined(CH_DBG_TRACE_MASK)
+# define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+# endif
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+# if !defined(CH_DBG_TRACE_BUFFER_SIZE)
+# define CH_DBG_TRACE_BUFFER_SIZE 128
+# endif
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+# if !defined(CH_DBG_ENABLE_STACK_CHECK)
+# define CH_DBG_ENABLE_STACK_CHECK TRUE
+# endif
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+# if !defined(CH_DBG_FILL_THREADS)
+# define CH_DBG_FILL_THREADS TRUE
+# endif
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+# if !defined(CH_DBG_THREADS_PROFILING)
+# define CH_DBG_THREADS_PROFILING FALSE
+# endif
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System structure extension.
+ * @details User fields added to the end of the @p ch_system_t structure.
+ */
+# define CH_CFG_SYSTEM_EXTRA_FIELDS /* Add threads custom fields here.*/
+
+/**
+ * @brief System initialization hook.
+ * @details User initialization code added to the @p chSysInit() function
+ * just before interrupts are enabled globally.
+ */
+# define CH_CFG_SYSTEM_INIT_HOOK() \
+ { /* Add threads initialization code here.*/ }
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+# define CH_CFG_THREAD_EXTRA_FIELDS /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p _thread_init() function.
+ *
+ * @note It is invoked from within @p _thread_init() and implicitly from all
+ * the threads creation APIs.
+ */
+# define CH_CFG_THREAD_INIT_HOOK(tp) \
+ { /* Add threads initialization code here.*/ }
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+# define CH_CFG_THREAD_EXIT_HOOK(tp) \
+ { /* Add threads finalization code here.*/ }
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+# define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) \
+ { /* Context switch code here.*/ }
+
+/**
+ * @brief ISR enter hook.
+ */
+# define CH_CFG_IRQ_PROLOGUE_HOOK() \
+ { /* IRQ prologue code here.*/ }
+
+/**
+ * @brief ISR exit hook.
+ */
+# define CH_CFG_IRQ_EPILOGUE_HOOK() \
+ { /* IRQ epilogue code here.*/ }
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+# define CH_CFG_IDLE_ENTER_HOOK() \
+ { /* Idle-enter code here.*/ }
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+# define CH_CFG_IDLE_LEAVE_HOOK() \
+ { /* Idle-leave code here.*/ }
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+# define CH_CFG_IDLE_LOOP_HOOK() \
+ { /* Idle loop code here.*/ }
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+# define CH_CFG_SYSTEM_TICK_HOOK() \
+ { /* System tick event code here.*/ }
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+# define CH_CFG_SYSTEM_HALT_HOOK(reason) \
+ { /* System halt code here.*/ }
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+# define CH_CFG_TRACE_HOOK(tep) \
+ { /* Trace code here.*/ }
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/handwired/twadlee/tp69/config.h b/keyboards/handwired/twadlee/tp69/config.h
new file mode 100644
index 00000000000..4da7d256033
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/config.h
@@ -0,0 +1,253 @@
+/*
+Copyright 2020 Tracy Wadleigh
+
+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 .
+*/
+
+#pragma once
+
+//#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xBEEF
+#define PRODUCT_ID 0xCACA
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Tracy Wadleigh
+#define PRODUCT tp69
+#define DESCRIPTION A custom 69-key 65% keyboard with a trackpoint under keycap
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+/*
+ * 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)
+ */
+/* 19 17 16 15 14 2 8 6 7 9 */
+#define MATRIX_ROW_PINS { B2, B1, B0, C0, D1, D0, D3, D4, D2, C3 }
+/* 20 21 18 0 1 3 4 5 */
+#define MATRIX_COL_PINS { D5, D6, A4, B16, B17, A1, A2, D7 }
+#define UNUSED_PINS
+
+/* for trackpoint: C1 (22) C2 (23) */
+
+/* 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+/*
+ * 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 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/handwired/twadlee/tp69/halconf.h b/keyboards/handwired/twadlee/tp69/halconf.h
new file mode 100644
index 00000000000..908c75542c4
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/halconf.h
@@ -0,0 +1,524 @@
+/*
+ ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+# define HALCONF_H
+
+# define _CHIBIOS_HAL_CONF_
+# define _CHIBIOS_HAL_CONF_VER_7_0_
+
+# include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+# if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+# define HAL_USE_PAL TRUE
+# endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+# if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+# define HAL_USE_ADC FALSE
+# endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+# if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+# define HAL_USE_CAN FALSE
+# endif
+
+/**
+ * @brief Enables the cryptographic subsystem.
+ */
+# if !defined(HAL_USE_CRY) || defined(__DOXYGEN__)
+# define HAL_USE_CRY FALSE
+# endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+# if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+# define HAL_USE_DAC FALSE
+# endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+# if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+# define HAL_USE_GPT FALSE
+# endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+# if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+# define HAL_USE_I2C FALSE
+# endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+# if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+# define HAL_USE_I2S FALSE
+# endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+# if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+# define HAL_USE_ICU FALSE
+# endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+# if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+# define HAL_USE_MAC FALSE
+# endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+# if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+# define HAL_USE_MMC_SPI FALSE
+# endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+# if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+# define HAL_USE_PWM FALSE
+# endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+# if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+# define HAL_USE_RTC FALSE
+# endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+# if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+# define HAL_USE_SDC FALSE
+# endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+# if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+# define HAL_USE_SERIAL FALSE
+# endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+# if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+# define HAL_USE_SERIAL_USB FALSE
+# endif
+
+/**
+ * @brief Enables the SIO subsystem.
+ */
+# if !defined(HAL_USE_SIO) || defined(__DOXYGEN__)
+# define HAL_USE_SIO FALSE
+# endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+# if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+# define HAL_USE_SPI FALSE
+# endif
+
+/**
+ * @brief Enables the TRNG subsystem.
+ */
+# if !defined(HAL_USE_TRNG) || defined(__DOXYGEN__)
+# define HAL_USE_TRNG FALSE
+# endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+# if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+# define HAL_USE_UART FALSE
+# endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+# if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+# define HAL_USE_USB TRUE
+# endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+# if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+# define HAL_USE_WDG FALSE
+# endif
+
+/**
+ * @brief Enables the WSPI subsystem.
+ */
+# if !defined(HAL_USE_WSPI) || defined(__DOXYGEN__)
+# define HAL_USE_WSPI FALSE
+# endif
+
+/*===========================================================================*/
+/* PAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(PAL_USE_CALLBACKS) || defined(__DOXYGEN__)
+# define PAL_USE_CALLBACKS FALSE
+# endif
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(PAL_USE_WAIT) || defined(__DOXYGEN__)
+# define PAL_USE_WAIT FALSE
+# endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+# define ADC_USE_WAIT TRUE
+# endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+# define ADC_USE_MUTUAL_EXCLUSION TRUE
+# endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+# if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+# define CAN_USE_SLEEP_MODE TRUE
+# endif
+
+/**
+ * @brief Enforces the driver to use direct callbacks rather than OSAL events.
+ */
+# if !defined(CAN_ENFORCE_USE_CALLBACKS) || defined(__DOXYGEN__)
+# define CAN_ENFORCE_USE_CALLBACKS FALSE
+# endif
+
+/*===========================================================================*/
+/* CRY driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the SW fall-back of the cryptographic driver.
+ * @details When enabled, this option, activates a fall-back software
+ * implementation for algorithms not supported by the underlying
+ * hardware.
+ * @note Fall-back implementations may not be present for all algorithms.
+ */
+# if !defined(HAL_CRY_USE_FALLBACK) || defined(__DOXYGEN__)
+# define HAL_CRY_USE_FALLBACK FALSE
+# endif
+
+/**
+ * @brief Makes the driver forcibly use the fall-back implementations.
+ */
+# if !defined(HAL_CRY_ENFORCE_FALLBACK) || defined(__DOXYGEN__)
+# define HAL_CRY_ENFORCE_FALLBACK FALSE
+# endif
+
+/*===========================================================================*/
+/* DAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(DAC_USE_WAIT) || defined(__DOXYGEN__)
+# define DAC_USE_WAIT TRUE
+# endif
+
+/**
+ * @brief Enables the @p dacAcquireBus() and @p dacReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(DAC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+# define DAC_USE_MUTUAL_EXCLUSION TRUE
+# endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+# if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+# define I2C_USE_MUTUAL_EXCLUSION TRUE
+# endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the zero-copy API.
+ */
+# if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+# define MAC_USE_ZERO_COPY FALSE
+# endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+# if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+# define MAC_USE_EVENTS TRUE
+# endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+# if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+# define MMC_NICE_WAITING TRUE
+# endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+# if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+# define SDC_INIT_RETRY 100
+# endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+# if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+# define SDC_MMC_SUPPORT FALSE
+# endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+# if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+# define SDC_NICE_WAITING TRUE
+# endif
+
+/**
+ * @brief OCR initialization constant for V20 cards.
+ */
+# if !defined(SDC_INIT_OCR_V20) || defined(__DOXYGEN__)
+# define SDC_INIT_OCR_V20 0x50FF8000U
+# endif
+
+/**
+ * @brief OCR initialization constant for non-V20 cards.
+ */
+# if !defined(SDC_INIT_OCR) || defined(__DOXYGEN__)
+# define SDC_INIT_OCR 0x80100000U
+# endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+# if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+# define SERIAL_DEFAULT_BITRATE 38400
+# endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+# if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+# define SERIAL_BUFFERS_SIZE 16
+# endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+# if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+# define SERIAL_USB_BUFFERS_SIZE 1
+# endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+# if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+# define SERIAL_USB_BUFFERS_NUMBER 2
+# endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+# define SPI_USE_WAIT TRUE
+# endif
+
+/**
+ * @brief Enables circular transfers APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(SPI_USE_CIRCULAR) || defined(__DOXYGEN__)
+# define SPI_USE_CIRCULAR FALSE
+# endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+# define SPI_USE_MUTUAL_EXCLUSION TRUE
+# endif
+
+/**
+ * @brief Handling method for SPI CS line.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(SPI_SELECT_MODE) || defined(__DOXYGEN__)
+# define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+# endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+# define UART_USE_WAIT FALSE
+# endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+# define UART_USE_MUTUAL_EXCLUSION FALSE
+# endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+# define USB_USE_WAIT TRUE
+# endif
+
+/*===========================================================================*/
+/* WSPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(WSPI_USE_WAIT) || defined(__DOXYGEN__)
+# define WSPI_USE_WAIT TRUE
+# endif
+
+/**
+ * @brief Enables the @p wspiAcquireBus() and @p wspiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+# if !defined(WSPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+# define WSPI_USE_MUTUAL_EXCLUSION TRUE
+# endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/handwired/twadlee/tp69/info.json b/keyboards/handwired/twadlee/tp69/info.json
new file mode 100644
index 00000000000..89eecb7d164
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Twadlee TP69",
+ "url": "https://github.com/twadleigh/qmk_firmware",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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, "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}, {"x":14.5, "y":1, "w":1.5}, {"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":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":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}, {"x":13.25, "y":3, "w":2.75}, {"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":2}, {"x":5.75, "y":4}, {"x":6.75, "y":4}, {"x":7.75, "y":4}, {"x":8.75, "y":4, "w":2.25}, {"x":11, "y":4, "w":1.25}, {"x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4, "w":1.25}, {"x":14.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/handwired/twadlee/tp69/keymaps/default/keymap.c b/keyboards/handwired/twadlee/tp69/keymaps/default/keymap.c
new file mode 100644
index 00000000000..f250c3fc623
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2020 Tracy Wadleigh
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names { _BASE };
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_LGUI, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PGUP, KC_PGDN,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LALT, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCTL, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ )
+};
diff --git a/keyboards/handwired/twadlee/tp69/keymaps/default/readme.md b/keyboards/handwired/twadlee/tp69/keymaps/default/readme.md
new file mode 100644
index 00000000000..453673a6e99
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for tp69
diff --git a/keyboards/handwired/twadlee/tp69/mcuconf.h b/keyboards/handwired/twadlee/tp69/mcuconf.h
new file mode 100644
index 00000000000..dc4d00bf18c
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/mcuconf.h
@@ -0,0 +1,45 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define KL2x_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+/* PEE mode - 48MHz system clock driven by (16 MHz) external crystal. */
+#define KINETIS_MCG_MODE KINETIS_MCG_MODE_PEE
+#define KINETIS_PLLCLK_FREQUENCY 96000000UL
+#define KINETIS_SYSCLK_FREQUENCY 48000000UL
+
+/*
+ * SERIAL driver system settings.
+ */
+#define KINETIS_SERIAL_USE_UART0 TRUE
+
+/*
+ * USB driver settings
+ */
+#define KINETIS_USB_USE_USB0 TRUE
+
+/* Need to redefine this, since the default (configured for K20x) might not apply
+ * 2 for Teensy LC
+ * 5 for Teensy 3.x */
+#define KINETIS_USB_USB0_IRQ_PRIORITY 2
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/handwired/twadlee/tp69/readme.md b/keyboards/handwired/twadlee/tp69/readme.md
new file mode 100644
index 00000000000..201991cfe7a
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/readme.md
@@ -0,0 +1,18 @@
+# Twadlee TP69
+
+
+
+A 69-key keyboard having a Trackpoint unit under an additional 70th keycap.
+
+The layout is similar to a conventional 60% keyboard, but with additional 1u keys down a central split. The spacebar is also split, with the intervening space occupied by three mouse buttons and the left half replaced by a relocated `BACKSPACE` key. The right half of the spacebar is 2.25u. The space vacated by the `BACKSPACE` key is split into two additional 1u keys. The additional keycap on the home row does not cover a switch but a Trackpoint pointing device. All told, the 61 keycaps of the conventional 60% layout are augmented by an additional 9 1u keycaps, and a 2.25u keycap to replace the conventional 6.25u spacebar.
+
+Given the unconventional layout, only non-sculpted keycap profiles are practical. I use DSAs.
+
+* Keyboard Maintainer: [Tracy Wadleigh](https://github.com/twadleigh)
+* Hardware Supported: Teensy LC controller
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/twadlee/tp69: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/twadlee/tp69/rules.mk b/keyboards/handwired/twadlee/tp69/rules.mk
new file mode 100644
index 00000000000..967060802b1
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/rules.mk
@@ -0,0 +1,28 @@
+# MCU name
+MCU = MKL26Z64
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+PS2_MOUSE_ENABLE = no
+
+USE_CHIBIOS_CONTRIB = yes
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/handwired/twadlee/tp69/tp69.c b/keyboards/handwired/twadlee/tp69/tp69.c
new file mode 100644
index 00000000000..f4454c3bda3
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/tp69.c
@@ -0,0 +1,18 @@
+/* Copyright 2020 Tracy Wadleigh
+ *
+ * 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 .
+ *
+ */
+
+#include "tp69.h"
diff --git a/keyboards/handwired/twadlee/tp69/tp69.h b/keyboards/handwired/twadlee/tp69/tp69.h
new file mode 100644
index 00000000000..31c03eb70b7
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/tp69.h
@@ -0,0 +1,48 @@
+/* Copyright 2020 Tracy Wadleigh
+ *
+ * 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 .
+ */
+
+#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( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k55, k56, k57, \
+ k10, k11, k13, k14, k15, k16, k17, k60, k61, k62, k63, k64, k65, k66, k67, \
+ k20, k21, k23, k24, k25, k27, /**/ k70, k71, k72, k73, k74, k75, k77, \
+ k30, k32, k33, k34, k35, k36, k37, k81, k82, k83, k84, k85, k86, \
+ k40, k41, k43, k44, k46, k47, k91, k92, k94, k95, k96, k97 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07}, \
+ { k10, k11, KC_NO, k13, k14, k15, k16, k17}, \
+ { k20, k21, KC_NO, k23, k24, k25, KC_NO, k27}, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37}, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, k47}, \
+ { k50, k51, k52, k53, k54, k55, k56, k57}, \
+ { k60, k61, k62, k63, k64, k65, k66, k67}, \
+ { k70, k71, k72, k73, k74, k75, KC_NO, k77}, \
+ {KC_NO, k81, k82, k83, k84, k85, k86, KC_NO}, \
+ {KC_NO, k91, k92, KC_NO, k94, k95, k96, k97} \
+}
diff --git a/keyboards/handwired/twadlee/tp69/twadlee-tp69-kle.json b/keyboards/handwired/twadlee/tp69/twadlee-tp69-kle.json
new file mode 100644
index 00000000000..b54508bf4fa
--- /dev/null
+++ b/keyboards/handwired/twadlee/tp69/twadlee-tp69-kle.json
@@ -0,0 +1,139 @@
+[
+ {
+ "backcolor": "",
+ "name": "65% keyboard with pointing device under keycap",
+ "author": "Tracy Wadleigh",
+ "plate": false
+ },
+ [
+ {
+ "a": 7,
+ "f": 5
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ ""
+ ],
+ [
+ {
+ "w": 1.5
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 1.5
+ },
+ ""
+ ],
+ [
+ {
+ "w": 1.75
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "x": 1
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 2.25
+ },
+ ""
+ ],
+ [
+ {
+ "w": 2.25
+ },
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 2.75
+ },
+ ""
+ ],
+ [
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 2
+ },
+ "",
+ "",
+ "",
+ "",
+ {
+ "w": 2.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ "",
+ {
+ "w": 1.25
+ },
+ ""
+ ]
+]
\ No newline at end of file
diff --git a/keyboards/handwired/unk/info.json b/keyboards/handwired/unk/info.json
new file mode 100644
index 00000000000..4e2f7e13ff6
--- /dev/null
+++ b/keyboards/handwired/unk/info.json
@@ -0,0 +1,92 @@
+{
+ "keyboard_name": "UNK",
+ "url": "https://github.com/herpiko/unk",
+ "maintainer": "herpiko",
+ "width": 17,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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": 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, "y": 0, "w": 2},
+
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1, "w": 1.5},
+ {"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": 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},
+ {"x": 14.5, "y": 1},
+ {"x": 15.5, "y": 1, "w": 1.5},
+
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2, "w": 1.75},
+ {"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": 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},
+ {"x": 14.75, "y": 2, "w": 2.25},
+
+ {"x": 0, "y": 3},
+ {"x": 1, "y": 3, "w": 2.25},
+ {"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": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3},
+ {"x": 12.25, "y": 3},
+ {"x": 13.25, "y": 3},
+ {"x": 14.25, "y": 3, "w": 1.75},
+
+ {"x": 16, "y": 3},
+ {"x": 0, "y": 4},
+ {"x": 1, "y": 4, "w": 1.25},
+ {"x": 2.25, "y": 4, "w": 1.25},
+ {"x": 3.5, "y": 4, "w": 1.25},
+ {"x": 4.75, "y": 4},
+ {"x": 5.75, "y": 4, "w": 2.25},
+
+ {"x": 9, "y": 4, "w": 2.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 13.75, "y": 4, "w": 1.25},
+ {"x": 15, "y": 4},
+ {"x": 16, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/unk/keymaps/default/config.h b/keyboards/handwired/unk/keymaps/default/config.h
new file mode 100644
index 00000000000..3d2b4c7be75
--- /dev/null
+++ b/keyboards/handwired/unk/keymaps/default/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2020 Herpiko Dwi Aguno
+
+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 .
+*/
+
+
+#pragma once
+
+#define USE_SERIAL
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
diff --git a/keyboards/handwired/unk/keymaps/default/keymap.c b/keyboards/handwired/unk/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a38b1f92d8d
--- /dev/null
+++ b/keyboards/handwired/unk/keymaps/default/keymap.c
@@ -0,0 +1,83 @@
+#include QMK_KEYBOARD_H
+
+enum layer_names {
+ _QWERTY = 0,
+ _COLEMAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// 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.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE,
+ 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_END, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_PSCREEN, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_PGUP,
+ LOWER, KC_LCTL, KC_LALT, KC_LGUI, RAISE, KC_SPACE, KC_SPACE, RAISE, KC_RALT, KC_RCTL, KC_DELETE, KC_PGDOWN
+ ),
+ [_COLEMAK] = LAYOUT(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPACE,
+ KC_HOME, KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLASH,
+ KC_END, KC_BSPACE, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
+ KC_PSCREEN, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_PGUP,
+ LOWER, KC_LCTL, KC_LALT, KC_LGUI, RAISE, KC_SPACE, KC_SPACE, RAISE, KC_RALT, KC_RCTL, KC_DELETE, KC_PGDOWN
+ ),
+
+ [_LOWER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ QWERTY, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ COLEMAK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_RAISE] = LAYOUT(
+ _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______,
+ _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/handwired/unk/readme.md b/keyboards/handwired/unk/readme.md
new file mode 100644
index 00000000000..c4fbf6f22e2
--- /dev/null
+++ b/keyboards/handwired/unk/readme.md
@@ -0,0 +1,15 @@
+# UNK
+
+A split 65% handwired keyboard made by herpiko.
+
+* Keyboard Maintainer: [herpiko](https://github.com/herpiko)
+* Hardware Supported: Pro Micro
+* Hardware Availability: https://github.com/herpiko/unk
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/unk/rev1: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 logs and files are available here: [UNK](https://github.com/herpiko/unk)
diff --git a/keyboards/handwired/unk/rev1/config.h b/keyboards/handwired/unk/rev1/config.h
new file mode 100644
index 00000000000..55b03d9525f
--- /dev/null
+++ b/keyboards/handwired/unk/rev1/config.h
@@ -0,0 +1,91 @@
+/*
+Copyright 2020 Herpiko Dwi Aguno
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER herpiko
+#define PRODUCT UNK
+#define DESCRIPTION 70% split keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+
+
+#define MASTER_LEFT // Comment this line for the right half firmware
+
+// wiring of each half
+#define MATRIX_ROW_PINS { F5, B1, F6, B3, F7 }
+#define MATRIX_COL_PINS { B2, B6, D4, C6, D7, E6, B4, B5 }
+#define MATRIX_ROW_PINS_RIGHT { C6, D7, B4, E6, D4 }
+#define MATRIX_COL_PINS_RIGHT { B1, B3, B2, B6, F7, B5, F6, F5 }
+
+
+/* COL2ROW or 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 USE_SERIAL
+#define SOFT_SERIAL_PIN D0
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 12 // Number of LEDs
+
+/*
+ * 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
diff --git a/keyboards/handwired/unk/rev1/rev1.c b/keyboards/handwired/unk/rev1/rev1.c
new file mode 100644
index 00000000000..520a869e57b
--- /dev/null
+++ b/keyboards/handwired/unk/rev1/rev1.c
@@ -0,0 +1 @@
+#include "rev1.h"
diff --git a/keyboards/handwired/unk/rev1/rev1.h b/keyboards/handwired/unk/rev1/rev1.h
new file mode 100644
index 00000000000..3d20e3e9fcf
--- /dev/null
+++ b/keyboards/handwired/unk/rev1/rev1.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "unk.h"
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K71, K72, K73, K74, K75, K76, K77, \
+ K10, K11, K12, K13, K14, K15, K16, K80, K81, K82, K83, K84, K85, K86, K87, \
+ K20, K21, K22, K23, K24, K25, K26, K91, K92, K93, K94, K95, K96, K97, \
+ K30, K31, K32, K33, K34, K35, K36, K101, K102, K103, K104, K105, K106, K107, \
+ K40, K41, K42, K43, K44, K45, K112, K113, K114, K115, K116, K117 \
+ ) \
+ { \
+ { K00, K01, K02, K03, K04, K05, K06, K07}, \
+ { K10, K11, K12, K13, K14, K15, K16, KC_NO}, \
+ { K20, K21, K22, K23, K24, K25, K26, KC_NO}, \
+ { K30, K31, K32, K33, K34, K35, K36, KC_NO}, \
+ { K40, K41, K42, K43, K44, K45, KC_NO, KC_NO}, \
+\
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77}, \
+ { K80, K81, K82, K83, K84, K85, K86, K87}, \
+ { KC_NO, K91, K92, K93, K94, K95, K96, K97}, \
+ { KC_NO, K101, K102, K103, K104, K105, K106, K107}, \
+ { KC_NO, KC_NO, K112, K113, K114, K115, K116, K117} \
+ }
+
+/*
+*/
+
diff --git a/keyboards/handwired/unk/rev1/rules.mk b/keyboards/handwired/unk/rev1/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/handwired/unk/rules.mk b/keyboards/handwired/unk/rules.mk
new file mode 100644
index 00000000000..667308705f2
--- /dev/null
+++ b/keyboards/handwired/unk/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = handwired/unk/rev1
diff --git a/keyboards/handwired/unk/unk.c b/keyboards/handwired/unk/unk.c
new file mode 100644
index 00000000000..5764d560b6f
--- /dev/null
+++ b/keyboards/handwired/unk/unk.c
@@ -0,0 +1 @@
+#include "unk.h"
diff --git a/keyboards/handwired/unk/unk.h b/keyboards/handwired/unk/unk.h
new file mode 100644
index 00000000000..baad77573c8
--- /dev/null
+++ b/keyboards/handwired/unk/unk.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#include "quantum.h"
+#include "rev1.h"
diff --git a/keyboards/handwired/woodpad/rules.mk b/keyboards/handwired/woodpad/rules.mk
index 7725131978e..a3a1e5ffe9a 100644
--- a/keyboards/handwired/woodpad/rules.mk
+++ b/keyboards/handwired/woodpad/rules.mk
@@ -14,19 +14,19 @@ BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # 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
+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 on B7 by default
-MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no # Audio output on port C6
-FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
-RGBLIGHT_ENABLE ?= no
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/helix/helix.h b/keyboards/helix/helix.h
index 7dac2455deb..d3d3b04169b 100644
--- a/keyboards/helix/helix.h
+++ b/keyboards/helix/helix.h
@@ -1,5 +1,7 @@
#pragma once
+#include "quantum.h"
+
#ifdef KEYBOARD_helix_rev1
#include "rev1.h"
#endif
@@ -9,5 +11,3 @@
#ifdef KEYBOARD_helix_pico
#include "pico.h"
#endif
-
-#include "quantum.h"
diff --git a/keyboards/helix/info.json b/keyboards/helix/info.json
deleted file mode 100644
index 6cd13d98e47..00000000000
--- a/keyboards/helix/info.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "keyboard_name": "Helix",
- "url": "https://github.com/MakotoKurauchi/helix",
- "maintainer": "MakotoKurauchi",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "key_count": 64,
- "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":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}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "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":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
- }
- }
-}
diff --git a/keyboards/helix/pico/info.json b/keyboards/helix/pico/info.json
index f4e50b95c04..a82a8f2ec77 100644
--- a/keyboards/helix/pico/info.json
+++ b/keyboards/helix/pico/info.json
@@ -1,13 +1,70 @@
{
- "keyboard_name": "HelixPico",
- "url": "https://github.com/MakotoKurauchi/helix",
- "maintainer": "MakotoKurauchi",
- "width": 15,
- "height": 4,
- "layouts": {
- "LAYOUT": {
- "key_count": 50,
- "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":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}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "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":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}]
+ "keyboard_name": "HelixPico",
+ "url": "https://github.com/MakotoKurauchi/helix",
+ "maintainer": "MakotoKurauchi",
+ "width": 15,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "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": 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},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+ {"x": 3, "y": 1},
+ {"x": 4, "y": 1},
+ {"x": 5, "y": 1},
+
+ {"x": 9, "y": 1},
+ {"x": 10, "y": 1},
+ {"x": 11, "y": 1},
+ {"x": 12, "y": 1},
+ {"x": 13, "y": 1},
+ {"x": 14, "y": 1},
+
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2},
+ {"x": 3, "y": 2},
+ {"x": 4, "y": 2},
+ {"x": 5, "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": 0, "y": 3},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+ {"x": 6, "y": 3},
+
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+ {"x": 13, "y": 3},
+ {"x": 14, "y": 3}
+ ]
+ }
}
- }
}
diff --git a/keyboards/helix/pico/pico.h b/keyboards/helix/pico/pico.h
index 303fe315ea5..60a5078ed47 100644
--- a/keyboards/helix/pico/pico.h
+++ b/keyboards/helix/pico/pico.h
@@ -1,8 +1,6 @@
#pragma once
-#include "../helix.h"
-
-#include "quantum.h"
+#include "helix.h"
#ifndef SPLIT_KEYBOARD
extern bool is_helix_master(void);
@@ -16,54 +14,51 @@ extern uint8_t is_master; // 'is_master' will be obsolete, it is recommended to
#define has_usb() is_keyboard_master()
#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)
+ // Standard Keymap
+ // (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
#define LAYOUT( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05, KC_NO }, \
- { L10, L11, L12, L13, L14, L15, KC_NO }, \
- { L20, L21, L22, L23, L24, L25, KC_NO }, \
- { L30, L31, L32, L33, L34, L35, L36 }, \
- { R05, R04, R03, R02, R01, R00, KC_NO }, \
- { R15, R14, R13, R12, R11, R10, KC_NO }, \
- { R25, R24, R23, R22, R21, R20, KC_NO }, \
- { R35, R34, R33, R32, R31, R30, R36 }, \
- }
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
+) { \
+ { L00, L01, L02, L03, L04, L05, KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { R05, R04, R03, R02, R01, R00, KC_NO }, \
+ { R15, R14, R13, R12, R11, R10, KC_NO }, \
+ { R25, R24, R23, R22, R21, R20, KC_NO }, \
+ { R35, R34, R33, R32, R31, R30, R36 }, \
+}
#else
-// Keymap with right side flipped
-// (TRRS jack on both halves are to the right)
-#define LAYOUT( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05, KC_NO }, \
- { L10, L11, L12, L13, L14, L15, KC_NO }, \
- { L20, L21, L22, L23, L24, L25, KC_NO }, \
- { L30, L31, L32, L33, L34, L35, L36 }, \
- { KC_NO, R00, R01, R02, R03, R04, R05 }, \
- { KC_NO, R10, R11, R12, R13, R14, R15 }, \
- { KC_NO, R20, R21, R22, R23, R24, R25 }, \
- { R36, R30, R31, R32, R33, R34, R35 }, \
- }
+ // Keymap with right side flipped
+ // (TRRS jack on both halves are to the right)
+ #define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
+ ) { \
+ { L00, L01, L02, L03, L04, L05, KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { KC_NO, R00, R01, R02, R03, R04, R05 }, \
+ { KC_NO, R10, R11, R12, R13, R14, R15 }, \
+ { KC_NO, R20, R21, R22, R23, R24, R25 }, \
+ { R36, R30, R31, R32, R33, R34, R35 }, \
+ }
#endif
-#define LAYOUT_kc( \
+#define LAYOUT_kc( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
- ) \
- LAYOUT( \
- KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
- KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
- KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
- KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
- )
+) LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
+)
diff --git a/keyboards/helix/rev1/info.json b/keyboards/helix/rev1/info.json
index 505401cee8e..6811e764d13 100644
--- a/keyboards/helix/rev1/info.json
+++ b/keyboards/helix/rev1/info.json
@@ -1,13 +1,82 @@
{
- "keyboard_name": "Helix rev. 1",
- "url": "https://github.com/MakotoKurauchi/helix",
- "maintainer": "MakotoKurauchi",
- "width": 13,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "key_count": 60,
- "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":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "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":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}]
+ "keyboard_name": "Helix rev. 1",
+ "url": "https://github.com/MakotoKurauchi/helix",
+ "maintainer": "MakotoKurauchi",
+ "width": 13,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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": 7, "y": 0},
+ {"x": 8, "y": 0},
+ {"x": 9, "y": 0},
+ {"x": 10, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+
+ {"x": 0, "y": 1},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+ {"x": 3, "y": 1},
+ {"x": 4, "y": 1},
+ {"x": 5, "y": 1},
+
+ {"x": 7, "y": 1},
+ {"x": 8, "y": 1},
+ {"x": 9, "y": 1},
+ {"x": 10, "y": 1},
+ {"x": 11, "y": 1},
+ {"x": 12, "y": 1},
+
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2},
+ {"x": 3, "y": 2},
+ {"x": 4, "y": 2},
+ {"x": 5, "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": 0, "y": 3},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+
+ {"x": 7, "y": 3},
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+
+ {"x": 0, "y": 4},
+ {"x": 1, "y": 4},
+ {"x": 2, "y": 4},
+ {"x": 3, "y": 4},
+ {"x": 4, "y": 4},
+ {"x": 5, "y": 4},
+
+ {"x": 7, "y": 4},
+ {"x": 8, "y": 4},
+ {"x": 9, "y": 4},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/helix/rev1/rev1.h b/keyboards/helix/rev1/rev1.h
index b505845ada9..b3a525554e5 100644
--- a/keyboards/helix/rev1/rev1.h
+++ b/keyboards/helix/rev1/rev1.h
@@ -1,180 +1,168 @@
#pragma once
-#include "../helix.h"
-
-#include "quantum.h"
+#include "helix.h"
#ifdef USE_I2C
#include
#ifdef __AVR__
- #include
- #include
+ #include
+ #include
#endif
#endif
#if MATRIX_ROWS == 6 // HELIX_ROWS == 3
- #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( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05 }, \
- { L10, L11, L12, L13, L14, L15 }, \
- { L20, L21, L22, L23, L24, L25 }, \
- { R05, R04, R03, R02, R01, R00 }, \
- { R15, R14, R13, R12, R11, R10 }, \
- { R25, R24, R23, R22, R21, R20 }, \
- }
- #else
- // Keymap with right side flipped
- // (TRRS jack on both halves are to the right)
- #define LAYOUT( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05 }, \
- { L10, L11, L12, L13, L14, L15 }, \
- { L20, L21, L22, L23, L24, L25 }, \
- { R00, R01, R02, R03, R04, R05 }, \
- { R10, R11, R12, R13, R14, R15 }, \
- { R20, R21, R22, R23, R24, R25 }, \
- }
- #endif
+ #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( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25 \
+ ) { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 } \
+ }
+ #else
+ // Keymap with right side flipped
+ // (TRRS jack on both halves are to the right)
+ #define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25 \
+ ) { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 } \
+ }
+ #endif
#elif MATRIX_ROWS == 8 // HELIX_ROWS == 4
- #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( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05 }, \
- { L10, L11, L12, L13, L14, L15 }, \
- { L20, L21, L22, L23, L24, L25 }, \
- { L30, L31, L32, L33, L34, L35 }, \
- { R05, R04, R03, R02, R01, R00 }, \
- { R15, R14, R13, R12, R11, R10 }, \
- { R25, R24, R23, R22, R21, R20 }, \
- { R35, R34, R33, R32, R31, R30 } \
- }
- #else
- // Keymap with right side flipped
- // (TRRS jack on both halves are to the right)
- #define LAYOUT( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05 }, \
- { L10, L11, L12, L13, L14, L15 }, \
- { L20, L21, L22, L23, L24, L25 }, \
- { L30, L31, L32, L33, L34, L35 }, \
- { R00, R01, R02, R03, R04, R05 }, \
- { R10, R11, R12, R13, R14, R15 }, \
- { R20, R21, R22, R23, R24, R25 }, \
- { R30, R31, R32, R33, R34, R35 } \
- }
- #endif
+ #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( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 } \
+ }
+ #else
+ // Keymap with right side flipped
+ // (TRRS jack on both halves are to the right)
+ #define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 } \
+ }
+ #endif
#elif MATRIX_ROWS == 10 // HELIX_ROWS == 5
- #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( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
- L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05 }, \
- { L10, L11, L12, L13, L14, L15 }, \
- { L20, L21, L22, L23, L24, L25 }, \
- { L30, L31, L32, L33, L34, L35 }, \
- { L40, L41, L42, L43, L44, L45 }, \
- { R05, R04, R03, R02, R01, R00 }, \
- { R15, R14, R13, R12, R11, R10 }, \
- { R25, R24, R23, R22, R21, R20 }, \
- { R35, R34, R33, R32, R31, R30 }, \
- { R45, R44, R43, R42, R41, R40 } \
- }
- #else
- // Keymap with right side flipped
- // (TRRS jack on both halves are to the right)
- #define LAYOUT( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
- L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
- ) \
- { \
- { L00, L01, L02, L03, L04, L05 }, \
- { L10, L11, L12, L13, L14, L15 }, \
- { L20, L21, L22, L23, L24, L25 }, \
- { L30, L31, L32, L33, L34, L35 }, \
- { L40, L41, L42, L43, L44, L45 }, \
- { R00, R01, R02, R03, R04, R05 }, \
- { R10, R11, R12, R13, R14, R15 }, \
- { R20, R21, R22, R23, R24, R25 }, \
- { R30, R31, R32, R33, R34, R35 }, \
- { R40, R41, R42, R43, R44, R45 } \
- }
- #endif
-#else
- #error "expected HELIX_ROWS 3 or 4 or 5"
-#endif
-
-// Used to create a keymap using only KC_ prefixed keys
-#if MATRIX_ROWS == 6 // HELIX_ROWS == 3
- #define LAYOUT_kc( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25 \
- ) \
- LAYOUT( \
- KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
- KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
- KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25 \
- )
-#elif MATRIX_ROWS == 8 // HELIX_ROWS == 4
- #define LAYOUT_kc( \
- L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
- L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
- L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
- L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
- ) \
- LAYOUT( \
- KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
- KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
- KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
- KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
- )
-#else
- #define LAYOUT_kc( \
+ #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( \
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
- ) \
- LAYOUT( \
- KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
- KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
- KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
- KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \
- KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45 \
- )
+) { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { L40, L41, L42, L43, L44, L45 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 }, \
+ { R45, R44, R43, R42, R41, R40 } \
+}
+ #else
+ // Keymap with right side flipped
+ // (TRRS jack on both halves are to the right)
+ #define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
+ ) { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { L40, L41, L42, L43, L44, L45 }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { R40, R41, R42, R43, R44, R45 } \
+ }
+ #endif
+#else
+ #error "expected HELIX_ROWS 3 or 4 or 5"
#endif
+// Used to create a keymap using only KC_ prefixed keys
+#if MATRIX_ROWS == 6 // HELIX_ROWS == 3
+ #define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25 \
+ ) LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25 \
+ )
+#elif MATRIX_ROWS == 8 // HELIX_ROWS == 4
+ #define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
+ )
+#else // HELIX_ROWS == 5
+ #define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
+ ) LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \
+ KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45 \
+ )
+#endif
diff --git a/keyboards/helix/rev2/info.json b/keyboards/helix/rev2/info.json
index 236aa3688d7..7d9341c58b5 100644
--- a/keyboards/helix/rev2/info.json
+++ b/keyboards/helix/rev2/info.json
@@ -1,13 +1,86 @@
{
- "keyboard_name": "Helix rev. 2",
- "url": "https://github.com/MakotoKurauchi/helix",
- "maintainer": "MakotoKurauchi",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "key_count": 64,
- "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":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}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "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":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
+ "keyboard_name": "Helix rev. 2",
+ "url": "https://github.com/MakotoKurauchi/helix",
+ "maintainer": "MakotoKurauchi",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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": 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},
+ {"x": 1, "y": 1},
+ {"x": 2, "y": 1},
+ {"x": 3, "y": 1},
+ {"x": 4, "y": 1},
+ {"x": 5, "y": 1},
+
+ {"x": 9, "y": 1},
+ {"x": 10, "y": 1},
+ {"x": 11, "y": 1},
+ {"x": 12, "y": 1},
+ {"x": 13, "y": 1},
+ {"x": 14, "y": 1},
+
+ {"x": 0, "y": 2},
+ {"x": 1, "y": 2},
+ {"x": 2, "y": 2},
+ {"x": 3, "y": 2},
+ {"x": 4, "y": 2},
+ {"x": 5, "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": 0, "y": 3},
+ {"x": 1, "y": 3},
+ {"x": 2, "y": 3},
+ {"x": 3, "y": 3},
+ {"x": 4, "y": 3},
+ {"x": 5, "y": 3},
+ {"x": 6, "y": 3},
+
+ {"x": 8, "y": 3},
+ {"x": 9, "y": 3},
+ {"x": 10, "y": 3},
+ {"x": 11, "y": 3},
+ {"x": 12, "y": 3},
+ {"x": 13, "y": 3},
+ {"x": 14, "y": 3},
+
+ {"x": 0, "y": 4},
+ {"x": 1, "y": 4},
+ {"x": 2, "y": 4},
+ {"x": 3, "y": 4},
+ {"x": 4, "y": 4},
+ {"x": 5, "y": 4},
+ {"x": 6, "y": 4},
+
+ {"x": 8, "y": 4},
+ {"x": 9, "y": 4},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ }
}
- }
}
diff --git a/keyboards/helix/rev2/keymaps/froggy_106/config.h b/keyboards/helix/rev2/keymaps/froggy_106/config.h
new file mode 100644
index 00000000000..36c3f2a7999
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/froggy_106/config.h
@@ -0,0 +1,41 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+
+#pragma once
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
+#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */
+#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */
+
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// Selection of RGBLIGHT MODE to use.
+#if defined(LED_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
+#endif
diff --git a/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h b/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h
new file mode 100644
index 00000000000..3a79a1937ba
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/froggy_106/helixfont.h
@@ -0,0 +1,235 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#pragma once
+
+#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,
+0xFC, 0xFE, 0x02, 0x82, 0x82, 0x82,
+0x82, 0x82, 0x82, 0xC2, 0x82, 0x02,
+0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE,
+0x02, 0x62, 0x62, 0x62, 0x62, 0xE2,
+0x62, 0x62, 0xE2, 0x02, 0x02, 0xFC,
+0x00, 0x00, 0x00, 0xF0, 0xFC, 0xFC,
+0xFC, 0x00, 0xFC, 0xFC, 0xF0, 0x80,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
+0x30, 0x40, 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, 0x20, 0x00, 0x00, 0x24, 0xA4,
+0xA4, 0xBC, 0xA4, 0x24, 0x24, 0x00,
+0x00, 0x00, 0x24, 0xA4, 0x24, 0x24,
+0x3C, 0x04, 0x04, 0x00, 0x00, 0x00,
+0xB8, 0xA4, 0xA4, 0xA4, 0xBC, 0x00,
+0x00, 0x00, 0x00, 0xFC, 0x00, 0xFC,
+0x00, 0x44, 0x44, 0x44, 0xDC, 0x44,
+0x04, 0x3C, 0x00, 0x00, 0x00, 0x00,
+0xFC, 0xFE, 0xFE, 0x7E, 0x7E, 0x7E,
+0x7E, 0x7E, 0x7E, 0x3E, 0x7E, 0xFE,
+0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE,
+0xFE, 0x9E, 0x9E, 0x9E, 0x9E, 0x1E,
+0x9E, 0x9E, 0x1E, 0xFE, 0xFE, 0xFC,
+0x00, 0x00, 0x00, 0x00, 0x00, 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,
+0x7F, 0x7F, 0x40, 0x41, 0x41, 0x41,
+0x41, 0x41, 0x41, 0x41, 0x41, 0x40,
+0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F,
+0x40, 0x40, 0x40, 0x40, 0x40, 0x41,
+0x40, 0x40, 0x43, 0x40, 0x40, 0x7F,
+0x00, 0x20, 0x3C, 0x3E, 0x3E, 0x3E,
+0x3E, 0x00, 0x3E, 0x3E, 0x3E, 0x3E,
+0x38, 0x00, 0x00, 0xF0, 0xFB, 0xFB,
+0x00, 0x50, 0x60, 0xFF, 0xFC, 0x3C,
+0x1E, 0x0E, 0x0C, 0xFC, 0xF8, 0xE8,
+0xE8, 0xE8, 0x30, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+0x00, 0x04, 0x04, 0x1B, 0x04, 0x04,
+0x00, 0x00, 0x00, 0x00, 0x57, 0x50,
+0x57, 0x54, 0x57, 0x10, 0x50, 0x00,
+0x00, 0x00, 0x97, 0x94, 0x97, 0x94,
+0xF7, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xE4, 0x14, 0xF4, 0x94, 0xF7, 0x00,
+0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF,
+0x00, 0x38, 0xA4, 0xA4, 0xA5, 0x3C,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x7F, 0x7F, 0x7F, 0x7E, 0x7E, 0x7E,
+0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7F,
+0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F,
+0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7E,
+0x7F, 0x7F, 0x7C, 0x7F, 0x7F, 0x7F,
+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,
+0xFE, 0xFE, 0x02, 0x62, 0x62, 0x62,
+0xE2, 0x62, 0x62, 0x62, 0xC2, 0x02,
+0x02, 0xFE, 0x00, 0x00, 0xFE, 0xFE,
+0x02, 0x82, 0xC2, 0xE2, 0xF2, 0x82,
+0x82, 0x82, 0x82, 0x02, 0x02, 0xFE,
+0x00, 0x00, 0x00, 0x3C, 0x66, 0x66,
+0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF,
+0x00, 0x05, 0x03, 0x7F, 0x1F, 0x1E,
+0x3C, 0x38, 0x18, 0x1F, 0x0F, 0x0D,
+0x0D, 0x0D, 0x06, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x20, 0x20, 0x50,
+0x8C, 0x50, 0x20, 0x20, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x09, 0x09,
+0x06, 0x09, 0x09, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x1C, 0x12, 0x12, 0x12,
+0x1E, 0x10, 0x10, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xFF, 0x00, 0x73,
+0x84, 0xE7, 0x94, 0x94, 0x94, 0x67,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xFE, 0xFE, 0xFE, 0x9E, 0x9E, 0x9E,
+0x1E, 0x9E, 0x9E, 0x9E, 0x3E, 0xFE,
+0xFE, 0xFE, 0x00, 0x00, 0xFE, 0xFE,
+0xFE, 0x7E, 0x3E, 0x1E, 0x0E, 0x7E,
+0x7E, 0x7E, 0x7E, 0xFE, 0xFE, 0xFE,
+0x00, 0x00, 0x00, 0x3C, 0x66, 0x66,
+0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
+0x00, 0x00, 0x00, 0x07, 0x7F, 0xDF,
+0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFC,
+0xFC, 0xFC, 0xFC, 0xFC, 0xF0, 0x80,
+0x00, 0x00, 0x00, 0x00, 0x00, 0xF0,
+0x3F, 0x7F, 0x40, 0x46, 0x46, 0x46,
+0x47, 0x46, 0x46, 0x46, 0x43, 0x40,
+0x40, 0x7F, 0x00, 0x00, 0x7F, 0x7F,
+0x40, 0x41, 0x43, 0x47, 0x4F, 0x41,
+0x41, 0x41, 0x41, 0x40, 0x40, 0x3F,
+0x00, 0x00, 0x00, 0x3E, 0x73, 0x60,
+0x70, 0x3E, 0x07, 0x03, 0x67, 0x3E,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x08, 0x08,
+0x36, 0x08, 0x08, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x1F, 0x00, 0x0E,
+0x10, 0x1C, 0x12, 0x12, 0x12, 0x12,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x3F, 0x7F, 0x7F, 0x79, 0x79, 0x79,
+0x78, 0x79, 0x79, 0x79, 0x7C, 0x7F,
+0x7F, 0x7F, 0x00, 0x00, 0x7F, 0x7F,
+0x7F, 0x7E, 0x7C, 0x78, 0x70, 0x7E,
+0x7E, 0x7E, 0x7E, 0x7F, 0x7F, 0x3F,
+0x00, 0x00, 0x00, 0x03, 0x03, 0x03,
+0x03, 0x3F, 0x63, 0x63, 0x63, 0x3F,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
+0x00, 0x00, 0x07, 0x1F, 0x3F, 0x0F,
+0x07, 0x0F, 0x3F, 0x3F, 0x0F, 0x00,
+0x03, 0x06, 0x00, 0xF0, 0xFB, 0xFB,
+};
diff --git a/keyboards/helix/rev2/keymaps/froggy_106/keymap.c b/keyboards/helix/rev2/keymaps/froggy_106/keymap.c
new file mode 100644
index 00000000000..d32c4fa0ca5
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/froggy_106/keymap.c
@@ -0,0 +1,822 @@
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
+#include
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern uint8_t is_master;
+
+#define DELAY_TIME 75
+static uint16_t key_timer;
+static uint16_t tap_timer;
+static uint16_t delay_registered_code;
+static uint8_t delay_registered_layer;
+static uint8_t delay_mat_row;
+static uint8_t delay_mat_col;
+static bool delay_key_stat;
+static bool delay_key_pressed;
+static bool tapping_key;
+
+// 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_number {
+ _BASE = 0,
+ _BASE_106,
+ _OPT,
+ _OPT_106,
+ _SYM,
+ _SYM_106,
+ _NUM,
+ _NUM_106,
+ _FUNC,
+ _LAYER_NUM,
+};
+bool RGBAnimation = false; //Flag for LED Layer color Refresh.
+
+typedef union {
+ uint32_t raw;
+ struct {
+ bool mac_mode:1;
+ };
+} user_config_t;
+user_config_t user_config;
+
+#define IS_MODE_106() ((default_layer_state & (1UL << _BASE_106)) != 0)
+#define IS_MODE_MAC() (user_config.mac_mode)
+#ifndef MAX
+#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
+#endif
+#ifndef MIN
+#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
+#endif
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ EISU,
+ KANA,
+ RGBRST,
+ RGBOFF,
+ RGB1,
+ RGB2,
+ RGB3,
+ OPT_TAP_SP,
+ DESKTOP,
+ MAC,
+ WIN,
+ L_SYM,
+ L_NUM,
+ TO_106,
+ TO_101,
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+//Macros
+#define M_SAMPLE M(KC_SAMPLEMACRO)
+
+#if MATRIX_ROWS == 10 // HELIX_ROWS == 5
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | C+z | ; | [ | ( | < | { | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | KANA | P | K | R | A | F | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | BS | D | T | H | E | O | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Y | S | N | I | U |Space | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_BASE] = LAYOUT( \
+ LCTL(KC_Z), KC_SCLN, KC_LBRC, KC_LPRN, KC_LT, KC_LCBR, _______, _______, _______, _______, _______, _______, \
+ KANA, KC_P, KC_K, KC_R, KC_A, KC_F, _______, _______, _______, _______, _______, _______, \
+ KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, _______, _______, _______, _______, _______, _______, \
+ OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, _______, _______, _______, _______, _______, _______, _______, \
+ OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), L_SYM, L_NUM, OPT_TAP_SP, KC_ENT, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [_BASE_106] = LAYOUT( \
+ LCTL(KC_Z), JP_SCLN, JP_LBRC, JP_LPRN, JP_LT, JP_LCBR, _______, _______, _______, _______, _______, _______, \
+ KANA, KC_P, KC_K, KC_R, KC_A, KC_F, _______, _______, _______, _______, _______, _______, \
+ KC_BSPC, KC_D, KC_T, KC_H, KC_E, KC_O, _______, _______, _______, _______, _______, _______, \
+ OSM(MOD_LSFT), KC_Y, KC_S, KC_N, KC_I, KC_U, KC_SPC, _______, _______, _______, _______, _______, _______, _______, \
+ OSM(MOD_LCTL), OSM(MOD_LALT), OSM(MOD_LGUI), L_SYM, L_NUM, OPT_TAP_SP, KC_ENT, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* Opt
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Esc | : | ] | ) | > | } | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | EISU| J | M | B | ' | Tab | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | . | V | C | L | Z | Q | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | X | G | W | - | Del | Esc | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | , | DTOP | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_OPT] = LAYOUT( \
+ KC_ESC, KC_COLN,KC_RBRC, KC_RPRN,KC_GT, KC_RCBR, _______, _______, _______, _______, _______, _______, \
+ EISU, KC_J, KC_M, KC_B, KC_QUOT, KC_TAB, _______, _______, _______, _______, _______, _______, \
+ KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, _______, _______, _______, _______, _______, _______, \
+ _______, KC_X, KC_G, KC_W, KC_MINUS, KC_DEL, KC_ESC, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______,_______, KC_COMM,DESKTOP, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [_OPT_106] = LAYOUT( \
+ KC_ESC, JP_COLN,JP_RBRC, JP_RPRN,JP_GT, JP_RCBR, _______, _______, _______, _______, _______, _______, \
+ EISU, KC_J, KC_M, KC_B, JP_QUOT, KC_TAB, _______, _______, _______, _______, _______, _______, \
+ KC_DOT, KC_V, KC_C, KC_L, KC_Z, KC_Q, _______, _______, _______, _______, _______, _______, \
+ _______, KC_X, KC_G, KC_W, JP_MINS, KC_DEL, KC_ESC, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______,_______, KC_COMM,DESKTOP, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* Sym
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Ins | GRV | | PU | PD | ^ | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | \ | # | = | ? | % | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | $ | upA | @ | ! | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CL | <- | dwA | -> | _ | & | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | PS | | ~ | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_SYM] = LAYOUT( \
+ KC_INS, KC_GRV, _______, KC_PGUP, KC_PGDN, KC_CIRC, _______, _______, _______, _______, _______, _______, \
+ _______, KC_BSLS, KC_HASH, KC_EQL, KC_QUES, KC_PERC, _______, _______, _______, _______, _______, _______, \
+ _______, KC_DLR, KC_UP, KC_AT, KC_EXLM, KC_PIPE, _______, _______, _______, _______, _______, _______, \
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_UNDS, KC_AMPR, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_PSCR, _______, KC_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [_SYM_106] = LAYOUT( \
+ KC_INS, JP_GRV, _______, KC_PGUP, KC_PGDN, JP_CIRC, _______, _______, _______, _______, _______, _______, \
+ _______, JP_BSLS, JP_HASH, JP_EQL, JP_QUES, JP_PERC, _______, _______, _______, _______, _______, _______, \
+ _______, JP_DLR, KC_UP, JP_AT, JP_EXLM, JP_PIPE, _______, _______, _______, _______, _______, _______, \
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT,JP_UNDS, JP_AMPR, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_PSCR, _______, JP_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | Func | home | End | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | * | 7 | 8 | 9 | - | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | . | / | 4 | 5 | 6 | + | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | LN | 0 | 1 | 2 | 3 |C+S+F1| | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | . | , | | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_NUM] = LAYOUT( \
+ _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_ASTR, KC_P7, KC_P8, KC_P9, KC_MINS, _______, _______, _______, _______, _______, _______, \
+ KC_DOT, KC_SLSH, KC_P4, KC_P5, KC_P6, KC_PLUS, _______, _______, _______, _______, _______, _______, \
+ KC_NLCK, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_PDOT, KC_COMM, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [_NUM_106] = LAYOUT( \
+ _______, _______, OSL(_FUNC), KC_HOME, KC_END, _______, _______, _______, _______, _______, _______, _______, \
+ _______, JP_ASTR, KC_P7, KC_P8, KC_P9, JP_MINS, _______, _______, _______, _______, _______, _______, \
+ KC_DOT, JP_SLSH, KC_P4, KC_P5, KC_P6, JP_PLUS, _______, _______, _______, _______, _______, _______, \
+ KC_NLCK, KC_P0, KC_P1, KC_P2, KC_P3, LCTL(S(KC_F1)), _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_PDOT, JP_COMM, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* Func
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * |RGBRST| Hue |To101 | RST | Mac | Win | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | RGB1 | VAL+ | F7 | F8 | F9 |To106 | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | RGB2 | VAL- | F4 | F5 | F6 | F12 | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RGB3 | F10 | F1 | F2 | F3 | F11 | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |RGBOFF| | | | | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_FUNC] = LAYOUT( \
+ RGBRST,RGB_HUI, TO_101, RESET, MAC, WIN, _______, _______, _______, _______, _______, _______, \
+ RGB1, RGB_VAI, KC_F7, KC_F8, KC_F9, TO_106, _______, _______, _______, _______, _______, _______, \
+ RGB2, RGB_VAD, KC_F4, KC_F5, KC_F6, KC_F12, _______, _______, _______, _______, _______, _______, \
+ RGB3, KC_F10, KC_F1, KC_F2, KC_F3, KC_F11, _______, _______, _______, _______, _______, _______, _______, _______, \
+ RGBOFF,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+};
+#else
+#error "undefined keymaps"
+#endif
+
+void set_mac_mode(bool enable) {
+ if(enable){
+ user_config.mac_mode = true;
+ keymap_config.swap_lalt_lgui = false;
+ keymap_config.swap_ralt_rgui = false;
+ }else{
+ user_config.mac_mode = false;
+ keymap_config.swap_lalt_lgui = true;
+ keymap_config.swap_ralt_rgui = true;
+ }
+ eeconfig_update_user(user_config.raw);
+}
+
+void eeconfig_init_user(void) {
+ user_config.raw = 0;
+ eeconfig_update_user(user_config.raw);
+}
+
+void keyboard_post_init_user(void) {
+ user_config.raw = eeconfig_read_user();
+ set_mac_mode(user_config.mac_mode);
+}
+
+bool find_mairix(uint16_t keycode, uint8_t *row, uint8_t *col){
+ int base_keymap = IS_MODE_106() ? _BASE_106 : _BASE;
+ for(uint8_t i=0; ievent.key.col;
+ row = record->event.key.row;
+ if (record->event.pressed && ((row < 5 && is_master) || (row >= 5 && !is_master))) {
+ int end = keybuf_end;
+ keybufs[end].col = col;
+ keybufs[end].row = row % 5;
+ keybufs[end].frame = 0;
+ keybuf_end ++;
+ }
+ #endif
+
+ if(tap_timer&&keycode!=OPT_TAP_SP){
+ tapping_key = true;
+ }
+
+ if(keycode==delay_registered_code){
+ if (!record->event.pressed){
+ unregister_delay_code();
+ }
+ }
+
+ switch (keycode) {
+ case KC_SCLN:
+ case KC_LBRC:
+ case KC_LPRN:
+ case KC_LT:
+ case KC_LCBR:
+ case KC_P:
+ case KC_K:
+ case KC_R:
+ case KC_A:
+ case KC_F:
+ case KC_BSPC:
+ case KC_D:
+ case KC_T:
+ case KC_H:
+ case KC_E:
+ case KC_O:
+ case KC_Y:
+ case KC_S:
+ case KC_N:
+ case KC_I:
+ case KC_U:
+ case LCTL(KC_Z):
+ case KC_SPC:
+ //case JP_SCLN: // == KC_SCLN
+ case JP_LBRC:
+ case JP_LPRN:
+ //case JP_LT: // == KC_LT
+ case JP_LCBR:
+ if (IS_MODE_106()) {
+ if (keycode == KC_LBRC || keycode == KC_LPRN || keycode == KC_LCBR)
+ break;
+ }else{
+ if (keycode == JP_LBRC || keycode == JP_LPRN || keycode == JP_LCBR)
+ break;
+ }
+ if (record->event.pressed) {
+ if (IS_MODE_106())
+ register_delay_code(_BASE_106);
+ else
+ register_delay_code(_BASE);
+ if(find_mairix(keycode, &delay_mat_row, &delay_mat_col)){
+ key_timer = timer_read();
+ delay_key_stat = true;
+ delay_key_pressed = true;
+ }
+ }else{
+ delay_key_pressed = false;
+ }
+ return false;
+ break;
+ case L_SYM:
+ if (record->event.pressed) {
+ if (IS_MODE_106()) {
+ register_delay_code(_SYM_106);
+ layer_on(_SYM_106);
+ }else{
+ register_delay_code(_SYM);
+ layer_on(_SYM);
+ }
+ }else{
+ layer_off(_SYM);
+ layer_off(_SYM_106);
+ if(delay_registered_layer == _SYM || delay_registered_layer == _SYM_106) {
+ unregister_delay_code();
+ }
+ }
+ return false;
+ break;
+ case L_NUM:
+ if (record->event.pressed) {
+ if (IS_MODE_106()) {
+ register_delay_code(_NUM_106);
+ layer_on(_NUM_106);
+ }else{
+ register_delay_code(_NUM);
+ layer_on(_NUM);
+ }
+ }else{
+ layer_off(_NUM);
+ layer_off(_NUM_106);
+ if(delay_registered_layer == _NUM || delay_registered_layer == _NUM_106) {
+ unregister_delay_code();
+ }
+ }
+ return false;
+ break;
+ case OPT_TAP_SP:
+ if (record->event.pressed) {
+ tapping_key = false;
+ if (IS_MODE_106()) {
+ register_delay_code(_OPT_106);
+ layer_on(_OPT_106);
+ }else{
+ register_delay_code(_OPT);
+ layer_on(_OPT);
+ }
+ tap_timer = timer_read();
+ }else{
+ layer_off(_OPT);
+ layer_off(_OPT_106);
+ if(tapping_key==false && timer_elapsed(tap_timer) < TAPPING_TERM){
+ SEND_STRING(" ");
+ }else if(delay_registered_layer == _OPT || delay_registered_layer == _OPT_106) {
+ unregister_delay_code();
+ }
+ tap_timer = 0;
+ }
+ return false;
+ break;
+ case EISU:
+ if (record->event.pressed) {
+ if(IS_MODE_MAC()){
+ register_code(KC_LANG2);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ return false;
+ break;
+ case KANA:
+ if (record->event.pressed) {
+ if(IS_MODE_MAC()){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+ case DESKTOP:
+ if (record->event.pressed) {
+ if(IS_MODE_MAC()){
+ register_code(KC_F11);
+ }else{
+ SEND_STRING(SS_LGUI("d"));
+ }
+ } else {
+ unregister_code(KC_F11);
+ }
+ return false;
+ break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGBAnimation = false;
+ }
+ #endif
+ break;
+ case RGBOFF:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_disable();
+ }
+ #endif
+ break;
+ case RGB1:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ RGBAnimation = true;
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD);
+ }
+ #endif
+ break;
+ case RGB2:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ RGBAnimation = true;
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 1);
+ }
+ #endif
+ break;
+ case RGB3:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ RGBAnimation = true;
+ rgblight_mode(RGBLIGHT_MODE_KNIGHT);
+ }
+ #endif
+ break;
+ case MAC:
+ if (record->event.pressed) {
+ set_mac_mode(true);
+ }
+ break;
+ case WIN:
+ if (record->event.pressed) {
+ set_mac_mode(false);
+ }
+ break;
+ case TO_101:
+ if (record->event.pressed) {
+ if (IS_MODE_106()) {
+ set_single_persistent_default_layer(_BASE);
+ }
+ }
+ break;
+ case TO_106:
+ if (record->event.pressed) {
+ if (!IS_MODE_106()) {
+ set_single_persistent_default_layer(_BASE_106);
+ }
+ }
+ break;
+ }
+ return true;
+}
+
+
+//keyboard start-up code. Runs once when the firmware starts up.
+void matrix_init_user(void) {
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+// LED Effect
+#ifdef RGBLIGHT_ENABLE
+unsigned char rgb[7][5][3];
+void led_ripple_effect(char r, char g, char b) {
+ static int scan_count = -10;
+ static int keys[] = { 6, 6, 6, 7, 7 };
+ static int keys_sum[] = { 0, 6, 12, 18, 25 };
+
+ if (scan_count == -1) {
+ rgblight_enable_noeeprom();
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ } else if (scan_count >= 0 && scan_count < 5) {
+ for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
+ int i = c;
+ // FIXME:
+
+ int y = scan_count;
+ int dist_y = abs(y - keybufs[i].row);
+ for (int x=0; x= 6 && scan_count <= 10) {
+ int y = scan_count - 6;
+ for (int x=0; x= 12) { scan_count = 0; }
+}
+#endif
+
+layer_state_t layer_state_old;
+
+//runs every scan cycle (a lot)
+void matrix_scan_user(void) {
+ #ifdef SSD1306OLED
+ iota_gfx_task(); // this is what updates the display continuously
+ #endif
+
+ if(delay_key_stat && (timer_elapsed(key_timer) > DELAY_TIME)){
+ if (IS_MODE_106())
+ register_delay_code(_BASE_106);
+ else
+ register_delay_code(_BASE);
+ if(!delay_key_pressed){
+ unregister_delay_code();
+ }
+ }
+
+ if(layer_state_old != layer_state){
+ for (int8_t i = _LAYER_NUM-1; i > _BASE_106; i--) {
+ if(IS_LAYER_ON(i)){
+ register_delay_code(i);
+ break;
+ }
+ }
+ layer_state_old = layer_state;
+ }
+
+ #ifdef RGBLIGHT_ENABLE
+ if(!RGBAnimation){
+ if(IS_LAYER_ON(_FUNC)){
+ #ifdef RGBLED_BACK
+ led_ripple_effect(127,23,0);
+ #else
+ rgblight_setrgb(127,23,0);
+ #endif
+ }else if(IS_LAYER_ON(_NUM)||IS_LAYER_ON(_NUM_106)){
+ #ifdef RGBLED_BACK
+ led_ripple_effect(127,0,61);
+ #else
+ rgblight_setrgb(127,0,61);
+ #endif
+ }else if(IS_LAYER_ON(_SYM)||IS_LAYER_ON(_SYM_106)){
+ #ifdef RGBLED_BACK
+ led_ripple_effect(0,127,0);
+ #else
+ rgblight_setrgb(0,127,0);
+ #endif
+ }else if(IS_LAYER_ON(_OPT)||IS_LAYER_ON(_OPT_106)){
+ #ifdef RGBLED_BACK
+ led_ripple_effect(127,0,100);
+ #else
+ rgblight_setrgb(127,0,100);
+ #endif
+ } else {
+ #ifdef RGBLED_BACK
+ led_ripple_effect(0,112,127);
+ #else
+ rgblight_setrgb(0,112,127);
+ #endif
+ }
+ }
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+// Render to OLED
+void render_status(struct CharacterMatrix *matrix) {
+
+ // froggy logo
+ static char logo[4][17]=
+ {
+ {0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0},
+ {0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0},
+ {0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,0},
+ {0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0},
+ };
+
+ static char modectl[4][2][4]=
+ {
+ {
+ {0x65,0x66,0x67,0}, //WIN
+ {0x85,0x86,0x87,0}, //WIN
+ },
+ {
+ {0xa5,0xa6,0xa7,0}, //US(101)
+ {0xc5,0xc6,0xc7,0}, //US(101)
+ },
+ {
+ {0xbd,0xbe,0xbf,0}, //MAC
+ {0xdd,0xde,0xdf,0}, //MAC
+ },
+ {
+ {0xba,0xbb,0xbc,0}, //JP(106)
+ {0xda,0xdb,0xdc,0}, //JP(106)
+ },
+ };
+
+ static char indctr[8][2][4]=
+ {
+ // white icon
+ {
+ {0x60,0x61,0x62,0}, //NUM
+ {0x63,0x64,0} //FUNC
+ },
+ {
+ {0x80,0x81,0x82,0}, //NUM
+ {0x83,0x84,0} //FUNC
+ },
+ {
+ {0xa0,0xa1,0xa2,0}, //CAPS
+ {0xa3,0xa4,0} //SCLK
+ },
+ {
+ {0xc0,0xc1,0xc2,0}, //CAPS
+ {0xc3,0xc4,0} //SCLK
+ },
+ // Black icon
+ {
+ {0x75,0x76,0x77,0}, //NUM
+ {0x78,0x79,0} //FUNC
+ },
+ {
+ {0x95,0x96,0x97,0}, //NUM
+ {0x98,0x99,0} //FUNC
+ },
+ {
+ {0xb5,0xb6,0xb7,0}, //CAPS
+ {0xb8,0xb9,0} //SCLK
+ },
+ {
+ {0xd5,0xd6,0xd7,0}, //CAPS
+ {0xd8,0xd9,0} //SCLK
+ },
+ };
+
+ int rown = 0;
+ int rowf = 0;
+ int rowa = 0;
+ int rows = 0;
+ int rowm = 0;
+ int rowj = 1;
+
+ //Set Indicator icon
+ if (host_keyboard_leds() & (1< | } |
+|------+------+------+------+------+------|
+| EISU | J | M | B | ' | Tab |
+|------+------+------+------+------+------|
+| . | V | C | L | Z | Q |
+|------+------+------+------+------+------+------.
+| | X | G | W | - | Del | Esc |
+|------+------+------+------+------+------+------|
+| | | | , | DTOP | | |
+`------------------------------------------------'
+```
+
+### Num
+```
+,-----------------------------------------.
+| | | Func | home | End | |
+|------+------+------+------+------+------|
+| | * | 7 | 8 | 9 | - |
+|------+------+------+------+------+------|
+| . | / | 4 | 5 | 6 | + |
+|------+------+------+------+------+------+------.
+| LN | 0 | 1 | 2 | 3 |C+S+F1| |
+|------+------+------+------+------+------+------|
+| | | | , | | | |
+`------------------------------------------------'
+```
+
+### Sym
+```
+,-----------------------------------------.
+| Ins | GRV | | PU | PD | ^ |
+|------+------+------+------+------+------|
+| | \ | # | = | ? | % |
+|------+------+------+------+------+------|
+| | $ | upA | @ | ! | | |
+|------+------+------+------+------+------+------.
+| CL | <- | dwA | -> | _ | & | |
+|------+------+------+------+------+------+------|
+| | | PS | | ~ | | |
+ `-----------------------------------------------'
+```
+
+### Func
+```
+,-----------------------------------------.
+|RGBRST| Hue | to101| RST | Mac | Win |
+|------+------+------+------+------+------|
+| RGB1 | VAL+ | F7 | F8 | F9 | to106|
+|------+------+------+------+------+------|
+| RGB2 | VAL- | F4 | F5 | F6 | F12 |
+|------+------+------+------+------+------+------.
+| RGB3 | F10 | F1 | F2 | F3 | F11 | |
+|------+------+------+------+------+------+------|
+|RGBOFF| | | | | | |
+`------------------------------------------------'
+```
diff --git a/keyboards/helix/rev2/keymaps/froggy_106/rules.mk b/keyboards/helix/rev2/keymaps/froggy_106/rules.mk
new file mode 100644
index 00000000000..bea059ca16d
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/froggy_106/rules.mk
@@ -0,0 +1,23 @@
+# QMK Standard Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+# See TOP/keyboards/helix/rules.mk for a list of options that can be set.
+# See TOP/docs/config_options.md for more information.
+#
+LINK_TIME_OPTIMIZATION_ENABLE = no # if firmware size over limit, try this option
+
+# Helix Spacific Build Options
+# you can uncomment and edit follows 7 Variables
+# jp: 以下の7つの変数を必要に応じて編集し、コメントアウトをはずします。
+HELIX_ROWS = 5 # Helix Rows is 4 or 5
+OLED_ENABLE = yes # OLED_ENABLE
+LOCAL_GLCDFONT = yes # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
+LED_BACK_ENABLE = yes # LED backlight (Enable WS2812 RGB underlight.)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
+LED_ANIMATIONS = yes # LED animations
+# IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+
+# convert Helix-specific options (that represent combinations of standard options)
+# into QMK standard options.
+include $(strip $(KEYBOARD_LOCAL_FEATURES_MK))
diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/config.h b/keyboards/helix/rev2/keymaps/yshrsmz/config.h
index d70f23c3e31..b8c1041cdc7 100644
--- a/keyboards/helix/rev2/keymaps/yshrsmz/config.h
+++ b/keyboards/helix/rev2/keymaps/yshrsmz/config.h
@@ -17,10 +17,10 @@ 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 .
*/
+
#pragma once
-/* auto shift config */
-#define AUTO_SHIFT_TIMEOUT 150
+// place overrides here
// If you need more program area, try select and reduce rgblight modes to use.
diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c b/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c
index e5b5f57d970..bd8796d0648 100644
--- a/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c
+++ b/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c
@@ -11,7 +11,6 @@
#include "ssd1306.h"
#endif
-extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
//Following line allows macro to read current RGB settings
@@ -26,20 +25,24 @@ extern uint8_t is_master;
// entirely and just use numbers.
enum layer_number {
_QWERTY = 0,
+ _COLEMAK,
+ _DVORAK,
_LOWER,
_RAISE,
- _FUNC,
_ADJUST
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
LOWER,
RAISE,
- FUNC,
ADJUST,
+ BACKLIT,
EISU,
- KANA
+ KANA,
+ RGBRST
};
enum macro_keycodes {
@@ -54,23 +57,65 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | ESC | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |Shift | Z | X | C | V | B | Fn | Fn | N | M | , | . | / |Shift |
+ * | Shift| Z | X | C | V | B | [ | ] | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | EISU | Ctrl | Alt | GUI |Lower |Space | Bksp |Enter |Space |Raise | GUI | Alt | Ctrl | KANA |
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
* `-------------------------------------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
- 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, FUNC, FUNC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
- EISU, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_BSPC, KC_ENT, KC_SPC, RAISE, KC_RGUI, KC_RALT, KC_RCTL, KANA \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_LCTL, 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_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Colemak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | [ | ] | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | [ | ] | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT( \
+ 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_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LBRC, KC_RBRC, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Lower
@@ -79,9 +124,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | | F12 | | | | | |
+ * | | F7 | F8 | F9 | F10 | F11 | ( | ) | F12 | | | Home | End | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
* `-------------------------------------------------------------------------------------------------'
@@ -89,8 +134,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LOWER] = LAYOUT( \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
- 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, _______, _______, _______, _______, _______, \
+ _______, 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_LPRN, KC_RPRN, KC_F12, _______, _______, KC_HOME, KC_END, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
@@ -100,9 +145,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | | F12 | | | | | |
+ * | | F7 | F8 | F9 | F10 | F11 | | | F12 | | |PageDn|PageUp| |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
* `-------------------------------------------------------------------------------------------------'
@@ -110,29 +155,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_RAISE] = LAYOUT( \
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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
- 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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
- ),
-
- /* Func
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | LEFT | DOWN | UP |RIGHT | PGUP | |
- * |------+------+------+------+------+------|------+------|------+------+------+------+------+------|
- * | | | | | | | | | HOME | END |Alt+← |Alt+→ | PGDN | |
- * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
- * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-------------------------------------------------------------------------------------------------'
- */
- [_FUNC] = LAYOUT( \
- 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
- _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, 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_PGDN, KC_PGUP, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
@@ -140,9 +164,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------. ,-----------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | Reset| | | | | | | | | | | Del |
+ * | | Reset|RGBRST| | | | | | | | | | Del |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | |Aud on|Audoff| Mac | | Win |Qwerty| | | | |
+ * | | | |Aud on|Audoff| Mac | | Win |Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
@@ -151,8 +175,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_ADJUST] = LAYOUT( \
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_DEL, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, \
+ _______, RESET, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
)
@@ -164,81 +188,99 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------. ,-----------------------------------------.
- * | = | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Esc | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
- * | EISU | Ctrl | Alt | GUI |ESC/Lower | Func | Bksp |Enter |Space |Raise | GUI | Alt | Ctrl | KANA |
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
* `-------------------------------------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT( \
- KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ 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_LCTL, 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 , \
- EISU, KC_LCTL, KC_LALT, KC_LGUI, LT(_LOWER, KC_ESC), FUNC, KC_BSPC, KC_ENT, KC_SPC, RAISE, KC_RGUI, KC_RALT, KC_RCTL, KANA \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Colemak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * |Adjust| Esc | Alt | GUI | EISU |Lower |Space |Space |Raise | KANA | Left | Down | Up |Right |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_ESC, KC_LALT, KC_LGUI, EISU, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Lower
* ,-----------------------------------------. ,-----------------------------------------.
* | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | | |
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | Home | End | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
* `-------------------------------------------------------------------------------------------------'
*/
[_LOWER] = LAYOUT( \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
- KC_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, _______, _______, _______, _______, _______, \
+ _______, 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, _______, _______, KC_HOME, KC_END, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
/* Raise
* ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | | |
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | |PageDn|PageUp| |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
* | | | | | | | | | | | Next | Vol- | Vol+ | Play |
* `-------------------------------------------------------------------------------------------------'
*/
[_RAISE] = LAYOUT( \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
- 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_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
- ),
-
- /* Func
- * ,-----------------------------------------. ,-----------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | LEFT | DOWN | UP |RIGHT | PGUP | |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | | | | | | HOME | END |Alt+← |Alt+→ | PGDN | |
- * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
- * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-------------------------------------------------------------------------------------------------'
- */
- [_FUNC] = LAYOUT( \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
- _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
- _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, 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_PGDN, KC_PGUP, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
),
/* Adjust (Lower + Raise)
* ,-----------------------------------------. ,-----------------------------------------.
- * | | Reset| | | | | | | | | | | Del |
+ * | | Reset|RGBRST| | | | | | | | | | Del |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | | | |Aud on|Audoff| Mac | | Win |Qwerty| | | | |
+ * | | | |Aud on|Audoff| Mac | | Win |Qwerty|Colemk|Dvorak| | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
@@ -246,8 +288,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT( \
- _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, \
+ _______, RESET, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
)
@@ -272,11 +314,6 @@ float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
bool TOG_STATUS = false;
int RGB_current_mode;
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
// Setting ADJUST layer RGB back to default
void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
@@ -296,7 +333,25 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef AUDIO_ENABLE
PLAY_SONG(tone_qwerty);
#endif
- persistent_default_layer_set(1UL<<_QWERTY);
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ set_single_persistent_default_layer(_DVORAK);
}
return false;
break;
@@ -346,14 +401,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
- case FUNC:
- if (record->event.pressed) {
- layer_on(_FUNC);
- } else {
- layer_off(_FUNC);
- }
- return false;
- break;
case ADJUST:
if (record->event.pressed) {
layer_on(_ADJUST);
@@ -397,6 +444,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
}
return true;
}
@@ -444,14 +500,7 @@ void music_scale_user(void)
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
-// hook point for 'led_test' keymap
-// 'default' keymap's led_test_init() is empty function, do nothing
-// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST);
-__attribute__ ((weak))
-void led_test_init(void) {}
-
void matrix_scan_user(void) {
- led_test_init();
iota_gfx_task(); // this is what updates the display continuously
}
@@ -467,41 +516,42 @@ void matrix_update(struct CharacterMatrix *dest,
#define L_BASE 0
#define L_LOWER (1<<_LOWER)
#define L_RAISE (1<<_RAISE)
-#define L_FUNC (1<<_FUNC)
#define L_ADJUST (1<<_ADJUST)
#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
static void render_logo(struct CharacterMatrix *matrix) {
- static char logo[]={
+ static const char helix_logo[] PROGMEM ={
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};
- matrix_write(matrix, logo);
+ matrix_write_P(matrix, helix_logo);
//matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
}
-
-
-void render_status(struct CharacterMatrix *matrix) {
-
- // Render to mode icon
- static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
- if(keymap_config.swap_lalt_lgui==false){
- matrix_write(matrix, logo[0][0]);
- matrix_write_P(matrix, PSTR("\n"));
- matrix_write(matrix, logo[0][1]);
- }else{
- matrix_write(matrix, logo[1][0]);
- matrix_write_P(matrix, PSTR("\n"));
- matrix_write(matrix, logo[1][1]);
+static void render_rgbled_status(bool full, struct CharacterMatrix *matrix) {
+#ifdef RGBLIGHT_ENABLE
+ char buf[30];
+ if (RGBLIGHT_MODES > 1 && rgblight_config.enable) {
+ if (full) {
+ snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
+ rgblight_config.mode,
+ rgblight_config.hue/RGBLIGHT_HUE_STEP,
+ rgblight_config.sat/RGBLIGHT_SAT_STEP,
+ rgblight_config.val/RGBLIGHT_VAL_STEP);
+ } else {
+ snprintf(buf, sizeof(buf), "[%2d] ",rgblight_config.mode);
+ }
+ matrix_write(matrix, buf);
}
+#endif
+}
+static void render_layer_status(struct CharacterMatrix *matrix) {
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
- char buf[40];
- snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
- matrix_write_P(matrix, PSTR("\nLayer: "));
+ char buf[10];
+ matrix_write_P(matrix, PSTR("Layer: "));
switch (layer_state) {
case L_BASE:
matrix_write_P(matrix, PSTR("Default"));
@@ -512,24 +562,44 @@ void render_status(struct CharacterMatrix *matrix) {
case L_LOWER:
matrix_write_P(matrix, PSTR("Lower"));
break;
- case L_FUNC:
- matrix_write_P(matrix, PSTR("Func"));
- break;
case L_ADJUST:
case L_ADJUST_TRI:
matrix_write_P(matrix, PSTR("Adjust"));
break;
default:
+ matrix_write_P(matrix, PSTR("Undef-"));
+ snprintf(buf,sizeof(buf), "%ld", layer_state);
matrix_write(matrix, buf);
}
+}
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static const char os_logo[][2][3] PROGMEM ={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write_P(matrix, os_logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write_P(matrix, os_logo[0][1]);
+ }else{
+ matrix_write_P(matrix, os_logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write_P(matrix, os_logo[1][1]);
+ }
+
+ matrix_write_P(matrix, PSTR(" "));
+ render_layer_status(matrix);
+ matrix_write_P(matrix, PSTR("\n"));
// Host Keyboard LED Status
- char led[40];
- snprintf(led, sizeof(led), "\n%s %s %s",
- (host_keyboard_leds() & (1<
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4848 // HH = happy hacking
+#define PRODUCT_ID 0x0001 // ANSI HHKB
+#define DEVICE_VER 0x0104
+#define MANUFACTURER q.m.k
+#define PRODUCT HHKB mod
+#define DESCRIPTION q.m.k keyboard firmware for HHKB
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+#define TAPPING_TERM 200
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
+#ifdef HHKB_RN42_ENABLE
+// rn42 support -- acquired from the tmk repo. This is almost certainly not
+// integrated with qmk in the correct way.
+
+#define SUART_OUT_PORT PORTD
+#define SUART_OUT_BIT 0
+#define SUART_IN_PIN PIND
+#define SUART_IN_BIT 1
+
+#ifdef __AVR_ATmega32U4__
+ #define SERIAL_UART_BAUD 115200
+ #define SERIAL_UART_DATA UDR1
+ #define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
+ #define SERIAL_UART_RXD_VECT USART1_RX_vect
+ #define SERIAL_UART_TXD_READY (UCSR1A&(1<>8); /* baud rate */ \
+ UCSR1B |= (1<
+#include
+#include
+#include
+#include
+
+
+// Timer resolution check
+#if (1000000/TIMER_RAW_FREQ > 20)
+# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
+#endif
+
+
+/*
+ * HHKB Matrix I/O
+ *
+ * row: HC4051[A,B,C] selects scan row0-7
+ * row-ext: [En0,En1] row extention for JP
+ * col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
+ * key: on: 0/off: 1
+ * prev: hysteresis control: assert(1) when previous key state is on
+ */
+
+
+#if defined(__AVR_ATmega32U4__)
+/*
+ * For TMK HHKB alt controller(ATMega32U4)
+ *
+ * row: PB0-2
+ * col: PB3-5,6
+ * key: PD7(pull-uped)
+ * prev: PB7
+ * power: PD4(L:off/H:on)
+ * row-ext: PC6,7 for HHKB JP(active low)
+ */
+static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
+static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); }
+static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
+static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); }
+static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
+#ifdef HHKB_POWER_SAVING
+static inline void KEY_POWER_ON(void) {
+ DDRB = 0xFF; PORTB = 0x40; // change pins output
+ DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on
+ /* Without this wait you will miss or get false key events. */
+ _delay_ms(5); // wait for powering up
+}
+static inline void KEY_POWER_OFF(void) {
+ /* input with pull-up consumes less than without it when pin is open. */
+ DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up
+ DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off
+}
+static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
+#else
+static inline void KEY_POWER_ON(void) {}
+static inline void KEY_POWER_OFF(void) {}
+static inline bool KEY_POWER_STATE(void) { return true; }
+#endif
+static inline void KEY_INIT(void)
+{
+ /* row,col,prev: output */
+ DDRB = 0xFF;
+ PORTB = 0x40; // unable
+ /* key: input with pull-up */
+ DDRD &= ~0x80;
+ PORTD |= 0x80;
+
+ KEY_UNABLE();
+ KEY_PREV_OFF();
+
+ KEY_POWER_OFF();
+}
+static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
+{
+ PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
+
+}
+
+
+#elif defined(__AVR_AT90USB1286__)
+/*
+ * For Teensy++(AT90USB1286)
+ *
+ * HHKB pro HHKB pro2
+ * row: PB0-2 (6-8) (5-7)
+ * col: PB3-5,6 (9-12) (8-11)
+ * key: PE6(pull-uped) (4) (3)
+ * prev: PE7 (5) (4)
+ *
+ * TODO: convert into 'staitc inline' function
+ */
+#define KEY_INIT() do { \
+ DDRB |= 0x7F; \
+ DDRE |= (1<<7); \
+ DDRE &= ~(1<<6); \
+ PORTE |= (1<<6); \
+} while (0)
+#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \
+ (((COL) & 0x07)<<3) | \
+ ((ROW) & 0x07))
+#define KEY_ENABLE() (PORTB &= ~(1<<6))
+#define KEY_UNABLE() (PORTB |= (1<<6))
+#define KEY_STATE() (PINE & (1<<6))
+#define KEY_PREV_ON() (PORTE |= (1<<7))
+#define KEY_PREV_OFF() (PORTE &= ~(1<<7))
+#define KEY_POWER_ON()
+#define KEY_POWER_OFF()
+#define KEY_POWER_STATE() true
+
+
+#else
+# error "define code for matrix scan"
+#endif
+
+
+#if 0
+// For ATMega328P with V-USB
+//
+// #elif defined(__AVR_ATmega328P__)
+// Ports for V-USB
+// key: PB0(pull-uped)
+// prev: PB1
+// row: PB2-4
+// col: PC0-2,3
+// power: PB5(Low:on/Hi-z:off)
+#define KEY_INIT() do { \
+ DDRB |= 0x3E; \
+ DDRB &= ~(1<<0); \
+ PORTB |= 1<<0; \
+ DDRC |= 0x0F; \
+ KEY_UNABLE(); \
+ KEY_PREV_OFF(); \
+} while (0)
+#define KEY_SELECT(ROW, COL) do { \
+ PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
+ PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \
+} while (0)
+#define KEY_ENABLE() (PORTC &= ~(1<<3))
+#define KEY_UNABLE() (PORTC |= (1<<3))
+#define KEY_STATE() (PINB & (1<<0))
+#define KEY_PREV_ON() (PORTB |= (1<<1))
+#define KEY_PREV_OFF() (PORTB &= ~(1<<1))
+// Power supply switching
+#define KEY_POWER_ON() do { \
+ KEY_INIT(); \
+ PORTB &= ~(1<<5); \
+ _delay_ms(1); \
+} while (0)
+#define KEY_POWER_OFF() do { \
+ DDRB &= ~0x3F; \
+ PORTB &= ~0x3F; \
+ DDRC &= ~0x0F; \
+ PORTC &= ~0x0F; \
+} while (0)
+#endif
diff --git a/keyboards/hhkb/ansi/info.json b/keyboards/hhkb/ansi/info.json
new file mode 100644
index 00000000000..a36f1d44c82
--- /dev/null
+++ b/keyboards/hhkb/ansi/info.json
@@ -0,0 +1,73 @@
+{
+ "keyboard_name": "HHKB",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "!", "x": 1, "y": 0 },
+ { "label": "@", "x": 2, "y": 0 },
+ { "label": "#", "x": 3, "y": 0 },
+ { "label": "$", "x": 4, "y": 0 },
+ { "label": "%", "x": 5, "y": 0 },
+ { "label": "^", "x": 6, "y": 0 },
+ { "label": "&", "x": 7, "y": 0 },
+ { "label": "*", "x": 8, "y": 0 },
+ { "label": "(", "x": 9, "y": 0 },
+ { "label": ")", "x": 10, "y": 0 },
+ { "label": "_", "x": 11, "y": 0 },
+ { "label": "+", "x": 12, "y": 0 },
+ { "label": "|", "x": 13, "y": 0 },
+ { "label": "~", "x": 14, "y": 0 },
+ { "label": "Tab", "x": 0, "y": 1, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 1 },
+ { "label": "W", "x": 2.5, "y": 1 },
+ { "label": "E", "x": 3.5, "y": 1 },
+ { "label": "R", "x": 4.5, "y": 1 },
+ { "label": "T", "x": 5.5, "y": 1 },
+ { "label": "Y", "x": 6.5, "y": 1 },
+ { "label": "U", "x": 7.5, "y": 1 },
+ { "label": "I", "x": 8.5, "y": 1 },
+ { "label": "O", "x": 9.5, "y": 1 },
+ { "label": "P", "x": 10.5, "y": 1 },
+ { "label": "{", "x": 11.5, "y": 1 },
+ { "label": "}", "x": 12.5, "y": 1 },
+ { "label": "Delete", "x": 13.5, "y": 1, "w": 1.5 },
+ { "label": "Control", "x": 0, "y": 2, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 2 },
+ { "label": "S", "x": 2.75, "y": 2 },
+ { "label": "D", "x": 3.75, "y": 2 },
+ { "label": "F", "x": 4.75, "y": 2 },
+ { "label": "G", "x": 5.75, "y": 2 },
+ { "label": "H", "x": 6.75, "y": 2 },
+ { "label": "J", "x": 7.75, "y": 2 },
+ { "label": "K", "x": 8.75, "y": 2 },
+ { "label": "L", "x": 9.75, "y": 2 },
+ { "label": ":", "x": 10.75, "y": 2 },
+ { "label": "\"", "x": 11.75, "y": 2 },
+ { "label": "Return", "x": 12.75, "y": 2, "w": 2.25 },
+ { "label": "Shift", "x": 0, "y": 3, "w": 2.25 },
+ { "label": "Z", "x": 2.25, "y": 3 },
+ { "label": "X", "x": 3.25, "y": 3 },
+ { "label": "C", "x": 4.25, "y": 3 },
+ { "label": "V", "x": 5.25, "y": 3 },
+ { "label": "B", "x": 6.25, "y": 3 },
+ { "label": "N", "x": 7.25, "y": 3 },
+ { "label": "M", "x": 8.25, "y": 3 },
+ { "label": "<", "x": 9.25, "y": 3 },
+ { "label": ">", "x": 10.25, "y": 3 },
+ { "label": "?", "x": 11.25, "y": 3 },
+ { "label": "Shift", "x": 12.25, "y": 3, "w": 1.75 },
+ { "label": "Fn", "x": 14, "y": 3 },
+ { "label": "", "x": 1.5, "y": 4 },
+ { "label": "", "x": 2.5, "y": 4, "w": 1.5 },
+ { "x": 4, "y": 4, "w": 6 },
+ { "label": "", "x": 10, "y": 4, "w": 1.5 },
+ { "label": "", "x": 11.5, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/hhkb/keymaps/blakedietz/README.md b/keyboards/hhkb/ansi/keymaps/blakedietz/README.md
similarity index 100%
rename from keyboards/hhkb/keymaps/blakedietz/README.md
rename to keyboards/hhkb/ansi/keymaps/blakedietz/README.md
diff --git a/keyboards/hhkb/keymaps/blakedietz/config.h b/keyboards/hhkb/ansi/keymaps/blakedietz/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/blakedietz/config.h
rename to keyboards/hhkb/ansi/keymaps/blakedietz/config.h
diff --git a/keyboards/hhkb/keymaps/blakedietz/keymap.c b/keyboards/hhkb/ansi/keymaps/blakedietz/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/blakedietz/keymap.c
rename to keyboards/hhkb/ansi/keymaps/blakedietz/keymap.c
diff --git a/keyboards/hhkb/keymaps/blakedietz/rules.mk b/keyboards/hhkb/ansi/keymaps/blakedietz/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/blakedietz/rules.mk
rename to keyboards/hhkb/ansi/keymaps/blakedietz/rules.mk
diff --git a/keyboards/hhkb/keymaps/brett/config.h b/keyboards/hhkb/ansi/keymaps/brett/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/brett/config.h
rename to keyboards/hhkb/ansi/keymaps/brett/config.h
diff --git a/keyboards/hhkb/keymaps/brett/keymap.c b/keyboards/hhkb/ansi/keymaps/brett/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/brett/keymap.c
rename to keyboards/hhkb/ansi/keymaps/brett/keymap.c
diff --git a/keyboards/hhkb/keymaps/brett/readme.md b/keyboards/hhkb/ansi/keymaps/brett/readme.md
similarity index 100%
rename from keyboards/hhkb/keymaps/brett/readme.md
rename to keyboards/hhkb/ansi/keymaps/brett/readme.md
diff --git a/keyboards/hhkb/keymaps/brett/rules.mk b/keyboards/hhkb/ansi/keymaps/brett/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/brett/rules.mk
rename to keyboards/hhkb/ansi/keymaps/brett/rules.mk
diff --git a/keyboards/hhkb/keymaps/cinaeco/README.md b/keyboards/hhkb/ansi/keymaps/cinaeco/README.md
similarity index 100%
rename from keyboards/hhkb/keymaps/cinaeco/README.md
rename to keyboards/hhkb/ansi/keymaps/cinaeco/README.md
diff --git a/keyboards/hhkb/keymaps/cinaeco/config.h b/keyboards/hhkb/ansi/keymaps/cinaeco/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/cinaeco/config.h
rename to keyboards/hhkb/ansi/keymaps/cinaeco/config.h
diff --git a/keyboards/hhkb/keymaps/cinaeco/keymap.c b/keyboards/hhkb/ansi/keymaps/cinaeco/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/cinaeco/keymap.c
rename to keyboards/hhkb/ansi/keymaps/cinaeco/keymap.c
diff --git a/keyboards/hhkb/keymaps/cinaeco/rules.mk b/keyboards/hhkb/ansi/keymaps/cinaeco/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/cinaeco/rules.mk
rename to keyboards/hhkb/ansi/keymaps/cinaeco/rules.mk
diff --git a/keyboards/hhkb/keymaps/dbroqua/keymap.c b/keyboards/hhkb/ansi/keymaps/dbroqua/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/dbroqua/keymap.c
rename to keyboards/hhkb/ansi/keymaps/dbroqua/keymap.c
diff --git a/keyboards/hhkb/keymaps/dbroqua/readme.md b/keyboards/hhkb/ansi/keymaps/dbroqua/readme.md
similarity index 100%
rename from keyboards/hhkb/keymaps/dbroqua/readme.md
rename to keyboards/hhkb/ansi/keymaps/dbroqua/readme.md
diff --git a/keyboards/hhkb/keymaps/default/keymap.c b/keyboards/hhkb/ansi/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/default/keymap.c
rename to keyboards/hhkb/ansi/keymaps/default/keymap.c
diff --git a/keyboards/hhkb/keymaps/eric/keymap.c b/keyboards/hhkb/ansi/keymaps/eric/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/eric/keymap.c
rename to keyboards/hhkb/ansi/keymaps/eric/keymap.c
diff --git a/keyboards/hhkb/keymaps/dhertz/config.h b/keyboards/hhkb/ansi/keymaps/krusli/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/dhertz/config.h
rename to keyboards/hhkb/ansi/keymaps/krusli/config.h
diff --git a/keyboards/hhkb/keymaps/krusli/keymap.c b/keyboards/hhkb/ansi/keymaps/krusli/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/krusli/keymap.c
rename to keyboards/hhkb/ansi/keymaps/krusli/keymap.c
diff --git a/keyboards/hhkb/ansi/keymaps/lxol/keymap.c b/keyboards/hhkb/ansi/keymaps/lxol/keymap.c
new file mode 100644
index 00000000000..462a980471f
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/lxol/keymap.c
@@ -0,0 +1,200 @@
+/* -*- eval: (turn-on-orgtbl); -*-
+ * lxol HHKB Layout
+ */
+#include QMK_KEYBOARD_H
+
+#define BASE 0
+#define WIN 1
+#define HHKB 2
+#define RGUILEV 3
+#define LGUILEV 4
+#define RALTLEV 5
+#define LALTLEV 6
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 0: Default Layer
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | RGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [BASE] = LAYOUT( // layer 0 : default
+
+ 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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, LT(LALTLEV, KC_A), LT(LGUILEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV, KC_L), LT(RALTLEV, KC_SCLN), KC_QUOT, MT(MOD_RCTL, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+
+ /* Layer 1: HHKB mode (HHKB Fn)
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | | | | | | + | - | End | PgD | Dow | | | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+
+ |---+---+---+---+---|
+ | | | | | |
+ |---+---+---+---+---|
+ */
+
+ [HHKB] = LAYOUT(
+ KC_PWR, 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_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ /* Layer LGUI: All keys with RGUI modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | RGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [RGUILEV] = LAYOUT( // Right GUI layer by KC_L
+
+ RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV),
+ RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC),
+ RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), MT(MOD_RCTL, KC_ENT),
+ RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS,
+ KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT),
+
+ /* Layer LGUI: All keys with LGUI modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | LGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [LGUILEV] = LAYOUT( // Right GUI layer by KC_L
+
+ LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV),
+ LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC),
+ LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), MT(MOD_RCTL, KC_ENT),
+ KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS,
+ KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT),
+
+ /* Layer LALT: All keys with RALT modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | RGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [RALTLEV] = LAYOUT( // Right ALT layer by KC_L
+
+ RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV),
+ RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC),
+ RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), MT(MOD_RCTL, KC_ENT),
+ RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS,
+ KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT),
+
+ /* Layer LALT: All keys with LALT modifier
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LAlt | LGUI | Space | LGUI | RAlt |
+ |------+------+-------+------+------|
+ */
+
+ [LALTLEV] = LAYOUT( // Right ALT layer by KC_L
+
+ LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV),
+ LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC),
+ LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), MT(MOD_RCTL, KC_ENT),
+ KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS,
+ KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT),
+
+ /* Layer WIN: Win layer
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
+ |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
+
+ |------+------+-------+------+------|
+ | LGui | LAlt | Space | RGui | Ralt |
+ |------+------+-------+------+------|
+ */
+
+ [WIN] = LAYOUT( // BASE level with swapped GUI/ALT
+
+ 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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, LT(LGUILEV, KC_A), LT(LALTLEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV, KC_L), LT(RGUILEV, KC_SCLN), KC_QUOT, MT(MOD_RCTL, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
+ KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch (id)
+ {
+ case 0:
+ if (record->event.pressed)
+ {
+ register_code(KC_RSFT);
+ }
+ else
+ {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/hhkb/keymaps/mjt/config.h b/keyboards/hhkb/ansi/keymaps/mjt/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/mjt/config.h
rename to keyboards/hhkb/ansi/keymaps/mjt/config.h
diff --git a/keyboards/hhkb/ansi/keymaps/mjt/keymap.c b/keyboards/hhkb/ansi/keymaps/mjt/keymap.c
new file mode 100644
index 00000000000..b62676edd98
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/mjt/keymap.c
@@ -0,0 +1,112 @@
+/* -*- eval: (turn-on-orgtbl); -*-
+ * default HHKB Layout
+ */
+#include QMK_KEYBOARD_H
+
+#define BASE 0
+#define HHKB 1
+#define FUNK 2
+#define DYN 3
+#define CTL_ESC CTL_T(KC_ESC)
+#define MACSLEEP LCTL(LSFT(KC_POWER))
+
+enum hhkb_keycodes
+{
+ QWERTY = SAFE_RANGE,
+ DYNKEY,
+ DYNAMIC_MACRO_RANGE,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BASE Level: Default Layer
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+
+ |------+------+-----------------------+------+------|
+ | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
+ |------+------+-----------------------+------+------|
+ */
+
+ [BASE] = LAYOUT( // default layer
+ 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_BSLS, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), TT(FUNK),
+ KC_LALT, KC_LGUI, /* */ KC_SPC, MO(DYN), KC_RALT),
+
+ /* Layer HHKB: HHKB mode (HHKB Fn)
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | | | | | | + | - | End | PgD | Dow | | | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+
+ |------+------+----------------------+------+------+
+ | **** | **** | ******************** | **** | **** |
+ |------+------+----------------------+------+------+
+
+
+
+ [HHKB] = LAYOUT(
+ KC_PWR, 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_INS, KC_DEL, \
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ */
+ [FUNK] = LAYOUT(
+ KC_PWR, 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_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [DYN] = LAYOUT(
+ KC_TRNS, DYN_REC_START1, DYN_REC_START2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,
+ 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_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MACSLEEP, KC_HOME, KC_END, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, DYN_REC_STOP, KC_TRNS, KC_TRNS)};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch (id)
+ {
+ case 0:
+ if (record->event.pressed)
+ {
+ register_code(KC_RSFT);
+ }
+ else
+ {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ uint16_t macro_kc = (keycode == MO(DYN) ? DYN_REC_STOP : keycode);
+ if (!process_dynamic_macro(macro_kc, record))
+ {
+ return false;
+ }
+
+ return true;
+}
diff --git a/keyboards/hhkb/keymaps/mjt/readme.md b/keyboards/hhkb/ansi/keymaps/mjt/readme.md
similarity index 100%
rename from keyboards/hhkb/keymaps/mjt/readme.md
rename to keyboards/hhkb/ansi/keymaps/mjt/readme.md
diff --git a/keyboards/hhkb/ansi/keymaps/mjt/rules.mk b/keyboards/hhkb/ansi/keymaps/mjt/rules.mk
new file mode 100644
index 00000000000..9e6797ed307
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/mjt/rules.mk
@@ -0,0 +1 @@
+DYNAMIC_MACRO_ENABLE = yes
diff --git a/keyboards/hhkb/keymaps/schaeferdev/README.md b/keyboards/hhkb/ansi/keymaps/schaeferdev/README.md
similarity index 100%
rename from keyboards/hhkb/keymaps/schaeferdev/README.md
rename to keyboards/hhkb/ansi/keymaps/schaeferdev/README.md
diff --git a/keyboards/hhkb/keymaps/schaeferdev/config.h b/keyboards/hhkb/ansi/keymaps/schaeferdev/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/schaeferdev/config.h
rename to keyboards/hhkb/ansi/keymaps/schaeferdev/config.h
diff --git a/keyboards/hhkb/keymaps/schaeferdev/keymap.c b/keyboards/hhkb/ansi/keymaps/schaeferdev/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/schaeferdev/keymap.c
rename to keyboards/hhkb/ansi/keymaps/schaeferdev/keymap.c
diff --git a/keyboards/hhkb/keymaps/schaeferdev/rules.mk b/keyboards/hhkb/ansi/keymaps/schaeferdev/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/schaeferdev/rules.mk
rename to keyboards/hhkb/ansi/keymaps/schaeferdev/rules.mk
diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.c b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c
similarity index 100%
rename from keyboards/hhkb/keymaps/shela/action_pseudo_lut.c
rename to keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.c
diff --git a/keyboards/hhkb/keymaps/shela/action_pseudo_lut.h b/keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h
similarity index 100%
rename from keyboards/hhkb/keymaps/shela/action_pseudo_lut.h
rename to keyboards/hhkb/ansi/keymaps/shela/action_pseudo_lut.h
diff --git a/keyboards/hhkb/keymaps/shela/config.h b/keyboards/hhkb/ansi/keymaps/shela/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/shela/config.h
rename to keyboards/hhkb/ansi/keymaps/shela/config.h
diff --git a/keyboards/hhkb/ansi/keymaps/shela/keymap.c b/keyboards/hhkb/ansi/keymaps/shela/keymap.c
new file mode 100644
index 00000000000..3971e8f9455
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/shela/keymap.c
@@ -0,0 +1,186 @@
+/*
+ * HHKB Pro 2 US Layout for shela
+ */
+#include QMK_KEYBOARD_H
+#include "keymap_jis2us.h"
+#include "action_pseudo_lut.h"
+
+enum keymap_layout
+{
+ BASE = 0,
+ PSEUDO_US,
+ DVORAK,
+ MOUSE,
+ TENKEY,
+ HHKB,
+ SPACE_FN,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 0: Default Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------|
+ * | Control | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * |LAlt | LGui | SpaceFN | RGui |RAlt |
+ * `-----------------------------------------------------------------'
+ */
+ [BASE] =
+ LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
+ KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT),
+
+ /* Layer 1: Pseudo US Layout Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | Tab | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 |
+ * |-----------------------------------------------------------------------------------------|
+ * | Control | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | Shift | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Shift | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * |LGui | Fn3 | SpaceFN | Fn4 |RGui |
+ * `-----------------------------------------------------------------'
+ */
+ [PSEUDO_US] =
+ LAYOUT(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC,
+ KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1,
+ KC_LCTL, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT,
+ KC_LSFT, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT, MO(HHKB),
+ KC_LGUI, MT(MOD_LALT, KC_MHEN), LT(SPACE_FN, KC_SPACE), MT(MOD_RALT, KC_KANA), KC_RGUI),
+
+ /* Layer 2: Dvorak Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ |
+ * |-----------------------------------------------------------------------------------------|
+ * | Control | A | O | E | U | I | D | H | T | N | S | - | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Shift | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * |LAlt | LGui | SpaceFN | RGui |RAlt |
+ * `-----------------------------------------------------------------'
+ */
+ [DVORAK] =
+ LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS,
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB),
+ KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT),
+
+ /* Layer 3: Mouse layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | MwL | MwD | MwU | MwR | | | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | McL | McD | McU | McR | | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | Mb1 | Mb2 | Mb3 | | | | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | Mb1 | | |
+ * `-----------------------------------------------------------------'
+ */
+ [MOUSE] =
+ LAYOUT(KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_BTN2, KC_BTN3, KC_NO, KC_NO, KC_TRNS, MO(HHKB),
+ KC_TRNS, KC_TRNS, KC_BTN1, KC_TRNS, KC_TRNS),
+
+ /* Layer 4: Tenkey layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | | | | | | | | | | / | * | - | | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | | | | 7 | 8 | 9 | + | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | | | | 4 | 5 | 6 | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | | | 1 | 2 | 3 | + | Fn0 |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | SpaceFN | 0 | . |
+ * `-----------------------------------------------------------------'
+ */
+ [TENKEY] =
+ LAYOUT(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_NO, KC_BSPC,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_NO,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_PENT,
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, MO(HHKB),
+ KC_TRNS, KC_TRNS, LT(SPACE_FN, KC_SPACE), KC_KP_0, KC_PDOT),
+
+ /* Layer 5: HHKB mode (HHKB Fn)
+ * ,-----------------------------------------------------------------------------------------.
+ * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------|
+ * | Caps | Fn5 | Fn6 | Fn7 | Fn8 | Fn9 | | | Psc | Slk | Pus | Up | | BSp |
+ * |-----------------------------------------------------------------------------------------|
+ * | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | | | | + | - | End | PgD | Dow | | |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | | | |
+ * `-----------------------------------------------------------------'
+ */
+ [HHKB] =
+ LAYOUT(KC_PWR, 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_INS, KC_DEL,
+ KC_CAPS, DF(BASE), DF(PSEUDO_US), DF(MOUSE), DF(TENKEY), DF(DVORAK), KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ /* Layer 6: SpaceFN
+ * ,-----------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del |
+ * |-----------------------------------------------------------------------------------------|
+ * | | Hom | Up | End | | | | Hom | End | | Psc | Slk | Pau | Ins |
+ * |-----------------------------------------------------------------------------------------|
+ * | | Lef | Dow | Rig | PgU | | Lef | Dow | Up | Rig | | | |
+ * |-----------------------------------------------------------------------------------------|
+ * | | | | PgD | | Spc | | PgD | PgU | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ * | | | | | |
+ * `-----------------------------------------------------------------'
+ */
+ [SPACE_FN] =
+ LAYOUT(KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL,
+ KC_TRNS, KC_HOME, KC_UP, KC_END, KC_NO, KC_NO, KC_NO, KC_HOME, KC_END, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_NO, KC_NO, KC_PGDN, KC_NO, KC_SPC, KC_NO, KC_PGDN, KC_PGUP, KC_NO, KC_NO, KC_TRNS, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+/*
+ * user defined action function
+ */
+enum function_id
+{
+ PSEUDO_US_FUNCTION,
+};
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+
+ switch (id)
+ {
+ case PSEUDO_US_FUNCTION:
+ action_pseudo_lut(record, BASE, keymap_jis2us);
+ break;
+ }
+}
+
+/*
+ * Fn action definition
+ */
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
+};
diff --git a/keyboards/hhkb/keymaps/shela/keymap_jis2us.h b/keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h
similarity index 100%
rename from keyboards/hhkb/keymaps/shela/keymap_jis2us.h
rename to keyboards/hhkb/ansi/keymaps/shela/keymap_jis2us.h
diff --git a/keyboards/hhkb/keymaps/shela/readme.md b/keyboards/hhkb/ansi/keymaps/shela/readme.md
similarity index 100%
rename from keyboards/hhkb/keymaps/shela/readme.md
rename to keyboards/hhkb/ansi/keymaps/shela/readme.md
diff --git a/keyboards/hhkb/keymaps/shela/rules.mk b/keyboards/hhkb/ansi/keymaps/shela/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/shela/rules.mk
rename to keyboards/hhkb/ansi/keymaps/shela/rules.mk
diff --git a/keyboards/hhkb/keymaps/smt/keymap.c b/keyboards/hhkb/ansi/keymaps/smt/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/smt/keymap.c
rename to keyboards/hhkb/ansi/keymaps/smt/keymap.c
diff --git a/keyboards/hhkb/keymaps/tobiasvl_iso/keymap.c b/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/tobiasvl_iso/keymap.c
rename to keyboards/hhkb/ansi/keymaps/tobiasvl_iso/keymap.c
diff --git a/keyboards/hhkb/keymaps/tobiasvl_iso/readme.md b/keyboards/hhkb/ansi/keymaps/tobiasvl_iso/readme.md
similarity index 100%
rename from keyboards/hhkb/keymaps/tobiasvl_iso/readme.md
rename to keyboards/hhkb/ansi/keymaps/tobiasvl_iso/readme.md
diff --git a/keyboards/hhkb/keymaps/tominabox1/.gitignore b/keyboards/hhkb/ansi/keymaps/tominabox1/.gitignore
similarity index 100%
rename from keyboards/hhkb/keymaps/tominabox1/.gitignore
rename to keyboards/hhkb/ansi/keymaps/tominabox1/.gitignore
diff --git a/keyboards/hhkb/keymaps/tominabox1/keymap.c b/keyboards/hhkb/ansi/keymaps/tominabox1/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/tominabox1/keymap.c
rename to keyboards/hhkb/ansi/keymaps/tominabox1/keymap.c
diff --git a/keyboards/hhkb/ansi/keymaps/via/keymap.c b/keyboards/hhkb/ansi/keymaps/via/keymap.c
new file mode 100644
index 00000000000..bdbd32898a0
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/via/keymap.c
@@ -0,0 +1,68 @@
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BASE Level: Default Layer
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+
+ |------+------+-----------------------+------+------|
+ | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
+ |------+------+-----------------------+------+------|
+ */
+
+ [0] = LAYOUT( // default layer
+ 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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LALT, KC_LGUI, /* */ KC_SPC, KC_RGUI, KC_RALT
+ ),
+
+ /* Layer HHKB: HHKB mode (HHKB Fn)
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | | | | | | + | - | End | PgD | Dow | | | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+
+ |------+------+----------------------+------+------+
+ | **** | **** | ******************** | **** | **** |
+ |------+------+----------------------+------+------+
+
+ */
+
+ [1] = LAYOUT(
+ KC_PWR, 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_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [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
+ ),
+ [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
+ )
+};
diff --git a/keyboards/hhkb/ansi/keymaps/via/rules.mk b/keyboards/hhkb/ansi/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/hhkb/ansi/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hhkb/keymaps/xyverz/keymap.c b/keyboards/hhkb/ansi/keymaps/xyverz/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/xyverz/keymap.c
rename to keyboards/hhkb/ansi/keymaps/xyverz/keymap.c
diff --git a/keyboards/hhkb/ansi/matrix.c b/keyboards/hhkb/ansi/matrix.c
new file mode 100644
index 00000000000..f22e69f6b02
--- /dev/null
+++ b/keyboards/hhkb/ansi/matrix.c
@@ -0,0 +1,211 @@
+/*
+Copyright 2011 Jun Wako
+
+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 .
+*/
+
+/*
+ * scan matrix
+ */
+#include
+#include
+#include
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "timer.h"
+#include "matrix.h"
+#include "hhkb_avr.h"
+#include
+#include "suspend.h"
+#include "lufa.h"
+
+
+// matrix power saving
+#define MATRIX_POWER_SAVE 10000
+static uint32_t matrix_last_modified = 0;
+
+// matrix state buffer(1:on, 0:off)
+static matrix_row_t *matrix;
+static matrix_row_t *matrix_prev;
+static matrix_row_t _matrix0[MATRIX_ROWS];
+static matrix_row_t _matrix1[MATRIX_ROWS];
+
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+#ifdef DEBUG
+ debug_enable = true;
+ debug_keyboard = true;
+#endif
+
+ KEY_INIT();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00;
+ matrix = _matrix0;
+ matrix_prev = _matrix1;
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+uint8_t matrix_scan(void)
+{
+ uint8_t *tmp;
+
+ tmp = matrix_prev;
+ matrix_prev = matrix;
+ matrix = tmp;
+
+ // power on
+ if (!KEY_POWER_STATE()) KEY_POWER_ON();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ KEY_SELECT(row, col);
+ _delay_us(5);
+
+ // Not sure this is needed. This just emulates HHKB controller's behaviour.
+ if (matrix_prev[row] & (1< 20/(1000000/TIMER_RAW_FREQ)) {
+ matrix[row] = matrix_prev[row];
+ }
+
+ _delay_us(5);
+ KEY_PREV_OFF();
+ KEY_UNABLE();
+
+ // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
+ // This takes 25us or more to make sure KEY_STATE returns to idle state.
+
+ _delay_us(75);
+
+ }
+ if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
+ }
+ // power off
+ if (KEY_POWER_STATE() &&
+ (USB_DeviceState == DEVICE_STATE_Suspended ||
+ USB_DeviceState == DEVICE_STATE_Unattached ) &&
+ timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) {
+ KEY_POWER_OFF();
+ suspend_power_down();
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+bool matrix_is_modified(void)
+{
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ if (matrix[i] != matrix_prev[i])
+ return true;
+ }
+ return false;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & (1<= 0; --r) {
+ count += bitpop16(matrix_get_row(r));
+ }
+ return count;
+}
+
+void matrix_power_up(void) {
+ KEY_POWER_ON();
+}
+void matrix_power_down(void) {
+ KEY_POWER_OFF();
+}
diff --git a/keyboards/hhkb/ansi/readme.md b/keyboards/hhkb/ansi/readme.md
new file mode 100644
index 00000000000..495aa4c3f7b
--- /dev/null
+++ b/keyboards/hhkb/ansi/readme.md
@@ -0,0 +1,14 @@
+HHKB Alternate Controller
+===
+
+An alternative controler for the HHKB designed by hasu.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: HHKB Alternate Controller
+Hardware Availability: https://geekhack.org/index.php?topic=12047.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hhkb/ansi:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hhkb/ansi/rules.mk b/keyboards/hhkb/ansi/rules.mk
new file mode 100644
index 00000000000..a367ef48d14
--- /dev/null
+++ b/keyboards/hhkb/ansi/rules.mk
@@ -0,0 +1,71 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Custom matrix file for the HHKB
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+# MIDI_ENABLE = yes # MIDI controls
+# UNICODE_ENABLE = yes # Unicode
+# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+
+# HHKB_RN42_ENABLE = yes # Enable support for hasu's BT alt controller -- code borrowed from tmk source tree.
+
+# Either uncomment the HHKB_RN42_ENABLE line above, or run make enabling the
+# feature. Be sure to clean any existing build before trying to enable rn42
+# support. For example:
+#
+# make hhkb-keymap-clean
+# make hhkb-keymap-dfu HHKB_RN42_ENABLE=yes
+
+# project specific files
+SRC = matrix.c
+
+ifeq ($(strip $(HHKB_RN42_ENABLE)), yes)
+
+OPT_DEFS += -DHHKB_RN42_ENABLE
+
+# Support for the RN42 Bluetooth module. This is the BT module in Hasu's BT
+# HHKB Alt controller.
+RN42_DIR = ../rn42
+
+SRC += serial_uart.c \
+ ../rn42/suart.S \
+ ../rn42/rn42.c \
+ ../rn42/rn42_task.c \
+ ../rn42/battery.c \
+ ../rn42/main.c
+
+VPATH += $(RN42_DIR)
+
+endif
+
+
+# debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
+# debug-on: all
+
+# debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
+# debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
+# debug-off: all
+
+LAYOUTS = 60_hhkb
diff --git a/keyboards/hhkb/config.h b/keyboards/hhkb/config.h
deleted file mode 100644
index fc747a6e942..00000000000
--- a/keyboards/hhkb/config.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-
-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 .
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xCAFE
-#define DEVICE_VER 0x0104
-#define MANUFACTURER q.m.k
-#define PRODUCT HHKB mod
-#define DESCRIPTION q.m.k keyboard firmware for HHKB
-
-/* key matrix size */
-#ifdef HHKB_JP
-# define MATRIX_ROWS 16
-#else
-# define MATRIX_ROWS 8
-#endif
-#define MATRIX_COLS 8
-
-#define TAPPING_TERM 200
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* 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
-
-#ifdef HHKB_RN42_ENABLE
-// rn42 support -- acquired from the tmk repo. This is almost certainly not
-// integrated with qmk in the correct way.
-
-#define SUART_OUT_PORT PORTD
-#define SUART_OUT_BIT 0
-#define SUART_IN_PIN PIND
-#define SUART_IN_BIT 1
-
-#ifdef __AVR_ATmega32U4__
- /* iom32u4.h has no definition of UCSR1D. copy from iom32u2.h */
- #define UCSR1D _SFR_MEM8(0xCB)
- #define RTSEN 0
- #define CTSEN 1
-
- #define SERIAL_UART_BAUD 115200
- #define SERIAL_UART_DATA UDR1
- #define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
- #define SERIAL_UART_RXD_VECT USART1_RX_vect
- #define SERIAL_UART_TXD_READY (UCSR1A&(1<>8); /* baud rate */ \
- UCSR1B |= (1<
-#include
-#include
-#include
-#include
-
-
-// Timer resolution check
-#if (1000000/TIMER_RAW_FREQ > 20)
-# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
-#endif
-
-
-/*
- * HHKB Matrix I/O
- *
- * row: HC4051[A,B,C] selects scan row0-7
- * row-ext: [En0,En1] row extention for JP
- * col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
- * key: on: 0/off: 1
- * prev: hysteresis control: assert(1) when previous key state is on
- */
-
-
-#if defined(__AVR_ATmega32U4__)
-/*
- * For TMK HHKB alt controller(ATMega32U4)
- *
- * row: PB0-2
- * col: PB3-5,6
- * key: PD7(pull-uped)
- * prev: PB7
- * power: PD4(L:off/H:on)
- * row-ext: PC6,7 for HHKB JP(active low)
- */
-static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
-static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); }
-static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
-static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); }
-static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
-#ifdef HHKB_POWER_SAVING
-static inline void KEY_POWER_ON(void) {
- DDRB = 0xFF; PORTB = 0x40; // change pins output
- DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on
- /* Without this wait you will miss or get false key events. */
- _delay_ms(5); // wait for powering up
-}
-static inline void KEY_POWER_OFF(void) {
- /* input with pull-up consumes less than without it when pin is open. */
- DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up
- DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off
-}
-static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
-#else
-static inline void KEY_POWER_ON(void) {}
-static inline void KEY_POWER_OFF(void) {}
-static inline bool KEY_POWER_STATE(void) { return true; }
-#endif
-static inline void KEY_INIT(void)
-{
- /* row,col,prev: output */
- DDRB = 0xFF;
- PORTB = 0x40; // unable
- /* key: input with pull-up */
- DDRD &= ~0x80;
- PORTD |= 0x80;
-#ifdef HHKB_JP
- /* row extention for HHKB JP */
- DDRC |= (1<<6|1<<7);
- PORTC |= (1<<6|1<<7);
-#endif
- KEY_UNABLE();
- KEY_PREV_OFF();
-
- KEY_POWER_OFF();
-}
-static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
-{
- PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
-#ifdef HHKB_JP
- if ((ROW) & 0x08) PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<6);
- else PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<7);
-#endif
-}
-
-
-#elif defined(__AVR_AT90USB1286__)
-/*
- * For Teensy++(AT90USB1286)
- *
- * HHKB pro HHKB pro2
- * row: PB0-2 (6-8) (5-7)
- * col: PB3-5,6 (9-12) (8-11)
- * key: PE6(pull-uped) (4) (3)
- * prev: PE7 (5) (4)
- *
- * TODO: convert into 'staitc inline' function
- */
-#define KEY_INIT() do { \
- DDRB |= 0x7F; \
- DDRE |= (1<<7); \
- DDRE &= ~(1<<6); \
- PORTE |= (1<<6); \
-} while (0)
-#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \
- (((COL) & 0x07)<<3) | \
- ((ROW) & 0x07))
-#define KEY_ENABLE() (PORTB &= ~(1<<6))
-#define KEY_UNABLE() (PORTB |= (1<<6))
-#define KEY_STATE() (PINE & (1<<6))
-#define KEY_PREV_ON() (PORTE |= (1<<7))
-#define KEY_PREV_OFF() (PORTE &= ~(1<<7))
-#define KEY_POWER_ON()
-#define KEY_POWER_OFF()
-#define KEY_POWER_STATE() true
-
-
-#else
-# error "define code for matrix scan"
-#endif
-
-
-#if 0
-// For ATMega328P with V-USB
-//
-// #elif defined(__AVR_ATmega328P__)
-// Ports for V-USB
-// key: PB0(pull-uped)
-// prev: PB1
-// row: PB2-4
-// col: PC0-2,3
-// power: PB5(Low:on/Hi-z:off)
-#define KEY_INIT() do { \
- DDRB |= 0x3E; \
- DDRB &= ~(1<<0); \
- PORTB |= 1<<0; \
- DDRC |= 0x0F; \
- KEY_UNABLE(); \
- KEY_PREV_OFF(); \
-} while (0)
-#define KEY_SELECT(ROW, COL) do { \
- PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
- PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \
-} while (0)
-#define KEY_ENABLE() (PORTC &= ~(1<<3))
-#define KEY_UNABLE() (PORTC |= (1<<3))
-#define KEY_STATE() (PINB & (1<<0))
-#define KEY_PREV_ON() (PORTB |= (1<<1))
-#define KEY_PREV_OFF() (PORTB &= ~(1<<1))
-// Power supply switching
-#define KEY_POWER_ON() do { \
- KEY_INIT(); \
- PORTB &= ~(1<<5); \
- _delay_ms(1); \
-} while (0)
-#define KEY_POWER_OFF() do { \
- DDRB &= ~0x3F; \
- PORTB &= ~0x3F; \
- DDRC &= ~0x0F; \
- PORTC &= ~0x0F; \
-} while (0)
-#endif
-
-#endif
diff --git a/keyboards/hhkb/info.json b/keyboards/hhkb/info.json
deleted file mode 100644
index 3beaff83da9..00000000000
--- a/keyboards/hhkb/info.json
+++ /dev/null
@@ -1,147 +0,0 @@
-{
- "keyboard_name": "hhkb",
- "url": "",
- "maintainer": "qmk",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "layout": [
- { "label": "Esc", "x": 0, "y": 0 },
- { "label": "!", "x": 1, "y": 0 },
- { "label": "@", "x": 2, "y": 0 },
- { "label": "#", "x": 3, "y": 0 },
- { "label": "$", "x": 4, "y": 0 },
- { "label": "%", "x": 5, "y": 0 },
- { "label": "^", "x": 6, "y": 0 },
- { "label": "&", "x": 7, "y": 0 },
- { "label": "*", "x": 8, "y": 0 },
- { "label": "(", "x": 9, "y": 0 },
- { "label": ")", "x": 10, "y": 0 },
- { "label": "_", "x": 11, "y": 0 },
- { "label": "+", "x": 12, "y": 0 },
- { "label": "|", "x": 13, "y": 0 },
- { "label": "~", "x": 14, "y": 0 },
- { "label": "Tab", "x": 0, "y": 1, "w": 1.5 },
- { "label": "Q", "x": 1.5, "y": 1 },
- { "label": "W", "x": 2.5, "y": 1 },
- { "label": "E", "x": 3.5, "y": 1 },
- { "label": "R", "x": 4.5, "y": 1 },
- { "label": "T", "x": 5.5, "y": 1 },
- { "label": "Y", "x": 6.5, "y": 1 },
- { "label": "U", "x": 7.5, "y": 1 },
- { "label": "I", "x": 8.5, "y": 1 },
- { "label": "O", "x": 9.5, "y": 1 },
- { "label": "P", "x": 10.5, "y": 1 },
- { "label": "{", "x": 11.5, "y": 1 },
- { "label": "}", "x": 12.5, "y": 1 },
- { "label": "Delete", "x": 13.5, "y": 1, "w": 1.5 },
- { "label": "Control", "x": 0, "y": 2, "w": 1.75 },
- { "label": "A", "x": 1.75, "y": 2 },
- { "label": "S", "x": 2.75, "y": 2 },
- { "label": "D", "x": 3.75, "y": 2 },
- { "label": "F", "x": 4.75, "y": 2 },
- { "label": "G", "x": 5.75, "y": 2 },
- { "label": "H", "x": 6.75, "y": 2 },
- { "label": "J", "x": 7.75, "y": 2 },
- { "label": "K", "x": 8.75, "y": 2 },
- { "label": "L", "x": 9.75, "y": 2 },
- { "label": ":", "x": 10.75, "y": 2 },
- { "label": "\"", "x": 11.75, "y": 2 },
- { "label": "Return", "x": 12.75, "y": 2, "w": 2.25 },
- { "label": "Shift", "x": 0, "y": 3, "w": 2.25 },
- { "label": "Z", "x": 2.25, "y": 3 },
- { "label": "X", "x": 3.25, "y": 3 },
- { "label": "C", "x": 4.25, "y": 3 },
- { "label": "V", "x": 5.25, "y": 3 },
- { "label": "B", "x": 6.25, "y": 3 },
- { "label": "N", "x": 7.25, "y": 3 },
- { "label": "M", "x": 8.25, "y": 3 },
- { "label": "<", "x": 9.25, "y": 3 },
- { "label": ">", "x": 10.25, "y": 3 },
- { "label": "?", "x": 11.25, "y": 3 },
- { "label": "Shift", "x": 12.25, "y": 3, "w": 1.75 },
- { "label": "Fn", "x": 14, "y": 3 },
- { "label": "", "x": 1.5, "y": 4 },
- { "label": "", "x": 2.5, "y": 4, "w": 1.5 },
- { "x": 4, "y": 4, "w": 6 },
- { "label": "", "x": 10, "y": 4, "w": 1.5 },
- { "label": "", "x": 11.5, "y": 4 }
- ]
- },
-
- "LAYOUT_JP": {
- "layout": [
- { "label": "Esc", "x": 0, "y": 0 },
- { "label": "!", "x": 1, "y": 0 },
- { "label": "\"", "x": 2, "y": 0 },
- { "label": "#", "x": 3, "y": 0 },
- { "label": "$", "x": 4, "y": 0 },
- { "label": "%", "x": 5, "y": 0 },
- { "label": "&", "x": 6, "y": 0 },
- { "label": "'", "x": 7, "y": 0 },
- { "label": "(", "x": 8, "y": 0 },
- { "label": ")", "x": 9, "y": 0 },
- { "label": "", "x": 10, "y": 0 },
- { "label": "=", "x": 11, "y": 0 },
- { "label": "~", "x": 12, "y": 0 },
- { "label": "|", "x": 13, "y": 0 },
- { "label": "BS", "x": 14, "y": 0 },
- { "label": "Tab", "x": 0, "y": 1, "w": 1.5 },
- { "label": "Q", "x": 1.5, "y": 1 },
- { "label": "W", "x": 2.5, "y": 1 },
- { "label": "E", "x": 3.5, "y": 1 },
- { "label": "R", "x": 4.5, "y": 1 },
- { "label": "T", "x": 5.5, "y": 1 },
- { "label": "Y", "x": 6.5, "y": 1 },
- { "label": "U", "x": 7.5, "y": 1 },
- { "label": "I", "x": 8.5, "y": 1 },
- { "label": "O", "x": 9.5, "y": 1 },
- { "label": "P", "x": 10.5, "y": 1 },
- { "label": "`", "x": 11.5, "y": 1 },
- { "label": "{", "x": 12.5, "y": 1 },
- { "label": "Enter", "x": 13.75, "y": 1, "w": 1.25, "h": 2 },
- { "label": "Control", "x": 0, "y": 2, "w": 1.75 },
- { "label": "A", "x": 1.75, "y": 2 },
- { "label": "S", "x": 2.75, "y": 2 },
- { "label": "D", "x": 3.75, "y": 2 },
- { "label": "F", "x": 4.75, "y": 2 },
- { "label": "G", "x": 5.75, "y": 2 },
- { "label": "H", "x": 6.75, "y": 2 },
- { "label": "J", "x": 7.75, "y": 2 },
- { "label": "K", "x": 8.75, "y": 2 },
- { "label": "L", "x": 9.75, "y": 2 },
- { "label": "+", "x": 10.75, "y": 2 },
- { "label": "*", "x": 11.75, "y": 2 },
- { "label": "}", "x": 12.75, "y": 2 },
- { "label": "Shift", "x": 0, "y": 3, "w": 2 },
- { "label": "Z", "x": 2, "y": 3 },
- { "label": "X", "x": 3, "y": 3 },
- { "label": "C", "x": 4, "y": 3 },
- { "label": "V", "x": 5, "y": 3 },
- { "label": "B", "x": 6, "y": 3 },
- { "label": "N", "x": 7, "y": 3 },
- { "label": "M", "x": 8, "y": 3 },
- { "label": "<", "x": 9, "y": 3 },
- { "label": ">", "x": 10, "y": 3 },
- { "label": "?", "x": 11, "y": 3 },
- { "label": "_", "x": 12, "y": 3 },
- { "label": "\u2191", "x": 13, "y": 3 },
- { "label": "Shift", "x": 14, "y": 3 },
- { "label": "Fn", "x": 0, "y": 4 },
- { "label": "HH", "x": 1.25, "y": 4 },
- { "label": "\u2662", "x": 2.25, "y": 4 },
- { "label": "", "x": 3.25, "y": 4 },
- { "label": "NN", "x": 4.25, "y": 4 },
- { "x": 5.25, "y": 4, "w": 2.5 },
- { "label": "\u25cc", "x": 7.75, "y": 4 },
- { "label": "Kana", "x": 8.75, "y": 4 },
- { "label": "", "x": 9.75, "y": 4 },
- { "label": "Fn", "x": 10.75, "y": 4 },
- { "label": "\u2190", "x": 12, "y": 4 },
- { "label": "\u2193", "x": 13, "y": 4 },
- { "label": "\u2192", "x": 14, "y": 4 }
- ]
- }
- }
-}
diff --git a/keyboards/hhkb/jp/config.h b/keyboards/hhkb/jp/config.h
new file mode 100644
index 00000000000..9f6819b86e9
--- /dev/null
+++ b/keyboards/hhkb/jp/config.h
@@ -0,0 +1,99 @@
+/*
+Copyright 2012 Jun Wako
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4848 // HH = happy hacking
+#define PRODUCT_ID 0x0002 // HHKB JP
+#define DEVICE_VER 0x0104
+#define MANUFACTURER q.m.k
+#define PRODUCT HHKB mod
+#define DESCRIPTION q.m.k keyboard firmware for HHKB
+
+/* key matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS 8
+
+#define TAPPING_TERM 200
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* 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
+
+#ifdef HHKB_RN42_ENABLE
+// rn42 support -- acquired from the tmk repo. This is almost certainly not
+// integrated with qmk in the correct way.
+
+#define SUART_OUT_PORT PORTD
+#define SUART_OUT_BIT 0
+#define SUART_IN_PIN PIND
+#define SUART_IN_BIT 1
+
+#ifdef __AVR_ATmega32U4__
+ #define SERIAL_UART_BAUD 115200
+ #define SERIAL_UART_DATA UDR1
+ #define SERIAL_UART_UBRR ((F_CPU/(16.0*SERIAL_UART_BAUD)-1+0.5))
+ #define SERIAL_UART_RXD_VECT USART1_RX_vect
+ #define SERIAL_UART_TXD_READY (UCSR1A&(1<>8); /* baud rate */ \
+ UCSR1B |= (1<
+#include
+#include
+#include
+#include
+
+
+// Timer resolution check
+#if (1000000/TIMER_RAW_FREQ > 20)
+# error "Timer resolution(>20us) is not enough for HHKB matrix scan tweak on V-USB."
+#endif
+
+
+/*
+ * HHKB Matrix I/O
+ *
+ * row: HC4051[A,B,C] selects scan row0-7
+ * row-ext: [En0,En1] row extention for JP
+ * col: LS145[A,B,C,D] selects scan col0-7 and enable(D)
+ * key: on: 0/off: 1
+ * prev: hysteresis control: assert(1) when previous key state is on
+ */
+
+
+#if defined(__AVR_ATmega32U4__)
+/*
+ * For TMK HHKB alt controller(ATMega32U4)
+ *
+ * row: PB0-2
+ * col: PB3-5,6
+ * key: PD7(pull-uped)
+ * prev: PB7
+ * power: PD4(L:off/H:on)
+ * row-ext: PC6,7 for HHKB JP(active low)
+ */
+static inline void KEY_ENABLE(void) { (PORTB &= ~(1<<6)); }
+static inline void KEY_UNABLE(void) { (PORTB |= (1<<6)); }
+static inline bool KEY_STATE(void) { return (PIND & (1<<7)); }
+static inline void KEY_PREV_ON(void) { (PORTB |= (1<<7)); }
+static inline void KEY_PREV_OFF(void) { (PORTB &= ~(1<<7)); }
+#ifdef HHKB_POWER_SAVING
+static inline void KEY_POWER_ON(void) {
+ DDRB = 0xFF; PORTB = 0x40; // change pins output
+ DDRD |= (1<<4); PORTD |= (1<<4); // MOS FET switch on
+ /* Without this wait you will miss or get false key events. */
+ _delay_ms(5); // wait for powering up
+}
+static inline void KEY_POWER_OFF(void) {
+ /* input with pull-up consumes less than without it when pin is open. */
+ DDRB = 0x00; PORTB = 0xFF; // change pins input with pull-up
+ DDRD |= (1<<4); PORTD &= ~(1<<4); // MOS FET switch off
+}
+static inline bool KEY_POWER_STATE(void) { return PORTD & (1<<4); }
+#else
+static inline void KEY_POWER_ON(void) {}
+static inline void KEY_POWER_OFF(void) {}
+static inline bool KEY_POWER_STATE(void) { return true; }
+#endif
+static inline void KEY_INIT(void)
+{
+ /* row,col,prev: output */
+ DDRB = 0xFF;
+ PORTB = 0x40; // unable
+ /* key: input with pull-up */
+ DDRD &= ~0x80;
+ PORTD |= 0x80;
+
+ /* row extention for HHKB JP */
+ DDRC |= (1<<6|1<<7);
+ PORTC |= (1<<6|1<<7);
+
+ KEY_UNABLE();
+ KEY_PREV_OFF();
+
+ KEY_POWER_OFF();
+}
+static inline void KEY_SELECT(uint8_t ROW, uint8_t COL)
+{
+ PORTB = (PORTB & 0xC0) | (((COL) & 0x07)<<3) | ((ROW) & 0x07);
+
+ if ((ROW) & 0x08) PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<6);
+ else PORTC = (PORTC & ~(1<<6|1<<7)) | (1<<7);
+
+}
+
+
+#elif defined(__AVR_AT90USB1286__)
+/*
+ * For Teensy++(AT90USB1286)
+ *
+ * HHKB pro HHKB pro2
+ * row: PB0-2 (6-8) (5-7)
+ * col: PB3-5,6 (9-12) (8-11)
+ * key: PE6(pull-uped) (4) (3)
+ * prev: PE7 (5) (4)
+ *
+ * TODO: convert into 'staitc inline' function
+ */
+#define KEY_INIT() do { \
+ DDRB |= 0x7F; \
+ DDRE |= (1<<7); \
+ DDRE &= ~(1<<6); \
+ PORTE |= (1<<6); \
+} while (0)
+#define KEY_SELECT(ROW, COL) (PORTB = (PORTB & 0xC0) | \
+ (((COL) & 0x07)<<3) | \
+ ((ROW) & 0x07))
+#define KEY_ENABLE() (PORTB &= ~(1<<6))
+#define KEY_UNABLE() (PORTB |= (1<<6))
+#define KEY_STATE() (PINE & (1<<6))
+#define KEY_PREV_ON() (PORTE |= (1<<7))
+#define KEY_PREV_OFF() (PORTE &= ~(1<<7))
+#define KEY_POWER_ON()
+#define KEY_POWER_OFF()
+#define KEY_POWER_STATE() true
+
+
+#else
+# error "define code for matrix scan"
+#endif
+
+
+#if 0
+// For ATMega328P with V-USB
+//
+// #elif defined(__AVR_ATmega328P__)
+// Ports for V-USB
+// key: PB0(pull-uped)
+// prev: PB1
+// row: PB2-4
+// col: PC0-2,3
+// power: PB5(Low:on/Hi-z:off)
+#define KEY_INIT() do { \
+ DDRB |= 0x3E; \
+ DDRB &= ~(1<<0); \
+ PORTB |= 1<<0; \
+ DDRC |= 0x0F; \
+ KEY_UNABLE(); \
+ KEY_PREV_OFF(); \
+} while (0)
+#define KEY_SELECT(ROW, COL) do { \
+ PORTB = (PORTB & 0xE3) | ((ROW) & 0x07)<<2; \
+ PORTC = (PORTC & 0xF8) | ((COL) & 0x07); \
+} while (0)
+#define KEY_ENABLE() (PORTC &= ~(1<<3))
+#define KEY_UNABLE() (PORTC |= (1<<3))
+#define KEY_STATE() (PINB & (1<<0))
+#define KEY_PREV_ON() (PORTB |= (1<<1))
+#define KEY_PREV_OFF() (PORTB &= ~(1<<1))
+// Power supply switching
+#define KEY_POWER_ON() do { \
+ KEY_INIT(); \
+ PORTB &= ~(1<<5); \
+ _delay_ms(1); \
+} while (0)
+#define KEY_POWER_OFF() do { \
+ DDRB &= ~0x3F; \
+ PORTB &= ~0x3F; \
+ DDRC &= ~0x0F; \
+ PORTC &= ~0x0F; \
+} while (0)
+#endif
diff --git a/keyboards/hhkb/jp/info.json b/keyboards/hhkb/jp/info.json
new file mode 100644
index 00000000000..7594987d96c
--- /dev/null
+++ b/keyboards/hhkb/jp/info.json
@@ -0,0 +1,82 @@
+{
+ "keyboard_name": "HHKB JP",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_JP": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "!", "x": 1, "y": 0 },
+ { "label": "\"", "x": 2, "y": 0 },
+ { "label": "#", "x": 3, "y": 0 },
+ { "label": "$", "x": 4, "y": 0 },
+ { "label": "%", "x": 5, "y": 0 },
+ { "label": "&", "x": 6, "y": 0 },
+ { "label": "'", "x": 7, "y": 0 },
+ { "label": "(", "x": 8, "y": 0 },
+ { "label": ")", "x": 9, "y": 0 },
+ { "label": "", "x": 10, "y": 0 },
+ { "label": "=", "x": 11, "y": 0 },
+ { "label": "~", "x": 12, "y": 0 },
+ { "label": "|", "x": 13, "y": 0 },
+ { "label": "BS", "x": 14, "y": 0 },
+ { "label": "Tab", "x": 0, "y": 1, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 1 },
+ { "label": "W", "x": 2.5, "y": 1 },
+ { "label": "E", "x": 3.5, "y": 1 },
+ { "label": "R", "x": 4.5, "y": 1 },
+ { "label": "T", "x": 5.5, "y": 1 },
+ { "label": "Y", "x": 6.5, "y": 1 },
+ { "label": "U", "x": 7.5, "y": 1 },
+ { "label": "I", "x": 8.5, "y": 1 },
+ { "label": "O", "x": 9.5, "y": 1 },
+ { "label": "P", "x": 10.5, "y": 1 },
+ { "label": "`", "x": 11.5, "y": 1 },
+ { "label": "{", "x": 12.5, "y": 1 },
+ { "label": "Enter", "x": 13.75, "y": 1, "w": 1.25, "h": 2 },
+ { "label": "Control", "x": 0, "y": 2, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 2 },
+ { "label": "S", "x": 2.75, "y": 2 },
+ { "label": "D", "x": 3.75, "y": 2 },
+ { "label": "F", "x": 4.75, "y": 2 },
+ { "label": "G", "x": 5.75, "y": 2 },
+ { "label": "H", "x": 6.75, "y": 2 },
+ { "label": "J", "x": 7.75, "y": 2 },
+ { "label": "K", "x": 8.75, "y": 2 },
+ { "label": "L", "x": 9.75, "y": 2 },
+ { "label": "+", "x": 10.75, "y": 2 },
+ { "label": "*", "x": 11.75, "y": 2 },
+ { "label": "}", "x": 12.75, "y": 2 },
+ { "label": "Shift", "x": 0, "y": 3, "w": 2 },
+ { "label": "Z", "x": 2, "y": 3 },
+ { "label": "X", "x": 3, "y": 3 },
+ { "label": "C", "x": 4, "y": 3 },
+ { "label": "V", "x": 5, "y": 3 },
+ { "label": "B", "x": 6, "y": 3 },
+ { "label": "N", "x": 7, "y": 3 },
+ { "label": "M", "x": 8, "y": 3 },
+ { "label": "<", "x": 9, "y": 3 },
+ { "label": ">", "x": 10, "y": 3 },
+ { "label": "?", "x": 11, "y": 3 },
+ { "label": "_", "x": 12, "y": 3 },
+ { "label": "\u2191", "x": 13, "y": 3 },
+ { "label": "Shift", "x": 14, "y": 3 },
+ { "label": "Fn", "x": 0, "y": 4 },
+ { "label": "HH", "x": 1.25, "y": 4 },
+ { "label": "\u2662", "x": 2.25, "y": 4 },
+ { "label": "", "x": 3.25, "y": 4 },
+ { "label": "NN", "x": 4.25, "y": 4 },
+ { "x": 5.25, "y": 4, "w": 2.5 },
+ { "label": "\u25cc", "x": 7.75, "y": 4 },
+ { "label": "Kana", "x": 8.75, "y": 4 },
+ { "label": "", "x": 9.75, "y": 4 },
+ { "label": "Fn", "x": 10.75, "y": 4 },
+ { "label": "\u2190", "x": 12, "y": 4 },
+ { "label": "\u2193", "x": 13, "y": 4 },
+ { "label": "\u2192", "x": 14, "y": 4 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/hhkb/jp/jp.c b/keyboards/hhkb/jp/jp.c
new file mode 100644
index 00000000000..f1f1388c773
--- /dev/null
+++ b/keyboards/hhkb/jp/jp.c
@@ -0,0 +1 @@
+#include "jp.h"
\ No newline at end of file
diff --git a/keyboards/hhkb/jp/jp.h b/keyboards/hhkb/jp/jp.h
new file mode 100644
index 00000000000..a95796f25f9
--- /dev/null
+++ b/keyboards/hhkb/jp/jp.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_JP( \
+ K02, K32, K62, K22, K12, K52, K72, KA2, K92, K82, KB2, KE2, KF2, KD2, KC2, \
+ K03, K63, K23, K13, K53, K73, KA3, K93, K83, KB3, KE3, KF3, KD3, \
+ K06, K66, K26, K16, K56, K76, KA6, K96, K86, KB6, KE6, KF6, KD6, KC6, \
+ K05, K65, K25, K15, K55, K75, KA5, K95, K85, KB5, KE5, KF5, KD5, KC5, \
+ K04, K34, K64, K24, K14, K74, K94, K84, KB4, KE4, KF4, KD4, KC4) \
+{ \
+ { KC_NO, KC_NO, K02, K03, K04, K05, K06, KC_NO }, \
+ { KC_NO, KC_NO, K12, K13, K14, K15, K16, KC_NO }, \
+ { KC_NO, KC_NO, K22, K23, K24, K25, K26, KC_NO }, \
+ { KC_NO, KC_NO, K32, KC_NO, K34, 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, K52, K53, KC_NO, K55, K56, KC_NO }, \
+ { KC_NO, KC_NO, K62, K63, K64, K65, K66, KC_NO }, \
+ { KC_NO, KC_NO, K72, K73, K74, K75, K76, KC_NO }, \
+ { KC_NO, KC_NO, K82, K83, K84, K85, K86, KC_NO }, \
+ { KC_NO, KC_NO, K92, K93, K94, K95, K96, KC_NO }, \
+ { KC_NO, KC_NO, KA2, KA3, KC_NO, KA5, KA6, KC_NO }, \
+ { KC_NO, KC_NO, KB2, KB3, KB4, KB5, KB6, KC_NO }, \
+ { KC_NO, KC_NO, KC2, KC_NO, KC4, KC5, KC6, KC_NO }, \
+ { KC_NO, KC_NO, KD2, KD3, KD4, KD5, KD6, KC_NO }, \
+ { KC_NO, KC_NO, KE2, KE3, KE4, KE5, KE6, KC_NO }, \
+ { KC_NO, KC_NO, KF2, KF3, KF4, KF5, KF6, KC_NO } \
+}
diff --git a/keyboards/hhkb/keymaps/bakingpy/keymap.c b/keyboards/hhkb/jp/keymaps/bakingpy/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/bakingpy/keymap.c
rename to keyboards/hhkb/jp/keymaps/bakingpy/keymap.c
diff --git a/keyboards/hhkb/keymaps/bakingpy/rules.mk b/keyboards/hhkb/jp/keymaps/bakingpy/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/bakingpy/rules.mk
rename to keyboards/hhkb/jp/keymaps/bakingpy/rules.mk
diff --git a/keyboards/hhkb/keymaps/jp/keymap.c b/keyboards/hhkb/jp/keymaps/default/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/jp/keymap.c
rename to keyboards/hhkb/jp/keymaps/default/keymap.c
diff --git a/keyboards/hhkb/keymaps/halfqwerty_jp/rules.mk b/keyboards/hhkb/jp/keymaps/default/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/halfqwerty_jp/rules.mk
rename to keyboards/hhkb/jp/keymaps/default/rules.mk
diff --git a/keyboards/hhkb/keymaps/jp_mac/keymap.c b/keyboards/hhkb/jp/keymaps/default_mac/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/jp_mac/keymap.c
rename to keyboards/hhkb/jp/keymaps/default_mac/keymap.c
diff --git a/keyboards/hhkb/keymaps/jp/rules.mk b/keyboards/hhkb/jp/keymaps/default_mac/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/jp/rules.mk
rename to keyboards/hhkb/jp/keymaps/default_mac/rules.mk
diff --git a/keyboards/hhkb/keymaps/krusli/config.h b/keyboards/hhkb/jp/keymaps/dhertz/config.h
similarity index 100%
rename from keyboards/hhkb/keymaps/krusli/config.h
rename to keyboards/hhkb/jp/keymaps/dhertz/config.h
diff --git a/keyboards/hhkb/keymaps/dhertz/keymap.c b/keyboards/hhkb/jp/keymaps/dhertz/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/dhertz/keymap.c
rename to keyboards/hhkb/jp/keymaps/dhertz/keymap.c
diff --git a/keyboards/hhkb/keymaps/dhertz/keymap.h b/keyboards/hhkb/jp/keymaps/dhertz/keymap.h
similarity index 100%
rename from keyboards/hhkb/keymaps/dhertz/keymap.h
rename to keyboards/hhkb/jp/keymaps/dhertz/keymap.h
diff --git a/keyboards/hhkb/keymaps/dhertz/rules.mk b/keyboards/hhkb/jp/keymaps/dhertz/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/dhertz/rules.mk
rename to keyboards/hhkb/jp/keymaps/dhertz/rules.mk
diff --git a/keyboards/hhkb/keymaps/enoch_jp/keymap.c b/keyboards/hhkb/jp/keymaps/enoch_jp/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/enoch_jp/keymap.c
rename to keyboards/hhkb/jp/keymaps/enoch_jp/keymap.c
diff --git a/keyboards/hhkb/keymaps/enoch_jp/rules.mk b/keyboards/hhkb/jp/keymaps/enoch_jp/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/enoch_jp/rules.mk
rename to keyboards/hhkb/jp/keymaps/enoch_jp/rules.mk
diff --git a/keyboards/hhkb/keymaps/halfqwerty_jp/README.md b/keyboards/hhkb/jp/keymaps/halfqwerty_jp/README.md
similarity index 100%
rename from keyboards/hhkb/keymaps/halfqwerty_jp/README.md
rename to keyboards/hhkb/jp/keymaps/halfqwerty_jp/README.md
diff --git a/keyboards/hhkb/keymaps/halfqwerty_jp/keymap.c b/keyboards/hhkb/jp/keymaps/halfqwerty_jp/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/halfqwerty_jp/keymap.c
rename to keyboards/hhkb/jp/keymaps/halfqwerty_jp/keymap.c
diff --git a/keyboards/hhkb/keymaps/jp_mac/rules.mk b/keyboards/hhkb/jp/keymaps/halfqwerty_jp/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/jp_mac/rules.mk
rename to keyboards/hhkb/jp/keymaps/halfqwerty_jp/rules.mk
diff --git a/keyboards/hhkb/keymaps/rdg_jp/keymap.c b/keyboards/hhkb/jp/keymaps/rdg_jp/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/rdg_jp/keymap.c
rename to keyboards/hhkb/jp/keymaps/rdg_jp/keymap.c
diff --git a/keyboards/hhkb/keymaps/rdg_jp/rules.mk b/keyboards/hhkb/jp/keymaps/rdg_jp/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/rdg_jp/rules.mk
rename to keyboards/hhkb/jp/keymaps/rdg_jp/rules.mk
diff --git a/keyboards/hhkb/keymaps/sh_jp/README.md b/keyboards/hhkb/jp/keymaps/sh_jp/README.md
similarity index 100%
rename from keyboards/hhkb/keymaps/sh_jp/README.md
rename to keyboards/hhkb/jp/keymaps/sh_jp/README.md
diff --git a/keyboards/hhkb/keymaps/sh_jp/keymap.c b/keyboards/hhkb/jp/keymaps/sh_jp/keymap.c
similarity index 100%
rename from keyboards/hhkb/keymaps/sh_jp/keymap.c
rename to keyboards/hhkb/jp/keymaps/sh_jp/keymap.c
diff --git a/keyboards/hhkb/keymaps/sh_jp/rules.mk b/keyboards/hhkb/jp/keymaps/sh_jp/rules.mk
similarity index 100%
rename from keyboards/hhkb/keymaps/sh_jp/rules.mk
rename to keyboards/hhkb/jp/keymaps/sh_jp/rules.mk
diff --git a/keyboards/hhkb/jp/keymaps/via/config.h b/keyboards/hhkb/jp/keymaps/via/config.h
new file mode 100644
index 00000000000..96c85573df1
--- /dev/null
+++ b/keyboards/hhkb/jp/keymaps/via/config.h
@@ -0,0 +1,2 @@
+// 3 layers or else it will not fit in EEPROM
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/hhkb/jp/keymaps/via/keymap.c b/keyboards/hhkb/jp/keymaps/via/keymap.c
new file mode 100644
index 00000000000..cb1ba76fb0e
--- /dev/null
+++ b/keyboards/hhkb/jp/keymaps/via/keymap.c
@@ -0,0 +1,58 @@
+#include QMK_KEYBOARD_H
+
+/* Layer 0: HHKB JP
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| -| =|Yen|Bsp|
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |
+ * |------------------------------------------------------` Ent|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| |
+ * |-----------------------------------------------------------|
+ * |Shft | Z| X| C| V| B| N| M| ,| .| /| \| Up|Sft|
+ * |-----------------------------------------------------------|
+ * | ||Ctl|Alt|Cmd| | Spc |Bsp| | | ||Lft|Dwn|Rgh|
+ * `-----------------------------------------------------------'
+ */
+
+/* Layer 1: HHKB mode (HHKB Fn)
+ * ,-----------------------------------------------------------.
+ * |Pwr| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Ins|Del|
+ * |-----------------------------------------------------------|
+ * |Caps | | | | | | | |Psc|Slk|Pus|Up | | |
+ * |------------------------------------------------------` |
+ * | |VoD|VoU|Mut| | | *| /|Hom|PgU|Lef|Rig| | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | +| -|End|PgD|Dow| | | |
+ * |-----------------------------------------------------------|
+ * | || | | | | | | | | || | | |
+ * `-----------------------------------------------------------'
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_JP(
+ 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_JYEN, 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_LCTL, 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_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_UP, KC_RSFT,
+ MO(1), KC_ZKHK, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_HENK, KC_KANA, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_JP(
+ KC_PWR, 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_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, KC_PENT,
+ _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_JP(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t macro_id, uint8_t opt)
+{
+ return MACRO_NONE;
+}
diff --git a/keyboards/hhkb/jp/keymaps/via/rules.mk b/keyboards/hhkb/jp/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/hhkb/jp/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hhkb/jp/matrix.c b/keyboards/hhkb/jp/matrix.c
new file mode 100644
index 00000000000..437356af6d2
--- /dev/null
+++ b/keyboards/hhkb/jp/matrix.c
@@ -0,0 +1,212 @@
+/*
+Copyright 2011 Jun Wako
+
+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 .
+*/
+
+/*
+ * scan matrix
+ */
+#include
+#include
+#include
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "timer.h"
+#include "matrix.h"
+#include "hhkb_avr.h"
+#include
+#include "suspend.h"
+#include "lufa.h"
+
+
+// matrix power saving
+#define MATRIX_POWER_SAVE 10000
+static uint32_t matrix_last_modified = 0;
+
+// matrix state buffer(1:on, 0:off)
+static matrix_row_t *matrix;
+static matrix_row_t *matrix_prev;
+static matrix_row_t _matrix0[MATRIX_ROWS];
+static matrix_row_t _matrix1[MATRIX_ROWS];
+
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+#ifdef DEBUG
+ debug_enable = true;
+ debug_keyboard = true;
+#endif
+
+ KEY_INIT();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00;
+ matrix = _matrix0;
+ matrix_prev = _matrix1;
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+uint8_t matrix_scan(void)
+{
+ uint8_t *tmp;
+
+ tmp = matrix_prev;
+ matrix_prev = matrix;
+ matrix = tmp;
+
+ // power on
+ if (!KEY_POWER_STATE()) KEY_POWER_ON();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ KEY_SELECT(row, col);
+ _delay_us(5);
+
+ // Not sure this is needed. This just emulates HHKB controller's behaviour.
+ if (matrix_prev[row] & (1< 20/(1000000/TIMER_RAW_FREQ)) {
+ matrix[row] = matrix_prev[row];
+ }
+
+ _delay_us(5);
+ KEY_PREV_OFF();
+ KEY_UNABLE();
+
+ // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
+ // This takes 25us or more to make sure KEY_STATE returns to idle state.
+
+ // Looks like JP needs faster scan due to its twice larger matrix
+ // or it can drop keys in fast key typing
+ _delay_us(30);
+ }
+ if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
+ }
+ // power off
+ if (KEY_POWER_STATE() &&
+ (USB_DeviceState == DEVICE_STATE_Suspended ||
+ USB_DeviceState == DEVICE_STATE_Unattached ) &&
+ timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) {
+ KEY_POWER_OFF();
+ suspend_power_down();
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+bool matrix_is_modified(void)
+{
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ if (matrix[i] != matrix_prev[i])
+ return true;
+ }
+ return false;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & (1<= 0; --r) {
+ count += bitpop16(matrix_get_row(r));
+ }
+ return count;
+}
+
+void matrix_power_up(void) {
+ KEY_POWER_ON();
+}
+void matrix_power_down(void) {
+ KEY_POWER_OFF();
+}
diff --git a/keyboards/hhkb/jp/readme.md b/keyboards/hhkb/jp/readme.md
new file mode 100644
index 00000000000..41c1d2214ea
--- /dev/null
+++ b/keyboards/hhkb/jp/readme.md
@@ -0,0 +1,14 @@
+HHKB Alternate Controller
+===
+
+An alternative controler for the HHKB designed by hasu.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: HHKB Alternate Controller
+Hardware Availability: https://geekhack.org/index.php?topic=12047.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hhkb/jp:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hhkb/jp/rules.mk b/keyboards/hhkb/jp/rules.mk
new file mode 100644
index 00000000000..774b444c531
--- /dev/null
+++ b/keyboards/hhkb/jp/rules.mk
@@ -0,0 +1,69 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Custom matrix file for the HHKB
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+# MIDI_ENABLE = yes # MIDI controls
+# UNICODE_ENABLE = yes # Unicode
+# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
+
+
+# HHKB_RN42_ENABLE = yes # Enable support for hasu's BT alt controller -- code borrowed from tmk source tree.
+
+# Either uncomment the HHKB_RN42_ENABLE line above, or run make enabling the
+# feature. Be sure to clean any existing build before trying to enable rn42
+# support. For example:
+#
+# make hhkb-keymap-clean
+# make hhkb-keymap-dfu HHKB_RN42_ENABLE=yes
+
+# project specific files
+SRC = matrix.c
+
+ifeq ($(strip $(HHKB_RN42_ENABLE)), yes)
+
+OPT_DEFS += -DHHKB_RN42_ENABLE
+
+# Support for the RN42 Bluetooth module. This is the BT module in Hasu's BT
+# HHKB Alt controller.
+RN42_DIR = ../rn42
+
+SRC += serial_uart.c \
+ ../rn42/suart.S \
+ ../rn42/rn42.c \
+ ../rn42/rn42_task.c \
+ ../rn42/battery.c \
+ ../rn42/main.c
+
+VPATH += $(RN42_DIR)
+
+endif
+
+
+# debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
+# debug-on: all
+
+# debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
+# debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
+# debug-off: all
diff --git a/keyboards/hhkb/keymaps/lxol/keymap.c b/keyboards/hhkb/keymaps/lxol/keymap.c
deleted file mode 100644
index 3e3b3d2ed0c..00000000000
--- a/keyboards/hhkb/keymaps/lxol/keymap.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/* -*- eval: (turn-on-orgtbl); -*-
- * lxol HHKB Layout
- */
-#include QMK_KEYBOARD_H
-
-#define BASE 0
-#define WIN 1
-#define HHKB 2
-#define RGUILEV 3
-#define LGUILEV 4
-#define RALTLEV 5
-#define LALTLEV 6
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Layer 0: Default Layer
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
-
- |------+------+-------+------+------|
- | LAlt | LGUI | Space | RGUI | RAlt |
- |------+------+-------+------+------|
- */
-
- [BASE] = LAYOUT( // layer 0 : default
-
- 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_GRV,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
- KC_LCTL, LT(LALTLEV, KC_A), LT(LGUILEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RGUILEV, KC_L), LT(RALTLEV, KC_SCLN), KC_QUOT, KC_FN0,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
- KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
-
- /* Layer 1: HHKB mode (HHKB Fn)
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | | | | | | | + | - | End | PgD | Dow | | | | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
-
- |---+---+---+---+---|
- | | | | | |
- |---+---+---+---+---|
- */
-
- [HHKB] = LAYOUT(
- KC_PWR, 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_INS, KC_DEL,
- KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
- KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-
- /* Layer LGUI: All keys with RGUI modifier
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
-
- |------+------+-------+------+------|
- | LAlt | LGUI | Space | RGUI | RAlt |
- |------+------+-------+------+------|
- */
-
- [RGUILEV] = LAYOUT( // Right GUI layer by KC_L
-
- RGUI(KC_ESC), RGUI(KC_1), RGUI(KC_2), RGUI(KC_3), RGUI(KC_4), RGUI(KC_5), RGUI(KC_6), RGUI(KC_7), RGUI(KC_8), RGUI(KC_9), RGUI(KC_0), RGUI(KC_MINS), RGUI(KC_EQL), RGUI(KC_BSLS), RGUI(KC_GRV),
- RGUI(KC_TAB), RGUI(KC_Q), RGUI(KC_W), RGUI(KC_E), RGUI(KC_R), RGUI(KC_T), RGUI(KC_Y), RGUI(KC_U), RGUI(KC_I), RGUI(KC_O), RGUI(KC_P), RGUI(KC_LBRC), RGUI(KC_RBRC), RGUI(KC_BSPC),
- RGUI(KC_LCTL), RGUI(KC_A), RGUI(KC_S), RGUI(KC_D), RGUI(KC_F), RGUI(KC_G), RGUI(KC_H), RGUI(KC_J), RGUI(KC_K), KC_TRNS, KC_TRNS, RGUI(KC_QUOT), KC_FN0,
- RGUI(KC_LSFT), RGUI(KC_Z), RGUI(KC_X), RGUI(KC_C), RGUI(KC_V), RGUI(KC_B), RGUI(KC_N), RGUI(KC_M), RGUI(KC_COMM), RGUI(KC_DOT), RGUI(KC_SLSH), RGUI(KC_RSFT), KC_TRNS,
- KC_LALT, KC_LGUI, RGUI(KC_SPC), KC_RGUI, KC_RALT),
-
- /* Layer LGUI: All keys with LGUI modifier
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
-
- |------+------+-------+------+------|
- | LAlt | LGUI | Space | LGUI | RAlt |
- |------+------+-------+------+------|
- */
-
- [LGUILEV] = LAYOUT( // Right GUI layer by KC_L
-
- LGUI(KC_ESC), LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), LGUI(KC_MINS), LGUI(KC_EQL), LGUI(KC_BSLS), LGUI(KC_GRV),
- LGUI(KC_TAB), LGUI(KC_Q), LGUI(KC_W), LGUI(KC_E), LGUI(KC_R), LGUI(KC_T), LGUI(KC_Y), LGUI(KC_U), LGUI(KC_I), LGUI(KC_O), LGUI(KC_P), LGUI(KC_LBRC), LGUI(KC_RBRC), LGUI(KC_BSPC),
- LGUI(KC_LCTL), KC_TRNS, KC_TRNS, LGUI(KC_D), LGUI(KC_F), LGUI(KC_G), LGUI(KC_H), LGUI(KC_J), LGUI(KC_K), LGUI(KC_L), LGUI(KC_SCLN), LGUI(KC_QUOT), KC_FN0,
- KC_LSFT, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), LGUI(KC_B), LGUI(KC_N), LGUI(KC_M), LGUI(KC_COMM), LGUI(KC_DOT), LGUI(KC_SLSH), KC_RSFT, KC_TRNS,
- KC_LALT, KC_LGUI, LGUI(KC_SPC), KC_LGUI, KC_RALT),
-
- /* Layer LALT: All keys with RALT modifier
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
-
- |------+------+-------+------+------|
- | LAlt | LGUI | Space | RGUI | RAlt |
- |------+------+-------+------+------|
- */
-
- [RALTLEV] = LAYOUT( // Right ALT layer by KC_L
-
- RALT(KC_ESC), RALT(KC_1), RALT(KC_2), RALT(KC_3), RALT(KC_4), RALT(KC_5), RALT(KC_6), RALT(KC_7), RALT(KC_8), RALT(KC_9), RALT(KC_0), RALT(KC_MINS), RALT(KC_EQL), RALT(KC_BSLS), RALT(KC_GRV),
- RALT(KC_TAB), RALT(KC_Q), RALT(KC_W), RALT(KC_E), RALT(KC_R), RALT(KC_T), RALT(KC_Y), RALT(KC_U), RALT(KC_I), RALT(KC_O), RALT(KC_P), RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_BSPC),
- RALT(KC_LCTL), RALT(KC_A), RALT(KC_S), RALT(KC_D), RALT(KC_F), RALT(KC_G), RALT(KC_H), RALT(KC_J), RALT(KC_K), KC_TRNS, KC_TRNS, RALT(KC_QUOT), KC_FN0,
- RALT(KC_LSFT), RALT(KC_Z), RALT(KC_X), RALT(KC_C), RALT(KC_V), RALT(KC_B), RALT(KC_N), RALT(KC_M), RALT(KC_COMM), RALT(KC_DOT), RALT(KC_SLSH), RALT(KC_RSFT), KC_TRNS,
- KC_LALT, KC_LGUI, RALT(KC_SPC), KC_RGUI, KC_RALT),
-
- /* Layer LALT: All keys with LALT modifier
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Contro | A | S | D | F | G | H | J | K | | ; | ' | RCtl/Ent | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | Fn2 | Shift | Fn0 | | |
- |--------+---+---+---+---+---+---+---+---+---+-----+-------+----------+-------+---|
-
- |------+------+-------+------+------|
- | LAlt | LGUI | Space | LGUI | RAlt |
- |------+------+-------+------+------|
- */
-
- [LALTLEV] = LAYOUT( // Right ALT layer by KC_L
-
- LALT(KC_ESC), LALT(KC_1), LALT(KC_2), LALT(KC_3), LALT(KC_4), LALT(KC_5), LALT(KC_6), LALT(KC_7), LALT(KC_8), LALT(KC_9), LALT(KC_0), LALT(KC_MINS), LALT(KC_EQL), LALT(KC_BSLS), LALT(KC_GRV),
- LALT(KC_TAB), LALT(KC_Q), LALT(KC_W), LALT(KC_E), LALT(KC_R), LALT(KC_T), LALT(KC_Y), LALT(KC_U), LALT(KC_I), LALT(KC_O), LALT(KC_P), LALT(KC_LBRC), LALT(KC_RBRC), LALT(KC_BSPC),
- LALT(KC_LCTL), KC_TRNS, KC_TRNS, LALT(KC_D), LALT(KC_F), LALT(KC_G), LALT(KC_H), LALT(KC_J), LALT(KC_K), LALT(KC_L), LALT(KC_SCLN), LALT(KC_QUOT), KC_FN0,
- KC_LSFT, LALT(KC_Z), LALT(KC_X), LALT(KC_C), LALT(KC_V), LALT(KC_B), LALT(KC_N), LALT(KC_M), LALT(KC_COMM), LALT(KC_DOT), LALT(KC_SLSH), KC_RSFT, KC_TRNS,
- KC_LALT, KC_LGUI, LALT(KC_SPC), KC_LGUI, KC_RALT),
-
- /* Layer WIN: Win layer
- |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
- | Contro | A | S | D | F | G | H | J | K | L | ; | ' | RCtl/Ent | | |
- |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
- |--------+---+---+---+---+---+---+---+---+---+---+-------+----------+-------+---|
-
- |------+------+-------+------+------|
- | LGui | LAlt | Space | RGui | Ralt |
- |------+------+-------+------+------|
- */
-
- [WIN] = LAYOUT( // BASE level with swapped GUI/ALT
-
- 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_GRV,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
- KC_LCTL, LT(LGUILEV, KC_A), LT(LALTLEV, KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, LT(RALTLEV, KC_L), LT(RGUILEV, KC_SCLN), KC_QUOT, KC_FN0,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
- KC_RGUI, KC_RALT, KC_SPC, KC_RALT, KC_RGUI)};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_ENT) // RControl with tap Enter*
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch (id)
- {
- case 0:
- if (record->event.pressed)
- {
- register_code(KC_RSFT);
- }
- else
- {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/hhkb/keymaps/mjt/keymap.c b/keyboards/hhkb/keymaps/mjt/keymap.c
deleted file mode 100644
index e51eb8bf922..00000000000
--- a/keyboards/hhkb/keymaps/mjt/keymap.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* -*- eval: (turn-on-orgtbl); -*-
- * default HHKB Layout
- */
-#include QMK_KEYBOARD_H
-
-#define BASE 0
-#define HHKB 1
-#define FUNK 2
-#define DYN 3
-#define CTL_ESC CTL_T(KC_ESC)
-#define MACSLEEP LCTL(LSFT(KC_POWER))
-
-enum hhkb_keycodes
-{
- QWERTY = SAFE_RANGE,
- DYNKEY,
- DYNAMIC_MACRO_RANGE,
-};
-
-#include "dynamic_macro.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* BASE Level: Default Layer
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
- | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
- |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
-
- |------+------+-----------------------+------+------|
- | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
- |------+------+-----------------------+------+------|
- */
-
- [BASE] = LAYOUT( // default layer
- 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_BSLS, KC_DEL,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
- CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), TT(FUNK),
- KC_LALT, KC_LGUI, /* */ KC_SPC, MO(DYN), KC_RALT),
-
- /* Layer HHKB: HHKB mode (HHKB Fn)
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
- | | | | | | | + | - | End | PgD | Dow | | | | |
- |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
-
- |------+------+----------------------+------+------+
- | **** | **** | ******************** | **** | **** |
- |------+------+----------------------+------+------+
-
-
-
- [HHKB] = LAYOUT(
- KC_PWR, 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_INS, KC_DEL, \
- KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
- KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-
- */
- [FUNK] = LAYOUT(
- KC_PWR, 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_INS, KC_DEL,
- KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
- [DYN] = LAYOUT(
- KC_TRNS, DYN_REC_START1, DYN_REC_START2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,
- 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_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MACSLEEP, KC_HOME, KC_END, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, DYN_REC_STOP, KC_TRNS, KC_TRNS)};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch (id)
- {
- case 0:
- if (record->event.pressed)
- {
- register_code(KC_RSFT);
- }
- else
- {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record)
-{
- uint16_t macro_kc = (keycode == MO(DYN) ? DYN_REC_STOP : keycode);
- if (!process_record_dynamic_macro(macro_kc, record))
- {
- return false;
- }
-
- return true;
-}
diff --git a/keyboards/hhkb/keymaps/shela/keymap.c b/keyboards/hhkb/keymaps/shela/keymap.c
deleted file mode 100644
index 2d5f4c64ac3..00000000000
--- a/keyboards/hhkb/keymaps/shela/keymap.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * HHKB Pro 2 US Layout for shela
- */
-#include QMK_KEYBOARD_H
-#include "keymap_jis2us.h"
-#include "action_pseudo_lut.h"
-
-enum keymap_layout
-{
- BASE = 0,
- PSEUDO_US,
- DVORAK,
- MOUSE,
- TENKEY,
- HHKB,
- SPACE_FN,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Layer 0: Default Layer
- * ,-----------------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | ` | BSp |
- * |-----------------------------------------------------------------------------------------|
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
- * |-----------------------------------------------------------------------------------------|
- * | Control | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
- * |-----------------------------------------------------------------------------------------|
- * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 |
- * `-----------------------------------------------------------------------------------------'
- * |LAlt | LGui | SpaceFN | RGui |RAlt |
- * `-----------------------------------------------------------------'
- */
- [BASE] =
- LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(HHKB),
- KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT),
-
- /* Layer 1: Pseudo US Layout Layer
- * ,-----------------------------------------------------------------------------------------.
- * | Esc | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | BSp |
- * |-----------------------------------------------------------------------------------------|
- * | Tab | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 |
- * |-----------------------------------------------------------------------------------------|
- * | Control | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Enter |
- * |-----------------------------------------------------------------------------------------|
- * | Shift | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Fn1 | Shift | Fn0 |
- * `-----------------------------------------------------------------------------------------'
- * |LGui | Fn3 | SpaceFN | Fn4 |RGui |
- * `-----------------------------------------------------------------'
- */
- [PSEUDO_US] =
- LAYOUT(KC_ESC, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_BSPC,
- KC_TAB, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1,
- KC_LCTL, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_ENT,
- KC_LSFT, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_FN1, KC_RSFT, MO(HHKB),
- KC_LGUI, KC_FN3, LT(SPACE_FN, KC_SPACE), KC_FN4, KC_RGUI),
-
- /* Layer 2: Dvorak Layer
- * ,-----------------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | [ | ] | ` | BSp |
- * |-----------------------------------------------------------------------------------------|
- * | Tab | ' | , | . | P | Y | F | G | C | R | L | / | = | \ |
- * |-----------------------------------------------------------------------------------------|
- * | Control | A | O | E | U | I | D | H | T | N | S | - | Enter |
- * |-----------------------------------------------------------------------------------------|
- * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Shift | Fn0 |
- * `-----------------------------------------------------------------------------------------'
- * |LAlt | LGui | SpaceFN | RGui |RAlt |
- * `-----------------------------------------------------------------'
- */
- [DVORAK] =
- LAYOUT(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSPC,
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS,
- KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, MO(HHKB),
- KC_LALT, KC_LGUI, LT(SPACE_FN, KC_SPACE), KC_RGUI, KC_RALT),
-
- /* Layer 3: Mouse layer
- * ,-----------------------------------------------------------------------------------------.
- * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | |
- * |-----------------------------------------------------------------------------------------|
- * | | | | | | | MwL | MwD | MwU | MwR | | | | |
- * |-----------------------------------------------------------------------------------------|
- * | | | | | | | McL | McD | McU | McR | | | |
- * |-----------------------------------------------------------------------------------------|
- * | | | | | | | Mb1 | Mb2 | Mb3 | | | | Fn0 |
- * `-----------------------------------------------------------------------------------------'
- * | | | Mb1 | | |
- * `-----------------------------------------------------------------'
- */
- [MOUSE] =
- LAYOUT(KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_TRNS,
- KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, KC_NO, KC_NO, KC_TRNS,
- KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_BTN1, KC_BTN2, KC_BTN3, KC_NO, KC_NO, KC_TRNS, MO(HHKB),
- KC_TRNS, KC_TRNS, KC_BTN1, KC_TRNS, KC_TRNS),
-
- /* Layer 4: Tenkey layer
- * ,-----------------------------------------------------------------------------------------.
- * | Esc | | | | | | | | | | / | * | - | | BSp |
- * |-----------------------------------------------------------------------------------------|
- * | | | | | | | | | | 7 | 8 | 9 | + | |
- * |-----------------------------------------------------------------------------------------|
- * | | | | | | | | | | 4 | 5 | 6 | Enter |
- * |-----------------------------------------------------------------------------------------|
- * | | | | | | | | | 1 | 2 | 3 | + | Fn0 |
- * `-----------------------------------------------------------------------------------------'
- * | | | SpaceFN | 0 | . |
- * `-----------------------------------------------------------------'
- */
- [TENKEY] =
- LAYOUT(KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSLS, KC_PAST, KC_PMNS, KC_NO, KC_BSPC,
- KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_NO,
- KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_4, KC_KP_5, KC_KP_6, KC_PENT,
- KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, MO(HHKB),
- KC_TRNS, KC_TRNS, LT(SPACE_FN, KC_SPACE), KC_KP_0, KC_PDOT),
-
- /* Layer 5: HHKB mode (HHKB Fn)
- * ,-----------------------------------------------------------------------------------------.
- * | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
- * |-----------------------------------------------------------------------------------------|
- * | Caps | Fn5 | Fn6 | Fn7 | Fn8 | Fn9 | | | Psc | Slk | Pus | Up | | BSp |
- * |-----------------------------------------------------------------------------------------|
- * | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter |
- * |-----------------------------------------------------------------------------------------|
- * | | | | | | | + | - | End | PgD | Dow | | |
- * `-----------------------------------------------------------------------------------------'
- * | | | | | |
- * `-----------------------------------------------------------------'
- */
- [HHKB] =
- LAYOUT(KC_PWR, 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_INS, KC_DEL,
- KC_CAPS, KC_FN5, KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
- KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-
- /* Layer 6: SpaceFN
- * ,-----------------------------------------------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | Del |
- * |-----------------------------------------------------------------------------------------|
- * | | Hom | Up | End | | | | Hom | End | | Psc | Slk | Pau | Ins |
- * |-----------------------------------------------------------------------------------------|
- * | | Lef | Dow | Rig | PgU | | Lef | Dow | Up | Rig | | | |
- * |-----------------------------------------------------------------------------------------|
- * | | | | PgD | | Spc | | PgD | PgU | | | | |
- * `-----------------------------------------------------------------------------------------'
- * | | | | | |
- * `-----------------------------------------------------------------'
- */
- [SPACE_FN] =
- LAYOUT(KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL,
- KC_TRNS, KC_HOME, KC_UP, KC_END, KC_NO, KC_NO, KC_NO, KC_HOME, KC_END, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS,
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGUP, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, KC_NO, KC_TRNS,
- KC_TRNS, KC_NO, KC_NO, KC_PGDN, KC_NO, KC_SPC, KC_NO, KC_PGDN, KC_PGUP, KC_NO, KC_NO, KC_TRNS, KC_NO,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
-};
-
-/*
- * user defined action function
- */
-enum function_id
-{
- PSEUDO_US_FUNCTION,
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-
- switch (id)
- {
- case PSEUDO_US_FUNCTION:
- action_pseudo_lut(record, BASE, keymap_jis2us);
- break;
- }
-}
-
-/*
- * Fn action definition
- */
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
- [3] = ACTION_MODS_TAP_KEY(MOD_LALT, KC_MHEN),
- [4] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_KANA),
- [5] = ACTION_DEFAULT_LAYER_SET(BASE),
- [6] = ACTION_DEFAULT_LAYER_SET(PSEUDO_US),
- [7] = ACTION_DEFAULT_LAYER_SET(MOUSE),
- [8] = ACTION_DEFAULT_LAYER_SET(TENKEY),
- [9] = ACTION_DEFAULT_LAYER_SET(DVORAK),
-};
diff --git a/keyboards/hhkb/matrix.c b/keyboards/hhkb/matrix.c
deleted file mode 100644
index 666b6f595f1..00000000000
--- a/keyboards/hhkb/matrix.c
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-Copyright 2011 Jun Wako
-
-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 .
-*/
-
-/*
- * scan matrix
- */
-#include
-#include
-#include
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "timer.h"
-#include "matrix.h"
-#include "hhkb_avr.h"
-#include
-#include "suspend.h"
-#include "lufa.h"
-
-
-// matrix power saving
-#define MATRIX_POWER_SAVE 10000
-static uint32_t matrix_last_modified = 0;
-
-// matrix state buffer(1:on, 0:off)
-static matrix_row_t *matrix;
-static matrix_row_t *matrix_prev;
-static matrix_row_t _matrix0[MATRIX_ROWS];
-static matrix_row_t _matrix1[MATRIX_ROWS];
-
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
-#ifdef DEBUG
- debug_enable = true;
- debug_keyboard = true;
-#endif
-
- KEY_INIT();
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix0[i] = 0x00;
- for (uint8_t i=0; i < MATRIX_ROWS; i++) _matrix1[i] = 0x00;
- matrix = _matrix0;
- matrix_prev = _matrix1;
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-uint8_t matrix_scan(void)
-{
- uint8_t *tmp;
-
- tmp = matrix_prev;
- matrix_prev = matrix;
- matrix = tmp;
-
- // power on
- if (!KEY_POWER_STATE()) KEY_POWER_ON();
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- KEY_SELECT(row, col);
- _delay_us(5);
-
- // Not sure this is needed. This just emulates HHKB controller's behaviour.
- if (matrix_prev[row] & (1< 20/(1000000/TIMER_RAW_FREQ)) {
- matrix[row] = matrix_prev[row];
- }
-
- _delay_us(5);
- KEY_PREV_OFF();
- KEY_UNABLE();
-
- // NOTE: KEY_STATE keep its state in 20us after KEY_ENABLE.
- // This takes 25us or more to make sure KEY_STATE returns to idle state.
-#ifdef HHKB_JP
- // Looks like JP needs faster scan due to its twice larger matrix
- // or it can drop keys in fast key typing
- _delay_us(30);
-#else
- _delay_us(75);
-#endif
- }
- if (matrix[row] ^ matrix_prev[row]) matrix_last_modified = timer_read32();
- }
- // power off
- if (KEY_POWER_STATE() &&
- (USB_DeviceState == DEVICE_STATE_Suspended ||
- USB_DeviceState == DEVICE_STATE_Unattached ) &&
- timer_elapsed32(matrix_last_modified) > MATRIX_POWER_SAVE) {
- KEY_POWER_OFF();
- suspend_power_down();
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-bool matrix_is_modified(void)
-{
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- if (matrix[i] != matrix_prev[i])
- return true;
- }
- return false;
-}
-
-inline
-bool matrix_has_ghost(void)
-{
- return false;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & (1<= 0; --r) {
- count += bitpop16(matrix_get_row(r));
- }
- return count;
-}
-
-void matrix_power_up(void) {
- KEY_POWER_ON();
-}
-void matrix_power_down(void) {
- KEY_POWER_OFF();
-}
diff --git a/keyboards/hhkb/readme.md b/keyboards/hhkb/readme.md
deleted file mode 100644
index 57eb8143910..00000000000
--- a/keyboards/hhkb/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-HHKB Alternate Controller
-===
-
-An alternative controler for the HHKB designed by hasu.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: HHKB Alternate Controller
-Hardware Availability: https://geekhack.org/index.php?topic=12047.0
-
-Make example for this keyboard (after setting up your build environment):
-
- make hhkb:default
-
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/hhkb/rules.mk b/keyboards/hhkb/rules.mk
deleted file mode 100644
index 68fb51a30cf..00000000000
--- a/keyboards/hhkb/rules.mk
+++ /dev/null
@@ -1,71 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
-BOOTLOADER = atmel-dfu
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Custom matrix file for the HHKB
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-# NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-# BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-# MIDI_ENABLE = yes # MIDI controls
-# UNICODE_ENABLE = yes # Unicode
-# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
-
-
-# HHKB_RN42_ENABLE = yes # Enable support for hasu's BT alt controller -- code borrowed from tmk source tree.
-
-# Either uncomment the HHKB_RN42_ENABLE line above, or run make enabling the
-# feature. Be sure to clean any existing build before trying to enable rn42
-# support. For example:
-#
-# make hhkb-keymap-clean
-# make hhkb-keymap-dfu HHKB_RN42_ENABLE=yes
-
-# project specific files
-SRC = matrix.c
-
-ifeq ($(strip $(HHKB_RN42_ENABLE)), yes)
-
-OPT_DEFS += -DHHKB_RN42_ENABLE
-
-# Support for the RN42 Bluetooth module. This is the BT module in Hasu's BT
-# HHKB Alt controller.
-RN42_DIR = rn42
-
-SRC += serial_uart.c \
- rn42/suart.S \
- rn42/rn42.c \
- rn42/rn42_task.c \
- rn42/battery.c \
- rn42/main.c
-
-VPATH += $(RN42_DIR)
-
-endif
-
-
-# debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
-# debug-on: all
-
-# debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
-# debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
-# debug-off: all
-
-LAYOUTS = 60_hhkb
diff --git a/keyboards/hid_liber/hid_liber.c b/keyboards/hid_liber/hid_liber.c
index 6517c920622..2d2130743f1 100755
--- a/keyboards/hid_liber/hid_liber.c
+++ b/keyboards/hid_liber/hid_liber.c
@@ -24,34 +24,16 @@ void matrix_init_kb(void) {
matrix_init_user();
}
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
-
- return process_record_user(keycode, record);
-}
-
void led_init_ports(void) {
- DDRB |= (1<<5) | (1<<6); // OUT
+ setPinOutput(B5);
+ setPinOutput(B6);
}
-void led_set_kb(uint8_t usb_led) {
- if (usb_led & (1<.
*/
-#ifndef HID_LIBER_H
-#define HID_LIBER_H
+#pragma once
#include "quantum.h"
@@ -69,7 +68,3 @@
/* Q */ { ___ , ___ , KQ2 , ___ , ___ , ___ , ___ , KQ7 }, \
/* R */ { ___ , ___ , ___ , ___ , KR4 , ___ , ___ , ___ } \
}
-
-
-
-#endif
diff --git a/keyboards/hid_liber/info.json b/keyboards/hid_liber/info.json
new file mode 100644
index 00000000000..581ac55a2c8
--- /dev/null
+++ b/keyboards/hid_liber/info.json
@@ -0,0 +1,101 @@
+{
+ "keyboard_name": "bpiphany HIDLiberation",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"KG1", "x":0, "y":0},
+ {"label":"KH7", "x":2, "y":0},
+ {"label":"KJ7", "x":3, "y":0},
+ {"label":"KJ6", "x":4, "y":0},
+ {"label":"KJ1", "x":5, "y":0},
+ {"label":"KO5", "x":6.5, "y":0},
+ {"label":"KL1", "x":7.5, "y":0},
+ {"label":"KA6", "x":8.5, "y":0},
+ {"label":"KA7", "x":9.5, "y":0},
+ {"label":"KD7", "x":11, "y":0},
+ {"label":"KD5", "x":12, "y":0},
+ {"label":"KD1", "x":13, "y":0},
+ {"label":"KD2", "x":14, "y":0},
+ {"label":"KB5", "x":15.25, "y":0},
+ {"label":"KB3", "x":16.25, "y":0},
+ {"label":"KO3", "x":17.25, "y":0},
+ {"label":"KG7", "x":0, "y":1.5},
+ {"label":"KG5", "x":1, "y":1.5},
+ {"label":"KH5", "x":2, "y":1.5},
+ {"label":"KJ5", "x":3, "y":1.5},
+ {"label":"KI5", "x":4, "y":1.5},
+ {"label":"KI7", "x":5, "y":1.5},
+ {"label":"KK7", "x":6, "y":1.5},
+ {"label":"KK5", "x":7, "y":1.5},
+ {"label":"KL5", "x":8, "y":1.5},
+ {"label":"KA5", "x":9, "y":1.5},
+ {"label":"KC5", "x":10, "y":1.5},
+ {"label":"KC7", "x":11, "y":1.5},
+ {"label":"KL7", "x":12, "y":1.5},
+ {"label":"KD6", "x":13, "y":1.5, "w":2},
+ {"label":"KQ7", "x":15.25, "y":1.5},
+ {"label":"KN7", "x":16.25, "y":1.5},
+ {"label":"KM7", "x":17.25, "y":1.5},
+ {"label":"KG6", "x":0, "y":2.5, "w":1.5},
+ {"label":"KG3", "x":1.5, "y":2.5},
+ {"label":"KH3", "x":2.5, "y":2.5},
+ {"label":"KJ3", "x":3.5, "y":2.5},
+ {"label":"KI3", "x":4.5, "y":2.5},
+ {"label":"KI6", "x":5.5, "y":2.5},
+ {"label":"KK6", "x":6.5, "y":2.5},
+ {"label":"KK3", "x":7.5, "y":2.5},
+ {"label":"KL3", "x":8.5, "y":2.5},
+ {"label":"KA3", "x":9.5, "y":2.5},
+ {"label":"KC3", "x":10.5, "y":2.5},
+ {"label":"KC6", "x":11.5, "y":2.5},
+ {"label":"KL6", "x":12.5, "y":2.5},
+ {"label":"KD4", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"KP7", "x":15.25, "y":2.5},
+ {"label":"KN5", "x":16.25, "y":2.5},
+ {"label":"KM5", "x":17.25, "y":2.5},
+ {"label":"KH6", "x":0, "y":3.5, "w":1.75},
+ {"label":"KG4", "x":1.75, "y":3.5},
+ {"label":"KH4", "x":2.75, "y":3.5},
+ {"label":"KJ4", "x":3.75, "y":3.5},
+ {"label":"KI4", "x":4.75, "y":3.5},
+ {"label":"KI1", "x":5.75, "y":3.5},
+ {"label":"KK1", "x":6.75, "y":3.5},
+ {"label":"KK4", "x":7.75, "y":3.5},
+ {"label":"KL4", "x":8.75, "y":3.5},
+ {"label":"KA4", "x":9.75, "y":3.5},
+ {"label":"KC4", "x":10.75, "y":3.5},
+ {"label":"KC1", "x":11.75, "y":3.5},
+ {"label":"KD0", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"KF6", "x":0, "y":4.5, "w":1.25},
+ {"label":"KH1", "x":1.25, "y":4.5},
+ {"label":"KG0", "x":2.25, "y":4.5},
+ {"label":"KH0", "x":3.25, "y":4.5},
+ {"label":"KJ0", "x":4.25, "y":4.5},
+ {"label":"KI0", "x":5.25, "y":4.5},
+ {"label":"KI2", "x":6.25, "y":4.5},
+ {"label":"KK2", "x":7.25, "y":4.5},
+ {"label":"KK0", "x":8.25, "y":4.5},
+ {"label":"KL0", "x":9.25, "y":4.5},
+ {"label":"KA0", "x":10.25, "y":4.5},
+ {"label":"KC2", "x":11.25, "y":4.5},
+ {"label":"KF4", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"KN1", "x":16.25, "y":4.5},
+ {"label":"KO7", "x":0, "y":5.5, "w":1.25},
+ {"label":"KE6", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"KB1", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"KP1", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"KB2", "x":10, "y":5.5, "w":1.25},
+ {"label":"KR4", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"KA2", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"KO0", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"KN2", "x":15.25, "y":5.5},
+ {"label":"KP2", "x":16.25, "y":5.5},
+ {"label":"KQ2", "x":17.25, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/hid_liber/keymaps/default/config.h b/keyboards/hid_liber/keymaps/default/config.h
deleted file mode 100755
index 7b9637ef9c2..00000000000
--- a/keyboards/hid_liber/keymaps/default/config.h
+++ /dev/null
@@ -1 +0,0 @@
-#pragma once
\ No newline at end of file
diff --git a/keyboards/hid_liber/keymaps/default/keymap.c b/keyboards/hid_liber/keymaps/default/keymap.c
index 1102b0b96b7..60ff8d11b00 100755
--- a/keyboards/hid_liber/keymaps/default/keymap.c
+++ b/keyboards/hid_liber/keymaps/default/keymap.c
@@ -16,45 +16,26 @@
*/
#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.
-
-#define _BL 0 // Base Layer
-#define _FL 1 // Media Layer
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BL] = LAYOUT( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_BRK, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
- KC_LSFT, KC_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
- ),
- [_FL] = LAYOUT( \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MSTP, KC_VOLU, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_MPLY, KC_MNXT, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
- ),
+enum layer_names {
+ _BL, // Base Layer
+ _FL, // Media Layer
};
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_BRK,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_FL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MSTP, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_MPLY, KC_MNXT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/hid_liber/keymaps/default/readme.md b/keyboards/hid_liber/keymaps/default/readme.md
index 963524389ee..2bae07e5484 100755
--- a/keyboards/hid_liber/keymaps/default/readme.md
+++ b/keyboards/hid_liber/keymaps/default/readme.md
@@ -1,4 +1,4 @@
-# ANSI Keymap for the HID Liberation Device
+# The default keymap for the HID Liberation Device
A basic keymap intended for the HID Liberation Device using the standard ANSI layout.
@@ -19,9 +19,9 @@ This keymap has two layers. To access the functions on the second layer, hold do
|-----------------------------------------------------------| '-----------'
|Caps | A| S| D| F| G| H| J| K| L| ;| '|Return |
|-----------------------------------------------------------| ,---.
- |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
+ |Sft |ISO| Z| X| C| V| B| N| M| ,| .| /|Shift | |Up |
|-----------------------------------------------------------| ,-----------.
- |Ctl|Gui|Alt| Space |Alt|Gui|Fn |Ctl| |Lef|Dow|Rig|
+ |Ctl |Gui |Alt | Space |Alt |Gui |Fn |Ctl | |Lef|Dow|Rig|
`-----------------------------------------------------------' `-----------'
### Layer 2: Media Layer
@@ -35,7 +35,7 @@ This keymap has two layers. To access the functions on the second layer, hold do
|-----------------------------------------------------------| '-----------'
| | | | | | | | | | | | | |
|-----------------------------------------------------------| ,---.
- | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | | | | |
|-----------------------------------------------------------| ,-----------.
- | | | | | | | | | | | | |
+ | | | | | | | | | | | | |
`-----------------------------------------------------------' `-----------'
diff --git a/keyboards/hid_liber/keymaps/default/rules.mk b/keyboards/hid_liber/keymaps/default/rules.mk
deleted file mode 100755
index 15b7f725b26..00000000000
--- a/keyboards/hid_liber/keymaps/default/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-CONSOLE_ENABLE = yes
diff --git a/keyboards/hid_liber/readme.md b/keyboards/hid_liber/readme.md
index bc16c165bed..d70ace123d5 100755
--- a/keyboards/hid_liber/readme.md
+++ b/keyboards/hid_liber/readme.md
@@ -1,15 +1,17 @@
-HID Liberation Device
-=====================
-DIY daughterboard for Filco Majestouch TKL developed by Geekhack and Deskthority communities.
-The PCB was engineered by bpiphany.
+# HID Liberation Device
+
+DIY daughterboard for Filco Majestouch TKL developed by Geekhack and Deskthority communities. The PCB was engineered by bpiphany.
## Wiki on Deskthority.net
- [Instructions](http://deskthority.net/wiki/HID_Liberation_Device_-_Instructions)
- [Assembly Instructions](http://deskthority.net/wiki/HID_Liberation_Device_-_DIY_Instructions)
-## Build
+* Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+* Hardware Supported: HID Liberation Device (ATmega32U4)
+* Hardware Availability: Discontinued
+
Make example for this keyboard (after setting up your build environment):
make hid_liber:default
-See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+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/hid_liber/rules.mk b/keyboards/hid_liber/rules.mk
index a0f881731a7..f4d7618ec05 100755
--- a/keyboards/hid_liber/rules.mk
+++ b/keyboards/hid_liber/rules.mk
@@ -17,7 +17,7 @@ BOOTLOADER = atmel-dfu
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
+CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
CUSTOM_MATRIX = yes # Custom matrix file
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/hineybush/h10/config.h b/keyboards/hineybush/h10/config.h
new file mode 100644
index 00000000000..7d57ec2bc80
--- /dev/null
+++ b/keyboards/hineybush/h10/config.h
@@ -0,0 +1,126 @@
+/*
+Copyright 2020 hineybush
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEBD8
+#define DEVICE_VER 0x0001
+#define MANUFACTURER hineybush
+#define PRODUCT h10
+#define DESCRIPTION Custom numpad PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 4
+
+/*
+ * 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 { B0, C6, B6, B5, B4, D7 }
+#define MATRIX_COL_PINS { F0, C7, B1, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#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
+
+/* disable these deprecated features by default */
+#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/hineybush/h10/h10.c b/keyboards/hineybush/h10/h10.c
new file mode 100644
index 00000000000..fbaca7f38ed
--- /dev/null
+++ b/keyboards/hineybush/h10/h10.c
@@ -0,0 +1,29 @@
+/* Copyright 2020 hineybush
+ *
+ * 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 .
+ */
+
+#include "h10.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.
+
+/*
+bool led_update_kb(led_t led_state) {
+ // placeholder for LED indicator added to next revision
+
+ return led_update_user(led_state);
+}
+*/
diff --git a/keyboards/hineybush/h10/h10.h b/keyboards/hineybush/h10/h10.h
new file mode 100644
index 00000000000..33010cb3682
--- /dev/null
+++ b/keyboards/hineybush/h10/h10.h
@@ -0,0 +1,146 @@
+/* Copyright 2020 hineybush
+ *
+ * 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 .
+ */
+
+#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_ortho_6x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43, \
+ k50, k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, k43}, \
+ {k50, k51, k52, k53} \
+}
+
+#define LAYOUT_numpad_6x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, \
+ k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, KC_NO}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, KC_NO}, \
+ {KC_NO, k51, k52, k53} \
+}
+
+#define LAYOUT_split_plus( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, \
+ k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, KC_NO}, \
+ {KC_NO, k51, k52, k53} \
+}
+
+#define LAYOUT_split_zero( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, \
+ k50, k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, KC_NO}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, KC_NO}, \
+ {k50, k51, k52, k53} \
+}
+
+#define LAYOUT_split_enter( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43, \
+ k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, KC_NO}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, k43}, \
+ {KC_NO, k51, k52, k53} \
+}
+
+#define LAYOUT_split_enter_plus( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, k43, \
+ k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, k43}, \
+ {KC_NO, k51, k52, k53} \
+}
+
+#define LAYOUT_split_zero_plus( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, k23, \
+ k30, k31, k32, k33, \
+ k40, k41, k42, \
+ k50, k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, k33}, \
+ {k40, k41, k42, KC_NO}, \
+ {k50, k51, k52, k53} \
+}
diff --git a/keyboards/hineybush/h10/info.json b/keyboards/hineybush/h10/info.json
new file mode 100644
index 00000000000..a8d160db53a
--- /dev/null
+++ b/keyboards/hineybush/h10/info.json
@@ -0,0 +1,229 @@
+{
+ "keyboard_name": "h10",
+ "url": "",
+ "maintainer": "hineybush",
+ "width": 5.25,
+ "height": 7.5,
+ "layouts": {
+ "LAYOUT_ortho_6x4": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+
+ {"x": 0, "y": 2.25},
+ {"x": 1, "y": 2.25},
+ {"x": 2, "y": 2.25},
+ {"x": 3, "y": 2.25},
+
+ {"x": 0, "y": 3.25},
+ {"x": 1, "y": 3.25},
+ {"x": 2, "y": 3.25},
+ {"x": 3, "y": 3.25},
+
+ {"x": 0, "y": 4.25},
+ {"x": 1, "y": 4.25},
+ {"x": 2, "y": 4.25},
+ {"x": 3, "y": 4.25},
+
+ {"x": 0, "y": 5.25},
+ {"x": 1, "y": 5.25},
+ {"x": 2, "y": 5.25},
+ {"x": 3, "y": 5.25}
+ ]
+ },
+ "LAYOUT_numpad_6x4": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+
+ {"x": 0, "y": 2.25},
+ {"x": 1, "y": 2.25},
+ {"x": 2, "y": 2.25},
+
+ {"x": 0, "y": 3.25},
+ {"x": 1, "y": 3.25},
+ {"x": 2, "y": 3.25},
+ {"x": 3, "y": 2.25, "h": 2},
+
+ {"x": 0, "y": 4.25},
+ {"x": 1, "y": 4.25},
+ {"x": 2, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 2},
+ {"x": 2, "y": 5.25},
+ {"x": 3, "y": 4.25, "h": 2}
+ ]
+ },
+ "LAYOUT_split_plus": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+
+ {"x": 0, "y": 2.25},
+ {"x": 1, "y": 2.25},
+ {"x": 2, "y": 2.25},
+ {"x": 3, "y": 2.25},
+
+ {"x": 0, "y": 3.25},
+ {"x": 1, "y": 3.25},
+ {"x": 2, "y": 3.25},
+ {"x": 3, "y": 3.25},
+
+ {"x": 0, "y": 4.25},
+ {"x": 1, "y": 4.25},
+ {"x": 2, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 2},
+ {"x": 2, "y": 5.25},
+ {"x": 3, "y": 4.25, "h": 2}
+ ]
+ },
+ "LAYOUT_split_zero": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+
+ {"x": 0, "y": 2.25},
+ {"x": 1, "y": 2.25},
+ {"x": 2, "y": 2.25},
+
+ {"x": 0, "y": 3.25},
+ {"x": 1, "y": 3.25},
+ {"x": 2, "y": 3.25},
+ {"x": 3, "y": 2.25, "h": 2},
+
+ {"x": 0, "y": 4.25},
+ {"x": 1, "y": 4.25},
+ {"x": 2, "y": 4.25},
+
+ {"x": 0, "y": 5.25},
+ {"x": 1, "y": 5.25},
+ {"x": 2, "y": 5.25},
+ {"x": 3, "y": 4.25, "h": 2}
+ ]
+ },
+ "LAYOUT_split_enter": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+
+ {"x": 0, "y": 2.25},
+ {"x": 1, "y": 2.25},
+ {"x": 2, "y": 2.25},
+
+ {"x": 0, "y": 3.25},
+ {"x": 1, "y": 3.25},
+ {"x": 2, "y": 3.25},
+ {"x": 3, "y": 2.25, "h": 2},
+
+ {"x": 0, "y": 4.25},
+ {"x": 1, "y": 4.25},
+ {"x": 2, "y": 4.25},
+ {"x": 3, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 2},
+ {"x": 2, "y": 5.25},
+ {"x": 3, "y": 5.25}
+ ]
+ },
+ "LAYOUT_split_enter_plus": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+
+ {"x": 0, "y": 2.25},
+ {"x": 1, "y": 2.25},
+ {"x": 2, "y": 2.25},
+ {"x": 3, "y": 2.25},
+
+ {"x": 0, "y": 3.25},
+ {"x": 1, "y": 3.25},
+ {"x": 2, "y": 3.25},
+ {"x": 3, "y": 3.25},
+
+ {"x": 0, "y": 4.25},
+ {"x": 1, "y": 4.25},
+ {"x": 2, "y": 4.25},
+ {"x": 3, "y": 4.25},
+
+ {"x": 0, "y": 5.25, "w": 2},
+ {"x": 2, "y": 5.25},
+ {"x": 3, "y": 5.25}
+ ]
+ },
+ "LAYOUT_split_zero_plus": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+
+ {"x": 0, "y": 1.25},
+ {"x": 1, "y": 1.25},
+ {"x": 2, "y": 1.25},
+ {"x": 3, "y": 1.25},
+
+ {"x": 0, "y": 2.25},
+ {"x": 1, "y": 2.25},
+ {"x": 2, "y": 2.25},
+ {"x": 3, "y": 2.25},
+
+ {"x": 0, "y": 3.25},
+ {"x": 1, "y": 3.25},
+ {"x": 2, "y": 3.25},
+ {"x": 3, "y": 3.25},
+
+ {"x": 0, "y": 4.25},
+ {"x": 1, "y": 4.25},
+ {"x": 2, "y": 4.25},
+
+ {"x": 0, "y": 5.25},
+ {"x": 1, "y": 5.25},
+ {"x": 2, "y": 5.25},
+ {"x": 3, "y": 4.25, "h": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/hineybush/h10/keymaps/default/keymap.c b/keyboards/hineybush/h10/keymaps/default/keymap.c
new file mode 100644
index 00000000000..125cce88bf8
--- /dev/null
+++ b/keyboards/hineybush/h10/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2020 hineybush
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT_numpad_6x4(
+ KC_ESC, KC_PEQL, KC_BSPC, MO(1),
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_numpad_6x4(
+ KC_VOLU, KC_MPLY, KC_MNXT, KC_TRNS,
+ KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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
+ ),
+};
+
+
+
diff --git a/keyboards/hineybush/h10/keymaps/default/readme.md b/keyboards/hineybush/h10/keymaps/default/readme.md
new file mode 100644
index 00000000000..fd8638b75c2
--- /dev/null
+++ b/keyboards/hineybush/h10/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for h10
diff --git a/keyboards/hineybush/h10/keymaps/via/keymap.c b/keyboards/hineybush/h10/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5b6d9a3e4fb
--- /dev/null
+++ b/keyboards/hineybush/h10/keymaps/via/keymap.c
@@ -0,0 +1,56 @@
+/* Copyright 2020 hineybush
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [0] = LAYOUT_numpad_6x4(
+ KC_ESC, KC_PEQL, KC_BSPC, MO(1),
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT_numpad_6x4(
+ KC_VOLU, KC_MPLY, KC_MNXT, KC_TRNS,
+ KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS,
+ 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
+ ),
+ [2] = LAYOUT_numpad_6x4(
+ KC_VOLU, KC_MPLY, KC_MNXT, KC_TRNS,
+ KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, 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_numpad_6x4(
+ KC_VOLU, KC_MPLY, KC_MNXT, KC_TRNS,
+ KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, 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/hineybush/h10/keymaps/via/readme.md b/keyboards/hineybush/h10/keymaps/via/readme.md
new file mode 100644
index 00000000000..5986e148274
--- /dev/null
+++ b/keyboards/hineybush/h10/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The via keymap for h10
diff --git a/keyboards/hineybush/h10/keymaps/via/rules.mk b/keyboards/hineybush/h10/keymaps/via/rules.mk
new file mode 100644
index 00000000000..7a029a79555
--- /dev/null
+++ b/keyboards/hineybush/h10/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+# Copyright hineybush 2020
+VIA_ENABLE = yes
diff --git a/keyboards/hineybush/h10/readme.md b/keyboards/hineybush/h10/readme.md
new file mode 100644
index 00000000000..19b8a44cda7
--- /dev/null
+++ b/keyboards/hineybush/h10/readme.md
@@ -0,0 +1,15 @@
+# h10
+
+
+
+A custom numpad PCB.
+
+* Keyboard Maintainer: [hineybush](https://github.com/hineybush)
+* Hardware Supported: h10 proto 1
+* Hardware Availability: hiney.cc
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hineybush/h10: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/hineybush/h10/rules.mk b/keyboards/hineybush/h10/rules.mk
new file mode 100644
index 00000000000..45048737989
--- /dev/null
+++ b/keyboards/hineybush/h10/rules.mk
@@ -0,0 +1,26 @@
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = ortho_6x4 numpad_6x4
diff --git a/keyboards/hineybush/h60/config.h b/keyboards/hineybush/h60/config.h
new file mode 100644
index 00000000000..ef14fdd4f89
--- /dev/null
+++ b/keyboards/hineybush/h60/config.h
@@ -0,0 +1,89 @@
+/*
+Copyright 2020 hineybush
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEBBE
+#define DEVICE_VER 0x0001
+#define MANUFACTURER hineybush keyboards
+#define PRODUCT h60
+#define DESCRIPTION A 60% PCB.
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#define MATRIX_ROW_PINS { B6, B5, B4, D7, E6 }
+#define MATRIX_COL_PINS { B3, D0, D1, D2, D3, D5, D6, C7, F0, F1, F4, F5, F6, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+// leaving this here if I decide to add RGB down the line
+
+// #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
+
+/* 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
+
+/* disable these deprecated features by default */
+#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/hineybush/h60/h60.c b/keyboards/hineybush/h60/h60.c
new file mode 100644
index 00000000000..c3f13824796
--- /dev/null
+++ b/keyboards/hineybush/h60/h60.c
@@ -0,0 +1,31 @@
+/* Copyright 2020 hineybush
+ *
+ * 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 .
+ */
+
+#include "h60.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ setPinOutput(C6);
+}
+
+bool led_update_kb(led_t led_state) {
+ if(led_update_user(led_state)) {
+ writePin(C6, !led_state.caps_lock);
+ }
+ return true;
+}
+
diff --git a/keyboards/hineybush/h60/h60.h b/keyboards/hineybush/h60/h60.h
new file mode 100644
index 00000000000..0a19ffbf3bd
--- /dev/null
+++ b/keyboards/hineybush/h60/h60.h
@@ -0,0 +1,111 @@
+/* Copyright 2020 hineybush
+ *
+ * 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 .
+ */
+
+#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(\
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k113, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k400, k401, k402, k403, k406, k408, k409, k410, k411, k412 \
+) { \
+ { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013 }, \
+ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113 }, \
+ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213 }, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO}, \
+ { k400, k401, k402, k403, KC_NO,KC_NO,k406, KC_NO,k408, k409, k410, k411, k412, KC_NO} \
+}
+
+#define LAYOUT_60_ansi(\
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k113, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, \
+ k400, k401, k402, k406, k409, k410, k411, k412 \
+) { \
+ { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, KC_NO}, \
+ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113 }, \
+ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213 }, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, KC_NO,KC_NO}, \
+ { k400, k401, k402, KC_NO,KC_NO,KC_NO,k406, KC_NO,KC_NO,k409, k410, k411, k412, KC_NO} \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift(\
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k113, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k400, k401, k402, k406, k409, k410, k411, k412 \
+) { \
+ { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013 }, \
+ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113 }, \
+ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213 }, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO}, \
+ { k400, k401, k402, KC_NO,KC_NO,KC_NO,k406, KC_NO,KC_NO,k409, k410, k411, k412, KC_NO} \
+}
+
+#define LAYOUT_60_hhkb(\
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k113, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k401, k402, k406, k410, k411 \
+) { \
+ { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013 }, \
+ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113 }, \
+ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213 }, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO}, \
+ { KC_NO,k401, k402, KC_NO,KC_NO,KC_NO,k406, KC_NO,KC_NO,KC_NO,k410, k411, KC_NO,KC_NO} \
+}
+
+#define LAYOUT_60_tsangan_hhkb(\
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k113, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k400, k401, k402, k406, k410, k411, k412 \
+) { \
+ { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013 }, \
+ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113 }, \
+ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213 }, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO}, \
+ { k400, k401, k402, KC_NO,KC_NO,KC_NO,k406, KC_NO,KC_NO,KC_NO,k410, k411, k412, KC_NO} \
+}
+
+#define LAYOUT_60_tsangan_split_rshift(\
+ k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k113, \
+ k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k213, \
+ k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, \
+ k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, \
+ k400, k401, k402, k406, k410, k411, k412 \
+) { \
+ { k000, k001, k002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, KC_NO}, \
+ { k100, k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k113 }, \
+ { k200, k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213 }, \
+ { k300, k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, KC_NO}, \
+ { k400, k401, k402, KC_NO,KC_NO,KC_NO,k406, KC_NO,KC_NO,KC_NO,k410, k411, k412, KC_NO} \
+}
diff --git a/keyboards/hineybush/h60/info.json b/keyboards/hineybush/h60/info.json
new file mode 100644
index 00000000000..803541a3e9f
--- /dev/null
+++ b/keyboards/hineybush/h60/info.json
@@ -0,0 +1,356 @@
+{
+ "keyboard_name": "h60",
+ "url": "",
+ "maintainer": "hineybush",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_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},
+ {"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": 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": 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": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "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": 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": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "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": 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": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_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": 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": 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": 0, "y": 4, "w": 1.5},
+ {"x": 1.5, "y": 4},
+ {"x": 2.5, "y": 4, "w": 1.5},
+ {"x": 4, "y": 4, "w": 7},
+ {"x": 11, "y": 4, "w": 1.5},
+ {"x": 12.5, "y": 4},
+ {"x": 13.5, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/hineybush/h60/keymaps/default/keymap.c b/keyboards/hineybush/h60/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9195da4b858
--- /dev/null
+++ b/keyboards/hineybush/h60/keymaps/default/keymap.c
@@ -0,0 +1,28 @@
+/* Copyright 2020 hineybush
+
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ [_BASE] = LAYOUT_60_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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RGUI, KC_RCTL),
+
+ [_FN] = LAYOUT_60_ansi(
+ KC_TRNS, BL_TOGG, BL_DEC, BL_INC, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/hineybush/h60/keymaps/default/readme.md b/keyboards/hineybush/h60/keymaps/default/readme.md
new file mode 100644
index 00000000000..08aa4a5c8fe
--- /dev/null
+++ b/keyboards/hineybush/h60/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for h60
diff --git a/keyboards/hineybush/h60/keymaps/kei/keymap.c b/keyboards/hineybush/h60/keymaps/kei/keymap.c
new file mode 100644
index 00000000000..528e1ac970d
--- /dev/null
+++ b/keyboards/hineybush/h60/keymaps/kei/keymap.c
@@ -0,0 +1,26 @@
+/* Copyright 2020 hineybush
+
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = LAYOUT_60_hhkb(
+ 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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+ [_FN] = LAYOUT_60_hhkb(
+ KC_TRNS, BL_TOGG, BL_DEC, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/hineybush/h60/keymaps/kei/readme.md b/keyboards/hineybush/h60/keymaps/kei/readme.md
new file mode 100644
index 00000000000..c7b8dd63012
--- /dev/null
+++ b/keyboards/hineybush/h60/keymaps/kei/readme.md
@@ -0,0 +1 @@
+# The default keymap for the Kei keyboard
diff --git a/keyboards/hineybush/h60/keymaps/via/keymap.c b/keyboards/hineybush/h60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..75c9ac2dd2c
--- /dev/null
+++ b/keyboards/hineybush/h60/keymaps/via/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2020 hineybush
+
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN1,
+ _FN2,
+ _FN3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_TRNS, KC_SPC, KC_TRNS, KC_RALT, MO(1), KC_RGUI, KC_RCTL),
+ [_FN1] = LAYOUT_all(
+ KC_TRNS, BL_TOGG, BL_DEC, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [_FN2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [_FN3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/hineybush/h60/keymaps/via/readme.md b/keyboards/hineybush/h60/keymaps/via/readme.md
new file mode 100644
index 00000000000..a8d6e39e151
--- /dev/null
+++ b/keyboards/hineybush/h60/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The via keymap for h60
diff --git a/keyboards/hineybush/h60/keymaps/via/rules.mk b/keyboards/hineybush/h60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/hineybush/h60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/hineybush/h60/readme.md b/keyboards/hineybush/h60/readme.md
new file mode 100644
index 00000000000..3bc38cc0ada
--- /dev/null
+++ b/keyboards/hineybush/h60/readme.md
@@ -0,0 +1,15 @@
+# h60
+
+
+
+A GH60 form factor PCB for 60% keyboards. Uses a USB Type C connector.
+
+* Keyboard Maintainer: [hineybush](https://github.com/hineybush)
+* Hardware Supported: h60
+* Hardware Availability: [hiney.cc](https://hiney.cc)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hineybush/h60: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/hineybush/h60/rules.mk b/keyboards/hineybush/h60/rules.mk
new file mode 100644
index 00000000000..92da9c653f9
--- /dev/null
+++ b/keyboards/hineybush/h60/rules.mk
@@ -0,0 +1,25 @@
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_hhkb 60_tsangan_hhkb
diff --git a/keyboards/hotdox/config.h b/keyboards/hotdox/config.h
index ed15f4bb4a4..c95096a7d38 100644
--- a/keyboards/hotdox/config.h
+++ b/keyboards/hotdox/config.h
@@ -3,13 +3,14 @@
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xE11D
+
+#define VENDOR_ID 0x414B // 'AK' for Alpaca Keyboards
+#define PRODUCT_ID 0x0001 // sequentially numbered
#define DEVICE_VER 0x0001
-#define MANUFACTURER Z.P.Z.O.
-#define PRODUCT HotDox
-#define DESCRIPTION QMK keyboard firmware for HotDox
+#define MANUFACTURER Alpaca Keyboards
+#define PRODUCT ErgoDox 76 "HotDox"
+#define DESCRIPTION QMK FW for the "HotDox"
/* key matrix size */
#define MATRIX_ROWS 6
@@ -75,4 +76,3 @@
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
//#define DEBUG_MATRIX_SCAN_RATE
-
diff --git a/keyboards/hotdox/keymaps/via/config.h b/keyboards/hotdox/keymaps/via/config.h
new file mode 100644
index 00000000000..2c143476a76
--- /dev/null
+++ b/keyboards/hotdox/keymaps/via/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+// place overrides here
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
\ No newline at end of file
diff --git a/keyboards/hotdox/keymaps/via/keymap.c b/keyboards/hotdox/keymaps/via/keymap.c
new file mode 100644
index 00000000000..0a3d41cf788
--- /dev/null
+++ b/keyboards/hotdox/keymaps/via/keymap.c
@@ -0,0 +1,191 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+ VRSN = SAFE_RANGE,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB,KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | | | |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ RGB_MOD,KC_TRNS,
+ KC_TRNS,
+ RGB_VAD,RGB_VAI,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_UP, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = get_highest_layer(layer_state);
+
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+};
diff --git a/keyboards/hotdox/keymaps/via/rules.mk b/keyboards/hotdox/keymaps/via/rules.mk
new file mode 100644
index 00000000000..a7f52bafc7d
--- /dev/null
+++ b/keyboards/hotdox/keymaps/via/rules.mk
@@ -0,0 +1,5 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
+
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
diff --git a/keyboards/hs60/v1/readme.md b/keyboards/hs60/v1/readme.md
index cbf5f4faaba..4b613e2a52c 100644
--- a/keyboards/hs60/v1/readme.md
+++ b/keyboards/hs60/v1/readme.md
@@ -5,7 +5,7 @@ HS60
This is a standard fixed layout 60% PCB. It comes in two varians, ISO and ANSI and support full per-key RGB.
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
Hardware Supported: HS60 ISO and ANSI PCBs with Atmega 32u4
Hardware Availability: https://mechboards.co.uk/shop/all/hs60-pcb/
diff --git a/keyboards/hs60/v2/readme.md b/keyboards/hs60/v2/readme.md
index bd747b1f3cc..f6f75cc7bf0 100644
--- a/keyboards/hs60/v2/readme.md
+++ b/keyboards/hs60/v2/readme.md
@@ -5,7 +5,7 @@ HS60 V2.0
This is a standard fixed layout 60% PCB. It comes in three variants; ISO, ANSI and HHKB and support full per-key RGB.
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
Hardware Supported: HS60 ISO, ANSI and HHKB PCBs with STM32F303CC
Hardware Availability: http://groupbuys.mechboards.co.uk/shop/hs60-hotswap-60-pcb/
diff --git a/keyboards/hub16/config.h b/keyboards/hub16/config.h
index c7dec995ebc..ed14178d601 100755
--- a/keyboards/hub16/config.h
+++ b/keyboards/hub16/config.h
@@ -81,8 +81,7 @@ along with this program. If not, see .
#define DEBOUNCE 20
/* ENCODER THINGS */
-
-// #define NUMBER_OF_ENCODERS 2
+// #define ENCODER_DIRECTION_FLIP
#define ENCODERS_PAD_A \
{ F6, B4 }
#define ENCODERS_PAD_B \
diff --git a/keyboards/hub16/keymaps/default/keymap.c b/keyboards/hub16/keymaps/default/keymap.c
index 2d12dba0d4f..d3cad67ae11 100755
--- a/keyboards/hub16/keymaps/default/keymap.c
+++ b/keyboards/hub16/keymaps/default/keymap.c
@@ -21,16 +21,18 @@
// Keyboard Layers
enum keyboard_layers{
_BASE = 0,
- _CONTROL
+ _CTRL
};
// Tap Dance Declarations
-enum tap_dance { TD_TO_LED = 0, TD_TO_DEFAULT = 1 };
+void td_ctrl (qk_tap_dance_state_t *state, void *user_data);
+
+enum tap_dance { CTRL = 0, BASE = 1 };
qk_tap_dance_action_t tap_dance_actions[] = {
- // Tap once for standard key, twice to toggle to control layer
- [TD_TO_LED] = ACTION_TAP_DANCE_DUAL_ROLE(KC_P, _CONTROL),
- [TD_TO_DEFAULT] = ACTION_TAP_DANCE_DUAL_ROLE(KC_P, _BASE)};
+ // Tap once for standard key on base layer, twice to toggle to control layer
+ [CTRL] = ACTION_TAP_DANCE_FN(td_ctrl),
+ [BASE] = ACTION_TAP_DANCE_LAYER_MOVE(_______, _BASE)};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT( /* Base */
@@ -38,19 +40,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_A, KC_B, KC_C, KC_D,
KC_E, KC_F, KC_G, KC_H,
KC_I, KC_J, KC_K, KC_L,
- KC_M, KC_N, KC_O, TD(TD_TO_LED)
+ KC_M, KC_N, KC_O, TD(CTRL)
),
- [_CONTROL] = LAYOUT( /* LED Control */
+ [_CTRL] = LAYOUT( /* Control */
KC_NO, KC_NO,
_______, RGB_MOD, RGB_RMOD, RGB_TOG,
RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI,
RGB_SAD, RGB_SAI, _______, _______,
- _______, _______, RESET, TD(TD_TO_DEFAULT)
+ _______, _______, RESET, TD(BASE)
),
};
-// Keyboard is setup to 'warp' the pressed key with F24,
+// Keyboard is setup to 'wrap' the pressed key with an unused Fxx key,
// allowing for easy differentiation from a real keyboard.
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* Left Encoder */
@@ -99,3 +101,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true;
}
+
+// Below works around TD() not running key press through process_record_user.
+// Fixes bug of CTRL layer move key not being wrapped in by modifier on single tap
+void td_ctrl (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code(KC_WRAP);
+ tap_code(KC_P);
+ unregister_code(KC_WRAP);
+ } else if (state->count == 2) {
+ layer_move(_CTRL);
+ }
+}
\ No newline at end of file
diff --git a/keyboards/hub16/readme.md b/keyboards/hub16/readme.md
index 996fa446350..1409af5bbed 100755
--- a/keyboards/hub16/readme.md
+++ b/keyboards/hub16/readme.md
@@ -1,8 +1,8 @@
# Hub16
-Hub16 is a 16 Key Macro Pad with inbuilt USB 2.0 hub and dual rotary encoders.
+Hub16 is a 16 Key Macro Pad with an inbuilt USB 2.0 hub and dual rotary encoders.
-For more information regarding the keyboard, please visit the [Hub16 Webpage](https://www.joshajohnson.com/hub16-keyboard/) or [GitHub Repo](https://github.com/joshajohnson/Hub16).
+For more information regarding the keyboard, please visit the [Hub16 Website](https://www.joshajohnson.com/hub16-keyboard/) or [GitHub Repo](https://github.com/joshajohnson/Hub16).
* Keyboard Maintainer: [Josh Johnson](https://github.com/joshajohnson)
* Hardware Supported: Hub16 PCB (atmega32u4)
diff --git a/keyboards/infinity60/keymaps/jpetermans/keymap.c b/keyboards/infinity60/keymaps/jpetermans/keymap.c
index c99b05e4c5c..a169d658f70 100644
--- a/keyboards/infinity60/keymaps/jpetermans/keymap.c
+++ b/keyboards/infinity60/keymaps/jpetermans/keymap.c
@@ -15,8 +15,6 @@ enum ic60_keycodes {
NUMPAD,
FNAV,
MEDIA,
- TILDE,
- CTLALTDEL,
BACKLIGHT,
BRIGHT,
DIM,
@@ -55,7 +53,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
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_NO,\
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_BSPC, \
TT(_FNAV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,F(TILDE),KC_NO, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,LM(_TILDE, MOD_LSFT),KC_NO, \
KC_LCTL, KC_LGUI,KC_LALT, LT(_FNAV, KC_SPC), KC_RALT,TG(_NUMPAD),MO(_MEDIA), KC_RCTL \
),
@@ -74,7 +72,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL, \
_______,_______,KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______, \
_______,KC_APP,KC_BTN1,KC_CALC,_______,_______,KC_END,_______,_______,_______,_______,_______,KC_NO, \
- _______,_______,_______, _______, F(CTLALTDEL),KC_NLCK,_______,_______ \
+ _______,_______,_______, _______, C(A(KC_DEL)),KC_NLCK,_______,_______ \
),
/* media */
@@ -162,8 +160,6 @@ uint8_t led_game[5] = {
//======== qmk functions =========
const uint16_t fn_actions[] = {
- [CTLALTDEL] = ACTION_KEY(LALT(LCTL(KC_DEL))),
- [TILDE] = ACTION_LAYER_MODS(_TILDE, MOD_LSFT),
[ALL] = ACTION_FUNCTION(ACTION_LEDS_ALL),
[GAME] = ACTION_FUNCTION(ACTION_LEDS_GAME),
[BACKLIGHT] = ACTION_FUNCTION(ACTION_LEDS_BACKLIGHT),
diff --git a/keyboards/j80/rules.mk b/keyboards/j80/rules.mk
index b2ca3a0c2bf..4b21de4e8e9 100644
--- a/keyboards/j80/rules.mk
+++ b/keyboards/j80/rules.mk
@@ -21,5 +21,3 @@ CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/jc65/v32a/rules.mk b/keyboards/jc65/v32a/rules.mk
index fd340f04ebc..20f0222c11f 100644
--- a/keyboards/jc65/v32a/rules.mk
+++ b/keyboards/jc65/v32a/rules.mk
@@ -20,5 +20,3 @@ COMMAND_ENABLE = yes
BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = yes
WS2812_DRIVER = i2c
-
-OPT_DEFS = -DDEBUG_LEVEL=0
diff --git a/keyboards/jd40/keymaps/myoung34/keymap.c b/keyboards/jd40/keymaps/myoung34/keymap.c
new file mode 100644
index 00000000000..eb4146d1587
--- /dev/null
+++ b/keyboards/jd40/keymaps/myoung34/keymap.c
@@ -0,0 +1,28 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _AL 1
+#define _UL 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_UP, KC_DOT,
+ _______, KC_LCTL, KC_LALT, KC_LGUI, KC_BSPC, KC_SPC, MO(_AL), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_AL] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_TAB, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT,
+ _______, _______, KC_SCOLON, KC_QUOTE, KC_LBRACKET, KC_RBRACKET, KC_BSLASH, KC_MINUS, KC_EQUAL, KC_PGUP, KC_SLASH,
+ _______, _______, _______, _______, MO(_UL), TG(_UL), _______, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ [_UL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ };
diff --git a/keyboards/jd45/keymaps/justin/keymap.c b/keyboards/jd45/keymaps/justin/keymap.c
index 1c0e780724d..985ff19b887 100644
--- a/keyboards/jd45/keymaps/justin/keymap.c
+++ b/keyboards/jd45/keymaps/justin/keymap.c
@@ -3,15 +3,22 @@
#define KC_MO1 MO(1)
#define KC_MO2 MO(2)
#define KC_MO3 MO(3)
+#define KC_LM4 LM(4, MOD_LSFT)
+
+#define KC_MTCM MT(MOD_LCTL, KC_MINS)
+#define KC_MTSG MT(MOD_LSFT, KC_GRV)
+#define KC_MTSW MT(MOD_RSFT, KC_RGUI)
+#define KC_MTSC MT(MOD_RSFT, KC_CAPS)
+#define KC_MTCT MT(MOD_LCTL, KC_TAB)
#define KC_BLTG BL_TOGG
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_kc(
ESC, Q, W, F, P, G, J, L, U, Y, SCLN, QUOT, BSPC,
- FN8, A, R, S, T, D, H, N, E, I, O, ENT,
- LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, FN6,
- FN4, LGUI, FN7, MO2, MO1, SPC, FN5, RALT, MO3, FN0),
+ MTCT, A, R, S, T, D, H, N, E, I, O, ENT,
+ LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, MTSC,
+ MTSG, LGUI, LM4, MO2, MO1, SPC, MTSW, RALT, MO3, MTCM),
[1] = LAYOUT_kc(
TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT,
@@ -42,13 +49,6 @@ enum macro_id
};
const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_MINS),
- [4] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_GRV),
- [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_RGUI),
- [6] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_CAPS),
- [7] = ACTION_LAYER_MODS(4, MOD_LSFT), // FN4
- [8] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB),
-
[10] = ACTION_MACRO(PSWD1),
[11] = ACTION_MACRO(PSWD2),
[12] = ACTION_MACRO(PSWD3)
diff --git a/keyboards/jd45/keymaps/mjt6u/keymap.c b/keyboards/jd45/keymaps/mjt6u/keymap.c
index 6fda6ac95fa..dc7c3bb7e32 100644
--- a/keyboards/jd45/keymaps/mjt6u/keymap.c
+++ b/keyboards/jd45/keymaps/mjt6u/keymap.c
@@ -119,7 +119,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record)
{
persistent_default_layer_set(1UL << _QWERTY);
#ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_fnpc, false, 0);
+ PLAY_SONG(tone_fnpc);
#endif
print("Space-FN");
}
@@ -130,7 +130,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record)
{
persistent_default_layer_set(1UL << _QWERTYNUMMODS);
#ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_fnmac, false, 0);
+ PLAY_SONG(tone_fnmac);
#endif
print("Space-Numpad");
}
diff --git a/keyboards/jian/config.h b/keyboards/jian/config.h
new file mode 100644
index 00000000000..cfb6bf4ffcc
--- /dev/null
+++ b/keyboards/jian/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
diff --git a/keyboards/jian/handwired/config.h b/keyboards/jian/handwired/config.h
new file mode 100644
index 00000000000..5b69621bcda
--- /dev/null
+++ b/keyboards/jian/handwired/config.h
@@ -0,0 +1,41 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC0DE
+#define PRODUCT_ID 0x1337
+#define DEVICE_VER 0x0010
+#define MANUFACTURER KgOfHedgehogs
+#define PRODUCT Huma
+#define DESCRIPTION An ergo handwired keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 14
+#define DIODE_DIRECTION COL2ROW
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D3, D2, B5, B6 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B4, E6, D7, C6, D4, D0, D1 }
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
diff --git a/keyboards/jian/handwired/handwired.c b/keyboards/jian/handwired/handwired.c
new file mode 100644
index 00000000000..bcb7ec71029
--- /dev/null
+++ b/keyboards/jian/handwired/handwired.c
@@ -0,0 +1,8 @@
+#include "handwired.h"
+
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{13, 0}, {12, 0}, {11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+ {{13, 1}, {12, 1}, {11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+ {{13, 2}, {12, 2}, {11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+ {{13, 3}, {12, 3}, {11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
diff --git a/keyboards/jian/handwired/handwired.h b/keyboards/jian/handwired/handwired.h
new file mode 100644
index 00000000000..9b388b94ae2
--- /dev/null
+++ b/keyboards/jian/handwired/handwired.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "jian.h"
+
+#define XXX KC_NO
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
+ L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, \
+ L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, \
+ L34, L35, L36, R36, R35, R34 \
+) \
+{ \
+ {L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00}, \
+ {XXX, L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, XXX}, \
+ {XXX, L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, XXX}, \
+ {XXX, XXX, XXX, XXX, L34, L35, L36, R36, R35, R34, XXX, XXX, XXX, XXX} \
+}
+
+#define LAYOUT_symmetric( \
+ K00, K01, K02, K03, K04, K05, K06, \
+ K11, K12, K13, K14, K15, K16, \
+ K21, K22, K23, K24, K25, K26, \
+ K34, K35, K36 \
+) \
+{ \
+ {K00, K01, K02, K03, K04, K05, K06, K06, K05, K04, K03, K02, K01, K00}, \
+ {XXX, K11, K12, K13, K14, K15, K16, K16, K15, K14, K13, K12, K11, XXX}, \
+ {XXX, K21, K22, K23, K24, K25, K26, K26, K25, K24, K23, K22, K21, XXX}, \
+ {XXX, XXX, XXX, XXX, K34, K35, K36, K36, K35, K34, XXX, XXX, XXX, XXX} \
+}
diff --git a/keyboards/jian/handwired/rules.mk b/keyboards/jian/handwired/rules.mk
new file mode 100644
index 00000000000..61f40dfcbe1
--- /dev/null
+++ b/keyboards/jian/handwired/rules.mk
@@ -0,0 +1,19 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+SPLIT_KEYBOARD = no
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/jian/info.json b/keyboards/jian/info.json
new file mode 100644
index 00000000000..4503fb3b477
--- /dev/null
+++ b/keyboards/jian/info.json
@@ -0,0 +1,67 @@
+{
+ "keyboard_name": "jian",
+ "url": "t.me/s/kgofhedgehogs",
+ "maintainer": "KGOH",
+ "width": 17,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "Super", "x": 0, "y": 1.5 },
+ { "label": "~", "x": 1, "y": 0.75 },
+ { "label": "Q", "x": 2, "y": 0.625 },
+ { "label": "W", "x": 3, "y": 0.25 },
+ { "label": "E", "x": 4, "y": 0 },
+ { "label": "R", "x": 5, "y": 0.25 },
+ { "label": "T", "x": 6, "y": 0.375 },
+
+ { "label": "Y", "x": 10, "y": 0.375 },
+ { "label": "U", "x": 11, "y": 0.25 },
+ { "label": "I", "x": 12, "y": 0 },
+ { "label": "O", "x": 13, "y": 0.25 },
+ { "label": "P", "x": 14, "y": 0.625 },
+ { "label": "{[", "x": 15, "y": 0.75 },
+ { "label": "}]", "x": 16, "y": 1.5 },
+
+
+ { "label": "Ctrl", "x": 1, "y": 1.75 },
+ { "label": "A", "x": 2, "y": 1.625 },
+ { "label": "S", "x": 3, "y": 1.25 },
+ { "label": "D", "x": 4, "y": 1 },
+ { "label": "F", "x": 5, "y": 1.25 },
+ { "label": "G", "x": 6, "y": 1.375 },
+
+ { "label": "H", "x": 10, "y": 1.375 },
+ { "label": "J", "x": 11, "y": 1.25 },
+ { "label": "K", "x": 12, "y": 1 },
+ { "label": "L", "x": 13, "y": 1.25 },
+ { "label": ":;", "x": 14, "y": 1.625 },
+ { "label": "\"'", "x": 15, "y": 1.75 },
+
+
+ { "label": "Alt", "x": 1, "y": 2.75 },
+ { "label": "Z", "x": 2, "y": 2.625 },
+ { "label": "X", "x": 3, "y": 2.25 },
+ { "label": "C", "x": 4, "y": 2 },
+ { "label": "V", "x": 5, "y": 2.25 },
+ { "label": "B", "x": 6, "y": 2.375 },
+
+ { "label": "N", "x": 10, "y": 2.375 },
+ { "label": "M", "x": 11, "y": 2.25 },
+ { "label": "<,", "x": 12, "y": 2 },
+ { "label": ">.", "x": 13, "y": 2.25 },
+ { "label": "?/", "x": 14, "y": 2.625 },
+ { "label": "|\\", "x": 15, "y": 2.75 },
+
+
+ { "label": "Tab", "x": 5, "y": 3.25 },
+ { "label": "Spc", "x": 6, "y": 3.375 },
+ { "label": "Enter", "x": 7, "y": 3.5 },
+
+ { "label": "Esc", "x": 9, "y": 3.5 },
+ { "label": "Bscp", "x": 10, "y": 3.375 },
+ { "label": "Del", "x": 11, "y": 3.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/jian/jian.c b/keyboards/jian/jian.c
new file mode 100644
index 00000000000..e85b8554f03
--- /dev/null
+++ b/keyboards/jian/jian.c
@@ -0,0 +1 @@
+#include "jian.h"
diff --git a/keyboards/jian/jian.h b/keyboards/jian/jian.h
new file mode 100644
index 00000000000..d09d056e9b5
--- /dev/null
+++ b/keyboards/jian/jian.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_jian_handwired
+ #include "handwired.h"
+#endif
+
+#ifdef KEYBOARD_jian_rev1
+ #include "rev1.h"
+#endif
+
+#ifdef KEYBOARD_jian_rev2
+#include "rev2.h"
+#endif
+
+#ifdef KEYBOARD_jian_nsrev2
+ #include "nsrev2.h"
+#endif
diff --git a/keyboards/jian/keymaps/advanced/config.h b/keyboards/jian/keymaps/advanced/config.h
new file mode 100644
index 00000000000..85b41c86d8d
--- /dev/null
+++ b/keyboards/jian/keymaps/advanced/config.h
@@ -0,0 +1,27 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+#pragma once
+
+//#define AUTO_SHIFT_TIMEOUT 150
+//#define NO_AUTO_SHIFT_NUMERIC
+//#define AUTO_SHIFT_MODIFIERS
+#define IGNORE_MOD_TAP_INTERRUPT
+#define ALT_LAYOUTS_ENABLE
+//#define TRAINING_HALFES_LOCK
diff --git a/keyboards/jian/keymaps/advanced/keymap.c b/keyboards/jian/keymaps/advanced/keymap.c
new file mode 100644
index 00000000000..417678f7e6a
--- /dev/null
+++ b/keyboards/jian/keymaps/advanced/keymap.c
@@ -0,0 +1,584 @@
+#include QMK_KEYBOARD_H
+
+typedef union {
+ uint32_t raw;
+ struct {
+ bool thumb_alt :1;
+ bool iso :1;
+ };
+} user_config_t;
+
+user_config_t user_config;
+
+#ifdef STENO_ENABLE
+#include "keymap_steno.h"
+#endif // STENO_ENABLE
+
+
+#define QWERTY_base KC_GRV, 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_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+#define DVORAK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, KC_RBRC, \
+ KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z
+#define COLEMAK_base KC_GRV, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, \
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
+#define WORKMAN_base KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, KC_RBRC, \
+ KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT, \
+ KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH
+#ifdef ALT_LAYOUTS_ENABLE
+#include "keymap_dvorak.h"
+#include "keymap_colemak.h"
+#include "keymap_workman.h"
+#define DVK2QWE_base DV_GRV, DV_Q, DV_W, DV_E, DV_R, DV_T, DV_Y, DV_U, DV_I, DV_O, DV_P, DV_LBRC, DV_RBRC, \
+ DV_A, DV_S, DV_D, DV_F, DV_G, DV_H, DV_J, DV_K, DV_L, DV_SCLN, DV_QUOT, \
+ DV_Z, DV_X, DV_C, DV_V, DV_B, DV_N, DV_M, DV_COMM, DV_DOT, DV_SLSH
+#define CMK2QWE_base KC_GRV, CM_Q, CM_W, CM_E, CM_R, CM_T, CM_Y, CM_U, CM_I, CM_O, CM_P, KC_LBRC, KC_RBRC, \
+ CM_A, CM_S, CM_D, CM_F, CM_G, CM_H, CM_J, CM_K, CM_L, CM_SCLN, KC_QUOT, \
+ CM_Z, CM_X, CM_C, CM_V, CM_B, CM_N, CM_M, CM_COMM, CM_DOT, CM_SLSH
+#define WMN2QWE_base KC_GRV, WK_Q, WK_W, WK_E, WK_R, WK_T, WK_Y, WK_U, WK_I, WK_O, WK_P, KC_LBRC, KC_RBRC, \
+ WK_A, WK_S, WK_D, WK_F, WK_G, WK_H, WK_J, WK_K, WK_L, WK_SCLN, KC_QUOT, \
+ WK_Z, WK_X, WK_C, WK_V, WK_B, WK_N, WK_M, KC_COMM, KC_DOT, KC_SLSH
+#define CMK2DVK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,CM_P, CM_Y, CM_F, CM_G, CM_C, CM_R, CM_L, KC_LBRC, KC_RBRC, \
+ CM_A, CM_O, CM_E, CM_U, CM_I, CM_D, CM_H, CM_T, CM_N, CM_S, CM_SLSH, \
+ CM_SCLN, CM_Q, CM_J, CM_K, CM_X, CM_B, CM_M, CM_W, CM_V, CM_Z
+#define WMN2DVK_base KC_GRV, KC_QUOT, KC_COMM, KC_DOT,WK_P, WK_Y, WK_F, WK_G, WK_C, WK_R, WK_L, KC_LBRC, KC_RBRC, \
+ WK_A, WK_O, WK_E, WK_U, WK_I, WK_D, WK_H, WK_T, WK_N, WK_S, KC_SLSH, \
+ WK_SCLN, WK_Q, WK_J, WK_K, WK_X, WK_B, WK_M, WK_W, WK_V, WK_Z
+#define DVK2CMK_base DV_GRV, DV_Q, DV_W, DV_F, DV_P, DV_G, DV_J, DV_L, DV_U, DV_Y, DV_SCLN, DV_LBRC, DV_RBRC, \
+ DV_A, DV_R, DV_S, DV_T, DV_D, DV_H, DV_N, DV_E, DV_I, DV_O, DV_QUOT, \
+ DV_Z, DV_X, DV_C, DV_V, DV_B, DV_K, DV_M, DV_COMM, DV_DOT, DV_SLSH
+#define WMN2CMK_base KC_GRV, WK_Q, WK_W, WK_F, WK_P, WK_G, WK_J, WK_L, WK_U, WK_Y, WK_SCLN, KC_LBRC, KC_RBRC, \
+ WK_A, WK_R, WK_S, WK_T, WK_D, WK_H, WK_N, WK_E, WK_I, WK_O, KC_QUOT, \
+ WK_Z, WK_X, WK_C, WK_V, WK_B, WK_K, WK_M, KC_COMM, KC_DOT, KC_SLSH
+#define DVK2WMN_base DV_GRV, DV_Q, DV_D, DV_R, DV_W, DV_B, DV_J, DV_F, DV_U, DV_P, DV_SCLN, DV_LBRC, DV_RBRC, \
+ DV_A, DV_S, DV_H, DV_T, DV_G, DV_Y, DV_N, DV_E, DV_O, DV_I, DV_QUOT, \
+ DV_Z, DV_X, DV_M, DV_C, DV_V, DV_K, DV_L, DV_COMM, DV_DOT, DV_SLSH
+#define CMK2WMN_base KC_GRV, CM_Q, CM_D, CM_R, CM_W, CM_B, CM_J, CM_F, CM_U, CM_P, CM_SCLN, KC_LBRC, KC_RBRC, \
+ CM_A, CM_S, CM_H, CM_T, CM_G, CM_Y, CM_N, CM_E, CM_O, CM_I, KC_QUOT, \
+ CM_Z, CM_X, CM_M, CM_C, CM_V, CM_K, CM_L, CM_COMM, CM_DOT, CM_SLSH
+#endif // ALT_LAYOUTS_ENABLE
+
+enum jian_layers {
+ _QWERTY,
+#ifdef ALT_LAYOUTS_ENABLE
+ _DVORAK,
+ _COLEMAK,
+ _WORKMAN,
+ _DVK2QWE,
+ _DVK2CMK,
+ _DVK2WMN,
+ _CMK2QWE,
+ _CMK2DVK,
+ _CMK2WMN,
+ _WMN2QWE,
+ _WMN2DVK,
+ _WMN2CMK,
+#endif // ALT_LAYOUTS_ENABLE
+ _ISO,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _BCKLT_ADJ,
+ _THUMB_ALT,
+#ifdef TRAINING_HALFES_LOCK
+ _LEFT,
+ _RIGHT,
+#endif //TRAINING_HALFES_LOCK
+#ifdef DIPS_ENABLE
+ _DIPS,
+#endif // DIPS_ENABLE
+#ifdef STENO_ENABLE
+ _PLOVER
+#endif // STENO_ENABLE
+};
+
+enum jian_keycodes {
+ QWERTY = SAFE_RANGE,
+ PLOVER,
+ EXT_PLV,
+ EXT_RGB,
+ ISO,
+ THUMB_ALT,
+//ifdef ALT_LAYOUTS_ENABLE
+ CH_WMN,
+ CH_CMK,
+ CH_QWE,
+ CH_DVK,
+//endif // ALT_LAYOUTS_ENABLE
+#ifdef DIPS_ENABLE
+ LAYOUT0,
+ LAYOUT1,
+ LAYOUT2,
+ LAYOUT3,
+ DIP_ISO,
+ FLIP_TH,
+ DIP6,
+ DIP7,
+ DIP8,
+ DIP9,
+ DIP10,
+ DIP11,
+#endif // DIPS_ENABLE
+};
+
+#ifdef TRAINING_HALFES_LOCK
+static uint8_t lock_timeout = 1;
+static uint8_t lock_cooldown = 0;
+#endif //TRAINING_HALFES_LOCK
+#ifdef DIPS_ENABLE
+#ifdef ALT_LAYOUTS_ENABLE
+static uint8_t layout_conversion_dip_state = 0;
+#endif // ALT_LAYOUTS_ENABLE
+#endif // DIPS_ENABLE
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+#define BL_ADJ TG(_BCKLT_ADJ)
+#define TG_LWR TG(_LOWER)
+#define TG_RSE TG(_RAISE)
+
+#define RBR_RGU MT(MOD_RGUI, KC_RBRC)
+#define F12_RGU MT(MOD_RGUI, KC_F12)
+#define EQL_LCT MT(MOD_LCTL, KC_EQL)
+#define APP_LCT MT(MOD_LCTL, KC_APP)
+#define EQL_RCT MT(MOD_RCTL, KC_EQL)
+#define QUO_RCT MT(MOD_RCTL, KC_QUOT)
+#define APP_RCT MT(MOD_RCTL, KC_APP)
+#define MIN_RCT MT(MOD_RCTL, KC_MINS)
+#define PLS_LAL MT(MOD_LALT, KC_PPLS)
+#define BSL_RAL MT(MOD_RALT, KC_BSLS)
+
+#define NBS_LCT MT(MOD_LCTL, KC_NUBS)
+#define BSH_LAL MT(MOD_LALT, KC_BSLS)
+#define APP_RAL MT(MOD_RALT, KC_APP)
+
+#define BSP_LSH MT(MOD_LSFT, KC_BSPC)
+#define BSP_RSH MT(MOD_RSFT, KC_BSPC)
+#define SPC_LSH MT(MOD_LSFT, KC_SPC)
+#define SPC_RSH MT(MOD_RSFT, KC_SPC)
+#define DEL_RSE LT(_RAISE, KC_DEL)
+#define TAB_RSE LT(_RAISE, KC_TAB)
+#define ENT_LWR LT(_LOWER, KC_ENT)
+#define ESC_LWR LT(_LOWER, KC_ESC)
+
+#define RGU_RBR RGUI_T(KC_RBRC)
+#define RCT_QUO RCTL_T(KC_QUOT)
+
+#define LAYOUT_base( \
+ GRV, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, \
+ A, S, D, F, G, H, J, K, L, SCLN, QUOT, \
+ Z, X, C, V, B, N, M, COMM, DOT, SLSH \
+ ) \
+ LAYOUT( \
+ KC_LGUI, GRV, Q, W, E, R, T, Y, U, I, O, P, LBRC, RGU_RBR, \
+ KC_LCTL, A, S, D, F, G, H, J, K, L, SCLN, RCT_QUO, \
+ KC_LALT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, BSL_RAL, \
+ TAB_RSE, SPC_LSH, ENT_LWR, ESC_LWR, BSP_RSH, DEL_RSE \
+ )
+#define LAYOUT_base_wrapper(...) LAYOUT_base(__VA_ARGS__)
+
+#ifdef SWAP_HANDS_ENABLE
+#define SW_TG SH_TG
+#else
+#define SW_TG _______
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT_base_wrapper(QWERTY_base),
+
+#ifdef DIPS_ENABLE
+[_DIPS] = LAYOUT_DIPS(\
+ LAYOUT0, LAYOUT1, LAYOUT2, LAYOUT3, DIP_ISO, FLIP_TH, \
+ LAYOUT0, LAYOUT1, LAYOUT2, LAYOUT3, DIP_ISO, FLIP_TH \
+),
+#endif // DIPS_ENABLE
+
+[_LOWER] = LAYOUT(
+ _______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, F12_RGU,
+ EQL_LCT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, MIN_RCT,
+ PLS_LAL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, _______, _______, _______, _______, _______
+),
+
+[_RAISE] = LAYOUT(
+ _______, KC_NLCK, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SLCK, KC_CAPS, _______,
+ EQL_LCT, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, APP_RCT,
+ _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______
+),
+
+[_ADJUST] = LAYOUT_symmetric(
+ RESET, DEBUG, KC_ASUP, CH_WMN, CH_CMK, CH_QWE, CH_DVK,
+ KC_ASRP, KC_ASTG, XXXXXXX, XXXXXXX, QWERTY, PLOVER,
+ BL_ADJ, KC_ASDN, XXXXXXX, XXXXXXX, ISO, THUMB_ALT,
+ _______, SW_TG, _______
+),
+#if defined(RGBLIGHT) | defined(BACKLIGHT_ENABLE)
+[_BCKLT_ADJ] = LAYOUT_symmetric(
+ XXXXXXX, XXXXXXX, XXXXXXX, BL_INC, RGB_VAI, RGB_HUD, RGB_HUI,
+ XXXXXXX, XXXXXXX, BL_DEC, RGB_VAD, RGB_SAD, RGB_SAI,
+ BL_ADJ, BL_BRTG, BL_TOGG, RGB_TOG, RGB_RMOD,RGB_MOD,
+ _______, _______, _______
+),
+#endif // defined(RGBLIGHT) | defined(BACKLIGHT_ENABLE)
+#ifdef TRAINING_HALFES_LOCK
+[_LEFT] = LAYOUT_base(
+ _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+[_RIGHT] = LAYOUT_base(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, _______,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______
+),
+#endif // TRAINING_HALFES_LOCK
+
+#ifdef STENO_ENABLE
+[_PLOVER] = LAYOUT(
+ EXT_PLV, STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC, EXT_PLV,
+ STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ XXXXXXX, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX
+),
+#endif // STENO_ENABLE
+
+[_THUMB_ALT] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ DEL_RSE, BSP_LSH, ESC_LWR, ENT_LWR, SPC_RSH, TAB_RSE
+),
+
+[_ISO] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ LCTL_T(KC_NUBS), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ LALT_T(KC_NUHS), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RALT,
+ _______, _______, _______, _______, _______, _______
+),
+
+#ifdef ALT_LAYOUTS_ENABLE
+[_DVORAK] = LAYOUT_base_wrapper(DVORAK_base),
+[_COLEMAK] = LAYOUT_base_wrapper(COLEMAK_base),
+[_WORKMAN] = LAYOUT_base_wrapper(WORKMAN_base),
+[_DVK2QWE] = LAYOUT_base_wrapper(DVK2QWE_base),
+[_CMK2QWE] = LAYOUT_base_wrapper(CMK2QWE_base),
+[_WMN2QWE] = LAYOUT_base_wrapper(WMN2QWE_base),
+[_CMK2DVK] = LAYOUT_base_wrapper(CMK2DVK_base),
+[_WMN2DVK] = LAYOUT_base_wrapper(WMN2DVK_base),
+[_DVK2CMK] = LAYOUT_base_wrapper(DVK2CMK_base),
+[_WMN2CMK] = LAYOUT_base_wrapper(WMN2CMK_base),
+[_DVK2WMN] = LAYOUT_base_wrapper(DVK2WMN_base),
+[_CMK2WMN] = LAYOUT_base_wrapper(CMK2WMN_base)
+#endif // ALT_LAYOUTS_ENABLE
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+#ifdef DIPS_ENABLE
+#ifdef ALT_LAYOUTS_ENABLE
+void layout_convert(uint8_t statuses) {
+ switch (0b1111 & statuses) {
+ case 0b0000:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ case 0b0001:
+ set_single_persistent_default_layer(_DVORAK);
+ break;
+ case 0b0010:
+ set_single_persistent_default_layer(_COLEMAK);
+ break;
+ case 0b0011:
+ set_single_persistent_default_layer(_WORKMAN);
+ break;
+ case 0b0100:
+ set_single_persistent_default_layer(_DVK2QWE);
+ break;
+ case 0b0101:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ case 0b0110:
+ set_single_persistent_default_layer(_DVK2CMK);
+ break;
+ case 0b0111:
+ set_single_persistent_default_layer(_DVK2WMN);
+ break;
+ case 0b1000:
+ set_single_persistent_default_layer(_CMK2QWE);
+ break;
+ case 0b1001:
+ set_single_persistent_default_layer(_CMK2DVK);
+ break;
+ case 0b1010:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ case 0b1011:
+ set_single_persistent_default_layer(_CMK2WMN);
+ break;
+ case 0b1100:
+ set_single_persistent_default_layer(_WMN2QWE);
+ break;
+ case 0b1101:
+ set_single_persistent_default_layer(_WMN2DVK);
+ break;
+ case 0b1110:
+ set_single_persistent_default_layer(_WMN2CMK);
+ break;
+ case 0b1111:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ }
+}
+#endif // ALT_LAYOUTS_ENABLE
+#endif // DIPS_ENABLE
+
+void matrix_init_user(void) {
+#ifdef DIPS_ENABLE
+ layer_on(_DIPS);
+#endif // DIPS_ENABLE
+}
+
+void keyboard_post_init_user(void) {
+ user_config.raw = eeconfig_read_user();
+ if (user_config.thumb_alt) {
+ layer_on(_THUMB_ALT);
+ } else {
+ layer_off(_THUMB_ALT);
+ }
+ if (user_config.iso) {
+ layer_on(_ISO);
+ } else {
+ layer_off(_ISO);
+ }
+}
+
+#ifdef ALT_LAYOUTS_ENABLE
+static char change_layout_input = 0;
+static bool change_layout_keystroke = 0;
+void change_layout_conversion(uint16_t keycode) {
+ switch (keycode) {
+ case CH_WMN:
+ change_layout_input |= 0b1000 << (change_layout_keystroke << 2);
+ break;
+ case CH_CMK:
+ change_layout_input |= 0b0100 << (change_layout_keystroke << 2);
+ break;
+ case CH_DVK:
+ change_layout_input |= 0b0010 << (change_layout_keystroke << 2);
+ break;
+ case CH_QWE:
+ change_layout_input |= 0b0001 << (change_layout_keystroke << 2);
+ break;
+ }
+ if (change_layout_keystroke == 1) {
+ switch (change_layout_input) {
+ case 0b00010001:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ case 0b00100001:
+ set_single_persistent_default_layer(_DVORAK);
+ break;
+ case 0b01000001:
+ set_single_persistent_default_layer(_COLEMAK);
+ break;
+ case 0b10000001:
+ set_single_persistent_default_layer(_WORKMAN);
+ break;
+ case 0b00010010:
+ set_single_persistent_default_layer(_DVK2QWE);
+ break;
+ case 0b00100010:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ case 0b01000010:
+ set_single_persistent_default_layer(_DVK2CMK);
+ break;
+ case 0b10000010:
+ set_single_persistent_default_layer(_DVK2WMN);
+ break;
+ case 0b00010100:
+ set_single_persistent_default_layer(_CMK2QWE);
+ break;
+ case 0b00100100:
+ set_single_persistent_default_layer(_CMK2DVK);
+ break;
+ case 0b01000100:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ case 0b10000100:
+ set_single_persistent_default_layer(_CMK2WMN);
+ break;
+ case 0b00011000:
+ set_single_persistent_default_layer(_WMN2QWE);
+ break;
+ case 0b00101000:
+ set_single_persistent_default_layer(_WMN2DVK);
+ break;
+ case 0b01001000:
+ set_single_persistent_default_layer(_WMN2CMK);
+ break;
+ case 0b10001000:
+ set_single_persistent_default_layer(_QWERTY);
+ break;
+ }
+ change_layout_input = 0;
+ }
+ change_layout_keystroke ^= 1;
+}
+#endif // ALT_LAYOUTS_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+#ifdef TRAINING_HALFES_LOCK
+ if (!record->event.pressed) {
+ lock_cooldown = --lock_cooldown < 0 ? 0 : lock_cooldown;
+ }
+ if (lock_cooldown == 0) {
+ layer_off(_LEFT);
+ layer_off(_RIGHT);
+ }
+#endif // TRAINING_HALFES_LOCK
+ switch (keycode) {
+#ifdef TRAINING_HALFES_LOCK
+ case SPC_RSH:
+ case BSP_RSH:
+ case DEL_RSE:
+ case ESC_LWR:
+ case BSL_RAL:
+ case RGU_RBR:
+ case RCT_QUO:
+ if (record->event.pressed) {
+ layer_on(_LEFT);
+ lock_cooldown = lock_timeout;
+ }
+ else {
+ lock_cooldown = 0;
+ layer_off(_LEFT);
+ }
+ break;
+ case BSP_LSH:
+ case SPC_LSH:
+ case TAB_RSE:
+ case ENT_LWR:
+ case KC_LCTL:
+ case KC_LGUI:
+ case KC_LALT:
+ if (record->event.pressed) {
+ layer_on(_RIGHT);
+ lock_cooldown = lock_timeout;
+ }
+ else {
+ lock_cooldown = 0;
+ layer_off(_RIGHT);
+ }
+ break;
+#endif // TRAINING_HALFES_LOCK
+#ifdef STENO_ENABLE
+ case PLOVER:
+ if (!record->event.pressed) {
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ layer_off(_PLOVER);
+ }
+ return false;
+#endif // STENO_ENABLE
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+#ifdef ALT_LAYOUTS_ENABLE
+ case CH_WMN:
+ case CH_CMK:
+ case CH_QWE:
+ case CH_DVK:
+ if (record->event.pressed) {
+ change_layout_conversion(keycode);
+ }
+ return false;
+#endif // ALT_LAYOUTS_ENABLE
+#ifdef DIPS_ENABLE
+#ifdef ALT_LAYOUTS_ENABLE
+ case LAYOUT0:
+ if (record->event.pressed) {
+ layout_conversion_dip_state |= 1 << 0;
+ } else {
+ layout_conversion_dip_state &= ~(1 << 0);
+ }
+ layout_convert(layout_conversion_dip_state);
+ return false;
+ case LAYOUT1:
+ if (record->event.pressed) {
+ layout_conversion_dip_state |= 1 << 1;
+ } else {
+ layout_conversion_dip_state &= ~(1 << 1);
+ }
+ layout_convert(layout_conversion_dip_state);
+ return false;
+ case LAYOUT2:
+ if (record->event.pressed) {
+ layout_conversion_dip_state |= 1 << 2;
+ } else {
+ layout_conversion_dip_state &= ~(1 << 2);
+ }
+ layout_convert(layout_conversion_dip_state);
+ return false;
+ case LAYOUT3:
+ if (record->event.pressed) {
+ layout_conversion_dip_state |= 1 << 3;
+ } else {
+ layout_conversion_dip_state &= ~(1 << 3);
+ }
+ layout_convert(layout_conversion_dip_state);
+ return false;
+#endif // ALT_LAYOUTS_ENABLE
+ case DIP_ISO:
+ if (record->event.pressed) {
+ layer_on(_ISO);
+ } else {
+ layer_off(_ISO);
+ }
+ return false;
+ case FLIP_TH:
+ if (record->event.pressed) {
+ layer_on(_THUMB_ALT);
+ } else {
+ layer_off(_THUMB_ALT);
+ }
+ return false;
+#endif // DIPS_ENABLE
+ case THUMB_ALT:
+ if (record->event.pressed) {
+ layer_invert(_THUMB_ALT);
+ user_config.thumb_alt ^= 1;
+ eeconfig_update_user(user_config.raw);
+ }
+ return false;
+ case ISO:
+ if (record->event.pressed) {
+ layer_invert(_ISO);
+ user_config.iso ^= 1;
+ eeconfig_update_user(user_config.raw);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/jian/keymaps/advanced/rules.mk b/keyboards/jian/keymaps/advanced/rules.mk
new file mode 100644
index 00000000000..2a61a263930
--- /dev/null
+++ b/keyboards/jian/keymaps/advanced/rules.mk
@@ -0,0 +1,5 @@
+SWAP_HANDS_ENABLE = yes
+STENO_ENABLE = no
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes # Audio control and System control
+
diff --git a/keyboards/jian/keymaps/default/config.h b/keyboards/jian/keymaps/default/config.h
new file mode 100644
index 00000000000..4d9cb17cac5
--- /dev/null
+++ b/keyboards/jian/keymaps/default/config.h
@@ -0,0 +1,22 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+#pragma once
+
+#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/jian/keymaps/default/keymap.c b/keyboards/jian/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7f4391f7d2e
--- /dev/null
+++ b/keyboards/jian/keymaps/default/keymap.c
@@ -0,0 +1,120 @@
+#include QMK_KEYBOARD_H
+
+enum jian_layers {
+ _QWERTY,
+ _DVORAK,
+ _COLEMAK,
+ _WORKMAN,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _BCKLT_ADJ
+};
+
+enum jian_keycodes {
+ QWERTY = SAFE_RANGE,
+ DVORAK,
+ COLEMAK,
+ WORKMAN
+};
+
+#define RAISE_T(kc) LT(_RAISE, kc)
+#define LOWER_T(kc) LT(_LOWER, kc)
+
+#ifdef SWAP_HANDS_ENABLE
+#define SW_TG SH_TG
+#else
+#define SW_TG _______
+#endif
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT(
+ KC_LGUI, KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, RGUI_T(KC_RBRC),
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RCTL_T(KC_QUOT),
+ KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RALT_T(KC_BSLS),
+ RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
+),
+
+[_DVORAK] = LAYOUT(
+ KC_LGUI, KC_GRV, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_LBRC, RGUI_T(KC_RBRC),
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, RCTL_T(KC_SLSH),
+ KC_LALT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, RALT_T(KC_BSLS),
+ RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
+),
+
+[_COLEMAK] = LAYOUT(
+ KC_LGUI, KC_GRV, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, RGUI_T(KC_RBRC),
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, RCTL_T(KC_QUOT),
+ KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, RALT_T(KC_BSLS),
+ RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
+),
+
+[_WORKMAN] = LAYOUT(
+ KC_LGUI, KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_LBRC, RGUI_T(KC_RBRC),
+ KC_LCTL, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, RCTL_T(KC_QUOT),
+ KC_LALT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, RALT_T(KC_BSLS),
+ RAISE_T(KC_TAB), LSFT_T(KC_SPC), LOWER_T(KC_ENT), LOWER_T(KC_ESC), RSFT_T(KC_BSPC), RAISE_T(KC_DEL)
+),
+
+[_LOWER] = LAYOUT(
+ _______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, RGUI_T(KC_F12),
+ LCTL_T(KC_EQL), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RCTL_T(KC_MINS),
+ LALT_T(KC_PPLS), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, _______, _______, _______, _______, _______
+),
+
+[_RAISE] = LAYOUT(
+ _______, KC_NLCK, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SLCK, KC_CAPS, _______,
+ LCTL_T(KC_EQL), KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, RCTL_T(KC_APP),
+ _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______,
+ _______, _______, _______, _______, _______, _______
+),
+
+[_ADJUST] = LAYOUT_symmetric(
+ RESET, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, WORKMAN, COLEMAK, DVORAK, QWERTY, XXXXXXX,
+ TG(_BCKLT_ADJ), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, SW_TG, _______
+),
+
+#if defined(RGBLIGHT) || defined(BACKLIGHT_ENABLE)
+[_BCKLT_ADJ] = LAYOUT_symmetric(
+ XXXXXXX, XXXXXXX, XXXXXXX, BL_INC, RGB_VAI, RGB_HUD, RGB_HUI,
+ XXXXXXX, XXXXXXX, BL_DEC, RGB_VAD, RGB_SAD, RGB_SAI,
+ TG(_BCKLT_ADJ), BL_BRTG, BL_TOGG, RGB_TOG, RGB_RMOD,RGB_MOD,
+ _______, _______, _______
+)
+#endif // defined(RGBLIGHT) || defined(BACKLIGHT_ENABLE)
+
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ case WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORKMAN);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/jian/keymaps/default/rules.mk b/keyboards/jian/keymaps/default/rules.mk
new file mode 100644
index 00000000000..092b119d39b
--- /dev/null
+++ b/keyboards/jian/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+SWAP_HANDS_ENABLE = yes
+EXTRAKEY_ENABLE = yes # Audio control and System control
diff --git a/keyboards/jian/keymaps/via/keymap.c b/keyboards/jian/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9da0b5f4dac
--- /dev/null
+++ b/keyboards/jian/keymaps/via/keymap.c
@@ -0,0 +1,28 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT(
+ KC_LGUI, KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, RGUI_T(KC_RBRC),
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RCTL_T(KC_QUOT),
+ KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RALT_T(KC_BSLS),
+ LT(2, KC_TAB), LSFT_T(KC_SPC), LT(1, KC_ENT), LT(1, KC_ESC), RSFT_T(KC_BSPC), LT(2, KC_DEL)
+),
+[1] = LAYOUT(
+ _______, KC_UNDS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, RGUI_T(KC_F12),
+ LCTL_T(KC_EQL), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RCTL_T(KC_MINS),
+ LALT_T(KC_PPLS), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ LT(3, KC_TAB), _______, _______, _______, _______, LT(3, KC_DEL)
+),
+[2] = LAYOUT(
+ _______, KC_NLCK, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_VOLU, KC_HOME, KC_PSCR, KC_PGUP, KC_SLCK, KC_CAPS, _______,
+ LCTL_T(KC_EQL), KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_MUTE, KC_LEFT, KC_UP, KC_RGHT, KC_INS, RCTL_T(KC_APP),
+ _______, KC_P0, KC_P1, KC_P2, KC_P3, KC_PCMM, KC_VOLD, KC_END, KC_DOWN, KC_PGDN, KC_PAUS, _______,
+ _______, _______, LT(3, KC_ENT), LT(3, KC_ESC), _______, _______
+),
+[3] = LAYOUT_symmetric(
+ RESET, DEBUG, XXXXXXX, BL_INC, RGB_VAI, RGB_HUD, RGB_HUI,
+ XXXXXXX, XXXXXXX, BL_DEC, RGB_VAD, RGB_SAD, RGB_SAI,
+ XXXXXXX, BL_BRTG, BL_TOGG, RGB_TOG, RGB_RMOD,RGB_MOD,
+ _______, SH_TG, _______
+)
+};
diff --git a/keyboards/jian/keymaps/via/rules.mk b/keyboards/jian/keymaps/via/rules.mk
new file mode 100644
index 00000000000..aa77c05490f
--- /dev/null
+++ b/keyboards/jian/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+SWAP_HANDS_ENABLE = yes
+EXTRAKEY_ENABLE = yes # Audio control and System control
+VIA_ENABLE = yes
diff --git a/keyboards/jian/nsrev2/config.h b/keyboards/jian/nsrev2/config.h
new file mode 100644
index 00000000000..2a811e75c4f
--- /dev/null
+++ b/keyboards/jian/nsrev2/config.h
@@ -0,0 +1,132 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC0DE
+#define PRODUCT_ID 0x1337
+#define DEVICE_VER 0x0210
+#define MANUFACTURER KgOfHedgehogs
+#define PRODUCT Huma
+#define DESCRIPTION An ergo keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+#define DIODE_DIRECTION COL2ROW
+
+
+// wiring of each half
+#define MATRIX_ROW_PINS { F4, F5, B1, B3, D1, D0, D7, E6 }
+#define MATRIX_COL_PINS { D3, D2, B4, F6, F7, B2 }
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define QMK_ESC_OUTPUT D3
+#define QMK_ESC_INPUT B1
+
+#define PHYSICAL_LEDS_ENABLE
+
+#ifdef BACKLIGHT_ENABLE
+#define BACKLIGHT_PIN C6
+#define BACKLIGHT_LEVELS 5
+#define BACKLIGHT_BREATHING //not working with splits right now
+#define BREATHING_PERIOD 6
+#endif
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_TIMER
+#define RGBLED_NUM 7 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS //not working with splits right now
+
+#define RGBLIGHT_SLEEP
+#define RGBLIGHT_SPLIT
+
+#ifndef IOS_DEVICE_ENABLE
+#if RGBLED_NUM <= 6
+#define RGBLIGHT_LIMIT_VAL 255
+#else
+#define RGBLIGHT_LIMIT_VAL 130
+#endif
+#define RGBLIGHT_VAL_STEP 8
+#else
+#if RGBLED_NUM <= 6
+#define RGBLIGHT_LIMIT_VAL 90
+#else
+#define RGBLIGHT_LIMIT_VAL 45
+#endif
+#define RGBLIGHT_VAL_STEP 4
+#endif
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+#define USB_MAX_POWER_CONSUMPTION 400
+#else
+// iOS device need lessthan 100
+#define USB_MAX_POWER_CONSUMPTION 100
+#endif
+
+#define NUM_LOCK_LED_PIN B6
+#define CAPS_LOCK_LED_PIN B5
+// #define SCROLL_LOCK_LED_PIN B6
+
+// #define NUM_NMOSFET //uncomment this if you using n-mosfet
+// #define CAPS_NMOSFET //uncomment this if you using n-mosfet
+// #define SCROLL_NMOSFET //uncomment this if you using n-mosfet
+
+// #define NUM_INVERT // uncomment this if you want to reverse logic of numlock
+// This will make it light up only when lock is off
+// (Doesn't work on mac. There is no num lock, so it will be always off and lit)
+
+#ifdef NUM_NMOSFET
+#define RESET_NUM_LOCK_LED() writePinLow(NUM_LOCK_LED_PIN)
+#ifdef NUM_INVERT
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
+#else
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
+#endif // NUM_INVERT
+#else
+#define RESET_NUM_LOCK_LED() writePinHigh(NUM_LOCK_LED_PIN)
+#ifdef NUM_INVERT
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
+#else
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
+#endif // NUM_INVERT
+#endif // NUM_NMOSFET
+
+#ifdef CAPS_NMOSFET
+#define RESET_CAPS_LOCK_LED() writePinLow(CAPS_LOCK_LED_PIN)
+#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, led_state.caps_lock)
+#else
+#define RESET_CAPS_LOCK_LED() writePinHigh(CAPS_LOCK_LED_PIN)
+#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, !led_state.caps_lock)
+#endif // CAPS_NMOSFET
+
+#ifdef SCROLL_NMOSFET
+#define RESET_SCROLL_LOCK_LED() writePinLow(SCROLL_LOCK_LED_PIN)
+#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, led_state.scroll_lock)
+#else
+#define RESET_SCROLL_LOCK_LED() writePinHigh(SCROLL_LOCK_LED_PIN)
+#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, !led_state.scroll_lock)
+#endif // SCROLL_NMOSFET
diff --git a/keyboards/jian/nsrev2/nsrev2.c b/keyboards/jian/nsrev2/nsrev2.c
new file mode 100644
index 00000000000..a7508ad9b24
--- /dev/null
+++ b/keyboards/jian/nsrev2/nsrev2.c
@@ -0,0 +1,74 @@
+#include "nsrev2.h"
+
+// TODO:
+#ifdef SWAP_HANDS_ENABLE
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+};
+#endif
+
+static bool backlight_was_toggled = false;
+
+void suspend_power_down_kb(void) {
+ if (is_backlight_enabled()) {
+ backlight_disable();
+ backlight_was_toggled = true;
+ }
+}
+
+void suspend_wakeup_init_kb(void) {
+ if (backlight_was_toggled) {
+ backlight_enable();
+ backlight_was_toggled = false;
+ }
+}
+
+#ifdef PHYSICAL_LEDS_ENABLE
+void led_init_kb(void)
+{
+#ifdef NUM_LOCK_LED_PIN
+ setPinOutput(NUM_LOCK_LED_PIN);
+ RESET_NUM_LOCK_LED();
+#endif // NUM_LOCK_LED_PIN
+#ifdef CAPS_LOCK_LED_PIN
+ setPinOutput(CAPS_LOCK_LED_PIN);
+ RESET_CAPS_LOCK_LED();
+#endif // CAPS_LOCK_LED_PIN
+#ifdef SCROLL_LOCK_LED_PIN
+ setPinOutput(SCROLL_LOCK_LED_PIN);
+ RESET_SCROLL_LOCK_LED();
+#endif // SCROLL_LOCK_LED_PIN
+}
+#endif // PHYSICAL_LEDS_ENABLE
+
+void matrix_init_kb(void) {
+#ifdef PHYSICAL_LEDS_ENABLE
+ led_init_kb();
+#endif // PHYSICAL_LEDS_ENABLE
+ matrix_init_user();
+};
+
+#ifdef PHYSICAL_LEDS_ENABLE
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+#ifdef NUM_LOCK_LED_PIN
+ UPDATE_NUM_LOCK_LED();
+#endif // NUM_LOCK_LED_PIN
+#ifdef CAPS_LOCK_LED_PIN
+ UPDATE_CAPS_LOCK_LED();
+#endif // CAPS_LOCK_LED_PIN
+#ifdef SCROLL_LOCK_LED_PIN
+ UPDATE_SCROLL_LOCK_LED();
+#endif // SCROLL_LOCK_LED_PIN
+ }
+ return res;
+}
+#endif // PHYSICAL_LEDS_ENABLE
diff --git a/keyboards/jian/nsrev2/nsrev2.h b/keyboards/jian/nsrev2/nsrev2.h
new file mode 100644
index 00000000000..9dfb7240b13
--- /dev/null
+++ b/keyboards/jian/nsrev2/nsrev2.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "jian.h"
+
+#define XXX KC_NO
+
+#define LAYOUT( \
+ L20, L00, L01, L12, L02, L03, L04, R04, R03, R02, R12, R01, R00, R20, \
+ L10, L11, L22, L13, L14, L05, R05, R14, R13, R22, R11, R10, \
+ L21, L32, L33, L23, L24, L15, R15, R24, R23, R33, R32, R21, \
+ L34, L25, L35, R35, R25, R34 \
+) \
+{ \
+ {L00, L01, L02, L03, L04, L05 }, \
+ {L10, L11, L12, L13, L14, L15 }, \
+ {L20, L21, L22, L23, L24, L25 }, \
+ {XXX, XXX, L32, L33, L34, L35 }, \
+ {R00, R01, R02, R03, R04, R05 }, \
+ {R10, R11, R12, R13, R14, R15 }, \
+ {R20, R21, R22, R23, R24, R25 }, \
+ {XXX, XXX, R32, R33, R34, R35 } \
+}
+
+#define LAYOUT_symmetric( \
+ K20, K00, K01, K12, K02, K03, K04, \
+ K10, K11, K22, K13, K14, K05, \
+ K21, K32, K33, K23, K24, K15, \
+ K34, K25, K35 \
+) \
+{ \
+ {K00, K01, K02, K03, K04, K05 }, \
+ {K10, K11, K12, K13, K14, K15 }, \
+ {K20, K21, K22, K23, K24, K25 }, \
+ {XXX, XXX, K32, K33, K34, K35 }, \
+ {K00, K01, K02, K03, K04, K05 }, \
+ {K10, K11, K12, K13, K14, K15 }, \
+ {K20, K21, K22, K23, K24, K25 }, \
+ {XXX, XXX, K32, K33, K34, K35 } \
+}
diff --git a/keyboards/jian/nsrev2/rules.mk b/keyboards/jian/nsrev2/rules.mk
new file mode 100644
index 00000000000..3942e629a15
--- /dev/null
+++ b/keyboards/jian/nsrev2/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+CONSOLE_ENABLE = no
+SPLIT_KEYBOARD = no
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/jian/readme.md b/keyboards/jian/readme.md
new file mode 100644
index 00000000000..7afff2ab70e
--- /dev/null
+++ b/keyboards/jian/readme.md
@@ -0,0 +1,16 @@
+# Jian
+
+
+
+A 40% ergonomic keyboard kit. Jian supports cherry mx, alps, kailh choc switches PCB and plate mounted. You can assembly keyboard without mounting plate. Jian also supports rgb led strip like ws2812b and 1 color in-switch backlight. Each half can work standalone.
+
+* Keyboard Maintainer: [KGOH](https://github.com/KGOH)
+* Hardware Supported: Jian PCB rev1, rev2, Pro Micro
+* Layout: [keyboard-layout-editor.com](http://www.keyboard-layout-editor.com/#/gists/4b6c2af67148f58ddd6c6b2976c4370f)
+* Hardware Availability: [Telegram channel](https://t.me/KgOfHedgehogs)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jian/rev2: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/jian/rev1/config.h b/keyboards/jian/rev1/config.h
new file mode 100644
index 00000000000..799a71fc07b
--- /dev/null
+++ b/keyboards/jian/rev1/config.h
@@ -0,0 +1,138 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC0DE
+#define PRODUCT_ID 0x1337
+#define DEVICE_VER 0x0100
+#define MANUFACTURER KgOfHedgehogs
+#define PRODUCT Jian
+#define DESCRIPTION An ergo split keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+#define DIODE_DIRECTION COL2ROW
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D3, D2, E6, B4 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
+
+/* Use I2C or Serial, not both */
+// #define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+// different Jian configs
+#define DIPS_ENABLE
+#define PHYSICAL_LEDS_ENABLE
+#define NUM_LOCK_LED_PIN C6
+#define CAPS_LOCK_LED_PIN D7
+#define SCROLL_LOCK_LED_PIN B5
+
+// #define NUM_NMOSFET //uncomment this if you using n-mosfet
+// #define CAPS_NMOSFET //uncomment this if you using n-mosfet
+// #define SCROLL_NMOSFET //uncomment this if you using n-mosfet
+
+// #define NUM_INVERT // uncomment this if you want to reverse logic of numlock
+// This will make it light up only when lock is off
+// (Doesn't work on mac. There is no num lock, so it will be always off and lit)
+
+#ifdef NUM_NMOSFET
+#define RESET_NUM_LOCK_LED() writePinLow(NUM_LOCK_LED_PIN)
+#ifdef NUM_INVERT
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
+#else
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
+#endif // NUM_INVERT
+#else
+#define RESET_NUM_LOCK_LED() writePinHigh(NUM_LOCK_LED_PIN)
+#ifdef NUM_INVERT
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
+#else
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
+#endif // NUM_INVERT
+#endif // NUM_NMOSFET
+
+#ifdef CAPS_NMOSFET
+#define RESET_CAPS_LOCK_LED() writePinLow(CAPS_LOCK_LED_PIN)
+#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, led_state.caps_lock)
+#else
+#define RESET_CAPS_LOCK_LED() writePinHigh(CAPS_LOCK_LED_PIN)
+#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, !led_state.caps_lock)
+#endif // CAPS_NMOSFET
+
+#ifdef SCROLL_NMOSFET
+#define RESET_SCROLL_LOCK_LED() writePinLow(SCROLL_LOCK_LED_PIN)
+#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, led_state.scroll_lock)
+#else
+#define RESET_SCROLL_LOCK_LED() writePinHigh(SCROLL_LOCK_LED_PIN)
+#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, !led_state.scroll_lock)
+#endif // SCROLL_NMOSFET
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#ifdef BACKLIGHT_ENABLE
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_LEVELS 5
+//#define BACKLIGHT_BREATHING //not working with splits right now
+#define BREATHING_PERIOD 6
+#endif
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_TIMER
+#define RGBLED_NUM 7 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS //not working with splits right now
+
+#define RGBLIGHT_SLEEP
+#define RGBLIGHT_SPLIT
+
+#ifndef IOS_DEVICE_ENABLE
+#if RGBLED_NUM <= 6
+#define RGBLIGHT_LIMIT_VAL 255
+#else
+#define RGBLIGHT_LIMIT_VAL 130
+#endif
+#define RGBLIGHT_VAL_STEP 8
+#else
+#if RGBLED_NUM <= 6
+#define RGBLIGHT_LIMIT_VAL 90
+#else
+#define RGBLIGHT_LIMIT_VAL 45
+#endif
+#define RGBLIGHT_VAL_STEP 4
+#endif
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+#define USB_MAX_POWER_CONSUMPTION 400
+#else
+// iOS device need lessthan 100
+#define USB_MAX_POWER_CONSUMPTION 100
+#endif
diff --git a/keyboards/jian/rev1/rev1.c b/keyboards/jian/rev1/rev1.c
new file mode 100644
index 00000000000..f1cfe99180e
--- /dev/null
+++ b/keyboards/jian/rev1/rev1.c
@@ -0,0 +1,74 @@
+#include "rev1.h"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}},
+};
+#endif
+
+static bool backlight_was_toggled = false;
+
+void suspend_power_down_kb(void) {
+ if (is_backlight_enabled()) {
+ backlight_disable();
+ backlight_was_toggled = true;
+ }
+}
+
+void suspend_wakeup_init_kb(void) {
+ if (backlight_was_toggled) {
+ backlight_enable();
+ backlight_was_toggled = false;
+ }
+}
+
+#ifdef PHYSICAL_LEDS_ENABLE
+void led_init_kb(void)
+{
+#ifdef NUM_LOCK_LED_PIN
+ setPinOutput(NUM_LOCK_LED_PIN);
+ RESET_NUM_LOCK_LED();
+#endif // NUM_LOCK_LED_PIN
+#ifdef CAPS_LOCK_LED_PIN
+ setPinOutput(CAPS_LOCK_LED_PIN);
+ RESET_CAPS_LOCK_LED();
+#endif // CAPS_LOCK_LED_PIN
+#ifdef SCROLL_LOCK_LED_PIN
+ setPinOutput(SCROLL_LOCK_LED_PIN);
+ RESET_SCROLL_LOCK_LED();
+#endif // SCROLL_LOCK_LED_PIN
+}
+#endif // PHYSICAL_LEDS_ENABLE
+
+void matrix_init_kb(void) {
+#ifdef PHYSICAL_LEDS_ENABLE
+ led_init_kb();
+#endif // PHYSICAL_LEDS_ENABLE
+ matrix_init_user();
+};
+
+#ifdef PHYSICAL_LEDS_ENABLE
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+#ifdef NUM_LOCK_LED_PIN
+ UPDATE_NUM_LOCK_LED();
+#endif // NUM_LOCK_LED_PIN
+#ifdef CAPS_LOCK_LED_PIN
+ UPDATE_CAPS_LOCK_LED();
+#endif // CAPS_LOCK_LED_PIN
+#ifdef SCROLL_LOCK_LED_PIN
+ UPDATE_SCROLL_LOCK_LED();
+#endif // SCROLL_LOCK_LED_PIN
+ }
+ return res;
+}
+#endif // PHYSICAL_LEDS_ENABLE
diff --git a/keyboards/jian/rev1/rev1.h b/keyboards/jian/rev1/rev1.h
new file mode 100644
index 00000000000..ee55de62876
--- /dev/null
+++ b/keyboards/jian/rev1/rev1.h
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "jian.h"
+
+#define XXX KC_NO
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
+ L11, L12, L13, L14, L15, L16, R16, R15, R14, R13, R12, R11, \
+ L21, L22, L23, L24, L25, L26, R26, R25, R24, R23, R22, R21, \
+ L34, L35, L36, R36, R35, R34 \
+) \
+{ \
+ {L00, L01, L02, L03, L04, L05, L06}, \
+ {XXX, L11, L12, L13, L14, L15, L16}, \
+ {XXX, L21, L22, L23, L24, L25, L26}, \
+ {XXX, XXX, XXX, XXX, L34, L35, L36}, \
+ {R00, R01, R02, R03, R04, R05, R06}, \
+ {XXX, R11, R12, R13, R14, R15, R16}, \
+ {XXX, R21, R22, R23, R24, R25, R26}, \
+ {XXX, XXX, XXX, XXX, R34, R35, R36} \
+}
+
+#define LAYOUT_symmetric( \
+ K00, K01, K02, K03, K04, K05, K06, \
+ K11, K12, K13, K14, K15, K16, \
+ K21, K22, K23, K24, K25, K26, \
+ K34, K35, K36 \
+) \
+{ \
+ {K00, K01, K02, K03, K04, K05, K06}, \
+ {XXX, K11, K12, K13, K14, K15, K16}, \
+ {XXX, K21, K22, K23, K24, K25, K26}, \
+ {XXX, XXX, XXX, XXX, K34, K35, K36}, \
+ {K00, K01, K02, K03, K04, K05, K06}, \
+ {XXX, K11, K12, K13, K14, K15, K16}, \
+ {XXX, K21, K22, K23, K24, K25, K26}, \
+ {XXX, XXX, XXX, XXX, K34, K35, K36} \
+}
+
+#ifdef DIPS_ENABLE
+#define LAYOUT_dips( \
+ DL0, DL1, DL2, DL3, DL4, DL5, \
+ DR5, DR4, DR3, DR2, DR1, DR0 \
+) \
+{ \
+ {XXX, XXX, XXX, XXX, XXX, XXX, XXX}, \
+ {DL0, XXX, XXX, XXX, XXX, XXX, XXX}, \
+ {DL1, XXX, XXX, XXX, XXX, XXX, XXX}, \
+ {DL2, DL3, DL4, DL5, XXX, XXX, XXX}, \
+ {XXX, XXX, XXX, XXX, XXX, XXX, XXX}, \
+ {DR0, XXX, XXX, XXX, XXX, XXX, XXX}, \
+ {DR1, XXX, XXX, XXX, XXX, XXX, XXX}, \
+ {DR2, DR3, DR4, DR5, XXX, XXX, XXX}, \
+}
+#endif // DIPS_ENABLE
diff --git a/keyboards/jian/rev1/rules.mk b/keyboards/jian/rev1/rules.mk
new file mode 100644
index 00000000000..915b6475484
--- /dev/null
+++ b/keyboards/jian/rev1/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+CONSOLE_ENABLE = no
+SPLIT_KEYBOARD = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/jian/rev2/config.h b/keyboards/jian/rev2/config.h
new file mode 100644
index 00000000000..296e168ecda
--- /dev/null
+++ b/keyboards/jian/rev2/config.h
@@ -0,0 +1,139 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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 .
+*/
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC0DE
+#define PRODUCT_ID 0x1337
+#define DEVICE_VER 0x0200
+#define MANUFACTURER KgOfHedgehogs
+#define PRODUCT Jian
+#define DESCRIPTION An ergo keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+#define DIODE_DIRECTION COL2ROW
+
+// wiring of each half
+#define MATRIX_ROW_PINS { F4, F5, B1, B3 }
+#define MATRIX_COL_PINS { D3, D2, B4, F6, F7, B2 }
+
+//#define USE_I2C
+#define USE_SERIAL
+#define SOFT_SERIAL_PIN D1
+
+//#define EE_HANDS
+#define SPLIT_HAND_PIN E6
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+#define QMK_ESC_OUTPUT D3
+#define QMK_ESC_INPUT B1
+
+#define PHYSICAL_LEDS_ENABLE
+#define IOS_DEVICE_ENABLE
+
+#ifdef BACKLIGHT_ENABLE
+#define BACKLIGHT_PIN C6
+#define BACKLIGHT_LEVELS 5
+#define BACKLIGHT_BREATHING //not working with splits right now
+#define BREATHING_PERIOD 6
+#endif
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D4
+#define RGBLIGHT_TIMER
+#define RGBLED_NUM 7 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS //not working with splits right now
+
+#define RGBLIGHT_SLEEP
+#define RGBLIGHT_SPLIT
+
+#ifndef IOS_DEVICE_ENABLE
+#if RGBLED_NUM <= 6
+#define RGBLIGHT_LIMIT_VAL 255
+#else
+#define RGBLIGHT_LIMIT_VAL 130
+#endif
+#define RGBLIGHT_VAL_STEP 8
+#else
+#if RGBLED_NUM <= 6
+#define RGBLIGHT_LIMIT_VAL 90
+#else
+#define RGBLIGHT_LIMIT_VAL 45
+#endif
+#define RGBLIGHT_VAL_STEP 4
+#endif
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+#define USB_MAX_POWER_CONSUMPTION 400
+#else
+// iOS device need lessthan 100
+#define USB_MAX_POWER_CONSUMPTION 100
+#endif
+
+#define NUM_LOCK_LED_PIN D7
+#define CAPS_LOCK_LED_PIN B5
+#define SCROLL_LOCK_LED_PIN B6
+
+// #define NUM_NMOSFET //uncomment this if you using n-mosfet
+// #define CAPS_NMOSFET //uncomment this if you using n-mosfet
+// #define SCROLL_NMOSFET //uncomment this if you using n-mosfet
+
+// #define NUM_INVERT // uncomment this if you want to reverse logic of numlock
+// This will make it light up only when lock is off
+// (Doesn't work on mac. There is no num lock, so it will be always off and lit)
+
+#ifdef NUM_NMOSFET
+#define RESET_NUM_LOCK_LED() writePinLow(NUM_LOCK_LED_PIN)
+#ifdef NUM_INVERT
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
+#else
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
+#endif // NUM_INVERT
+#else
+#define RESET_NUM_LOCK_LED() writePinHigh(NUM_LOCK_LED_PIN)
+#ifdef NUM_INVERT
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, led_state.num_lock)
+#else
+#define UPDATE_NUM_LOCK_LED() writePin(NUM_LOCK_LED_PIN, !led_state.num_lock)
+#endif // NUM_INVERT
+#endif // NUM_NMOSFET
+
+#ifdef CAPS_NMOSFET
+#define RESET_CAPS_LOCK_LED() writePinLow(CAPS_LOCK_LED_PIN)
+#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, led_state.caps_lock)
+#else
+#define RESET_CAPS_LOCK_LED() writePinHigh(CAPS_LOCK_LED_PIN)
+#define UPDATE_CAPS_LOCK_LED() writePin(CAPS_LOCK_LED_PIN, !led_state.caps_lock)
+#endif // CAPS_NMOSFET
+
+#ifdef SCROLL_NMOSFET
+#define RESET_SCROLL_LOCK_LED() writePinLow(SCROLL_LOCK_LED_PIN)
+#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, led_state.scroll_lock)
+#else
+#define RESET_SCROLL_LOCK_LED() writePinHigh(SCROLL_LOCK_LED_PIN)
+#define UPDATE_SCROLL_LOCK_LED() writePin(SCROLL_LOCK_LED_PIN, !led_state.scroll_lock)
+#endif // SCROLL_NMOSFET
diff --git a/keyboards/jian/rev2/rev2.c b/keyboards/jian/rev2/rev2.c
new file mode 100644
index 00000000000..6f4808de730
--- /dev/null
+++ b/keyboards/jian/rev2/rev2.c
@@ -0,0 +1,74 @@
+#include "rev2.h"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+};
+#endif
+
+static bool backlight_was_toggled = false;
+
+void suspend_power_down_kb(void) {
+ if (is_backlight_enabled()) {
+ backlight_disable();
+ backlight_was_toggled = true;
+ }
+}
+
+void suspend_wakeup_init_kb(void) {
+ if (backlight_was_toggled) {
+ backlight_enable();
+ backlight_was_toggled = false;
+ }
+}
+
+#ifdef PHYSICAL_LEDS_ENABLE
+void led_init_kb(void)
+{
+#ifdef NUM_LOCK_LED_PIN
+ setPinOutput(NUM_LOCK_LED_PIN);
+ RESET_NUM_LOCK_LED();
+#endif // NUM_LOCK_LED_PIN
+#ifdef CAPS_LOCK_LED_PIN
+ setPinOutput(CAPS_LOCK_LED_PIN);
+ RESET_CAPS_LOCK_LED();
+#endif // CAPS_LOCK_LED_PIN
+#ifdef SCROLL_LOCK_LED_PIN
+ setPinOutput(SCROLL_LOCK_LED_PIN);
+ RESET_SCROLL_LOCK_LED();
+#endif // SCROLL_LOCK_LED_PIN
+}
+#endif // PHYSICAL_LEDS_ENABLE
+
+void matrix_init_kb(void) {
+#ifdef PHYSICAL_LEDS_ENABLE
+ led_init_kb();
+#endif // PHYSICAL_LEDS_ENABLE
+ matrix_init_user();
+};
+
+#ifdef PHYSICAL_LEDS_ENABLE
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+#ifdef NUM_LOCK_LED_PIN
+ UPDATE_NUM_LOCK_LED();
+#endif // NUM_LOCK_LED_PIN
+#ifdef CAPS_LOCK_LED_PIN
+ UPDATE_CAPS_LOCK_LED();
+#endif // CAPS_LOCK_LED_PIN
+#ifdef SCROLL_LOCK_LED_PIN
+ UPDATE_SCROLL_LOCK_LED();
+#endif // SCROLL_LOCK_LED_PIN
+ }
+ return res;
+}
+#endif // PHYSICAL_LEDS_ENABLE
diff --git a/keyboards/jian/rev2/rev2.h b/keyboards/jian/rev2/rev2.h
new file mode 100644
index 00000000000..9dfb7240b13
--- /dev/null
+++ b/keyboards/jian/rev2/rev2.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "jian.h"
+
+#define XXX KC_NO
+
+#define LAYOUT( \
+ L20, L00, L01, L12, L02, L03, L04, R04, R03, R02, R12, R01, R00, R20, \
+ L10, L11, L22, L13, L14, L05, R05, R14, R13, R22, R11, R10, \
+ L21, L32, L33, L23, L24, L15, R15, R24, R23, R33, R32, R21, \
+ L34, L25, L35, R35, R25, R34 \
+) \
+{ \
+ {L00, L01, L02, L03, L04, L05 }, \
+ {L10, L11, L12, L13, L14, L15 }, \
+ {L20, L21, L22, L23, L24, L25 }, \
+ {XXX, XXX, L32, L33, L34, L35 }, \
+ {R00, R01, R02, R03, R04, R05 }, \
+ {R10, R11, R12, R13, R14, R15 }, \
+ {R20, R21, R22, R23, R24, R25 }, \
+ {XXX, XXX, R32, R33, R34, R35 } \
+}
+
+#define LAYOUT_symmetric( \
+ K20, K00, K01, K12, K02, K03, K04, \
+ K10, K11, K22, K13, K14, K05, \
+ K21, K32, K33, K23, K24, K15, \
+ K34, K25, K35 \
+) \
+{ \
+ {K00, K01, K02, K03, K04, K05 }, \
+ {K10, K11, K12, K13, K14, K15 }, \
+ {K20, K21, K22, K23, K24, K25 }, \
+ {XXX, XXX, K32, K33, K34, K35 }, \
+ {K00, K01, K02, K03, K04, K05 }, \
+ {K10, K11, K12, K13, K14, K15 }, \
+ {K20, K21, K22, K23, K24, K25 }, \
+ {XXX, XXX, K32, K33, K34, K35 } \
+}
diff --git a/keyboards/jian/rev2/rules.mk b/keyboards/jian/rev2/rules.mk
new file mode 100644
index 00000000000..bbfde67f944
--- /dev/null
+++ b/keyboards/jian/rev2/rules.mk
@@ -0,0 +1,20 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = qmk-dfu
+
+# Build Options
+# change yes to no to disable
+#
+CONSOLE_ENABLE = no
+SPLIT_KEYBOARD = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/jian/rules.mk b/keyboards/jian/rules.mk
new file mode 100644
index 00000000000..72270833056
--- /dev/null
+++ b/keyboards/jian/rules.mk
@@ -0,0 +1,2 @@
+DEFAULT_FOLDER = jian/rev2
+LTO_ENABLE = yes
diff --git a/keyboards/jisplit89/readme.md b/keyboards/jisplit89/readme.md
index e7472ab9666..d2228745774 100644
--- a/keyboards/jisplit89/readme.md
+++ b/keyboards/jisplit89/readme.md
@@ -1,6 +1,6 @@
# JISplit89
-
+
This is 89 keys Custom keyboard.
@@ -14,4 +14,4 @@ Make example for this keyboard (after setting up your build environment):
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://salicylic-acid3.hatenablog.com/entry/7skb-mx-build-guide)(See here because it is almost the same as 7sKB)
+[Build guide](https://salicylic-acid3.hatenablog.com/entry/jisplit89-build-guide)
diff --git a/keyboards/jisplit89/rev1/config.h b/keyboards/jisplit89/rev1/config.h
index a745ec83420..a2ba9040f71 100644
--- a/keyboards/jisplit89/rev1/config.h
+++ b/keyboards/jisplit89/rev1/config.h
@@ -51,9 +51,9 @@ along with this program. If not, see .
#define RGB_DI_PIN D3
#ifndef RGBLED_NUM
- #define RGBLED_NUM 31
+ #define RGBLED_NUM 32
#define RGBLIGHT_SPLIT
- #define RGBLED_SPLIT { 11, 20 }
+ #define RGBLED_SPLIT { 11, 21 }
#endif
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/jj50/README.md b/keyboards/jj50/README.md
index 2d3e711becc..9719f01ecac 100644
--- a/keyboards/jj50/README.md
+++ b/keyboards/jj50/README.md
@@ -1,10 +1,12 @@
# JJ50
-A preonic-like board
+
-* Keyboard Maintainer: [Wayne K. Jones](github.com/WarmCatUK)
-* Hardware Supported: JJ50 with the ATmega32a chip.
-* Hardware Availability: [KPrepublic on AliExpress](https://www.aliexpress.com/item/jj50-v1-0-Custom-Mechanical-Keyboard-50-PCB-programmed-50-preonic-layouts-bface-firmware-with-rgb/32848915277.html)
+A compact 50% (5x12) ortholinear keyboard made and sold by KPrepublic.
+
+* Keyboard Maintainer: [QMK Community](https://github.com/qmk)
+* Hardware Supported: Atmega32A
+* Hardware Availability: [AliExpress](https://www.aliexpress.com/item/jj50-v1-0-Custom-Mechanical-Keyboard-50-PCB-programmed-50-preonic-layouts-bface-firmware-with-rgb/32848915277.html); [KPrepublic](https://kprepublic.com/collections/jj50-50/products/jj50-50-custom-keyboard-pcb-similar-with-preonic)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/jj50/config.h b/keyboards/jj50/config.h
index 8453f55880f..a1840919ee4 100644
--- a/keyboards/jj50/config.h
+++ b/keyboards/jj50/config.h
@@ -2,6 +2,7 @@
Base Copyright 2017 Luiz Ribeiro
Modified 2017 Andrew Novak
Modified 2018 Wayne Jones (WarmCatUK)
+Modified 2020 Guillaume Gérard
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
@@ -17,17 +18,16 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
-#define VENDOR_ID 0x20A0
-#define PRODUCT_ID 0x422D
+#define VENDOR_ID 0x4B50 // "KP"
+#define PRODUCT_ID 0x0050
#define DEVICE_VER 0x0200
#define MANUFACTURER KPrepublic
#define PRODUCT JJ50
-#define DESCRIPTION Preonic-like clone
+#define DESCRIPTION A compact 50% (5x12) ortholinear keyboard
/* matrix size */
#define MATRIX_ROWS 5
@@ -38,6 +38,7 @@ along with this program. If not, see .
#define BACKLIGHT_PIN D4
#define BACKLIGHT_LEVELS 12
+#define BACKLIGHT_BREATHING
#define RGB_DI_PIN E2
#define RGBLED_NUM 12
@@ -45,5 +46,3 @@ along with this program. If not, see .
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 15
#define RGBLIGHT_VAL_STEP 18
-
-#endif
diff --git a/keyboards/jj50/jj50.h b/keyboards/jj50/jj50.h
index 6b1c7eacf3b..59d5c640973 100644
--- a/keyboards/jj50/jj50.h
+++ b/keyboards/jj50/jj50.h
@@ -17,13 +17,9 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
+#pragma once
#include "quantum.h"
-#include "quantum_keycodes.h"
-#include "keycode.h"
-#include "action.h"
#define LAYOUT_ortho_5x12( \
K011, K010, K009, K008, K004, K005, K006, K007, K003, K002, K201, K000, \
@@ -40,5 +36,3 @@ along with this program. If not, see .
}
#define LAYOUT LAYOUT_ortho_5x12
-
-#endif
diff --git a/keyboards/jj50/keymaps/archetype/rules.mk b/keyboards/jj50/keymaps/archetype/rules.mk
index 1a63376bed2..9a3c196029f 100644
--- a/keyboards/jj50/keymaps/archetype/rules.mk
+++ b/keyboards/jj50/keymaps/archetype/rules.mk
@@ -48,9 +48,6 @@ KEY_LOCK_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-#OPT_DEFS = -DDEBUG_LEVEL=0
-
# custom matrix setup
CUSTOM_MATRIX = yes
SRC = matrix.c i2c.c backlight.c
diff --git a/keyboards/jj50/keymaps/default/README.md b/keyboards/jj50/keymaps/default/README.md
new file mode 100644
index 00000000000..15a480ae114
--- /dev/null
+++ b/keyboards/jj50/keymaps/default/README.md
@@ -0,0 +1,133 @@
+# JJ50 default keymaps
+
+## Base layers
+
+### Qwerty
+
+```
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | S | D | F | G | H | J | K | L | ; | ' |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| FN | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+### Workman
+
+```
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Tab | Q | D | R | W | B | J | F | U | P | ; | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | S | H | T | G | Y | N | E | O | I | ' |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| Z | X | M | C | V | K | L | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Num | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+### Colemak
+
+```
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | R | S | T | D | H | N | E | I | O | ' |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| FN | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+### Dvorak
+
+```
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Tab | ' | , | . | P | Y | F | G | C | R | L | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | O | E | U | I | D | H | T | N | S | / |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| FN | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+## Momentarily Layers
+
+### Lower
+
+```
+,-----------------------------------------------------------------------------------.
+| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | Next | Vol- | Vol+ | Play |
+`-----------------------------------------------------------------------------------'
+```
+
+### Raise
+
+```
+,-----------------------------------------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |PageUp|PageDn| |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | Next | Vol- | Vol+ | Play |
+`-----------------------------------------------------------------------------------'
+```
+
+### Adjust (Lower + Raise)
+
+```
+,-----------------------------------------------------------------------------------.
+| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | Reset| | | | | | | | | | Del |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+|CPSLCK| | | | | | |Qwerty|Workmn|Colemk|Dvorak| |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | | | | | | | | | | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | | | | |
+`-----------------------------------------------------------------------------------'
+```
+
+### Fn (rgblight and backlight layout)
+
+```
+,-----------------------------------------------------------------------------------.
+| | | | | | | | | | | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | | |RGBVA-|RGBVA+| |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | | |RGBSA-|RGBSA+| |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | |RGBTOG|RGBHU-|RGBHU+|RGBMOD|
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | |BLTOGG| BL- | BL+ |BLBRTG|
+`-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/jj50/keymaps/default/keymap.c b/keyboards/jj50/keymaps/default/keymap.c
index d5334d4956b..96a308f82a5 100644
--- a/keyboards/jj50/keymaps/default/keymap.c
+++ b/keyboards/jj50/keymaps/default/keymap.c
@@ -1,7 +1,5 @@
/*
-Base Copyright 2017 Luiz Ribeiro
-Modified 2017 Andrew Novak
-Modified 2018 Wayne Jones (WarmCatUK)
+Copyright 2020 Guillaume Gérard
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
@@ -19,117 +17,225 @@ along with this program. If not, see .
#include QMK_KEYBOARD_H
-#define ______ KC_TRNS
-#define _DEFLT 0
-#define _RAISE 1
-#define _LOWER 2
-#define _FN 3
-
-enum custom_keycodes {
- P_MACRO = SAFE_RANGE
+enum layers {
+ _QWERTY,
+ _WORKMAN,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _FN
};
-// GBP £ Macro (sends alt 156 - windows users only)
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case P_MACRO:
- SEND_STRING(SS_DOWN(X_LALT));
- SEND_STRING(SS_TAP(X_KP_1));
- SEND_STRING(SS_TAP(X_KP_5));
- SEND_STRING(SS_TAP(X_KP_6));
- SEND_STRING(SS_UP(X_LALT));
- return false; break;
- }
- }
- return true;
+enum keycodes {
+ QWERTY = SAFE_RANGE,
+ WORKMAN,
+ COLEMAK,
+ DVORAK
};
+#define FN MO(_FN)
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | (Hold for shift / tap for enter)
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | _FN | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * | FN | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
- [_DEFLT] = LAYOUT( \
- 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_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, SFT_T(KC_ENT),\
- MO(_FN), KC_LCTL, KC_LALT, KC_LGUI, MO(_LOWER),KC_SPC,KC_SPC,MO(_RAISE),KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ [_QWERTY] = LAYOUT(
+ 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ 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,
+ FN, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
- /* Raise
+ /* Workman
* ,-----------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * | Tab | Q | D | R | W | B | J | F | U | P | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | H | T | G | Y | N | E | O | I | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | M | C | V | K | L | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | [ | ] | \ |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | |ISO # |ISO / | PUP | PDN | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * | Num | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
+ [_WORKMAN] = LAYOUT(
+ 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_TAB, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_DEL,
+ KC_ESC, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ FN, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
- [_RAISE] = LAYOUT( \
- 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
- RESET, BL_INC, RGB_SAI, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_BSLS, \
- _______, BL_DEC, _______, _______, _______, _______, _______, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
- RGB_TOG, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ /* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | FN | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT(
+ 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_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ FN, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | ' | , | . | P | Y | F | G | C | R | L | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | FN | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT(
+ 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_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT,
+ FN, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
/* Lower
* ,-----------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | { | } | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | |ISO ~ |ISO | | HOM | END | |
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-
- [_LOWER] = LAYOUT( \
- 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_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
- RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PIPE, \
- _______, _______, _______, _______, _______, _______, _______,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
- BL_STEP, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ [_LOWER] = LAYOUT(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ 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, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
- /* Fn
+ /* Raise
* ,-----------------------------------------------------------------------------------.
- * | | | £ | | | | | | | | | |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |PageUp|PageDn| |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | |BL_OFF|BL_DEC|BL_INC|BL_ON |
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
- [_FN] = LAYOUT( \
- _______, _______, P_MACRO, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, BL_OFF, BL_DEC, BL_INC, BL_ON \
+ [_RAISE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ 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
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * |CPSLCK| | | | | | |Qwerty|Workmn|Colemk|Dvorak| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT(
+ 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_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, QWERTY, WORKMAN, COLEMAK, DVORAK, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Fn (rgblight and backlight layout)
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | |RGBVA-|RGBVA+| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | |RGBSA-|RGBSA+| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | |RGBTOG|RGBHU-|RGBHU+|RGBMOD|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | |BLTOGG| BL- | BL+ |BLBRTG|
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUD, RGB_HUI, RGB_MOD,
+ _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG, BL_DEC, BL_INC, BL_BRTG
)
};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORKMAN);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ }
+ return true;
+};
diff --git a/keyboards/jj50/rules.mk b/keyboards/jj50/rules.mk
index 38faf371629..8f78a767469 100644
--- a/keyboards/jj50/rules.mk
+++ b/keyboards/jj50/rules.mk
@@ -12,21 +12,16 @@ MCU = atmega32a
BOOTLOADER = bootloadHID
# build options
-BOOTMAGIC_ENABLE = yes
-MOUSEKEY_ENABLE = no
-EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = no
-COMMAND_ENABLE = yes
-BACKLIGHT_ENABLE = yes
-RGBLIGHT_ENABLE = yes
-WS2812_DRIVER = i2c
-NKRO_ENABLE = no
-# Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-
-KEY_LOCK_ENABLE = yes
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-#OPT_DEFS = -DDEBUG_LEVEL=0
+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
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
+WS2812_DRIVER = i2c # This driver powers the RGB Lighting and RGB Matrix features
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend - # Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+LTO_ENABLE = yes # Enable link time optimization
LAYOUTS = ortho_5x12
diff --git a/keyboards/katana60/rules.mk b/keyboards/katana60/rules.mk
index 62a038091e9..e41c168c4fc 100644
--- a/keyboards/katana60/rules.mk
+++ b/keyboards/katana60/rules.mk
@@ -14,18 +14,18 @@ BOOTLOADER = atmel-dfu
# 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 ?= yes # Console for debug
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+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 on B7 by default
-MIDI_ENABLE ?= no # MIDI support
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no # Audio output on port C6
-FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/kbdclack/kaishi65/config.h b/keyboards/kbdclack/kaishi65/config.h
new file mode 100644
index 00000000000..3ea67aae0af
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/config.h
@@ -0,0 +1,251 @@
+/*
+Copyright 2020 KBDClack
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x1A81
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KBDClack
+#define PRODUCT kaishi65
+#define DESCRIPTION KBDClack made 65% PCB based on the MULLET from coseyfannitutti
+
+/* 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 { D0, D1, B0, F0, F1 }
+#define MATRIX_COL_PINS { B2, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, D2, D3 }
+#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 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
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+/* defined by default; to change, uncomment and set to the combination you want */
+// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP H
+//#define MAGIC_KEY_HELP_ALT SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER0_ALT GRAVE
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_BOOTLOADER_ALT ESC
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * 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
+
+/*
+ * 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 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/kbdclack/kaishi65/info.json b/keyboards/kbdclack/kaishi65/info.json
new file mode 100644
index 00000000000..64ce89dd5a2
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "kaishi65",
+ "url": "https://github.com/powerlemming/KBDClack",
+ "maintainer": "KBDClack",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_ansi": {
+ "layout": [{"label":"esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Del", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Pg up", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"up", "x":14, "y":3}, {"label":"Pg dn", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"left", "x":13, "y":4}, {"label":"down", "x":14, "y":4}, {"label":"right", "x":15, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/kbdclack/kaishi65/kaishi65.c b/keyboards/kbdclack/kaishi65/kaishi65.c
new file mode 100644
index 00000000000..97f608f468a
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/kaishi65.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 KBDClack
+ *
+ * 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 .
+ */
+
+#include "kaishi65.h"
diff --git a/keyboards/kbdclack/kaishi65/kaishi65.h b/keyboards/kbdclack/kaishi65/kaishi65.h
new file mode 100644
index 00000000000..63436083242
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/kaishi65.h
@@ -0,0 +1,44 @@
+/* Copyright 2020 KBDClack
+ *
+ * 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 .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define _x_ KC_NO
+
+/* 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_65_ansi( \
+ 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, K2D, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K49, K4A, 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, _x_, K2D, K2E }, \
+{ K30, _x_, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+{ K40, K41, K42, _x_, _x_, _x_, K46, _x_, _x_, K49, K4A, K4B, K4C, K4D, K4E} \
+}
diff --git a/keyboards/kbdclack/kaishi65/keymaps/default/keymap.c b/keyboards/kbdclack/kaishi65/keymaps/default/keymap.c
new file mode 100644
index 00000000000..46d68182f4d
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2020 KBDClack
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _BASE,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base */
+ [_BASE] = LAYOUT_65_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FN] = LAYOUT_65_ansi(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
+ _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, _______, _______, KC_VOLU, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT)
+};
diff --git a/keyboards/kbdclack/kaishi65/keymaps/default/readme.md b/keyboards/kbdclack/kaishi65/keymaps/default/readme.md
new file mode 100644
index 00000000000..c3c1392a96a
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for kaishi65
diff --git a/keyboards/kbdclack/kaishi65/readme.md b/keyboards/kbdclack/kaishi65/readme.md
new file mode 100644
index 00000000000..11fbd43bab8
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/readme.md
@@ -0,0 +1,14 @@
+# kaishi65
+A sleek 65% keyboard made from CNC machined aluminium
+
+*(PCB based on coseyfannitutti's MULLET design)*
+
+* Keyboard Maintainer: [KBDClack](https://github.com/powerlemming)
+* Hardware Supported: The kaishi65 line of products (case + PCB)
+* Hardware Availability: www.kbdclack.com
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdclack/kaishi65: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/kbdclack/kaishi65/rules.mk b/keyboards/kbdclack/kaishi65/rules.mk
new file mode 100644
index 00000000000..9fbf5373a51
--- /dev/null
+++ b/keyboards/kbdclack/kaishi65/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = atmel-dfu
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = 65_ansi
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/info.json b/keyboards/kbdfans/kbd67/mkii_soldered/info.json
index 6440a007eeb..72c851e35af 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/info.json
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/info.json
@@ -7,77 +7,289 @@
"layouts": {
"LAYOUT_all": {
"layout": [{"label":"~", "x":0, "y":0},
- {"label":"!", "x":1, "y":0},
- {"label":"@", "x":2, "y":0},
- {"label":"#", "x":3, "y":0},
- {"label":"$", "x":4, "y":0},
- {"label":"%", "x":5, "y":0},
- {"label":"^", "x":6, "y":0},
- {"label":"&", "x":7, "y":0},
- {"label":"*", "x":8, "y":0},
- {"label":"(", "x":9, "y":0},
- {"label":")", "x":10, "y":0},
- {"label":"_", "x":11, "y":0},
- {"label":"+", "x":12, "y":0},
- {"label":"Back Space", "x":13, "y":0},
- {"label":"Delete", "x":14, "y":0},
- {"label":"Home", "x":15, "y":0},
- {"label":"Tab", "x":0, "y":1, "w":1.5},
- {"label":"Q", "x":1.5, "y":1},
- {"label":"W", "x":2.5, "y":1},
- {"label":"E", "x":3.5, "y":1},
- {"label":"R", "x":4.5, "y":1},
- {"label":"T", "x":5.5, "y":1},
- {"label":"Y", "x":6.5, "y":1},
- {"label":"U", "x":7.5, "y":1},
- {"label":"I", "x":8.5, "y":1},
- {"label":"O", "x":9.5, "y":1},
- {"label":"P", "x":10.5, "y":1},
- {"label":"{", "x":11.5, "y":1},
- {"label":"}", "x":12.5, "y":1},
- {"label":"|", "x":13.5, "y":1, "w":1.5},
- {"label":"End", "x":15, "y":1},
- {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
- {"label":"A", "x":1.75, "y":2},
- {"label":"S", "x":2.75, "y":2},
- {"label":"D", "x":3.75, "y":2},
- {"label":"F", "x":4.75, "y":2},
- {"label":"G", "x":5.75, "y":2},
- {"label":"H", "x":6.75, "y":2},
- {"label":"J", "x":7.75, "y":2},
- {"label":"K", "x":8.75, "y":2},
- {"label":"L", "x":9.75, "y":2},
- {"label":":", "x":10.75, "y":2},
- {"label":"\"", "x":11.75, "y":2},
- {"label":"Enter", "x":12.75, "y":2, "w":2.25},
- {"label":"PgUp", "x":15, "y":2},
- {"label":"Shift", "x":0, "y":3, "w":1.25},
- {"label":"Hi", "x":1.25, "y":3},
- {"label":"Z", "x":2.25, "y":3},
- {"label":"X", "x":3.25, "y":3},
- {"label":"C", "x":4.25, "y":3},
- {"label":"V", "x":5.25, "y":3},
- {"label":"B", "x":6.25, "y":3},
- {"label":"N", "x":7.25, "y":3},
- {"label":"M", "x":8.25, "y":3},
- {"label":"<", "x":9.25, "y":3},
- {"label":">", "x":10.25, "y":3},
- {"label":"?", "x":11.25, "y":3},
- {"label":"Shift", "x":12.25, "y":3, "w":1.75},
- {"label":"↑", "x":14, "y":3},
- {"label":"PgDn", "x":15, "y":3},
- {"label":"Ctrl", "x":0, "y":4, "w":1.25},
- {"label":"Win", "x":1.25, "y":4, "w":1.25},
- {"label":"Alt", "x":2.5, "y":4, "w":1.25},
- {"x":3.75, "y":4, "w":2.25},
- {"x":6, "y":4, "w":1.25},
- {"x":7.25, "y":4, "w":2.75},
- {"label":"Alt", "x":10, "y":4, "w":1.25},
- {"label":"Win", "x":11.25, "y":4, "w":1.25},
- {"label":"←", "x":13, "y":4},
- {"label":"↓", "x":14, "y":4},
- {"label":"→", "x":15, "y":4}
- ]
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Back Space", "x":13, "y":0},
+ {"label":"Delete", "x":14, "y":0},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"End", "x":15, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"PgUp", "x":15, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"Hi", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"↑", "x":14, "y":3},
+ {"label":"PgDn", "x":15, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.25},
+ {"x":7.25, "y":4, "w":2.75},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"←", "x":13, "y":4},
+ {"label":"↓", "x":14, "y":4},
+ {"label":"→", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker": {
+ "layout": [{"label":"Esc", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"End", "x":15, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"PgUp", "x":15, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"\u2191", "x":14, "y":3},
+ {"label":"PgDn", "x":15, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":11.25, "y":4, "w":1.25},
+ {"label":"\u2190", "x":13, "y":4},
+ {"label":"\u2193", "x":14, "y":4},
+ {"label":"\u2192", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_65_iso_blocker": {
+ "layout": [{"label":"Esc", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"End", "x":15, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"~", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
+ {"label":"PgUp", "x":15, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"|", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"\u2191", "x":14, "y":3},
+ {"label":"PgDn", "x":15, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":11.25, "y":4, "w":1.25},
+ {"label":"\u2190", "x":13, "y":4},
+ {"label":"\u2193", "x":14, "y":4},
+ {"label":"\u2192", "x":15, "y":4}
+ ]
+ },
+ "LAYOUT_65_ansi_blocker_split_bs": {
+ "layout": [{"label":"Esc", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"|", "x":13, "y":0},
+ {"label":"Del", "x":14, "y":0},
+ {"label":"Home", "x":15, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"Backspace", "x":13.5, "y":1, "w":1.5},
+ {"label":"End", "x":15, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"PgUp", "x":15, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"\u2191", "x":14, "y":3},
+ {"label":"PgDn", "x":15, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"\u2190", "x":13, "y":4},
+ {"label":"\u2193", "x":14, "y":4},
+ {"label":"\u2192", "x":15, "y":4}
+ ]
}
}
}
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/config.h b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/config.h
new file mode 100644
index 00000000000..4fcd7735526
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define TAPPING_TERM 200
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/keymap.c b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/keymap.c
new file mode 100644
index 00000000000..ec5c0c8a8ef
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/keymap.c
@@ -0,0 +1,71 @@
+#include QMK_KEYBOARD_H
+
+// Compile from qmk_firmware folder with the following command:
+// $ make kbdfans/kbd67/mkii-soldered:adamdehaven
+
+// Each layer gets a name for readability. 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, and you can also skip them entirely and just use numbers.
+#define _QWERTY 0
+#define _FN1 1
+
+// Tap Dance Definitions
+enum tapdance {
+ TD_HOME = 0,
+ TD_END
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // Tap once for Home, twice for PageUp
+ [TD_HOME] = ACTION_TAP_DANCE_DOUBLE(KC_HOME, KC_PGUP),
+ // Tap once for End, twice for PageDown
+ [TD_END] = ACTION_TAP_DANCE_DOUBLE(KC_END, KC_PGDOWN)
+};
+
+/*
+ * You can use _______ in place for KC_TRNS (transparent)
+ * Or you can use XXXXXXX for KC_NO (NOOP)
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* 0: _QWERTY
+ * ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
+ * │ 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 (2) │ KC_DEL │
+ * ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┤
+ * │ KC_TAB │ KC_Q │ KC_W │ KC_E │ KC_R │ KC_T │ KC_Y │ KC_U │ KC_I │ KC_O │ KC_P │ KC_LBRC │ KC_RBRC │ KC_BSLS │ TD_HOME │
+ * ├──────────────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴──────────────┼─────────┤
+ * │ KC_CAPS │ KC_A │ KC_S │ KC_D │ KC_F │ KC_G │ KC_H │ KC_J │ KC_K │ KC_L │ KC_SCLN │ KC_QUOT │ KC_ENT │ TD_END │
+ * ├────────────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────────────┬─────────┼─────────┤
+ * │ KC_LSFT (2) │ KC_Z │ KC_X │ KC_C │ KC_V │ KC_B │ KC_N │ KC_M │ KC_COMM │ KC_DOT │ KC_SLSH │ KC_RSFT │ KC_UP │ MO(_FN1)│
+ * ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬┴────────┬─┴───────┬─────────┼─────────┼─────────┤
+ * │ KC_LCTL │ KC_LGUI │ KC_LALT │ KC_SPC │ KC_RALT │ KC_RCTL │ │ KC_LEFT │ KC_DOWN │ KC_RGHT │
+ * └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
+ */
+ [_QWERTY] = 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_BSPC, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, TD(TD_HOME),
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, TD(TD_END),
+ KC_LSFT, 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, MO(_FN1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* 1: _FN1
+ * ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬───────────────────┬─────────┐
+ * │ RESET │ KC_F1 │ KC_F2 │ KC_F3 │ KC_F4 │ KC_F5 │ KC_F6 │ KC_F7 │ KC_F8 │ KC_F9 │ KC_F10 │ KC_F11 │ KC_F12 │ _______ (2) │ KC_MUTE │
+ * ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_PSCR │ _______ │ _______ │ _______ │ KC_VOLU │
+ * ├──────────────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴──────────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_VOLD │
+ * ├────────────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────────────┬─────────┼─────────┤
+ * │ _______ (2) │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_MPLY │ _______ │
+ * ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ │ KC_MPRV │ KC_MPLY │ KC_MNXT │
+ * └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
+ */
+ [_FN1] = LAYOUT_all(
+ RESET, 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_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
+ )
+};
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/rules.mk b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/rules.mk
new file mode 100644
index 00000000000..e5ddcae8d92
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/adamdehaven/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi/keymap.c b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi/keymap.c
new file mode 100644
index 00000000000..1f093baab84
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 elmo-space
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker( /* Base */
+ 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_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_ansi_blocker( /* FN */
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, BL_INC,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi/readme.md b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi/readme.md
new file mode 100644
index 00000000000..051a9ce1644
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi/readme.md
@@ -0,0 +1,3 @@
+# The default ANSI keymap for KBD67 MKII
+
+A basic 65% keymap.
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi_split_bs/keymap.c b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi_split_bs/keymap.c
new file mode 100644
index 00000000000..1c443ae7342
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi_split_bs/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2020 elmo-space
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_ansi_blocker_split_bs( /* Base */
+ 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_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_BSPC, KC_END,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_ansi_blocker_split_bs( /* FN */
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, BL_INC,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi_split_bs/readme.md b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi_split_bs/readme.md
new file mode 100644
index 00000000000..1f3f3633560
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/ansi_split_bs/readme.md
@@ -0,0 +1,3 @@
+# The default ANSI with Split Backspace keymap for KBD67 MKII
+
+A basic 65% keymap.
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/default/keymap.c b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/default/keymap.c
index 6dcbf00dd25..61f3aa8c5fb 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/default/keymap.c
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/default/keymap.c
@@ -15,13 +15,6 @@
*/
#include QMK_KEYBOARD_H
-/* K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, K014, \
- * K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- * K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, K214, \
- * K300, K404, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- * K400, K401, K402, K403, K405, K407, K409, K410, K411, K413, K414 \
- */
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_all( /* Base */
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_HOME,
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/iso/keymap.c b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/iso/keymap.c
new file mode 100644
index 00000000000..c49da957280
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/iso/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2019 Ryota Goto
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_65_iso_blocker( /* Base */
+ 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_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_END,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_65_iso_blocker( /* FN */
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, BL_INC,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ )
+};
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/iso/readme.md b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/iso/readme.md
new file mode 100644
index 00000000000..e2dd061075d
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/keymaps/iso/readme.md
@@ -0,0 +1,3 @@
+# The default ISO keymap for KBD67 MKII
+
+A basic 65% keymap.
diff --git a/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h b/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h
index 7eb11f1ff07..6b80aa20b6b 100644
--- a/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h
+++ b/keyboards/kbdfans/kbd67/mkii_soldered/mkii_soldered.h
@@ -37,7 +37,51 @@
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { K400, K401, K402, K403, K404, K405, KC_NO, K407, KC_NO, K409, K410, K411, KC_NO, K413, K414 } \
+ { K400, K401, K402, K403, K404, K405, KC_NO, K407, KC_NO, K409, K410, K411, KC_NO, K413, K414 } \
+}
+
+#define LAYOUT_65_ansi_blocker( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, K214, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K400, K401, K402, K405, K409, K410, K411, K413, K414 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, K213, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { K400, K401, K402, KC_NO, KC_NO, K405, KC_NO, KC_NO, KC_NO, K409, K410, K411, KC_NO, K413, K414 } \
+}
+
+#define LAYOUT_65_ansi_blocker_split_bs( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K212, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, K214, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K400, K401, K402, K405, K409, K410, K411, K413, K414 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { K400, K401, K402, KC_NO, KC_NO, K405, KC_NO, KC_NO, KC_NO, K409, K410, K411, KC_NO, K413, K414 } \
}
+#define LAYOUT_65_iso_blocker( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+ K300, K404, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K400, K401, K402, K405, K409, K410, K411, K413, K414 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { K400, K401, K402, KC_NO, K404, K405, KC_NO, KC_NO, KC_NO, K409, K410, K411, KC_NO, K413, K414 } \
+}
diff --git a/keyboards/kbdfans/kbd67/rev1/config.h b/keyboards/kbdfans/kbd67/rev1/config.h
index d20dcb1c57c..86ef3b81395 100644
--- a/keyboards/kbdfans/kbd67/rev1/config.h
+++ b/keyboards/kbdfans/kbd67/rev1/config.h
@@ -20,8 +20,8 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0000
+#define VENDOR_ID 0x4B42
+#define PRODUCT_ID 0x6066
#define DEVICE_VER 0x0001
#define MANUFACTURER kbdfans
#define PRODUCT kbd67
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/via/keymap.c b/keyboards/kbdfans/kbd67/rev1/keymaps/via/keymap.c
new file mode 100644
index 00000000000..48c9cd98040
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev1/keymaps/via/keymap.c
@@ -0,0 +1,75 @@
+/* Copyright 2018 'mechmerlin'
+ *
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Home|
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
+ * |----------------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[0] = LAYOUT_65_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap Fn Layer
+ * ,----------------------------------------------------------------.
+ * |~ `|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
+ * |----------------------------------------------------------------|
+ * |Caps | |Up | | | | | |PSc|SLk|Pau|Up | | | |
+ * |----------------------------------------------------------------|
+ * | |Lef|Dow|Rig| | | | |Hom|PUp|Lef|Rig| | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | |End|PDn|Dow| |PUp| |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |Hom|PDn|End |
+ * `----------------------------------------------------------------'
+ */
+[1] = LAYOUT_65_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,KC_INS,
+ KC_CAPS,_______, KC_UP,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP,_______, _______,_______,
+ _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,_______,_______,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT, _______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______, KC_END,KC_PGDN,KC_DOWN, _______,KC_PGUP,_______,
+ _______, _______, _______, _______, _______,_______,_______,KC_HOME,KC_PGDN, KC_END),
+
+
+[2] = LAYOUT_65_ansi(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,
+ _______, _______, _______, _______, _______,_______,_______,_______,_______,_______),
+
+
+[3] = LAYOUT_65_ansi(
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,
+ _______, _______, _______, _______, _______,_______,_______,_______,_______,_______),
+
+};
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/via/readme.md b/keyboards/kbdfans/kbd67/rev1/keymaps/via/readme.md
new file mode 100644
index 00000000000..f32cf23932c
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev1/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The via keymap for kbd67
diff --git a/keyboards/kbdfans/kbd67/rev1/keymaps/via/rules.mk b/keyboards/kbdfans/kbd67/rev1/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev1/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/config.h b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/config.h
new file mode 100644
index 00000000000..2498b480c9d
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/config.h
@@ -0,0 +1,17 @@
+/*
+ * 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 .
+ */
+
+#pragma once
+#define ONESHOT_TIMEOUT 5000
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/keymap.c b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/keymap.c
new file mode 100644
index 00000000000..948f0a80ae1
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/keymap.c
@@ -0,0 +1,33 @@
+/*
+ * 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 .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT_65_ansi(
+ KC_ESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS ,KC_EQL ,KC_BSPC,KC_HOME,
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_LBRC ,KC_RBRC,KC_BSLS,KC_PGUP,
+ KC_CAPS ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN,KC_QUOT ,KC_ENT ,KC_PGDN,
+ OSM(MOD_LSFT),KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_N ,KC_M ,KC_COMM,KC_DOT ,KC_SLSH,OSM(MOD_RSFT) ,KC_UP ,KC_END ,
+ OSM(MOD_LCTL),OSM(MOD_LGUI),OSM(MOD_LALT),KC_SPC ,OSM(MOD_RALT),OSL(1) ,OSM(MOD_RCTL),KC_LEFT,KC_DOWN,KC_RGHT),
+
+[1] = LAYOUT_65_ansi(
+ KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,KC_DEL ,KC_INS ,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,TILDE ,_______ ,_______,
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______ ,KC_PGUP,_______,
+ _______,_______,_______,_______ ,_______,_______,_______,KC_HOME,KC_PGDN,KC_END ),
+
+};
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/readme.md b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/readme.md
new file mode 100644
index 00000000000..2e3d2a171bd
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/readme.md
@@ -0,0 +1 @@
+# A keymap for kbd67 with some improvements for accessibility
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/rules.mk b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/rules.mk
new file mode 100644
index 00000000000..72bbe7ddb27
--- /dev/null
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/catrielmuller_camilad/rules.mk
@@ -0,0 +1 @@
+CONSOLE_ENABLE = no
diff --git a/keyboards/kbdfans/kbd67/rev2/rev2.h b/keyboards/kbdfans/kbd67/rev2/rev2.h
index dba43492668..5eb76243ad0 100644
--- a/keyboards/kbdfans/kbd67/rev2/rev2.h
+++ b/keyboards/kbdfans/kbd67/rev2/rev2.h
@@ -89,8 +89,8 @@
#define LAYOUT_65_iso( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, \
- K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K1F, \
- K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1D, K2D, K2F, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1E, K2D, K2F, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \
K40, K41, K43, K46, K4A, K4B, K4C, K4D, K4E, K4F \
) \
diff --git a/keyboards/kbdfans/kbd6x/keymaps/konstantin/config.h b/keyboards/kbdfans/kbd6x/keymaps/konstantin/config.h
index 4b511eb8484..37f4e42c71d 100644
--- a/keyboards/kbdfans/kbd6x/keymaps/konstantin/config.h
+++ b/keyboards/kbdfans/kbd6x/keymaps/konstantin/config.h
@@ -1,3 +1,5 @@
#pragma once
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
+
#define LAYER_FN
diff --git a/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c b/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
index 46cc0a11373..304234a3f40 100644
--- a/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
+++ b/keyboards/kbdfans/kbd6x/keymaps/konstantin/keymap.c
@@ -6,7 +6,7 @@ enum keycodes_keymap {
};
enum layers_keymap {
- L_RCTRL = L_RANGE_KEYMAP,
+ L_RCTRL = LAYERS_KEYMAP,
};
void eeconfig_init_keymap(void) {
diff --git a/keyboards/kbdfans/kbd6x/keymaps/konstantin/rules.mk b/keyboards/kbdfans/kbd6x/keymaps/konstantin/rules.mk
index c75488af628..e2f34468a62 100644
--- a/keyboards/kbdfans/kbd6x/keymaps/konstantin/rules.mk
+++ b/keyboards/kbdfans/kbd6x/keymaps/konstantin/rules.mk
@@ -1,12 +1,19 @@
-BACKLIGHT_ENABLE = no
-BOOTMAGIC_ENABLE = no
+# Generic features
+BOOTMAGIC_ENABLE = lite
COMMAND_ENABLE = yes
CONSOLE_ENABLE = no
EXTRAKEY_ENABLE = yes
-GRAVE_ESC_ENABLE = no
MOUSEKEY_ENABLE = yes
NKRO_ENABLE = yes
-RGBLIGHT_ENABLE = yes
-SPACE_CADET_ENABLE = no
TAP_DANCE_ENABLE = yes
UNICODEMAP_ENABLE = no
+
+# Keyboard-specific features
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = yes
+VIA_ENABLE = yes
+
+# Firmware size reduction
+GRAVE_ESC_ENABLE = no
+MAGIC_ENABLE = no
+SPACE_CADET_ENABLE = no
diff --git a/keyboards/kbdfans/kbd75/keymaps/adamdehaven/config.h b/keyboards/kbdfans/kbd75/keymaps/adamdehaven/config.h
new file mode 100644
index 00000000000..4fcd7735526
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/adamdehaven/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define TAPPING_TERM 200
diff --git a/keyboards/kbdfans/kbd75/keymaps/adamdehaven/keymap.c b/keyboards/kbdfans/kbd75/keymaps/adamdehaven/keymap.c
new file mode 100644
index 00000000000..134cf28db79
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/adamdehaven/keymap.c
@@ -0,0 +1,168 @@
+#include QMK_KEYBOARD_H
+
+// Compile from qmk_firmware folder with the following command:
+// $ make kbdfans/kbd75/rev2:adamdehaven
+
+// Each layer gets a name for readability. 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, and you can also skip them entirely and just use numbers.
+#define _QWERTY 0
+#define _FN1 1
+
+extern rgblight_config_t rgblight_config;
+static bool RGB_user_wants_enabled;
+uint16_t RGB_current_mode;
+uint16_t RGB_current_hue;
+uint16_t RGB_current_sat;
+uint16_t RGB_current_val;
+
+// Setup RGB
+void keyboard_post_init_user(void) {
+ RGB_user_wants_enabled = rgblight_config.enable;
+ RGB_current_mode = rgblight_config.mode;
+ RGB_current_hue = rgblight_config.hue;
+ RGB_current_sat = rgblight_config.sat;
+ RGB_current_val = rgblight_config.val;
+};
+
+// Restore user settings
+void restore_user_rgb_settings(void) {
+ // First, enable RGB
+ if (RGB_user_wants_enabled && !rgblight_config.enable) {
+ rgblight_enable();
+ } else if (!RGB_user_wants_enabled && rgblight_config.enable) {
+ rgblight_disable();
+ }
+
+ // Restore settings
+ rgblight_sethsv(RGB_current_hue, RGB_current_sat, RGB_current_val); // Restore underglow RGB color
+ rgblight_mode(RGB_current_mode); // Restore RGB mode
+};
+
+// Tap Dance Definitions
+enum tapdance {
+ TD_PGUP = 0,
+ TD_PGDN
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // Tap once for PageUp, twice for Home
+ [TD_PGUP] = ACTION_TAP_DANCE_DOUBLE(KC_PGUP, KC_HOME),
+ // Tap once for PageDown, twice for End
+ [TD_PGDN] = ACTION_TAP_DANCE_DOUBLE(KC_PGDOWN, KC_END)
+};
+
+// Fire on keypress
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case RGB_TOG:
+ if (!record->event.pressed) {
+ // on keyup
+ RGB_user_wants_enabled = rgblight_config.enable;
+ }
+ break;
+ case RGB_MOD:
+ if (!record->event.pressed) {
+ // on keyup
+ RGB_current_mode = rgblight_config.mode;
+ }
+ break;
+ case RGB_HUI:
+ case RGB_HUD:
+ if (!record->event.pressed) {
+ // on keyup
+ RGB_current_hue = rgblight_config.hue;
+ }
+ break;
+ case RGB_SAI:
+ case RGB_SAD:
+ if (!record->event.pressed) {
+ // on keyup
+ RGB_current_sat = rgblight_config.sat;
+ }
+ break;
+ case RGB_VAI:
+ case RGB_VAD:
+ if (!record->event.pressed) {
+ // on keyup
+ RGB_current_val = rgblight_config.val;
+ }
+ break;
+ }
+ return true;
+};
+
+
+/*
+ * You can use _______ in place for KC_TRNS (transparent)
+ * Or you can use XXXXXXX for KC_NO (NOOP)
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* 0: _QWERTY
+ * ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
+ * │ KC_ESC │ KC_F1 │ KC_F2 │ KC_F3 │ KC_F4 │ KC_F5 │ KC_F6 │ KC_F7 │ KC_F8 │ KC_F9 │ KC_F10 │ KC_F11 │ KC_F12 │ KC_PSCR │KC_INSERT│ KC_DEL │
+ * ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┤
+ * │ KC_GRV │ KC_1 │ KC_2 │ KC_3 │ KC_4 │ KC_5 │ KC_6 │ KC_7 │ KC_8 │ KC_9 │ KC_0 │ KC_MINS │ KC_EQL │ KC_BSPC │ KC_HOME │
+ * ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┤
+ * │ KC_TAB │ KC_Q │ KC_W │ KC_E │ KC_R │ KC_T │ KC_Y │ KC_U │ KC_I │ KC_O │ KC_P │ KC_LBRC │ KC_RBRC │ KC_BSLS │ KC_END │
+ * ├──────────────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴──────────────┼─────────┤
+ * │ KC_CAPS │ KC_A │ KC_S │ KC_D │ KC_F │ KC_G │ KC_H │ KC_J │ KC_K │ KC_L │ KC_SCLN │ KC_QUOT │ KC_ENT │ TD_PGUP │
+ * ├────────────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────────────┬─────────┼─────────┤
+ * │ KC_LSFT (2) │ KC_Z │ KC_X │ KC_C │ KC_V │ KC_B │ KC_N │ KC_M │ KC_COMM │ KC_DOT │ KC_SLSH │ KC_RSFT │ KC_UP │ TD_PGDN │
+ * ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬┴────────┬─┴───────┬─────────┼─────────┼─────────┤
+ * │ KC_LCTL │ KC_LGUI │ KC_LALT │ KC_SPC │ KC_RALT │MO(_FN1) │ KC_RCTL │ KC_LEFT │ KC_DOWN │ KC_RGHT │
+ * └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
+ */
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_INSERT, KC_DEL,
+ 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_DEL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, TD(TD_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, TD(TD_PGDN),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(_FN1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* 1: _FN1
+ * ┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_MUTE │
+ * ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┴─────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │
+ * ├─────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬──────────────┼─────────┤
+ * │ _______ │ RGB_TOG │ RGB_MOD │ RGB_HUI │ RGB_HUD │ RGB_SAI │ RGB_SAD │ RGB_VAI │ RGB_VAD │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │
+ * ├──────────────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴─┬───────┴──────────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_VOLU │
+ * ├────────────────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────┬────┴────────────┬─────────┼─────────┤
+ * │ _______ (2) │ _______ │ _______ │ BL_DEC │ BL_TOGG │ BL_INC │ BL_STEP │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_MPLY │ KC_VOLD │
+ * ├───────────┬─────────┴─┬───────┴───┬─────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┬─┴───────┬─┴───────┬─┴───────┬─────────┼─────────┼─────────┤
+ * │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ _______ │ KC_MPRV │ KC_MPLY │ KC_MNXT │
+ * └───────────┴───────────┴───────────┴───────────────────────────────────────────────────────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘
+ */
+ [_FN1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
+ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLD,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT
+ )
+};
+
+void toggle_rgb_caps_lock(bool isActive) {
+ if (isActive) {
+ if (!rgblight_config.enable) {
+ rgblight_enable();
+ }
+
+ // Set underglow color if CAPS_LOCK enabled
+ rgblight_sethsv(HSV_RED);
+ // Set to breathe
+ rgblight_mode(5);
+ } else {
+ restore_user_rgb_settings();
+ }
+};
+
+bool led_update_user(led_t led_state) {
+ toggle_rgb_caps_lock(led_state.caps_lock);
+ return true;
+};
diff --git a/keyboards/kbdfans/kbd75/keymaps/adamdehaven/rules.mk b/keyboards/kbdfans/kbd75/keymaps/adamdehaven/rules.mk
new file mode 100644
index 00000000000..e5ddcae8d92
--- /dev/null
+++ b/keyboards/kbdfans/kbd75/keymaps/adamdehaven/rules.mk
@@ -0,0 +1 @@
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/kbdfans/kbd75/keymaps/edulpn/keymap.c b/keyboards/kbdfans/kbd75/keymaps/edulpn/keymap.c
index 7e715a767c8..533d83fdbbd 100644
--- a/keyboards/kbdfans/kbd75/keymaps/edulpn/keymap.c
+++ b/keyboards/kbdfans/kbd75/keymaps/edulpn/keymap.c
@@ -8,7 +8,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[WINDOWS_LAYER] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, TG(MAC_LAYER), KC_DEL,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, TO(MAC_LAYER), KC_DEL,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
@@ -17,7 +17,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[WINDOWS_FN_LAYER] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_TRNS, KC_INS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[MAC_LAYER] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, TG(WINDOWS_LAYER), KC_DEL,
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, TO(WINDOWS_LAYER), KC_DEL,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
@@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[MAC_FN_LAYER] = LAYOUT(
- RESET, KC_BRID, KC_BRIU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MRWD, KC_MPLY, KC_MFFD, KC__MUTE, KC__VOLDOWN, KC__VOLUP, KC_TRNS, KC_TRNS, KC_TRNS,
+ RESET, KC_BRID, KC_BRIU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MRWD, KC_MPLY, KC_MFFD, KC__MUTE, KC__VOLDOWN, KC__VOLUP, KC_TRNS, KC_TRNS, KC_INS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -64,4 +64,3 @@ uint32_t layer_state_set_user(uint32_t state) {
}
return state;
}
-
diff --git a/keyboards/kbdfans/kbdpad/mk1/info.json b/keyboards/kbdfans/kbdpad/mk1/info.json
index 4f0da62e83c..68e8f685151 100644
--- a/keyboards/kbdfans/kbdpad/mk1/info.json
+++ b/keyboards/kbdfans/kbdpad/mk1/info.json
@@ -1,12 +1,100 @@
{
- "keyboard_name": "KBDfans KBDPad MKI",
- "url": "https://kbdfans.com/products/kbdfans-pad-custom-mechanical-keyboard-diy-kit",
- "maintainer": "qmk",
- "width": 4,
- "height": 6.25,
- "layouts": {
- "LAYOUT": {
- "layout": [{"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"x":2, "y":1.25}, {"x":3, "y":1.25}, {"x":0, "y":2.25}, {"x":1, "y":2.25}, {"x":2, "y":2.25}, {"x":0, "y":3.25}, {"x":1, "y":3.25}, {"x":2, "y":3.25}, {"x":3, "y":2.25, "h":2}, {"x":0, "y":4.25}, {"x":1, "y":4.25}, {"x":2, "y":4.25}, {"x":0, "y":5.25, "w":2}, {"x":2, "y":5.25}, {"x":3, "y":4.25, "h":2}]
- }
- }
+ "keyboard_name": "KBDfans KBDPad MKI",
+ "url": "https://kbdfans.com/products/kbdfans-pad-custom-mechanical-keyboard-diy-kit",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+
+ {"x":0, "y":2.25},
+ {"x":1, "y":2.25},
+ {"x":2, "y":2.25},
+
+ {"x":0, "y":3.25},
+ {"x":1, "y":3.25},
+ {"x":2, "y":3.25},
+ {"x":3, "y":2.25, "h":2},
+
+ {"x":0, "y":4.25},
+ {"x":1, "y":4.25},
+ {"x":2, "y":4.25},
+
+ {"x":0, "y":5.25, "w":2},
+ {"x":2, "y":5.25},
+ {"x":3, "y":4.25, "h":2}
+ ]
+ },
+ "LAYOUT_numpad_6x4": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+
+ {"x":0, "y":2.25},
+ {"x":1, "y":2.25},
+ {"x":2, "y":2.25},
+
+ {"x":0, "y":3.25},
+ {"x":1, "y":3.25},
+ {"x":2, "y":3.25},
+ {"x":3, "y":2.25, "h":2},
+
+ {"x":0, "y":4.25},
+ {"x":1, "y":4.25},
+ {"x":2, "y":4.25},
+
+ {"x":0, "y":5.25, "w":2},
+ {"x":2, "y":5.25},
+ {"x":3, "y":4.25, "h":2}
+ ]
+ },
+ "LAYOUT_ortho_6x4": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+
+ {"x":0, "y":2.25},
+ {"x":1, "y":2.25},
+ {"x":2, "y":2.25},
+ {"x":3, "y":2.25},
+
+ {"x":0, "y":3.25},
+ {"x":1, "y":3.25},
+ {"x":2, "y":3.25},
+ {"x":3, "y":3.25},
+
+ {"x":0, "y":4.25},
+ {"x":1, "y":4.25},
+ {"x":2, "y":4.25},
+ {"x":3, "y":4.25},
+
+ {"x":0, "y":5.25},
+ {"x":1, "y":5.25},
+ {"x":2, "y":5.25},
+ {"x":3, "y":5.25}
+ ]
+ }
+ }
}
diff --git a/keyboards/kbdfans/kbdpad/mk1/keymaps/default/keymap.c b/keyboards/kbdfans/kbdpad/mk1/keymaps/default/keymap.c
index 2d5053e0b6a..58f2c597e7a 100644
--- a/keyboards/kbdfans/kbdpad/mk1/keymaps/default/keymap.c
+++ b/keyboards/kbdfans/kbdpad/mk1/keymaps/default/keymap.c
@@ -17,11 +17,12 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT(\
- KC_DEL, KC_BSPC, \
- KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
- KC_P7, KC_P8, KC_P9, \
- KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_P1, KC_P2, KC_P3, \
- KC_P0, KC_PDOT, KC_PENT) \
+ [0] = LAYOUT(
+ KC_DEL, KC_BSPC,
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3,
+ KC_P0, KC_PDOT, KC_PENT
+ )
};
diff --git a/keyboards/kbdfans/kbdpad/mk1/mk1.h b/keyboards/kbdfans/kbdpad/mk1/mk1.h
index ace7466f548..36b02872785 100644
--- a/keyboards/kbdfans/kbdpad/mk1/mk1.h
+++ b/keyboards/kbdfans/kbdpad/mk1/mk1.h
@@ -13,26 +13,59 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
+
#pragma once
#include "quantum.h"
-// This a shortcut to help you visually see your layout.
+// This is a shortcut to help you visually see your layout.
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
- k52, k53, \
- k40, k41, k42, k43, \
- k30, k31, k32, \
- k20, k21, k22, k23, \
- k10, k11, k12, \
- k00, k02, k03 \
-){ \
- { k00, KC_NO, k02, k03 }, \
- { k10, k11, k12, KC_NO }, \
- { k20, k21, k22, k23 }, \
- { k30, k31, k32, KC_NO }, \
- { k40, k41, k42, k43 }, \
- { KC_NO, KC_NO, k52, k53 }, \
+#define LAYOUT( \
+ k52, k53, \
+ k40, k41, k42, k43, \
+ k30, k31, k32, \
+ k20, k21, k22, k23, \
+ k10, k11, k12, \
+ k00, k02, k03 \
+) { \
+ { k00, KC_NO, k02, k03 }, \
+ { k10, k11, k12, KC_NO }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, KC_NO }, \
+ { k40, k41, k42, k43 }, \
+ { KC_NO, KC_NO, k52, k53 } \
+}
+
+#define LAYOUT_numpad_6x4( \
+ k50, k51, k52, k53, \
+ k40, k41, k42, k43, \
+ k30, k31, k32, \
+ k20, k21, k22, k23, \
+ k10, k11, k12, \
+ k00, k02, k03 \
+) { \
+ { k00, KC_NO, k02, k03 }, \
+ { k10, k11, k12, KC_NO }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, KC_NO }, \
+ { k40, k41, k42, k43 }, \
+ { k50, k51, k52, k53 } \
+}
+
+#define LAYOUT_ortho_6x4( \
+ k50, k51, k52, k53, \
+ k40, k41, k42, k43, \
+ k30, k31, k32, k33, \
+ k20, k21, k22, k23, \
+ k10, k11, k12, k13, \
+ k00, k01, k02, k03 \
+) { \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, k23 }, \
+ { k30, k31, k32, k33 }, \
+ { k40, k41, k42, k43 }, \
+ { k50, k51, k52, k53 } \
}
diff --git a/keyboards/kbdfans/kbdpad/mk1/readme.md b/keyboards/kbdfans/kbdpad/mk1/readme.md
index 2424d4d4d61..27194e683f4 100644
--- a/keyboards/kbdfans/kbdpad/mk1/readme.md
+++ b/keyboards/kbdfans/kbdpad/mk1/readme.md
@@ -1,10 +1,10 @@
# KBDPad MKI
-Custom numpad.
+Custom numpad. The MKI shares the same ATmega32A and matrix layout as the newer V2 PCB (not to be confused with the MKII, which uses an ATmega32U2!).
* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-* Hardware Supported: KBDPad MKI
-* Hardware Availability: [KBDfans](https://kbdfans.com/products/kbdfans-pad-custom-mechanical-keyboard-diy-kit)
+* Hardware Supported: KBDPad MKI, KBDPad V2
+* Hardware Availability: [KBDfans](https://kbdfans.com/collections/20/products/kbdfans-kbdpad-pcb-v2)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/kbdfans/kbdpad/mk1/rules.mk b/keyboards/kbdfans/kbdpad/mk1/rules.mk
index dcd7e554050..679ac08fa8b 100644
--- a/keyboards/kbdfans/kbdpad/mk1/rules.mk
+++ b/keyboards/kbdfans/kbdpad/mk1/rules.mk
@@ -21,4 +21,4 @@ BACKLIGHT_ENABLE = yes
RGBLIGHT_ENABLE = no # PCB has underglow LEDs, but case doesn't let them show.
WS2812_DRIVER = i2c
-OPT_DEFS = -DDEBUG_LEVEL=0
+LAYOUTS = ortho_6x4 numpad_6x4
diff --git a/keyboards/kbdfans/maja/config.h b/keyboards/kbdfans/maja/config.h
new file mode 100755
index 00000000000..4351ee4bb0b
--- /dev/null
+++ b/keyboards/kbdfans/maja/config.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "config_common.h"
+
+#define VENDOR_ID 0x4B42
+#define PRODUCT_ID 0x6068
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KBDFANS
+#define PRODUCT MAJA
+#define DESCRIPTION MAJA RGB keyboard
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+#define MATRIX_ROW_PINS { F0, B6, B5, 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 RGB_MATRIX_LED_PROCESS_LIMIT 4
+#define RGB_MATRIX_LED_FLUSH_LIMIT 26
+#define DEBOUNCE 3
+#define RGB_DISABLE_AFTER_TIMEOUT 0
+#define RGB_DISABLE_WHEN_USB_SUSPENDED true
+#define RGB_MATRIX_KEYPRESSES
+#define DISABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define DISABLE_RGB_MATRIX_BAND_SAT
+#define DISABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define DISABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define DISABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#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 DISABLE_RGB_MATRIX_DIGITAL_RAIN
+#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110110
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 36
+#define DRIVER_2_LED_TOTAL 31
+#define DRIVER_LED_TOTAL (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL)
diff --git a/keyboards/kbdfans/maja/info.json b/keyboards/kbdfans/maja/info.json
new file mode 100644
index 00000000000..80526d09e12
--- /dev/null
+++ b/keyboards/kbdfans/maja/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "maja",
+ "url": "",
+ "maintainer": "KBDFANS",
+ "width": 18.75,
+ "height": 5.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x": 2.75, "y": 0},
+ {"x": 12.75, "y": 0},
+ {"x": 0.75, "y": 0.25},
+ {"x": 1.75, "y": 0.25},
+ {"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": 13.75, "y": 0.25},
+ {"x": 14.75, "y": 0.25, "w": 2},
+ {"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}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kbdfans/maja/keymaps/default/keymap.c b/keyboards/kbdfans/maja/keymaps/default/keymap.c
new file mode 100755
index 00000000000..fa81f07b40e
--- /dev/null
+++ b/keyboards/kbdfans/maja/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+#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_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, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_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_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),
+ };
diff --git a/keyboards/kbdfans/maja/keymaps/via/keymap.c b/keyboards/kbdfans/maja/keymaps/via/keymap.c
new file mode 100755
index 00000000000..1fb8d1bce59
--- /dev/null
+++ b/keyboards/kbdfans/maja/keymaps/via/keymap.c
@@ -0,0 +1,29 @@
+#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_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, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_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_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(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+ [3] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+ };
diff --git a/keyboards/kbdfans/maja/keymaps/via/rules.mk b/keyboards/kbdfans/maja/keymaps/via/rules.mk
new file mode 100755
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/kbdfans/maja/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kbdfans/maja/maja.c b/keyboards/kbdfans/maja/maja.c
new file mode 100755
index 00000000000..545d8c46e2c
--- /dev/null
+++ b/keyboards/kbdfans/maja/maja.c
@@ -0,0 +1,104 @@
+#include "maja.h"
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+ {0, C2_1, C3_1, C4_1}, // LA0
+ {0, C1_1, C3_2, C4_2}, // LA1
+ {0, C1_2, C2_2, C4_3}, // LA2
+ {0, C1_3, C2_3, C3_3}, // LA3
+ {0, C1_4, C2_4, C3_4}, // LA4
+ {0, C1_5, C2_5, C3_5}, // LA5
+ {0, C1_6, C2_6, C3_6}, // LA6
+ {0, C1_15, C2_15, C3_15}, // LB7
+ {0, C1_14, C2_14, C3_14}, // LB6
+ {0, C1_13, C2_13, C3_13}, // LB5
+ {0, C1_12, C2_12, C3_12}, // LB4
+ {0, C1_11, C2_11, C3_11}, // LB3
+ {0, C1_10, C2_10, C4_11}, // LB2
+ {0, C1_9, C3_10, C4_10}, // LB1
+ {0, C2_9, C3_9, C4_9}, // LB0
+
+ {0, C9_4, C8_4, C7_4}, // LA12
+ {0, C9_3, C8_3, C7_3}, // LA11
+ {0, C9_2, C8_2, C7_2}, // LA10
+ {0, C9_1, C8_1, C7_1}, // LA9
+ {0, C1_8, C2_8, C3_8}, // LA8
+ {0, C1_7, C2_7, C3_7}, // LA7
+ {0, C1_16, C2_16, C3_16}, // LB8
+ {0, C9_9, C8_9, C7_9}, // LB9
+ {0, C9_10, C8_10, C7_10}, // LB10
+ {0, C9_11, C8_11, C7_11}, // LB11
+ {0, C9_12, C8_12, C7_12}, // LB12
+ {0, C9_13, C8_13, C7_13}, // LB13
+ {0, C9_14, C8_14, C7_14}, // LB14
+ {0, C9_15, C8_15, C6_14}, // LB15
+ {0, C9_16, C7_15, C6_15}, // LB16
+
+ {0, C9_5, C8_5, C7_5}, // LA13
+ {0, C9_6, C8_6, C7_6}, // LA14
+ {0, C9_7, C8_7, C6_6}, // LA15
+ {0, C9_8, C7_7, C6_7}, // LA16
+ {0, C8_8, C7_8, C6_8}, // LA17
+ {1, C2_1, C3_1, C4_1}, // LC0
+ {1, C1_15, C2_15, C3_15}, // LD7
+ {1, C1_14, C2_14, C3_14}, // LD6
+ {1, C1_13, C2_13, C3_13}, // LD5
+ {1, C1_12, C2_12, C3_12}, // LD4
+ {1, C1_11, C2_11, C3_11}, // LD3
+ {1, C1_10, C2_10, C4_11}, // LD2
+ {1, C1_9, C3_10, C4_10}, // LD1
+ {0, C8_16, C7_16, C6_16}, // LB17
+
+ {1, C1_6, C2_6, C3_6}, // LC6
+ {1, C1_5, C2_5, C3_5}, // LC5
+ {1, C1_4, C2_4, C3_4}, // LC4
+ {1, C1_3, C2_3, C3_3}, // LC3
+ {1, C1_2, C2_2, C4_3}, // LC2
+ {1, C1_1, C3_2, C4_2}, // LC1
+ {1, C1_16, C2_16, C3_16}, // LD8
+ {1, C9_9, C8_9, C7_9}, // LD9
+ {1, C9_10, C8_10, C7_10}, // LD10
+ {1, C9_11, C8_11, C7_11}, // LD11
+ {1, C9_12, C8_12, C7_12}, // LD12
+ {1, C9_13, C8_13, C7_13}, // LD13
+ {1, C9_14, C8_14, C7_14}, // LD14
+ {1, C2_9, C3_9, C4_9}, // LD0
+
+ {1, C1_7, C2_7, C3_7}, // LC7
+ {1, C1_8, C2_8, C3_8}, // LC8
+ {1, C9_1, C8_1, C7_1}, // LC9
+ {1, C9_2, C8_2, C7_2}, // LC10
+ {1, C9_3, C8_3, C7_3}, // LC11
+ {1, C9_4, C8_4, C7_4}, // LC12
+ {1, C9_15, C8_15, C6_14}, // LD15
+ {1, C9_16, C7_15, C6_15}, // LD16
+ {1, C8_16, C7_16, C6_16} // LD17
+};
+
+led_config_t g_led_config = { {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
+ { 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,},
+ { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, NO_LED, 42, 43},
+ { 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, NO_LED},
+ { 58, NO_LED, 59, 60, NO_LED, 61, NO_LED, 62, NO_LED, 63, NO_LED, NO_LED, 64, 65, 66}
+}, {
+ {4,1},{18,1},{31,0},{46,3},{59,5},{73,7},{86,10},{107,9},{121,7},{134,4},{148,2},{162,0},{176,2},{196,2},{224,0},
+ {5,15},{22,15},{37,15},{50,17},{64,20},{77,22},{103,23},{117,21},{130,19},{143,16},{158,15},{171,16},{186,16},{202,16},{224,16},
+ {4,28},{23,28},{38,29},{51,31},{65,34},{78,36},{109,36},{122,34},{136,32},{150,29},{164,29},{177,29},{200,29},{224,29},
+ {5,42},{27,42},{42,43},{55,46},{69,48},{82,51},{104,51},{118,48},{131,46},{145,44},{159,43},{173,43},{192,43},{214,46},
+ {0,55},{40,58},{62,61},{86,64},{119,62},{147,58},{201,60},{214,60},{224,60}
+}, {
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 4, 4, 4, 1, 4, 4, 1, 1, 1
+} };
+
+void suspend_power_down_kb(void) {
+ rgb_matrix_set_suspend_state(true);
+ suspend_power_down_user();
+}
+void suspend_wakeup_init_kb(void) {
+ rgb_matrix_set_suspend_state(false);
+ suspend_wakeup_init_user();
+}
diff --git a/keyboards/kbdfans/maja/maja.h b/keyboards/kbdfans/maja/maja.h
new file mode 100755
index 00000000000..7e6027bac2b
--- /dev/null
+++ b/keyboards/kbdfans/maja/maja.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, 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, XXX }, \
+ { K40, XXX, K42, K43, XXX, K45, XXX, K47, XXX, K49, XXX, XXX, K4C, K4D, K4E } \
+}
diff --git a/keyboards/kbdfans/maja/readme.md b/keyboards/kbdfans/maja/readme.md
new file mode 100755
index 00000000000..02804370bf9
--- /dev/null
+++ b/keyboards/kbdfans/maja/readme.md
@@ -0,0 +1,14 @@
+# MAJA
+
+
+
+
+* Keyboard Maintainer: [DZTECH](https://github.com/moyi4681)
+* Hardware Supported: MAJA
+* Hardware Availability: [KBDFans](https://kbdfans.cn/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbdfans/maja: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/rules.mk b/keyboards/kbdfans/maja/rules.mk
new file mode 100755
index 00000000000..2b097c3d47b
--- /dev/null
+++ b/keyboards/kbdfans/maja/rules.mk
@@ -0,0 +1,33 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+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 = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+RGB_MATRIX_ENABLE = yes # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/kc60/keymaps/via/keymap.c b/keyboards/kc60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5623f2333de
--- /dev/null
+++ b/keyboards/kc60/keymaps/via/keymap.c
@@ -0,0 +1,32 @@
+#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_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ 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_RSFT, LT(1,KC_APP),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, LT(1,KC_APP), KC_RCTL
+ ),
+ [1] = LAYOUT_all(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS,
+ XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_BRTG, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, _______, _______,
+ _______, _______, _______, XXXXXXX, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/kc60/keymaps/via/readme.md b/keyboards/kc60/keymaps/via/readme.md
new file mode 100644
index 00000000000..e573ceee4f0
--- /dev/null
+++ b/keyboards/kc60/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The default VIA keymap for KC60
diff --git a/keyboards/kc60/keymaps/via/rules.mk b/keyboards/kc60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/kc60/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kc60/rules.mk b/keyboards/kc60/rules.mk
index e1c92de9611..044233e4405 100644
--- a/keyboards/kc60/rules.mk
+++ b/keyboards/kc60/rules.mk
@@ -14,7 +14,7 @@ BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
diff --git a/keyboards/keebio/bdn9/bdn9.c b/keyboards/keebio/bdn9/bdn9.c
index f3842d09897..0ff55fd6d45 100644
--- a/keyboards/keebio/bdn9/bdn9.c
+++ b/keyboards/keebio/bdn9/bdn9.c
@@ -1,18 +1 @@
#include "bdn9.h"
-
-void eeconfig_init_kb(void) {
-#ifdef BACKLIGHT_ENABLE
- backlight_enable();
- backlight_level(5);
-#endif
-#ifdef RGBLIGHT_ENABLE
- rgblight_enable(); // Enable RGB by default
- rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness
-#ifdef RGBLIGHT_ANIMATIONS
- rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default
-#endif
-#endif
-
- eeconfig_update_kb(0);
- eeconfig_init_user();
-}
diff --git a/keyboards/keebio/bdn9/bdn9.h b/keyboards/keebio/bdn9/bdn9.h
index 8a451132647..94ba78a6ade 100644
--- a/keyboards/keebio/bdn9/bdn9.h
+++ b/keyboards/keebio/bdn9/bdn9.h
@@ -1,37 +1,7 @@
-/* Copyright 2019 Danny Nguyen
- *
- * 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 .
- */
#pragma once
-#include "quantum.h"
-
-/* 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( \
- KA1, KA2, KA3, \
- KB1, KB2, KB3, \
- KC1, KC2, KC3 \
-) \
-{ \
- { KA1, KA2, KA3 }, \
- { KB1, KB2, KB3 }, \
- { KC1, KC2, KC3 } \
-}
+#ifdef KEYBOARD_keebio_bdn9_rev1
+ #include "rev1.h"
+#elif KEYBOARD_keebio_bdn9_rev2
+ #include "rev2.h"
+#endif
diff --git a/keyboards/keebio/bdn9/config.h b/keyboards/keebio/bdn9/config.h
index 40c8a1d77a8..b8c5759db6b 100644
--- a/keyboards/keebio/bdn9/config.h
+++ b/keyboards/keebio/bdn9/config.h
@@ -1,67 +1,3 @@
-/*
-Copyright 2019 Danny Nguyen
-
-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 .
-*/
-
#pragma once
#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCB10
-#define PRODUCT_ID 0x1133
-#define DEVICE_VER 0x0100
-#define MANUFACTURER Keebio
-#define PRODUCT BDN9
-#define DESCRIPTION 3x3 Macropad with Rotary Encoders
-
-/* key matrix size */
-#define MATRIX_ROWS 3
-#define MATRIX_COLS 3
-
-/* Keyboard Matrix Assignments */
-#define DIRECT_PINS { \
- { D2, D4, F4 }, \
- { D7, B1, B3 }, \
- { E6, B4, B2 } \
-}
-
-#define ENCODERS_PAD_A { D1, F5 }
-#define ENCODERS_PAD_B { D0, F6 }
-
-
-#define BACKLIGHT_PIN B5
-// #define BACKLIGHT_BREATHING
-#define BACKLIGHT_LEVELS 7
-
-#define RGB_DI_PIN D3
-#ifdef RGB_DI_PIN
- #define RGBLED_NUM 4
- #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
-#endif
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* 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
\ No newline at end of file
diff --git a/keyboards/keebio/bdn9/info.json b/keyboards/keebio/bdn9/info.json
index a985a05e04d..1c8f5dec838 100644
--- a/keyboards/keebio/bdn9/info.json
+++ b/keyboards/keebio/bdn9/info.json
@@ -1,7 +1,7 @@
{
- "keyboard_name": "Keeb.io BDN9",
- "url": "",
- "maintainer": "nooges",
+ "keyboard_name": "Keebio BDN9",
+ "url": "https://keeb.io",
+ "maintainer": "Keebio",
"width": 3,
"height": 3,
"layouts": {
diff --git a/keyboards/keebio/bdn9/keymaps/bcat/keymap.c b/keyboards/keebio/bdn9/keymaps/bcat/keymap.c
index 05d324034c3..41246ba7d9e 100644
--- a/keyboards/keebio/bdn9/keymaps/bcat/keymap.c
+++ b/keyboards/keebio/bdn9/keymaps/bcat/keymap.c
@@ -31,9 +31,13 @@ void encoder_update_user(uint8_t index, bool clockwise) {
/* Top-right encoder (backlight brightness) */
case 1:
if (clockwise) {
+#ifdef BACKLIGHT_ENABLE
backlight_increase();
+#endif
} else {
+#ifdef BACKLIGHT_ENABLE
backlight_decrease();
+#endif
}
break;
}
diff --git a/keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk b/keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk
index e910b7bea5d..1724fe7eead 100644
--- a/keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk
+++ b/keyboards/keebio/bdn9/keymaps/codecoffeecode/rules.mk
@@ -1,2 +1,4 @@
-MOUSEKEY_ENABLE = yes
-CTPC = yes
\ No newline at end of file
+MOUSEKEY_ENABLE = yes
+ifneq (, $(findstring rev1, $(KEYBOARD)))
+ CTPC = yes
+endif
diff --git a/keyboards/keebio/bdn9/keymaps/default/config.h b/keyboards/keebio/bdn9/keymaps/default/config.h
new file mode 100644
index 00000000000..e09fba9232b
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/default/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_KEYPRESSES
+#endif
diff --git a/keyboards/keebio/bdn9/keymaps/default/keymap.c b/keyboards/keebio/bdn9/keymaps/default/keymap.c
index c700019dc06..a88617caaa2 100644
--- a/keyboards/keebio/bdn9/keymaps/default/keymap.c
+++ b/keyboards/keebio/bdn9/keymaps/default/keymap.c
@@ -15,6 +15,12 @@
*/
#include QMK_KEYBOARD_H
+enum encoder_names {
+ _LEFT,
+ _RIGHT,
+ _MIDDLE,
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
| Knob 1: Vol Dn/Up | | Knob 2: Page Dn/Up |
@@ -40,14 +46,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
void encoder_update_user(uint8_t index, bool clockwise) {
- if (index == 0) {
+ if (index == _LEFT) {
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
}
- else if (index == 1) {
+ else if (index == _MIDDLE) {
+ if (clockwise) {
+ tap_code(KC_DOWN);
+ } else {
+ tap_code(KC_UP);
+ }
+ }
+ else if (index == _RIGHT) {
if (clockwise) {
tap_code(KC_PGDN);
} else {
diff --git a/keyboards/keebio/bdn9/keymaps/mousepad/rule.mk b/keyboards/keebio/bdn9/keymaps/mousepad/rules.mk
similarity index 100%
rename from keyboards/keebio/bdn9/keymaps/mousepad/rule.mk
rename to keyboards/keebio/bdn9/keymaps/mousepad/rules.mk
diff --git a/keyboards/keebio/bdn9/keymaps/test/config.h b/keyboards/keebio/bdn9/keymaps/test/config.h
new file mode 100644
index 00000000000..e09fba9232b
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/test/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#ifdef RGB_MATRIX_ENABLE
+# define RGB_MATRIX_KEYPRESSES
+#endif
diff --git a/keyboards/keebio/bdn9/keymaps/test/keymap.c b/keyboards/keebio/bdn9/keymaps/test/keymap.c
new file mode 100644
index 00000000000..244b5f7cb30
--- /dev/null
+++ b/keyboards/keebio/bdn9/keymaps/test/keymap.c
@@ -0,0 +1,49 @@
+#include QMK_KEYBOARD_H
+
+enum encoder_names {
+ _LEFT,
+ _RIGHT,
+ _MIDDLE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_A, KC_B, KC_C,
+ KC_D, KC_E, KC_F,
+ KC_G, KC_H, RGB_MOD
+ ),
+ /*
+ | RESET | N/A | Media Stop |
+ | Held: Layer 2 | Home | RGB Mode |
+ | Media Previous | End | Media Next |
+ */
+ [1] = LAYOUT(
+ RESET , BL_STEP, KC_STOP,
+ _______, KC_HOME, RGB_MOD,
+ KC_MPRV, KC_END , KC_MNXT
+ ),
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == _LEFT) {
+ if (clockwise) {
+ rgblight_increase_hue();
+ } else {
+ rgblight_decrease_hue();
+ }
+ }
+ else if (index == _MIDDLE) {
+ if (clockwise) {
+ rgblight_increase_sat();
+ } else {
+ rgblight_decrease_sat();
+ }
+ }
+ else if (index == _RIGHT) {
+ if (clockwise) {
+ rgblight_increase_val();
+ } else {
+ rgblight_decrease_val();
+ }
+ }
+}
diff --git a/keyboards/keebio/bdn9/keymaps/via/rules.mk b/keyboards/keebio/bdn9/keymaps/via/rules.mk
index 5b604f2b06d..aa554ae2946 100644
--- a/keyboards/keebio/bdn9/keymaps/via/rules.mk
+++ b/keyboards/keebio/bdn9/keymaps/via/rules.mk
@@ -1,5 +1,5 @@
VIA_ENABLE = yes
LINK_TIME_OPTIMIZATION_ENABLE = yes
MOUSEKEY_ENABLE = yes
-CONSOLE_ENABLE = no
+CONSOLE_ENABLE = yes
COMMAND_ENABLE = no
diff --git a/keyboards/keebio/bdn9/readme.md b/keyboards/keebio/bdn9/readme.md
index ddbe7f144b6..d77dcc61701 100644
--- a/keyboards/keebio/bdn9/readme.md
+++ b/keyboards/keebio/bdn9/readme.md
@@ -10,6 +10,6 @@ Hardware Availability: [Keebio - BDN9](https://keeb.io/products/bdn9-3x3-9-key-m
Make example for this keyboard (after setting up your build environment):
- make keebio/bdn9:default
+ make keebio/bdn9/rev1: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/keebio/bdn9/rev1/config.h b/keyboards/keebio/bdn9/rev1/config.h
new file mode 100644
index 00000000000..678be9fe81c
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev1/config.h
@@ -0,0 +1,66 @@
+/*
+Copyright 2019 Danny Nguyen
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCB10
+#define PRODUCT_ID 0x1133
+#define DEVICE_VER 0x0100
+#define MANUFACTURER Keebio
+#define PRODUCT BDN9 Rev. 1
+#define DESCRIPTION 3x3 Macropad with Rotary Encoders
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define DIRECT_PINS { \
+ { D2, D4, F4 }, \
+ { D7, B1, B3 }, \
+ { E6, B4, B2 } \
+}
+
+#define ENCODERS_PAD_A { D1, F5 }
+#define ENCODERS_PAD_B { D0, F6 }
+
+#define BACKLIGHT_PIN B5
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 7
+
+#define RGB_DI_PIN D3
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 4
+ #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
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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/keebio/bdn9/rev1/rev1.c b/keyboards/keebio/bdn9/rev1/rev1.c
new file mode 100644
index 00000000000..4b32b73a0bb
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev1/rev1.c
@@ -0,0 +1,18 @@
+#include "rev1.h"
+
+void eeconfig_init_kb(void) {
+#ifdef BACKLIGHT_ENABLE
+ backlight_enable();
+ backlight_level(5);
+#endif
+#ifdef RGBLIGHT_ENABLE
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness
+#ifdef RGBLIGHT_ANIMATIONS
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default
+#endif
+#endif
+
+ eeconfig_update_kb(0);
+ eeconfig_init_user();
+}
diff --git a/keyboards/keebio/bdn9/rev1/rev1.h b/keyboards/keebio/bdn9/rev1/rev1.h
new file mode 100644
index 00000000000..9e04032d812
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev1/rev1.h
@@ -0,0 +1,38 @@
+/* Copyright 2019 Danny Nguyen
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "bdn9.h"
+#include "quantum.h"
+
+/* 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( \
+ KA1, KA2, KA3, \
+ KB1, KB2, KB3, \
+ KC1, KC2, KC3 \
+) \
+{ \
+ { KA1, KA2, KA3 }, \
+ { KB1, KB2, KB3 }, \
+ { KC1, KC2, KC3 } \
+}
diff --git a/keyboards/keebio/bdn9/rev1/rules.mk b/keyboards/keebio/bdn9/rev1/rules.mk
new file mode 100644
index 00000000000..176175ca2bd
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev1/rules.mk
@@ -0,0 +1,34 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# ATmega32A bootloadHID
+# ATmega328P USBasp
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+ENCODER_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/wete/chconf.h b/keyboards/keebio/bdn9/rev2/chconf.h
similarity index 100%
rename from keyboards/wete/chconf.h
rename to keyboards/keebio/bdn9/rev2/chconf.h
diff --git a/keyboards/keebio/bdn9/rev2/config.h b/keyboards/keebio/bdn9/rev2/config.h
new file mode 100644
index 00000000000..a3716fddcdd
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev2/config.h
@@ -0,0 +1,67 @@
+/*
+Copyright 2020 Danny Nguyen
+
+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 .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCB10
+#define PRODUCT_ID 0x2133
+#define DEVICE_VER 0x0200
+#define MANUFACTURER Keebio
+#define PRODUCT BDN9 Rev. 2
+#define DESCRIPTION 3x3 Macropad with Rotary Encoders
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/* Keyboard Matrix Assignments */
+#define DIRECT_PINS { \
+ { B12, B5, B6 }, \
+ { B14, B4, B7 }, \
+ { A3, F1, F0 } \
+}
+
+// Left, Right, Middle
+#define ENCODERS_PAD_A { A8, B3, A10 }
+#define ENCODERS_PAD_B { B11, A15, A9 }
+
+#define RGB_DI_PIN B15
+#ifdef RGB_DI_PIN
+# define RGBLED_NUM 11
+# 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
+// RGB Matrix
+# ifdef RGB_MATRIX_ENABLE
+# define DRIVER_LED_TOTAL RGBLED_NUM
+# endif
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* 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/wete/halconf.h b/keyboards/keebio/bdn9/rev2/halconf.h
similarity index 100%
rename from keyboards/wete/halconf.h
rename to keyboards/keebio/bdn9/rev2/halconf.h
diff --git a/keyboards/keebio/bdn9/rev2/mcuconf.h b/keyboards/keebio/bdn9/rev2/mcuconf.h
new file mode 100644
index 00000000000..0e49478c8b0
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev2/mcuconf.h
@@ -0,0 +1,176 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * STM32F0xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F0xx_MCUCONF
+// #define STM32F070xB
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_HSI14_ENABLED TRUE
+#define STM32_HSI48_ENABLED FALSE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED FALSE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 12
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE STM32_PPRE_DIV1
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_USBSW STM32_USBSW_HSI48
+#define STM32_CECSW STM32_CECSW_HSI
+#define STM32_I2C1SW STM32_I2C1SW_HSI
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 2
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM14 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 2
+#define STM32_GPT_TIM2_IRQ_PRIORITY 2
+#define STM32_GPT_TIM3_IRQ_PRIORITY 2
+#define STM32_GPT_TIM14_IRQ_PRIORITY 2
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 3
+#define STM32_I2C_I2C2_IRQ_PRIORITY 3
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 6)
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 3
+#define STM32_ICU_TIM2_IRQ_PRIORITY 3
+#define STM32_ICU_TIM3_IRQ_PRIORITY 3
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 TRUE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 3
+#define STM32_PWM_TIM2_IRQ_PRIORITY 3
+#define STM32_PWM_TIM3_IRQ_PRIORITY 3
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 3
+#define STM32_SERIAL_USART2_PRIORITY 3
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 4)
+#define STM32_SPI_SPI2_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 5)
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 2
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 3
+#define STM32_UART_USART2_IRQ_PRIORITY 3
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/keebio/bdn9/rev2/rev2.c b/keyboards/keebio/bdn9/rev2/rev2.c
new file mode 100644
index 00000000000..689abd0b1d4
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev2/rev2.c
@@ -0,0 +1,39 @@
+#include "rev2.h"
+
+#ifdef RGB_MATRIX_ENABLE
+led_config_t g_led_config = { {
+ // Key Matrix to LED Index
+ { 0, 1, 2 },
+ { 3, 4, 5 },
+ { 6, 7, 8 }
+}, {
+ // LED Index to Physical Position
+ { 0, 0 }, { 112, 0 }, { 224, 0 },
+ { 0, 32 }, { 112, 32 }, { 224, 32 },
+ { 0, 64 }, { 112, 64 }, { 224, 64 },
+ { 56, 64 }, { 168, 64 },
+}, {
+ // LED Index to Flag
+ 4, 4, 4,
+ 4, 4, 4,
+ 4, 4, 4,
+ 2, 2
+} };
+#endif
+
+void eeconfig_init_kb(void) {
+#ifdef RGBLIGHT_ENABLE
+ rgblight_enable(); // Enable RGB by default
+ rgblight_sethsv(0, 255, 255); // Set default HSV - red hue, full saturation, full brightness
+# ifdef RGBLIGHT_ANIMATIONS
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 2); // set to RGB_RAINBOW_SWIRL by default
+# endif
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_enable(); // Enable RGB by default
+#endif
+
+ eeconfig_update_kb(0);
+ eeconfig_init_user();
+}
diff --git a/keyboards/keebio/bdn9/rev2/rev2.h b/keyboards/keebio/bdn9/rev2/rev2.h
new file mode 100644
index 00000000000..0f0603c1d6a
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev2/rev2.h
@@ -0,0 +1,38 @@
+/* Copyright 2020 Danny Nguyen
+ *
+ * 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 .
+ */
+#pragma once
+
+#include "bdn9.h"
+#include "quantum.h"
+
+/* 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( \
+ KA1, KA2, KA3, \
+ KB1, KB2, KB3, \
+ KC1, KC2, KC3 \
+) \
+{ \
+ { KA1, KA2, KA3 }, \
+ { KB1, KB2, KB3 }, \
+ { KC1, KC2, KC3 } \
+}
diff --git a/keyboards/keebio/bdn9/rev2/rules.mk b/keyboards/keebio/bdn9/rev2/rules.mk
new file mode 100644
index 00000000000..5e5fa2ff911
--- /dev/null
+++ b/keyboards/keebio/bdn9/rev2/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = STM32F072
+
+# 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 = yes # Console for debug
+COMMAND_ENABLE = yes # 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
+MIDI_ENABLE = no # MIDI support
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+ENCODER_ENABLE = yes
+RGB_MATRIX_ENABLE = WS2812
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/keebio/bdn9/rules.mk b/keyboards/keebio/bdn9/rules.mk
index 176175ca2bd..431a8ad0275 100644
--- a/keyboards/keebio/bdn9/rules.mk
+++ b/keyboards/keebio/bdn9/rules.mk
@@ -1,34 +1 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-# Teensy halfkay
-# Pro Micro caterina
-# Atmel DFU atmel-dfu
-# LUFA DFU lufa-dfu
-# QMK DFU qmk-dfu
-# ATmega32A bootloadHID
-# ATmega328P USBasp
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # 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 = yes # Enable keyboard backlight functionality on B7 by default
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-MIDI_ENABLE = no # MIDI support
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-HD44780_ENABLE = no # Enable support for HD44780 based LCDs
-ENCODER_ENABLE = yes
\ No newline at end of file
+DEFAULT_FOLDER = keebio/bdn9/rev1
diff --git a/keyboards/keebio/bfo9000/keymaps/abstractkb/keymap.c b/keyboards/keebio/bfo9000/keymaps/abstractkb/keymap.c
index a8348ecfb56..f97f0abf1a6 100644
--- a/keyboards/keebio/bfo9000/keymaps/abstractkb/keymap.c
+++ b/keyboards/keebio/bfo9000/keymaps/abstractkb/keymap.c
@@ -15,9 +15,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_MPLY, KC_PSLS, KC_PAST, 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, MYRGB_TG, KC_PGUP, \
KC_MUTE, KC_PPLS, KC_PMNS, 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_DEL, KC_PGDN, \
KC_P7, KC_P8, KC_P9, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \
- KC_P4, KC_P5, KC_P6, KC_BSPACE, 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_CAPS, KC_PSCR, \
- KC_P1, KC_P2, KC_P3, 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, XXXXXXX, KC_INS, \
- KC_P0, KC_PDOT, KC_PENT, TO(_LIST), KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX \
+ KC_P4, KC_P5, KC_P6, KC_BSPACE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, KC_PSCR, \
+ KC_P1, KC_P2, KC_P3, 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_CAPS, KC_INS, \
+ KC_P0, KC_PDOT, KC_PENT, KC_LCTL, TO(_LIST), KC_LGUI, KC_LALT, XXXXXXX, KC_SPC, KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NLCK \
),
[_LIST] = LAYOUT( \
@@ -26,7 +26,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, TO(_BASE), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, TO(_BASE), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/keebio/iris/keymaps/csc027/keymap.c b/keyboards/keebio/iris/keymaps/csc027/keymap.c
index 82a07739141..f81e8f848a0 100644
--- a/keyboards/keebio/iris/keymaps/csc027/keymap.c
+++ b/keyboards/keebio/iris/keymaps/csc027/keymap.c
@@ -52,12 +52,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______
),
- [_GW] = LAYOUT(
- KC_Y, KC_GRV, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- KC_B, KC_TAB, KC_T, KC_W, KC_4, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_M, MC_LSEC, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
- KC_I, KC_LCTL, KC_Z, KC_LALT, KC_V, KC_SPC, KC_SPC, _______, KC_N, KC_M, KC_COMM, KC_DOT, TO(_CS), TO(_QW),
- KC_X, KC_C, KC_SPC, _______, KC_M, KC_B
+ [_GG] = LAYOUT(
+ KC_5, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_T, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_G, MC_LSEC, KC_A, KC_S, KC_D, KC_F, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_B, KC_LCTL, KC_Z, KC_X, KC_C, KC_SPC, KC_SPC, _______, KC_N, KC_M, KC_COMM, KC_DOT, TO(_CS), TO(_QW),
+ KC_LALT, KC_V, KC_SPC, _______, KC_M, KC_B
),
[_CS] = LAYOUT(
diff --git a/keyboards/keebio/iris/keymaps/dcompact/config.h b/keyboards/keebio/iris/keymaps/dcompact/config.h
new file mode 100644
index 00000000000..149a54be7fa
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/dcompact/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2017 Danny Nguyen
+
+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 .
+*/
+
+#pragma once
+
+// #define USE_I2C
+#define EE_HANDS
diff --git a/keyboards/keebio/iris/keymaps/dcompact/keymap.c b/keyboards/keebio/iris/keymaps/dcompact/keymap.c
new file mode 100644
index 00000000000..ec1ffac8c18
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/dcompact/keymap.c
@@ -0,0 +1,231 @@
+#include QMK_KEYBOARD_H
+
+// Custom Keycodes and Combinations Used
+#define DEL_SHF SFT_T(KC_DEL)
+#define QUAKE LCTL(KC_GRV)
+
+#define WKSP_L LALT(LCTL(KC_LEFT))
+#define WKSP_D LALT(LCTL(KC_DOWN))
+#define WKSP_U LALT(LCTL(KC_UP))
+#define WKSP_R LALT(LCTL(KC_RGHT))
+
+enum custom_layers {
+ _BASE,
+ _LOWER,
+ _RAISE,
+ _FUNC,
+ _GAME,
+ _LNUM,
+ _LFUN,
+ _ADJUST
+};
+
+
+enum custom_keycodes {
+ BASE = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ FUNC,
+ GAME,
+ EXT_GM,
+ LNUM,
+ LFUN,
+ ADJUST
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ DEL_SHF, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, GAME, KC_LGUI, KC_LALT, LOWER, KC_LSFT, _______, _______, KC_SPC, RAISE, KC_RALT, KC_RGUI, FUNC, KC_ENT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LALT, LOWER, KC_LSFT, KC_SPC, RAISE, KC_RALT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, KC_PSCR, KC_MENU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, KC_CAPS, KC_LNUM, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, WKSP_L, WKSP_D, WKSP_U, WKSP_R, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, XXXXXXX, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, XXXXXXX, _______, XXXXXXX
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ QUAKE, KC_GRV, KC_TILD, KC_BSLS, KC_PIPE, KC_LPRN, KC_RPRN, KC_7, KC_8, KC_9, KC_SLSH, KC_EQL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_LCBR, KC_RCBR, KC_4, KC_5, KC_6, KC_ASTR, KC_PLUS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_1, KC_2, KC_3, KC_MINS, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, XXXXXXX, _______, _______, _______, KC_LABK, XXXXXXX, XXXXXXX, KC_RABK, _______, KC_0, KC_DOT, KC_COMM, XXXXXXX,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, KC_LABK, KC_RABK, _______, KC_0
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_FUNC] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX, KC_SLEP, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, KC_WAKE, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, KC_PWR, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_GAME] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TAB, KC_Q, KC_W, KC_E, KC_H, KC_Z, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_U, KC_X, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_F, KC_G, KC_R, KC_M, KC_C, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC, KC_TILD, KC_LALT, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EXT_GM,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_SPC, LNUM, LFUN, XXXXXXX, XXXXXXX, XXXXXXX
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LNUM] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, KC_1, KC_2, KC_3, KC_4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_5, KC_6, KC_7, KC_8, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_9, KC_0, KC_COMM, KC_DOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LFUN] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, BL_STEP, RGB_TOG, RGB_HUI, RGB_SAI, RGB_SAI, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, BL_BRTG, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case FUNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ } else {
+ layer_off(_FUNC);
+ }
+ return false;
+ case GAME:
+ if (!record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+ #endif
+ rgblight_mode(RGBLIGHT_MODE_SNAKE);
+ layer_on(_GAME);
+ }
+ return false;
+ case EXT_GM:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD);
+ layer_off(_GAME);
+ }
+ return false;
+ case LNUM:
+ if (record->event.pressed) {
+ layer_on(_LNUM);
+ } else {
+ layer_off(_LNUM);
+ }
+ return false;
+ case LFUN:
+ if (record->event.pressed) {
+ layer_on(_LFUN);
+ } else {
+ layer_off(_LFUN);
+ }
+ return false;
+ }
+ return true;
+}
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) {
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ }
+ else if (index == 1) {
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+}
diff --git a/keyboards/keebio/iris/keymaps/dcompact/readme.md b/keyboards/keebio/iris/keymaps/dcompact/readme.md
new file mode 100644
index 00000000000..f3f3d8ca6ea
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/dcompact/readme.md
@@ -0,0 +1,45 @@
+# DCompact Layout
+
+**Dvorak, Layered, Mouse-Enabled, Compact -- now with Game Mode~**
+
+_See [the layout source](keymap.c) for the actual layout_
+
+## Goals
+
+The following are the goals kept in mind when designing the DCompact
+layout:
+
+- Provide minimal travel distance when typing English or coding
+- Consistent muscle memory translation from standard QWERTY
+- Stateless typing experience
+- OS-agnostic features, macros, and key placement
+- Minimize dependence on mouse usage
+
+These are generally all met or balanced within reason. This layout is
+not intended at all to be a familiar layout for much of anyone (except
+maybe those who already type in Dvorak) -- this is meant to amplify the
+best parts of having limited, ortholinear keys with layering.
+
+## As Reference Material
+
+If you're reading this hoping to find reference material to implement
+your own layout, then please feel free to copy over this layout and
+make edits where you see fit. I removed a lot of the features I felt
+extraneous to my usage and simplified style where I felt needed. This
+would hopefully mean that my code should feel like a good base to
+develop from for those new to QMK.
+
+_Remember that settings defined in the layout directory override and
+merge with those in the keyboard folder_
+
+## Relevant Links
+
+- [Online Dvorak Layout Trainer](https://learn.dvorak.nl/)
+- [Dvorak Wikipedia Page](https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard)
+- [QMK Docs](https://docs.qmk.fm/#/)
+- [QMK KeyCode Reference](https://docs.qmk.fm/#/keycodes)
+
+## Contact
+
+Maintainer: [Dan](https://github.com/loksonarius)
+
diff --git a/keyboards/keebio/iris/keymaps/fluffactually/config.h b/keyboards/keebio/iris/keymaps/fluffactually/config.h
new file mode 100644
index 00000000000..83203b69bc7
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/fluffactually/config.h
@@ -0,0 +1,22 @@
+/*
+Copyright 2017 Danny Nguyen
+
+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 .
+*/
+
+#pragma once
+
+// #define USE_I2C
+#define EE_HANDS
+#define TAPPING_TOGGLE 2
\ No newline at end of file
diff --git a/keyboards/keebio/iris/keymaps/fluffactually/keymap.c b/keyboards/keebio/iris/keymaps/fluffactually/keymap.c
new file mode 100644
index 00000000000..c2d07b70645
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/fluffactually/keymap.c
@@ -0,0 +1,65 @@
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ 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_LCTL, 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,LSFT_T(KC_EQL),RCTL_T(KC_MINS),KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LGUI, TT(1), KC_ENT, KC_SPC, TT(2), KC_RALT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [1] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PSCR,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, KC_END, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_HOME, _______, _______, KC_PGDN, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_PGUP, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [2] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, RESET,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_MUTE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RGB_TOG,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_VOLU, KC_BRIU, KC_MNXT, KC_MPLY, _______, _______, _______, RGB_SPI, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_VOLD, KC_BRID, KC_MPRV, KC_MSTP, _______, KC_LBRC, KC_LCBR, KC_RCBR, KC_RBRC, RGB_SPD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [3] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, 1, 2, 3);
+}
diff --git a/keyboards/keebio/iris/keymaps/fluffactually/readme.md b/keyboards/keebio/iris/keymaps/fluffactually/readme.md
new file mode 100644
index 00000000000..68092a11a21
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/fluffactually/readme.md
@@ -0,0 +1,14 @@
+# Iris layout by fluffactually
+
+
+
+[KLE link](http://www.keyboard-layout-editor.com/#/gists/a6e67ca7177e7f5e4e44fbc1f09cdfae)
+
+A gentle departure from the default layout. Changes include:
+
+* Vim movement keys
+* Mod-Tap upper thumb keys
+* Layer Tap-Toggle layer keys (TAPPING_TOGGLE 2)
+* Grave Escape
+* Lower backspace
+* Reshuffled Raise layer to make it harder to accidentally reset
diff --git a/keyboards/keebio/iris/keymaps/mojitas/config.h b/keyboards/keebio/iris/keymaps/mojitas/config.h
new file mode 100644
index 00000000000..149a54be7fa
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/mojitas/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2017 Danny Nguyen
+
+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 .
+*/
+
+#pragma once
+
+// #define USE_I2C
+#define EE_HANDS
diff --git a/keyboards/keebio/iris/keymaps/mojitas/keymap.c b/keyboards/keebio/iris/keymaps/mojitas/keymap.c
new file mode 100644
index 00000000000..548bffc6509
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/mojitas/keymap.c
@@ -0,0 +1,217 @@
+#include QMK_KEYBOARD_H
+#include "keymap_swedish.h"
+
+//Heavily modified keymap. Some features:
+//Multiple layouts, I use dvorak as main.
+//Nordic(swedish) signs
+//Symbols, numpad, arrows/navigation reachable under the alpas via the layers
+//Mirrored ctl, alt and shift to be able to use both hands when doing commands
+//Gaming layer, qwerty with space on left half.
+
+enum layer_names {
+ _DVORAK,
+ _COLEMAK,
+ _QWERTY,
+ _WORKMAN,
+ _GAMING,
+ _NUMPAD,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ DVORAK,
+ COLEMAK,
+ WORKMAN,
+ GAMING,
+ NUMPAD,
+};
+
+#define KC_ KC_TRNS
+
+#define SE_YEN ALGR(SE_6) //isn't in the swedish_keymap.h
+#define KC_CATDEL LCTL(LALT(KC_DEL)) // Ctrl alt del
+#define KC_TSKMGR LCTL(S(KC_ESC)) // Ctrl shift esc
+#define KC_NUMP TG(_NUMPAD) // Toggle layer NUMPAD for use in LAYOUT_kc
+#define KC_Close RALT(KC_F4) // Alt F4
+#define KC_MEH1 MEH(KC_1)
+#define KC_MEH2 MEH(KC_2)
+#define KC_MEH3 MEH(KC_3)
+#define KC_MEH4 MEH(KC_4)
+#define KC_MEH5 MEH(KC_5)
+
+#define KC_LOWR MO(_LOWER)
+#define KC_RASE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_DEL , KC_APP , KC_VOLD, KC_MUTE, KC_VOLU, KC_LGUI, KC_GRV , KC_MPRV, KC_MPLY, KC_MNXT, KC_DOWN, KC_ESC ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_TAB , KC_Q , KC_W , KC_E , KC_ R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , SE_ARNG,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , SE_ODIA, SE_ADIA,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_NUMP, KC_ENT , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ KC_LALT, KC_LOWR, KC_BSPC, KC_SPC , KC_RASE, KC_LALT
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+ [_GAMING] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_ESC ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_TAB , KC_Q , KC_W , KC_E , KC_ R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_DEL ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , SE_ODIA, KC_RCTL,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_NUMP, KC_ENT , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ KC_LALT, KC_LOWR, KC_BSPC, KC_SPC , KC_RASE, KC_LALT
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+ [_DVORAK] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_DEL , KC_APP , KC_VOLD, KC_MUTE, KC_VOLU, KC_LGUI, KC_GRV , KC_MPRV, KC_MPLY, KC_MNXT, KC_DOWN, KC_ESC ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_TAB , SE_ARNG, SE_ADIA, SE_ODIA, KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L ,KC_DEL ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S ,KC_RCTL ,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_DOT , KC_Q , KC_J , KC_K , KC_X , KC_NUMP, KC_ENT , KC_B , KC_M , KC_W , KC_V , KC_Z ,KC_RSFT ,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ KC_LALT, KC_LOWR, KC_BSPC, KC_SPC , KC_RASE, KC_LALT
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+ [_COLEMAK] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_DEL , KC_APP , KC_VOLD, KC_MUTE, KC_VOLU, KC_LGUI, KC_GRV , KC_MPRV, KC_MPLY, KC_MNXT, KC_DOWN, KC_ESC ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_TAB , KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , SE_ARNG, SE_ADIA,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , KC_E , KC_I , KC_O , SE_ODIA,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_NUMP, KC_ENT , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ KC_LALT, KC_LOWR, KC_BSPC, KC_SPC , KC_RASE, KC_LALT
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+[_WORKMAN] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_DEL , KC_APP , KC_VOLD, KC_MUTE, KC_VOLU, KC_LGUI, KC_GRV , KC_MPRV, KC_MPLY, KC_MNXT, KC_DOWN, KC_ESC ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_TAB , KC_Q , KC_W , KC_R , KC_W KC_B , KC_J , KC_F , KC_U , KC_P , SE_ARNG, SE_ODIA,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , KC_RCTL,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_NUMP, KC_ENT , KC_K , KC_L , SE_ADIA, KC_DOT , KC_SLSH, KC_RSFT,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ KC_LALT, KC_LOWR, KC_BSPC, KC_SPC , KC_RASE, KC_LALT
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+ [_NUMPAD] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ 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_MEH1, KC_BTN2, KC_MS_U, KC_BTN1, KC_CATDEL, KC_PIPE, KC_P7 , KC_P8 , KC_P9 , KC_SLSH, ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ , KC_MEH4, KC_MS_L, KC_MS_D, KC_MS_R, KC_TSKMGR, KC_COMM, KC_P4 , KC_P5 , KC_P6 , KC_MINS, ,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ , KC_MEH5, KC_ACL0, KC_ACL1, KC_ACL2, KC_MEH3, , KC_PENT , KC_DOT , KC_P1 , KC_P2 , KC_P3 , KC_P0 , ,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ KC_LALT , KC_LOWR, KC_BSPC, , KC_P0 , KC_NLCK
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+
+ [_LOWER] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ 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_CAPS, KC_PGUP, KC_UP , KC_PGDN, KC_ESC, KC_RCBR, KC_EXLM, KC_ASTR, KC_LPRN, KC_UNDS, ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ , KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, KC_RPRN, KC_QUES, SE_LBRC, SE_RBRC, KC_LABK, ,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ , KC_ENT , , , , KC_DEL , , , KC_RABK, SE_LABK, SE_LCBR, SE_RCBR, SE_RABK, ,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ , , , , ,
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+ [_RAISE] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ SE_TILD, KC_EXLM, KC_GRV , KC_EQL , KC_DLR , KC_PERC, SE_PND , SE_EURO , SE_YEN, SE_RCBR, KC_RPRN, ,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ , SE_PIPE , SE_AT , KC_HASH, KC_DQT , KC_PERC, KC_PIPE, KC_7 , KC_8 , KC_9 , KC_PMNS, KC_PSLS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ , SE_BSLS, SE_TILD, SE_SLSH, KC_AMPR, KC_BSLS, KC_COMM, KC_4 , KC_5 , KC_6 , KC_PPLS, KC_PAST,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ , KC_PIPE, SE_CURR, KC_PLUS, KC_CIRC, KC_TILD, , KC_PENT , KC_DOT , KC_1 , KC_2 , KC_3 , KC_0 , KC_PEQL,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ , , KC_DEL , , ,
+ // `--------+--------+--------' `--------+--------+--------'
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ GAMING , DVORAK, WORKMAN, COLEMAK, QWERTY , RESET, _______, _______, _______, _______, KC_PWR, RESET,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______,LGUI(KC_UP),_______,LALT(KC_F4), _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______,LGUI(KC_LEFT),LGUI(KC_DOWN),LGUI(KC_RGHT),_______, _______, DEBUG , RGB_HUD, RGB_SAD, RGB_VAD, BL_STEP,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------' `--------+--------+--------'
+ )
+
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ case NUMPAD:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_NUMPAD);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ case WORKMAN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WORKMAN);
+ }
+ return false;
+ case GAMING:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_GAMING);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/keebio/kbo5000/config.h b/keyboards/keebio/kbo5000/config.h
new file mode 100644
index 00000000000..cfb6bf4ffcc
--- /dev/null
+++ b/keyboards/keebio/kbo5000/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2015 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