diff --git a/docs/feature_stenography.md b/docs/feature_stenography.md
index 099993f8579..148d61b0442 100644
--- a/docs/feature_stenography.md
+++ b/docs/feature_stenography.md
@@ -58,7 +58,7 @@ On the display tab click 'Open stroke display'. With Plover disabled you should
## Interfacing with the code :id=interfacing-with-the-code
-The steno code has three interceptible hooks. If you define these functions, they will be called at certain points in processing; if they return true, processing continues, otherwise it's assumed you handled things.
+The steno code has three interceptable hooks. If you define these functions, they will be called at certain points in processing; if they return true, processing continues, otherwise it's assumed you handled things.
```c
bool send_steno_chord_user(steno_mode_t mode, uint8_t chord[6]);
diff --git a/docs/ja/coding_conventions_c.md b/docs/ja/coding_conventions_c.md
new file mode 100644
index 00000000000..fccd44a3ae0
--- /dev/null
+++ b/docs/ja/coding_conventions_c.md
@@ -0,0 +1,63 @@
+# コーディング規約 (C)
+
+
+
+私たちのスタイルのほとんどはかなり理解しやすいですが、現時点では完全に一貫しているわけではありません。変更箇所周辺のコードのスタイルと一致させる必要がありますが、そのコードに一貫性が無い場合や不明瞭な場合は以下のガイドラインに従ってください:
+
+* 4つのスペース (ソフトタブ) を使ってインデントします。
+* 修正版 One True Brace Style を使います。
+ * 開き括弧: ブロックを開始する文と同じ行の最後
+ * 閉じ括弧: ブロックを開始した文と同じ字下げ
+ * Else If: 行の先頭に閉じ括弧を置き、次の開き括弧を同じ行の最後に置きます。
+ * 省略可能な括弧: 常に括弧を付け加えます。
+ * 良い: if (condition) { return false; }
+ * 悪い: if (condition) return false;
+* C 形式のコメントの使用を推奨します: `/* */`
+ * コメントを機能を説明するストーリーと考えて下さい。
+ * 特定の決定がなされた理由を充分なコメントで説明してください。
+ * 分かり切ったコメントは書かないでください。
+ * 分かり切ったコメントであるか確信できない場合は、コメントを含めてください。
+* 一般的に、行を折り返さないで、必要なだけ長くすることができます。行を折り返すことを選択した場合は、76列を超えて折り返さないでください。
+* 古い形式のインクルードガード (`#ifndef THIS_FILE_H`、`#define THIS_FILE_H`、...、`#endif`) ではなく、ヘッダファイルの先頭で `#pragma once` を使います。
+* プリプロセッサ if の両方の形式を受け付けます: `#ifdef DEFINED` と `#if defined(DEFINED)`
+ * どちらがいいかわからない場合は、`#if defined(DEFINED)` 形式を使ってください。
+ * 複数の条件 `#if` に移行する場合を除き、既存のコードを別のスタイルに変更しないでください。
+* プリプロセッサディレクティブをインデントする方法(あるいはするかどうか)を決定する時は、以下の事に留意してください:
+ * 一貫性よりも読みやすさが重要です。
+ * ファイルの既存のスタイルに従ってください。ファイルのスタイルが混在している場合は、修正しようとしているセクションに適したスタイルに従ってください。
+ * インデントする時は、ハッシュを行の先頭に置き、`#` と `if` の間に空白を追加します。`#` の後ろに4つスペースを入れて開始します。
+ * 周りの C コードのインデントレベルに従うか、プリプロセッサのディレクティブに独自のインデントレベルを設定することができます。コードの意図を最もよく伝えるスタイルを選択してください。
+
+わかりやすいように例を示します:
+
+```c
+/* Enums for foo */
+enum foo_state {
+ FOO_BAR,
+ FOO_BAZ,
+};
+
+/* Returns a value */
+int foo(void) {
+ if (some_condition) {
+ return FOO_BAR;
+ } else {
+ return -1;
+ }
+}
+```
+
+# clang-format を使った自動整形
+
+[Clang-format](https://clang.llvm.org/docs/ClangFormat.html) は LLVM の一部で、誰もが手動で整形するほど暇ではないため、コードを自動整形することができます。私たちは、上記のコーディング規約のほとんどを適用する設定ファイルを提供しています。空白と改行のみを変更するため、省略可能な括弧は自分で付け加えることを忘れないでください。
+
+Windows で clang-format を入手するには [full LLVM インストーラ](http://llvm.org/builds/)を使い、Ubuntu では `sudo apt install clang-format` を使ってください。
+
+コマンドラインから実行する場合、オプションとして `-style=file` を渡すと、QMK ルートディレクトリ内の .clang-format 設定ファイルを自動的に見つけます。
+
+VSCode を使う場合は、標準の C/C++ プラグインが clang-format をサポートしますが、その他にも [独立した拡張機能](https://marketplace.visualstudio.com/items?itemName=LLVMExtensions.ClangFormat) があります。
+
+幾つかのコード (LAYOUT マクロのような)が clang-format によって破壊されるため、これらのファイルで clang-format を実行しないか、整形したくないコードを `// clang-format off` と `// clang-format on` で囲みます。
diff --git a/docs/ja/coding_conventions_python.md b/docs/ja/coding_conventions_python.md
new file mode 100644
index 00000000000..d8d4a31503a
--- /dev/null
+++ b/docs/ja/coding_conventions_python.md
@@ -0,0 +1,331 @@
+# コーディング規約 (Python)
+
+
+
+私たちのスタイルの大部分は PEP8 に従いますが、神経質にならないように幾つかのローカルな変更を加えています。
+
+* サポートされる全てのプラットフォームとの互換性のために、Python 3.6 を対象にしています。
+* 4つのスペース (ソフトタブ) を使ってインデントします
+* 充分なコメントを書くことを推奨します
+ * コメントを機能を説明するストーリーと考えて下さい
+ * 特定の決定がなされた理由を充分なコメントで説明してください。
+ * 分かり切ったコメントは書かないでください
+ * 分かり切ったコメントであるか確信できない場合は、コメントを含めてください。
+* 全ての関数について、役に立つ docstring を必要とします。
+* 一般的に、行を折り返さないで、必要なだけ長くすることができます。行を折り返すことを選択した場合は、76列を超えて折り返さないでください。
+* 私たちの慣習の幾つかは、Python 使いでは無い人にコードベースをより身近にするために、python コミュニティに広まっているものとは競合しています。
+
+# YAPF
+
+コードを整形するために [yapf](https://github.com/google/yapf) を使うことができます。[setup.cfg](setup.cfg) で設定を提供しています。
+
+# インポート
+
+`import ...` や `from ... import ...` をいつ使うかについての厳密なルールはありません。理解しやすさと保守性が究極の目的です。
+
+一般的に、コードを短く理解しやすくするためにモジュールから特定の関数とクラス名をインポートする方が望ましいです。これにより、名前が曖昧になることがあります。代わりにモジュールをインポートするようにします。互換性のあるモジュールをインポートする時を除いて、インポートする時は "as" キーワードを避けるべきです。
+
+インポートは各モジュール1行にする必要があります。標準的な python ルールに従って、インポート文をシステム、サードパーティ、ローカルにグループ化します。
+
+`from foo import *` を使わないでください。代わりにインポートしたいオブジェクトのリストを指定するか、モジュール全体をインポートします。
+
+## インポートの例
+
+良い:
+
+```
+from qmk import effects
+
+effects.echo()
+```
+
+悪い:
+
+```
+from qmk.effects import echo
+
+echo() # echoがどこから来たのかが不明瞭です
+```
+
+良い:
+
+```
+from qmk.keymap import compile_firmware
+
+compile_firmware()
+```
+
+良いですが、上の方がより良いです:
+
+```
+import qmk.keymap
+
+qmk.keymap.compile_firmware()
+```
+
+# 命令文
+
+各行1文としてください。
+
+可能な場合(例えば `if foo: bar`)でも、2つの文を1行にまとめないでください。
+
+# 命名
+
+`module_name`, `package_name`, `ClassName`, `method_name`, `ExceptionName`, `function_name`, `GLOBAL_CONSTANT_NAME`, `global_var_name`, `instance_var_name`, `function_parameter_name`, `local_var_name`.
+
+関数名、変数名 およびファイル名は説明的でなければなりません; 略語を避けます。特に、プロジェクト外の読み手に曖昧あるいは馴染みのない略語を使わず、単語内の文字を削除して略さないでください。
+
+常に .py のファイル名の拡張子を使います。ダッシュを使わないでください。
+
+## 避けるべき名前
+
+* カウンタあるいはイテレータ以外の1文字の名前。try/except 文では例外の識別子として `e` を使うことができます。
+* パッケージ/モジュール名内のダッシュ (`-`)
+* `__double_leading_and_trailing_underscore__` (2つのアンダースコアで始まる名前と終わる名前、Python で予約済み)
+
+# Docstring
+
+docstring の一貫性を維持するために、以下のガイドラインを設定しました。
+
+* マークダウン(Markdown)形式の使用
+* 常に少なくとも1つの改行を含む3つのダブルクォートの docstring を使ってください: `"""\n"""`
+* 最初の行は、関数が行うことの短い (70文字未満) 説明です。
+* docstring が更に必要な場合は、説明と残りの間に空白行を入れます。
+* 開始の3つのダブルクォートと同じインデントレベルでインデント行を始めます
+* 以下で説明する形式を使って全ての関数の引数について記述します
+* Args:、Returns: および Raises: が存在する場合、それらは docstring の最後の3つの要素で、それぞれ空白行で区切られなければなりません。
+
+## 簡単な docstring の例
+
+```
+def my_awesome_function():
+ """1970 Jan 1 00:00 UTC からの秒数を返します。
+ """
+ return int(time.time())
+```
+
+## 複雑な docstring の例
+
+```
+def my_awesome_function():
+ """1970 Jan 1 00:00 UTC からの秒数を返します。
+
+ この関数は常に整数の秒数を返します。
+ """
+ return int(time.time())
+```
+
+## 関数の引数の docstring の例
+
+```
+def my_awesome_function(start=None, offset=0):
+ """1970 Jan 1 00:00 UTC からの秒数を返します。
+
+ この関数は常に整数の秒数を返します。
+
+
+ Args:
+ start
+ 1970 Jan 1 00:00 UTC の代わりの開始時間
+
+ offset
+ 最初の引数からこの秒数が引かれた答えを返します
+
+ Returns:
+ 秒数を表す整数。
+
+ Raises:
+ ValueError
+ `start` あるいは `offset` が正の数ではない場合
+ """
+ if start < 0 or offset < 0:
+ raise ValueError('start and offset must be positive numbers.')
+
+ if not start:
+ start = time.time()
+
+ return int(start - offset)
+```
+
+# 例外
+
+例外は例外的な状況を処理するために使われます。フローの制御のために使われるべきではありません。これは Python の「許しを請う」という規範からの逸脱です。例外をキャッチする場合、異常な状況を処理する必要があります。
+
+何らかの理由で全ての例外のキャッチを使う場合は、cli.log を使って例外とスタックトレースを記録する必要があります。
+
+try/except ブロックをできるだけ短くします。多数の try 文が必要な場合は、コードを再構成する必要があるかもしれません。
+
+# タプル
+
+1項目のタプルを定義する場合、タプルを使用していることが明らかになるように、常に末尾のカンマを含めます。暗黙的な1項目のタプルのアンパックに頼らないでください。明確なリストを使う方が良いです。
+
+これはよく使用される printf 形式の書式文字列を使う場合に、特に重要です。
+
+# リストと辞書
+
+シーケンス形式と末尾のカンマとを区別するように YAPF を設定しました。末尾のカンマが省略されると、YAPF はシーケンスを1つの行として整形します。末尾のカンマがある場合、YAPF はシーケンスを1行1項目で整形します。
+
+一般的に1行が短い定義になるようにすべきです。読みやすさと保守性を向上させるために、後からではなく早めに複数の行を分割してください。
+
+# 括弧
+
+過度な括弧は避けますが、括弧を使ってコードを理解しやすくします。タプルを明示的に返すか、あるいは数式の一部である場合を除き、return 文で括弧を使わないでください。
+
+# 書式文字列
+
+一般的に printf 形式の書式文字列を用います。例:
+
+```
+name = 'World'
+print('Hello, %s!' % (name,))
+```
+
+このスタイルはログモジュールで使われており、私たちはそれを広範囲で利用しており、一貫性を保つために他の場所でも採用しています。これは、私たちの気まぐれな読者の大部分である C プログラマにもおなじみのスタイルです。
+
+付属の CLI モジュールは、パーセント (%) 演算子を使わずにこれらを使うことをサポートしています。詳細は、`cli.echo()` と様々な `cli.log` 関数 (例えば、`cli.log.info()`) を見てください。
+
+# 内包表記とジェネレータ表記
+
+内包表記とジェネレータの自由な使用を推奨しますが、あまりに複雑にしないでください。複雑になる場合は、理解しやすい for ループで代替します。
+
+# ラムダ
+
+使っても問題ありませんが、おそらく避けるべきです。内包表記とジェネレータを使えば、ラムダの必要性は以前ほど強くありません。
+
+# 条件式
+
+変数の割り当てでは問題ありませんが、そうでなければ避けるべきです。
+
+条件式はコードに続く if 文です。例えば:
+
+```
+x = 1 if cond else 2
+```
+
+一般にこれらを関数の引数、シーケンス項目などとして使用することはお勧めできません。見落としやすくなります。
+
+# デフォルト引数
+
+推奨されていますが、値は不変オブジェクトでなければなりません。
+
+デフォルト値に引数リストを指定する場合は、その場で変更できないオブジェクトを指定するように常に注意してください。可変オブジェクトを使うと変更は呼び出しの間で持続しますが、これは通常あなたの望むものではありませんそれがあなたのやろうとしていることであっても、他の人にとっては混乱するもので理解を妨げます。
+
+悪い:
+
+```
+def my_func(foo={}):
+ pass
+```
+
+良い:
+
+```
+def my_func(foo=None):
+ if not foo:
+ foo = {}
+```
+
+# プロパティ
+
+getter および setter 関数の代わりにプロパティを常に使います。
+
+```
+class Foo(object):
+ def __init__(self):
+ self._bar = None
+
+ @property
+ def bar(self):
+ return self._bar
+
+ @bar.setter
+ def bar(self, bar):
+ self._bar = bar
+```
+
+# True/False の評価
+
+一般的に、if 文で等価性を調べるのではなく、暗黙的な True/False 評価を行うべきです。
+
+悪い:
+
+```
+if foo == True:
+ pass
+
+if bar == False:
+ pass
+```
+
+良い:
+
+```
+if foo:
+ pass
+
+if not bar:
+ pass
+```
+
+# デコレータ
+
+適切な時に使ってください。理解に役立つ時を除き、魔法の(ように見える技巧の)使いすぎは避けるようにしてください。
+
+# スレッドとマルチプロセス
+
+避けるべきです。これが必要な場合は、私たちがコードをマージする前に十分な理由を述べる必要があります。
+
+# 強力な機能
+
+Python は非常に柔軟な言語で、独自のメタクラス、バイトコードへのアクセス、実行中コンパイル、動的な継承、オブジェクトの親の変更、インポートハック、リフレクション、システム内部の変更など、多くの素晴らしい機能を提供します。
+
+これらを使わないでください。
+
+パフォーマンスは私たちにとって重要な関心ごとではなく、コードのわかりやすさに関心があります。私たちは、コードベースを1日か2日しかいじっていない人が利用できるようにしたいです。これらの機能は一般的に理解のしやすさを犠牲にするため、より高速あるいはよりコンパクトなコードよりも、容易に理解できるコードの方が望ましいです。
+
+一部の標準ライブラリモジュールはこれらの手法を使っており、これらのモジュールを利用しても問題ありません。ただし、それらを使う時には、読みやすさと理解のしやすさを忘れないでください。
+
+# 型アノテーション付きコード
+
+今のところ型アノテーションシステムを使っていないため、コードにアノテーションをつけないようにしてください。将来的にはこれを再検討する可能性があります。
+
+# 関数の長さ
+
+小さくて焦点のあった関数にしてください。
+
+長い関数が時には適切であることを理解しているので、関数の長さには厳密な制限はありません。関数が約40行を超える場合は、プログラムの構造を損なわずに分割できるかどうかを検討してください。
+
+今のところ長い関数が完全に機能するとしても、数か月でそれを変更する人が新しい挙動を追加するかもしれません。これにより見つけにくいバグが発生するかもしれません。関数を短くかつシンプルにすることで、他の人がコードを読んで修正しやすくします。
+
+幾つかのコードで作業をすると、長く複雑な関数を見つけるかもしれません。既存コードを変更することを怖がらないでください: もし、難しいことが判明したり、エラーがデバッグしづらいとわかったり、いくつかの異なるコンテキストで一部を使いたいような関数を扱っている場合、関数を小さくてより扱いやすい単位に分割することを検討してください。
+
+# FIXME
+
+FIXME をコードに残しても構いません。なぜでしょうか?このコードを文章化しないままにするよりも、少なくとも考え抜く必要がある(あるいは混乱している)コードの一部を文章化するように奨励する方が、このコードを文章化しないままにするよりも良いです。
+
+全ての FIXME は以下のように書式化されるべきです:
+
+```
+FIXME(username): 何々機能が完了したらこのコードを再検討する。
+```
+
+...username はあなたの GitHub のユーザ名です。
+
+# テスト
+
+統合テストと単体テストの組み合わせを使ってコードが可能な限りバグが無いようにします。全てのテストは `lib/python/qmk/tests/` にあります。`qmk pytest` を使って全てのテストを実行することができます。
+
+これを書いている時点では、テストは全く完全なものではありません。現在のテストを見て、テストされていない状況のための新しいテストケースを書くことは、コードベースに精通し、QMK に貢献するという両方の点で素晴らしい方法です。
+
+## 統合テスト
+
+統合テストは `lib/python/qmk/tests/test_cli_commands.py` にあります。ここで実際に CLI コマンドが実行され、全体的な動作が検証されます。[`subprocess`](https://docs.python.org/3.6/library/subprocess.html#module-subprocess) を使って各 CLI コマンドを起動し、正しく動作するかを判断するために出力とリターンコードの組み合わせを使います。
+
+## ユニットテスト
+
+`lib/python/qmk/tests/` 内の他の `test_*.py` ファイルはユニットテストを含みます。`lib/python/qmk/` 内の個々の関数のテストをここに書くことができます。一般的にこれらのファイルはモジュールに基づいて名前を付けられ、ドットはアンダースコアで置き換えられます。
+
+これを書いている時点では、テストのためのモックを作っていません。これを変更する手伝いをしたい場合は、[issue を開く](https://github.com/qmk/qmk_firmware/issues/new?assignees=&labels=cli%2C+python&template=other_issues.md&title=) か [Discord の #cli に参加](https://discord.gg/heQPAgy)し、そこで会話を開始してください。
diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md
index a7026a0994e..7e3d9bf274f 100644
--- a/docs/reference_keymap_extras.md
+++ b/docs/reference_keymap_extras.md
@@ -22,6 +22,7 @@ To use these, simply `#include` the corresponding [header file](https://github.c
|Estonian |`keymap_estonian.h` |
|Finnish |`keymap_finnish.h` |
|French |`keymap_french.h` |
+|French (AFNOR) |`keymap_french_afnor.h` |
|French (BÉPO) |`keymap_bepo.h` |
|French (Belgium) |`keymap_belgian.h` |
|French (Switzerland) |`keymap_fr_ch.h` |
diff --git a/keyboards/4pplet/steezy60/rev_a/config.h b/keyboards/4pplet/steezy60/rev_a/config.h
index 654454072d4..9aceedc6635 100644
--- a/keyboards/4pplet/steezy60/rev_a/config.h
+++ b/keyboards/4pplet/steezy60/rev_a/config.h
@@ -12,7 +12,7 @@
/* key matrix size */
#define MATRIX_ROWS 5
-#define MATRIX_COLS 15
+#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}
diff --git a/keyboards/acheron/shark/keymaps/ajp10304/readme.md b/keyboards/acheron/shark/keymaps/ajp10304/readme.md
new file mode 100644
index 00000000000..73e5b831e01
--- /dev/null
+++ b/keyboards/acheron/shark/keymaps/ajp10304/readme.md
@@ -0,0 +1,118 @@
+# AJP10304 Custom Shark Layout
+# Also available for the Planck, JJ40 and Atreus50
+
+**Note:** In the tables below where there are two characters on a key,
+the second is the output when shift is applied.
+
+**Note:** The below tables assume a UK layout.
+
+#### Flashing
+
+`make acheron/shark:ajp10304:flash`
+
+##### Main Qwerty Layer
+
+* Tab: when held, operates as shift.
+* Enter: when held, operates as shift.
+* MENU: perform right-click
+
+| | | | | | | | | | | | |
+| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
+| Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+| Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
+| Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
+| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 |
+
+##### Function Layer
+Activated when `fn` held in the above `qwerty` layer.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
+| Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
+| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn2 |
+
+##### Lower Layer
+Activated when `Lower` is held in the above `qwerty` layer.
+
+* Numbers are along the top row, their shifted counterparts are on row 2.
+* WrdBks: `backspace` with `ctrl` applied. I.e. delete a word.
+* WrdDel: `delete` with `ctrl` applied. I.e. forward delete a word.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
+| ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
+| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
+| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
+
+##### Raise Layer
+Activated when `Raise` is held in the above `qwerty` layer.
+
+* Preferred layer for typing brackets.
+* Allows for cursor navigation to be used solely with the right hand.
+* WRDSEL: Select the word where the cursor is.
+* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
+| ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
+| ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
+| | | | { | } | ||<| LEFT | DOWN |RIGHT |>||ZOOM -|
+| Mouse | | | | | Alt | Enter |Raise | | | | |
+
+##### Lower + Raise
+Activated when `Lower` and `Raise` are held together in the above `qwerty` layer.
+
+* Audio controls in the same position as cursor keys from the `Raise` layer.
+* ????: Runs a macro for outputting a text string. Do not use this store passwords.
+* Reset: Enter bootloader for flashing firmware to the keyboard.
+* CAPS: Toggle caps lock.
+* Macro functions: Allows recording of macros. To start recording the macro, press either REC1 or REC2.
+To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2.
+* MAC: Toggle MAC OS extensions to layers. This allows MLWR to be enabled with LOWER,
+MRSE with RAISE, MFNC with FUNC and MFNC2 with FUNC2 respectively.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| ???? | Reset|Qwerty| | | REC1 | REC2 | | | | | Del |
+| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | |
+| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | |
+| | | | | | | | | DYN | | | |
+
+##### Function 2 Layer
+Activated when `fn` held in the above `qwerty` layer.
+* WRDSEL: Select the word where the cursor is.
+* LNDEL: Delete the line where the cursor is.
+* LNSEL: Select the line where the cursor is.
+* DUP: Duplicate the selected text.
+* LNJOIN: Join the line where the cursor is with the following line.
+* MODE: Print either `PC` or `OSX` depending on what layer mode is active.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | |WRDSEL| | | | LNDEL| | | | | |
+| | | LNSEL| DUP | | | | |LNJOIN| | | |
+| | UNDO | CUT | COPY | PASTE| | | | | | | MODE |
+| | | | | | | | | | | | |
+
+##### Mouse Layer
+Activated when `fn` and `raise` held together.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| ESC | | | | | | | | BTN3 | | | |
+| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
+| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | |
+| | | | | | | | | | | | |
+
+##### Number Pad Layout
+Activated when holding `Esc` key.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+| | | | | | | | 4 | 5 | 6 | * | |
+| | | | | | | | 1 | 2 | 3 | + | |
+| | | | | | | | 0 | . | , | - | |
diff --git a/keyboards/aos/tkl/config.h b/keyboards/aos/tkl/config.h
index 4e6ab3e3dc7..5a4b93f6448 100644
--- a/keyboards/aos/tkl/config.h
+++ b/keyboards/aos/tkl/config.h
@@ -53,4 +53,5 @@ along with this program. If not, see .
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 50
#endif
diff --git a/keyboards/atreus/atreus.h b/keyboards/atreus/atreus.h
index a3d35077599..f4e7ba7f391 100644
--- a/keyboards/atreus/atreus.h
+++ b/keyboards/atreus/atreus.h
@@ -22,6 +22,8 @@
#include "astar.h"
#elif KEYBOARD_atreus_astar_mirrored
#include "astar_mirrored.h"
+#elif KEYBOARD_atreus_feather
+ #include "feather.h"
#elif KEYBOARD_atreus_teensy2
#include "teensy2.h"
#elif KEYBOARD_atreus_promicro
diff --git a/keyboards/atreus/feather/config.h b/keyboards/atreus/feather/config.h
new file mode 100644
index 00000000000..72c9cd716b1
--- /dev/null
+++ b/keyboards/atreus/feather/config.h
@@ -0,0 +1,40 @@
+/* Copyright 2019
+ *
+ * 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"
+
+/*
+ * 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, D3, D2 }
+// #define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#define MATRIX_ROW_PINS { B7, D6, C7, F5 }
+#define MATRIX_COL_PINS { D7, B5, D1, D0, C6, B6, F0, D2, D3, F4, F1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+#define OUTPUT_AUTO_ENABLE
diff --git a/keyboards/atreus/feather/feather.c b/keyboards/atreus/feather/feather.c
new file mode 100644
index 00000000000..ceebc51c232
--- /dev/null
+++ b/keyboards/atreus/feather/feather.c
@@ -0,0 +1,16 @@
+/* Copyright 2019
+ *
+ * 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 "feather.h"
diff --git a/keyboards/atreus/feather/feather.h b/keyboards/atreus/feather/feather.h
new file mode 100644
index 00000000000..bf74ceb17f4
--- /dev/null
+++ b/keyboards/atreus/feather/feather.h
@@ -0,0 +1,17 @@
+/* Copyright 2019
+ *
+ * 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
diff --git a/keyboards/atreus/feather/readme.md b/keyboards/atreus/feather/readme.md
new file mode 100644
index 00000000000..f584da22c01
--- /dev/null
+++ b/keyboards/atreus/feather/readme.md
@@ -0,0 +1,60 @@
+# Bluetreus - a conversion of an Atreus to use a Bluetooth microcontroller
+
+I have created a keymap for this with Bluetooth control on layer 2 so that you
+can switch the keyboard between auto, USB only, and Bluetooth only. I'm
+working on fixing turning on auto by default, but have still not succeeded.
+
+To build it and flash it, do:
+
+```
+make atreus/feather:clash:flash
+```
+
+## Wiring it up
+Physically, SDA to pin 13 on the new board are connected to what 9-1 were
+connected to on the old board. Pin 0 from the old board is brought over to the
+other side with a jumper wire to pin a2. TX, RX, A5, A4, A3 on the new board
+connect to what a0 to 12 connected to on the old board. GND attaches to g.
+You have to bend some of the pins at about a 45 degree angle to make them line up.
+Here's a side view of what the most bent pins look like:
+
+Here's a top view, USB port down, wireless antenna up. Note: the USB port orientation is opposite what it used to be.
+
+
+### New board:
+This is an [Adafruit Feather BLE](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/pinouts)
+
+|QMK | Screen Print | Feather |SCREEN|QMK REF |
+|----|--------------|-------------|------|---------|
+| D1 | SDA | RADIO | dfu | |
+| D0 | SCL | | 1/TX | D3 |
+| C6 | 5 | | 0/RX | D2 |
+| D7 | 6 | | MISO | B3/Blue |
+| B5 | 9 | | MOSI | B2/Blue |
+| B6 | 10 | | SCK | B1/Blue |
+| B7 | 11 | | A5 | F0 |
+| D6 | 12 | | a4 | F1 |
+| C7 | 13 | | a3 | F4 |
+| | usb | | a2 | F5 |
+| | e0 | | a1 | F6 |
+| | bat | | a0 | |
+| | Battery | | GND | |
+| | Connector | | ARf | |
+| | | | | USB PORT | 3V | |
+| | v v | | RST | |
+
+### Old board:
+This is an A Star, non-flipped
+
+|QMK| Scrn | A | Scrn|QMK |
+|---|------|-----|-----|----|
+| b5| 9 | USB | a0 | F7 |
+| b4| 8 | port| a1 | F6 |
+| e6| 7 | | 10 | B6 |
+| d7| 6 | | 11 | B7 |
+| c6| 5 | | 12 | D6 |
+| d4| 4 | | rst | RST|
+| d0| 3 | | 3v | x |
+| d1| 2 | | 5v | x |
+| d3| 1 | | g | G |
+| d2| 0 | | v | x |
diff --git a/keyboards/atreus/feather/rules.mk b/keyboards/atreus/feather/rules.mk
new file mode 100644
index 00000000000..e40b103acb1
--- /dev/null
+++ b/keyboards/atreus/feather/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# 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
+#
+BLUETOOTH = AdafruitBLE
+CONSOLE_ENABLE = no
diff --git a/keyboards/atreus/keymaps/clash/keymap.c b/keyboards/atreus/keymaps/clash/keymap.c
new file mode 100644
index 00000000000..3a8b5bf4793
--- /dev/null
+++ b/keyboards/atreus/keymaps/clash/keymap.c
@@ -0,0 +1,41 @@
+#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 _QW 0
+#define _RS 1
+#define _LW 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT( /* Qwerty */
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
+ KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT
+ ),
+
+ /*
+ * ! @ up { } || pgup 7 8 9 *
+ * # left down right $ || pgdn 4 5 6 +
+ * [ ] ( ) & || ` 1 2 3 \
+ * lower insert super shift del ctrl || alt space fn . 0 =
+ */
+ [_RS] = LAYOUT( /* [> RAISE <] */
+ KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
+ KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
+ KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
+ TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_DEL, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ),
+ /*
+ * insert home mup end pgup || mouse1 F7 F8 F9 F10
+ * USB mlft mdwn mrght pgdn || mouse2 F4 F5 F6 F11
+ * Blue volup reset || mouse3 F1 F2 F3 F12
+ * auto voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
+ */
+ [_LW] = LAYOUT( /* [> LOWER <] */
+ KC_INS, KC_HOME, KC_MS_U, KC_END, KC_PGUP, KC_BTN1, KC_F7, KC_F8, KC_F9, KC_F10 ,
+ OUT_USB, KC_MS_L, KC_MS_D, KC_MS_R, KC_PGDN, KC_BTN2, KC_F4, KC_F5, KC_F6, KC_F11 ,
+ OUT_BT, KC_VOLU, KC_NO, KC_NO, RESET, KC_BTN3, KC_F1, KC_F2, KC_F3, KC_F12 ,
+ OUT_AUTO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS )
+};
diff --git a/keyboards/bioi/g60ble/config.h b/keyboards/bioi/g60ble/config.h
new file mode 100644
index 00000000000..e7515ec8945
--- /dev/null
+++ b/keyboards/bioi/g60ble/config.h
@@ -0,0 +1,50 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6583
+#define PRODUCT_ID 0x6080
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Basic IO Instruments
+#define PRODUCT BIOI G60 BLE
+#define DESCRIPTION BIOI G60 BLE
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS \
+ { E6, B0, F1, F5, F4 }
+#define MATRIX_COL_PINS \
+ { F6, F7, B3, C7, C6, B6, B5, D5, B4, D7, D6, D4, D1, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+# define BACKLIGHT_LEVELS 8
+#endif
+
+/* 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
+
+#define RGB_DI_PIN B1
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 36
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#define KEYBOARD_LOCK_ENABLE
+#define MAGIC_KEY_LOCK L
diff --git a/keyboards/bioi/g60ble/g60ble.h b/keyboards/bioi/g60ble/g60ble.h
new file mode 100644
index 00000000000..f1e1699ddcf
--- /dev/null
+++ b/keyboards/bioi/g60ble/g60ble.h
@@ -0,0 +1,89 @@
+#pragma once
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ 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, K47, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K48, K4C, K4D \
+) { \
+ { 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, XXX, XXX, K45, XXX, K47, K48, K49, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { 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, XXX, K2D }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_iso( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ 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, K3D, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { 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, XXX }, \
+ { 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, XXX, K3D }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ 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, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K41, K42, K45, K4B, K4C \
+) { \
+ { 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, XXX }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { XXX, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, XXX, K4B, K4C, XXX } \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49, \
+ 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, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4A, K4B, K4C, K4D \
+) { \
+ { 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, XXX, K2D }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_tsangan_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K49,\
+ 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, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3C, \
+ K40, K41, K42, K45, K4B, K4C, K4D \
+) { \
+ { 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, XXX, K2D }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, XXX, K4B, K4C, K4D } \
+}
diff --git a/keyboards/bioi/g60ble/info.json b/keyboards/bioi/g60ble/info.json
new file mode 100644
index 00000000000..f9c7408e5f5
--- /dev/null
+++ b/keyboards/bioi/g60ble/info.json
@@ -0,0 +1,414 @@
+{
+ "keyboard_name": "BIOI G60 BLE",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "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": "~", "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": "~", "x": 12.75, "y": 2 },
+ { "label": "Enter", "x": 13.75, "y": 2, "w": 1.25 },
+ { "label": "Shift", "x": 0, "y": 3 },
+ { "label": "|", "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": "Up", "x": 12, "y": 3 },
+ { "label": "Shift", "x": 13, "y": 3 },
+ { "label": "Fn", "x": 14, "y": 3 },
+ { "label": "Ctrl", "x": 0, "y": 4, "w": 1.25 },
+ { "label": "Alt", "x": 1.25, "y": 4, "w": 1.25 },
+ { "label": "OS", "x": 2.5, "y": 4, "w": 1.25 },
+ { "x": 3.75, "y": 4, "w": 6.25 },
+ { "label": "OS", "x": 10, "y": 4 },
+ { "label": "Alt", "x": 11, "y": 4 },
+ { "label": "Left", "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_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_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_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 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/bioi/g60ble/keymaps/default/keymap.c b/keyboards/bioi/g60ble/keymaps/default/keymap.c
new file mode 100644
index 00000000000..b17bfbb1217
--- /dev/null
+++ b/keyboards/bioi/g60ble/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+#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,
+ 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, KC_RGUI, KC_APP, KC_RCTL
+)
+
+};
diff --git a/keyboards/bioi/g60ble/keymaps/via/keymap.c b/keyboards/bioi/g60ble/keymaps/via/keymap.c
new file mode 100644
index 00000000000..478d83bc512
--- /dev/null
+++ b/keyboards/bioi/g60ble/keymaps/via/keymap.c
@@ -0,0 +1,39 @@
+#include QMK_KEYBOARD_H
+
+// clang-format off
+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,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(2, 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_UP, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RGUI, KC_LEFT, KC_APP, KC_RCTL
+),
+
+[1] = LAYOUT_all(
+ _______, 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, RESET, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, _______, KC_ASTR, KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______, _______,
+ RGB_MOD, _______, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, _______, KC_PLUS, KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, BL_STEP, _______,
+ RGB_TOG, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, BL_TOGG
+),
+
+[2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, XXXXXXX, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[3] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+// clang-format on
diff --git a/keyboards/bioi/g60ble/keymaps/via/rules.mk b/keyboards/bioi/g60ble/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/bioi/g60ble/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/bioi/g60ble/readme.md b/keyboards/bioi/g60ble/readme.md
new file mode 100644
index 00000000000..f42d90164ed
--- /dev/null
+++ b/keyboards/bioi/g60ble/readme.md
@@ -0,0 +1,15 @@
+# BIOI G60 BLE
+
+
+
+A 60% keyboard with Bluetooth LE support
+
+* Keyboard Maintainer: [Joshua Rubin](https://github.com/joshuarubin)
+* Hardware Supported: R2 both default and hotswap versions
+* Hardware Availability: https://play-keyboard.store/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bioi/g60ble: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/bioi/g60ble/rules.mk b/keyboards/bioi/g60ble/rules.mk
new file mode 100644
index 00000000000..464a6d136c6
--- /dev/null
+++ b/keyboards/bioi/g60ble/rules.mk
@@ -0,0 +1,31 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# 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
+# comment out to disable the options.
+#
+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
+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 keyboard backlight functionality
+RGBLIGHT_ENABLE = yes
+LTO_ENABLE = yes
+
+LAYOUTS = 60_ansi 60_iso 60_hhkb 60_ansi_split_bs_rshift 60_tsangan_hhkb
diff --git a/keyboards/centromere/centromere.h b/keyboards/centromere/centromere.h
index 826e8dde448..d07a53b1ac0 100644
--- a/keyboards/centromere/centromere.h
+++ b/keyboards/centromere/centromere.h
@@ -45,3 +45,5 @@
{ KC_NO, KC_NO, k32, k33, k34, k35, k36, k37, KC_NO, KC_NO }, \
{ KC_NO, KC_NO, k2a, k1a, k0a, k0b, k1b, k2b, KC_NO, KC_NO } \
}
+
+#define LAYOUT_split_3x6_3 LAYOUT
diff --git a/keyboards/centromere/rules.mk b/keyboards/centromere/rules.mk
index fee99d36305..866c33138c9 100644
--- a/keyboards/centromere/rules.mk
+++ b/keyboards/centromere/rules.mk
@@ -40,3 +40,5 @@ OPT_DEFS += -DCENTROMERE_PROMICRO
# # project specific files
SRC = matrix.c
+
+LAYOUTS = split_3x6_3
diff --git a/keyboards/chili/README.md b/keyboards/chili/README.md
new file mode 100644
index 00000000000..a383f98fb0a
--- /dev/null
+++ b/keyboards/chili/README.md
@@ -0,0 +1,15 @@
+# YDKB Chili
+
+[Chili PCB](https://i.imgur.com/fKi896a.jpg)
+
+The YDKB Chili is a Cherry G80-3000 replacement PCB utilizing the ATmega32U4 microcontroller.
+
+* Keyboard Maintainer: QMK community
+* Hardware Supported: YDKB Chili
+* Hardware Availability: [TaoBao](https://item.taobao.com/item.htm?id=565823984744)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make chili: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/chili/chili.c b/keyboards/chili/chili.c
new file mode 100644
index 00000000000..40d3528b080
--- /dev/null
+++ b/keyboards/chili/chili.c
@@ -0,0 +1,42 @@
+/* Copyright 2017 Mathias Andersson
+ *
+ * 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 "chili.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ led_init_ports();
+ matrix_init_user();
+}
+
+void led_init_ports(void) {
+ setPinOutput(B1);
+ writePinHigh(B1);
+ setPinOutput(B2);
+ writePinHigh(B2);
+ setPinOutput(B3);
+ writePinHigh(B3);
+}
+
+bool led_update_kb(led_t led_state) {
+ bool res = led_update_user(led_state);
+ if(res) {
+ writePin(B1, !led_state.num_lock);
+ writePin(B2, !led_state.caps_lock);
+ writePin(B3, !led_state.scroll_lock);
+ }
+ return res;
+}
diff --git a/keyboards/chili/chili.h b/keyboards/chili/chili.h
new file mode 100644
index 00000000000..f5e1444b94b
--- /dev/null
+++ b/keyboards/chili/chili.h
@@ -0,0 +1,39 @@
+/* Copyright 2017 Mathias Andersson
+ *
+ * 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_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K69, K68, K67, K66, K65, K64, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K79, K78, K77, K76, K75, K74, K73, K72, K63, K62, K61, K60, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K89, K88, K87, K86, K85, K84, K83, K82, K81, K80, K90, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K99, K98, K97, K95, K92, K71, K70, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, KA9, KA8, KA6, KA7, K96, K94, K93, K91, KA0, \
+ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, KA5, KA4, KA3, KA2, KA1 \
+) { \
+ { 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 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77, K78, K79 }, \
+ { K80, K81, K82, K83, K84, K85, K86, K87, K88, K89 }, \
+ { K90, K91, K92, K93, K94, K95, K96, K97, K98, K99 }, \
+ { KA0, KA1, KA2, KA3, KA4, KA5, KA6, KA7, KA8, KA9 } \
+}
diff --git a/keyboards/chili/config.h b/keyboards/chili/config.h
new file mode 100644
index 00000000000..b12b97f0093
--- /dev/null
+++ b/keyboards/chili/config.h
@@ -0,0 +1,179 @@
+/*
+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 0x5945 // "YE"
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER YDKB
+#define PRODUCT Chili
+#define DESCRIPTION QMK keyboard firmware for Chili, a G80-3000 replacement PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 11
+#define MATRIX_COLS 10
+
+// ROWS: Top to bottom, COLS: Left to right
+/* Row pin configuration
+*/
+#define MATRIX_ROW_PINS { F5, F4, F1, F0, E6, B0, D5, D3, D2, D1, D0 }
+/* Column pin configuration
+ */
+#define MATRIX_COL_PINS { D4, F6, F7, C7, C6, B6, B5, B4, D7, D6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+/* Underlight configuration
+ */
+#define RGB_DI_PIN B3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 30 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 5
+#define RGBLIGHT_SAT_STEP 10
+#define RGBLIGHT_VAL_STEP 10
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* 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 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/chili/info.json b/keyboards/chili/info.json
new file mode 100644
index 00000000000..414ae9b7fa4
--- /dev/null
+++ b/keyboards/chili/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "YDKB Chili",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "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":"~", "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":"Backsp", "x":13, "y":1.5}, {"x":14, "y":1.5}, {"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":"Num Lock", "x":18.5, "y":1.5}, {"label":"/", "x":19.5, "y":1.5}, {"label":"*", "x":20.5, "y":1.5}, {"label":"-", "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":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "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":"PgDn", "x":17.25, "y":2.5}, {"label":"7", "x":18.5, "y":2.5}, {"label":"8", "x":19.5, "y":2.5}, {"label":"9", "x":20.5, "y":2.5}, {"label":"+", "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":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"4", "x":18.5, "y":3.5}, {"label":"5", "x":19.5, "y":3.5}, {"label":"6", "x":20.5, "y":3.5}, {"x":21.5, "y":3.5}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"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":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"1", "x":18.5, "y":4.5}, {"label":"2", "x":19.5, "y":4.5}, {"label":"3", "x":20.5, "y":4.5}, {"label":"Enter", "x":21.5, "y":4.5, "h":2}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":3}, {"x":6.75, "y":5.5, "w":3}, {"label":"Alt", "x":9.75, "y":5.5, "w":1.5}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}, {"label":"0", "x":18.5, "y":5.5}, {"x":19.5, "y":5.5}, {"label":".", "x":20.5, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/chili/keymaps/default/keymap.c b/keyboards/chili/keymaps/default/keymap.c
new file mode 100644
index 00000000000..32ac9a066d2
--- /dev/null
+++ b/keyboards/chili/keymaps/default/keymap.c
@@ -0,0 +1,35 @@
+/* Copyright 2017 Mathias Andersson
+ *
+ * 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
+
+//Layers
+
+enum {
+ BASE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = 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_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_NO, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_NO,
+ 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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_NO, KC_PDOT
+ ),
+
+};
diff --git a/keyboards/chili/keymaps/via/keymap.c b/keyboards/chili/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9d5cdd303ff
--- /dev/null
+++ b/keyboards/chili/keymaps/via/keymap.c
@@ -0,0 +1,61 @@
+/* Copyright 2017 Mathias Andersson
+ *
+ * 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
+
+//Layers
+
+enum {
+ BASE = 0,
+ FUNCTION,
+ ALTERNATE,
+ LAST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [BASE] = 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_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_NO, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_NO,
+ 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_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_NO, KC_PDOT
+ ),
+ [FUNCTION] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [ALTERNATE] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [LAST] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/chili/keymaps/via/rules.mk b/keyboards/chili/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/chili/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/chili/rules.mk b/keyboards/chili/rules.mk
new file mode 100644
index 00000000000..a99c946d287
--- /dev/null
+++ b/keyboards/chili/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 = lite # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/crkbd/keymaps/bcat/keymap.c b/keyboards/crkbd/keymaps/bcat/keymap.c
index b4c347181f5..60375f6764d 100644
--- a/keyboards/crkbd/keymaps/bcat/keymap.c
+++ b/keyboards/crkbd/keymaps/bcat/keymap.c
@@ -1,5 +1,7 @@
#include QMK_KEYBOARD_H
+#include "bcat.h"
+
enum layer {
LAYER_DEFAULT,
LAYER_LOWER,
@@ -10,28 +12,31 @@ enum layer {
#define LY_LWR MO(LAYER_LOWER)
#define LY_RSE MO(LAYER_RAISE)
-#define KY_CESC LCTL_T(KC_ESC)
+#define KY_CSPC LCTL(KC_SPC)
+#define KY_LOCK LGUI(KC_L)
+#define KY_WINL LGUI(KC_LEFT)
+#define KY_WINR LGUI(KC_RGHT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default layer: http://www.keyboard-layout-editor.com/#/gists/08d9827d916662a9414f48805aa895a5 */
[LAYER_DEFAULT] = 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,
- KY_CESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ 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_RSFT,
- KC_LALT, LY_LWR, KC_SPC, KC_ENT, LY_RSE, KC_RGUI
+ KC_LCTL, LY_LWR, KC_SPC, KC_ENT, LY_RSE, KC_RALT
),
/* Lower layer: http://www.keyboard-layout-editor.com/#/gists/c3fba5eaa2cd70fdfbdbc0f9e34d3bc0 */
[LAYER_LOWER] = LAYOUT(
- KC_CAPS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- _______, _______, _______, _______, _______, _______, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
- _______, KC_APP, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_GRV,
+ MC_ALTT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KY_CSPC, KY_WINL, KY_WINR, KY_LOCK, KC_WBAK, KC_WFWD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
+ _______, KC_APP, KC_PSCR, KC_SLCK, KC_PAUS, KC_LGUI, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_GRV,
_______, _______, _______, _______, _______, _______
),
/* Raise layer: http://www.keyboard-layout-editor.com/#/gists/08b44355d4ca85d294bad9e2821f91d7 */
[LAYER_RAISE] = LAYOUT(
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F11, KC_DEL,
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_F12, KC_INS,
_______, _______, _______, _______, _______, _______
@@ -46,6 +51,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-layer_state_t layer_state_set_user(layer_state_t state) {
+layer_state_t layer_state_set_keymap(layer_state_t state) {
return update_tri_layer_state(state, LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
diff --git a/keyboards/crkbd/keymaps/bcat/readme.md b/keyboards/crkbd/keymaps/bcat/readme.md
index fa6b5af37fa..21594f75c9d 100644
--- a/keyboards/crkbd/keymaps/bcat/readme.md
+++ b/keyboards/crkbd/keymaps/bcat/readme.md
@@ -4,11 +4,11 @@ This is my favorite split ergo layout for typing, featuring the traditional
four ortho/ergo layers (Default, Lower, Raise, Adjust). It is loosely inspired
by the default Planck (numbers on Lower, symbols on Raise) and Crkbd (Space on
left, Enter on right) layouts, but has since been redesigned heavily according
-to the principles described below:
+to the principles described below.
-* Since most of the modifiers are on the left half, keys frequently pressed
-together with mods (e.g., numbers, function keys, etc.) are on the Raise layer
-activated by the right thumb.
+* Since my most-frequently-used keyboard shortcuts involve Ctrl, which lives on
+the left half of the keyboard, keys frequently used with it (numbers, function
+keys, etc.) are on the Raise layer activated by the right thumb.
* Navigation can be done on the right half alone, to enable simultaneous
left-handed mousing. Additionally, Web pages can be scrolled with Space or
@@ -22,7 +22,7 @@ layer-switch keys to correct mistakes.
## Default layer
-
+
([KLE](http://www.keyboard-layout-editor.com/#/gists/08d9827d916662a9414f48805aa895a5))
@@ -31,29 +31,26 @@ layer-switch keys to correct mistakes.
* Tab and Backspace are in familiar locations from my row-staggered boards
(almost all of which use HHKB-style split backspace).
+* The Esc key is next to the home row for convenience in Vim.
+
* Likewise, the Ctrl key is in the same place as on my row-staggered boards
(where I've been remapping Caps Lock as Ctrl since before even using QMK).
-* There are two Shift keys, because I do use Right Shift on occasion (even
-though I'm predominately a Left Shift-er).
+* There are two Shift keys, although I generally use Left Shift. (I've
+considered replacing Right Shift with another key, but haven't chosen one.)
-* Lower and Raise layer-switch keys are below the left and right thumb,
-respectively, when resting my fingers on the home row.
+* Lower and Raise layer-switch keys are in the resting position of my left and
+right thumbs, respectively.
* Space and Enter are on the big thumb keys so they're easy to press.
-* Alt is on the left so I can navigate back (Alt+Raise+H) and forward
-(Alt+Raise+L) without having to uncomfortably hit two thumb keys on the same
-half. This puts Super on the right by the process of elimination.
-
-* Escape shares a mod-tap key with Ctrl, which is convenient for Vim, but not
-something I'm totally in love with, as even after tweaking `TAPPING_TERM` I
-still get occasional spurious Esc taps. (I might move Esc up a key and put Tab
-on a layer, but that'd take some getting used to....)
+* Ctrl is on the left for ease of chording, especially one-handed use of common
+shortcuts like Ctrl+T and Ctrl+W. This puts Alt on the right by the process of
+elimination.
## Lower layer
-
+
([KLE](http://www.keyboard-layout-editor.com/#/gists/c3fba5eaa2cd70fdfbdbc0f9e34d3bc0))
@@ -74,17 +71,23 @@ bottom row.
right half, with the same relative positions as on a row-staggered HHKB layout.
And yup, the shifted versions are above the unshifted versions.
-* Caps Lock is bound in the same position as on an HHKB, for lack of an obvious
-better location.
+* Remaining keys from a TKL are placed out of the way on the bottom row of the
+left half.
-* Some extra keys are placed on the bottom row of the left half, ensuring every
-key on a TKL has a binding.
+* The home row on the left half contains handy shortcuts for window movement,
+and browser navigation, and screen lock.
-* The left-half home row is reversed for future use. (It's free real estate.)
+* Lower+Esc is bound to Ctrl+Space because the Ctrl and Space keys are both on
+the left thumb, so this key combination (which I use for tmux prefix and editor
+autocomplete) is hard to press in its natural location.
+
+* Lower+Tab is bound to a custom Alt+Tab macro that keeps the Alt modifier held
+as long as the Lower key is held down. This means that window switching is on
+Lower+Tab immediately next to browser tab switching (Ctrl+Tab).
## Raise layer
-
+
([KLE](http://www.keyboard-layout-editor.com/#/gists/08b44355d4ca85d294bad9e2821f91d7))
@@ -106,6 +109,8 @@ keys (F1–F5) on the home row.)
* Insert and Delete are on the rightmost column, because there didn't seem to
be a better place to put them.
+* Caps Lock is bound in the same position as on an HHKB, for lack of an obvious better location.
+
## Adjust layer

diff --git a/keyboards/crkbd/rev1/rev1.h b/keyboards/crkbd/rev1/rev1.h
index 5e90de72a3a..6580d73fe31 100644
--- a/keyboards/crkbd/rev1/rev1.h
+++ b/keyboards/crkbd/rev1/rev1.h
@@ -52,3 +52,5 @@
KC_##L30, KC_##L31, KC_##L32, KC_##R30, KC_##R31, KC_##R32 \
)
// clang-format on
+
+#define LAYOUT_split_3x6_3 LAYOUT
diff --git a/keyboards/crkbd/rev1/rules.mk b/keyboards/crkbd/rev1/rules.mk
index ab9bed09c0a..a921e60308b 100644
--- a/keyboards/crkbd/rev1/rules.mk
+++ b/keyboards/crkbd/rev1/rules.mk
@@ -1,3 +1,5 @@
SRC += matrix.c \
split_util.c \
split_scomm.c
+
+LAYOUTS = split_3x6_3
diff --git a/keyboards/duck/octagon/keymaps/via/keymap.c b/keyboards/duck/octagon/keymaps/via/keymap.c
new file mode 100644
index 00000000000..b391d2f0ab6
--- /dev/null
+++ b/keyboards/duck/octagon/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/* 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] = {
+ [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_PSCR, KC_PAUS, 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, LT(1,KC_APP), LT(2,KC_RCTL), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_75_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_75_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_75_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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/duck/octagon/keymaps/via/rules.mk b/keyboards/duck/octagon/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/duck/octagon/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/ghs/rar/keymaps/via/keymap.c b/keyboards/ghs/rar/keymaps/via/keymap.c
index af72c4fb7a4..991c482084b 100644
--- a/keyboards/ghs/rar/keymaps/via/keymap.c
+++ b/keyboards/ghs/rar/keymaps/via/keymap.c
@@ -23,7 +23,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, 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
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_NO, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_all(
RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
diff --git a/keyboards/ghs/rar/rar.h b/keyboards/ghs/rar/rar.h
index fc68f85bd4b..e4d3eb2775c 100644
--- a/keyboards/ghs/rar/rar.h
+++ b/keyboards/ghs/rar/rar.h
@@ -32,7 +32,7 @@
#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, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, 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 \
@@ -42,8 +42,8 @@
{ 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 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, XXX, 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 }, \
@@ -55,7 +55,7 @@
#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, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, 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 \
@@ -65,8 +65,8 @@
{ 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 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, XXX, 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 }, \
@@ -78,7 +78,7 @@
#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, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, 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 \
@@ -88,8 +88,8 @@
{ 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 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, XXX, 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 }, \
@@ -101,7 +101,7 @@
#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, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, 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 \
@@ -111,8 +111,8 @@
{ 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 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, XXX, 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 }, \
@@ -124,7 +124,7 @@
#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, \
+ k40, k50, k41, k51, k42, k52, k43, k53, k44, k54, k45, k55, k46, 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 \
@@ -134,8 +134,8 @@
{ 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 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, XXX, 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 }, \
diff --git a/keyboards/handwired/atreus50/atreus50.h b/keyboards/handwired/atreus50/atreus50.h
index eb31ca1b8e6..e2e8510b62e 100644
--- a/keyboards/handwired/atreus50/atreus50.h
+++ b/keyboards/handwired/atreus50/atreus50.h
@@ -3,7 +3,7 @@
#include "quantum.h"
-// The first section contains all of the arguements
+// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
diff --git a/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c b/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c
index 1e53d050b0b..46a5995d0d0 100644
--- a/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c
+++ b/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c
@@ -1,39 +1,6 @@
#include QMK_KEYBOARD_H
#include "keymap_uk.h"
-
-extern keymap_config_t keymap_config;
-
-enum planck_layers {
- _QWERTY,
- _MAC,
- _LOWER,
- _MLWR,
- _RAISE,
- _MRSE,
- _FUNC,
- _MFNC,
- _FUNC2,
- _MFNC2,
- _ADJUST,
- _MOUSE
-};
-
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- MAC,
- FUNC,
- MFNC,
- FUNC2,
- MFNC2,
- LOWER,
- MLWR,
- RAISE,
- MRSE,
- MOUSE,
- DYNAMIC_MACRO_RANGE
-};
-
-#include "dynamic_macro.h"
+#include "ajp10304.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -49,7 +16,7 @@ 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 ,
+ LT(_NUMPAD, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) ,
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT ,
MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC2)
@@ -103,10 +70,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_RAISE] = LAYOUT(
- KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN ,
- KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) ,
- _______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) ,
- MO(_MOUSE), _______, _______, _______, _______, KC_LALT, _______, _______, KC_ENT, _______, XXXXXXX, _______, _______, _______
+ KC_GRV, XXXXXXX, M_WORD_SEL, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN ,
+ KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) ,
+ _______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) ,
+ MO(_MOUSE), _______, _______, _______, _______, KC_LALT, _______, _______, KC_ENT, _______, XXXXXXX, _______, _______, _______
),
/* Adjust (Lower + Raise)
@@ -121,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT(
- M(0), RESET, QWERTY, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL ,
+ M_CUSTOM, RESET, QWERTY, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL ,
KC_CAPS, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,
TG(_MAC), _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
@@ -129,7 +96,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Mouse
* ,------------------------------------------ |-----------------------------------------.
- * | ESC | | | | | | | | | | | | |
+ * | ESC | | | | | | | | | BTN3 | | | |
* |------+------+------+------+------+------- |------+------+------+------+------+------|
* | ACC0 | ACC1 | ACC2 | | | | | | BTN1 | UP | BTN2 | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
@@ -139,12 +106,32 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_MOUSE] = LAYOUT(
- KC_ESC , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ KC_ESC , _______, _______, _______, _______, _______, _______, _______, KC_MS_BTN3, _______, _______, _______ ,
KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______ ,
KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
+
+/* Num Pad
+ * ,------------------------------------------ |-----------------------------------------.
+ * | ESC | | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+ * |------+------+------+------+------+------- |------+------+------+------+------+------|
+ * | | | | | | | | | 4 | 5 | 6 | * | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | 1 | 2 | 3 | + | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | 0 | . | , | - | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, KC_NLCK, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_SLASH, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_ASTERISK, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_PLUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_DOT, KC_COMM, KC_KP_MINUS, _______
+),
+
+
/* Function 2 (Right hand side)
* ,------------------------------------------ |-----------------------------------------.
* | | |WRDSEL| | | | | LNDEL| | | | | |
@@ -157,10 +144,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_FUNC2] = LAYOUT(
- _______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______,
- _______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______,
- _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98) ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, M_WORD_SEL, _______, _______, _______, M_LINE_DEL, _______, _______, _______, _______, _______,
+ _______, _______, M_LINE_SEL, M_DUP, _______, _______, _______, M_JOIN, _______, _______, _______, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M_MODE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_MAC] = LAYOUT(
@@ -178,10 +165,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_MRSE] = LAYOUT(
- _______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) ,
- _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, M_WORD_SEL_MAC, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) ,
+ _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[_MFNC] = LAYOUT(
@@ -192,151 +179,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_MFNC2] = LAYOUT(
- _______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______,
- _______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______,
- _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99) ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, M_WORD_SEL_MAC, _______, _______, _______, M_LINE_DEL_MAC, _______, _______, _______, _______, _______,
+ _______, _______, M_LINE_SEL_MAC, M_DUP_MAC, _______, _______, _______, M_JOIN_MAC, _______, _______, _______, _______,
+ _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M_MODE_MAC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
-
-void persistant_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
-
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- persistant_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- 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 MLWR:
- if (record->event.pressed) {
- layer_on(_LOWER);
- layer_on(_MLWR);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- layer_off(_MLWR);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case MRSE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- layer_on(_MRSE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- layer_off(_MRSE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case MFNC:
- if (record->event.pressed) {
- layer_on(_FUNC);
- layer_on(_MFNC);
- } else {
- layer_off(_FUNC);
- layer_off(_MFNC);
- }
- return false;
- case MFNC2:
- if (record->event.pressed) {
- layer_on(_FUNC2);
- layer_on(_MFNC2);
- } else {
- layer_off(_FUNC2);
- layer_off(_MFNC2);
- }
- return false;
- }
- return true;
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t keycode, uint8_t opt) {
- // These would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- switch(keycode) {
- case 0: // Some custom string here
- SEND_STRING("");
- return false;
-
- case 1: // Word Select
- SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LCTRL));
- return false;
-
- case 2: // Word Select Mac
- SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LALT));
- return false;
-
- case 3: // Line Select
- SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT));
- return false;
-
- case 4: // Line Select Mac
- SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT));
- return false;
-
- case 5: // Line Delete
- SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT));
- SEND_STRING(SS_TAP(X_BSPACE));
- return false;
-
- case 6: // Line Delete Mac
- SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT));
- SEND_STRING(SS_TAP(X_BSPACE));
- return false;
-
- case 7: // Duplicate Selection
- SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
- return false;
-
- case 8: // Duplicate Selection Mac
- SEND_STRING(SS_LGUI("c") SS_TAP(X_RIGHT) SS_LGUI("v"));
- return false;
-
- case 9: // Join line
- SEND_STRING(SS_TAP(X_END) SS_TAP(X_DELETE));
- return false;
-
- case 10: // Join line Mac
- SEND_STRING(SS_LCTRL("e") SS_TAP(X_DELETE));
- return false;
-
- case 98: // Print mode
- SEND_STRING("PC");
- return false;
-
- case 99: // Print mode
- SEND_STRING("OSX");
- return false;
- }
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/handwired/atreus50/keymaps/ajp10304/readme.md b/keyboards/handwired/atreus50/keymaps/ajp10304/readme.md
index 41ad0f5118c..5c6a703a8ea 100644
--- a/keyboards/handwired/atreus50/keymaps/ajp10304/readme.md
+++ b/keyboards/handwired/atreus50/keymaps/ajp10304/readme.md
@@ -1,11 +1,15 @@
# AJP10304 Custom Atreus50 Layout
-# Also available for the Planck and JJ40
+# Also available for the Planck, Shark and JJ40
**Note:** In the tables below where there are two characters on a key,
the second is the output when shift is applied.
**Note:** The below tables assume a UK layout.
+#### Flashing
+
+`make handwired/atreus50:ajp10304:flash`
+
##### Main Qwerty Layer
* Tab: when held, operates as shift.
@@ -43,13 +47,13 @@ Activated when `Lower` is held in the above `qwerty` layer.
| Shift | \| | `¬ | #~ | '@ | -_ | | | =+ | #~ | [{ | ]} | '@ |Shift |
| | | | |Lower | Del | Ctrl | Alt |Space | | Next | Vol- | Vol+ | Play |
- ##### Raise Layer
- Activated when `Raise` is held in the above `qwerty` layer.
+##### Raise Layer
+Activated when `Raise` is held in the above `qwerty` layer.
- * Preferred layer for typing brackets.
- * Allows for cursor navigation to be used solely with the right hand.
- * WRDSEL: Select the word where the cursor is.
- * |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
+* Preferred layer for typing brackets.
+* Allows for cursor navigation to be used solely with the right hand.
+* WRDSEL: Select the word where the cursor is.
+* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
| | | | | | | | | | | | | | |
| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
@@ -98,11 +102,20 @@ Activated when `fn` and `raise` held together.
| | | | | | | | | | | | | | |
| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| ESC | | | | | | | | | | | | | |
+| ESC | | | | | | | | | | BTN3 | | | |
| ACC0 | ACC1 | ACC2 | | | | | | | BTN1 | UP | BTN2 | | |
| ACC0 | ACC1 | ACC2 | | | | | | | LEFT | DOWN | RIGHT| | |
| | | | | | | Ctrl | Alt | | | | | | |
+##### Number Pad Layout
+Activated when holding `Esc` key.
+
+| | | | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | | | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+| | | | | | | | | | 4 | 5 | 6 | * | |
+| | | | | | | | | | 1 | 2 | 3 | + | |
+| | | | | | | Ctrl | Alt | | 0 | . | , | - | |
+
+
-##Program Command
-teensy_loader_cli -w -mmcu=atmega32u4 handwired_atreus50_ajp10304.hex
diff --git a/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk b/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk
index fc5d9ba1aa5..900dbaed11a 100644
--- a/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk
+++ b/keyboards/handwired/atreus50/keymaps/ajp10304/rules.mk
@@ -1,8 +1,3 @@
AUDIO_ENABLE = no
MOUSEKEY_ENABLE = yes
-
-TEMP := $(OPT_DEFS)
-OPT_DEFS = $(filter-out -DBOOTLOADER_SIZE=4096,$(TEMP))
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
BOOTLOADER = halfkay
diff --git a/keyboards/handwired/boss566y/redragon_vara/config.h b/keyboards/handwired/boss566y/redragon_vara/config.h
new file mode 100644
index 00000000000..167bddd485b
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/config.h
@@ -0,0 +1,51 @@
+/*
+Copyright 2020 boss566y
+
+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 0x5048 //PH
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER PH
+#define PRODUCT Redragon Vara
+#define DESCRIPTION HandWired Redragon Vara
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 11
+
+/*
+ * 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, B7, D0, F0, F1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D1, D2, D3, C6, D5, C7, D4, D7, B4, B5, B6 }
+
+#define DIODE_DIRECTION COL2ROW
+
+
+// generated by KBFirmware JSON to QMK Parser
+// https://noroadsleft.github.io/kbf_qmk_converter/
\ No newline at end of file
diff --git a/keyboards/handwired/boss566y/redragon_vara/info.json b/keyboards/handwired/boss566y/redragon_vara/info.json
new file mode 100644
index 00000000000..d511c4ef468
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/info.json
@@ -0,0 +1,118 @@
+{
+ "keyboard_name": "Handwired Redragon Vara",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_fullsize_ansi": {
+ "layout": [
+ {"label":"K00 (B0,D1)", "x":0, "y":0},
+ {"label":"K02 (B0,D3)", "x":2, "y":0},
+ {"label":"K03 (B0,C6)", "x":3, "y":0},
+ {"label":"K04 (B0,D5)", "x":4, "y":0},
+ {"label":"K05 (B0,C7)", "x":5, "y":0},
+ {"label":"K07 (B0,D7)", "x":6.5, "y":0},
+ {"label":"K08 (B0,B4)", "x":7.5, "y":0},
+ {"label":"K09 (B0,B5)", "x":8.5, "y":0},
+ {"label":"K0A (B0,B6)", "x":9.5, "y":0},
+ {"label":"K6A (F0,B6)", "x":11, "y":0},
+ {"label":"K69 (F0,B5)", "x":12, "y":0},
+ {"label":"K68 (F0,B4)", "x":13, "y":0},
+ {"label":"K67 (F0,D7)", "x":14, "y":0},
+ {"label":"K66 (F0,D4)", "x":15.25, "y":0},
+ {"label":"K65 (F0,C7)", "x":16.25, "y":0},
+ {"label":"K64 (F0,D5)", "x":17.25, "y":0},
+ {"label":"K10 (B1,D1)", "x":0, "y":1.5},
+ {"label":"K11 (B1,D2)", "x":1, "y":1.5},
+ {"label":"K12 (B1,D3)", "x":2, "y":1.5},
+ {"label":"K13 (B1,C6)", "x":3, "y":1.5},
+ {"label":"K14 (B1,D5)", "x":4, "y":1.5},
+ {"label":"K15 (B1,C7)", "x":5, "y":1.5},
+ {"label":"K16 (B1,D4)", "x":6, "y":1.5},
+ {"label":"K17 (B1,D7)", "x":7, "y":1.5},
+ {"label":"K18 (B1,B4)", "x":8, "y":1.5},
+ {"label":"K19 (B1,B5)", "x":9, "y":1.5},
+ {"label":"K1A (B1,B6)", "x":10, "y":1.5},
+ {"label":"K7A (F1,B6)", "x":11, "y":1.5},
+ {"label":"K79 (F1,B5)", "x":12, "y":1.5},
+ {"label":"K78 (F1,B4)", "x":13, "y":1.5, "w":2},
+ {"label":"K76 (F1,D4)", "x":15.25, "y":1.5},
+ {"label":"K75 (F1,C7)", "x":16.25, "y":1.5},
+ {"label":"K74 (F1,D5)", "x":17.25, "y":1.5},
+ {"label":"K73 (F1,C6)", "x":18.5, "y":1.5},
+ {"label":"K72 (F1,D3)", "x":19.5, "y":1.5},
+ {"label":"K71 (F1,D2)", "x":20.5, "y":1.5},
+ {"label":"K70 (F1,D1)", "x":21.5, "y":1.5},
+ {"label":"K20 (B2,D1)", "x":0, "y":2.5, "w":1.5},
+ {"label":"K21 (B2,D2)", "x":1.5, "y":2.5},
+ {"label":"K22 (B2,D3)", "x":2.5, "y":2.5},
+ {"label":"K23 (B2,C6)", "x":3.5, "y":2.5},
+ {"label":"K24 (B2,D5)", "x":4.5, "y":2.5},
+ {"label":"K25 (B2,C7)", "x":5.5, "y":2.5},
+ {"label":"K26 (B2,D4)", "x":6.5, "y":2.5},
+ {"label":"K27 (B2,D7)", "x":7.5, "y":2.5},
+ {"label":"K28 (B2,B4)", "x":8.5, "y":2.5},
+ {"label":"K29 (B2,B5)", "x":9.5, "y":2.5},
+ {"label":"K2A (B2,B6)", "x":10.5, "y":2.5},
+ {"label":"K8A (F4,B6)", "x":11.5, "y":2.5},
+ {"label":"K89 (F4,B5)", "x":12.5, "y":2.5},
+ {"label":"K87 (F4,D7)", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K86 (F4,D4)", "x":15.25, "y":2.5},
+ {"label":"K85 (F4,C7)", "x":16.25, "y":2.5},
+ {"label":"K84 (F4,D5)", "x":17.25, "y":2.5},
+ {"label":"K83 (F4,C6)", "x":18.5, "y":2.5},
+ {"label":"K82 (F4,D3)", "x":19.5, "y":2.5},
+ {"label":"K81 (F4,D2)", "x":20.5, "y":2.5},
+ {"label":"K90 (F5,D1)", "x":21.5, "y":2.5, "h":2},
+ {"label":"K30 (B3,D1)", "x":0, "y":3.5, "w":1.75},
+ {"label":"K31 (B3,D2)", "x":1.75, "y":3.5},
+ {"label":"K32 (B3,D3)", "x":2.75, "y":3.5},
+ {"label":"K33 (B3,C6)", "x":3.75, "y":3.5},
+ {"label":"K34 (B3,D5)", "x":4.75, "y":3.5},
+ {"label":"K35 (B3,C7)", "x":5.75, "y":3.5},
+ {"label":"K36 (B3,D4)", "x":6.75, "y":3.5},
+ {"label":"K37 (B3,D7)", "x":7.75, "y":3.5},
+ {"label":"K38 (B3,B4)", "x":8.75, "y":3.5},
+ {"label":"K39 (B3,B5)", "x":9.75, "y":3.5},
+ {"label":"K3A (B3,B6)", "x":10.75, "y":3.5},
+ {"label":"K9A (F5,B6)", "x":11.75, "y":3.5},
+ {"label":"K98 (F5,B4)", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"K93 (F5,C6)", "x":18.5, "y":3.5},
+ {"label":"K92 (F5,D3)", "x":19.5, "y":3.5},
+ {"label":"K91 (F5,D2)", "x":20.5, "y":3.5},
+ {"label":"K40 (B7,D1)", "x":0, "y":4.5, "w":2.25},
+ {"label":"K42 (B7,D3)", "x":2.25, "y":4.5},
+ {"label":"K43 (B7,C6)", "x":3.25, "y":4.5},
+ {"label":"K44 (B7,D5)", "x":4.25, "y":4.5},
+ {"label":"K45 (B7,C7)", "x":5.25, "y":4.5},
+ {"label":"K46 (B7,D4)", "x":6.25, "y":4.5},
+ {"label":"K47 (B7,D7)", "x":7.25, "y":4.5},
+ {"label":"K48 (B7,B4)", "x":8.25, "y":4.5},
+ {"label":"K49 (B7,B5)", "x":9.25, "y":4.5},
+ {"label":"K4A (B7,B6)", "x":10.25, "y":4.5},
+ {"label":"KAA (F6,B6)", "x":11.25, "y":4.5},
+ {"label":"KA8 (F6,B4)", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"KA5 (F6,C7)", "x":16.25, "y":4.5},
+ {"label":"KA3 (F6,C6)", "x":18.5, "y":4.5},
+ {"label":"KA2 (F6,D3)", "x":19.5, "y":4.5},
+ {"label":"KA1 (F6,D2)", "x":20.5, "y":4.5},
+ {"label":"KB0 (F7,D1)", "x":21.5, "y":4.5, "h":2},
+ {"label":"K50 (D0,D1)", "x":0, "y":5.5, "w":1.25},
+ {"label":"K51 (D0,D2)", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"K53 (D0,C6)", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"K56 (D0,D4)", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"K5A (D0,B6)", "x":10, "y":5.5, "w":1.25},
+ {"label":"KBA (F7,B6)", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"KB9 (F7,B5)", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"KB7 (F7,D7)", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"KB6 (F7,D4)", "x":15.25, "y":5.5},
+ {"label":"KB5 (F7,C7)", "x":16.25, "y":5.5},
+ {"label":"KB4 (F7,D5)", "x":17.25, "y":5.5},
+ {"label":"KB3 (F7,C6)", "x":18.5, "y":5.5, "w":2},
+ {"label":"KB1 (F7,D2)", "x":20.5, "y":5.5}
+ ]
+ }
+ }
+ ,"meta": "https://noroadsleft.github.io/kbf_qmk_converter/"
+}
diff --git a/keyboards/handwired/boss566y/redragon_vara/keymaps/default/keymap.c b/keyboards/handwired/boss566y/redragon_vara/keymaps/default/keymap.c
new file mode 100644
index 00000000000..569ce187a43
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2020 boss566y
+ *
+ * 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_fullsize_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_NLCK, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ XXXXXXX, 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, MO(1), MO(2), RGUI_T(KC_APP), KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT_fullsize_ansi(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, C(KC_HOME), _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_fullsize_ansi(
+ RESET, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+
+};
diff --git a/keyboards/handwired/boss566y/redragon_vara/keymaps/default/readme.md b/keyboards/handwired/boss566y/redragon_vara/keymaps/default/readme.md
new file mode 100644
index 00000000000..8836223788e
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/keymaps/default/readme.md
@@ -0,0 +1,11 @@
+# Default Layout
+
+Keymap is basic 104 qwerty layout with:
+
+* Caps Lock moved to Layer 1 leaving blank key on Base Layer
+* Menu Key changed to mod tap for Menu and Windows Keys
+* RAlt changed to M(1). Media playback on A to F, volume keys on X to V, and Delete on Backspace
+* FN is M(2). Arrow keys on HJKL, media keys on F6 to F12, and RCtrl+Home on Home.
+* Both M(1) and M(2) have Reset on Escape
+
+
\ No newline at end of file
diff --git a/keyboards/handwired/boss566y/redragon_vara/keymaps/via/config.h b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/config.h
new file mode 100644
index 00000000000..a9cb8393a8e
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/config.h
@@ -0,0 +1,21 @@
+/*
+Copyright 2020 boss566y
+
+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 DYNAMIC_KEYMAP_LAYER_COUNT 3
+
diff --git a/keyboards/handwired/boss566y/redragon_vara/keymaps/via/keymap.c b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/keymap.c
new file mode 100644
index 00000000000..6b10c598bf2
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2020 boss566y
+ *
+ * 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_fullsize_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_NLCK, 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_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ XXXXXXX, 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, MO(1), MO(2), KC_RGUI, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
+ ),
+ [1] = LAYOUT_fullsize_ansi(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_fullsize_ansi(
+ RESET, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/handwired/boss566y/redragon_vara/keymaps/via/readme.md b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/readme.md
new file mode 100644
index 00000000000..d89cb08a805
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/readme.md
@@ -0,0 +1,12 @@
+# Default Layout
+
+Keymap is basic 104 qwerty layout with:
+
+* Caps Lock moved to Layer 1 leaving blank key on Base Layer
+* Menu Key changed to mod tap for Menu and Windows Keys
+* RAlt changed to M(1). Media playback on A to F, volume keys on X to V, and Delete on Backspace
+* FN is M(2). Arrow keys on HJKL, media keys on F6 to F12, and RCtrl+Home on Home.
+* Both M(1) and M(2) have Reset on Escape
+* VIA Enabled [VIA JSON File](https://github.com/boss566y/keyboards/blob/boss566y/src/boss566y/handwired/redragon_vara.json)
+
+
\ No newline at end of file
diff --git a/keyboards/handwired/boss566y/redragon_vara/keymaps/via/rules.mk b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/rules.mk
new file mode 100644
index 00000000000..43061db1dd4
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/handwired/boss566y/redragon_vara/readme.md b/keyboards/handwired/boss566y/redragon_vara/readme.md
new file mode 100644
index 00000000000..d01745051f3
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/readme.md
@@ -0,0 +1,14 @@
+# Handwired Redragon Vara
+
+
+
+A handwired Redragon Vara. Built using a teensy 2.0 and has a 12x11 matrix
+
+* Keyboard Maintainer: [boss566y](https://github.com/boss566y)
+* Hardware: Redragon Vara and Teensy 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/boss566y/redragon_vara: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/boss566y/redragon_vara/redragon_vara.c b/keyboards/handwired/boss566y/redragon_vara/redragon_vara.c
new file mode 100644
index 00000000000..18cfcfaa17e
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/redragon_vara.c
@@ -0,0 +1,16 @@
+/* Copyright 2020 boss566y
+ *
+ * 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 "redragon_vara.h"
diff --git a/keyboards/handwired/boss566y/redragon_vara/redragon_vara.h b/keyboards/handwired/boss566y/redragon_vara/redragon_vara.h
new file mode 100644
index 00000000000..d2423111465
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/redragon_vara.h
@@ -0,0 +1,43 @@
+/* Copyright 2020 boss566y
+ *
+ * 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_fullsize_ansi( \
+ K00, K02, K03, K04, K05, K07, K08, K09, K0A, K6A, K69, K68, K67, K66, K65, K64, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K7A, K79, K78, K76, K75, K74, K73, K72, K71, K70, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K8A, K89, K87, K86, K85, K84, K83, K82, K81, K90, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K9A, K98, K93, K92, K91, \
+ K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, KAA, KA8, KA5, KA3, KA2, KA1, KB0, \
+ K50, K51, K53, K56, K5A, KBA, KB9, KB7, KB6, KB5, KB4, KB3, KB1 \
+) { \
+ { K00, KC_NO, K02, K03, K04, K05, KC_NO, 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, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A }, \
+ { K50, K51, KC_NO, K53, KC_NO, KC_NO, K56, KC_NO, KC_NO, KC_NO, K5A }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, K64, K65, K66, K67, K68, K69, K6A }, \
+ { K70, K71, K72, K73, K74, K75, K76, KC_NO, K78, K79, K7A }, \
+ { KC_NO, K81, K82, K83, K84, K85, K86, K87, KC_NO, K89, K8A }, \
+ { K90, K91, K92, K93, KC_NO, KC_NO, KC_NO, KC_NO, K98, KC_NO, K9A }, \
+ { KC_NO, KA1, KA2, KA3, KC_NO, KA5, KC_NO, KC_NO, KA8, KC_NO, KAA }, \
+ { KB0, KB1, KC_NO, KB3, KB4, KB5, KB6, KB7, KC_NO, KB9, KBA }, \
+}
+
+// generated by KBFirmware JSON to QMK Parser
+// https://noroadsleft.github.io/kbf_qmk_converter/
diff --git a/keyboards/handwired/boss566y/redragon_vara/rules.mk b/keyboards/handwired/boss566y/redragon_vara/rules.mk
new file mode 100644
index 00000000000..958a948fb43
--- /dev/null
+++ b/keyboards/handwired/boss566y/redragon_vara/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 = halfkay
+
+# 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
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = fullsize_ansi
diff --git a/keyboards/handwired/swiftrax/cowfish/config.h b/keyboards/handwired/swiftrax/cowfish/config.h
new file mode 100644
index 00000000000..d8ee8855399
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/config.h
@@ -0,0 +1,49 @@
+/*
+Copyright 2020 Swiftrax
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x7161
+#define PRODUCT_ID 0x5239
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Swiftrax
+#define PRODUCT CowFish
+#define DESCRIPTION TKL with F13
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 18
+
+// ROWS: Top to bottom, COLS: Left to right
+
+#define MATRIX_ROW_PINS { D0, D1, B7, E6, D4, D6 }
+#define MATRIX_COL_PINS { B3, B2, B1, F0, F1, F4, F5, F6, F7, B5, B6, B4, C6, D7, C7, D2, D3, D5}
+
+/* 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
+
+/*EEPROM for via*/
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/handwired/swiftrax/cowfish/cowfish.c b/keyboards/handwired/swiftrax/cowfish/cowfish.c
new file mode 100644
index 00000000000..7debc627822
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/cowfish.c
@@ -0,0 +1 @@
+#include "cowfish.h"
diff --git a/keyboards/handwired/swiftrax/cowfish/cowfish.h b/keyboards/handwired/swiftrax/cowfish/cowfish.h
new file mode 100644
index 00000000000..31165b07677
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/cowfish.h
@@ -0,0 +1,86 @@
+#pragma once
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K413, K416, \
+ K500, K501, K502, K505, K508, K509, K511, K513, K515, K516, K517 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, XXX, K015, K016, K017 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, XXX, K214, K215, K216, K217 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, XXX, K313, XXX, XXX, XXX, XXX }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, XXX, XXX, K413, XXX, XXX, K416, XXX }, \
+ { K500, K501, K502, XXX, XXX, K505, XXX, XXX, K508, K509, XXX, K511, XXX, K513, XXX, K515, K516, K517 } \
+}
+
+#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K413, K416, \
+ K500, K501, K502, K505, K508, K509, K511, K513, K515, K516, K517 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, XXX, K015, K016, K017 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, XXX, K214, K215, K216, K217 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, XXX, K313, XXX, XXX, XXX, XXX }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, XXX, XXX, K413, XXX, XXX, K416, XXX }, \
+ { K500, K501, K502, XXX, XXX, K505, XXX, XXX, K508, K509, XXX, K511, XXX, K513, XXX, K515, K516, K517 } \
+}
+
+#define LAYOUT_split_bs( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K413, K416, \
+ K500, K501, K502, K505, K508, K509, K511, K513, K515, K516, K517 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, XXX, K015, K016, K017 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, XXX, K214, K215, K216, K217 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, XXX, K313, XXX, XXX, XXX, XXX }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, XXX, XXX, K413, XXX, XXX, K416, XXX }, \
+ { K500, K501, K502, XXX, XXX, K505, XXX, XXX, K508, K509, XXX, K511, XXX, K513, XXX, K515, K516, K517 } \
+}
+
+#define LAYOUT_split_bs_tsangan( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K413, K416, \
+ K500, K501, K502, K505, K508, K511, K513, K515, K516, K517 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, XXX, K015, K016, K017 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, XXX, K214, K215, K216, K217 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, XXX, K313, XXX, XXX, XXX, XXX }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, XXX, XXX, K413, XXX, XXX, K416, XXX }, \
+ { K500, K501, K502, XXX, XXX, K505, XXX, XXX, K508, XXX, XXX, K511, XXX, K513, XXX, K515, K516, K517 } \
+}
+
+#define LAYOUT_tsangan( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K015, K016, K017, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, K116, K117, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, K217, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K413, K416, \
+ K500, K501, K502, K505, K508, K511, K513, K515, K516, K517 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, XXX, K015, K016, K017 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, XXX, K115, K116, K117 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, XXX, K214, K215, K216, K217 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, XXX, K313, XXX, XXX, XXX, XXX }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, XXX, XXX, K413, XXX, XXX, K416, XXX }, \
+ { K500, K501, K502, XXX, XXX, K505, XXX, XXX, K508, XXX, XXX, K511, XXX, K513, XXX, K515, K516, K517 } \
+}
diff --git a/keyboards/handwired/swiftrax/cowfish/info.json b/keyboards/handwired/swiftrax/cowfish/info.json
new file mode 100644
index 00000000000..e7f1523601e
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/info.json
@@ -0,0 +1,21 @@
+{
+ "keyboard_name": "CowFish",
+ "url": "",
+ "maintainer": "swiftrax",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1.25, "y":0}, {"x":2.25, "y":0}, {"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":12.75, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"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":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25}, {"x":14, "y":1.25}, {"x":15.25, "y":1.25}, {"x":16.25, "y":1.25}, {"x":17.25, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15.25, "y":2.25}, {"x":16.25, "y":2.25}, {"x":17.25, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":2.75}, {"x":16.25, "y":4.25}, {"x":0, "y":5.25, "w":1.25}, {"x":1.25, "y":5.25, "w":1.25}, {"x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"x":10, "y":5.25, "w":1.25}, {"x":11.25, "y":5.25, "w":1.25}, {"x":12.5, "y":5.25, "w":1.25}, {"x":13.75, "y":5.25, "w":1.25}, {"x":15.25, "y":5.25}, {"x":16.25, "y":5.25}, {"x":17.25, "y":5.25}]
+ },
+ "LAYOUT_tsangan": {
+ "layout": [{"x":0, "y":0}, {"x":1.25, "y":0}, {"x":2.25, "y":0}, {"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":12.75, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"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":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25, "w":2}, {"x":15.25, "y":1.25}, {"x":16.25, "y":1.25}, {"x":17.25, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15.25, "y":2.25}, {"x":16.25, "y":2.25}, {"x":17.25, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":2.75}, {"x":16.25, "y":4.25}, {"x":0, "y":5.25, "w":1.5}, {"x":1.5, "y":5.25}, {"x":2.5, "y":5.25, "w":1.5}, {"x":4, "y":5.25, "w":7}, {"x":11, "y":5.25, "w":1.5}, {"x":12.5, "y":5.25}, {"x":13.5, "y":5.25, "w":1.5}, {"x":15.25, "y":5.25}, {"x":16.25, "y":5.25}, {"x":17.25, "y":5.25}]
+ },
+ "LAYOUT_full_bs": {
+ "layout": [{"x":0, "y":0}, {"x":1.25, "y":0}, {"x":2.25, "y":0}, {"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":12.75, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"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":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25, "w":2}, {"x":15.25, "y":1.25}, {"x":16.25, "y":1.25}, {"x":17.25, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15.25, "y":2.25}, {"x":16.25, "y":2.25}, {"x":17.25, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":2.75}, {"x":16.25, "y":4.25}, {"x":0, "y":5.25, "w":1.25}, {"x":1.25, "y":5.25, "w":1.25}, {"x":2.5, "y":5.25, "w":1.25}, {"x":3.75, "y":5.25, "w":6.25}, {"x":10, "y":5.25, "w":1.25}, {"x":11.25, "y":5.25, "w":1.25}, {"x":12.5, "y":5.25, "w":1.25}, {"x":13.75, "y":5.25, "w":1.25}, {"x":15.25, "y":5.25}, {"x":16.25, "y":5.25}, {"x":17.25, "y":5.25}]
+ },
+ "LAYOUT_split_bs_tsangan": {
+ "layout": [{"x":0, "y":0}, {"x":1.25, "y":0}, {"x":2.25, "y":0}, {"x":3.25, "y":0}, {"x":4.25, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":12.75, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.25}, {"x":1, "y":1.25}, {"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":7, "y":1.25}, {"x":8, "y":1.25}, {"x":9, "y":1.25}, {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.25}, {"x":13, "y":1.25}, {"x":14, "y":1.25}, {"x":15.25, "y":1.25}, {"x":16.25, "y":1.25}, {"x":17.25, "y":1.25}, {"x":0, "y":2.25, "w":1.5}, {"x":1.5, "y":2.25}, {"x":2.5, "y":2.25}, {"x":3.5, "y":2.25}, {"x":4.5, "y":2.25}, {"x":5.5, "y":2.25}, {"x":6.5, "y":2.25}, {"x":7.5, "y":2.25}, {"x":8.5, "y":2.25}, {"x":9.5, "y":2.25}, {"x":10.5, "y":2.25}, {"x":11.5, "y":2.25}, {"x":12.5, "y":2.25}, {"x":13.5, "y":2.25, "w":1.5}, {"x":15.25, "y":2.25}, {"x":16.25, "y":2.25}, {"x":17.25, "y":2.25}, {"x":0, "y":3.25, "w":1.75}, {"x":1.75, "y":3.25}, {"x":2.75, "y":3.25}, {"x":3.75, "y":3.25}, {"x":4.75, "y":3.25}, {"x":5.75, "y":3.25}, {"x":6.75, "y":3.25}, {"x":7.75, "y":3.25}, {"x":8.75, "y":3.25}, {"x":9.75, "y":3.25}, {"x":10.75, "y":3.25}, {"x":11.75, "y":3.25}, {"x":12.75, "y":3.25, "w":2.25}, {"x":0, "y":4.25, "w":2.25}, {"x":2.25, "y":4.25}, {"x":3.25, "y":4.25}, {"x":4.25, "y":4.25}, {"x":5.25, "y":4.25}, {"x":6.25, "y":4.25}, {"x":7.25, "y":4.25}, {"x":8.25, "y":4.25}, {"x":9.25, "y":4.25}, {"x":10.25, "y":4.25}, {"x":11.25, "y":4.25}, {"x":12.25, "y":4.25, "w":2.75}, {"x":16.25, "y":4.25}, {"x":0, "y":5.25, "w":1.5}, {"x":1.5, "y":5.25}, {"x":2.5, "y":5.25, "w":1.5}, {"x":4, "y":5.25, "w":7}, {"x":11, "y":5.25, "w":1.5}, {"x":12.5, "y":5.25}, {"x":13.5, "y":5.25, "w":1.5}, {"x":15.25, "y":5.25}, {"x":16.25, "y":5.25}, {"x":17.25, "y":5.25}]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/cowfish/keymaps/default/keymap.c b/keyboards/handwired/swiftrax/cowfish/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7df7c1a62af
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum _layer {
+ _MA,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_MA] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_P1, 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_BSLS, 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_MENU, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[_FN] = 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_F13, 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_BSLS, 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_MENU, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT)
+};
diff --git a/keyboards/handwired/swiftrax/cowfish/keymaps/via/keymap.c b/keyboards/handwired/swiftrax/cowfish/keymaps/via/keymap.c
new file mode 100644
index 00000000000..74a8e0cef13
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/keymaps/via/keymap.c
@@ -0,0 +1,28 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[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_F13, 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_BSLS, 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_APP, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+[2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
diff --git a/keyboards/handwired/swiftrax/cowfish/keymaps/via/rules.mk b/keyboards/handwired/swiftrax/cowfish/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/handwired/swiftrax/cowfish/readme.md b/keyboards/handwired/swiftrax/cowfish/readme.md
new file mode 100644
index 00000000000..78be471df4f
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/readme.md
@@ -0,0 +1,13 @@
+# CowFish
+
+A TKL with F13 that uses Ai03's unified daughter board
+
+* Keyboard Maintainer: Swiftrax
+* Hardware Supported: CowFish
+* Hardware Availability: https://github.com/swiftrax
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/swiftrax/cowfish:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/swiftrax/cowfish/rules.mk b/keyboards/handwired/swiftrax/cowfish/rules.mk
new file mode 100644
index 00000000000..ad6547e1e7b
--- /dev/null
+++ b/keyboards/handwired/swiftrax/cowfish/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 = 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
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
\ No newline at end of file
diff --git a/keyboards/jian/readme.md b/keyboards/jian/readme.md
index 7afff2ab70e..7258e31c1a2 100644
--- a/keyboards/jian/readme.md
+++ b/keyboards/jian/readme.md
@@ -2,7 +2,10 @@
-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.
+40% ergonomic keyboard kit. Jian supports Cherry MX, Alps, Kailh Choc switches in PCB mounted and plate mounted variants.
+You can assemble the keyboard without a mounting plate.
+Jian also supports RGB LED underglow (with a strip like WS2812B) and single color in-switch LED backlight.
+Each half can work standalone.
* Keyboard Maintainer: [KGOH](https://github.com/KGOH)
* Hardware Supported: Jian PCB rev1, rev2, Pro Micro
diff --git a/keyboards/jj40/keymaps/ajp10304/keymap.c b/keyboards/jj40/keymaps/ajp10304/keymap.c
deleted file mode 100644
index c34a7c29299..00000000000
--- a/keyboards/jj40/keymaps/ajp10304/keymap.c
+++ /dev/null
@@ -1,342 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "keymap_uk.h"
-
-extern keymap_config_t keymap_config;
-
-enum jj40_layers {
- _QWERTY,
- _MAC,
- _LOWER,
- _MLWR,
- _RAISE,
- _MRSE,
- _FUNC,
- _MFNC,
- _FUNC2,
- _MFNC2,
- _ADJUST,
- _MOUSE
-};
-
-enum jj40_keycodes {
- QWERTY = SAFE_RANGE,
- MAC,
- FUNC,
- MFNC,
- FUNC2,
- MFNC2,
- LOWER,
- MLWR,
- RAISE,
- MRSE,
- MOUSE,
- DYNAMIC_MACRO_RANGE
-};
-
-#include "dynamic_macro.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Qwerty
- * ,-----------------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 |
- * `-----------------------------------------------------------------------------------'
- */
-[_QWERTY] = LAYOUT_ortho_4x12(\
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,\
- MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) ,\
- KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT ,\
- MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC2) \
-),
-
-/* Function
- * ,-----------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn |
- * `-----------------------------------------------------------------------------------'
- */
-[_FUNC] = LAYOUT_ortho_4x12(\
- 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, UK_TILD, KC_INSERT ,\
- KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,\
- _______, _______, _______, _______, _______, _______, _______, MO(_MOUSE), _______, _______, _______, _______ \
-),
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = LAYOUT_ortho_4x12(\
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC ,\
- LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC) ,\
- KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,\
- _______, _______, _______, _______, _______, KC_DEL, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
-),
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | { | } | | |< | LEFT | DOWN |RIGHT | >| |ZOOM -|
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Mouse| | | | | Alt | Enter|Raise | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = LAYOUT_ortho_4x12(\
- KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN ,\
- KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) ,\
- _______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) ,\
- MO(_MOUSE), _______, _______, _______, _______, KC_LALT, KC_ENT, _______, XXXXXXX, _______, _______, _______ \
-),
-
-/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * | ???? | Reset|Qwerty| | | REC1 | REC2 | | | | | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | CAPS | | | | | PLAY1| PLAY2| Mute | Vol+ | Play | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | PC/MC| | | | | STOP | STOP | Prev | Vol- | Next | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_ADJUST] = LAYOUT_ortho_4x12(\
- M(0), RESET, QWERTY, BL_ON, BL_OFF, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL ,\
- KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,\
- TG(_MAC), RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
-
-/* Mouse
- * ,-----------------------------------------------------------------------------------.
- * | ESC | | | | | | | | | | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN |RIGHT | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_MOUSE] = LAYOUT_ortho_4x12(\
- KC_ESC , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______,\
- KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
-),
-
-/* Function 2 (Right hand side)
- * ,-----------------------------------------------------------------------------------.
- * | | |WRDSEL| | | | LNDEL| | | | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | LNSEL| DUP | | | | |LNJOIN| | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | UNDO | CUT | COPY | PASTE| | | | | | | MODE |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_FUNC2] = LAYOUT_ortho_4x12(\
- _______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______,\
- _______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______,\
- _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98), \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
-
-[_MAC]= LAYOUT_ortho_4x12(\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- MFNC, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, MFNC2 \
-),
-
-[_MLWR] = LAYOUT_ortho_4x12(\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
-
-[_MRSE] = LAYOUT_ortho_4x12(\
- _______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\
- _______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) ,\
- _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) ,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
-
-[_MFNC]= LAYOUT_ortho_4x12(\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) ,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
-
-[_MFNC2] = LAYOUT_ortho_4x12(\
- _______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______,\
- _______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______,\
- _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99), \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-)
-
-};
-
-void persistant_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
-
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- persistant_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- 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 MLWR:
- if (record->event.pressed) {
- layer_on(_LOWER);
- layer_on(_MLWR);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- layer_off(_MLWR);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case MRSE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- layer_on(_MRSE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- layer_off(_MRSE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case MFNC:
- if (record->event.pressed) {
- layer_on(_FUNC);
- layer_on(_MFNC);
- } else {
- layer_off(_FUNC);
- layer_off(_MFNC);
- }
- return false;
- case MFNC2:
- if (record->event.pressed) {
- layer_on(_FUNC2);
- layer_on(_MFNC2);
- } else {
- layer_off(_FUNC2);
- layer_off(_MFNC2);
- }
- return false;
- }
- return true;
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t keycode, uint8_t opt) {
- // These would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- switch(keycode) {
- case 0: // Some custom string here
- SEND_STRING("");
- return false;
-
- case 1: // Word Select
- SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LCTRL));
- return false;
-
- case 2: // Word Select Mac
- SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LALT));
- return false;
-
- case 3: // Line Select
- SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT));
- return false;
-
- case 4: // Line Select Mac
- SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT));
- return false;
-
- case 5: // Line Delete
- SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT));
- SEND_STRING(SS_TAP(X_BSPACE));
- return false;
-
- case 6: // Line Delete Mac
- SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT));
- SEND_STRING(SS_TAP(X_BSPACE));
- return false;
-
- case 7: // Duplicate Selection
- SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
- return false;
-
- case 8: // Duplicate Selection Mac
- SEND_STRING(SS_LGUI("c") SS_TAP(X_RIGHT) SS_LGUI("v"));
- return false;
-
- case 9: // Join line
- SEND_STRING(SS_TAP(X_END) SS_TAP(X_DELETE));
- return false;
-
- case 10: // Join line Mac
- SEND_STRING(SS_LCTRL("e") SS_TAP(X_DELETE));
- return false;
-
- case 98: // Print mode
- SEND_STRING("PC");
- return false;
-
- case 99: // Print mode
- SEND_STRING("OSX");
- return false;
- }
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/jj40/keymaps/ajp10304/readme.md b/keyboards/jj40/keymaps/ajp10304/readme.md
index 86286d1118a..345fbccf60f 100644
--- a/keyboards/jj40/keymaps/ajp10304/readme.md
+++ b/keyboards/jj40/keymaps/ajp10304/readme.md
@@ -1,11 +1,16 @@
# AJP10304 Custom JJ40 Layout
-# Also available for the Atreus50 and Planck
+# Also available for the Planck, Shark and Atreus50
**Note:** In the tables below where there are two characters on a key,
the second is the output when shift is applied.
**Note:** The below tables assume a UK layout.
+#### Flashing
+Use sleep to get a chance to get into boot mode.
+
+`make jj40:ajp10304:flash`
+
##### Main Qwerty Layer
* Tab: when held, operates as shift.
@@ -43,13 +48,13 @@ Activated when `Lower` is held in the above `qwerty` layer.
| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
- ##### Raise Layer
- Activated when `Raise` is held in the above `qwerty` layer.
+##### Raise Layer
+Activated when `Raise` is held in the above `qwerty` layer.
- * Preferred layer for typing brackets.
- * Allows for cursor navigation to be used solely with the right hand.
- * WRDSEL: Select the word where the cursor is.
- * |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
+* Preferred layer for typing brackets.
+* Allows for cursor navigation to be used solely with the right hand.
+* WRDSEL: Select the word where the cursor is.
+* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
| | | | | | | | | | | | |
| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
@@ -98,11 +103,17 @@ Activated when `fn` and `raise` held together.
| | | | | | | | | | | | |
| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| ESC | | | | | | | | | | | |
+| ESC | | | | | | | | BTN3 | | | |
| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | |
| | | | | | | | | | | | |
-####Manual Flashing of hex file
-Use sleep to get a chance to get into boot mode.
-`sleep 5; bootloadHID -r .build/jj40_ajp10304.hex`
+##### Number Pad Layout
+Activated when holding `Esc` key.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+| | | | | | | | 4 | 5 | 6 | * | |
+| | | | | | | | 1 | 2 | 3 | + | |
+| | | | | | | | 0 | . | , | - | |
diff --git a/keyboards/keyhive/maypad/config.h b/keyboards/keyhive/maypad/config.h
index 4fce7ffa0c8..00a46dafc1c 100644
--- a/keyboards/keyhive/maypad/config.h
+++ b/keyboards/keyhive/maypad/config.h
@@ -17,8 +17,8 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
+#define VENDOR_ID 0x4B48 //KH for Keyhive
+#define PRODUCT_ID 0x4D50 // MP
#define DEVICE_VER 0x0001
#define MANUFACTURER KeyHive
#define PRODUCT maypad
diff --git a/keyboards/keyhive/maypad/keymaps/via/keymap.c b/keyboards/keyhive/maypad/keymaps/via/keymap.c
new file mode 100644
index 00000000000..04ad4501b21
--- /dev/null
+++ b/keyboards/keyhive/maypad/keymaps/via/keymap.c
@@ -0,0 +1,26 @@
+/* Copyright 2019 codybender
+ *
+ * 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] = {
+ LAYOUT_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT
+ )
+};
diff --git a/keyboards/keyhive/maypad/keymaps/via/readme.md b/keyboards/keyhive/maypad/keymaps/via/readme.md
new file mode 100644
index 00000000000..7f3b7175635
--- /dev/null
+++ b/keyboards/keyhive/maypad/keymaps/via/readme.md
@@ -0,0 +1,6 @@
+# VIA Support for Maypad
+
+This adds [VIA](https://caniusevia.com/) support for the Keyhive Maypad.
+
+Please note that this is a keymap for the Ortho_5x4 layout.
+
diff --git a/keyboards/keyhive/maypad/keymaps/via/rules.mk b/keyboards/keyhive/maypad/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/keyhive/maypad/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/kyria/keymaps/plattfot/README.md b/keyboards/kyria/keymaps/plattfot/README.md
index b5b6ddaa2d0..860a3b78297 100644
--- a/keyboards/kyria/keymaps/plattfot/README.md
+++ b/keyboards/kyria/keymaps/plattfot/README.md
@@ -21,8 +21,8 @@ thumb keys to make it work without them.
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | LShift | Z | X | C | V | B | Lead | RAISE| | LOWER|DBLTAP| N | M | , < | . > | / ? | RShift |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
- // | MPlay| GUI | LCtrl| Space| LALT | | Enter|BSpace| NAV | LAlt |Worksp|
- // | | | | | | | | | | |toggle|
+ // | MPlay| GUI | LCtrl| Space| LALT | | Enter|BSpace| NAV | LCTL+|Worksp|
+ // | | | | | | | | | | LALT |toggle|
// `----------------------------------' `----------------------------------'
```
@@ -103,9 +103,9 @@ programming, and it is editor agnostic.
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
// | | | | | | F11 | | F12 | | | | | |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
- // | | | | | | |ScLock| | | | Ins | | | | | | |
+ // | | | | | | |ScLock| | | | Ins | | | | | |CapsLock|
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
- // | | | | | | | Esc | Del | | RAlt | |
+ // | | | | | | | | | | RAlt | |
// | | | | | | | | | | | |
// `----------------------------------' `----------------------------------'
```
@@ -113,6 +113,9 @@ programming, and it is editor agnostic.
Access to the functional keys, which I mostly use to run `emacs`
compilation mode.
+This layer also includes key that changes the state, like insert and
+caps lock.
+
Scroll Lock is used to toggle between English and Swedish.
## Notable features on this layer
@@ -130,7 +133,7 @@ Right rotary encoder
// ,-------------------------------------------. ,-------------------------------------------.
// | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
// |--------+------+------+------+------+------| |------+------+------+------+------+--------|
- // | | | | | | | | | Left | Up | Down | Right| |
+ // | | | ESC | DEL | | | | | Left | Up | Down | Right| |
// |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
// | | | | | | | | | | | | | | | | | |
// `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
@@ -144,6 +147,9 @@ row after using [ErgoDox](https://www.ergodox.io/) keyboards for a few
years. Do not feel I need a numpad layer, which seems to be quite
common with small keyboards like this.
+Esc and Delete is also on this layer as they are easy to reach and they
+only need to be chord with the modifiers.
+
# Adjust Layer: RGB
```
//
diff --git a/keyboards/kyria/keymaps/plattfot/keymap.c b/keyboards/kyria/keymaps/plattfot/keymap.c
index d897769898b..3bd3489f62f 100644
--- a/keyboards/kyria/keymaps/plattfot/keymap.c
+++ b/keyboards/kyria/keymaps/plattfot/keymap.c
@@ -52,8 +52,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | LShift | Z | X | C | V | B | Lead | RAISE| | LOWER|DBLTAP| N | M | , < | . > | / ? | RShift |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
- * | MPlay| GUI | LCtrl| Space| LALT | | Enter|BSpace| NAV | LAlt |Worksp|
- * | | | | | | | | | | |toggle|
+ * | MPlay| GUI | LCtrl| Space| LALT | | Enter|BSpace| NAV |LCTL+ |Worksp|
+ * | | | | | | | | | |LALT |toggle|
* `----------------------------------' `----------------------------------'
*/
[_DEFAULT] = LAYOUT(
@@ -91,26 +91,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
* | | | | | | F11 | | F12 | | | | | |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
- * | | | | | | |ScLock| | | | Ins | | | | | | |
+ * | | | | | | |ScLock| | | | Ins | | | | | |CapsLock|
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
- * | | | | | | | Esc | Del | | RAlt | |
+ * | | | | | | | | | | RAlt | |
* | | | | | | | | | | | |
* `----------------------------------' `----------------------------------'
*/
[_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_SLCK, _______, _______, KC_INS, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, KC_ESC, KC_DEL, _______, KC_RALT, _______
+ _______, _______, _______, _______, _______, _______, KC_SLCK, _______, _______, KC_INS, _______, _______, _______, _______, _______, KC_CAPS,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_RALT, _______
),
/*
- * Navigation Layer: Number keys, navigation
+ * Navigation Layer: Number keys, navigation, modification
*
* ,-------------------------------------------. ,-------------------------------------------.
* | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
- * | | | | | | | | | Left | Up | Down | Right| |
+ * | | | Esc | Del | | | | | Left | Up | Down | Right| |
* |--------+------+------+------+------+------+-------------. ,-------------+------+------+------+------+------+--------|
* | | | | | | | | | | | | | | | | | |
* `----------------------+------+------+------+------+------| |------+------+------+------+------+----------------------'
@@ -120,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_NAV] = LAYOUT(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, _______,
+ _______, _______, KC_ESC, KC_DEL, _______, _______, _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_RCTL, _______
),
@@ -177,27 +177,22 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Double tap gets messed up with macros, turning it off
double_tap_it = false;
SEND_STRING("()" SS_TAP(X_LEFT));
- clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
return false;
case M_LRCBR:
double_tap_it = false;
SEND_STRING("{}" SS_TAP(X_LEFT));
- clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
return false;
case M_LRBRC:
double_tap_it = false;
SEND_STRING("[]" SS_TAP(X_LEFT));
- clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
return false;
case M_LRABR:
double_tap_it = false;
SEND_STRING("<>" SS_TAP(X_LEFT));
- clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
return false;
case M_DQUOT:
double_tap_it = false;
SEND_STRING("''" SS_TAP(X_LEFT));
- clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
return false;
case DBL_TAP:
double_tap_it = !double_tap_it;
@@ -206,10 +201,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
double_tap_it = false;
return true;
}
- } else if (double_tap_it && keycode != DBL_TAP) {
+
+ } else if (double_tap_it &&
+ keycode != DBL_TAP &&
+ keycode != OSL(_RAISE) &&
+ keycode != OSL(_LOWER) &&
+ keycode != MO(_NAV)) {
double_tap_it = false;
tap_code16(keycode);
- clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED);
}
return true;
diff --git a/keyboards/lily58/keymaps/bcat/config.h b/keyboards/lily58/keymaps/bcat/config.h
index f7f08d076a5..18092620449 100644
--- a/keyboards/lily58/keymaps/bcat/config.h
+++ b/keyboards/lily58/keymaps/bcat/config.h
@@ -1,6 +1,3 @@
#pragma once
#define EE_HANDS
-
-/* Work around Elite-C v3 with broken VBUS detection. */
-#define SPLIT_USB_DETECT
diff --git a/keyboards/lily58/keymaps/bcat/keymap.c b/keyboards/lily58/keymaps/bcat/keymap.c
index 7fa65b876f1..a194e1c9dc8 100644
--- a/keyboards/lily58/keymaps/bcat/keymap.c
+++ b/keyboards/lily58/keymaps/bcat/keymap.c
@@ -1,5 +1,7 @@
#include QMK_KEYBOARD_H
+#include "bcat.h"
+
enum layer {
LAYER_DEFAULT,
LAYER_LOWER,
@@ -10,31 +12,34 @@ enum layer {
#define LY_LWR MO(LAYER_LOWER)
#define LY_RSE MO(LAYER_RAISE)
-#define KY_CESC LCTL_T(KC_ESC)
+#define KY_CSPC LCTL(KC_SPC)
+#define KY_LOCK LGUI(KC_L)
+#define KY_WINL LGUI(KC_LEFT)
+#define KY_WINR LGUI(KC_RGHT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default layer: http://www.keyboard-layout-editor.com/#/gists/e0eb3af65961e9fd612dcff3ddd88e4f */
[LAYER_DEFAULT] = LAYOUT(
KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KY_CESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ 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_WBAK, KC_WFWD, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LCTL, KC_LALT, LY_LWR, KC_SPC, KC_ENT, LY_RSE, KC_RGUI, KC_APP
+ KC_LGUI, KC_LCTL, LY_LWR, KC_SPC, KC_ENT, LY_RSE, KC_RALT, KC_APP
),
/* Lower layer: http://www.keyboard-layout-editor.com/#/gists/19ad0d3b5d745fbb2818db09740f5a11 */
[LAYER_LOWER] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_CAPS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- _______, _______, _______, _______, _______, _______, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
- _______, KC_APP, KC_PSCR, KC_SLCK, KC_PAUS, _______, _______, _______, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_GRV,
+ MC_ALTT, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ KY_CSPC, KY_WINL, KY_WINR, KY_LOCK, KC_WBAK, KC_WFWD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_TILD,
+ _______, KC_APP, KC_PSCR, KC_SLCK, KC_PAUS, KC_LGUI, _______, _______, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_GRV,
_______, _______, _______, _______, _______, _______, _______, _______
),
/* Raise layer: http://www.keyboard-layout-editor.com/#/gists/912be7955f781cdaf692cc4d4c0b5823 */
[LAYER_RAISE] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F11, KC_DEL,
_______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_F12, KC_INS,
_______, _______, _______, _______, _______, _______, _______, _______
@@ -50,6 +55,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-layer_state_t layer_state_set_user(layer_state_t state) {
+layer_state_t layer_state_set_keymap(layer_state_t state) {
return update_tri_layer_state(state, LAYER_LOWER, LAYER_RAISE, LAYER_ADJUST);
}
diff --git a/keyboards/lily58/keymaps/bcat/readme.md b/keyboards/lily58/keymaps/bcat/readme.md
index 57b7929d3bd..270e7473113 100644
--- a/keyboards/lily58/keymaps/bcat/readme.md
+++ b/keyboards/lily58/keymaps/bcat/readme.md
@@ -11,24 +11,24 @@ using layers for numbers and symbols, so in practice this goes unused.
placed in the same positions as on the ErgoDox EZ. (There's no real reason for
this; I just had to do _something_ with those keys.)
-* The extra thumb keys are used for dedicated Ctrl/Menu keys (not super useful)
-and browser back/forward navigation keys (actually more useful than expected).
+* The extra thumb keys are used for dedicated Super/Menu keys, as well as
+browser back/forward navigation keys.
## Default layer
-
+
([KLE](http://www.keyboard-layout-editor.com/#/gists/e0eb3af65961e9fd612dcff3ddd88e4f))
## Lower layer
-
+
([KLE](http://www.keyboard-layout-editor.com/#/gists/19ad0d3b5d745fbb2818db09740f5a11))
## Raise layer
-
+
([KLE](http://www.keyboard-layout-editor.com/#/gists/912be7955f781cdaf692cc4d4c0b5823))
diff --git a/keyboards/nightmare/config.h b/keyboards/nightmare/config.h
index fafba644dd7..29ab97c14f0 100644
--- a/keyboards/nightmare/config.h
+++ b/keyboards/nightmare/config.h
@@ -20,8 +20,8 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xB00B
-#define PRODUCT_ID 0x0000
+#define VENDOR_ID 0x434B // "CK"
+#define PRODUCT_ID 0x4E49 // "NI"
#define DEVICE_VER 0x0001
#define MANUFACTURER cfbender
#define PRODUCT nightmare
diff --git a/keyboards/nightmare/keymaps/via/keymap.c b/keyboards/nightmare/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a347e7e4dce
--- /dev/null
+++ b/keyboards/nightmare/keymaps/via/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2019 cfbender
+ *
+ * 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_split(/* Base */
+ KC_HOME, KC_GESC, 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, LCTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENTER,
+ KC_PGUP, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_PGDN, KC_LGUI, KC_LALT, KC_LALT, KC_SPACE, KC_SPACE, KC_RGUI, KC_RCTL, MO(2)),
+
+ [1] = LAYOUT_split(
+ _______, _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RIGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [2] = LAYOUT_split(
+ _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_UP, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RIGHT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [3] = LAYOUT_split(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
diff --git a/keyboards/nightmare/keymaps/via/readme.md b/keyboards/nightmare/keymaps/via/readme.md
new file mode 100644
index 00000000000..b044730cf57
--- /dev/null
+++ b/keyboards/nightmare/keymaps/via/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for nightmare
+
+
\ No newline at end of file
diff --git a/keyboards/nightmare/keymaps/via/rules.mk b/keyboards/nightmare/keymaps/via/rules.mk
new file mode 100644
index 00000000000..43061db1dd4
--- /dev/null
+++ b/keyboards/nightmare/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/nomu30/config.h b/keyboards/nomu30/config.h
index 13fae5af3aa..bde8fa8dabe 100644
--- a/keyboards/nomu30/config.h
+++ b/keyboards/nomu30/config.h
@@ -20,30 +20,17 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define VENDOR_ID 0xC0C0
-#define PRODUCT_ID 0x3000
+#define VENDOR_ID 0x524B // recompile keys
+#define PRODUCT_ID 0x4E31 // Nomu30
#define DEVICE_VER 0x0001
-#define MANUFACTURER Naoto Takai
-#define PRODUCT nomu30
-#define DESCRIPTION A 30% keyboard with ISO enter.
+#define MANUFACTURER recompile keys
+#define PRODUCT Nomu30
+#define DESCRIPTION recompile keys Nomu30
/* key matrix size */
#define MATRIX_ROWS 3
#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)
- *
-*/
-#define MATRIX_ROW_PINS { D1, D0, D4 }
-#define MATRIX_COL_PINS { C6, D7, E6, B4, F4, F5, F6, F7, B1, B3, B2, B6 }
-#define UNUSED_PINS
-
-/* COL2ROW, ROW2COL*/
-#define DIODE_DIRECTION COL2ROW
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 11
diff --git a/keyboards/nomu30/keymaps/via/keymap.c b/keyboards/nomu30/keymaps/via/keymap.c
new file mode 100644
index 00000000000..e732c1f63e0
--- /dev/null
+++ b/keyboards/nomu30/keymaps/via/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2019 Naoto Takai
+ *
+ * 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_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_SPC
+ ),
+ [1] = 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
+ ),
+ [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
+ ),
+ [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
+ )
+};
diff --git a/keyboards/nomu30/keymaps/via/rules.mk b/keyboards/nomu30/keymaps/via/rules.mk
new file mode 100644
index 00000000000..36b7ba9cbc9
--- /dev/null
+++ b/keyboards/nomu30/keymaps/via/rules.mk
@@ -0,0 +1,2 @@
+VIA_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/nomu30/nomu30.h b/keyboards/nomu30/nomu30.h
index e6c553bec52..cf724ac6e4c 100644
--- a/keyboards/nomu30/nomu30.h
+++ b/keyboards/nomu30/nomu30.h
@@ -16,15 +16,12 @@
#pragma once
#include "quantum.h"
+#ifdef KEYBOARD_nomu30_rev1
+ #include "rev1.h"
+#elif KEYBOARD_nomu30_rev2
+ #include "rev2.h"
+#endif
-/* 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( \
K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, \
@@ -35,14 +32,3 @@
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, KC_NO }, \
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, KC_NO, KC_NO, KC_NO }, \
}
-
-#define LAYOUT_kc( \
- K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208 \
-) \
-LAYOUT( \
- KC_##K001, KC_##K002, KC_##K003, KC_##K004, KC_##K005, KC_##K006, KC_##K007, KC_##K008, KC_##K009, KC_##K010, KC_##K011, \
- KC_##K100, KC_##K101, KC_##K102, KC_##K103, KC_##K104, KC_##K105, KC_##K106, KC_##K107, KC_##K108, KC_##K109, KC_##K110, \
- KC_##K200, KC_##K201, KC_##K202, KC_##K203, KC_##K204, KC_##K205, KC_##K206, KC_##K207, KC_##K208 \
-)
diff --git a/keyboards/nomu30/rev1/config.h b/keyboards/nomu30/rev1/config.h
new file mode 100644
index 00000000000..718c840bd6b
--- /dev/null
+++ b/keyboards/nomu30/rev1/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2019 Naoto Takai
+
+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
+
+/*
+ * 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 { D1, D0, D4 }
+#define MATRIX_COL_PINS { C6, D7, E6, B4, F4, F5, F6, F7, B1, B3, B2, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/nomu30/rev1/rev1.c b/keyboards/nomu30/rev1/rev1.c
new file mode 100644
index 00000000000..8adf9859f89
--- /dev/null
+++ b/keyboards/nomu30/rev1/rev1.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Naoto Takai
+ *
+ * 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/nomu30/rev1/rev1.h b/keyboards/nomu30/rev1/rev1.h
new file mode 100644
index 00000000000..fa161f267e1
--- /dev/null
+++ b/keyboards/nomu30/rev1/rev1.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Naoto Takai
+ *
+ * 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"
diff --git a/keyboards/nomu30/rev1/rules.mk b/keyboards/nomu30/rev1/rules.mk
new file mode 100644
index 00000000000..3c82bca2463
--- /dev/null
+++ b/keyboards/nomu30/rev1/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
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/nomu30/rev2/config.h b/keyboards/nomu30/rev2/config.h
new file mode 100644
index 00000000000..de9b37ec26c
--- /dev/null
+++ b/keyboards/nomu30/rev2/config.h
@@ -0,0 +1,47 @@
+/*
+Copyright 2020 Naoto Takai
+
+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
+
+/*
+ * 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, B1, B0 }
+#define MATRIX_COL_PINS { C4, C5, C6, C7, B7, B6, B5, B4, B3, D5, D4, D3 }
+#define UNUSED_PINS { C2, D0, D1, D2, D6 }
+
+/* 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
+
+/* disable these deprecated features by default */
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/nomu30/rev2/rev2.c b/keyboards/nomu30/rev2/rev2.c
new file mode 100644
index 00000000000..5eabb33ac6d
--- /dev/null
+++ b/keyboards/nomu30/rev2/rev2.c
@@ -0,0 +1,17 @@
+/* Copyright 2020 Naoto Takai
+ *
+ * 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/nomu30/rev2/rev2.h b/keyboards/nomu30/rev2/rev2.h
new file mode 100644
index 00000000000..fa161f267e1
--- /dev/null
+++ b/keyboards/nomu30/rev2/rev2.h
@@ -0,0 +1,19 @@
+/* Copyright 2020 Naoto Takai
+ *
+ * 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"
diff --git a/keyboards/nomu30/rev2/rules.mk b/keyboards/nomu30/rev2/rules.mk
new file mode 100644
index 00000000000..bea3a54d18b
--- /dev/null
+++ b/keyboards/nomu30/rev2/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 = 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 = 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/nomu30/rules.mk b/keyboards/nomu30/rules.mk
index 4b7193da495..8a739594070 100644
--- a/keyboards/nomu30/rules.mk
+++ b/keyboards/nomu30/rules.mk
@@ -1,33 +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 = 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
+DEFAULT_FOLDER = nomu30/rev1
diff --git a/keyboards/planck/keymaps/abishalom/config.h b/keyboards/planck/keymaps/abishalom/config.h
new file mode 100644
index 00000000000..672c5d570f0
--- /dev/null
+++ b/keyboards/planck/keymaps/abishalom/config.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/planck/keymaps/abishalom/keymap.c b/keyboards/planck/keymaps/abishalom/keymap.c
new file mode 100644
index 00000000000..4c1185ad992
--- /dev/null
+++ b/keyboards/planck/keymaps/abishalom/keymap.c
@@ -0,0 +1,316 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _NAV,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ PLOVER,
+ BACKLIT,
+ EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl| CAPS | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT(_NAV, 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_LCTL, KC_CAPS, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End |Pl/Ps |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Prev | Vol- | Vol+ | Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ 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, KC_MPLY,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+/* 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 |ISO # |ISO / |Pg Up |Pg Dn |Pl/Ps |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Prev | Vol- | Vol+ | Next |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ 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_MPLY,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+/* Nav
+ * ,----------------------------------l-------------------------------------------------.
+ * | | | | | | | | Pg Dn| Up | Pg Up| | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Mute | Vol-| Vol+ | Pl/Ps| | | Left | Down | Right| | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NAV] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, KC_PGDOWN, KC_UP, KC_PGUP, _______ , _______,
+ _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT
+),
+
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_PLOVER] = LAYOUT_planck_grid(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * v------------------------RGB CONTROL--------------------v
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty| | |Plover| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|TermOn|TermOf| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, PLOVER, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+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) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef KEYBOARD_planck_rev5
+ writePinLow(E6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ writePinHigh(E6);
+ #endif
+ }
+ return false;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+ #endif
+ 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) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_DOWN);
+ #else
+ tap_code(KC_PGDN);
+ #endif
+ } else {
+ #ifdef MOUSEKEY_ENABLE
+ tap_code(KC_MS_WH_UP);
+ #else
+ tap_code(KC_PGUP);
+ #endif
+ }
+ }
+}
+
+void dip_switch_update_user(uint8_t index, bool active) {
+ switch (index) {
+ case 0: {
+#ifdef AUDIO_ENABLE
+ static bool play_sound = false;
+#endif
+ if (active) {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_song); }
+#endif
+ layer_on(_ADJUST);
+ } else {
+#ifdef AUDIO_ENABLE
+ if (play_sound) { PLAY_SONG(plover_gb_song); }
+#endif
+ layer_off(_ADJUST);
+ }
+#ifdef AUDIO_ENABLE
+ play_sound = true;
+#endif
+ break;
+ }
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+#ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ } else {
+ if (muse_counter) {
+ stop_all_notes();
+ muse_counter = 0;
+ }
+ }
+#endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/abishalom/readme.md b/keyboards/planck/keymaps/abishalom/readme.md
new file mode 100644
index 00000000000..9978df19bec
--- /dev/null
+++ b/keyboards/planck/keymaps/abishalom/readme.md
@@ -0,0 +1,7 @@
+# Abishalom Planck Layout
+
+Mostly the same as default. Changes:
+- Get rid of COLEMAK and DVORAK layers
+- Add new layer (NAV) which is accessed by holding the ESC key. This brings up arrow keys in ijkl spots, along with handy media funcions in wasd.
+- Move left control to the corner, put caps lock between LCTRL and LGUI
+- Adjustments to media keys in bottom right corner
\ No newline at end of file
diff --git a/keyboards/planck/keymaps/abishalom/rules.mk b/keyboards/planck/keymaps/abishalom/rules.mk
new file mode 100644
index 00000000000..dcf16bef399
--- /dev/null
+++ b/keyboards/planck/keymaps/abishalom/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/ajp10304/readme.md b/keyboards/planck/keymaps/ajp10304/readme.md
index 6573266db15..6ea8f0061d4 100644
--- a/keyboards/planck/keymaps/ajp10304/readme.md
+++ b/keyboards/planck/keymaps/ajp10304/readme.md
@@ -1,14 +1,15 @@
# AJP10304 Custom Planck Layout
-# Also available for the Atreus50 and JJ40
+# Also available for the Shark, JJ40 and Atreus50
**Note:** In the tables below where there are two characters on a key,
the second is the output when shift is applied.
**Note:** The below tables assume a UK layout.
-####Flashing
-Rev <=5: sudo make planck:ajp10304:dfu
-Rev 6: sudo make planck/rev6:ajp10304:dfu-util
+#### Flashing
+Rev <=5: `make planck:ajp10304:flash`
+
+Rev 6: `make planck/rev6:ajp10304:flash`
##### Main Qwerty Layer
@@ -47,13 +48,13 @@ Activated when `Lower` is held in the above `qwerty` layer.
| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
- ##### Raise Layer
- Activated when `Raise` is held in the above `qwerty` layer.
+##### Raise Layer
+Activated when `Raise` is held in the above `qwerty` layer.
- * Preferred layer for typing brackets.
- * Allows for cursor navigation to be used solely with the right hand.
- * WRDSEL: Select the word where the cursor is.
- * |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
+* Preferred layer for typing brackets.
+* Allows for cursor navigation to be used solely with the right hand.
+* WRDSEL: Select the word where the cursor is.
+* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
| | | | | | | | | | | | |
| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
@@ -102,7 +103,17 @@ Activated when `fn` and `raise` held together.
| | | | | | | | | | | | |
| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
-| ESC | | | | | | | | | | | |
+| ESC | | | | | | | | BTN3 | | | |
| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | |
| | | | | | | | | | | | |
+
+##### Number Pad Layout
+Activated when holding `Esc` key.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+| | | | | | | | 4 | 5 | 6 | * | |
+| | | | | | | | 1 | 2 | 3 | + | |
+| | | | | | | | 0 | . | , | - | |
diff --git a/keyboards/planck/keymaps/ajp10304/rules.mk b/keyboards/planck/keymaps/ajp10304/rules.mk
deleted file mode 100644
index 4dee01cd5b1..00000000000
--- a/keyboards/planck/keymaps/ajp10304/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-AUDIO_ENABLE = no
-MOUSEKEY_ENABLE = yes
-
diff --git a/keyboards/planck/keymaps/callum/config.h b/keyboards/planck/keymaps/callum/config.h
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/keyboards/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
index 4db54577b01..d9fe43f0035 100644
--- a/keyboards/planck/keymaps/callum/keymap.c
+++ b/keyboards/planck/keymaps/callum/keymap.c
@@ -49,7 +49,7 @@
#define bspc KC_BSPC
#define caps KC_CAPS
#define comm KC_COMM
-#define dash A(KC_MINS)
+#define dash A(KC_MINS) // en-dash (–); or with shift: em-dash (—)
#define scln KC_SCLN
#define slsh KC_SLSH
#define spc KC_SPC
@@ -60,7 +60,6 @@
#define mins KC_MINS
#define quot KC_QUOT
#define esc KC_ESC
-#define gbp A(KC_3)
#define down KC_DOWN
#define home G(KC_LEFT)
@@ -75,8 +74,8 @@
#define tabr G(S(KC_RBRC))
#define fwd G(KC_RBRC)
#define back G(KC_LBRC)
-#define slup S(A(KC_UP))
-#define sldn S(A(KC_DOWN))
+#define slup S(A(KC_UP)) // Previous unread in Slack
+#define sldn S(A(KC_DOWN)) // Next unread in Slack
#define ctl1 C(KC_1)
#define ctl2 C(KC_2)
@@ -137,6 +136,7 @@ enum planck_layers {
};
enum planck_keycodes {
+ // ASCII
ampr = SAFE_RANGE,
astr,
at,
@@ -158,6 +158,11 @@ enum planck_keycodes {
rprn,
tild,
+ // Curly quotes
+ lcqt,
+ rcqt,
+
+ // "Smart" mods
cmd,
};
@@ -171,7 +176,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[SYMB] = LAYOUT_planck_grid(
esc, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, dash,
- del, at, dlr, eql, lprn, lbrc, rbrc, rprn, astr, hash, plus, gbp,
+ lcqt, at, dlr, eql, lprn, lbrc, rbrc, rprn, astr, hash, plus, rcqt,
____, grv, pipe, bsls, lcbr, tild, circ, rcbr, ampr, exlm, perc, ____,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
),
@@ -191,78 +196,112 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-bool send_string_if_keydown(keyrecord_t *record, const char *s) {
+bool send_string_if_keydown(
+ keyrecord_t *record,
+ const char *unshifted,
+ const char *shifted) {
if (record->event.pressed) {
- send_string(s);
+ if (shifted) {
+ uint8_t shifts = get_mods() & MOD_MASK_SHIFT;
+ if (shifts) {
+ del_mods(shifts);
+ SEND_STRING(shifted);
+ add_mods(shifts);
+ } else {
+ SEND_STRING(unshifted);
+ }
+ } else {
+ SEND_STRING(unshifted);
+ }
}
return true;
}
-int cmd_keys_down = 0;
+// Holding both cmd keys will instead register as cmd + ctl
+bool smart_cmd(keyrecord_t *record) {
+ static int cmd_keys_down = 0;
+
+ if (record->event.pressed) {
+ if (cmd_keys_down == 0) {
+ register_code(KC_LCMD);
+ } else {
+ register_code(KC_LCTL);
+ }
+ cmd_keys_down++;
+ } else {
+ if (cmd_keys_down == 1) {
+ unregister_code(KC_LCMD);
+ } else {
+ unregister_code(KC_LCTL);
+ }
+ cmd_keys_down--;
+ }
+ return true;
+}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
// Override the defualt auto shifted symbols to use SEND_STRING See
// https://github.com/qmk/qmk_firmware/issues/4072
case ampr:
- return send_string_if_keydown(record, "&");
+ return send_string_if_keydown(record, "&", NULL);
case astr:
- return send_string_if_keydown(record, "*");
+ return send_string_if_keydown(record, "*", NULL);
case at:
- return send_string_if_keydown(record, "@");
+ return send_string_if_keydown(record, "@", NULL);
case bsls:
- return send_string_if_keydown(record, "\\");
+ return send_string_if_keydown(record, "\\", NULL);
case circ:
- return send_string_if_keydown(record, "^");
+ return send_string_if_keydown(record, "^", NULL);
case dlr:
- return send_string_if_keydown(record, "$");
+ return send_string_if_keydown(record, "$", NULL);
case eql:
- return send_string_if_keydown(record, "=");
+ return send_string_if_keydown(record, "=", NULL);
case exlm:
- return send_string_if_keydown(record, "!");
+ return send_string_if_keydown(record, "!", NULL);
case grv:
- return send_string_if_keydown(record, "`");
+ return send_string_if_keydown(record, "`", NULL);
case hash:
- return send_string_if_keydown(record, "#");
+ return send_string_if_keydown(record, "#", NULL);
case lbrc:
- return send_string_if_keydown(record, "[");
+ return send_string_if_keydown(record, "[", NULL);
case lcbr:
- return send_string_if_keydown(record, "{");
+ return send_string_if_keydown(record, "{", NULL);
case lprn:
- return send_string_if_keydown(record, "(");
+ return send_string_if_keydown(record, "(", NULL);
case perc:
- return send_string_if_keydown(record, "%");
+ return send_string_if_keydown(record, "%", NULL);
case pipe:
- return send_string_if_keydown(record, "|");
+ return send_string_if_keydown(record, "|", NULL);
case plus:
- return send_string_if_keydown(record, "+");
+ return send_string_if_keydown(record, "+", NULL);
case rbrc:
- return send_string_if_keydown(record, "]");
+ return send_string_if_keydown(record, "]", NULL);
case rcbr:
- return send_string_if_keydown(record, "}");
+ return send_string_if_keydown(record, "}", NULL);
case rprn:
- return send_string_if_keydown(record, ")");
+ return send_string_if_keydown(record, ")", NULL);
case tild:
- return send_string_if_keydown(record, "~");
+ return send_string_if_keydown(record, "~", NULL);
+
+ // The macOS shortcuts for curly quotes are horrible, so this rebinds
+ // them so that shift toggles single–double instead of left–right, and
+ // then both varieties of left quote can share one key, and both
+ // varieties of right quote share another.
+ case lcqt:
+ return send_string_if_keydown(
+ record,
+ SS_LALT("]"), // left single quote (‘)
+ SS_LALT("[")); // left double quote (“)
+ case rcqt:
+ return send_string_if_keydown(
+ record,
+ SS_LALT(SS_LSFT("]")), // right single quote (’)
+ SS_LALT(SS_LSFT("["))); // right double quote (”)
// cmd + cmd -> cmd + ctl
case cmd:
- if (record->event.pressed) {
- if (cmd_keys_down == 0) {
- register_code(KC_LCMD);
- } else {
- register_code(KC_LCTL);
- }
- cmd_keys_down++;
- } else {
- if (cmd_keys_down == 1) {
- unregister_code(KC_LCMD);
- } else {
- unregister_code(KC_LCTL);
- }
- cmd_keys_down--;
- }
- return true;
+ return smart_cmd(record);
}
return true;
}
diff --git a/keyboards/planck/keymaps/callum/readme.md b/keyboards/planck/keymaps/callum/readme.md
index 561901b48e5..471de2b741b 100644
--- a/keyboards/planck/keymaps/callum/readme.md
+++ b/keyboards/planck/keymaps/callum/readme.md
@@ -1,4 +1,4 @@
-# callum's planck layout
+# callum’s planck layout
This is a layout for the grid planck, built with a few ideals in mind:
@@ -23,8 +23,8 @@ This is a layout for the grid planck, built with a few ideals in mind:
- Symbols should be arranged so that the most frequently used are easiest to
reach. This includes numbers, and lower numbers are more commonly used than
- higher ones. (number arrangement borrowed from [dustypomeleau's minidox
- layout][].
+ higher ones. (number arrangement borrowed from [dustypomeleau’s minidox
+ layout][]).
-[dustypomeleau's minidox layout]: https://github.com/qmk/qmk_firmware/tree/master/keyboards/minidox/keymaps/dustypomerleau
+[dustypomeleau’s minidox layout]: https://github.com/qmk/qmk_firmware/tree/master/keyboards/minidox/keymaps/dustypomerleau
[keymap.c]: keymap.c
diff --git a/keyboards/planck/keymaps/callum/rules.mk b/keyboards/planck/keymaps/callum/rules.mk
index db87d5ecec7..9615222d1bd 100644
--- a/keyboards/planck/keymaps/callum/rules.mk
+++ b/keyboards/planck/keymaps/callum/rules.mk
@@ -1,19 +1,7 @@
-# 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(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-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 = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = yes # 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.
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = yes
+MIDI_ENABLE = no
+AUDIO_ENABLE = yes
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/ramonimbao/herringbone/config.h b/keyboards/ramonimbao/herringbone/config.h
index 3dab5ddeb3a..c8aee0f6e44 100644
--- a/keyboards/ramonimbao/herringbone/config.h
+++ b/keyboards/ramonimbao/herringbone/config.h
@@ -41,8 +41,8 @@ along with this program. If not, see .
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
-#define MATRIX_ROW_PINS { C5, C6, C7, A7, A6, A5 }
-#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, C4, D6, D5, D1, B0, B1, B3, B4, B7 }
+#define MATRIX_ROW_PINS { C4, C5, C6, C7, A7, A6 }
+#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, D6, D5, D1, B0, B1, B2, B3, B4, D7 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
diff --git a/keyboards/ramonimbao/herringbone/info.json b/keyboards/ramonimbao/herringbone/info.json
index 5a23ec0b10f..01f1e9e48d3 100644
--- a/keyboards/ramonimbao/herringbone/info.json
+++ b/keyboards/ramonimbao/herringbone/info.json
@@ -9,22 +9,22 @@
"layout": [
{"x": 0, "y": 0},
- {"x": 1.5, "y": 0},
- {"x": 2.5, "y": 0},
- {"x": 3.5, "y": 0},
- {"x": 4.5, "y": 0},
+ {"x": 1.25, "y": 0},
+ {"x": 2.25, "y": 0},
+ {"x": 3.25, "y": 0},
+ {"x": 4.25, "y": 0},
- {"x": 5.75, "y": 0},
- {"x": 6.75, "y": 0},
- {"x": 7.75, "y": 0},
- {"x": 8.75, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
- {"x": 10, "y": 0},
- {"x": 11, "y": 0},
- {"x": 12, "y": 0},
- {"x": 13, "y": 0},
+ {"x": 9.75, "y": 0},
+ {"x": 10.75, "y": 0},
+ {"x": 11.75, "y": 0},
+ {"x": 12.75, "y": 0},
- {"x": 14.25, "y": 0},
+ {"x": 14, "y": 0},
{"x": 15.5, "y": 0},
@@ -111,22 +111,22 @@
"layout": [
{"x": 0, "y": 0},
- {"x": 1.5, "y": 0},
- {"x": 2.5, "y": 0},
- {"x": 3.5, "y": 0},
- {"x": 4.5, "y": 0},
+ {"x": 1.25, "y": 0},
+ {"x": 2.25, "y": 0},
+ {"x": 3.25, "y": 0},
+ {"x": 4.25, "y": 0},
- {"x": 5.75, "y": 0},
- {"x": 6.75, "y": 0},
- {"x": 7.75, "y": 0},
- {"x": 8.75, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
- {"x": 10, "y": 0},
- {"x": 11, "y": 0},
- {"x": 12, "y": 0},
- {"x": 13, "y": 0},
+ {"x": 9.75, "y": 0},
+ {"x": 10.75, "y": 0},
+ {"x": 11.75, "y": 0},
+ {"x": 12.75, "y": 0},
- {"x": 14.25, "y": 0},
+ {"x": 14, "y": 0},
{"x": 15.5, "y": 0},
@@ -213,22 +213,22 @@
"layout": [
{"x": 0, "y": 0},
- {"x": 1.5, "y": 0},
- {"x": 2.5, "y": 0},
- {"x": 3.5, "y": 0},
- {"x": 4.5, "y": 0},
+ {"x": 1.25, "y": 0},
+ {"x": 2.25, "y": 0},
+ {"x": 3.25, "y": 0},
+ {"x": 4.25, "y": 0},
- {"x": 5.75, "y": 0},
- {"x": 6.75, "y": 0},
- {"x": 7.75, "y": 0},
- {"x": 8.75, "y": 0},
+ {"x": 5.5, "y": 0},
+ {"x": 6.5, "y": 0},
+ {"x": 7.5, "y": 0},
+ {"x": 8.5, "y": 0},
- {"x": 10, "y": 0},
- {"x": 11, "y": 0},
- {"x": 12, "y": 0},
- {"x": 13, "y": 0},
+ {"x": 9.75, "y": 0},
+ {"x": 10.75, "y": 0},
+ {"x": 11.75, "y": 0},
+ {"x": 12.75, "y": 0},
- {"x": 14.25, "y": 0},
+ {"x": 14, "y": 0},
{"x": 15.5, "y": 0},
diff --git a/keyboards/rart/rartpad/config.h b/keyboards/rart/rartpad/config.h
new file mode 100644
index 00000000000..dfbefec19a5
--- /dev/null
+++ b/keyboards/rart/rartpad/config.h
@@ -0,0 +1,65 @@
+/*
+Copyright 2020 Alabahuy
+
+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 0x414C // "AL"
+#define PRODUCT_ID 0x0050 // "P"
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Alabahuy
+#define PRODUCT RARTPAD
+#define DESCRIPTION 5x4 Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B6, F6, D0, D4, C6 }
+#define MATRIX_COL_PINS { B2, D1, D2, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define NUM_LOCK_LED_PIN D7
+
+/* 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
+
+#define ENCODERS_PAD_A { B3, F5 }
+#define ENCODERS_PAD_B { B1, F4 }
+
+#define RGB_DI_PIN F7
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 5
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 240
+#define RGBLIGHT_SLEEP
+#endif
diff --git a/keyboards/rart/rartpad/info.json b/keyboards/rart/rartpad/info.json
new file mode 100644
index 00000000000..8ec37ece0b8
--- /dev/null
+++ b/keyboards/rart/rartpad/info.json
@@ -0,0 +1,62 @@
+{
+ "keyboard_name": "RARTPAD",
+ "url": "",
+ "maintainer": "Alabahuy",
+ "width": 5,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_5x4": {
+ "layout": [
+ {"label": "Numlock", "x": 0, "y": 0},
+ {"label": "/", "x": 1, "y": 0},
+ {"label": "*", "x": 2, "y": 0},
+ {"label": "-", "x": 3, "y": 0},
+
+ {"label": "7", "x": 0, "y": 1},
+ {"label": "8", "x": 1, "y": 1},
+ {"label": "9", "x": 2, "y": 1},
+ {"label": "=", "x": 3, "y": 1},
+
+ {"label": "4", "x": 0, "y": 2},
+ {"label": "5", "x": 1, "y": 2},
+ {"label": "6", "x": 2, "y": 2},
+ {"label": "+", "x": 3, "y": 2},
+
+ {"label": "1", "x": 0, "y": 3},
+ {"label": "2", "x": 1, "y": 3},
+ {"label": "3", "x": 2, "y": 3},
+ {"label": "Esc", "x": 3, "y": 3},
+
+ {"label": "0", "x": 0, "y": 4},
+ {"label": "00", "x": 1, "y": 4},
+ {"label": ".", "x": 2, "y": 4},
+ {"label": "Enter", "x": 3, "y": 4}
+ ]
+ },
+ "LAYOUT_numpad_5x4": {
+ "layout": [
+ {"label": "Numlock", "x": 0, "y": 0},
+ {"label": "/", "x": 1, "y": 0},
+ {"label": "*", "x": 2, "y": 0},
+ {"label": "-", "x": 3, "y": 0},
+
+ {"label": "7", "x": 0, "y": 1},
+ {"label": "8", "x": 1, "y": 1},
+ {"label": "9", "x": 2, "y": 1},
+
+ {"label": "4", "x": 0, "y": 2},
+ {"label": "5", "x": 1, "y": 2},
+ {"label": "6", "x": 2, "y": 2},
+ {"label": "+", "x": 3, "y": 1, "h": 2},
+
+ {"label": "1", "x": 0, "y": 3},
+ {"label": "2", "x": 1, "y": 3},
+ {"label": "3", "x": 2, "y": 3},
+
+ {"label": "0", "x": 0, "y": 4, "w": 2},
+ {"label": ".", "x": 2, "y": 4},
+ {"label": "Enter", "x": 3, "y": 3, "h": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rart/rartpad/keymaps/default/keymap.c b/keyboards/rart/rartpad/keymaps/default/keymap.c
new file mode 100644
index 00000000000..0d7b6686ae8
--- /dev/null
+++ b/keyboards/rart/rartpad/keymaps/default/keymap.c
@@ -0,0 +1,54 @@
+/*
+Copyright 2020 Alabahuy
+
+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_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_INS,
+ KC_P7, KC_P8, KC_P9, KC_PEQL,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PMNS,
+ MO(1), KC_P0, KC_PDOT, KC_PENT
+ ),
+
+ [1] = LAYOUT_ortho_5x4(
+ KC_TRNS, RGB_HUI, RGB_HUD, KC_TRNS,
+ RGB_SAI, RGB_SAD, KC_MNXT, KC_MPRV,
+ RGB_VAI, RGB_VAD, KC_MSTP, KC_MPLY,
+ KC_COPY, KC_PSTE, KC_MYCM, KC_CALC,
+ KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS
+ )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) { /* Second encoder */
+ if (clockwise) {
+ tap_code(KC_WH_D);
+ } else {
+ tap_code(KC_WH_U);
+ }
+ }
+}
+
diff --git a/keyboards/rart/rartpad/keymaps/numpad/keymap.c b/keyboards/rart/rartpad/keymaps/numpad/keymap.c
new file mode 100644
index 00000000000..a3508ece9cc
--- /dev/null
+++ b/keyboards/rart/rartpad/keymaps/numpad/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2020 Alabahuy
+
+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_numpad_5x4(
+ 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
+ )
+};
+
+void encoder_update_user(uint8_t index, bool clockwise) {
+ if (index == 0) { /* First encoder */
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) { /* Second encoder */
+ if (clockwise) {
+ tap_code(KC_PGUP);
+ } else {
+ tap_code(KC_PGDN);
+ }
+ }
+}
diff --git a/keyboards/rart/rartpad/rartpad.c b/keyboards/rart/rartpad/rartpad.c
new file mode 100644
index 00000000000..566c3fa466b
--- /dev/null
+++ b/keyboards/rart/rartpad/rartpad.c
@@ -0,0 +1,22 @@
+/* Copyright 2020 Alabahuy
+ * 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 "rartpad.h"
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(NUM_LOCK_LED_PIN, led_state.num_lock);
+ }
+ return true;
+}
diff --git a/keyboards/rart/rartpad/rartpad.h b/keyboards/rart/rartpad/rartpad.h
new file mode 100644
index 00000000000..2e516e2cfe8
--- /dev/null
+++ b/keyboards/rart/rartpad/rartpad.h
@@ -0,0 +1,41 @@
+
+#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_ortho_5x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, \
+ K30, K31, K32, K33, \
+ K40, K41, K42, K43 \
+) \
+{ \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 }, \
+ { K30, K31, K32, K33 }, \
+ { K40, K41, K42, K43 }, \
+}
+#define LAYOUT_numpad_5x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, \
+ K20, K21, K22, K13, \
+ K30, K31, K32, \
+ K40, K42, K33 \
+) \
+{ \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, KC_NO }, \
+ { K30, K31, K32, K33 }, \
+ { K40, KC_NO, K42, KC_NO }, \
+}
diff --git a/keyboards/rart/rartpad/readme.md b/keyboards/rart/rartpad/readme.md
new file mode 100644
index 00000000000..3f730c59d3e
--- /dev/null
+++ b/keyboards/rart/rartpad/readme.md
@@ -0,0 +1,14 @@
+# [RARTPAD](https://github.com/alabahuy/RART/tree/master/RARTPAD)
+
+
+5x4 Macropad pcb with double encoder, based on IMKG (Indonesia Mechanical Keyboard Group)
+
+* Keyboard Maintainer: [Alabahuy](https://github.com/alabahuy)
+* Hardware Supported: RARTPAD PCB, Promicro, Mini USB, Encoders
+* Hardware Availability: Private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rart/rartpad: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/rart/rartpad/rules.mk b/keyboards/rart/rartpad/rules.mk
new file mode 100644
index 00000000000..c05f7eb063e
--- /dev/null
+++ b/keyboards/rart/rartpad/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 = caterina
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = full # 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 = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+ENCODER_ENABLE = yes
+
+LAYOUTS = ortho_5x4 numpad_5x4
diff --git a/keyboards/tkc/osav2/README.md b/keyboards/tkc/osav2/README.md
new file mode 100644
index 00000000000..749ffe08709
--- /dev/null
+++ b/keyboards/tkc/osav2/README.md
@@ -0,0 +1,15 @@
+# TKC OSA v2 (One Sweet Alice)
+
+
+
+The TKC OSA v2 is an ATMega32u4 powered, USB Type C, Alice compatible PCB and was created specifically for the OSA case, but with considerations to make it compatible with the Lubrigante acrylic cases (except for the Type C connector it should also be compatible with original TGR Alice cases).
+
+* Keyboard Maintainer: [Terry Mathews](https://github.com/TerryMathews/)
+* Hardware Supported: TKC OSA v2 PCB
+* Hardware Availability: https://thekey.company/collections/osav2-keyboard
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tkc/osav2: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/tkc/osav2/config.h b/keyboards/tkc/osav2/config.h
new file mode 100644
index 00000000000..db00b02413b
--- /dev/null
+++ b/keyboards/tkc/osav2/config.h
@@ -0,0 +1,223 @@
+/*
+Copyright 2019 jrfhoutx
+
+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 0x544B //TK
+#define PRODUCT_ID 0x0005 //Alice
+#define DEVICE_VER 0x0001
+#define MANUFACTURER The Key Company
+#define PRODUCT OSA v2
+#define DESCRIPTION QMK keyboard firmware for TKC OSA v2 (One Sweet Alice)
+
+/* 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)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, F1, F4, F5, F6, B0, B1, B2, B3, B7 }
+#define MATRIX_COL_PINS { B4, D7, D5, D3, D2, D0, D1, B5 }
+#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 D6
+ #define BACKLIGHT_BREATHING
+ #define BACKLIGHT_LEVELS 3
+
+ #define RGB_DI_PIN D4
+ #ifdef RGB_DI_PIN
+ #define RGBLED_NUM 9
+// #define RGBLIGHT_HUE_STEP 10
+// #define RGBLIGHT_SAT_STEP 17
+// #define RGBLIGHT_VAL_STEP 17
+// #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 128 // 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
+
+/* 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/tkc/osav2/info.json b/keyboards/tkc/osav2/info.json
new file mode 100644
index 00000000000..adbc6ee1a9e
--- /dev/null
+++ b/keyboards/tkc/osav2/info.json
@@ -0,0 +1,21 @@
+{
+ "keyboard_name": "TKC OSA v2",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_default_ansi": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"~", "x":1.25, "y":0}, {"label":"!", "x":2.25, "y":0}, {"label":"@", "x":3.25, "y":0}, {"label":"#", "x":4.25, "y":0}, {"label":"$", "x":5.25, "y":0}, {"label":"%", "x":6.25, "y":0}, {"label":"^", "x":7.25, "y":0}, {"label":"&", "x":10.25, "y":0}, {"label":"*", "x":11.25, "y":0}, {"label":"(", "x":12.25, "y":0}, {"label":")", "x":13.25, "y":0}, {"label":"_", "x":14.25, "y":0}, {"label":"+", "x":15.25, "y":0}, {"label":"Backspace", "x":16.25, "y":0, "w":2}, {"label":"Page Up", "x":0, "y":1}, {"label":"Tab", "x":1.25, "y":1, "w":1.5}, {"label":"Q", "x":2.75, "y":1}, {"label":"W", "x":3.75, "y":1}, {"label":"E", "x":4.75, "y":1}, {"label":"R", "x":5.75, "y":1}, {"label":"T", "x":6.75, "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":"|", "x":16.75, "y":1, "w":1.5}, {"label":"Page Down", "x":0, "y":2}, {"label":"Caps Lock", "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, "y":2}, {"label":"J", "x":11, "y":2}, {"label":"K", "x":12, "y":2}, {"label":"L", "x":13, "y":2}, {"label":":", "x":14, "y":2}, {"label":"\"", "x":15, "y":2}, {"label":"Enter", "x":16, "y":2, "w":2.25}, {"label":"Shift", "x":1.25, "y":3, "w":2.25}, {"label":"Z", "x":3.5, "y":3}, {"label":"X", "x":4.5, "y":3}, {"label":"C", "x":5.5, "y":3}, {"label":"V", "x":6.5, "y":3}, {"label":"B", "x":7.5, "y":3}, {"label":"B", "x":9.5, "y":3}, {"label":"N", "x":10.5, "y":3}, {"label":"M", "x":11.5, "y":3}, {"label":"<", "x":12.5, "y":3}, {"label":">", "x":13.5, "y":3}, {"label":"?", "x":14.5, "y":3}, {"label":"Shift", "x":15.5, "y":3, "w":2.75}, {"label":"Ctrl", "x":1.25, "y":4, "w":1.5}, {"label":"Win", "x":4.25, "y":4, "w":1.5}, {"x":5.75, "y":4, "w":2.25}, {"label":"Fn", "x":8, "y":4}, {"x":9.5, "y":4, "w":2.75}, {"label":"Alt", "x":12.25, "y":4, "w":1.5}, {"label":"Ctrl", "x":16.75, "y":4, "w":1.5}]
+ },
+ "LAYOUT_split_backspace": {
+ "layout": [{"label":"Delete", "x":0, "y":0}, {"label":"Esc", "x":1.25, "y":0}, {"label":"!", "x":2.25, "y":0}, {"label":"@", "x":3.25, "y":0}, {"label":"#", "x":4.25, "y":0}, {"label":"$", "x":5.25, "y":0}, {"label":"%", "x":6.25, "y":0}, {"label":"^", "x":7.25, "y":0}, {"label":"&", "x":10.25, "y":0}, {"label":"*", "x":11.25, "y":0}, {"label":"(", "x":12.25, "y":0}, {"label":")", "x":13.25, "y":0}, {"label":"_", "x":14.25, "y":0}, {"label":"+", "x":15.25, "y":0}, {"label":"~", "x":16.25, "y":0}, {"label":"|", "x":17.25, "y":0}, {"label":"Page Up", "x":0, "y":1}, {"label":"Tab", "x":1.25, "y":1, "w":1.5}, {"label":"Q", "x":2.75, "y":1}, {"label":"W", "x":3.75, "y":1}, {"label":"E", "x":4.75, "y":1}, {"label":"R", "x":5.75, "y":1}, {"label":"T", "x":6.75, "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":"Page Down", "x":0, "y":2}, {"label":"Caps Lock", "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, "y":2}, {"label":"J", "x":11, "y":2}, {"label":"K", "x":12, "y":2}, {"label":"L", "x":13, "y":2}, {"label":":", "x":14, "y":2}, {"label":"\"", "x":15, "y":2}, {"label":"Enter", "x":16, "y":2, "w":2.25}, {"label":"Shift", "x":1.25, "y":3, "w":2.25}, {"label":"Z", "x":3.5, "y":3}, {"label":"X", "x":4.5, "y":3}, {"label":"C", "x":5.5, "y":3}, {"label":"V", "x":6.5, "y":3}, {"label":"B", "x":7.5, "y":3}, {"label":"B", "x":9.5, "y":3}, {"label":"N", "x":10.5, "y":3}, {"label":"M", "x":11.5, "y":3}, {"label":"<", "x":12.5, "y":3}, {"label":">", "x":13.5, "y":3}, {"label":"?", "x":14.5, "y":3}, {"label":"Shift", "x":15.5, "y":3, "w":2.75}, {"label":"Ctrl", "x":1.25, "y":4, "w":1.5}, {"label":"Win", "x":4.25, "y":4, "w":1.5}, {"x":5.75, "y":4, "w":2.25}, {"label":"Fn", "x":8, "y":4}, {"x":9.5, "y":4, "w":2.75}, {"label":"Alt", "x":12.25, "y":4, "w":1.5}, {"label":"Ctrl", "x":16.75, "y":4, "w":1.5}]
+ },
+ "LAYOUT_split_right_shift": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"~", "x":1.25, "y":0}, {"label":"!", "x":2.25, "y":0}, {"label":"@", "x":3.25, "y":0}, {"label":"#", "x":4.25, "y":0}, {"label":"$", "x":5.25, "y":0}, {"label":"%", "x":6.25, "y":0}, {"label":"^", "x":7.25, "y":0}, {"label":"&", "x":10.25, "y":0}, {"label":"*", "x":11.25, "y":0}, {"label":"(", "x":12.25, "y":0}, {"label":")", "x":13.25, "y":0}, {"label":"_", "x":14.25, "y":0}, {"label":"+", "x":15.25, "y":0}, {"label":"Backspace", "x":16.25, "y":0, "w":2}, {"label":"Page Up", "x":0, "y":1}, {"label":"Tab", "x":1.25, "y":1, "w":1.5}, {"label":"Q", "x":2.75, "y":1}, {"label":"W", "x":3.75, "y":1}, {"label":"E", "x":4.75, "y":1}, {"label":"R", "x":5.75, "y":1}, {"label":"T", "x":6.75, "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":"|", "x":16.75, "y":1, "w":1.5}, {"label":"Page Down", "x":0, "y":2}, {"label":"Caps Lock", "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, "y":2}, {"label":"J", "x":11, "y":2}, {"label":"K", "x":12, "y":2}, {"label":"L", "x":13, "y":2}, {"label":":", "x":14, "y":2}, {"label":"\"", "x":15, "y":2}, {"label":"Enter", "x":16, "y":2, "w":2.25}, {"label":"Shift", "x":1.25, "y":3, "w":2.25}, {"label":"Z", "x":3.5, "y":3}, {"label":"X", "x":4.5, "y":3}, {"label":"C", "x":5.5, "y":3}, {"label":"V", "x":6.5, "y":3}, {"label":"B", "x":7.5, "y":3}, {"label":"B", "x":9.5, "y":3}, {"label":"N", "x":10.5, "y":3}, {"label":"M", "x":11.5, "y":3}, {"label":"<", "x":12.5, "y":3}, {"label":">", "x":13.5, "y":3}, {"label":"?", "x":14.5, "y":3}, {"label":"Shift", "x":15.5, "y":3, "w":1.75}, {"label":"Fn", "x":17.25, "y":3}, {"label":"Ctrl", "x":1.25, "y":4, "w":1.5}, {"label":"Win", "x":4.25, "y":4, "w":1.5}, {"x":5.75, "y":4, "w":2.25}, {"label":"Fn", "x":8, "y":4}, {"x":9.5, "y":4, "w":2.75}, {"label":"Alt", "x":12.25, "y":4, "w":1.5}, {"label":"Ctrl", "x":16.75, "y":4, "w":1.5}]
+ },
+ "LAYOUT_all": {
+ "layout": [{"label":"Delete", "x":0, "y":0}, {"label":"Esc", "x":1.25, "y":0}, {"label":"!", "x":2.25, "y":0}, {"label":"@", "x":3.25, "y":0}, {"label":"#", "x":4.25, "y":0}, {"label":"$", "x":5.25, "y":0}, {"label":"%", "x":6.25, "y":0}, {"label":"^", "x":7.25, "y":0}, {"label":"&", "x":10.25, "y":0}, {"label":"*", "x":11.25, "y":0}, {"label":"(", "x":12.25, "y":0}, {"label":")", "x":13.25, "y":0}, {"label":"_", "x":14.25, "y":0}, {"label":"+", "x":15.25, "y":0}, {"label":"~", "x":16.25, "y":0}, {"label":"|", "x":17.25, "y":0}, {"label":"Page Up", "x":0, "y":1}, {"label":"Tab", "x":1.25, "y":1, "w":1.5}, {"label":"Q", "x":2.75, "y":1}, {"label":"W", "x":3.75, "y":1}, {"label":"E", "x":4.75, "y":1}, {"label":"R", "x":5.75, "y":1}, {"label":"T", "x":6.75, "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":"Page Down", "x":0, "y":2}, {"label":"Caps Lock", "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, "y":2}, {"label":"J", "x":11, "y":2}, {"label":"K", "x":12, "y":2}, {"label":"L", "x":13, "y":2}, {"label":":", "x":14, "y":2}, {"label":"\"", "x":15, "y":2}, {"label":"Enter", "x":16, "y":2, "w":2.25}, {"label":"Shift", "x":1.25, "y":3, "w":2.25}, {"label":"Z", "x":3.5, "y":3}, {"label":"X", "x":4.5, "y":3}, {"label":"C", "x":5.5, "y":3}, {"label":"V", "x":6.5, "y":3}, {"label":"B", "x":7.5, "y":3}, {"label":"B", "x":9.5, "y":3}, {"label":"N", "x":10.5, "y":3}, {"label":"M", "x":11.5, "y":3}, {"label":"<", "x":12.5, "y":3}, {"label":">", "x":13.5, "y":3}, {"label":"?", "x":14.5, "y":3}, {"label":"Shift", "x":15.5, "y":3, "w":1.75}, {"label":"Fn", "x":17.25, "y":3}, {"label":"Ctrl", "x":1.25, "y":4, "w":1.5}, {"label":"Win", "x":4.25, "y":4, "w":1.5}, {"x":5.75, "y":4, "w":2.25}, {"label":"Fn", "x":8, "y":4}, {"x":9.5, "y":4, "w":2.75}, {"label":"Alt", "x":12.25, "y":4, "w":1.5}, {"label":"Ctrl", "x":16.75, "y":4, "w":1.5}]
+ }
+ }
+}
diff --git a/keyboards/tkc/osav2/keymaps/default/keymap.c b/keyboards/tkc/osav2/keymaps/default/keymap.c
new file mode 100644
index 00000000000..6de8e527b89
--- /dev/null
+++ b/keyboards/tkc/osav2/keymaps/default/keymap.c
@@ -0,0 +1,33 @@
+/* Copyright 2019 jrfhoutx
+ *
+ * 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_DEL, 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_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_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
+ ),
+[1] = LAYOUT_all(
+ BL_STEP, BL_BRTG, 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,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, 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, KC_TRNS, KC_TRNS, 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/tkc/osav2/keymaps/via/keymap.c b/keyboards/tkc/osav2/keymaps/via/keymap.c
new file mode 100644
index 00000000000..2fdb6cbff8a
--- /dev/null
+++ b/keyboards/tkc/osav2/keymaps/via/keymap.c
@@ -0,0 +1,49 @@
+/* Copyright 2019 jrfhoutx
+ *
+ * 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_DEL, 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_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_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
+ ),
+[1] = LAYOUT_all(
+ BL_STEP, BL_BRTG, 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,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, 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, KC_TRNS, KC_TRNS, 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/tkc/osav2/keymaps/via/rules.mk b/keyboards/tkc/osav2/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/tkc/osav2/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/tkc/osav2/osav2.c b/keyboards/tkc/osav2/osav2.c
new file mode 100644
index 00000000000..4d8b901498b
--- /dev/null
+++ b/keyboards/tkc/osav2/osav2.c
@@ -0,0 +1,33 @@
+/* Copyright 2019 jrfhoutx
+ *
+ * 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 "osav2.h"
+
+void keyboard_pre_init_kb(void) {
+ setPinOutput(C7);
+ setPinOutput(C6);
+ setPinOutput(B6);
+
+ keyboard_pre_init_user();
+}
+
+bool led_update_kb(led_t led_state) {
+ if (led_update_user(led_state)) {
+ writePin(C7, led_state.num_lock);
+ writePin(C6, led_state.caps_lock);
+ writePin(B6, led_state.scroll_lock);
+ }
+ return true;
+}
diff --git a/keyboards/tkc/osav2/osav2.h b/keyboards/tkc/osav2/osav2.h
new file mode 100644
index 00000000000..46cb3cd85fd
--- /dev/null
+++ b/keyboards/tkc/osav2/osav2.h
@@ -0,0 +1,117 @@
+/* Copyright 2019 jrfhoutx
+ *
+ * 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.
+ */
+
+/* LAYOUT
+ * ┌───┐ ┌───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┐┌────────┐
+ * │10 │ │00 │01 │02 │03 │04 │05 │06 │ │56 │55 │54 │53 │52 │51 │50 │57 ││57 │
+ * ├───┤ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┘ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤└────────┘
+ * │20 │ │11 │12 │13 │14 │15 │16 │ │66 │65 │64 │63 │62 │61 │60 │67 │
+ * ├───┤ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ └┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │30 │ │21 │22 │23 │24 │25 │26 │ │76 │75 │74 │73 │72 │71 │77 │
+ * └───┘ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐ ┌─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤┌──────────┐
+ * │31 │32 │33 │34 │35 │36 │ │86 │85 │84 │83 │82 │81 │80 │87 ││87 │
+ * ├─────┬──┴──┬┴───┴┬──┴───┴┬──┴─┐ ├───┴───┴──┬┴───┴┬──┴───┴────┬─┴───┤└──────────┘
+ * │41 │ │43 │45 │46 │ │95 │93 │ │90 │
+ * └─────┘ └─────┴───────┴────┘ └──────────┴─────┘ └─────┘
+ */
+#define LAYOUT_default_ansi( \
+ K10, K00, K01, K02, K03, K04, K05, K06, K56, K55, K54, K53, K52, K51, K57, \
+ K20, K11, K12, K13, K14, K15, K16, K66, K65, K64, K63, K62, K61, K60, K67, \
+ K30, K21, K22, K23, K24, K25, K26, K76, K75, K74, K73, K72, K71, K77, \
+ K31, K32, K33, K34, K35, K36, K86, K85, K84, K83, K82, K81, K87, \
+ K41, K43, K45, K46, K95, K93, K90 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO }, \
+ { 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 }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, K46, KC_NO }, \
+ { KC_NO, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \
+ { KC_NO, K81, K82, K83, K84, K85, K86, K87 }, \
+ { K90, KC_NO, KC_NO, K93, KC_NO, K95, KC_NO, KC_NO } \
+}
+#define LAYOUT_split_backspace( \
+ K10, K00, K01, K02, K03, K04, K05, K06, K56, K55, K54, K53, K52, K51, K50, K57, \
+ K20, K11, K12, K13, K14, K15, K16, K66, K65, K64, K63, K62, K61, K60, K67, \
+ K30, K21, K22, K23, K24, K25, K26, K76, K75, K74, K73, K72, K71, K77, \
+ K31, K32, K33, K34, K35, K36, K86, K85, K84, K83, K82, K81, K87, \
+ K41, K43, K45, K46, K95, K93, K90 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO }, \
+ { 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 }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, K46, KC_NO }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \
+ { KC_NO, K81, K82, K83, K84, K85, K86, K87 }, \
+ { K90, KC_NO, KC_NO, K93, KC_NO, K95, KC_NO, KC_NO } \
+}
+#define LAYOUT_split_right_shift( \
+ K10, K00, K01, K02, K03, K04, K05, K06, K56, K55, K54, K53, K52, K51, K57, \
+ K20, K11, K12, K13, K14, K15, K16, K66, K65, K64, K63, K62, K61, K60, K67, \
+ K30, K21, K22, K23, K24, K25, K26, K76, K75, K74, K73, K72, K71, K77, \
+ K31, K32, K33, K34, K35, K36, K86, K85, K84, K83, K82, K81, K80, K87, \
+ K41, K43, K45, K46, K95, K93, K90 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO }, \
+ { 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 }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, K46, KC_NO }, \
+ { KC_NO, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \
+ { K80, K81, K82, K83, K84, K85, K86, K87 }, \
+ { K90, KC_NO, KC_NO, K93, KC_NO, K95, KC_NO, KC_NO } \
+}
+#define LAYOUT_all( \
+ K10, K00, K01, K02, K03, K04, K05, K06, K56, K55, K54, K53, K52, K51, K50, K57, \
+ K20, K11, K12, K13, K14, K15, K16, K66, K65, K64, K63, K62, K61, K60, K67, \
+ K30, K21, K22, K23, K24, K25, K26, K76, K75, K74, K73, K72, K71, K77, \
+ K31, K32, K33, K34, K35, K36, K86, K85, K84, K83, K82, K81, K80, K87, \
+ K41, K43, K45, K46, K95, K93, K90 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, KC_NO }, \
+ { 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 }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, K46, KC_NO }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \
+ { K80, K81, K82, K83, K84, K85, K86, K87 }, \
+ { K90, KC_NO, KC_NO, K93, KC_NO, K95, KC_NO, KC_NO } \
+}
diff --git a/keyboards/tkc/osav2/rules.mk b/keyboards/tkc/osav2/rules.mk
new file mode 100644
index 00000000000..a11aa7aeefc
--- /dev/null
+++ b/keyboards/tkc/osav2/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 = 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 = 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
+BLUETOOTH_ENABLE = no # Enable Bluetooth
+AUDIO_ENABLE = no # Audio output
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+LTO_ENABLE = yes # Reduces compile size
diff --git a/keyboards/yd60mq/info.json b/keyboards/yd60mq/info.json
index 60a62af7aa4..56ddb147a03 100644
--- a/keyboards/yd60mq/info.json
+++ b/keyboards/yd60mq/info.json
@@ -6,7 +6,6 @@
"height": 5,
"layouts": {
"LAYOUT_all": {
- "key_count": 69,
"layout": [
{"label":"Esc", "x":0, "y":0},
{"label":"1", "x":1, "y":0},
@@ -80,7 +79,6 @@
]
},
"LAYOUT_60_ansi": {
- "key_count": 61,
"layout": [
{"x":0, "y":0},
{"x":1, "y":0},
@@ -145,8 +143,354 @@
{"x":13.75, "y":4, "w":1.25}
]
},
+ "LAYOUT_60_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":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_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":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_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":2.75},
+
+ {"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_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": {
- "key_count": 62,
"layout": [
{"x":0, "y":0},
{"x":1, "y":0},
@@ -215,6 +559,289 @@
{"x":12.5, "y":4, "w":1.25},
{"x":13.75, "y":4, "w":1.25}
]
+ },
+ "LAYOUT_60_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":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_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":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":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_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":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":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_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":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.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/yd60mq/rules.mk b/keyboards/yd60mq/rules.mk
index 6619c187f4f..3e4d8eaa0f5 100644
--- a/keyboards/yd60mq/rules.mk
+++ b/keyboards/yd60mq/rules.mk
@@ -31,6 +31,6 @@ 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_iso
+LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_ansi_tsangan 60_hhkb 60_iso 60_iso_split_bs_rshift 60_iso_tsangan
DEFAULT_FOLDER = yd60mq/12led
diff --git a/keyboards/yd60mq/yd60mq.h b/keyboards/yd60mq/yd60mq.h
index 6b3824baa37..79ff1a6c056 100644
--- a/keyboards/yd60mq/yd60mq.h
+++ b/keyboards/yd60mq/yd60mq.h
@@ -30,19 +30,144 @@
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
}
-#define LAYOUT_60_iso( \
+#define LAYOUT_60_ansi_split_bs( \
+ 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, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K47, K49, K4A, K4C, K4D \
+) { \
+ { 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, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ 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, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K40, K41, K42, K47, K49, K4A, K4C, K4D \
+) { \
+ { 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, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_ansi_split_rshift( \
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, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K1d, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3d, \
+ 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, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
K40, K41, K42, K47, K49, K4A, K4C, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, KC_NO, }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K1d }, \
- { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, KC_NO, K3d, KC_NO }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
{ K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
}
+#define LAYOUT_60_ansi_tsangan( \
+ 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, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, K47, K4A, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_hhkb( \
+ 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, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K41, K42, K47, K4A, K4C \
+) { \
+ { 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, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, KC_NO, K4C, KC_NO, KC_NO } \
+}
+
+#define LAYOUT_60_iso( \
+ 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, 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, K3D, \
+ K40, K41, K42, K47, K49, K4A, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_iso_split_bs( \
+ 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, \
+ 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, K3D, \
+ K40, K41, K42, K47, K49, K4A, K4C, K4D \
+) { \
+ { 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, KC_NO, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_iso_split_bs_rshift( \
+ 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, \
+ 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, K3D, K3E, \
+ K40, K41, K42, K47, K49, K4A, K4C, K4D \
+) { \
+ { 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, KC_NO, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_iso_split_rshift( \
+ 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, 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, K3D, K3E, \
+ K40, K41, K42, K47, K49, K4A, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_iso_tsangan( \
+ 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, 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, K3D, \
+ K40, K41, K42, K47, K4A, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
#define LAYOUT LAYOUT_all
diff --git a/keyboards/planck/keymaps/ajp10304/keymap.c b/layouts/community/ortho_4x12/ajp10304/keymap.c
similarity index 55%
rename from keyboards/planck/keymaps/ajp10304/keymap.c
rename to layouts/community/ortho_4x12/ajp10304/keymap.c
index 49346f7b958..3badce2eafb 100644
--- a/keyboards/planck/keymaps/ajp10304/keymap.c
+++ b/layouts/community/ortho_4x12/ajp10304/keymap.c
@@ -1,42 +1,6 @@
-#include "planck.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include "ajp10304.h"
#include "keymap_uk.h"
-extern keymap_config_t keymap_config;
-
-enum planck_layers {
- _QWERTY,
- _MAC,
- _LOWER,
- _MLWR,
- _RAISE,
- _MRSE,
- _FUNC,
- _MFNC,
- _FUNC2,
- _MFNC2,
- _ADJUST,
- _MOUSE
-};
-
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- MAC,
- FUNC,
- MFNC,
- FUNC2,
- MFNC2,
- LOWER,
- MLWR,
- RAISE,
- MRSE,
- MOUSE,
- DYNAMIC_MACRO_RANGE
-};
-
-#include "dynamic_macro.h"
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -50,10 +14,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_planck_grid(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT),
- KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT,
+[_QWERTY] = LAYOUT_ortho_4x12(
+ LT(_NUMPAD, KC_ESC), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
+ MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) ,
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT ,
MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC2)
),
@@ -68,10 +32,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn |
* `-----------------------------------------------------------------------------------'
*/
-[_FUNC] = LAYOUT_planck_grid(
- 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, UK_TILD, KC_INSERT,
- KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT),
+[_FUNC] = LAYOUT_ortho_4x12(
+ 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, UK_TILD, KC_INSERT ,
+ KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,
_______, _______, _______, _______, _______, _______, _______, MO(_MOUSE), _______, _______, _______, _______
),
@@ -86,10 +50,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_planck_grid(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC,
- LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC),
- KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT),
+[_LOWER] = LAYOUT_ortho_4x12(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC ,
+ LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC) ,
+ KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,
_______, _______, _______, _______, _______, KC_DEL, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
@@ -104,11 +68,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Mouse| | | | | Alt | Enter|Raise | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_planck_grid(
- KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN,
- KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)),
- _______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS),
- MO(_MOUSE), _______, _______, _______, _______, KC_LALT, KC_ENT, _______, XXXXXXX, _______, _______, _______
+[_RAISE] = LAYOUT_ortho_4x12(
+ KC_GRV, XXXXXXX, M_WORD_SEL, KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN ,
+ KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) ,
+ _______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) ,
+ MO(_MOUSE), _______, _______, _______, _______, KC_LALT, KC_ENT, _______, XXXXXXX, _______, _______, _______
),
/* Adjust (Lower + Raise)
@@ -122,16 +86,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT_planck_grid(
- M(0), RESET, QWERTY, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL,
- KC_CAPS, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______,
- TG(_MAC), _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______,
+[_ADJUST] = LAYOUT_ortho_4x12(
+ M_CUSTOM, RESET, QWERTY, BL_ON, BL_OFF, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL ,
+ KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,
+ TG(_MAC), RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Mouse
* ,-----------------------------------------------------------------------------------.
- * | ESC | | | | | | | | | | | |
+ * | ESC | | | | | | | | BTN3 | | | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
@@ -140,13 +104,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_MOUSE] = LAYOUT_planck_grid(
- KC_ESC , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+[_MOUSE] = LAYOUT_ortho_4x12(
+ KC_ESC , _______, _______, _______, _______, _______, _______, _______, KC_MS_BTN3, _______, _______, _______,
KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______,
KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
+/* Num Pad
+ * ,-----------------------------------------------------------------------------------.
+ * | ESC | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | 4 | 5 | 6 | * | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | 1 | 2 | 3 | + | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | 0 | . | , | - | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMPAD] = LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, KC_NLCK, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_SLASH, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_ASTERISK, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_PLUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_DOT, KC_COMM, KC_KP_MINUS, _______
+),
+
/* Function 2 (Right hand side)
* ,-----------------------------------------------------------------------------------.
* | | |WRDSEL| | | | LNDEL| | | | | |
@@ -158,187 +140,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_FUNC2] = LAYOUT_planck_grid(
- _______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______,
- _______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______,
- _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98) ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+[_FUNC2] = LAYOUT_ortho_4x12(
+ _______, _______, M_WORD_SEL, _______, _______, _______, M_LINE_DEL, _______, _______, _______, _______, _______,
+ _______, _______, M_LINE_SEL, M_DUP, _______, _______, _______, M_JOIN, _______, _______, _______, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M_MODE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MAC] = LAYOUT_planck_grid(
+[_MAC]= LAYOUT_ortho_4x12(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
MFNC, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, MFNC2
),
-[_MLWR] = LAYOUT_planck_grid(
+[_MLWR] = LAYOUT_ortho_4x12(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MRSE] = LAYOUT_planck_grid(
- _______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL),
- _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+[_MRSE] = LAYOUT_ortho_4x12(
+ _______, _______, M_WORD_SEL_MAC, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) ,
+ _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MFNC]= LAYOUT_planck_grid(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT),
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+[_MFNC]= LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MFNC2] = LAYOUT_planck_grid(
- _______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______,
- _______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______,
- _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99) ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+[_MFNC2] = LAYOUT_ortho_4x12(
+ _______, _______, M_WORD_SEL_MAC, _______, _______, _______, M_LINE_DEL_MAC, _______, _______, _______, _______, _______,
+ _______, _______, M_LINE_SEL_MAC, M_DUP_MAC, _______, _______, _______, M_JOIN_MAC, _______, _______, _______, _______,
+ _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M_MODE_MAC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
-
-void persistant_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
- }
-
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- persistant_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- 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 MLWR:
- if (record->event.pressed) {
- layer_on(_LOWER);
- layer_on(_MLWR);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- layer_off(_MLWR);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case MRSE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- layer_on(_MRSE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- layer_off(_MRSE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- case MFNC:
- if (record->event.pressed) {
- layer_on(_FUNC);
- layer_on(_MFNC);
- } else {
- layer_off(_FUNC);
- layer_off(_MFNC);
- }
- return false;
- case MFNC2:
- if (record->event.pressed) {
- layer_on(_FUNC2);
- layer_on(_MFNC2);
- } else {
- layer_off(_FUNC2);
- layer_off(_MFNC2);
- }
- return false;
- }
- return true;
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t keycode, uint8_t opt) {
- // These would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- switch(keycode) {
- case 0: // Some custom string here
- SEND_STRING("");
- return false;
-
- case 1: // Word Select
- SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LCTRL));
- return false;
-
- case 2: // Word Select Mac
- SEND_STRING(SS_DOWN(X_LALT) SS_TAP(X_RIGHT) SS_DOWN(X_LSHIFT) SS_TAP(X_LEFT) SS_UP(X_LSHIFT) SS_UP(X_LALT));
- return false;
-
- case 3: // Line Select
- SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT));
- return false;
-
- case 4: // Line Select Mac
- SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT));
- return false;
-
- case 5: // Line Delete
- SEND_STRING(SS_TAP(X_HOME) SS_DOWN(X_LSHIFT) SS_TAP(X_END) SS_UP(X_LSHIFT));
- SEND_STRING(SS_TAP(X_BSPACE));
- return false;
-
- case 6: // Line Delete Mac
- SEND_STRING(SS_LCTRL("a") SS_DOWN(X_LSHIFT) SS_LCTRL("e") SS_UP(X_LSHIFT));
- SEND_STRING(SS_TAP(X_BSPACE));
- return false;
-
- case 7: // Duplicate Selection
- SEND_STRING(SS_LCTRL("c") SS_TAP(X_RIGHT) SS_LCTRL("v"));
- return false;
-
- case 8: // Duplicate Selection Mac
- SEND_STRING(SS_LGUI("c") SS_TAP(X_RIGHT) SS_LGUI("v"));
- return false;
-
- case 9: // Join line
- SEND_STRING(SS_TAP(X_END) SS_TAP(X_DELETE));
- return false;
-
- case 10: // Join line Mac
- SEND_STRING(SS_LCTRL("e") SS_TAP(X_DELETE));
- return false;
-
- case 98: // Print mode
- SEND_STRING("PC");
- return false;
-
- case 99: // Print mode
- SEND_STRING("OSX");
- return false;
- }
- }
- return MACRO_NONE;
-};
diff --git a/layouts/community/ortho_4x12/ajp10304/readme.md b/layouts/community/ortho_4x12/ajp10304/readme.md
new file mode 100644
index 00000000000..6f2330f9437
--- /dev/null
+++ b/layouts/community/ortho_4x12/ajp10304/readme.md
@@ -0,0 +1,117 @@
+# AJP10304 Ortho 4x12 Layout
+# For Planck, Shark, JJ40 and Atreus50
+
+**Note:** In the tables below where there are two characters on a key,
+the second is the output when shift is applied.
+
+**Note:** The below tables assume a UK layout.
+
+#### Flashing
+Refer to the README.md of the keyboard you want to flash.
+
+##### Main Qwerty Layer
+
+* Tab: when held, operates as shift.
+* Enter: when held, operates as shift.
+* MENU: perform right-click
+
+| | | | | | | | | | | | |
+| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
+| Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+| Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
+| Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
+| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 |
+
+##### Function Layer
+Activated when `fn` held in the above `qwerty` layer.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
+| Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
+| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn2 |
+
+##### Lower Layer
+Activated when `Lower` is held in the above `qwerty` layer.
+
+* Numbers are along the top row, their shifted counterparts are on row 2.
+* WrdBks: `backspace` with `ctrl` applied. I.e. delete a word.
+* WrdDel: `delete` with `ctrl` applied. I.e. forward delete a word.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
+| ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
+| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
+| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
+
+##### Raise Layer
+Activated when `Raise` is held in the above `qwerty` layer.
+
+* Preferred layer for typing brackets.
+* Allows for cursor navigation to be used solely with the right hand.
+* WRDSEL: Select the word where the cursor is.
+* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
+| ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
+| ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
+| | | | { | } | ||<| LEFT | DOWN |RIGHT |>||ZOOM -|
+| Mouse | | | | | Alt | Enter |Raise | | | | |
+
+##### Lower + Raise
+Activated when `Lower` and `Raise` are held together in the above `qwerty` layer.
+
+* Audio controls in the same position as cursor keys from the `Raise` layer.
+* ????: Runs a macro for outputting a text string. Do not use this store passwords.
+* Reset: Enter bootloader for flashing firmware to the keyboard.
+* CAPS: Toggle caps lock.
+* Macro functions: Allows recording of macros. To start recording the macro, press either REC1 or REC2.
+To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2.
+* MAC: Toggle MAC OS extensions to layers. This allows MLWR to be enabled with LOWER,
+MRSE with RAISE, MFNC with FUNC and MFNC2 with FUNC2 respectively.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| ???? | Reset|Qwerty| | | REC1 | REC2 | | | | | Del |
+| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | |
+| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | |
+| | | | | | | | | DYN | | | |
+
+##### Function 2 Layer
+Activated when `fn` held in the above `qwerty` layer.
+* WRDSEL: Select the word where the cursor is.
+* LNDEL: Delete the line where the cursor is.
+* LNSEL: Select the line where the cursor is.
+* DUP: Duplicate the selected text.
+* LNJOIN: Join the line where the cursor is with the following line.
+* MODE: Print either `PC` or `OSX` depending on what layer mode is active.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | |WRDSEL| | | | LNDEL| | | | | |
+| | | LNSEL| DUP | | | | |LNJOIN| | | |
+| | UNDO | CUT | COPY | PASTE| | | | | | | MODE |
+| | | | | | | | | | | | |
+
+##### Mouse Layer
+Activated when `fn` and `raise` held together.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| ESC | | | | | | | | BTN3 | | | |
+| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
+| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | |
+| | | | | | | | | | | | |
+
+##### Number Pad Layout
+Activated when holding `Esc` key.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+| | | | | | | | 4 | 5 | 6 | * | |
+| | | | | | | | 1 | 2 | 3 | + | |
+| | | | | | | | 0 | . | , | - | |
diff --git a/keyboards/jj40/keymaps/ajp10304/rules.mk b/layouts/community/ortho_4x12/ajp10304/rules.mk
similarity index 59%
rename from keyboards/jj40/keymaps/ajp10304/rules.mk
rename to layouts/community/ortho_4x12/ajp10304/rules.mk
index 4dee01cd5b1..ebe923c9b33 100644
--- a/keyboards/jj40/keymaps/ajp10304/rules.mk
+++ b/layouts/community/ortho_4x12/ajp10304/rules.mk
@@ -1,3 +1,3 @@
AUDIO_ENABLE = no
MOUSEKEY_ENABLE = yes
-
+DYNAMIC_MACRO_ENABLE = yes
diff --git a/quantum/backlight/backlight_chibios.c b/quantum/backlight/backlight_chibios.c
index 723544adb93..0fe812bf27b 100644
--- a/quantum/backlight/backlight_chibios.c
+++ b/quantum/backlight/backlight_chibios.c
@@ -3,27 +3,37 @@
#include
#include "debug.h"
-// TODO: remove short term bodge when refactoring BACKLIGHT_CUSTOM_DRIVER out
-#ifdef BACKLIGHT_PIN
-
// GPIOV2 && GPIOV3
-# ifndef BACKLIGHT_PAL_MODE
-# define BACKLIGHT_PAL_MODE 2
-# endif
+#ifndef BACKLIGHT_PAL_MODE
+# define BACKLIGHT_PAL_MODE 2
+#endif
// GENERIC
-# ifndef BACKLIGHT_PWM_DRIVER
-# define BACKLIGHT_PWM_DRIVER PWMD4
-# endif
-# ifndef BACKLIGHT_PWM_CHANNEL
-# define BACKLIGHT_PWM_CHANNEL 3
-# endif
+#ifndef BACKLIGHT_PWM_DRIVER
+# define BACKLIGHT_PWM_DRIVER PWMD4
+#endif
+#ifndef BACKLIGHT_PWM_CHANNEL
+# define BACKLIGHT_PWM_CHANNEL 3
+#endif
-static void breathing_callback(PWMDriver *pwmp);
+// Support for pins which are on TIM1_CH1N - requires STM32_PWM_USE_ADVANCED
+#ifdef BACKLIGHT_PWM_COMPLEMENTARY_OUTPUT
+# if BACKLIGHT_ON_STATE == 1
+# define PWM_OUTPUT_MODE PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW;
+# else
+# define PWM_OUTPUT_MODE PWM_COMPLEMENTARY_OUTPUT_ACTIVE_HIGH;
+# endif
+#else
+# if BACKLIGHT_ON_STATE == 1
+# define PWM_OUTPUT_MODE PWM_OUTPUT_ACTIVE_HIGH;
+# else
+# define PWM_OUTPUT_MODE PWM_OUTPUT_ACTIVE_LOW;
+# endif
+#endif
static PWMConfig pwmCFG = {0xFFFF, /* PWM clock frequency */
256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- NULL, /* No Callback */
+ NULL, /* Breathing Callback */
{ /* Default all channels to disabled - Channels will be configured durring init */
{PWM_OUTPUT_DISABLED, NULL},
{PWM_OUTPUT_DISABLED, NULL},
@@ -32,17 +42,6 @@ static PWMConfig pwmCFG = {0xFFFF, /* PWM clock frequency */
0, /* HW dependent part.*/
0};
-static PWMConfig pwmCFG_breathing = {0xFFFF, /** PWM clock frequency */
- 256, /* PWM period (in ticks) 1S (1/10kHz=0.1mS 0.1ms*10000 ticks=1S) */
- breathing_callback, /* Breathing Callback */
- { /* Default all channels to disabled - Channels will be configured durring init */
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL},
- {PWM_OUTPUT_DISABLED, NULL}},
- 0, /* HW dependent part.*/
- 0};
-
// See http://jared.geek.nz/2013/feb/linear-led-pwm
static uint16_t cie_lightness(uint16_t v) {
if (v <= 5243) // if below 8% of max
@@ -60,125 +59,88 @@ static uint16_t cie_lightness(uint16_t v) {
}
void backlight_init_ports(void) {
- // printf("backlight_init_ports()\n");
-
-# ifdef USE_GPIOV1
+#ifdef USE_GPIOV1
palSetPadMode(PAL_PORT(BACKLIGHT_PIN), PAL_PAD(BACKLIGHT_PIN), PAL_MODE_STM32_ALTERNATE_PUSHPULL);
-# else
+#else
palSetPadMode(PAL_PORT(BACKLIGHT_PIN), PAL_PAD(BACKLIGHT_PIN), PAL_MODE_ALTERNATE(BACKLIGHT_PAL_MODE));
-# endif
+#endif
- pwmCFG.channels[BACKLIGHT_PWM_CHANNEL - 1].mode = PWM_OUTPUT_ACTIVE_HIGH;
- pwmCFG_breathing.channels[BACKLIGHT_PWM_CHANNEL - 1].mode = PWM_OUTPUT_ACTIVE_HIGH;
+ pwmCFG.channels[BACKLIGHT_PWM_CHANNEL - 1].mode = PWM_OUTPUT_MODE;
pwmStart(&BACKLIGHT_PWM_DRIVER, &pwmCFG);
backlight_set(get_backlight_level());
+
+#ifdef BACKLIGHT_BREATHING
if (is_backlight_breathing()) {
breathing_enable();
}
+#endif
}
void backlight_set(uint8_t level) {
- // printf("backlight_set(%d)\n", level);
+ if (level > BACKLIGHT_LEVELS) level = BACKLIGHT_LEVELS;
+
if (level == 0) {
// Turn backlight off
pwmDisableChannel(&BACKLIGHT_PWM_DRIVER, BACKLIGHT_PWM_CHANNEL - 1);
} else {
// Turn backlight on
- if (!is_breathing()) {
- uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t)level / BACKLIGHT_LEVELS));
- // printf("duty: (%d)\n", duty);
- pwmEnableChannel(&BACKLIGHT_PWM_DRIVER, BACKLIGHT_PWM_CHANNEL - 1, PWM_FRACTION_TO_WIDTH(&BACKLIGHT_PWM_DRIVER, 0xFFFF, duty));
- }
+ uint32_t duty = (uint32_t)(cie_lightness(0xFFFF * (uint32_t)level / BACKLIGHT_LEVELS));
+ pwmEnableChannel(&BACKLIGHT_PWM_DRIVER, BACKLIGHT_PWM_CHANNEL - 1, PWM_FRACTION_TO_WIDTH(&BACKLIGHT_PWM_DRIVER, 0xFFFF, duty));
}
}
-uint8_t backlight_tick = 0;
-
void backlight_task(void) {}
-# define BREATHING_NO_HALT 0
-# define BREATHING_HALT_OFF 1
-# define BREATHING_HALT_ON 2
+#ifdef BACKLIGHT_BREATHING
+
# define BREATHING_STEPS 128
-static uint8_t breathing_halt = BREATHING_NO_HALT;
-static uint16_t breathing_counter = 0;
-
-bool is_breathing(void) { return BACKLIGHT_PWM_DRIVER.config == &pwmCFG_breathing; }
-
-static inline void breathing_min(void) { breathing_counter = 0; }
-
-static inline void breathing_max(void) { breathing_counter = get_breathing_period() * 256 / 2; }
-
-void breathing_interrupt_enable(void) {
- pwmStop(&BACKLIGHT_PWM_DRIVER);
- pwmStart(&BACKLIGHT_PWM_DRIVER, &pwmCFG_breathing);
- chSysLockFromISR();
- pwmEnablePeriodicNotification(&BACKLIGHT_PWM_DRIVER);
- pwmEnableChannelI(&BACKLIGHT_PWM_DRIVER, BACKLIGHT_PWM_CHANNEL - 1, PWM_FRACTION_TO_WIDTH(&BACKLIGHT_PWM_DRIVER, 0xFFFF, 0xFFFF));
- chSysUnlockFromISR();
-}
-
-void breathing_interrupt_disable(void) {
- pwmStop(&BACKLIGHT_PWM_DRIVER);
- pwmStart(&BACKLIGHT_PWM_DRIVER, &pwmCFG);
-}
-
-void breathing_enable(void) {
- breathing_counter = 0;
- breathing_halt = BREATHING_NO_HALT;
- breathing_interrupt_enable();
-}
-
-void breathing_pulse(void) {
- if (get_backlight_level() == 0)
- breathing_min();
- else
- breathing_max();
- breathing_halt = BREATHING_HALT_ON;
- breathing_interrupt_enable();
-}
-
-void breathing_disable(void) {
- // printf("breathing_disable()\n");
- breathing_interrupt_disable();
- // Restore backlight level
- backlight_set(get_backlight_level());
-}
-
-void breathing_self_disable(void) {
- if (get_backlight_level() == 0)
- breathing_halt = BREATHING_HALT_OFF;
- else
- breathing_halt = BREATHING_HALT_ON;
-}
-
/* To generate breathing curve in python:
* from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
*/
static const uint8_t breathing_table[BREATHING_STEPS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+void breathing_callback(PWMDriver *pwmp);
+
+bool is_breathing(void) { return pwmCFG.callback != NULL; }
+
+void breathing_enable(void) {
+ pwmCFG.callback = breathing_callback;
+ pwmEnablePeriodicNotification(&BACKLIGHT_PWM_DRIVER);
+}
+
+void breathing_disable(void) {
+ pwmCFG.callback = NULL;
+ pwmDisablePeriodicNotification(&BACKLIGHT_PWM_DRIVER);
+
+ // Restore backlight level
+ backlight_set(get_backlight_level());
+}
+
// Use this before the cie_lightness function.
static inline uint16_t scale_backlight(uint16_t v) { return v / BACKLIGHT_LEVELS * get_backlight_level(); }
-static void breathing_callback(PWMDriver *pwmp) {
- (void)pwmp;
+void breathing_callback(PWMDriver *pwmp) {
uint8_t breathing_period = get_breathing_period();
uint16_t interval = (uint16_t)breathing_period * 256 / BREATHING_STEPS;
+
// resetting after one period to prevent ugly reset at overflow.
- breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
- uint8_t index = breathing_counter / interval % BREATHING_STEPS;
-
- if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) || ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1))) {
- breathing_interrupt_disable();
- }
-
- uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
+ static uint16_t breathing_counter = 0;
+ breathing_counter = (breathing_counter + 1) % (breathing_period * 256);
+ uint8_t index = breathing_counter / interval % BREATHING_STEPS;
+ uint32_t duty = cie_lightness(scale_backlight(breathing_table[index] * 256));
chSysLockFromISR();
- pwmEnableChannelI(&BACKLIGHT_PWM_DRIVER, BACKLIGHT_PWM_CHANNEL - 1, PWM_FRACTION_TO_WIDTH(&BACKLIGHT_PWM_DRIVER, 0xFFFF, duty));
+ pwmEnableChannelI(pwmp, BACKLIGHT_PWM_CHANNEL - 1, PWM_FRACTION_TO_WIDTH(&BACKLIGHT_PWM_DRIVER, 0xFFFF, duty));
chSysUnlockFromISR();
}
+// TODO: integrate generic pulse solution
+void breathing_pulse(void) {
+ backlight_set(is_backlight_enabled() ? 0 : BACKLIGHT_LEVELS);
+ wait_ms(10);
+ backlight_set(is_backlight_enabled() ? get_backlight_level() : 0);
+}
+
#endif
diff --git a/quantum/keymap_extras/keymap_french_afnor.h b/quantum/keymap_extras/keymap_french_afnor.h
new file mode 100644
index 00000000000..be67fdc9528
--- /dev/null
+++ b/quantum/keymap_extras/keymap_french_afnor.h
@@ -0,0 +1,253 @@
+/* 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
+ * 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 .
+ */
+
+/* French AZERTY - AFNOR NF Z71-300
+ *
+ * A standard for the French keyboard
+ *
+ * The project was launched at the end of 2015 on the proposal of the General
+ * Delegation for the French language and the languages of France (Ministry
+ * of Culture), starting from the observation that the current "azerty"
+ * keyboards constrain the writing of French, languages regional and European
+ * languages with Latin alphabet.
+ *
+ * For the first time, a standard (NF Z71-300) defines the placement of
+ * characters on the French keyboard. It offers two layouts, one of which
+ * closely follows the QWERTY keyboard used by most people who write in French.
+ *
+ * However, it is in many ways superior to the old keyboard:
+ *
+ * - it contains all the characters required to enter text in French (for example É, œ and ")
+ * - it is designed to be more ergonomic and allow faster typing
+ * - it includes almost 60 additional characters for entering foreign languages, technical content, etc
+ * - however, the characters remain easy to locate thanks to intuitive groupings
+ *
+ * Source: https://norme-azerty.fr
+ */
+
+#pragma once
+
+#include "keymap.h"
+
+// clang-format off
+
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ @ │ à │ é │ è │ ê │ ( │ ) │ ‘ │ ’ │ « │ » │ ' │ ^ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ - │ + │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ / │ * │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ < │ W │ X │ C │ V │ B │ N │ . │ , │ : │ ; │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define FR_AT KC_GRV // @
+#define FR_AGRV KC_1 // à
+#define FR_EACU KC_2 // é
+#define FR_EGRV KC_3 // è
+#define FR_ECIR KC_4 // ê
+#define FR_LPRN KC_5 // (
+#define FR_RPRN KC_6 // )
+#define FR_LSQU KC_7 // ‘
+#define FR_RSQU KC_8 // ’
+#define FR_LDAQ KC_9 // «
+#define FR_RDAQ KC_0 // »
+#define FR_QUOT KC_MINS // '
+#define FR_DCIR KC_EQL // ^ (dead)
+// Row 2
+#define FR_A KC_Q // A
+#define FR_Z KC_W // Z
+#define FR_E KC_E // E
+#define FR_R KC_R // R
+#define FR_T KC_T // T
+#define FR_Y KC_Y // Y
+#define FR_U KC_U // U
+#define FR_I KC_I // I
+#define FR_O KC_O // O
+#define FR_P KC_P // P
+#define FR_MINS KC_LBRC // -
+#define FR_PLUS KC_RBRC // +
+// Row 3
+#define FR_Q KC_A // Q
+#define FR_S KC_S // S
+#define FR_D KC_D // D
+#define FR_F KC_F // F
+#define FR_G KC_G // G
+#define FR_H KC_H // H
+#define FR_J KC_J // J
+#define FR_K KC_K // K
+#define FR_L KC_L // L
+#define FR_M KC_SCLN // M
+#define FR_SLSH KC_QUOT // /
+#define FR_ASTR KC_NUHS // *
+// Row 4
+#define FR_LABK KC_NUBS // <
+#define FR_W KC_Z // W
+#define FR_X KC_X // X
+#define FR_C KC_C // C
+#define FR_V KC_V // V
+#define FR_B KC_B // B
+#define FR_N KC_N // N
+#define FR_DOT KC_M // .
+#define FR_COMM KC_COMM // ,
+#define FR_COLN KC_DOT // :
+#define FR_SCLN KC_SLSH // ;
+
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ # │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ " │ ¨ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ – │ ± │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ \ │ ½ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ > │ │ │ │ │ │ │ ? │ ! │ … │ = │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define FR_HASH S(FR_AT) // #
+#define FR_1 S(FR_AGRV) // 1
+#define FR_2 S(FR_EACU) // 2
+#define FR_3 S(FR_EGRV) // 3
+#define FR_4 S(FR_ECIR) // 4
+#define FR_5 S(FR_LPRN) // 5
+#define FR_6 S(FR_RPRN) // 6
+#define FR_7 S(FR_LSQU) // 7
+#define FR_8 S(FR_RSQU) // 8
+#define FR_9 S(FR_LDAQ) // 9
+#define FR_0 S(FR_RDAQ) // 0
+#define FR_DQUO S(FR_QUOT) // "
+#define FR_DIAE S(FR_DCIR) // ¨ (dead)
+// Row 2
+#define FR_NDSH S(FR_MINS) // –
+#define FR_PLMN S(FR_PLUS) // ±
+// Row 3
+#define FR_BSLS S(FR_SLSH) // (backslash)
+#define FR_HALF S(FR_ASTR) // ½
+// Row 4
+#define FR_RABK S(FR_LABK) // >
+#define FR_QUES S(FR_DOT) // ?
+#define FR_EXLM S(FR_COMM) // !
+#define FR_ELLP S(FR_COLN) // …
+#define FR_EQL S(FR_SCLN) // =
+
+/* AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ˘ │ § │ ´ │ ` │ & │ [ │ ] │ ¯ │ _ │ “ │ ” │ ° │ ˇ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ æ │ £ │ € │ ® │ { │ } │ ù │ ˙ │ œ │ % │ − │ † │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ θ │ ß │ $ │ ¤ │ µ │ Eu│ │ ∕ │ | │ ∞ │ ÷ │ × │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ ≤ │ ʒ │ © │ ç │ ¸ │ − │ ~ │ ¿ │ ¡ │ · │ ≃ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define FR_BREV ALGR(FR_AT) // ˘ (dead)
+#define FR_SECT ALGR(FR_AGRV) // §
+#define FR_ACUT ALGR(FR_EACU) // ´ (dead)
+#define FR_GRV ALGR(FR_EGRV) // ` (dead)
+#define FR_AMPR ALGR(FR_ECIR) // &
+#define FR_LBRC ALGR(FR_LPRN) // [
+#define FR_RBRC ALGR(FR_RPRN) // ]
+#define FR_MACR ALGR(FR_LSQU) // ¯ (dead)
+#define FR_UNDS ALGR(FR_RSQU) // _
+#define FR_LDQU ALGR(FR_LDAQ) // “
+#define FR_RDQU ALGR(FR_RDAQ) // ”
+#define FR_DEG ALGR(FR_QUOT) // °
+#define FR_CARN ALGR(FR_DCIR) // ˇ (dead)
+// Row 2
+#define FR_AE ALGR(FR_A) // æ
+#define FR_PND ALGR(FR_Z) // £
+#define FR_EURO ALGR(FR_E) // €
+#define FR_REGD ALGR(FR_R) // ®
+#define FR_LCBR ALGR(FR_T) // {
+#define FR_RCBR ALGR(FR_Y) // }
+#define FR_UGRV ALGR(FR_U) // ù
+#define FR_DOTA ALGR(FR_I) // ˙ (dead)
+#define FR_OE ALGR(FR_O) // œ
+#define FR_PERC ALGR(FR_P) // %
+#define FR_MMNS ALGR(FR_MINS) // −
+#define FR_DAGG ALGR(FR_PLUS) // †
+// Row 3
+#define FR_THET ALGR(FR_Q) // θ
+#define FR_SS ALGR(FR_S) // ß
+#define FR_DLR ALGR(FR_D) // $
+#define FR_CURR ALGR(FR_F) // ¤ (dead monetary key)
+#define FR_DGRK ALGR(FR_G) // µ (dead Greek key)
+#define FR_EU ALGR(FR_H) // Eu (dead European symbol key)
+#define FR_DSLS ALGR(FR_K) // ∕ (dead)
+#define FR_PIPE ALGR(FR_L) // |
+#define FR_INFN ALGR(FR_M) // ∞
+#define FR_DIV ALGR(FR_SLSH) // ÷
+#define FR_MUL ALGR(FR_ASTR) // ×
+// Row 4
+#define FR_LEQL ALGR(FR_LABK) // ≤
+#define FR_EZH ALGR(FR_W) // ʒ
+#define FR_COPY ALGR(FR_X) // ©
+#define FR_CCED ALGR(FR_C) // ç
+#define FR_CEDL ALGR(FR_V) // ¸ (dead)
+#define FR_DMNS ALGR(FR_B) // − (dead)
+#define FR_DTIL ALGR(FR_N) // ~ (dead)
+#define FR_IQUE ALGR(FR_DOT) // ¿
+#define FR_IEXL ALGR(FR_COMM) // ¡
+#define FR_MDDT ALGR(FR_COLN) // ·
+#define FR_AEQL ALGR(FR_SCLN) // ≃
+
+/* Shift+AltGr symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │ ̑ │ │ │ │ │ ˝ │ ̏ │ │ — │ ‹ │ › │ ˚ │ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ │ │ │ │ │ ™ │ │ │ ̣ │ │ ‰ │ ‑ │ ‡ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ ˍ │ │ │ │ │ √ │ ¼ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │ │ ≥ │ │ │ │ ˛ │ │ │ │ ̦ │ │ ≠ │ │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+ */
+// Row 1
+#define FR_IBRV S(ALGR(FR_AT)) // ̑ (dead)
+#define FR_DACU S(ALGR(FR_LPRN)) // ˝ (dead)
+#define FR_DGRV S(ALGR(FR_RPRN)) // ̏ (dead)
+#define FR_MDSH S(ALGR(FR_RSQU)) // —
+#define FR_LSAQ S(ALGR(FR_LDAQ)) // ‹
+#define FR_RSAQ S(ALGR(FR_RDAQ)) // ›
+#define FR_RNGA S(ALGR(FR_QUOT)) // ˚ (dead)
+// Row 2
+#define FR_TM S(ALGR(FR_T)) // ™
+#define FR_DOTB S(ALGR(FR_I)) // ̣ (dead)
+#define FR_PERM S(ALGR(FR_P)) // ‰
+#define FR_NBHY S(ALGR(FR_MINS)) // ‑ (non-breaking hyphen)
+#define FR_DDAG S(ALGR(FR_PLUS)) // ‡
+// Row 3
+#define FR_MACB S(ALGR(FR_H)) // ˍ (dead)
+#define FR_SQRT S(ALGR(FR_SLSH)) // √
+#define FR_QRTR S(ALGR(FR_ASTR)) // ¼
+// Row 4
+#define FR_GEQL S(ALGR(FR_LABK)) // ≥
+#define FR_OGON S(ALGR(FR_V)) // ˛ (dead)
+#define FR_DCMM S(ALGR(FR_COMM)) // ̦ (dead)
+#define FR_NEQL S(ALGR(FR_SCLN)) // ≠
diff --git a/quantum/keymap_extras/keymap_us_international.h b/quantum/keymap_extras/keymap_us_international.h
index f8e470216fb..a3bc465971c 100644
--- a/quantum/keymap_extras/keymap_us_international.h
+++ b/quantum/keymap_extras/keymap_us_international.h
@@ -59,7 +59,7 @@
#define US_O KC_O // O
#define US_P KC_P // P
#define US_LBRC KC_LBRC // [
-#define US_RBRC KC_LBRC // ]
+#define US_RBRC KC_RBRC // ]
#define US_BSLS KC_BSLS // (backslash)
// Row 3
#define US_A KC_A // A
diff --git a/quantum/keymap_extras/sendstring_french_afnor.h b/quantum/keymap_extras/sendstring_french_afnor.h
new file mode 100644
index 00000000000..690daaaf020
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_french_afnor.h
@@ -0,0 +1,100 @@
+/* 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
+ * 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 .
+ */
+
+// Sendstring lookup tables for French (AZERTY - AFNOR NF Z71-300) layouts
+
+#pragma once
+
+#include "keymap_french_afnor.h"
+#include "quantum.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 1, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 0, 0, 0, 1, 1, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 1, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 1, 1, 1, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 0, 1),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 1, 1, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, FR_COMM, FR_QUOT, FR_AT, FR_D, FR_P, FR_ECIR, FR_QUOT,
+ // ( ) * + , - . /
+ FR_LPRN, FR_RPRN, FR_ASTR, FR_PLUS, FR_COMM, FR_MINS, FR_DOT, FR_SLSH,
+ // 0 1 2 3 4 5 6 7
+ FR_RDAQ, FR_AGRV, FR_EACU, FR_EGRV, FR_ECIR, FR_LPRN, FR_RPRN, FR_LSQU,
+ // 8 9 : ; < = > ?
+ FR_RSQU, FR_LDAQ, FR_COLN, FR_SCLN, FR_LABK, FR_SCLN, FR_LABK, FR_DOT,
+ // @ A B C D E F G
+ FR_AT, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G,
+ // H I J K L M N O
+ FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O,
+ // P Q R S T U V W
+ FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W,
+ // X Y Z [ \ ] ^ _
+ FR_X, FR_Y, FR_Z, FR_LPRN, FR_SLSH, FR_RPRN, FR_DCIR, FR_RSQU,
+ // ` a b c d e f g
+ FR_EGRV, FR_A, FR_B, FR_C, FR_D, FR_E, FR_F, FR_G,
+ // h i j k l m n o
+ FR_H, FR_I, FR_J, FR_K, FR_L, FR_M, FR_N, FR_O,
+ // p q r s t u v w
+ FR_P, FR_Q, FR_R, FR_S, FR_T, FR_U, FR_V, FR_W,
+ // x y z { | } ~ DEL
+ FR_X, FR_Y, FR_Z, FR_T, FR_L, FR_Y, FR_N, KC_DEL
+};
diff --git a/shell.nix b/shell.nix
index 78bc005f7e5..93db7b371db 100644
--- a/shell.nix
+++ b/shell.nix
@@ -1,25 +1,40 @@
{ avr ? true, arm ? true, teensy ? true }:
let
- overlay = self: super:
- let addDarwinSupport = pkg: pkg.overrideAttrs (oldAttrs: {
- meta.platforms = (oldAttrs.meta.platforms or []) ++ self.lib.platforms.darwin;
- });
- in {
- dfu-programmer = addDarwinSupport super.dfu-programmer;
- teensy-loader-cli = addDarwinSupport super.teensy-loader-cli;
- };
-
nixpkgs = builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/903266491b7b9b0379e88709feca0af900def0d9.tar.gz";
sha256 = "1b5wjrfgyha6s15k1yjyx41hvrpmd5szpkpkxk6l5hyrfqsr8wip";
};
- pkgs = import nixpkgs { overlays = [ overlay ]; };
+ pkgs = import nixpkgs { };
+
+ hjson = with pkgs.python3Packages; buildPythonPackage rec {
+ pname = "hjson";
+ version = "3.0.1";
+
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "1yaimcgz8w0ps1wk28wk9g9zdidp79d14xqqj9rjkvxalvx2f5qx";
+ };
+ doCheck = false;
+ };
+
+ pythonEnv = pkgs.python3.withPackages (p: with p; [
+ # requirements.txt
+ appdirs
+ argcomplete
+ colorama
+ hjson
+ # requirements-dev.txt
+ nose2
+ flake8
+ pep8-naming
+ yapf
+ ]);
in
with pkgs;
-let
+let
avrlibc = pkgsCross.avr.libcCross;
avr_incflags = [
@@ -32,11 +47,11 @@ let
"-L${avrlibc}/avr/lib/avr51"
];
in
-stdenv.mkDerivation {
+mkShell {
name = "qmk-firmware";
- buildInputs = [ dfu-programmer dfu-util diffutils git python3 ]
- ++ lib.optional avr [
+ buildInputs = [ dfu-programmer dfu-util diffutils git pythonEnv ]
+ ++ lib.optional avr [
pkgsCross.avr.buildPackages.binutils
pkgsCross.avr.buildPackages.gcc8
avrlibc
@@ -47,4 +62,9 @@ stdenv.mkDerivation {
AVR_CFLAGS = lib.optional avr avr_incflags;
AVR_ASFLAGS = lib.optional avr avr_incflags;
+ shellHook = ''
+ # Prevent the avr-gcc wrapper from picking up host GCC flags
+ # like -iframework, which is problematic on Darwin
+ unset NIX_TARGET_CFLAGS_COMPILE
+ '';
}
diff --git a/users/ajp10304/ajp10304.c b/users/ajp10304/ajp10304.c
new file mode 100644
index 00000000000..9cae65d5cfd
--- /dev/null
+++ b/users/ajp10304/ajp10304.c
@@ -0,0 +1,154 @@
+#include "ajp10304.h"
+
+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 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 MLWR:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ layer_on(_MLWR);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ layer_off(_MLWR);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case MRSE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ layer_on(_MRSE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ layer_off(_MRSE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case MFNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ layer_on(_MFNC);
+ } else {
+ layer_off(_FUNC);
+ layer_off(_MFNC);
+ }
+ return false;
+ case MFNC2:
+ if (record->event.pressed) {
+ layer_on(_FUNC2);
+ layer_on(_MFNC2);
+ } else {
+ layer_off(_FUNC2);
+ layer_off(_MFNC2);
+ }
+ return false;
+ case M_CUSTOM:
+ if (record->event.pressed) {
+ SEND_STRING("Custom text here");
+ }
+ break;
+ case M_WORD_SEL:
+ if (record->event.pressed) {
+ register_mods(MOD_LCTL);
+ tap_code(KC_RGHT);
+ tap_code16(S(KC_LEFT));
+ unregister_mods(MOD_LCTL);
+ }
+ break;
+ case M_WORD_SEL_MAC:
+ if (record->event.pressed) {
+ register_mods(MOD_LALT);
+ tap_code(KC_RGHT);
+ tap_code16(S(KC_LEFT));
+ unregister_mods(MOD_LALT);
+ }
+ break;
+ case M_LINE_SEL:
+ if (record->event.pressed) {
+ tap_code(KC_HOME);
+ tap_code16(S(KC_END));
+ }
+ break;
+ case M_LINE_SEL_MAC:
+ if (record->event.pressed) {
+ tap_code16(C(KC_A));
+ tap_code16(C(S(KC_E)));
+ }
+ break;
+ case M_LINE_DEL:
+ if (record->event.pressed) {
+ tap_code(KC_HOME);
+ tap_code16(S(KC_END));
+ tap_code(KC_BSPC);
+ }
+ break;
+ case M_LINE_DEL_MAC:
+ if (record->event.pressed) {
+ tap_code16(C(KC_A));
+ tap_code16(C(S(KC_E)));
+ tap_code(KC_BSPC);
+ }
+ break;
+ case M_DUP:
+ if (record->event.pressed) {
+ tap_code16(C(KC_C));
+ tap_code(KC_RGHT);
+ tap_code16(C(KC_V));
+ }
+ break;
+ case M_DUP_MAC:
+ if (record->event.pressed) {
+ tap_code16(G(KC_C));
+ tap_code(KC_RGHT);
+ tap_code16(G(KC_V));
+ }
+ break;
+ case M_JOIN:
+ if (record->event.pressed) {
+ tap_code(KC_END);
+ tap_code(KC_DEL);
+ }
+ break;
+ case M_JOIN_MAC:
+ if (record->event.pressed) {
+ tap_code16(C(KC_E));
+ tap_code(KC_DEL);
+ }
+ break;
+ case M_MODE:
+ if (record->event.pressed) {
+ SEND_STRING("PC");
+ }
+ break;
+ case M_MODE_MAC:
+ if (record->event.pressed) {
+ SEND_STRING("OSX");
+ }
+ break;
+ }
+ return true;
+}
diff --git a/users/ajp10304/ajp10304.h b/users/ajp10304/ajp10304.h
new file mode 100644
index 00000000000..b96e00fc4e5
--- /dev/null
+++ b/users/ajp10304/ajp10304.h
@@ -0,0 +1,45 @@
+#include QMK_KEYBOARD_H
+
+enum ajp10304_layers {
+ _QWERTY,
+ _MAC,
+ _LOWER,
+ _MLWR,
+ _RAISE,
+ _MRSE,
+ _FUNC,
+ _MFNC,
+ _FUNC2,
+ _MFNC2,
+ _ADJUST,
+ _MOUSE,
+ _NUMPAD
+};
+
+enum ajp10304_keycodes {
+ QWERTY = SAFE_RANGE,
+ MAC,
+ FUNC,
+ MFNC,
+ FUNC2,
+ MFNC2,
+ LOWER,
+ MLWR,
+ RAISE,
+ MRSE,
+ MOUSE,
+ NUMPAD,
+ M_CUSTOM,
+ M_WORD_SEL,
+ M_WORD_SEL_MAC,
+ M_LINE_SEL,
+ M_LINE_SEL_MAC,
+ M_LINE_DEL,
+ M_LINE_DEL_MAC,
+ M_DUP,
+ M_DUP_MAC,
+ M_JOIN,
+ M_JOIN_MAC,
+ M_MODE,
+ M_MODE_MAC
+};
diff --git a/users/ajp10304/readme.md b/users/ajp10304/readme.md
new file mode 100644
index 00000000000..8e1a438aa85
--- /dev/null
+++ b/users/ajp10304/readme.md
@@ -0,0 +1,132 @@
+Copyright 2020 Alan Pocklington @ajp10304
+
+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 .
+
+# AJP10304 Custom 40% Layout
+# For the Planck, Shark, JJ40 and Atreus50
+
+**Note:** In the tables below where there are two characters on a key,
+the second is the output when shift is applied.
+
+**Note:** The below tables assume a UK layout.
+
+#### Flashing
+Refer to the README.md of the keyboard you want to flash.
+
+##### Main Qwerty Layer
+
+* Tab: when held, operates as shift.
+* Enter: when held, operates as shift.
+* MENU: perform right-click
+
+| | | | | | | | | | | | |
+| ---- |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| ----:|
+| Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+| Tab | A | S | D | F | G | H | J | K | L | ;: | Enter|
+| Shft | Z | X | C | V | B | N | M | ,< | .> | /? | Shft |
+| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 |
+
+##### Function Layer
+Activated when `fn` held in the above `qwerty` layer.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | ~ |INSERT|
+| Shift | \| | `¬ | #~ | * | -_ | =+ | \| | [{ | ]} | '@ |Shift |
+| Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn2 |
+
+##### Lower Layer
+Activated when `Lower` is held in the above `qwerty` layer.
+
+* Numbers are along the top row, their shifted counterparts are on row 2.
+* WrdBks: `backspace` with `ctrl` applied. I.e. delete a word.
+* WrdDel: `delete` with `ctrl` applied. I.e. forward delete a word.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| 1! | 2" | 3£ | 4$ | 5% | 6^ | 7& | 8* | 9( | 0) | DEL | Bksp |
+| ! | " | £ | $ | % | ^ | & | * | ( | ) |WrdDel|WrdBks|
+| Shift | \| | `¬ | #~ | '@ | -_ | =+ | #~ | [{ | ]} | '@ |Shift |
+| | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
+
+##### Raise Layer
+Activated when `Raise` is held in the above `qwerty` layer.
+
+* Preferred layer for typing brackets.
+* Allows for cursor navigation to be used solely with the right hand.
+* WRDSEL: Select the word where the cursor is.
+* |< and >|: Apply `ctrl` to `left` and `right` respectively for word jumping.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---: | :---:| :---:| :---:| :---: | :---:|
+| ` | |WRDSEL| [ | ] | | | PGUP | HOME |PGDOWN| |PRNTSC|
+| ` | | | ( | ) | | | HOME | UP | END | |ZOOM +|
+| | | | { | } | ||<| LEFT | DOWN |RIGHT |>||ZOOM -|
+| Mouse | | | | | Alt | Enter |Raise | | | | |
+
+##### Lower + Raise
+Activated when `Lower` and `Raise` are held together in the above `qwerty` layer.
+
+* Audio controls in the same position as cursor keys from the `Raise` layer.
+* ????: Runs a macro for outputting a text string. Do not use this store passwords.
+* Reset: Enter bootloader for flashing firmware to the keyboard.
+* CAPS: Toggle caps lock.
+* Macro functions: Allows recording of macros. To start recording the macro, press either REC1 or REC2.
+To finish the recording, press STOP. To replay the macro, press either PLAY1 or PLAY2.
+* MAC: Toggle MAC OS extensions to layers. This allows MLWR to be enabled with LOWER,
+MRSE with RAISE, MFNC with FUNC and MFNC2 with FUNC2 respectively.
+
+| | | | | | | | | | | | |
+| :---: |:----:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| ???? | Reset|Qwerty| | | REC1 | REC2 | | | | | Del |
+| CAPS | | | | | PLAY1|PLAY2 | Mute | Vol+ | Play | | |
+| MAC | | | | | STOP1|STOP2 | Prev | Vol- | Next | | |
+| | | | | | | | | DYN | | | |
+
+##### Function 2 Layer
+Activated when `fn` held in the above `qwerty` layer.
+* WRDSEL: Select the word where the cursor is.
+* LNDEL: Delete the line where the cursor is.
+* LNSEL: Select the line where the cursor is.
+* DUP: Duplicate the selected text.
+* LNJOIN: Join the line where the cursor is with the following line.
+* MODE: Print either `PC` or `OSX` depending on what layer mode is active.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | |WRDSEL| | | | LNDEL| | | | | |
+| | | LNSEL| DUP | | | | |LNJOIN| | | |
+| | UNDO | CUT | COPY | PASTE| | | | | | | MODE |
+| | | | | | | | | | | | |
+
+##### Mouse Layer
+Activated when `fn` and `raise` held together.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| ESC | | | | | | | | BTN3 | | | |
+| ACC0 | ACC1 | ACC2 | | | | | BTN1 | UP | BTN2 | | |
+| ACC0 | ACC1 | ACC2 | | | | | LEFT | DOWN | RIGHT| | |
+| | | | | | | | | | | | |
+
+##### Number Pad Layout
+Activated when holding `Esc` key.
+
+| | | | | | | | | | | | |
+| :---: | :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:| :---:|
+| | | | | | |NMLOCK| 7 | 8 | 9 | / | |
+| | | | | | | | 4 | 5 | 6 | * | |
+| | | | | | | | 1 | 2 | 3 | + | |
+| | | | | | | | 0 | . | , | - | |
diff --git a/users/ajp10304/rules.mk b/users/ajp10304/rules.mk
new file mode 100644
index 00000000000..5ae7f651e8f
--- /dev/null
+++ b/users/ajp10304/rules.mk
@@ -0,0 +1 @@
+SRC += ajp10304.c
diff --git a/users/bcat/bcat.c b/users/bcat/bcat.c
index 2b250c10f10..397d565da0c 100644
--- a/users/bcat/bcat.c
+++ b/users/bcat/bcat.c
@@ -1,6 +1,43 @@
-#include "quantum.h"
+#include "bcat.h"
#if defined(RGBLIGHT_ENABLE)
/* Adjust RGB static hue ranges for shorter gradients than default. */
const uint8_t RGBLED_GRADIENT_RANGES[] PROGMEM = {255, 127, 63, 31, 15};
#endif
+
+static int8_t alt_tab_layer = -1;
+
+__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; }
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_keymap(keycode, record)) {
+ return false;
+ }
+ switch (keycode) {
+ /* Alt+Tab that holds Alt until current layer is released: */
+ case MC_ALTT:
+ if (record->event.pressed) {
+ if (alt_tab_layer < 0) {
+ alt_tab_layer = layer_switch_get_layer(record->event.key);
+ register_code(KC_LALT);
+ }
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ return false;
+ default:
+ return true;
+ }
+}
+
+__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 = layer_state_set_keymap(state);
+ if (alt_tab_layer >= 0 && !layer_state_cmp(state, alt_tab_layer)) {
+ unregister_code(KC_LALT);
+ alt_tab_layer = -1;
+ }
+ return state;
+}
diff --git a/users/bcat/bcat.h b/users/bcat/bcat.h
new file mode 100644
index 00000000000..1ea05e5fa8a
--- /dev/null
+++ b/users/bcat/bcat.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "quantum.h"
+
+enum user_keycodes {
+ MC_ALTT = SAFE_RANGE,
+ KEYMAP_SAFE_RANGE,
+};
diff --git a/users/bcat/rules.mk b/users/bcat/rules.mk
index f3c6f9ab277..f979c703f84 100644
--- a/users/bcat/rules.mk
+++ b/users/bcat/rules.mk
@@ -3,8 +3,10 @@ SRC += bcat.c
# Enable Bootmagic Lite to consistently reset to bootloader and clear EEPROM.
BOOTMAGIC_ENABLE = lite
-# Enable media keys on all keyboards.
+# Enable media keys on all keyboards. (Even though I don't use mouse keys, they
+# seem to be required for media keys to register on Chrome OS.)
EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
# Enable link-time optimization to reduce binary size.
LINK_TIME_OPTIMIZATION_ENABLE = yes
@@ -12,7 +14,6 @@ LINK_TIME_OPTIMIZATION_ENABLE = yes
# Disable unused build options on all keyboards.
COMMAND_ENABLE = no
CONSOLE_ENABLE = no
-MOUSEKEY_ENABLE = no
NKRO_ENABLE = no
TERMINAL_ENABLE = no
diff --git a/users/pcoves/.gitignore b/users/pcoves/.gitignore
new file mode 100644
index 00000000000..c0579ed3290
--- /dev/null
+++ b/users/pcoves/.gitignore
@@ -0,0 +1,2 @@
+secret.h
+secret.c
diff --git a/users/pcoves/combo.c b/users/pcoves/combo.c
new file mode 100644
index 00000000000..a9a1ffe9887
--- /dev/null
+++ b/users/pcoves/combo.c
@@ -0,0 +1,44 @@
+#include "quantum.h"
+
+enum {
+ MIN,
+ EQL,
+
+ ESC,
+ BSP,
+ DEL,
+
+ TAB,
+ BSL,
+
+ CUT,
+ GRA,
+};
+
+const uint16_t PROGMEM min[] = {KC_C, KC_V, COMBO_END};
+const uint16_t PROGMEM eql[] = {KC_M, KC_COMM, COMBO_END};
+
+const uint16_t PROGMEM esc[] = {KC_D, KC_F, COMBO_END};
+const uint16_t PROGMEM bsp[] = {KC_J, KC_K, COMBO_END};
+const uint16_t PROGMEM del[] = {KC_DOWN, KC_UP, COMBO_END};
+
+const uint16_t PROGMEM tab[] = {KC_S, KC_F, COMBO_END};
+const uint16_t PROGMEM bsl[] = {KC_J, KC_L, COMBO_END};
+
+const uint16_t PROGMEM cut[] = {KC_K, KC_L, COMBO_END};
+const uint16_t PROGMEM gra[] = {KC_S, KC_D, COMBO_END};
+
+combo_t key_combos[COMBO_COUNT] = {
+ [MIN] = COMBO(min, KC_MINS),
+ [EQL] = COMBO(eql, KC_EQL),
+
+ [ESC] = COMBO(esc, KC_ESC),
+ [BSP] = COMBO(bsp, KC_BSPC),
+ [DEL] = COMBO(del, KC_DEL),
+
+ [TAB] = COMBO(tab, KC_TAB),
+ [BSL] = COMBO(bsl, KC_BSLS),
+
+ [CUT] = COMBO(cut, KC_QUOT),
+ [GRA] = COMBO(gra, KC_GRAVE),
+};
diff --git a/users/pcoves/config.h b/users/pcoves/config.h
new file mode 100644
index 00000000000..645dcbbf4c9
--- /dev/null
+++ b/users/pcoves/config.h
@@ -0,0 +1,2 @@
+#define COMBO_TERM 200
+#define COMBO_COUNT 9
diff --git a/users/pcoves/pcoves.c b/users/pcoves/pcoves.c
new file mode 100644
index 00000000000..af5b987a6f3
--- /dev/null
+++ b/users/pcoves/pcoves.c
@@ -0,0 +1,44 @@
+#include "pcoves.h"
+
+#ifdef RAINBOW_UNICORN_ENABLE
+#include "rainbowUnicorn.h"
+#endif
+
+#ifdef UNICODE_ENABLE
+#include "unicode.h"
+#endif
+
+#if SECRET_ENABLE
+#include "secret.h"
+#endif
+
+__attribute__((weak)) void eeconfig_init_keymap(void) {}
+
+void eeconfig_init_user(void) {
+#ifdef UNICODE_ENABLE
+ set_unicode_input_mode(UC_LNX);
+#endif
+ eeconfig_init_keymap();
+}
+
+__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 AUTRUCHE:
+ if (record->event.pressed) SEND_STRING("Autruche");
+ return true;
+ }
+
+ return process_record_keymap(keycode, record)
+#ifdef RAINBOW_UNICORN_ENABLE
+ && process_record_rainbowUnicorn(keycode, record)
+#endif
+#ifdef UNICODE_ENABLE
+ && process_record_unicode(keycode, record)
+#endif
+#if SECRET_ENABLE
+ && process_record_secret(keycode, record)
+#endif
+ ;
+}
diff --git a/users/pcoves/pcoves.h b/users/pcoves/pcoves.h
new file mode 100644
index 00000000000..10dfc56bd36
--- /dev/null
+++ b/users/pcoves/pcoves.h
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "quantum.h"
+
+#define SECRET_ENABLE (__has_include("secret.h") && !defined(NO_SECRET))
+
+enum {
+ AUTRUCHE = SAFE_RANGE,
+#ifdef RAINBOW_UNICORN_ENABLE
+ RAINBOW_UNICORN_TOGGLE,
+#endif
+#ifdef UNICODE_ENABLE
+ EMOTE0,
+ EMOTE1,
+ EMOTE2,
+ EMOTE3,
+#endif
+#if SECRET_ENABLE
+ SECRET0,
+ SECRET1,
+ SECRET2,
+ SECRET3,
+ SECRET4,
+#endif
+ PCOVES_SAFE_RANGE,
+};
+
+__attribute__((weak)) void eeconfig_init_keymap(void);
+void eeconfig_init_user(void);
+
+__attribute__((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+bool process_record_user(uint16_t keycode, keyrecord_t *record);
diff --git a/users/pcoves/rainbowUnicorn.c b/users/pcoves/rainbowUnicorn.c
new file mode 100644
index 00000000000..9520415051e
--- /dev/null
+++ b/users/pcoves/rainbowUnicorn.c
@@ -0,0 +1,42 @@
+#include "rainbowUnicorn.h"
+#include "pcoves.h"
+
+static struct {
+ bool enabled;
+ uint8_t color;
+ char string[2];
+ uint8_t mods;
+} state = {false, 0};
+
+bool process_record_rainbowUnicorn(uint16_t keycode, keyrecord_t* record) {
+ if (keycode == RAINBOW_UNICORN_TOGGLE) {
+ state.enabled ^= true;
+ return false;
+ }
+
+ if (!state.enabled) return true;
+
+ switch (keycode) {
+ case KC_A ... KC_Z:
+ case KC_1 ... KC_0:
+ case ALT_T(KC_A)... ALT_T(KC_Z):
+ case CTL_T(KC_A)... CTL_T(KC_Z):
+ case GUI_T(KC_A)... GUI_T(KC_Z):
+ case SFT_T(KC_A)... SFT_T(KC_Z):
+ if (record->event.pressed) {
+ state.mods = get_mods();
+ clear_mods();
+
+ tap_code16(C(KC_C));
+
+ itoa(state.color + 3, state.string, 10);
+ send_string(state.string);
+
+ set_mods(state.mods);
+ } else {
+ state.color = (state.color + 1) % 11;
+ }
+ }
+
+ return true;
+}
diff --git a/users/pcoves/rainbowUnicorn.h b/users/pcoves/rainbowUnicorn.h
new file mode 100644
index 00000000000..0c709b4b7af
--- /dev/null
+++ b/users/pcoves/rainbowUnicorn.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "quantum.h"
+
+__attribute__((weak)) bool process_record_rainbowUnicorn(uint16_t keycode, keyrecord_t* keyrecord);
diff --git a/users/pcoves/readme.md b/users/pcoves/readme.md
new file mode 100644
index 00000000000..1d076d92f6b
--- /dev/null
+++ b/users/pcoves/readme.md
@@ -0,0 +1,14 @@
+Copyright 2020 @pcoves
+
+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 .
diff --git a/users/pcoves/rules.mk b/users/pcoves/rules.mk
new file mode 100644
index 00000000000..400497b151a
--- /dev/null
+++ b/users/pcoves/rules.mk
@@ -0,0 +1,30 @@
+SRC += pcoves.c
+
+RAINBOW_UNICORN_ENABLE ?= no
+ifneq ($(strip $(RAINBOW_UNICORN_ENABLE)), no)
+ SRC += rainbowUnicorn.c
+ OPT_DEFS += -DRAINBOW_UNICORN_ENABLE
+endif
+
+ifeq ($(strip $(TAP_DANCE_ENABLE)), yes)
+ SRC += tapDance.c
+endif
+
+ifeq ($(strip $(COMBO_ENABLE)), yes)
+ SRC += combo.c
+endif
+
+ifeq ($(strip $(UNICODE_ENABLE)), yes)
+ SRC += unicode.c
+ OPT_DEFS += -DUNICODE_ENABLE
+endif
+
+ifneq ($(strip $(NO_SECRET)), yes)
+ ifneq ("$(wildcard $(USER_PATH)/secret.c)","")
+ SRC += secret.c
+ else
+ OPT_DEFS += -DNO_SECRET
+ endif
+else
+ OPT_DEFS += -DNO_SECRET
+endif
diff --git a/users/pcoves/tapDance.c b/users/pcoves/tapDance.c
new file mode 100644
index 00000000000..f8c9aaf4667
--- /dev/null
+++ b/users/pcoves/tapDance.c
@@ -0,0 +1,127 @@
+#include "tapDance.h"
+
+#include "quantum.h"
+
+void left(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed)
+ tap_code16(S(KC_LBRACKET));
+ else
+ tap_code16(S(KC_9));
+ break;
+ case 2:
+ if (state->pressed)
+ tap_code16(S(KC_COMM));
+ else
+ tap_code(KC_LBRACKET);
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+void right(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed)
+ tap_code16(S(KC_RBRACKET));
+ else
+ tap_code16(S(KC_0));
+ break;
+ case 2:
+ if (state->pressed)
+ tap_code16(S(KC_DOT));
+ else
+ tap_code(KC_RBRACKET);
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+enum { REST, HOLD1, HOLD2, HOLD3 };
+
+static int Alt = REST;
+void altFinish(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed) {
+ register_code(KC_LALT);
+ Alt = HOLD1;
+ }
+ break;
+ case 2:
+ if (state->pressed) {
+ register_code(KC_RALT);
+ Alt = HOLD2;
+ }
+ break;
+ case 3:
+ if (state->pressed) {
+ register_code(KC_RALT);
+ register_code(KC_RSHIFT);
+ Alt = HOLD3;
+ }
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+void altReset(qk_tap_dance_state_t* state, void* user_data) {
+ switch (Alt) {
+ case HOLD1:
+ unregister_code(KC_LALT);
+ break;
+ case HOLD2:
+ unregister_code(KC_RALT);
+ break;
+ case HOLD3:
+ unregister_code(KC_RSHIFT);
+ unregister_code(KC_RALT);
+ break;
+ }
+ Alt = REST;
+}
+
+static int Ctrl = REST;
+void ctrlFinish(qk_tap_dance_state_t* state, void* user_data) {
+ switch (state->count) {
+ case 1:
+ if (state->pressed) {
+ register_code(KC_LCTL);
+ Ctrl = HOLD1;
+ } else {
+ tap_code(KC_ESC);
+ }
+ break;
+ case 2:
+ if (state->pressed) {
+ register_code(KC_LGUI);
+ Ctrl = HOLD2;
+ }
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+void ctrlReset(qk_tap_dance_state_t* state, void* user_data) {
+ switch (Ctrl) {
+ case HOLD1:
+ unregister_code(KC_LCTL);
+ break;
+ case HOLD2:
+ unregister_code(KC_LGUI);
+ break;
+ }
+ Ctrl = REST;
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [ALT] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, altFinish, altReset),
+ [CTRL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ctrlFinish, ctrlReset),
+ [LEFT] = ACTION_TAP_DANCE_FN(left),
+ [RIGHT] = ACTION_TAP_DANCE_FN(right),
+};
diff --git a/users/pcoves/tapDance.h b/users/pcoves/tapDance.h
new file mode 100644
index 00000000000..98fd8ae2c7f
--- /dev/null
+++ b/users/pcoves/tapDance.h
@@ -0,0 +1,8 @@
+#pragma once
+
+enum {
+ ALT,
+ CTRL,
+ LEFT,
+ RIGHT,
+};
diff --git a/users/pcoves/unicode.c b/users/pcoves/unicode.c
new file mode 100644
index 00000000000..966a9d3852a
--- /dev/null
+++ b/users/pcoves/unicode.c
@@ -0,0 +1,20 @@
+#include "unicode.h"
+#include "pcoves.h"
+
+bool process_record_unicode(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case EMOTE0:
+ if (record->event.pressed) send_unicode_string("(╯°□°)╯︵┻━┻");
+ return false;
+ case EMOTE1:
+ if (record->event.pressed) send_unicode_string("(ヘ・_・)ヘ┳━┳");
+ return false;
+ case EMOTE2:
+ if (record->event.pressed) send_unicode_string("¯\\_(ツ)_/¯");
+ return false;
+ case EMOTE3:
+ if (record->event.pressed) send_unicode_string("ಠ_ಠ");
+ return false;
+ }
+ return true;
+}
diff --git a/users/pcoves/unicode.h b/users/pcoves/unicode.h
new file mode 100644
index 00000000000..ba8a881787d
--- /dev/null
+++ b/users/pcoves/unicode.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#include "quantum.h"
+
+__attribute__((weak)) bool process_record_unicode(uint16_t keycode, keyrecord_t *record);