Compare commits

...
18 Commits
Author SHA1 Message Date
Joel Challis 374525c995 Allow some usbconfig.h overrides at the keyboard level (#8647) 2020-04-29 00:17:54 +01:00
Alexander Hart e02a3c559d Edit Unit Testing Documentation (#8961) 2020-04-29 07:39:08 +10:00
Chris Ko e1217dae5a [Keymap] add chriskopher keymap for usb-usb converter (#8856) 2020-04-28 03:10:42 -07:00
Eric Gebhart 485a0b0bc3 [Keymap] Added Xd75 and viterbi keymaps,refactored my userspace. (#8776) 2020-04-28 02:58:42 -07:00
23cfc4b145 [Keyboard] latinpad(Original:hasupad,RENAMED latinpad) (#8766)
Co-Authored-By: ridingqwerty <[email protected]>
Co-Authored-By: Ryan <[email protected]>
Co-Authored-By: Joel Challis <[email protected]>
Co-Authored-By: Drashna Jaelre <[email protected]>
Co-Authored-By: James Young <[email protected]>
2020-04-28 02:54:22 -07:00
QMK Bot bd639752db format code according to conventions [skip ci] 2020-04-28 07:04:07 +00:00
Ryan aaeef7a833 Add Romanian keymap and sendstring LUT (#8852) 2020-04-28 16:23:48 +10:00
TheFourthCow 0d6614f71f adding info.json for funky40 (#8956) 2020-04-27 21:30:10 -07:00
MechMerlin d322ec5452 [Keyboard] TGR 910 CE (#8940)
* initial commit for TGR 910 CE

* got firmware working on the 910 CE

* add VIA support

* add iso and all layouts

* update information about resetting the board

* fixup default keymap to have a second layer

* fixup default keymap

* add VIA enabled keymap

* cleanups and adding community layout support

* add caps lock led support and backlight

* add qmk configurator support

* Update keyboards/tgr/910ce/info.json
2020-04-27 18:17:12 -07:00
Garret G c7449b3840 [Keyboard] Add royal directory and add 2 keyboard releases (#8877)
* add royal project folder and 2 released keyboards

* fix iso keymap clarification

* Apply suggestions from code review

* Update keyboards/the_royal/schwann/schwann.h

* Update keyboards/the_royal/liminal/liminal.h

* Update keyboards/the_royal/schwann/keymaps/default/keymap.c

* Apply suggestions from code review

new

* Update keymap.c

* Update keymap.c

* Apply suggestions from code review

* Update rules.mk

* add rules.mk to schwann default

* Apply suggestions from code review

* add rules.mk to shwann default
2020-04-27 14:35:03 -07:00
TheFourthCow 4c51049b2b [Keyboard] Add Funky40 support (#8942)
* Adding all relevant files for the Funky40

This should add all proper files for the funky40 a keyboard I designed for myself, /u/TheFourthcow, a 40% ortholinear with split spacebar.

* Second attempt to add all relevant files for the funky40, includes all reccomended changes from my previous pull request

* Revised most files for Funky40 including reccomenations from my previous pull request

* further modifications made to default funky40 board, compiles on my side with no errors hopefully this one works!

* Update keyboards/funky40/readme.mk.mk

* Update keyboards/funky40/keymaps/default/readme.md.md

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

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

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

* Update keyboards/funky40/config.h

* updating readmes and keymap

* final update to keymap and readmes should function correctly with updates requested

* made changes as requested by noroadsleft to config and readme
2020-04-27 14:19:06 -07:00
mpstewart dd60fcda28 [Keymap] Add personal layout: dz60:mpstewart (#8938)
* mpstewart dz60 layout

* Remove macro aliases from keymap

* Remove macro aliases from keymap

* Update keyboards/dz60/keymaps/mpstewart/keymap.c

* Remove macro aliases from keymap

* use AG_TOGG instead of AG_SWAP

Also some commentary changes, and a change to one of the layout graphics
2020-04-27 14:05:12 -07:00
Stefano fd6b674b49 [Keymap] Gherkin SuperMicro 28 (#8886)
* Gherkin SuperMicro 28

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/config.h

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk

* removed jpegs

* removed jpegs

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk

* removed firmware sizes

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/keymap.c

* Update keyboards/40percentclub/gherkin/keymaps/stevexyz/rules.mk

* Update keymap.c
2020-04-27 13:11:02 -07:00
EroviaandJoel Challis 2c0deb8a13 Update and try to clarify the CLI installation on Linux (#8783)
* Update and try to clarify the CLI installation on Linux

* Update commands, add note for Debian/Ubuntu

* Update docs/newbs_getting_started.md

Co-Authored-By: Joel Challis <[email protected]>

Co-authored-by: Joel Challis <[email protected]>
2020-04-27 20:29:31 +01:00
Daniel Dylewsky a904371b29 [Keymap] Vitamins_included keymap vitavim (#8864)
* Add new keymap to vitamins_included, this has four layers. Updated config file to sync rgb between the two halves.

* Cleaned up and added documentation for the keymap

* Updated the keymaps and documentation.

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/config.h

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c

* Update keyboards/vitamins_included/keymaps/vitavim/keymap.c
2020-04-27 10:29:27 -07:00
Aplyard cfdd105d9d [Keyboard] Aplx2 osu! keyboard (#8847)
* Create test.txt

* aplx6

* Delete test.txt

* fff

* Delete ffff

* test compile

* Create README.md

* edited

* requests

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/rules.mk

* Update keyboards/aplx6/rules.mk

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* pins update

* update

* update pins

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* initial commit

* Update aplx2.h

* Update keyboards/aplx2/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx6/README.md

* Update keyboards/aplx2/README.md

* folder change

* Update keyboards/handwired/aplx2/README.md

* Update keyboards/handwired/aplx2/README.md

* latest suggestion

* Update keyboards/handwired/aplx2/README.md
2020-04-27 10:25:51 -07:00
umi 82ae6ee007 [Docs] Japanese translation of docs/feature_grave_esc.md (#8873)
* add feature_grave_esc.md translation

* update based on comment

* update based on comment

* update based on comment

* update based on comment

* update based on comment
2020-04-27 00:47:15 -07:00
umi f220e7d713 [Docs] Japanese translation of docs/feature_hd44780.md (#8875)
* add feature_hd44780.md translation

* update based on comment

* update based on comment

* update based on comment
2020-04-27 00:43:41 -07:00
90 changed files with 5456 additions and 623 deletions

No files matched your search

+37
View File
@@ -0,0 +1,37 @@
# グレイブエスケープ
<!---
original document: 0.8.123:docs/feature_grave_esc.md
git diff 0.8.123 HEAD -- docs/feature_grave_esc.md | cat
-->
60% キーボード、またはファンクションキー行の無い他のレイアウトを使っている場合、専用の Escape キーが無いことに気付くでしょう。グレイブエスケープは grave キー (<code>&#96;</code> および `~`) を Escape と共有することができる機能です。
## 使用法
キーマップ内の `KC_GRAVE` キー (通常は`1` キーの左)を `KC_GESC` に置き換えます。ほとんどの場合、このキーは押された時に `KC_ESC` を出力します。ただし、Shift あるいは GUI を押したままにすると、代わりに `KC_GRV` を出力します。
## OS に見えるもの
メアリーがキーボードで GESC を押すと、OS には KC_ESC 文字が見えます。メアリーが Shift を押しながら GESC を押すと、`~` または Shift された時はバッククォートを出力します。彼女が GUI/CMD/WIN を押したままにすると、1つの <code>&#96;</code> 文字を出力します。
## キーコード
| キー | エイリアス | 説明 |
|---------|-----------|------------------------------------------------------------------|
| `KC_GESC` | `GRAVE_ESC` | 押された場合に Escape。Shift あるいは GUI が押されたままの場合は <code>&#96;</code> |
### 注意事項
macOS では、Command+<code>&#96;</code> はデフォルトで "次のウィンドウを操作対象にする" にマップされます。つまりバッククォートを出力しません。さらに、ショートカットがキーボード環境設定で変更された場合でも、ターミナルは常にこのショートカットを認識してウィンドウを切り替えます。
## 設定
グレイブエスケープが壊す可能性のあるキーの組み合わせが幾つかあります。その中には、Windows では Control+Shift+Escape、macOSでは Command+Option+Escape があります。これを回避するには、`config.h` で以下のオプションを `#define` することができます:
| 定義 | 説明 |
|--------------------------|-----------------------------------------|
| `GRAVE_ESC_ALT_OVERRIDE` | Alt が押された場合、常に Escape を送信する |
| `GRAVE_ESC_CTRL_OVERRIDE` | Control が押された場合、常に Escape を送信する |
| `GRAVE_ESC_GUI_OVERRIDE` | GUI が押された場合、常に Escape を送信する |
| `GRAVE_ESC_SHIFT_OVERRIDE` | Shift が押された場合、常に Escape を送信する |
+62
View File
@@ -0,0 +1,62 @@
# HD44780 LCD ディスプレイ
<!---
original document: 0.8.123:docs/feature_hd44780.md
git diff 0.8.123 HEAD -- docs/feature_hd44780.md | cat
-->
これは Peter Fleury の LCD ライブラリの統合です。このページは基本について説明します。[詳細なドキュメントについてはこのページをご覧ください](http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__lcd.html) (訳注)原文のリンク先のページは、サービスの終了に伴って削除されています。移行先は (http://www.peterfleury.epizy.com/doxygen/avr-gcc-libraries/group__pfleury__lcd.html) と思われます。
HD44780 ディスプレイのサポートを有効にするには、キーボードの `rules.mk` の `HD44780_ENABLE` フラグを yes に設定します。
## 設定
ディスプレイで使用されるピンとディスプレイの行と列の数を、キーボードの `config.h` に設定する必要があります。
HD44780 のラベルが付いたセクションのコメントを外し、必要に応じてパラメータを変更します。
````
/*
* HD44780 LCD ディスプレイ設定
*/
#define LCD_LINES 2 //< ディスプレイの表示行数
#define LCD_DISP_LENGTH 16 //< ディスプレイの行ごとの表示文字数
#define LCD_IO_MODE 1 //< 0: メモリマップモード 1: IO ポートモード
#if LCD_IO_MODE
#define LCD_PORT PORTB //< LCD 行のためのポート
#define LCD_DATA0_PORT LCD_PORT //< 4ビットデータビット 0 のポート
#define LCD_DATA1_PORT LCD_PORT //< 4ビットデータビット 1 のポート
#define LCD_DATA2_PORT LCD_PORT //< 4ビットデータビット 2 のポート
#define LCD_DATA3_PORT LCD_PORT //< 4ビットデータビット 3 のポート
#define LCD_DATA0_PIN 4 //< 4ビットデータビット 0 のピン
#define LCD_DATA1_PIN 5 //< 4ビットデータビット 1 のピン
#define LCD_DATA2_PIN 6 //< 4ビットデータビット 2 のピン
#define LCD_DATA3_PIN 7 //< 4ビットデータビット 3 のピン
#define LCD_RS_PORT LCD_PORT //< RS 線のためのポート
#define LCD_RS_PIN 3 //< RS 線のためのピン
#define LCD_RW_PORT LCD_PORT //< RW 線のためのポート
#define LCD_RW_PIN 2 //< RW 線のためのピン
#define LCD_E_PORT LCD_PORT //< Enable 線のためのポート
#define LCD_E_PIN 1 //< Enable 線のためのピン
#endif
````
他のプロパティを設定する必要がある場合は、それらを `quantum/hd44780.h` からコピーし、`config.h` に設定することができます。(訳注)`quantum/hd44780.h` は `drivers/avr/hd44780.h` の間違いではないかと思われます。
## 使用法
ディスプレイを初期化するには、以下のパラメータのうちの1つを使って `lcd_init()` を呼び出します:
````
LCD_DISP_OFF : ディスプレイオフ
LCD_DISP_ON : ディスプレイオン、カーソルオフ
LCD_DISP_ON_CURSOR : ディスプレイオン、カーソルオン
LCD_DISP_ON_CURSOR_BLINK : ディスプレイオン、点滅カーソル
````
これはキーボードの `matrix_init_kb` またはキーマップの `matrix_init_user` で行うのが最適です。
使用前にディスプレイをクリアすることをお勧めします。
そのためには、`lcd_clrsrc()` を呼びます。
ディスプレイに何かを表示するには、最初に `lcd_gotoxy(column, line)` を呼びます。最初の行の先頭に移動するには、`lcd_gotoxy(0, 0)` を呼び出し、その後 `lcd_puts("example string")` を使って文字列を出力します。
ディスプレイを制御することができる、より多くのメソッドがあります。[詳細なドキュメントについてはリンクされたページをご覧ください](http://homepage.hispeed.ch/peterfleury/doxygen/avr-gcc-libraries/group__pfleury__lcd.html) (訳注)原文のリンク先のページは、サービスの終了に伴って削除されています。移行先は (http://www.peterfleury.epizy.com/doxygen/avr-gcc-libraries/group__pfleury__lcd.html) と思われます。
+14 -3
View File
@@ -66,9 +66,14 @@ After Homebrew is installed run these commands:
You will need to install Git and Python. It's very likely that you already have both, but if not, one of the following commands should install them: You will need to install Git and Python. It's very likely that you already have both, but if not, one of the following commands should install them:
* Debian / Ubuntu / Devuan: `apt-get install git python3 && python3 -m pip install qmk` * Debian / Ubuntu / Devuan: `sudo apt install git python3 python3-pip`
* Fedora / Red Hat / CentOS: `yum install git python3 && python3 -m pip install qmk` * Fedora / Red Hat / CentOS: `sudo yum install git python3 python3-pip`
* Arch: `yay -S qmk` (or use any other AUR Helper) * Arch / Manjaro: `sudo pacman -S git python python-pip python-setuptools libffi`
Install the global CLI to bootstrap your system:
`python3 -m pip install --user qmk` (on Arch-based distros you can also try the `qmk` package from AUR (**note**: it's maintained by a community member): `yay -S qmk`)
## 3. Run QMK Setup :id=set-up-qmk ## 3. Run QMK Setup :id=set-up-qmk
@@ -78,6 +83,12 @@ After installing QMK you can set it up with this command:
In most situations you will want to answer Yes to all of the prompts. In most situations you will want to answer Yes to all of the prompts.
?>**Note on Debian, Ubuntu and their derivatives**:
It's possible, that you will get an error saying something like: `bash: qmk: command not found`.
This is due to a [bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=839155) Debian introduced with their Bash 4.4 release, which removed `$HOME/.local/bin` from the PATH. This bug was later fixed on Debian and Ubuntu.
Sadly, Ubuntu reitroduced this bug and is [yet to fix it](https://bugs.launchpad.net/ubuntu/+source/bash/+bug/1588562).
Luckily, the fix is easy. Run this as your user: `echo "PATH=$HOME/.local/bin:$PATH" >> $HOME/.bashrc && source $HOME/.bashrc`
?> If you already know [how to use GitHub](getting_started_github.md), we recommend that you create your own fork and use `qmk setup <github_username>/qmk_firmware` to clone your personal fork. If you don't know what that means you can safely ignore this message. ?> If you already know [how to use GitHub](getting_started_github.md), we recommend that you create your own fork and use `qmk setup <github_username>/qmk_firmware` to clone your personal fork. If you don't know what that means you can safely ignore this message.
## 4. Test Your Build Environment ## 4. Test Your Build Environment
+1 -1
View File
@@ -50,7 +50,7 @@ In that model you would emulate the input, and expect a certain output from the
# Tracing Variables :id=tracing-variables # Tracing Variables :id=tracing-variables
Sometimes you might wonder why a variable gets changed and where, and this can be quite tricky to track down without having a debugger. It's of course possible to manually add print statements to track it, but you can also enable the variable trace feature. This works for both for variables that are changed by the code, and when the variable is changed by some memory corruption. Sometimes you might wonder why a variable gets changed and where, and this can be quite tricky to track down without having a debugger. It's of course possible to manually add print statements to track it, but you can also enable the variable trace feature. This works for both variables that are changed by the code, and when the variable is changed by some memory corruption.
To take the feature into use add `VARIABLE_TRACE=x` to the end of you make command. `x` represents the number of variables you want to trace, which is usually 1. To take the feature into use add `VARIABLE_TRACE=x` to the end of you make command. `x` represents the number of variables you want to trace, which is usually 1.
@@ -0,0 +1,52 @@
#pragma once
// bootloader (first top leftmost key)
#define BOOTMAGIC_LITE_ROW 0
#define BOOTMAGIC_LITE_COLUMN 1
// Behaviors That Can Be Configured
#define TAPPING_TERM 250
// how long before a tap becomes a hold, if set above 500, a key tapped during the tapping term will turn it into a hold too
#define PERMISSIVE_HOLD
// makes tap and hold keys trigger the hold if another key is pressed before releasing, even if it hasn't hit the TAPPING_TERM
#define IGNORE_MOD_TAP_INTERRUPT
// makes it possible to do rolling combos (zx) with keys that convert to other keys on hold, by enforcing the TAPPING_TERM for both keys.
#define TAPPING_FORCE_HOLD
// makes it possible to use a dual role key as modifier shortly after having been tapped (see Hold after tap)
// Breaks any Tap Toggle functionality (TT or the One Shot Tap Toggle)
/*
#define TAPPING_TERM_PER_KEY
// enables handling for per key TAPPING_TERM settings
#define RETRO_TAPPING
// tap anyway, even after TAPPING_TERM, if there was no other key interruption between press and release
#define TAPPING_TOGGLE 2
// how many taps before triggering the toggle
#define LEADER_TIMEOUT 300
// how long before the leader key times out
// If you're having issues finishing the sequence before it times out, you may need to increase the timeout setting. Or you may want to enable the LEADER_PER_KEY_TIMING option, which resets the timeout after each key is tapped.
#define LEADER_PER_KEY_TIMING
// sets the timer for leader key chords to run on each key press rather than overall
#define LEADER_KEY_STRICT_KEY_PROCESSING
// Disables keycode filtering for Mod-Tap and Layer-Tap keycodes. Eg, if you enable this, you would need to specify MT(MOD_CTL, KC_A) if you want to use KC_A.
#define ONESHOT_TIMEOUT 300
// how long before oneshot times out
#define ONESHOT_TAP_TOGGLE 2
// how many taps before oneshot toggle is triggered
#define QMK_KEYS_PER_SCAN 4
// Allows sending more than one key per scan. By default, only one key event gets sent via process_record() per scan. This has little impact on most typing, but if you're doing a lot of chords, or your scan rate is slow to begin with, you can have some delay in processing key events. Each press and release is a separate event. For a keyboard with 1ms or so scan times, even a very fast typist isn't going to produce the 500 keystrokes a second needed to actually get more than a few ms of delay from this. But if you're doing chording on something with 3-4ms scan times? You probably want this.
#define COMBO_COUNT 2
// Set this to the number of combos that you're using in the Combo feature.
#define COMBO_TERM 200
// how long for the Combo keys to be detected. Defaults to TAPPING_TERM if not defined.
#define TAP_CODE_DELAY 100
// Sets the delay between register_code and unregister_code, if you're having issues with it registering properly (common on VUSB boards). The value is in milliseconds.
#define TAP_HOLD_CAPS_DELAY 80
// Sets the delay for Tap Hold keys (LT, MT) when using KC_CAPSLOCK keycode, as this has some special handling on MacOS. The value is in milliseconds, and defaults to 80 ms if not defined. For macOS, you may want to set this to 200 or higher.
*/
@@ -0,0 +1,246 @@
/* Copyright 2019 Stefano Marago'
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* see jj40/stevexyz for more information
*/
#include QMK_KEYBOARD_H
enum layers {
LAYER_HOME, // home base layer
LAYER_FUNC, // function keys and cursors
LAYER_NUMSYM, // numbers and other characters
LAYER_SYST, // media, mouse and other system keys
LAYER_ARROWPAD,
LAYER_NUMPAD,
LAYER_MEDIAPAD,
};
enum custom_keycodes {
CK_TRIPLEZERO = SAFE_RANGE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* LEGEND:
*
* ,--------------------------------.
* | Top row: shifted character |
* | Central row: standard char |
* | Bottom row: hold modifier |
* `--------------------------------'
*
* "____" means free to be assigned
*
*/
/* Qwerty Home Layer
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | Q | W | E | R | T | Y | U | I | O | P |
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | A | S | D | F | G | H | J | K | L | Enter|
* | Shift| FnNav|NumSym| AltGr| OSkey| OSkey| AltGr| FnNav|NumSym| Shift|
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
* | Z | X | C | V | B | N | M | Space|
* | Ctrl | Alt | FnNav|NumSym| Shift| Alt | Ctrl | Shift|
* '-------------------------------------------------------'
*/
[LAYER_HOME] = LAYOUT_ortho_3x10(
LT(LAYER_ARROWPAD, KC_Q), LT(LAYER_NUMPAD, KC_W), LT(LAYER_MEDIAPAD, KC_E), KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
MT(MOD_LSFT, KC_A), LT(LAYER_FUNC, KC_S), LT(LAYER_NUMSYM, KC_D), MT(MOD_RALT, KC_F), MT(MOD_LGUI, KC_G), MT(MOD_RGUI, KC_H), MT(MOD_RALT, KC_J), LT(LAYER_FUNC, KC_K), LT(LAYER_NUMSYM, KC_L), MT(MOD_RSFT, KC_ENT),
XXXXXXX, MT(MOD_LCTL, KC_Z), MT(MOD_LALT, KC_X), LT(LAYER_FUNC, KC_C), LT(LAYER_NUMSYM, KC_V), MT(MOD_LSFT, KC_B), MT(MOD_LALT, KC_N), MT(MOD_RCTL, KC_M), MT(MOD_RSFT, KC_SPC), XXXXXXX ),
/* Function and Navigation Layer
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | ESC | Home | PgDn | PgUp | End | Left | Down | Up | Right| Baksp|
* | Shift| ____ |SysLay| AltGr| OSkey| OSkey| AltGr| ____ |SysLay| Shift|
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
* | ____ | ____ | | ____ | ____ | ____ | ____ | ____ |
* | Ctrl | Alt | ____ |SysLay| Shift| Alt | Ctrl | Shift|
* '-------------------------------------------------------'
*/
[LAYER_FUNC] = LAYOUT_ortho_3x10(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
MT(MOD_LSFT, KC_ESC), KC_HOME, LT(LAYER_SYST, KC_PGDN), MT(MOD_RALT, KC_PGUP), MT(MOD_LGUI, KC_END), MT(MOD_RGUI, KC_LEFT), MT(MOD_RALT, KC_DOWN), KC_UP, LT(LAYER_SYST, KC_RGHT), MT(MOD_RSFT, KC_BSPC),
XXXXXXX, KC_LCTL, KC_LALT, KC_NO, MO(LAYER_SYST), KC_LSFT, KC_LALT, KC_RCTL, MT(MOD_RSFT, KC_SPC), XXXXXXX ),
/* Number and Symbols Layer
* ,---------------------------------------------------------------------.
* | ! | @ | # | $ | % | ^ | & | * | ( | ) |
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | ~ | _ | + | { | } | | | : | " | |
* | TAB | ` | - | = | [ | ] | \ | ; | ' | Del |
* | Shift|SysLay| ____ | AltGr| OSkey| OSkey| AltGr|SysLay| ____ | Shift|
* ' -----+------+------+------+------+------|------+------+------+------'
* | | | | | < | > | ? | |
* | ____ | ____ | ____ | | , | . | / | ____ |
* | Ctrl | Alt |SysLay| ____ | Shift| Alt | Ctrl | Shift|
* '-------------------------------------------------------'
*/
[LAYER_NUMSYM] = LAYOUT_ortho_3x10(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
MT(MOD_LSFT, KC_TAB), LT(LAYER_SYST, KC_GRV), KC_MINS, MT(MOD_RALT, KC_EQL), MT(MOD_LGUI, KC_LBRC), MT(MOD_RGUI, KC_RBRC), MT(MOD_RALT, KC_BSLS), LT(LAYER_SYST, KC_SCLN), KC_QUOT, MT(MOD_RSFT, KC_DEL),
XXXXXXX, KC_LCTL, KC_LALT, MO(LAYER_SYST), KC_NO, MT(MOD_LSFT, KC_COMM), MT(MOD_LALT, KC_DOT), MT(MOD_RCTL, KC_SLSH), MT(MOD_RSFT, KC_SPC), XXXXXXX ),
/* System Layer
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | F11 | F12 | Play | Next |MsWhlU|MsBtn1|OSMenu|SysReq|MsBtn2|Backsp|
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | Caps | Mute | Vol- | Vol+ |MsWhlD|MsLeft|MSDown| MsUp |MsRigh| Ins |
* | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift|
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
* | ____ | ____ | | |PrnScr|ScrLck|Pause | ____ |
* | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | Shift|
* '-------------------------------------------------------'
* simplified view (for media and mouse there are dedicated layers)
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | F11 | F12 | | | | |OSMenu|SysReq| |Backsp|
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | Caps | | | | | | | | | Ins |
* | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | Shift|
* '------+------+------+------+------+------|------+------+------+------+
* | | | | | | | | |
* | | | | |PrnScr|ScrLck|Pause | |
* | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | Shift|
* '-------------------------------------------------------'
*/
[LAYER_SYST] = LAYOUT_ortho_3x10(
KC_F11, KC_F12, KC_MPLY, KC_MNXT, KC_MS_WH_UP, KC_MS_BTN1, KC_APP, KC_SYSREQ, KC_MS_BTN2, KC_BSPC,
MT(MOD_LSFT, KC_CAPS), KC_MUTE, KC_VOLD, KC_VOLU, KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_UP, KC_MS_RIGHT, MT(MOD_RSFT, KC_INS),
XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, MT(MOD_RSFT, KC_SPC), XXXXXXX ),
/* ArrowPad (mod su Q) /------mouse-------\ /-----cursor-------\
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | | | |MsBtn1| MsUp |MsBtn2| Home | Up | PgUp |Backsp|
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | | | |MsLeft|MsDown|MsRigh| Left | Down | Right| Enter|
* | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
* | | |MsWhlU|MsDown|MsWhlD| End | Down | PdDn |
* | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
* '-------------------------------------------------------'
*/
[LAYER_ARROWPAD] = LAYOUT_ortho_3x10(
KC_NO, KC_NO, KC_NO, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_HOME, KC_UP, KC_PGUP, KC_BSPC,
KC_LSFT, KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_ENT,
XXXXXXX, KC_LCTL, KC_LALT, KC_MS_WH_UP, KC_MS_DOWN, KC_MS_WH_DOWN, KC_END, KC_DOWN, KC_PGDN, XXXXXXX ),
/* NumPad (mod su W)
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | | | / | * | - |Backsp| 7 | 8 | 9 | 0 |
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | | | | = | + | . | 4 | 5 | 6 | Enter|
* | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
* | | | | Tab | , | 1 | 2 | 3 |
* | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
* '-------------------------------------------------------'
*/
[LAYER_NUMPAD] = LAYOUT_ortho_3x10(
KC_NO, KC_NO, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_BSPC, KC_7, KC_8, KC_9, KC_0,
KC_LSFT, KC_NO, KC_NO, KC_KP_EQUAL, KC_KP_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ENT,
XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_TAB, KC_COMM, KC_1, KC_2, KC_3, XXXXXXX ),
/* MediaPad (mod su E)
* ,---------------------------------------------------------------------.
* | | | | | | | | | | |
* | | | | | | | | Vol+ | | |
* | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* |------+------+------+------+-------------+------+------+------+------|
* | | | | | | | | | | |
* | | | | | | | Prev | Play | Next | |
* | Shift| ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ | ____ |
* '------+------+------+------+------+------|------+------+------+------'
* | | | | | | | | |
* | | | | | | Mute | Vol- | |
* | Ctrl | Alt | ____ | ____ | ____ | ____ | ____ | ____ |
* '-------------------------------------------------------'
*/
[LAYER_MEDIAPAD] = LAYOUT_ortho_3x10(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLU, KC_NO, KC_NO,
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO,
XXXXXXX, KC_LCTL, KC_LALT, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_NO, XXXXXXX ),
};
void matrix_init_user(void) {
// eeconfig_init(); // reset keyboard to a standard default state; useful when new releases messup with eeprom values
// set num lock on at start (for numonly layer to work)
if (!host_keyboard_led_state().num_lock) {
tap_code(KC_NUMLOCK);
}
}
void matrix_scan_user(void) {
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case CK_TRIPLEZERO:
if (record->event.pressed) {
SEND_STRING("000");
} // else { when released... }
break;
}
return true;
};
void keyboard_pre_init_user(void) {
// Call the keyboard pre init code.
// Set our LED pins as output
setPinOutput(D5);
setPinOutput(B0);
}
bool led_update_user(led_t led_state) {
writePin(D5, !led_state.num_lock);
writePin(B0, !led_state.caps_lock);
return false; // prevent keyboard from processing state
}
@@ -0,0 +1,13 @@
# gherkin super micro edition
With this configuration the "28" layout first experimented on the plank-like jj40 is being ported to a more proper board, leaving just two keys not used.
For more information please have a look at https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/jj40/keymaps/stevexyz/readme.md
The image below explain the main layers. In addition to them with q, w and e there are three specific dedicated layers for cursors/mouse, numpad and media.
![layers](https://raw.githubusercontent.com/stevexyz/qmk_firmware/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/layers.jpeg)
![prototype](https://github.com/stevexyz/qmk_firmware/blob/master/keyboards/40percentclub/gherkin/keymaps/stevexyz/gherkin28.jpeg)
Happy hacking!
_Stefano
@@ -0,0 +1,19 @@
# Build Options (yes/no)
#
BOOTMAGIC_ENABLE = lite # Just bootloader enabled with keys
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
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
TAP_DANCE_ENABLE = no
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend (it uses the same timer as BACKLIGHT_ENABLE)
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = no
@@ -0,0 +1,54 @@
/* Copyright 2020 Christopher Ko <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "shared_enum.h"
#include "quantum.h"
enum combo_event {
SD_LAYER_COMBO,
KL_MEH_COMBO,
};
const uint16_t PROGMEM sd_combo[] = {KC_S, KC_D, COMBO_END}; // Combo: S + D for SuperDuper mode
const uint16_t PROGMEM kl_combo[] = {KC_K, KC_L, COMBO_END}; // Combo: K + L for Meh modifier
// Register the combo action
combo_t key_combos[COMBO_COUNT] = {
[SD_LAYER_COMBO] = COMBO_ACTION(sd_combo),
[KL_MEH_COMBO] = COMBO_ACTION(kl_combo),
};
// Called after a combo event is triggered
void process_combo_event(uint8_t combo_index, bool pressed) {
switch (combo_index) {
case SD_LAYER_COMBO:
if (pressed) {
layer_on(_SUPERDUPER);
} else {
layer_off(_SUPERDUPER);
}
break;
case KL_MEH_COMBO:
if (pressed) {
register_mods(MOD_MEH);
} else {
unregister_mods(MOD_MEH);
}
break;
}
}
@@ -0,0 +1,25 @@
/* Copyright 2020 Christopher Ko <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#define TAPPING_TERM 200 // Delay for tap modifiers until it is considered a hold
#define IGNORE_MOD_TAP_INTERRUPT // Enable ignore mod tap interrupt: https://docs.qmk.fm/#/tap_hold?id=ignore-mod-tap-interrupt
#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY // Allows configuration of ignore mod tap interrupt per key in keymap.c
#define COMBO_COUNT 2 // Number of defined combos
#define COMBO_TERM 20 // Delay for combo keys to be chained together
@@ -0,0 +1,186 @@
/* Copyright 2020 Christopher Ko <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "shared_enum.h"
#include QMK_KEYBOARD_H
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Modified Qwerty for chriskopher: base default layer
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------. ,---------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ | |Ins|Hom|PgU| |NmL| /| *| -|
* |-----------------------------------------------------------| |-----------| |---------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bsp| |Del|End|PgD| | 7| 8| 9| |
* |-----------------------------------------------------------| `-----------' |-----------| |
* |Ctl/Esc| A| S| D| F| G| H| J| K| L|;/:| ' | Return| | 4| 5| 6| +|
* |-----------------------------------------------------------| ,---. |---------------|
* |Shift/( |Dev/Z| X| C| V| B| N| M| ,| .| /| Shift/)| | ↑ | | 1| 2| 3| |
* |-----------------------------------------------------------| ,-----------. |-----------| |
* |Meh/CapsL|Gui|Alt| Space |Alt|Adjust/Gui|App| Ctl| | ← | ↓ | → | | 0| .|Ent|
* `-----------------------------------------------------------' `-----------' `---------------'
*/
[_CKO] = LAYOUT_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_BSLS, 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_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9,
LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD(SCLN_CLN), KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
TD(ESPC_L), LT(_DEV,KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TD(ESPC_R), KC_UP, KC_P1, KC_P2, KC_P3,
MEH_T(KC_CAPS), KC_LGUI, KC_LALT, KC_SPC, KC_RALT, LT(_ADJUST,KC_RGUI), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
),
/* Regular Qwerty: default layer
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------. ,---------------.
* | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
* |-----------------------------------------------------------| |-----------| |---------------|
* |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| |
* |-----------------------------------------------------------| `-----------' |-----------| |
* |CapsL | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| +|
* |-----------------------------------------------------------| ,---. |---------------|
* |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | ↑ | | 1| 2| 3| |
* |-----------------------------------------------------------| ,-----------. |-----------| |
* |Ctl|Gui|Alt| Space |Alt|Adjust/Gui|App|Ctl| | ← | ↓ | → | | 0| .|Ent|
* `-----------------------------------------------------------' `-----------' `---------------'
*/
[_QWERTY] = LAYOUT_ansi(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_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_PPLS,
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_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, LT(_ADJUST,KC_RGUI), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
),
/* SuperDuper
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* | | | | | | | | | | | | | | | | | | | | |
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------. ,---------------.
* | | | | | | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |-----------| |---------------|
* | | | | | | | |1T |T← |T→ |9T | | | | | | | | | | | | |
* |-----------------------------------------------------------| `-----------' |-----------| |
* | |Alt|[SuperDuper]|Bksp|Ctl| ← | ↓ | ↑ | → |Del| | | | | | | |
* |-----------------------------------------------------------| ,---. |---------------|
* | | | | | | | | | | |ToggleSD| | | | | | | | |
* |-----------------------------------------------------------| ,-----------. |-----------| |
* | | | | Shift | | | | | | | | | | | | |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
[_SUPERDUPER] = LAYOUT_ansi(
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, C(KC_1), C(S(KC_TAB)), C(KC_TAB), C(KC_9), ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, KC_LALT, ______, ______, KC_BSPC, KC_LCTL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_DEL, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, TG(_SUPERDUPER), ______, ______, ______, ______, ______,
______, ______, ______, KC_LSFT, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
),
/* Dev
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* | | | | | | | | | | | | | | | | | | | | |
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------. ,---------------.
* | | | | | | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |-----------| |---------------|
* | | | | | | | | - | + | ( | ) | | | | | | | | | | | | |
* |-----------------------------------------------------------| `-----------' |-----------| |
* | | | | | | | _ | [ | ] | { | } | | | | | | | |
* |-----------------------------------------------------------| ,---. |---------------|
* | | | | | | | = | | | < | > | ? | | | | | | | | |
* |-----------------------------------------------------------| ,-----------. |-----------| |
* | | | | | | | | | | | | | | | | |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
[_DEV] = LAYOUT_ansi(
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, KC_MINS, S(KC_EQL), S(KC_9), S(KC_0), ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, S(KC_MINS), KC_LBRC, KC_RBRC, S(KC_LBRC), S(KC_RBRC), ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, KC_EQL, S(KC_BSLASH), S(KC_COMM), S(KC_DOT), S(KC_SLSH), ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
),
/* Adjust
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* | | | | | | | | | | | | | | | | | | | | |
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,--------------. ,---------------.
* | | | | | | | | | | | | | | | |Play|Next|VolU| | | | | |
* |-----------------------------------------------------------| |--------------| |---------------|
* | |QWERTY| | | | | | | | | | | | | |Stop|Prev|VolD| | | | | |
* |-----------------------------------------------------------| `--------------' |-----------| |
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,---. |---------------|
* | | | |CKO| | | |Play|Mute|VolD|VolU| SD| | | | | | | | |
* |-----------------------------------------------------------| ,-----------. |-----------| |
* | | | | | | | | | | | | | | | | |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
[_ADJUST] = LAYOUT_ansi(
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MPLY, KC_MNXT, KC_VOLU, ______, ______, ______, ______,
______, DF(_QWERTY), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MSTP, KC_MPRV, KC_VOLD, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, DF(_CKO), ______, ______, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SUPERDUPER), ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
)
/* Empty layout for future reference
* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
* | | | | | | | | | | | | | | | | | | | | |
* `---' `---------------' `---------------' `---------------' `-----------'
* ,-----------------------------------------------------------. ,-----------. ,---------------.
* | | | | | | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| |-----------| |---------------|
* | | | | | | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| `-----------' |-----------| |
* | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,---. |---------------|
* | | | | | | | | | | | | | | | | | | | |
* |-----------------------------------------------------------| ,-----------. |-----------| |
* | | | | | | | | | | | | | | | | |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
/*
* [_EMPTY] = LAYOUT_ansi(
* ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
* ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
* ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
* ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
* ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
* ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
* ),
*/
};
// clang-format on
// Configure ignore mod tap interrupt per key
bool get_ignore_mod_tap_interrupt(uint16_t keycode) {
switch (keycode) {
// I don't like how mod tap interrupt feels with these keys specifically when I'm typing
case LCTL_T(KC_ESC):
return false;
default:
return true;
}
}
@@ -0,0 +1,193 @@
# chriskopher's QMK Config
Currently designed for the use of an ANSI tenkeyless keyboard on Windows 10. Although many of the ideas can be applied agnostically across operating systems.
## Hardware
- [Hasu USB to USB Controller Converter](https://www.1upkeyboards.com/shop/controllers/usb-to-usb-converter/)
- Limitations include:
- 6KRO
- Media/System control keys and <kbd>Fn</kbd> key are not recognized by the converter
- Max firmware size of 28K and a lot of it is taken up by the USB keyboard support, so not all QMK features can be enabled
- No mouse or other pointing device support
- A regular ANSI QWERTY USB Type B keyboard
## Layer Overview
### Base Layers
#### 0. [My personal modified QWERTY layout](#chriskopher-qwerty-layout)
This is the default base layer that is used for most of my typing and where the intermediate layers are stacked onto. It is loaded by default on keyboard power up.
- Apply this base layer with <kbd>[Adjust](#adjust-layer)</kbd> + <kbd>c</kbd>, or by powering on the keyboard
- Swapped <kbd>CapsLock</kbd> and <kbd>LCtrl</kbd> for ergonomics with often performed <kbd>LCtrl</kbd> keyboard shortcuts
- Swapped <kbd>\\</kbd> and <kbd>Backspace</kbd> to minimize hand movement, inspired by the [HHKB](https://happyhackingkb.com/) layout
- Overloaded modifier keys, inspired by Steve Losh's [A Modern Space Cadet](https://stevelosh.com/blog/2012/10/a-modern-space-cadet/)
- Tap <kbd>LShift</kbd> for <kbd>(</kbd>, hold for <kbd>LShift</kbd>
- Tap <kbd>RShift</kbd> for <kbd>)</kbd>, hold for <kbd>RShift</kbd>
- Tap <kbd>LCtrl</kbd> for <kbd>Esc</kbd>, hold for <kbd>LCtrl</kbd> (remember that <kbd>LCtrl</kbd> is swapped with <kbd>CapsLock</kbd>)
- Tap Dances that allow different functionality based on the number of key presses within the `TAPPING_TERM` of 200 ms
- Extended space cadet shifting:
- Two taps of <kbd>LShift</kbd> sends <kbd>{</kbd>, and three taps send <kbd>[</kbd>
- Two taps of <kbd>RShift</kbd> sends <kbd>}</kbd>, and three taps send <kbd>]</kbd>
- One tap of <kbd>;</kbd> will send <kbd>;</kbd>, two taps of <kbd>;</kbd> will send <kbd>:</kbd>
- Combos that allow for different functionality based on custom chorded key presses within the `COMBO_TERM` of 20 ms
- Press and hold <kbd>s</kbd> and <kbd>d</kbd> to momentarily activate the <kbd>[(S)uper(D)uper](#superduper-layer)</kbd> layer
- Press and hold <kbd>k</kbd> and <kbd>l</kbd> to momentarily activate <kbd>Meh</kbd> modifier key
- <kbd>Meh</kbd> key (<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Alt</kbd>) is useful for binding unique hotkeys on the OS that won't collide with or override other existing hotkeys
- Tap <kbd>CapsLock</kbd> for <kbd>CapsLock</kbd>, hold <kbd>CapsLock</kbd> to momentarily activate <kbd>Meh</kbd> modifier key while held (remember that <kbd>LCtrl</kbd> is swapped with <kbd>CapsLock</kbd>)
- Tap/Hold actions for layer switching
- Similar to the overloaded modifier keys
- Tap <kbd>z</kbd> for <kbd>z</kbd>, hold <kbd>z</kbd> to momentarily activate <kbd>[Dev](#dev-layer)</kbd> layer while held
- Tap <kbd>RGui</kbd> for <kbd>RGui</kbd>, hold <kbd>RGui</kbd> to momentarily activate <kbd>[Adjust](#adjust-layer)</kbd> layer while held
```
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ | |Ins|Hom|PgU| |NmL| /| *| -|
|-----------------------------------------------------------| |-----------| |---------------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bsp| |Del|End|PgD| | 7| 8| 9| |
|-----------------------------------------------------------| `-----------' |-----------| |
|Ctl/Esc| A| S| D| F| G| H| J| K| L|;/:| ' | Return| | 4| 5| 6| +|
|-----------------------------------------------------------| ,---. |---------------|
|Shift/( |Dev/Z| X| C| V| B| N| M| ,| .| /| Shift/)| | ↑ | | 1| 2| 3| |
|-----------------------------------------------------------| ,-----------. |-----------| |
|Meh/CapsL|Gui|Alt| Space |Alt|Adjust/Gui|App| Ctl| | ← | ↓ | → | | 0| .|Ent|
`-----------------------------------------------------------' `-----------' `---------------'
```
Note: can't use <kbd>Hyper</kbd> key (<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>Alt</kbd> + <kbd>Gui</kbd>) instead of <kbd>Meh</kbd> reliably on Windows 10 because pressing <kbd>Hyper</kbd> opens Microsoft Office, <kbd>Hyper</kbd> + <kbd>t</kbd> opens Microsoft Teams, <kbd>Hyper</kbd> + <kbd>d</kbd> opens Microsoft OneDrive, <kbd>Hyper</kbd> + <kbd>y</kbd> Yammer, etc. And I couldn't find a clean way to disable this without needing to modify the host computer.
#### 1. [A regular QWERTY layout](#regular-qwerty-layout)
This layer is for when other people need to type on my keyboard.
- Apply this base layer with <kbd>[Adjust](#adjust-layer)</kbd> + <kbd>q</kbd>
- The only modification is the addition of the tap/hold action for switching back to the <kbd>[Adjust](#adjust-layer)</kbd> layer while held
- Tap <kbd>RGui</kbd> for <kbd>RGui</kbd>, hold <kbd>RGui</kbd> to momentarily activate <kbd>[Adjust](#adjust-layer)</kbd> layer while held
```
,---. ,---------------. ,---------------. ,---------------. ,-----------.
|Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
| `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
|-----------------------------------------------------------| |-----------| |---------------|
|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| |
|-----------------------------------------------------------| `-----------' |-----------| |
|CapsL | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| +|
|-----------------------------------------------------------| ,---. |---------------|
|Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | | ↑ | | 1| 2| 3| |
|-----------------------------------------------------------| ,-----------. |-----------| |
|Ctl|Gui|Alt| Space |Alt|Adjust/Gui|App|Ctl| | ← | ↓ | → | | 0| .|Ent|
`-----------------------------------------------------------' `-----------' `---------------'
```
### Intermediate Layers
#### 2. [(S)uper(D)uper Mode](#superduper-layer)
Inspired by [narze](https://github.com/qmk/qmk_firmware/tree/master/keyboards/planck/keymaps/narze) via [jasonrudolph](https://github.com/jasonrudolph/keyboard#super-duper-mode). It's designed to help with navigation while keeping you on the home row, or very close to it.
- To activate this layer, press <kbd>s</kbd> + <kbd>d</kbd> simultaneously and hold from the base layer
- Alternatively, hold <kbd>/</kbd> to activate the layer. This method is slower because the layer toggle uses a `TAPPING_TERM` of 200 ms but <kbd>s</kbd> + <kbd>d</kbd> uses a `COMBO_TERM` of only 20 ms (can be changed within `config.h`).
- Use <kbd>h</kbd> / <kbd>j</kbd> / <kbd>k</kbd> / <kbd>l</kbd>
for <kbd>←</kbd> / <kbd>↓</kbd> / <kbd>↑</kbd> / <kbd>→</kbd>, respectively
- Use <kbd>a</kbd> for <kbd>Alt</kbd>
- Use <kbd>f</kbd> for <kbd>Backspace</kbd>
- Use <kbd>g</kbd> for <kbd>Ctrl</kbd>
- Use <kbd>Space</kbd> for <kbd>Shift</kbd>
- Use <kbd>;</kbd> for <kbd>Delete</kbd>
- Use <kbd>i</kbd> / <kbd>o</kbd> to move to the previous/next tab
- Use <kbd>u</kbd> / <kbd>p</kbd> to go to the first/last tab (in most apps)
- Use <kbd>/</kbd> to toggle <kbd>[(S)uper(D)uper](#superduper-layer)</kbd> layer
```
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| | | | | | | | | | | | | | | | | | | | |
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
| | | | | | | | | | | | | | | | | | | | | | | |
|-----------------------------------------------------------| |-----------| |---------------|
| | | | | | | |1T |T← |T→ |9T | | | | | | | | | | | | |
|-----------------------------------------------------------| `-----------' |-----------| |
| |Alt|[SuperDuper]|Bksp|Ctl| ← | ↓ | ↑ | → |Del| | | | | | | |
|-----------------------------------------------------------| ,---. |---------------|
| | | | | | | | | | |ToggleSD| | | | | | | | |
|-----------------------------------------------------------| ,-----------. |-----------| |
| | | | Shift | | | | | | | | | | | | |
`-----------------------------------------------------------' `-----------' `---------------'
```
#### 3. [Dev](#dev-layer)
This layer is for easy access to symbols commonly used during development.
- To activate this layer, press and hold <kbd>z</kbd> from the base layer
- Use <kbd>u</kbd> / <kbd>i</kbd> / <kbd>o</kbd> / <kbd>p</kbd>
for <kbd>-</kbd> / <kbd>+</kbd> / <kbd>(</kbd> / <kbd>)</kbd>, respectively
- Use <kbd>h</kbd> / <kbd>j</kbd> / <kbd>k</kbd> / <kbd>l</kbd> / <kbd>;</kbd>
for <kbd>_</kbd> / <kbd>[</kbd> / <kbd>]</kbd> / <kbd>{</kbd> / <kbd>}</kbd>, respectively
- Use <kbd>n</kbd> / <kbd>m</kbd> / <kbd>,</kbd> / <kbd>.</kbd> / <kbd>/</kbd>
for <kbd>=</kbd> / <kbd>|</kbd> / <kbd><</kbd> / <kbd>></kbd> / <kbd>?</kbd>, respectively
```
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| | | | | | | | | | | | | | | | | | | | |
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,-----------. ,---------------.
| | | | | | | | | | | | | | | | | | | | | | | |
|-----------------------------------------------------------| |-----------| |---------------|
| | | | | | | | - | + | ( | ) | | | | | | | | | | | | |
|-----------------------------------------------------------| `-----------' |-----------| |
| | | | | | | _ | [ | ] | { | } | | | | | | | |
|-----------------------------------------------------------| ,---. |---------------|
| | | | | | | = | | | < | > | ? | | | | | | | | |
|-----------------------------------------------------------| ,-----------. |-----------| |
| | | | | | | | | | | | | | | | |
`-----------------------------------------------------------' `-----------' `---------------'
```
### Top Layer
#### 4. [Adjust](#adjust-layer)
This layer is applied at the top so that it will override all other layers and as a result it will always be possible to change which base layer is applied as a default. It is also used for media controls.
- To activate this layer, press and hold <kbd>RGui</kbd> from the base layer
- Switch to [chriskopher modified QWERTY layout](#chriskopher-qwerty-layout) with <kbd>c</kbd>
- Switch to [regular QWERTY layout](#regular-qwerty-layout) with <kbd>q</kbd>
- Use <kbd>n</kbd> / <kbd>m</kbd> / <kbd>,</kbd> / <kbd>.</kbd> / <kbd>/</kbd>
for <kbd>Play/Pause</kbd> / <kbd>Mute</kbd> / <kbd>Volume Down</kbd> / <kbd>Volume Up</kbd> / Toggle <kbd>[(S)uper(D)uper](#superduper-layer)</kbd> layer, respectively
- Use <kbd>Insert</kbd> / <kbd>Home</kbd> / <kbd>Page Up</kbd>
for <kbd>Play/Pause</kbd> / <kbd>Next Track</kbd> / <kbd>Volume Up</kbd>, respectively
- Use <kbd>Delete</kbd> / <kbd>End</kbd> / <kbd>Page Down</kbd>
for <kbd>Stop</kbd> / <kbd>Previous Track</kbd> / <kbd>Volume Down</kbd>, respectively
```
,---. ,---------------. ,---------------. ,---------------. ,-----------.
| | | | | | | | | | | | | | | | | | | | |
`---' `---------------' `---------------' `---------------' `-----------'
,-----------------------------------------------------------. ,--------------. ,---------------.
| | | | | | | | | | | | | | | |Play|Next|VolU| | | | | |
|-----------------------------------------------------------| |--------------| |---------------|
| |QWERTY| | | | | | | | | | | | | |Stop|Prev|VolD| | | | | |
|-----------------------------------------------------------| `--------------' |-----------| |
| | | | | | | | | | | | | | | | | | |
|-----------------------------------------------------------| ,---. |---------------|
| | | |CKO| | | |Play|Mute|VolD|VolU| SD| | | | | | | | |
|-----------------------------------------------------------| ,-----------. |-----------| |
| | | | | | | | | | | | | | | | |
`-----------------------------------------------------------' `-----------' `---------------'
```
## Build Instructions
To compile and flash the config onto the USB to USB converter:
```sh
cd /path/to/qmk_firmware
qmk config user.keyboard=converter/usb_usb/hasu
qmk config user.keymap=chriskopher
qmk compile
qmk flash
```
Alternatively:
```sh
cd /path/to/qmk_firmware
qmk compile -kb converter/usb_usb/hasu -km chriskopher
qmk flash -kb converter/usb_usb/hasu -km chriskopher
```
To modify the config:
```sh
cd /path/to/qmk_firmware/keyboards/converter/usb_usb/keymaps/chriskopher
```
and edit `keymap.c`, `config.h`, and `rules.mk`.
@@ -0,0 +1,24 @@
# Copyright 2020 Christopher Ko <[email protected]>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
COMMAND_ENABLE = no # Not being used, and can cause conflicts with space cadet shifting
SPACE_CADET_ENABLE = no # Not using special built in space cadet keys, using custom tap dance instead
EXTRAKEY_ENABLE = yes # Used for audio control and system control keys
COMBO_ENABLE = yes # Used to allow chording of keys to trigger an action
TAP_DANCE_ENABLE = yes # Used to allow multiple taps of a key to perform different actions
LINK_TIME_OPTIMIZATION_ENABLE = yes # Reduces the compiled firmware size
SRC += combo.c tap_dance.c
@@ -0,0 +1,36 @@
/* Copyright 2020 Christopher Ko <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
enum keyboard_layer {
// Base layers
_CKO,
_QWERTY,
// Intermediate layers
_SUPERDUPER,
_DEV,
// Adjust layer at the end
_ADJUST
};
enum tap_dance_key_event {
// Extended space cadet shift tap dance
ESPC_L,
ESPC_R,
// Semicolon-Colon tap dance
SCLN_CLN
};
@@ -0,0 +1,164 @@
/* Copyright 2020 Christopher Ko <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "shared_enum.h"
#include "quantum.h"
enum tap_dance_state {
SINGLE_HOLD = 1,
SINGLE_TAP,
DOUBLE_TAP,
TRIPLE_TAP,
};
// Record current state of a tap dance
static int espc_l_tap_state = 0;
static int espc_r_tap_state = 0;
static int scln_cln_tap_state = 0;
// Watch the state of the tap dance
int cur_dance(qk_tap_dance_state_t *state) {
if (state->pressed) {
return SINGLE_HOLD;
}
if (state->count == 1) {
return SINGLE_TAP;
}
if (state->count == 2) {
return DOUBLE_TAP;
}
if (state->count == 3) {
return TRIPLE_TAP;
}
return -1;
}
// Extended Space Cadet Shift - Left ==================================
void espc_l_finished(qk_tap_dance_state_t *state, void *user_data) {
espc_l_tap_state = cur_dance(state);
switch (espc_l_tap_state) {
case SINGLE_TAP: // (
register_code16(LSFT(KC_9));
break;
case DOUBLE_TAP: // {
unregister_code16(LSFT(KC_9));
register_code16(LSFT(KC_LBRC));
break;
case TRIPLE_TAP: // [
unregister_code16(LSFT(KC_LBRC));
register_code16(KC_LBRC);
break;
case SINGLE_HOLD: // LShift
register_code16(KC_LSFT);
break;
}
}
void espc_l_reset(qk_tap_dance_state_t *state, void *user_data) {
switch (espc_l_tap_state) {
case SINGLE_TAP: // (
unregister_code16(LSFT(KC_9));
break;
case DOUBLE_TAP: // {
unregister_code16(LSFT(KC_LBRC));
break;
case TRIPLE_TAP: // [
unregister_code16(KC_LBRC);
break;
case SINGLE_HOLD: // LShift
unregister_code16(KC_LSFT);
break;
}
espc_l_tap_state = 0;
}
// ====================================================================//
// Extended Space Cadet Shift - Right ==================================
void espc_r_finished(qk_tap_dance_state_t *state, void *user_data) {
espc_r_tap_state = cur_dance(state);
switch (espc_r_tap_state) {
case SINGLE_TAP: // )
register_code16(LSFT(KC_0));
break;
case DOUBLE_TAP: // }
unregister_code16(LSFT(KC_0));
register_code16(LSFT(KC_RBRC));
break;
case TRIPLE_TAP: // ]
unregister_code16(LSFT(KC_RBRC));
register_code16(KC_RBRC);
break;
case SINGLE_HOLD: // RShift
register_code16(KC_RSFT);
break;
}
}
void espc_r_reset(qk_tap_dance_state_t *state, void *user_data) {
switch (espc_r_tap_state) {
case SINGLE_TAP: // )
unregister_code16(LSFT(KC_0));
break;
case DOUBLE_TAP: // }
unregister_code16(LSFT(KC_RBRC));
break;
case TRIPLE_TAP: // ]
unregister_code16(KC_RBRC);
break;
case SINGLE_HOLD: // RShift
unregister_code16(KC_RSFT);
break;
}
espc_r_tap_state = 0;
}
// ====================================================================//
// Semicolon - Colon ==================================================
void scln_cln_finished(qk_tap_dance_state_t *state, void *user_data) {
scln_cln_tap_state = cur_dance(state);
switch (scln_cln_tap_state) {
case SINGLE_TAP: // ;
register_code16(KC_SCLN);
break;
default: // :
register_code16(LSFT(KC_SCLN));
break;
}
}
void scln_cln_reset(qk_tap_dance_state_t *state, void *user_data) {
switch (scln_cln_tap_state) {
case SINGLE_TAP: // ;
unregister_code16(KC_SCLN);
break;
default: // :
unregister_code16(LSFT(KC_SCLN));
break;
}
}
// ====================================================================//
// Associate tap dance with defined functionality
qk_tap_dance_action_t tap_dance_actions[] = {
// Extended space cadet shift left: Hold - Shift, One - (, Two - {, Three - [
[ESPC_L] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, espc_l_finished, espc_l_reset),
// Extended space cadet shift right: Hold - Shift, One - ), Two - }, Three - ]
[ESPC_R] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, espc_r_finished, espc_r_reset),
// Semicolon - Colon: One - ;, Two - :
[SCLN_CLN] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, scln_cln_finished, scln_cln_reset),
};
@@ -0,0 +1,6 @@
#pragma once
// Turn off RGB when computer goes to sleep
#ifdef RGBLIGHT_ENABLE
#define RGBLIGHT_SLEEP
#endif // RGBLIGHT_ENABLE
+90
View File
@@ -0,0 +1,90 @@
#include QMK_KEYBOARD_H
#define C_ESC CTL_T(KC_ESC)
// Layers
#define _BASE 0
#define _FN 1
#define _LIGHTS 2
/* Layout designed primarily around replicating the ergonomics of an HHKB, with
* a standard 60% spacebar row to be more compatible with conveniently
* available parts. The feature most shamelessly ripped off from the HHKB is
* the split right shift and backspace.
*
* This keymap is macOS-oriented by default, but pressing the AG_TOGG key on
* the _FN layer will swap alt and gui, making this layout also functional for
* Linux and PC.
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* _BASE layer
* Looks like this Arranged like this
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │ │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
* │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ { │ } │Bksp │ │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │esc/^ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
* │lshift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │rshift│fn │ │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
* │ctrl│alt │win │ │win │alt │menu│ctrl│ │40 │41 │43 │46 │4a │4b │4d │4e │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
[_BASE] = LAYOUT_60_ansi_split_bs_rshift(
// _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E
/*0_*/ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
/*1_*/ 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,
/*2_*/ C_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
/*3_*/ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
/*4_*/ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(_LIGHTS), KC_RCTL
),
/* _FN layer, where blank keys indicates transparency to the base layer
* Looks like this Arranged like this (as above)
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
* │slp│F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ins│del│ │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │0e │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
* │caps │bup│bdn│ │XXX│ │ │ │prt│scl│pus│ ↑ │ │ │ │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
* │ │vup│vdn│vmt│ │ │ │ │hme│pup│ ← │ → │ Return │ │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
* │lshift │ │ │ │ │ │ │ │end│pdn│ ↓ │rshift│ │ │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤
* │ctrl│lalt│lgui│ S P A C E │rgui│ralt│menu│ctrl│ │40 │41 │43 │46 │4a │4b │4d │4e │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
* XXX = RESET (dfu mode)
*/
[_FN] = LAYOUT_60_ansi_split_bs_rshift(
// _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E
/*0_*/ KC_SLEP, 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,
/*1_*/ KC_CAPS, KC_BRID, KC_BRIU, KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_NO, KC_NO,
/*2_*/ KC_NO, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_RGHT, KC_RETURN,
/*3_*/ KC_LSPO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_PGDN, KC_DOWN, KC_RSPC, KC_TRNS,
/*4_*/ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_APP, AG_TOGG
),
/* _LIGHTS LAYER (stolen shamelessly from 256k_HHKB
*
* ,---------------------------------------------------------------------------------------------------------------------+
* | RGB_TOGGLE | STATIC | BREATHE | RAINBOW | SWIRL | SNAKE | KNIGHTRIDER | XMAS | STATIC_GRAD | _ | _ | _ | _ | _ | _ |
* |----------------------------------------------------------------------------------------------------------------------+
* | RBG_MOD | HUE_INC | SATURATION_INC | BRIGHT_INC | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ |
* |----------------------------------------------------------------------------------------------------------------------+
* | CTRL | HUE_DEC | SATURATION_DEC | BRIGHT_DEC | _ | _ | _ | _ | _ | _ | _ | _ | _ |
* |----------------------------------------------------------------------------------------------------------------------+
* | Shift | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ | _ |
* |----------------------------------------------------------------------------------------------------------------------+
* | _ | _ | _ | _ | _ |
* `----------------------------------------------------------------------------------------------------------------------'
*/
[_LIGHTS] = LAYOUT_60_ansi_split_bs_rshift(
// _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E
/*0_*/ RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
/*1_*/ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
/*2_*/ KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
/*3_*/ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
/*4_*/ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
)
};
+10
View File
@@ -0,0 +1,10 @@
EXTRAKEY_ENABLE = yes
NKRO_ENABLE = yes
BACKLIGHT_ENABLE = yes
MOUSEKEY_ENABLE = no
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = yes
LEADER_ENABLE = no
MIDI_ENABLE = no
BLUETOOTH_ENABLE = no
+232 -202
View File
@@ -21,268 +21,298 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DVORAK] = LAYOUT_ergodox_wrapper( [DVORAK] = LAYOUT_ergodox_wrapper(
// left hand // left hand
KC_GRV, ___NUMBER_L___, DEF_OS_LAYER_SW, KC_GRV, ___NUMBER_L___, OSL(LAYERS),
KC_LOCK, ___DVORAK_L1___, KC_LBRC, KC_LOCK, ___DVORAK_L1___, LCTL(KC_C),
TAB_BKTAB, ___DVORAK_L2___, TAB_BKTAB, ___DVORAK_L2___,
KC_LSFT, ___DVORAK_L3___, KC_LPRN, KC_LSFT, ___DVORAK_L3___, TO(MDIA),
___ERGODOX_BOTTOM_LEFT___, ___BOTTOM_LEFT___,
___ERGODOX_THUMB_LEFT___, ___ERGODOX_THUMB_LEFT___,
// right hand // right hand
MDIA_SYMB, ___NUMBER_R___, KC_EQL, MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
KC_RBRC, ___DVORAK_R1___, KC_SLASH, LCTL(KC_V), ___DVORAK_R1___, KC_SLASH,
/* */ ___DVORAK_R2___, KC_MINUS, /* */ ___DVORAK_R2___, KC_MINUS,
KC_RPRN, ___DVORAK_R3___, KC_RSFT, TO(KEYPAD), ___DVORAK_R3___, KC_RSFT,
___ERGODOX_BOTTOM_RIGHT___, ___BOTTOM_RIGHT___,
___ERGODOX_THUMB_RIGHT___ ___ERGODOX_THUMB_RIGHT___
), ),
[XMONAD] = LAYOUT_ergodox_wrapper( [XMONAD] = LAYOUT_ergodox_wrapper(
// left hand // left hand
___, ___FUNC_L___, ___, ___, ___FUNC_L___, ___,
___, ___DVORAK_L1___, ___, ___, ___DVORAK_L1___, ___,
___, ___DVORAK_L2___, ___, ___DVORAK_L2___,
___, ___DVORAK_L3___, ___, ___, ___DVORAK_L3___, ___,
___ERGODOX_BOTTOM_LEFT___, ___BOTTOM_LEFT___,
___ERGODOX_THUMB_LEFT___, ___ERGODOX_THUMB_LEFT___,
// right hand // right hand
___, ___FUNC_R___, ___, ___, ___FUNC_R___, ___,
___, ___DVORAK_R1___, ___, ___, ___DVORAK_R1___, ___,
/**/ ___DVORAK_R2___, ___, /**/ ___DVORAK_R2___, ___,
___, ___DVORAK_R3___, ___, ___, ___DVORAK_R3___, ___,
___ERGODOX_BOTTOM_RIGHT___, ___BOTTOM_RIGHT___,
___ERGODOX_THUMB_RIGHT___ ___ERGODOX_THUMB_RIGHT___
), ),
[QWERTY] = LAYOUT_ergodox_wrapper( [QWERTY] = LAYOUT_ergodox_wrapper(
// left hand // left hand
KC_GRV, ___NUMBER_L___, DEF_OS_LAYER_SW, KC_GRV, ___NUMBER_L___, OSL(LAYERS),
KC_LOCK, ___QWERTY_L1___, KC_LBRC, KC_LOCK, ___QWERTY_L1___, LCTL(KC_C),
TAB_BKTAB, ___QWERTY_L2___, TAB_BKTAB, ___QWERTY_L2___,
KC_LSFT, ___QWERTY_L3___, KC_LPRN, KC_LSFT, ___QWERTY_L3___, TO(MDIA),
___ERGODOX_BOTTOM_LEFT___, ___BOTTOM_LEFT___,
___ERGODOX_THUMB_LEFT___, ___ERGODOX_THUMB_LEFT___,
// right hand // right hand
MDIA_SYMB, ___NUMBER_R___, KC_EQL, MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
KC_RBRC, ___QWERTY_R1___, KC_SLASH, LCTL(KC_V), ___QWERTY_R1___, KC_SLASH,
/* */ ___QWERTY_R2___, KC_MINUS, /* */ ___QWERTY_R2___, KC_MINUS,
KC_RPRN, ___QWERTY_R3___, KC_RSFT, TO(KEYPAD), ___QWERTY_R3___, KC_RSFT,
___ERGODOX_BOTTOM_RIGHT___, ___BOTTOM_RIGHT___,
___ERGODOX_THUMB_RIGHT___ ___ERGODOX_THUMB_RIGHT___
), ),
[COLEMAK] = LAYOUT_ergodox_wrapper( [COLEMAK] = LAYOUT_ergodox_wrapper(
// left hand // left hand
KC_GRV, ___NUMBER_L___, DEF_OS_LAYER_SW, KC_GRV, ___NUMBER_L___, OSL(LAYERS),
KC_LOCK, ___COLEMAK_L1___, KC_LBRC, KC_LOCK, ___COLEMAK_L1___, LCTL(KC_C),
TAB_BKTAB, ___COLEMAK_L2___, TAB_BKTAB, ___COLEMAK_L2___,
KC_LSFT, ___COLEMAK_L3___, KC_LPRN, KC_LSFT, ___COLEMAK_L3___, TO(MDIA),
___ERGODOX_BOTTOM_LEFT___, ___BOTTOM_LEFT___,
___ERGODOX_THUMB_LEFT___, ___ERGODOX_THUMB_LEFT___,
// right hand // right hand
MDIA_SYMB, ___NUMBER_R___, KC_EQL, MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
KC_RBRC, ___COLEMAK_R1___, KC_SLASH, LCTL(KC_V), ___COLEMAK_R1___, KC_SLASH,
/* */ ___COLEMAK_R2___, KC_MINUS, /* */ ___COLEMAK_R2___, KC_MINUS,
KC_RPRN, ___COLEMAK_R3___, KC_RSFT, TO(KEYPAD), ___COLEMAK_R3___, KC_RSFT,
___ERGODOX_BOTTOM_RIGHT___, ___BOTTOM_RIGHT___,
___ERGODOX_THUMB_RIGHT___ ___ERGODOX_THUMB_RIGHT___
), ),
[WORKMAN] = LAYOUT_ergodox_wrapper( [WORKMAN] = LAYOUT_ergodox_wrapper(
// left hand // left hand
KC_GRV, ___NUMBER_L___, DEF_OS_LAYER_SW, KC_GRV, ___NUMBER_L___, OSL(LAYERS),
KC_LOCK, ___WORKMAN_L1___, KC_LBRC, KC_LOCK, ___WORKMAN_L1___, LCTL(KC_C),
TAB_BKTAB, ___WORKMAN_L2___, TAB_BKTAB, ___WORKMAN_L2___,
KC_LSFT, ___WORKMAN_L3___, KC_LPRN, KC_LSFT, ___WORKMAN_L3___, TO(MDIA),
___ERGODOX_BOTTOM_LEFT___, ___BOTTOM_LEFT___,
___ERGODOX_THUMB_LEFT___, ___ERGODOX_THUMB_LEFT___,
// right hand // right hand
MDIA_SYMB, ___NUMBER_R___, KC_EQL, MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
KC_RBRC, ___WORKMAN_R1___, KC_SLASH, LCTL(KC_V), ___WORKMAN_R1___, KC_SLASH,
/* */ ___WORKMAN_R2___, KC_MINUS, /* */ ___WORKMAN_R2___, KC_MINUS,
KC_RPRN, ___WORKMAN_R3___, KC_RSFT, TO(KEYPAD), ___WORKMAN_R3___, KC_RSFT,
___ERGODOX_BOTTOM_RIGHT___, ___BOTTOM_RIGHT___,
___ERGODOX_THUMB_RIGHT___ ___ERGODOX_THUMB_RIGHT___
), ),
[NORMAN] = LAYOUT_ergodox_wrapper( [NORMAN] = LAYOUT_ergodox_wrapper(
// left hand // left hand
KC_GRV, ___NUMBER_L___, DEF_OS_LAYER_SW, KC_GRV, ___NUMBER_L___, OSL(LAYERS),
KC_LOCK, ___NORMAN_L1___, KC_LBRC, KC_LOCK, ___NORMAN_L1___, LCTL(KC_C),
TAB_BKTAB, ___NORMAN_L2___, TAB_BKTAB, ___NORMAN_L2___,
KC_LSFT, ___NORMAN_L3___, KC_LPRN, KC_LSFT, ___NORMAN_L3___, TO(MDIA),
___ERGODOX_BOTTOM_LEFT___, ___BOTTOM_LEFT___,
___ERGODOX_THUMB_LEFT___, ___ERGODOX_THUMB_LEFT___,
// right hand // right hand
MDIA_SYMB, ___NUMBER_R___, KC_EQL, MDIA_SYMB_KP_LAYERS, ___NUMBER_R___, KC_EQL,
KC_RBRC, ___NORMAN_R1___, KC_SLASH, LCTL(KC_V), ___NORMAN_R1___, KC_SLASH,
/* */ ___NORMAN_R2___, KC_MINUS, /* */ ___NORMAN_R2___, KC_MINUS,
KC_RPRN, ___NORMAN_R3___, KC_RSFT, TO(KEYPAD), ___NORMAN_R3___, KC_RSFT,
___ERGODOX_BOTTOM_RIGHT___, ___BOTTOM_RIGHT___,
___ERGODOX_THUMB_RIGHT___ ___ERGODOX_THUMB_RIGHT___
), ),
[DVORAK_ON_BEPO] = LAYOUT_ergodox_wrapper( [DVORAK_ON_BEPO] = LAYOUT_ergodox_wrapper(
// left hand // left hand
DB_GRV, ___NUMBER_BEPO_L___, DEF_OS_LAYER_SW, DB_GRV, ___NUMBER_BEPO_L___, OSL(LAYERS),
KC_LOCK, ___DVORAK_FR_L1___, DB_LBRC, KC_LOCK, ___DVORAK_FR_L1___, DB_LBRC,
TAB_BKTAB, ___DVORAK_FR_L2___, TAB_BKTAB, ___DVORAK_FR_L2___,
KC_LSFT, ___DVORAK_FR_L3___, DB_LPRN, KC_LSFT, ___DVORAK_FR_L3___, DB_LPRN,
___ERGODOX_BOTTOM_LEFT___, ___BOTTOM_LEFT_FR___,
___ERGODOX_THUMB_LEFT___, ___ERGODOX_THUMB_LEFT_BP___,
// right hand // right hand
MDIA_SYMB, ___NUMBER_BEPO_R___, DB_EQL, MDIA_SYMB_KP_LAYERS, ___NUMBER_BEPO_R___, DB_EQL,
DB_RBRC, ___DVORAK_FR_R1___, DB_SLASH, DB_RBRC, ___DVORAK_FR_R1___, DB_SLASH,
/* */ ___DVORAK_FR_R2___, DB_MINUS, /* */ ___DVORAK_FR_R2___, DB_MINUS,
DB_RPRN, ___DVORAK_FR_R3___, KC_RSFT, DB_RPRN, ___DVORAK_FR_R3___, KC_RSFT,
___ERGODOX_BOTTOM_RIGHT_FR___, ___BOTTOM_RIGHT_FR___,
___ERGODOX_THUMB_RIGHT___ ___ERGODOX_THUMB_RIGHT_BP___
), ),
[XMONAD_FR] = LAYOUT_ergodox_wrapper(
// left hand
___, ___FUNC_L___, ___,
___, ___DVORAK_FR_L1___, ___,
___, ___DVORAK_FR_L2___,
___, ___DVORAK_FR_L3___, ___,
___ERGODOX_BOTTOM_LEFT___,
___ERGODOX_THUMB_LEFT___,
// right hand
___, ___FUNC_R___, ___,
___, ___DVORAK_FR_R1___, ___,
/**/ ___DVORAK_FR_R2___, ___,
___, ___DVORAK_FR_R3___, ___,
___ERGODOX_BOTTOM_RIGHT_FR___,
___ERGODOX_THUMB_RIGHT___
),
[BEPO] = LAYOUT_ergodox_wrapper( [BEPO] = LAYOUT_ergodox_wrapper(
// Left hand // Left hand
BP_DLR, ___SYMBOL_BEPO_L___, DEF_OS_LAYER_SW, BP_DLR, ___SYMBOL_BEPO_L___, OSL(LAYERS),
KC_LOCK, ___BEPO_FR_L1___, DB_LBRC, KC_LOCK, ___BEPO_FR_L1___, DB_LBRC,
TAB_BKTAB, ___BEPO_FR_L2___, TAB_BKTAB, ___BEPO_FR_L2___,
BP_SFT_T_ECRC, ___BEPO_FR_L3___, DB_RBRC, BP_SFT_T_ECRC, ___BEPO_FR_L3___, DB_RBRC,
___ERGODOX_BOTTOM_LEFT___, ___5___,
___ERGODOX_THUMB_LEFT___, ___6___,
// Right hand // Right hand
MDIA_SYMB, ___SYMBOL_BEPO_R___, BP_EQL, MDIA_SYMB_KP_LAYERS, ___SYMBOL_BEPO_R___, BP_EQL,
BP_DCRC, ___BEPO_FR_R1___, BP_W, BP_DCRC, ___BEPO_FR_R1___, BP_W,
/* */ ___BEPO_FR_R2___, BP_CCED, /* */ ___BEPO_FR_R2___, BP_CCED,
BP_C, ___BEPO_FR_R3___, KC_RSFT, BP_C, ___BEPO_FR_R3___, KC_RSFT,
___ERGODOX_BOTTOM_RIGHT___, ___5___,
___ERGODOX_THUMB_RIGHT___ ___6___
), ),
[XMONAD_FR] = LAYOUT_ergodox_wrapper(
// left hand
___, ___FUNC_L___, ___,
___, ___DVORAK_FR_L1___, ___,
___, ___DVORAK_FR_L2___,
___, ___DVORAK_FR_L3___, ___,
___BOTTOM_LEFT_FR___,
___ERGODOX_THUMB_LEFT_BP___,
// right hand
___, ___FUNC_R___, ___,
___, ___DVORAK_FR_R1___, ___,
/**/ ___DVORAK_FR_R2___, ___,
___, ___DVORAK_FR_R3___, ___,
___BOTTOM_RIGHT_FR___,
___ERGODOX_THUMB_RIGHT_BP___
),
// SYMBOLS // SYMBOLS
[SYMB] = LAYOUT_ergodox_wrapper( [SYMB] = LAYOUT_ergodox_wrapper(
// left hand // left hand
___, ___FUNC_L___, ___, ___FUNC_1_6___, ___,
___, ___SYMBOLS_1___, ___, ___SYMBOLS6_1___, ___,
___, ___SYMBOLS_2___, ___SYMBOLS6_2___,
___, ___SYMBOLS_3___, ___, ___SYMBOLS6_3___, ___,
___SYMBOLS5_4___,
___ERGODOX_TRANS_BOTTOM___, ___6___,
___ERGODOX_TRANS_THUMBS___,
// right hand // right hand
___, ___FUNC_R___, KC_F11, ___, ___FUNC_7_12___,
___, KC_UP, ___KEYPAD_1___, KC_F12, ___, ___SYMPAD_1___,
/**/ KC_DOWN, ___KEYPAD_2___, KC_TRNS, /**/ ___SYMPAD_2___,
___, KC_AMPR, ___KEYPAD_3___, KC_PENT, ___, ___SYMPAD_3___,
/* */ ___KEYPAD_4___, ___, /**/ ___5_SYMPAD_4___,
___6___
___ERGODOX_TRANS_THUMBS___ ),
),
[SYMB_ON_BEPO] = LAYOUT_ergodox_wrapper( [SYMB_ON_BEPO] = LAYOUT_ergodox_wrapper(
// left hand // left hand
___, ___FUNC_L___, ___, ___FUNC_1_6___, ___,
___, ___SYMBOLS_1_BP___, ___, ___SYMBOLS6_1_BP___, ___,
___, ___SYMBOLS_2_BP___, ___SYMBOLS6_2_BP___,
___, ___SYMBOLS_3_BP___, ___, ___SYMBOLS6_3_BP___, ___,
___SYMBOLS5_4_BP___,
___ERGODOX_TRANS_BOTTOM___, ___6___,
___ERGODOX_TRANS_THUMBS___,
// right hand // right hand
___, ___FUNC_R___, KC_F11, ___, ___FUNC_7_12___,
___, KC_UP, ___KEYPAD_1_BP___, KC_F12, ___, ___SYMPAD_1_BP___,
/**/ KC_DOWN, ___KEYPAD_2_BP___, KC_TRNS, /**/ ___SYMPAD_2_BP___,
___, KC_AMPR, ___KEYPAD_3_BP___, KC_PENT, ___, ___SYMPAD_3_BP___,
/* */ ___KEYPAD_4_BP___, ___, /**/ ___5_SYMPAD_4_BP___,
___6___
),
___ERGODOX_TRANS_THUMBS___ [KEYPAD] = LAYOUT_ergodox_wrapper(
), ___FUNC_1_6___, ___,
___2___, ___FUNCPAD_T___, ___, ___,
___2___, ___FUNCPAD_1___, ___,
___2___, ___FUNCPAD_2___, ___, ___,
___2___, ___FUNCPAD_3___,
___6___,
// right hand
___, ___FUNC_7_12___,
___, ___, ___KEYPAD_1___, ___,
/**/ ___, ___KEYPAD_2___, ___,
___, ___, ___KEYPAD_3___, ___,
/* */ ___KEYPAD_4___, ___,
___6___
),
[KEYPAD_ON_BEPO] = LAYOUT_ergodox_wrapper(
___FUNC_1_6___, ___,
___2___, ___FUNCPAD_T___, ___, ___,
___2___, ___FUNCPAD_1___, ___,
___2___, ___FUNCPAD_2___, ___, ___,
___2___, ___FUNCPAD_3___,
___6___,
// right hand
___, ___FUNC_7_12___,
___, ___, ___KEYPAD_1_BP___, ___,
/**/ ___, ___KEYPAD_2_BP___, ___,
___, ___, ___KEYPAD_3_BP___, ___,
/* */ ___KEYPAD_4_BP___, ___,
___6___
),
// MEDIA AND MOUSE // MEDIA AND MOUSE
[MDIA] = LAYOUT_ergodox_wrapper( [MDIA] = LAYOUT_ergodox_wrapper(
// left hand // left hand
___, ___FUNC_L___, ___, ___FUNC_1_6___, ___,
___MOUSE_BTNS_L___, ___, ___, ___MOUSE_BTNS_L___, ___, ___,
___, ___MOUSE_LDUR___, ___, ___, ___MOUSE_LDUR___, ___,
___, ___MWHEEL_LDUR___, XXX, ___, ___, ___MWHEEL_LDUR___, XXX, ___,
___, ___, ___MOUSE_ACCL_012___, ___, ___, ___MOUSE_ACCL_012___,
___ERGODOX_TRANS_THUMBS___, ___6___,
// right hand // right hand
___, ___FUNC_R___, KC_F11, ___, ___FUNC_7_12___,
KC_VOLU, ___, ___MUTE_PLAY_STOP___, ___, KC_F12, ___, KC_VOLU, ___MUTE_PRV_PLAY_NXT_STOP___,
/* */ KC_PGUP, ___VI_ARROWS___, ___, /**/ KC_VOLD, ___VI_ARROWS___, ___,
KC_VOLD, KC_PGDN, ___MOUSE_BTNS_R___, ___, ___, ___MOUSE_BTNS_R___,
___ERGODOX_TRANS_BOTTOM___, /* */ KC_PGDN, KC_PGUP, ___3___,
___ERGODOX_TRANS_THUMBS___ ___6___
), ),
[LAYERS] = LAYOUT_ergodox_wrapper( [LAYERS] = LAYOUT_ergodox_wrapper(
// left hand // left hand
___, ___FUNC_L___, ___, ___FUNC_1_6___, ___,
XXX, XXX, XXX, ___LAYERS_L1___, XXX, XXX, XXX, XXX, XXX, ___2_LAYERS_B1___, XXX, ___,
XXX, XXX, XXX, ___LAYERS_L2___, XXX, XXX, XXX, XXX, ___2_LAYERS_B2___, XXX,
XXX, XXX, ___LAYERS_L3___, XXX, XXX, XXX, XXX, ___3_LAYERS_B3___, XXX, ___,
___, ___, ___LAYERS_L4___, ___5___,
___ERGODOX_TRANS_THUMBS___, ___6___,
// right hand // right hand
___, ___FUNC_R___, KC_F11, ___, ___FUNC_7_12___,
KC_VOLU, ___, ___MUTE_PLAY_STOP___, ___, KC_F12, ___, XXX, ___3_LAYERS_T_BP___, ___2___,
/* */ KC_PGUP, ___VI_ARROWS___, ___, /**/ XXX, ___3_LAYERS_T___, ___2___,
KC_VOLD, KC_PGDN, ___MOUSE_BTNS_R___, ___, XXX, ___3_LAYERS_T_CTL___, ___2___,
___ERGODOX_TRANS_BOTTOM___, ___5___,
___ERGODOX_TRANS_THUMBS___ ___6___
), ),
}; };
+48
View File
@@ -0,0 +1,48 @@
/* Copyright 2020 /u/TheFourthCow
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0xC4B5
#define DEVICE_VER 0x0001
#define MANUFACTURER TheFourthCow
#define PRODUCT Funky40
#define DESCRIPTION Ortholinear 40 percent keyboard
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 12
/* key matrix pins */
#define MATRIX_ROW_PINS { D4, C6, B4, B5 }
#define MATRIX_COL_PINS { D3, F5, F4, F7, B1, B6, B2, B3, D2, F6, E6, D7 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
+1
View File
@@ -0,0 +1 @@
#include "funky40.h"
+15
View File
@@ -0,0 +1,15 @@
#pragma once
#include "quantum.h"
#define LAYOUT( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
K300, K301, K302, K303, K304, K305, K306, K307, K308, K309 \
) { \
{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \
{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, KC_NO, KC_NO } \
}
+12
View File
@@ -0,0 +1,12 @@
{
"keyboard_name": "funky40",
"url": "",
"maintainer": "TheFourthCow",
"width": 12,
"height": 4,
"layouts": {
"LAYOUT": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back<br>Space", "x":11, "y":0}, {"label":"Tab", "x":0, "y":1}, {"label":"A", "x":1, "y":1}, {"label":"S", "x":2, "y":1}, {"label":"D", "x":3, "y":1}, {"label":"F", "x":4, "y":1}, {"label":"G", "x":5, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":":", "x":10, "y":1}, {"label":"\"", "x":11, "y":1}, {"label":"Shift", "x":0, "y":2}, {"label":"Z", "x":1, "y":2}, {"label":"X", "x":2, "y":2}, {"label":"C", "x":3, "y":2}, {"label":"V", "x":4, "y":2}, {"label":"B", "x":5, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":"<", "x":8, "y":2}, {"label":">", "x":9, "y":2}, {"label":"?", "x":10, "y":2}, {"label":"Shift", "x":11, "y":2}, {"label":"Ctrl", "x":0, "y":3}, {"label":"Super", "x":1, "y":3}, {"label":"Alt", "x":2, "y":3}, {"x":3, "y":3, "w":2}, {"label":"Del", "x":5, "y":3}, {"x":6, "y":3, "w":2}, {"label":"Left", "x":8, "y":3}, {"label":"Up", "x":9, "y":3}, {"label":"Down", "x":10, "y":3}, {"label":"Right", "x":11, "y":3}]
}
}
}
@@ -0,0 +1,32 @@
/* Copyright 2020 /u/TheFourthCow
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_DOT, KC_SLSH, KC_SFTENT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, LT(1, KC_DEL), KC_SPC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT),
LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_UNDS, KC_PLUS,
KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_LBRC, KC_RBRC,
RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLU, KC_VOLD, KC_MNXT),
};
@@ -0,0 +1,6 @@
# Default Funky40 Layout
![](https://i.imgur.com/jxoCDqx.png)
![](https://i.imgur.com/3bBL52A.png)
This is the default Funky40 layout, it is currently a work in progress. The right shift key is setup to be enter when tapped and right shift when held. The centered delete key is delete when tapped but a momentary layer modifier when held, use this to access the number and function keys and more as the map progresses.
+15
View File
@@ -0,0 +1,15 @@
# Funky40
<!-- ![Funky40](imgurlinkgoesherewheninitialbuildisfinished) -->
A compact 40% (12x4) ortholinear keyboard kit made and sold by /u/TheFourthCow
* Keyboard Maintainer: [TheFourthCow](https://github.com/TheFourthCow)
* Hardware Supported: Funky40 with Pro Micro or Elite C
* Hardware Availability: TBD - Currently from /u/TheFourthCow - [pm me on reddit](https://www.reddit.com/user/TheFourthCow/)!
Make example for this keyboard (after setting up your build environment):
make funky40: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).
+32
View File
@@ -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 = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration - this may disable space cadet right shift/enter
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+34
View File
@@ -0,0 +1,34 @@
# Aplx2
![Front](https://i.imgur.com/cN4WfaQl.jpg)
A simple 2% keyboard for osu!. Designed to be assembled as a sandwich with a Pro Micro, using M3 x 16mm screws, your choice of MX- or Alps-compatible switches, and 1N4148 diodes.
**Layout:**
The default layout is: Z , X .
Used pins can be found in `config.h`. All ProMicro pins can be found [here](https://cdn.sparkfun.com/datasheets/Dev/Arduino/Boards/ProMicro16MHzv1.pdf).
* Keyboard Maintainer: [Aplyard](https://github.com/Aplyard)
* Hardware Supported: Pro Micro (ATmega32U4)
* Hardware Availability: [GitHub](https://github.com/Aplyard/Aplx2), [Thingiverse](https://www.thingiverse.com/thing:4294608)
Make example for this keyboard (after setting up your build environment):
make handwired/aplx2: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).
---
**Designed in:**
Fusion360
[Keyboard Plate & Case Builder](http://builder.swillkb.com/)
**Usefull Links:**
[Qmk Online Configurator](https://config.qmk.fm/#)
**Alternatives of qmk that worked for me:**
[Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/)
[Firmware Builder](https://kbfirmware.com/)
---
+19
View File
@@ -0,0 +1,19 @@
/*
Copyright 2020 April Aplyard <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "aplx2.h"
+25
View File
@@ -0,0 +1,25 @@
/*
Copyright 2020 April Aplyard <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
#define LAYOUT( \
K00, K01 \
) { \
{ K00 , K01 } \
}
+41
View File
@@ -0,0 +1,41 @@
/*
Copyright 2020 April Aplyard <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xE0E0
#define PRODUCT_ID 0x0030
#define DEVICE_VER 0x0001
#define MANUFACTURER Aplyard
#define PRODUCT Aplx2
#define DESCRIPTION Aplx2% osu!
/* key matrix size */
#define MATRIX_ROWS 1
#define MATRIX_COLS 2
/* pin-out */
#define MATRIX_ROW_PINS { D1 }
#define MATRIX_COL_PINS { B5, D3 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
@@ -0,0 +1,16 @@
#include QMK_KEYBOARD_H
#define _MAIN 0
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap __MAIN: Default Layer
* ,---------------.
* | |-----|-----| |
* | | Ζ | Χ | |
* | |-----|-----| |
* '---------------'
*/
[_MAIN] = LAYOUT(
KC_Z, KC_X
),
};
+33
View File
@@ -0,0 +1,33 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = caterina
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
UNICODE_ENABLE = no # Unicode
@@ -0,0 +1,15 @@
#pragma once
// #define USE_I2C
/* Select hand configuration */
// #define MASTER_RIGHT
// #define EE_HANDS
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
@@ -0,0 +1,193 @@
/*
Copyright 2018 Eric Gebhart <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "keymap_bepo.h"
#include "ericgebhart.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DVORAK] = LAYOUT_ortho_5x14_wrapper(
KC_GRV, ___12_DVORAK_1___, KC_SLASH,
TAB_BKTAB, ___12_DVORAK_2___, KC_MINUS,
KC_LSFT, ___12_DVORAK_3___, KC_RSFT,
___ORTHO_14_BOTTOM___,
___ORTHO_14_THUMBS_BOTTOM___
),
[QWERTY] = LAYOUT_ortho_5x14_wrapper(
KC_GRV, ___12_QWERTY_1___, KC_SLASH,
TAB_BKTAB, ___12_QWERTY_2___, KC_MINUS,
KC_LSFT, ___12_QWERTY_3___, KC_RSFT,
___ORTHO_14_BOTTOM___,
___ORTHO_14_THUMBS_BOTTOM___
),
[COLEMAK] = LAYOUT_ortho_5x14_wrapper(
KC_GRV, ___12_COLEMAK_1___, KC_SLASH,
TAB_BKTAB, ___12_COLEMAK_2___, KC_MINUS,
KC_LSFT, ___12_COLEMAK_3___, KC_RSFT,
___ORTHO_14_BOTTOM___,
___ORTHO_14_THUMBS_BOTTOM___
),
[WORKMAN] = LAYOUT_ortho_5x14_wrapper(
KC_GRV, ___12_WORKMAN_1___, KC_SLASH,
TAB_BKTAB, ___12_WORKMAN_2___, KC_MINUS,
KC_LSFT, ___12_WORKMAN_3___, KC_RSFT,
___ORTHO_14_BOTTOM___,
___ORTHO_14_THUMBS_BOTTOM___
),
[NORMAN] = LAYOUT_ortho_5x14_wrapper(
KC_GRV, ___12_NORMAN_1___, KC_SLASH,
TAB_BKTAB, ___12_NORMAN_2___, KC_MINUS,
KC_LSFT, ___12_NORMAN_3___, KC_RSFT,
___ORTHO_14_BOTTOM___,
___ORTHO_14_THUMBS_BOTTOM___
),
[DVORAK_ON_BEPO] = LAYOUT_ortho_5x14_wrapper(
KC_GRV, ___12_DVORAK_B_1___, KC_SLASH,
TAB_BKTAB, ___12_DVORAK_B_2___, KC_MINUS,
KC_LSFT, ___12_DVORAK_B_3___, KC_RSFT,
___ORTHO_14_BOTTOM_FR___,
___ORTHO_14_THUMBS_BOTTOM___
),
[BEPO] = LAYOUT_ortho_5x14_wrapper(
KC_GRV, ___12_DVORAK_B_1___, KC_SLASH,
TAB_BKTAB, ___12_DVORAK_B_2___, KC_MINUS,
KC_LSFT, ___12_DVORAK_B_3___, KC_RSFT,
___ORTHO_14_BOTTOM_BP___,
___ORTHO_14_THUMBS_BOTTOM___
),
[XMONAD] = LAYOUT_ortho_5x14_wrapper(
___, ___12_DVORAK_1___, ___,
___, ___12_DVORAK_2___, ___,
___, ___12_DVORAK_3___, ___,
___14___,
___14___
),
[XMONAD_FR] = LAYOUT_ortho_5x14_wrapper(
___, ___12_DVORAK_B_1___, ___,
___, ___12_DVORAK_B_2___, ___,
___, ___12_DVORAK_B_3___, ___,
___14___,
___14___
),
// SYMBOLS
[SYMB] = LAYOUT_ortho_5x14_wrapper(
___14_SYMB_1___,
___14_SYMB_2___,
___14_SYMB_3___,
___14_SYMB_4___,
___14___
),
[KEYPAD] = LAYOUT_ortho_5x14_wrapper(
___14_KP_1___,
___14_KP_2___,
___14_KP_3___,
___14_KP_4___,
___14___
),
[KEYPAD_ON_BEPO] = LAYOUT_ortho_5x14_wrapper(
___14_KP_B_1___,
___14_KP_B_2___,
___14_KP_B_3___,
___14_KP_B_4___,
___14___
),
[SYMB_ON_BEPO] = LAYOUT_ortho_5x14_wrapper(
___14_SYMB_B_1___,
___14_SYMB_B_2___,
___14_SYMB_B_3___,
___14_SYMB_B_4___,
___14___
),
// MEDIA AND MOUSE
[MDIA] = LAYOUT_ortho_5x14_wrapper(
___14_MDIA_1___,
___14_MDIA_2___,
___14_MDIA_3___,
___14_MDIA_4___,
___14___
),
[LAYERS] = LAYOUT_ortho_5x14_wrapper(
___14_LAYERS_1___,
___14_LAYERS_2___,
___14_LAYERS_3___,
___14___,
___14___
),
[_RGB] = LAYOUT_ortho_5x14_wrapper(
___14_RGB_1___,
___14_RGB_2___,
___14_RGB_3___,
___14___,
___14___
),
};
/* 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; */
/* break; */
/* case LOWER: */
/* if (record->event.pressed) { */
/* layer_on(_LOWER); */
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
/* } else { */
/* layer_off(_LOWER); */
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
/* } */
/* return false; */
/* break; */
/* case RAISE: */
/* if (record->event.pressed) { */
/* layer_on(_RAISE); */
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
/* } else { */
/* layer_off(_RAISE); */
/* update_tri_layer(_LOWER, _RAISE, _ADJUST); */
/* } */
/* return false; */
/* break; */
/* case ADJUST: */
/* if (record->event.pressed) { */
/* layer_on(_ADJUST); */
/* } else { */
/* layer_off(_ADJUST); */
/* } */
/* return false; */
/* break; */
/* } */
/* return true; */
/* } */
+59
View File
@@ -0,0 +1,59 @@
/*
Copyright 2020 latincompass
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.*/
#pragma once
#include "config_common.h"
#define VENDOR_ID 0x6C63 // "lc" = latincompass
#define PRODUCT_ID 0x6C70 // "lp" = latinpad
#define DEVICE_VER 0x0001
#define MANUFACTURER latincompass
#define PRODUCT latinpad
#define DESCRIPTION dual rotary encoder macro pad
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 4
#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1 }
#define MATRIX_COL_PINS { D4, C6, D7, E6 }
#define UNUSED_PINS
#define DIODE_DIRECTION ROW2COL
#define SSD1306OLED
#define RGB_DI_PIN D3
#define RGBLED_NUM 18
#define DRIVER_LED_TOTAL RGBLED_NUM
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
#define OLED_FONT_H "./lib/glcdfont.c"
#define ENCODERS_PAD_A { B4, B5 }
#define ENCODERS_PAD_B { B2, B6 }
#define ENCODER_RESOLUTION 4
+34
View File
@@ -0,0 +1,34 @@
{
"keyboard_name": "latinpad",
"url": "https://github.com/latincompass/2-RotaryEncoder-pad",
"maintainer": "latincompass",
"width": 4,
"height": 5,
"layouts": {
"LAYOUT": {
"layout": [
{"label":"Num Lock", "x":0, "y":0, "w":0.8, "h":0.8},
{"label":"/", "x":0.8, "y":0, "w":0.8, "h":0.8},
{"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":"Enter", "x":3, "y":3},
{"label":"0", "x":0, "y":4},
{"label":"0", "x":1, "y":4},
{"label":".", "x":2, "y":4},
{"label":"Enter", "x":3, "y":4}
]
}
}
}
@@ -0,0 +1,70 @@
/* Keymap _0: (Base Layer) Default Layer
* .-----------.
* |PGUP | PGDN|
* |-----------------------.
* | 7 | 8 | 9 | MO1 |
* |-----|-----|-----|-----|
* | 4 | 5 | 6 | + |
* |-----|-----|-----|-----|
* | 1 | 2 | 3 | — |
* |-----|-----|-----|-----|
* | 0 | . | DEL |Enter|
* .-----------------------.
*/
/* Keymap _1: (Second Layer) second Layer
* .---------------.
* |NUMLOCK|Calc. |
* |--------------------------------.
* |RGB_TOG|RGB_MOD|RGB_M_K|RGB_M_X |
* |-------|-------|-------|--------|
* |RGB_SAI|RGB_SAD|RGB_HUI|RGB_HUD |
* |-------|-------|-------|--------|
* |RGB_VAI|RGB_VAD|RGB_SPI|RGB_SPD |
* |-------|-------|-------|--------|
* |RGB_SPI|RGB_SPD|RGB_TOG|KC_TRNS |
* .--------------------------------.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_PGUP, KC_PGDOWN,
KC_KP_7, KC_KP_8, KC_KP_9, MO(1),
KC_P4, KC_P5, KC_P6, KC_KP_PLUS,
KC_P1, KC_P2, KC_P3, KC_KP_MINUS,
KC_P0, KC_PDOT,KC_DELETE, KC_KP_ENTER),
[1] = LAYOUT(
KC_NUMLOCK, KC_CALCULATOR,
RGB_TOG, RGB_MOD, RGB_M_K, RGB_M_X,
RGB_SAI, RGB_SAD, RGB_HUI, RGB_HUD,
RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD,
RGB_SPI, RGB_SPD, RGB_TOG, KC_TRNS),
};
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0};
oled_write_P(qmk_logo, false);
}
#ifdef OLED_DRIVER_ENABLE
void oled_task_user(void) { render_logo(); }
#endif
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
if (clockwise) {
tap_code(KC_AUDIO_VOL_UP);
} else {
tap_code(KC_AUDIO_VOL_DOWN);
}
} else if (index == 1) {
if (clockwise) {
tap_code(KC_BRIGHTNESS_UP);
} else {
tap_code(KC_BRIGHTNESS_DOWN);
}
}
}
void matrix_init_user(void) { render_logo(); }
+68
View File
@@ -0,0 +1,68 @@
/* Keymap _0: (Base Layer) Default Layer
* .-----------.
* |PGUP | PGDN|
* |-----------------------.
* | 7 | 8 | 9 | MO1 |
* |-----|-----|-----|-----|
* | 4 | 5 | 6 | + |
* |-----|-----|-----|-----|
* | 1 | 2 | 3 | — |
* |-----|-----|-----|-----|
* | 0 | . | DEL |Enter|
* .-----------------------.
*/
/* Keymap _1: (Second Layer) second Layer
* .---------------.
* |NUMLOCK|Calc. |
* |--------------------------------.
* |RGB_TOG|RGB_MOD|RGB_M_K|RGB_M_X |
* |-------|-------|-------|--------|
* |RGB_SAI|RGB_SAD|RGB_HUI|RGB_HUD |
* |-------|-------|-------|--------|
* |RGB_VAI|RGB_VAD|RGB_SPI|RGB_SPD |
* |-------|-------|-------|--------|
* |RGB_SPI|RGB_SPD|RGB_TOG|KC_TRNS |
* .--------------------------------.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_PGUP, KC_PGDOWN,
KC_KP_7, KC_KP_8, KC_KP_9, MO(1),
KC_P4, KC_P5, KC_P6, KC_KP_PLUS,
KC_P1, KC_P2, KC_P3, KC_KP_MINUS,
KC_P0, KC_PDOT,KC_DELETE, KC_KP_ENTER),
[1] = LAYOUT(
KC_NUMLOCK, KC_CALCULATOR,
RGB_TOG, RGB_MOD, RGB_M_K, RGB_M_X,
RGB_SAI, RGB_SAD, RGB_HUI, RGB_HUD,
RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD,
RGB_SPI, RGB_SPD, RGB_TOG, KC_TRNS),
};
static void render_logo(void) {
static const char PROGMEM qmk_logo[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0};
oled_write_P(qmk_logo, false);
}
#ifdef OLED_DRIVER_ENABLE
void oled_task_user(void) { render_logo(); }
#endif
void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) {
if (clockwise) {
tap_code(KC_AUDIO_VOL_UP);
} else {
tap_code(KC_AUDIO_VOL_DOWN);
}
} else if (index == 1) {
if (clockwise) {
tap_code(KC_BRIGHTNESS_UP);
} else {
tap_code(KC_BRIGHTNESS_DOWN);
}
}
}
void matrix_init_user(void) { render_logo(); }
+1
View File
@@ -0,0 +1 @@
VIA_ENABLE = yes
+40
View File
@@ -0,0 +1,40 @@
/* Copyright 2020 latincompass
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "latinpad.h"
#ifdef RGB_MATRIX_ENABLE
led_config_t g_led_config = {
{
{ 1, 2, 3, 4 },
{ 5, 6, 7, 8 },
{ 9, 10, 11, 12 },
{ 13, 14, 15, 16 },
{ 17, 18, NO_LED, NO_LED }
},{
{ 74, 21 }, { 37, 21 }, { 24, 21 }, { 18, 21 },
{ 74, 10 }, { 37, 10 }, { 28, 10 }, { 18, 10 },
{ 74, 7 }, { 37, 7 }, { 20, 7 }, { 18, 7 },
{ 74, 5 }, { 37, 5 }, { 22, 5 }, { 18, 5 },
{ 74, 5 }, { 37, 5 },
},{
1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1,
1, 1
}
};
#endif
+42
View File
@@ -0,0 +1,42 @@
/* Copyright 2020 latincompass
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
/* This 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( \
K40, K41, \
K00, K01, K02, K03, \
K10, K11, K12, K13, \
K20, K21, K22, K23, \
K30, K31, K32, K33 \
) \
{ \
{ K00, K01, K02, K03 }, \
{ K10, K11, K12, K13 }, \
{ K20, K21, K22, K23 }, \
{ K30, K31, K32, K33 }, \
{ K40, K41, KC_NO, KC_NO } \
}
+228
View File
@@ -0,0 +1,228 @@
#include "progmem.h"
// Standard ASCII 5x7 font
const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0xF8, 0x58, 0x58, 0x5E,
0xDA, 0x5A, 0x5B, 0x59, 0xDB, 0x5A,
0x5B, 0x58, 0xD8, 0x58, 0x58, 0x58,
0xD8, 0x58, 0x58, 0x58, 0xD8, 0x58,
0x58, 0x58, 0xD8, 0x58, 0x58, 0x58,
0xD8, 0x58, 0x58, 0x78, 0xF8, 0xF8,
0xF8, 0x78, 0x78, 0x78, 0xF8, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x44, 0x28, 0xFF, 0x5A, 0x24,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0x44, 0x55, 0x44,
0xFF, 0x44, 0x55, 0x44, 0xFF, 0x44,
0x55, 0x44, 0xFF, 0x44, 0x55, 0x44,
0xFF, 0x44, 0x55, 0x44, 0xFF, 0x44,
0x55, 0x44, 0xFF, 0x44, 0x55, 0x44,
0xFF, 0x44, 0x55, 0x44, 0xFF, 0xFF,
0xFF, 0xC4, 0xD5, 0xC4, 0xFF, 0x00,
0x00, 0xFE, 0x21, 0x61, 0xA1, 0x1E,
0x00, 0xFE, 0x01, 0x21, 0x21, 0xEF,
0x00, 0xFF, 0x11, 0x11, 0x11, 0xFE,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x11, 0x11, 0x11, 0xFE, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00,
0xFF, 0x11, 0x11, 0x11, 0x01, 0x00,
0x01, 0x01, 0xFF, 0x01, 0x01, 0x00,
0xFF, 0x01, 0x01, 0xFF, 0x00, 0xFF,
0x01, 0x01, 0xFF, 0x00, 0x01, 0x01,
0xFF, 0x01, 0x01, 0x00, 0xFF, 0x20,
0x20, 0x20, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x7F, 0x7F, 0x44, 0x55, 0x44,
0x7F, 0x44, 0x55, 0x54, 0x57, 0x54,
0x55, 0x54, 0x57, 0x54, 0x55, 0x54,
0x57, 0x54, 0x55, 0x54, 0x57, 0x54,
0x45, 0x7C, 0x47, 0x54, 0x45, 0x7C,
0x7F, 0x7C, 0x45, 0x54, 0x57, 0x50,
0x5E, 0x50, 0x57, 0x47, 0x7F, 0x00,
0x00, 0x03, 0x00, 0x00, 0x00, 0x03,
0x00, 0x01, 0x02, 0x02, 0x02, 0x03,
0x00, 0x03, 0x02, 0x02, 0x02, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x03, 0x02, 0x02, 0x02, 0x01, 0x00,
0x03, 0x02, 0x02, 0x02, 0x02, 0x00,
0x03, 0x02, 0x02, 0x02, 0x03, 0x00,
0x03, 0x02, 0x02, 0x02, 0x02, 0x00,
0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
0x03, 0x02, 0x02, 0x03, 0x00, 0x03,
0x02, 0x02, 0x03, 0x00, 0x00, 0x30,
0x2B, 0x7C, 0x20, 0x40, 0x03, 0x7C,
0x44, 0x7C, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
+14
View File
@@ -0,0 +1,14 @@
# Latinpad
![Latinpad](https://github.com/latincompass/2-RotaryEncoder-pad/blob/master/1.jpg)
macro 2 rotary encoder pad
* Keyboard Maintainer: [latincompass](https://github.com/latincompass)
* Hardware Availability: https://github.com/latincompass/2-RotaryEncoder-pad
Make example for this keyboard (after setting up your build environment):
make latinpad: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).
+28
View File
@@ -0,0 +1,28 @@
# 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 = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = no
OLED_DRIVER_ENABLE = yes
ENCODER_ENABLE = yes
RGB_MATRIX_ENABLE = WS2812
+33
View File
@@ -0,0 +1,33 @@
/* Copyright 2020 mechmerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "910ce.h"
void keyboard_pre_init_kb(void) {
led_init_ports();
keyboard_pre_init_user();
}
void led_init_ports(void) {
setPinOutput(D1);
}
bool led_update_kb(led_t led_state) {
if (led_update_user(led_state)) {
writePin(D1, led_state.caps_lock);
}
return true;
}
+75
View File
@@ -0,0 +1,75 @@
/* Copyright 2020 mechmerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "quantum.h"
#define ___ KC_NO
/* This is a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k5e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k42, k44, k45, k47, k49, k48, k4c, k4d, k4e \
){ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
{ k40, k41, k42, ___, k44, k45, ___, k47, k48, k49, ___, ___, k4c, k4d, k4e }, \
{ ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, k5e }, \
}
#define LAYOUT_65_ansi_blocker( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k5e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k42, k45, k49, k48, k4c, k4d, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, ___ }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, ___, k2d, k2e }, \
{ k30, ___, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
{ k40, k41, k42, ___, ___, k45, ___, ___, k48, k49, ___, ___, k4c, k4d, k4e }, \
{ ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, k5e }, \
}
#define LAYOUT_65_iso_blocker( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k5e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k42, k45, k49, k48, k4c, k4d, k4e \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, ___ }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, ___, k1e }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
{ k40, k41, k42, ___, ___, k45, ___, ___, k48, k49, ___, ___, k4c, k4d, k4e }, \
{ ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, k5e }, \
}
+49
View File
@@ -0,0 +1,49 @@
/*
Copyright 2020 mechmerlin
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "config_common.h"
#define VENDOR_ID 0x5447 // TG
#define PRODUCT_ID 0x910C
#define DEVICE_VER 0x0001
#define MANUFACTURER TGR
#define PRODUCT 910CE
#define DESCRIPTION A custom 65% keyboard
#define RGBLED_NUM 18
#define MATRIX_ROWS 6
#define MATRIX_COLS 15
// 0 1 2 3 4 5 6 7 8 9 A B C D E
#define MATRIX_ROW_PINS { B1, B2, B3, B4, B5, B6 }
#define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
#define UNUSED_PINS {}
#define DIODE_DIRECTION COL2ROW
#define DEBOUNCE 5
#define BACKLIGHT_PIN D4
#define BACKLIGHT_LEVELS 3
#define RGBLIGHT_ANIMATIONS
/* disable these deprecated features by default */
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
+20
View File
@@ -0,0 +1,20 @@
{
"keyboard_name": "TGR 910 CE",
"url": "",
"maintainer": "qmk",
"width": 16,
"height": 5,
"layouts": {
"LAYOUT_all": {
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":13.75, "y":2, "w":1.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.75}, {"x":6.5, "y":4, "w":1.25}, {"x":7.75, "y":4, "w":2.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
},
"LAYOUT_65_ansi_blocker": {
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
},
"LAYOUT_65_iso_blocker": {
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"x":15, "y":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
}
}
}
@@ -0,0 +1,47 @@
/* Copyright 2020 mechmerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgU│
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgD│
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
* │Ctrl│GUI │Alt │ │ Alt│Ctrl│ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
[0] = LAYOUT_65_ansi_blocker(
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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_65_ansi_blocker(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
+63
View File
@@ -0,0 +1,63 @@
/* Copyright 2020 mechmerlin
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│Hom│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │PgU│
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgD│
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
* │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│ ↑ │End│
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
* │Ctrl│GUI │Alt │ │ Alt│Ctrl│ │ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
*/
[0] = LAYOUT_65_ansi_blocker(
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, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_65_ansi_blocker(
KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_65_ansi_blocker(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_65_ansi_blocker(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
+4
View File
@@ -0,0 +1,4 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
EXTRAKEY_ENABLE = no # Audio control and System control
+19
View File
@@ -0,0 +1,19 @@
# TGR 910 CE
A 65% Bootmapper Client based keyboard with blocker and 910 logo on the top right.
* Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
* Hardware Supported: TGR 910 CE PCB labeled TGR-Unicorn PCB v1.2
* Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=91498.0)
Make example for this keyboard (after setting up your build environment):
make tgr/910ce:default
Flashing example for this keyboard ([after setting up the bootloadHID flashing environment](https://docs.qmk.fm/#/flashing_bootloadhid))
make tgr/910ce:default:flash
**Reset Key**: Short the pins labeled `FW_JP` underneath the tab key. This can only be done from the back of the board.
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).
+28
View File
@@ -0,0 +1,28 @@
# MCU name
MCU = atmega32a
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = bootloadHID
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = yes # Console for debug
COMMAND_ENABLE = yes # Commands for debug and configuration
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
WS2812_DRIVER = i2c
OPT_DEFS = -DDEBUG_LEVEL=0
LAYOUTS = 65_ansi_blocker 65_iso_blocker
+38
View File
@@ -0,0 +1,38 @@
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x4B4B
#define PRODUCT_ID 0x0002
#define DEVICE_VER 0x0001
#define MANUFACTURER TheRoyalSweatshirt
#define PRODUCT Liminal
#define DESCRIPTION "A 50% keyboard with focused around spectacular keycap compatibility."
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 14
#define MATRIX_ROW_PINS { C6, B6, B7, C7 }
#define MATRIX_COL_PINS { D6, C4, D3, D2, D1, D0, C2, B0, B1, B2, B3, B4, D5, C5 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* ws2812 RGB LED */
#define RGB_DI_PIN D4
#define RGBLED_NUM 1 // Number of LEDs
#define RGBLIGHT_HUE_STEP 6
#define RGBLIGHT_SAT_STEP 4
#define RGBLIGHT_VAL_STEP 4
+68
View File
@@ -0,0 +1,68 @@
{
"keyboard_name": "liminal",
"url": "",
"maintainer": "TheRoyalSweatshirt",
"width": 15,
"height": 4,
"layouts": {
"LAYOUT_base_kit_all": {
"key_count": 52,
"layout": [
{"label":"k01", "x":0, "y":0, "w":1},
{"label":"k02", "x":1, "y":0, "w":1.5},
{"label":"k03", "x":2.5, "y":0, "w":1},
{"label":"k04", "x":3.5, "y":0, "w":1},
{"label":"k05", "x":4.5, "y":0, "w":1},
{"label":"k06", "x":5.5, "y":0, "w":1},
{"label":"k07", "x":6.5, "y":0, "w":1},
{"label":"k08", "x":7.5, "y":0, "w":1},
{"label":"k09", "x":8.5, "y":0, "w":1},
{"label":"k010", "x":9.5, "y":0, "w":1},
{"label":"k011", "x":10.5, "y":0, "w":1},
{"label":"k012", "x":11.5, "y":0, "w":1},
{"label":"k013", "x":12.5, "y":0, "w":1},
{"label":"k014", "x":13.5, "y":0, "w":1.5},
{"label":"k11", "x":0, "y":1, "w":1},
{"label":"k12", "x":1, "y":1, "w":1.75},
{"label":"k13", "x":2.75, "y":1, "w":1},
{"label":"k14", "x":3.75, "y":1, "w":1},
{"label":"k15", "x":4.75, "y":1, "w":1},
{"label":"k16", "x":5.75, "y":1, "w":1},
{"label":"k17", "x":6.75, "y":1, "w":1},
{"label":"k18", "x":7.75, "y":1, "w":1},
{"label":"k19", "x":8.75, "y":1, "w":1},
{"label":"k110", "x":9.75, "y":1, "w":1},
{"label":"k111", "x":10.75, "y":1, "w":1},
{"label":"k112", "x":11.75, "y":1, "w":1},
{"label":"k113", "x":12.75, "y":1, "w":1},
{"label":"k114", "x":13.75, "y":1, "w":1.25},
{"label":"k21", "x":0, "y":2, "w":1},
{"label":"k22", "x":1, "y":2, "w":1.25},
{"label":"k23", "x":2.25, "y":2, "w":1},
{"label":"k24", "x":3.25, "y":2, "w":1},
{"label":"k25", "x":4.25, "y":2, "w":1},
{"label":"k26", "x":5.25, "y":2, "w":1},
{"label":"k27", "x":6.25, "y":2, "w":1},
{"label":"k28", "x":7.25, "y":2, "w":1},
{"label":"k29", "x":8.25, "y":2, "w":1},
{"label":"k210", "x":9.25, "y":2, "w":1},
{"label":"k211", "x":10.25, "y":2, "w":1},
{"label":"k212", "x":11.25, "y":2, "w":1},
{"label":"k213", "x":12.25, "y":2, "w":1},
{"label":"k214", "x":13.25, "y":2, "w":1.75},
{"label":"k31", "x":0, "y":3, "w":1},
{"label":"k32", "x":1, "y":3, "w":1.5},
{"label":"k33", "x":2.5, "y":3, "w":1.25},
{"label":"k34", "x":3.75, "y":3, "w":1.5},
{"label":"k35", "x":5.25, "y":3, "w":2},
{"label":"k38", "x":7.25, "y":3, "w":2.25},
{"label":"k310", "x":9.5, "y":3, "w":1.5},
{"label":"k311", "x":11, "y":3, "w":1.25},
{"label":"k313", "x":12.25, "y":3, "w":1.25},
{"label":"k314", "x":13.5, "y":3, "w":1.5}
]
}
}
}
@@ -0,0 +1,6 @@
#pragma once
#define PERMISSIVE_HOLD
#define TAPPING_TERM_PER_KEY
@@ -0,0 +1,161 @@
#include QMK_KEYBOARD_H
enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
_OTHER
};
//Tap Dance Declarations
enum {
TD_RST,
TD_DBQT
};
void dance_rst_reset (qk_tap_dance_state_t *state, void *user_data) {
if (state->count >= 2) {
reset_keyboard();
reset_tap_dance(state);
}
}
//All tap dance functions would go here. Only showing this one.
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_RST] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, NULL, dance_rst_reset),
[TD_DBQT] = ACTION_TAP_DANCE_DOUBLE (KC_QUOTE, KC_DQT)
};
enum custom_keycodes {
M_PAR = SAFE_RANGE,
M_BKT
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case M_PAR:
if (record->event.pressed) {
SEND_STRING("()" SS_TAP(X_LEFT));
}
break;
case M_BKT:
if (record->event.pressed) {
SEND_STRING("[]" SS_TAP(X_LEFT));
}
break;
}
return true;
};
#define OTHER MO(_OTHER)
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default layer
* ┌─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │ Esc │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ - │ BsPc │
* ├─────┼────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴──────┤
* │PgUp │Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ Enter │
* ├─────┼─────┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬────────┤
* │PgDn │LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Other │
* ├─────┼────┬──┴─┬──┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │ END │Del │Gui │Alt │ Right KC = 7u/2.25u │Raise │Menu │ Lower│
* └─────┴────┴────┴────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_QWERTY] = LAYOUT_base_kit_all(
KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINUS, KC_BSPC,
KC_PGUP, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENT,
KC_PGDN, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OTHER,
KC_END, KC_DEL, KC_LGUI, KC_LALT, LOWER, KC_SPACE, KC_CAPS, RAISE, KC_RGUI, LOWER
),
/* LOWER layer
* ┌─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │ ` │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ _ │ │
* ├─────┼────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴──────┤
* │ ~ │ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │(..)│[..]│ ' and " │
* ├─────┼─────┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬────────┤
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
* ├─────┼────┬──┴─┬──┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │ │ │ │ │ │ │ │ │
* └─────┴────┴────┴────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_LOWER] = LAYOUT_base_kit_all(
KC_GRAVE, _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_UNDS, _______,
KC_TILD, _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, M_PAR, M_BKT, _______, TD(TD_DBQT),
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* RAISE layer
* ┌─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │ \ │ │ │ │ │ │ │ │ │ │ │ │ = │ │
* ├─────┼────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴──────┤
* │ | │CAPS │ │ │ │ │ │ │ │ │ │ │ + │
* ├─────┼─────┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬────────┤
* │ │ │ │ │ │ │ │ │ │ │ [ │ ] │ │
* ├─────┼────┬──┴─┬──┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │ │ │ │ │ │ │ │ │
* └─────┴────┴────┴────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_RAISE] = LAYOUT_base_kit_all(
KC_BSLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_EQUAL, _______,
KC_PIPE, KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* OTHER layer
* ┌─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │HOME │ │ │ │ │ │ │ │ │ │ │ UP │ │ │
* ├─────┼────┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴──────┤
* │END │ │ │ │ │ │ │ │ │ │LEFT│RGHT│ │
* ├─────┼─────┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬────────┤
* │ │ │ │ │ │ │ │ │ │ │DOWN│ │ │
* ├─────┼────┬──┴─┬──┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │RESET│ │ │ │ │ │ │ │
* └─────┴────┴────┴────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_OTHER] = LAYOUT_base_kit_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RIGHT, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______, _______,
TD(TD_RST), _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
uint16_t get_tapping_term(uint16_t keycode) {
switch (keycode) {
case LT(_LOWER, KC_SPACE):
return 160;
case TD(TD_DBQT):
return 230;
default:
#ifndef TAPPING_TERM
return 200;
#else
return TAPPING_TERM;
#endif
}
}
layer_state_t layer_state_set_user(layer_state_t state) {
switch (get_highest_layer(state)) {
case _LOWER:
rgblight_setrgb (RGB_CORAL);
break;
case _RAISE:
rgblight_setrgb (RGB_RED);
break;
case _OTHER:
rgblight_setrgb (RGB_BLUE);
break;
default: // for any other layers, or the default layer
rgblight_setrgb (RGB_GREEN);
break;
}
return state;
}
@@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes
@@ -0,0 +1,6 @@
#pragma once
#define PERMISSIVE_HOLD
#define TAPPING_TERM_PER_KEY
@@ -0,0 +1,158 @@
#include QMK_KEYBOARD_H
enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
_OTHER
};
//Tap Dance Declarations
enum {
TD_RST,
TD_DBQT
};
void dance_rst_reset (qk_tap_dance_state_t *state, void *user_data) {
if (state->count >= 2) {
reset_keyboard();
reset_tap_dance(state);
}
}
//All tap dance functions would go here. Only showing this one.
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_RST] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, NULL, dance_rst_reset),
[TD_DBQT] = ACTION_TAP_DANCE_DOUBLE (KC_QUOTE, KC_DQT)
};
enum custom_keycodes {
M_PAR = SAFE_RANGE,
M_BKT
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case M_PAR:
if (record->event.pressed) {
SEND_STRING("()" SS_TAP(X_LEFT));
}
break;
case M_BKT:
if (record->event.pressed) {
SEND_STRING("[]" SS_TAP(X_LEFT));
}
break;
}
return true;
};
#define OTHER MO(_OTHER)
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default layer
* ┌─────┬────┬─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │ Esc │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ - │ BkSp │
* ├─────┼────┴─┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┐ │
* │PgUp │LCtrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ │
* ├─────┼────┬─┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─────┤
* │PgDn │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Other │
* ├─────┼────┼───┴┬───┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │ END │Del │Gui │ Alt │ Right KC = 7u/2.25u │Raise │Menu │ Lower│
* └─────┴────┴────┴─────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_QWERTY] = LAYOUT_base_kit_all(
KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINUS, KC_BSPC,
KC_PGUP, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE, KC_ENT,
KC_PGDN, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OTHER,
KC_END, KC_DEL, KC_LGUI, KC_LALT, LOWER, KC_SPACE, KC_CAPS, RAISE, KC_MENU, LOWER
),
/* LOWER layer
* ┌─────┬────┬─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │ ` │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ _ │ ENTR │
* ├─────┼────┴─┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┐ │
* │ ~ │ │ ! │ " │ £ │ $ │ % │ ^ │ & │ * │(..)│ : │ @ │ │
* ├─────┼────┬─┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─────┤
* │ │ │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ │ │
* ├─────┼────┼───┴┬───┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │ │ │ │ │ │ │ │ │
* └─────┴────┴────┴─────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_LOWER] = LAYOUT_base_kit_all(
KC_GRAVE, _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_UNDS, KC_ENT,
KC_TILD, _______, KC_EXLM, LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, M_PAR, KC_COLON, KC_AT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* RAISE layer
* ┌─────┬────┬─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │ │ │ │ │ │ │ │ │ │ │ │ │ = │ + │
* ├─────┼────┴─┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┐ │
* │ │ CAPS │ │ │ │ │ │ │ │ │ │ │ │ │
* ├─────┼────┬─┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─────┤
* │ │ │ │ │ │ │ │ │ │ │ │ [ │ ] │ │
* ├─────┼────┼───┴┬───┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │ │ │ │ │ │ │ │ │
* └─────┴────┴────┴─────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_RAISE] = LAYOUT_base_kit_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_EQUAL, KC_PLUS,
_______, KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* OTHER layer
* ┌─────┬────┬─────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬──────┐
* │HOME │ │ │ │ │ │ │ │ │ │ │ │ UP │ │
* ├─────┼────┴─┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┬───┴┐ │
* │END │ │ │ │ │ │ │ │ │ │ │LEFT│RGHT│ │
* ├─────┼────┬─┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─┬──┴─────┤
* │ │ │ │ │ │ │ │ │ │ │ │ │DOWN│ │
* ├─────┼────┼───┴┬───┴─┬──┴────┴────┴────┴────┴────┴───┬┴────┴┬───┴─┬──────┤
* │RESET│ │ │ │ │ │ │ │
* └─────┴────┴────┴─────┴───────────────────────────────┴──────┴─────┴──────┘
*/
[_OTHER] = LAYOUT_base_kit_all(
KC_HOME, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______,
KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_RIGHT, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______,
TD(TD_RST), _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
uint16_t get_tapping_term(uint16_t keycode) {
switch (keycode) {
case LT(_LOWER, KC_SPACE):
return 160;
case TD(TD_DBQT):
return 230;
default:
return 200;
}
}
layer_state_t layer_state_set_user(layer_state_t state) {
switch (get_highest_layer(state)) {
case _LOWER:
rgblight_setrgb (RGB_PURPLE);
break;
case _RAISE:
rgblight_setrgb (RGB_CYAN);
break;
case _OTHER:
rgblight_setrgb (RGB_ORANGE);
break;
default: // for any other layers, or the default layer
rgblight_setrgb (RGB_CORAL);
break;
}
return state;
}
@@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes
+1
View File
@@ -0,0 +1 @@
#include "liminal.h"
+19
View File
@@ -0,0 +1,19 @@
#pragma once
#include "quantum.h"
#define XXX KC_NO
#define LAYOUT_base_kit_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, \
k30, k31, k32, k33, k35, k37, k39, k3A, k3C, k3D \
) \
{ \
{ 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, XXX, k35, XXX, k37, XXX, k39, k3A, XXX, k3C, k3D } \
}
+14
View File
@@ -0,0 +1,14 @@
# Liminal
![liminal_ec](https://i.imgur.com/9Xe7uEal.jpg)
A 50% keyboard with superb keycap compatibility.
* Keyboard Maintainer: [TheRoyalSweatshirt](https://github.com/TheRoyalSweatshirt) a.k.a [The_Royal](https://reddit.com/u/The_Royal)
* Hardware Supported: rev 0.2 Liminal PCB
* Hardware Availability: Through GB, Proxy, or Direct Message
Make example for this keyboard (after setting up your build environment):
make the_royal/liminal: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).
+32
View File
@@ -0,0 +1,32 @@
# MCU name
MCU = atmega32u2
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = atmel-dfu
# Build Options
# - change yes to no to disable
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
+39
View File
@@ -0,0 +1,39 @@
#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x3521
#define DEVICE_VER 0x0001
#define MANUFACTURER TheRoyalSweatshirt
#define PRODUCT The Schwann PCB
#define DESCRIPTION "A simple, HHKB-Styled, Ortholinear PCB Designed for use with the Neuron Keyboard by Worldspawn and Walletburner."
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 12
#define MATRIX_ROW_PINS { F0, F1, F6, C7 }
#define MATRIX_COL_PINS { F4, F5, D5, D3, D2, C6, B6, B5, B4, D7, D6, D1 }
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
/* ws2812 RGB LED */
#define RGB_DI_PIN B3
#define RGBLED_NUM 8 // Number of LEDs
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 6
#define RGBLIGHT_SAT_STEP 4
#define RGBLIGHT_VAL_STEP 8
+156
View File
@@ -0,0 +1,156 @@
{
"keyboard_name": "Schwann's PCB",
"url": "https://github.com/TheRoyalSweatshirt/The_Royal_Projects/tree/schwann/PCBs/Schwann_PCB",
"maintainer": "TheRoyalSweatshirt",
"width": 12,
"height": 4,
"layouts": {
"LAYOUT_mit": {
"key_count": 45,
"layout": [
{"label":"TAB", "x":0, "y":0},
{"label":"Q", "x":1, "y":0},
{"label":"W", "x":2, "y":0},
{"label":"E", "x":3, "y":0},
{"label":"R", "x":4, "y":0},
{"label":"T", "x":5, "y":0},
{"label":"Y", "x":6, "y":0},
{"label":"U", "x":7, "y":0},
{"label":"I", "x":8, "y":0},
{"label":"O", "x":9, "y":0},
{"label":"P", "x":10, "y":0},
{"label":"BSPC", "x":11, "y":0},
{"label":"LCtl", "x":0, "y":1},
{"label":"A", "x":1, "y":1},
{"label":"S", "x":2, "y":1},
{"label":"D", "x":3, "y":1},
{"label":"F", "x":4, "y":1},
{"label":"G", "x":5, "y":1},
{"label":"H", "x":6, "y":1},
{"label":"J", "x":7, "y":1},
{"label":"K", "x":8, "y":1},
{"label":"L", "x":9, "y":1},
{"label":"SCLN", "x":10, "y":1},
{"label":"QUOT", "x":11, "y":1},
{"label":"LSFT", "x":0, "y":2},
{"label":"Z", "x":1, "y":2},
{"label":"X", "x":2, "y":2},
{"label":"C", "x":3, "y":2},
{"label":"V", "x":4, "y":2},
{"label":"B", "x":5, "y":2},
{"label":"N", "x":6, "y":2},
{"label":"M", "x":7, "y":2},
{"label":"COMM", "x":8, "y":2},
{"label":"DOT", "x":9, "y":2},
{"label":"SLSH", "x":10, "y":2},
{"label":"ENTER", "x":11, "y":2},
{"label":"DEL", "x":1, "y":3},
{"label":"LGUI", "x":2, "y":3},
{"label":"LALT", "x":3, "y":3},
{"label":"LOWER", "x":4, "y":3},
{"label":" ", "x":5, "y":3, "w":2},
{"label":"RAISE", "x":7, "y":3},
{"label":"RALT", "x":8, "y":3},
{"label":"MENU", "x":9, "y":3},
{"label":"RCTL", "x":10, "y":3}
]
},
"LAYOUT_full_ortho": {
"key_count": 46,
"layout": [
{"label":"TAB", "x":0, "y":0},
{"label":"Q", "x":1, "y":0},
{"label":"W", "x":2, "y":0},
{"label":"E", "x":3, "y":0},
{"label":"R", "x":4, "y":0},
{"label":"T", "x":5, "y":0},
{"label":"Y", "x":6, "y":0},
{"label":"U", "x":7, "y":0},
{"label":"I", "x":8, "y":0},
{"label":"O", "x":9, "y":0},
{"label":"P", "x":10, "y":0},
{"label":"BSPC", "x":11, "y":0},
{"label":"LCtl", "x":0, "y":1},
{"label":"A", "x":1, "y":1},
{"label":"S", "x":2, "y":1},
{"label":"D", "x":3, "y":1},
{"label":"F", "x":4, "y":1},
{"label":"G", "x":5, "y":1},
{"label":"H", "x":6, "y":1},
{"label":"J", "x":7, "y":1},
{"label":"K", "x":8, "y":1},
{"label":"L", "x":9, "y":1},
{"label":"SCLN", "x":10, "y":1},
{"label":"QUOT", "x":11, "y":1},
{"label":"LSFT", "x":0, "y":2},
{"label":"Z", "x":1, "y":2},
{"label":"X", "x":2, "y":2},
{"label":"C", "x":3, "y":2},
{"label":"V", "x":4, "y":2},
{"label":"B", "x":5, "y":2},
{"label":"N", "x":6, "y":2},
{"label":"M", "x":7, "y":2},
{"label":"COMM", "x":8, "y":2},
{"label":"DOT", "x":9, "y":2},
{"label":"SLSH", "x":10, "y":2},
{"label":"ENTER", "x":11, "y":2},
{"label":"DEL", "x":1, "y":3},
{"label":"LGUI", "x":2, "y":3},
{"label":"LALT", "x":3, "y":3},
{"label":"LOWER", "x":4, "y":3},
{"label":" ", "x":5, "y":3},
{"label":" ", "x":6, "y":3},
{"label":"RAISE", "x":7, "y":3},
{"label":"RALT", "x":8, "y":3},
{"label":"MENU", "x":9, "y":3},
{"label":"RCTL", "x":10, "y":3}
]
},
"LAYOUT_big_boy": {
"key_count": 39,
"layout": [
{"label":"TAB", "x":0, "y":0},
{"label":"Q", "x":1, "y":0},
{"label":"W", "x":2, "y":0},
{"label":"E", "x":3, "y":0},
{"label":"R", "x":4, "y":0},
{"label":"T", "x":5, "y":0},
{"label":"Y", "x":6, "y":0},
{"label":"U", "x":7, "y":0},
{"label":"I", "x":8, "y":0},
{"label":"O", "x":9, "y":0},
{"label":"P", "x":10, "y":0},
{"label":"BSPC", "x":11, "y":0},
{"label":"LCtl", "x":0, "y":1},
{"label":"A", "x":1, "y":1},
{"label":"S", "x":2, "y":1},
{"label":"D", "x":3, "y":1},
{"label":"F", "x":4, "y":1},
{"label":"G", "x":5, "y":1},
{"label":"H", "x":6, "y":1},
{"label":"J", "x":7, "y":1},
{"label":"K", "x":8, "y":1},
{"label":"L", "x":9, "y":1},
{"label":"SCLN", "x":10, "y":1},
{"label":"QUOT", "x":11, "y":1},
{"label":"LSFT", "x":0, "y":2},
{"label":"Z", "x":1, "y":2},
{"label":"X", "x":2, "y":2},
{"label":"C", "x":3, "y":2},
{"label":"V", "x":4, "y":2},
{"label":"B", "x":5, "y":2},
{"label":"N", "x":6, "y":2},
{"label":"M", "x":7, "y":2},
{"label":"COMM", "x":8, "y":2},
{"label":"DOT", "x":9, "y":2},
{"label":"SLSH", "x":10, "y":2},
{"label":"ENTER", "x":11, "y":2},
{"label":"LOWER", "x":1, "y":3, "w":1.5},
{"label":" ", "x":2.5, "y":3, "w":7},
{"label":"RAISE", "x":9.5, "y":3, "w":1.5}
]
}
}
}
@@ -0,0 +1,136 @@
#include QMK_KEYBOARD_H
enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
_OTHER
};
enum schwann_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
RAISE
};
//Tap Dance Declarations
enum {
TD_RST
};
void dance_rst_reset (qk_tap_dance_state_t *state, void *user_data) {
if (state->count >= 2) {
reset_keyboard();
reset_tap_dance(state);
}
}
//All tap dance functions would go here. Only showing this one.
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_RST] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, NULL, dance_rst_reset)
};
#define XXXXX KC_TRNS
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Default Layer
* ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐
* │Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │BkSp│
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │LCtl│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │LSft│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Entr│
* └────┼────┼────┼────┼────┼────┴────┼────┼────┼────┼────┼────┘
* │Del │Gui │Alt │Lwr │ │Rse │Alt │Menu│Ctrl│
* └────┴────┴────┴────┴─────────┴────┴────┴────┴────┘
*/
[_QWERTY] = LAYOUT_mit(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
KC_LCTRL, 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_DEL, KC_LGUI, KC_LALT, LOWER, KC_SPACE, RAISE, KC_RALT, KC_MENU, KC_RCTL
),
/* Lower Layer
* ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐
* │Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ " │
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │ │ │ │ │ │ │ │ │ ` │ [ │ ] │ . │
* └────┼────┼────┼────┼────┼────┴────┼────┼────┼────┼────┼────┘
* │ │ │ │ │ │ │ │ │ │
* └────┴────┴────┴────┴─────────┴────┴────┴────┴────┘
*/
[_LOWER] = LAYOUT_mit(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DQT,
_______, _______, _______, _______, _______, _______, _______, _______, KC_GRAVE, KC_LBRC, KC_RBRC, KC_DOT,
_______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Raise Layer
* ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐
* │ │ │ │ │ │ │ │ │ │ │ - │ │
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │CAPS│ │ │ │ │ │ │ │ │ │ _ │ \ │
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │PrSc│ │ │ │ │ │ │ │ │ UP │ │ = │
* └────┼────┼────┼────┼────┼────┴────┼────┼────┼────┼────┼────┘
* │ │ │ │ │ │ │Left│Down│Rght│
* └────┴────┴────┴────┴─────────┴────┴────┴────┴────┘
*/
[_RAISE] = LAYOUT_mit(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, _______,
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_BSLS,
KC_PSCR, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, KC_EQUAL,
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT
),
/* Other Layer
* ┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐
* │RSET│ │ │ │ │ │ │ │ │SAT+│Hue+│Brt+│
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │ │ │ │ │ │ │ │ │ │SAT-│Hue-│Brt-│
* ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
* │ │ │ │ │ │ │ │ │ │ │ │RGB!│
* └────┼────┼────┼────┼────┼────┴────┼────┼────┼────┼────┼────┘
* │ │ │ │ │ │ │ │ │ │
* └────┴────┴────┴────┴─────────┴────┴────┴────┴────┘
*/
[_OTHER] = LAYOUT_mit(
TD(TD_RST), _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAI, RGB_HUI, RGB_VAI,
_______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD,
_______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _OTHER);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _OTHER);
}
return false;
break;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _OTHER);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _OTHER);
}
return false;
break;
}
return true;
};
@@ -0,0 +1 @@
TAP_DANCE_ENABLE = yes
+15
View File
@@ -0,0 +1,15 @@
# Schwann PCB
![schwann_render](https://i.imgur.com/04uaN8xl.jpg)
A simple, HHKB ortho PCB, designed for use with the Neuron Keyboard by Wallet Burner
* Keyboard Maintainer: [TheRoyalSweatshirt](https://github.com/TheRoyalSweatshirt) a.k.a [The_Royal](https://reddit.com/u/The_Royal)
* Hardware Supported: Rev0.2 and Rev0.5 Schwann PCB
* Hardware Availability: Private Message, Group buy, or self-procurement via the open sourced [Schwann Documentation](https://github.com/TheRoyalSweatshirt/The_Royal_Projects/tree/schwann/PCBs/Schwann_PCB).
Make example for this keyboard (after setting up your build environment):
make the_royal/schwann: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).
+32
View File
@@ -0,0 +1,32 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
# Teensy halfkay
# Pro Micro caterina
# Atmel DFU atmel-dfu
# LUFA DFU lufa-dfu
# QMK DFU qmk-dfu
# ATmega32A bootloadHID
# ATmega328P USBasp
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
MIDI_ENABLE = no # MIDI support
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
+1
View File
@@ -0,0 +1 @@
#include "schwann.h"
+44
View File
@@ -0,0 +1,44 @@
#pragma once
#include "quantum.h"
#define XXX KC_NO
#define LAYOUT_mit( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
k31, k32, k33, k34, k36, k37, k38, k39, k3A \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B}, \
{XXX, k31, k32, k33, k34, XXX, k36, k37, k38, k39, k3A, XXX} \
}
#define LAYOUT_full_ortho( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B}, \
{XXX, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, XXX} \
}
#define LAYOUT_big_boy( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
k31, k36, k3A \
) \
{ \
{k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B}, \
{k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B}, \
{k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B}, \
{XXX, k31, XXX, XXX, XXX, XXX, k36, XXX, XXX, XXX, k3A, XXX} \
}
@@ -0,0 +1,42 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <[email protected]>
Copyright 2015 Jack Humbert
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
/* Use I2C or Serial. Default is Serial */
// #define USE_I2C
/* Select hand configuration */
// Defaults:
// Rev1: EE_HANDS
// Rev2: SPLIT_HAND_PIN B4
// You can override the defaults (rev1 doesn't support SPLIT_HAND_PIN)
//#define EE_HANDS
//#define MASTER_LEFT
//#define MASTER_RIGHT
#ifdef AUDIO_ENABLE
#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
SONG(DVORAK_SOUND), \
SONG(COLEMAK_SOUND) \
}
#endif
@@ -0,0 +1,106 @@
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layers {
_ALPHAS,
_MODS,
_VIM,
_NUMPAD,
_CODE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Alphas
* ,--------------------------------------------------------------------------------------------.
* | Tab | q | w | e | r | t | y | u | i | o | p | ins |
* |--------+------+-----+------+---------+------+------+-------+------+------+--------+--------|
* |ctl(esc)| a | s | d | f | g | h | j | k | l |LT(2,;:)|sft(ent)|
* |--------+------+-----+------+---------+------|------+-------+------+------+--------+--------|
* |LSPO | z | x | c | v | b | n | m | ,< | .> | up | RSPC |
* |--------+------+-----+------+---------+------+------+-------+------+------+--------+--------|
* | ctl | GUI | alt |MO(1) |lt(3,del)|Space |Space |bckspc |MO(4) | left | down | right |
* `--------------------------------------------------------------------------------------------'
*/
[_ALPHAS] = LAYOUT_ortho_4x12(
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_INS,
LCTL_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), RSFT_T(KC_ENT),
KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC,
KC_LCTL, KC_LGUI, KC_LALT, MO(1), LT(3,KC_DEL), KC_SPC, KC_SPC, KC_BSPC, MO(4), KC_LEFT, KC_DOWN, KC_RGHT
),
/* MODS
* ,-----------------------------------------------------------------------------------.
* | `~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |PrtSc |
* |-------+------+------+------+------+-------------+------+------+------+------+------|
* |Meh(F7)| ! | * | # | $ | % | ^ | & | * | '" | " | \| |
* |-------+------+------+------+------+------|------+------+------+------+------+------|
* | LS/( | z | x | [{ | ] | b | -_ | =+ | /? | \| | PgUp | RS/) |
* |-------+------+------+------+------+------+------+------+------+------+------+------|
* | Ctrl | | | | | spc | _ |bckspc| | Home |PgDwn | End |
* `------------------------------------------------------------------------------------'
*/
[_MODS] = LAYOUT_ortho_4x12(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_PSCR,
MEH(KC_F7), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_QUOT, KC_DQUO, KC_BSLS,
LSFT_T(KC_LCBR), KC_Z, KC_X, KC_LBRC, KC_RBRC, KC_B, KC_MINS, KC_EQL, KC_SLSH, KC_BSLS, KC_PGUP, RSFT_T(KC_RCBR),
KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_UNDS, KC_BSPC, KC_NO, KC_HOME, KC_PGDN, KC_END
),
/* VIM layer that adds vim navigation by holding the ; key. Includes keys like $,^ for end/beg of line and b,w,e,d,y. Also includes
* quick keys for excel like alt(=) for sum, ctl(+) & ctl(-) to add/remove columns/rows.
* ,--------------------------------------------------------------------------------------.
* | Tab | "' | b | w | e | d | y | Vol- | Vol+ | TO(0)| TG(2) |reset |
* |--------+------+-----+-----+--------+-----+------+------+------+------+--------+------|
* |Ctl(Esc)| Home |Home |Pg Up|Pg Down | End | Left | Down | Up |Right |LT(2,;:)|Enter |
* |--------+------+-----+-----+--------+-----|------+------+------+------+--------+------|
* | sft | ;: | q | ^ | $ | x |alt(=)|ctl(+)|ctl(-)| | | |
* |--------+------+-----+-----+--------+-----+------+------+------+------+--------+------|
* | Ctl | GUI | alt | sft |sft(ctl)| spc | del | bspc | | | | |
* `--------------------------------------------------------------------------------------'
*/
[_VIM] = LAYOUT_ortho_4x12(
KC_TAB, KC_QUOT, KC_B, KC_W, KC_E, KC_D, KC_Y, KC_VOLD, KC_VOLU, TO(0), TG(2), RESET,
LCTL_T(KC_ESC), KC_HOME, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, LT(2,KC_SCLN), KC_ENT,
KC_LSFT, KC_SCLN, KC_Q, KC_CIRC, KC_DLR, KC_X, RALT(KC_EQL), RCTL(KC_PLUS), RCTL(KC_PMNS), KC_NO, KC_NO, KC_TRNS,
KC_LCTL, KC_LGUI, KC_LALT, KC_LSFT, LSFT(KC_LCTL), KC_SPC, KC_DEL, KC_BSPC, KC_NO, KC_NO, KC_NO, KC_TRNS
),
/* NUMPAD: Numpad with operators and other keys
* ,-------------------------------------------------------------------------------------.
* | [{ | ! | @ | # | $ | % | ( | 7 | 8 | 9 | ) | ]} |
* |------+------+------+------+------+-------------+------+------+------+------+--------|
* | { | / | * | - | + | | = | 4 | 5 | 6 | ;: | } |
* |------+------+------+------+------+------|------+------+------+------+------+--------|
* | sft( | | | | | | | 1 | 2 | 3 | |kc_sft()|
* |------+------+------+------+------+------+------+------+------+------+------+--------|
* | | | | | |Space |Space | 0 | | | | |
* `-------------------------------------------------------------------------------------'
*/
[_NUMPAD] = LAYOUT_ortho_4x12(
KC_LBRC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_LPRN, KC_7, KC_8, KC_9, KC_RPRN, KC_RBRC,
KC_LCBR, KC_PSLS, KC_PAST, KC_PMNS, KC_PPLS, KC_NO, KC_EQL, KC_4, KC_5, KC_6, KC_SCLN, KC_RCBR,
KC_LSPO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_1, KC_2, KC_3, KC_PEQL, KC_RSPC,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_0, KC_NO, KC_NO, KC_NO, KC_NO
),
/* CODE
* ,---------------------------------------------------------------------------.
* | ~` | F11 | F12 | 3 | 4 | 5 | 6 | : | - | > | 0 | Del |
* |----+-----+-----+----+-----+-------------+------+-----+------+------+------|
* | | / | * | { | [{ | ( | ) | ]} | } | '" | ]} | \| |
* |----+-----+-----+----+-----+-----|------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | ~ | = | \ |RGBTOG|RGBHUI|RGBHUD|
* |----+-----+-----+----+-----+-----+------+------+------+------+------+------|
* | | | | | | | | | |RGBVAD|RBGVAI|RGBMOD|
* `---------------------------------------------------------------------------'
*/
[_CODE] = LAYOUT_ortho_4x12(
KC_GRV, KC_F11, KC_F12, KC_3, KC_4, KC_5, KC_6, KC_COLN, KC_MINS, KC_GT, KC_0, KC_DEL,
KC_TRNS, KC_PSLS, KC_PAST, KC_LCBR, KC_LBRC, KC_LPRN, KC_RPRN, KC_RBRC, KC_RCBR, KC_QUOT, KC_RBRC, KC_BSLS,
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TILD, KC_EQL, KC_NUBS, RGB_TOG, RGB_HUI, RGB_HUD,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, RGB_VAI, RGB_MOD
)
};
@@ -0,0 +1,12 @@
#pragma once
#undef RGBLED_NUM
#define RGBLED_NUM 6
#define RGBLIGHT_LAYERS
#undef RGBLIGHT_ANIMATIONS
//#define RGBLIGHT_HUE_STEP 8
//#define RGBLIGHT_SAT_STEP 8
// place overrides here
+242
View File
@@ -0,0 +1,242 @@
/*
Copyright 2018 Eric Gebhart <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "keymap_bepo.h"
#include "ericgebhart.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DVORAK] = LAYOUT_ortho_5x15_wrapper(
KC_GRV, ___ORTHO_15_N___, KC_EQL,
KC_LOCK, ___13_DVORAK_1___, KC_SLASH,
TAB_BKTAB, ___13_DVORAK_2___, KC_MINUS,
KC_LSFT, ___13_DVORAK_3___, KC_RSFT,
___ORTHO_15_BOTTOM___
),
[QWERTY] = LAYOUT_ortho_5x15_wrapper(
KC_GRV, ___ORTHO_15_N___, KC_EQL,
KC_LOCK, ___13_QWERTY_1___, KC_SLASH,
TAB_BKTAB, ___13_QWERTY_2___, KC_MINUS,
KC_LSFT, ___13_QWERTY_3___, KC_RSFT,
___ORTHO_15_BOTTOM___
),
[COLEMAK] = LAYOUT_ortho_5x15_wrapper(
KC_GRV, ___ORTHO_15_N___, KC_EQL,
KC_LOCK, ___13_COLEMAK_1___, KC_SLASH,
TAB_BKTAB, ___13_COLEMAK_2___, KC_MINUS,
KC_LSFT, ___13_COLEMAK_3___, KC_RSFT,
___ORTHO_15_BOTTOM___
),
[WORKMAN] = LAYOUT_ortho_5x15_wrapper(
KC_GRV, ___ORTHO_15_N___, KC_EQL,
KC_LOCK, ___13_WORKMAN_1___, KC_SLASH,
TAB_BKTAB, ___13_WORKMAN_2___, KC_MINUS,
KC_LSFT, ___13_WORKMAN_3___, KC_RSFT,
___ORTHO_15_BOTTOM___
),
[NORMAN] = LAYOUT_ortho_5x15_wrapper(
KC_GRV, ___ORTHO_15_N___, KC_EQL,
KC_LOCK, ___13_NORMAN_1___, KC_SLASH,
TAB_BKTAB, ___13_NORMAN_2___, KC_MINUS,
KC_LSFT, ___13_NORMAN_3___, KC_RSFT,
___ORTHO_15_BOTTOM___
),
[DVORAK_ON_BEPO] = LAYOUT_ortho_5x15_wrapper(
DB_GRV, ___ORTHO_15_B_N___, DB_EQL,
KC_LOCK, ___13_DVORAK_B_1___, DB_SLASH,
TAB_BKTAB, ___13_DVORAK_B_2___, DB_MINUS,
KC_LSFT, ___13_DVORAK_B_3___, KC_RSFT,
___ORTHO_15_BOTTOM_FR___
),
[XMONAD] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___, ___13_DVORAK_1___, ___,
___, ___13_DVORAK_2___, ___,
___, ___13_DVORAK_3___, ___,
___15___
),
[XMONAD_FR] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___, ___13_DVORAK_B_1___, ___,
___, ___13_DVORAK_B_2___, ___,
___, ___13_DVORAK_B_3___, ___,
___15___
),
[BEPO] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_B_SYMB___,
KC_LOCK, ___13_BEPO_1___, BP_W,
TAB_BKTAB, ___13_BEPO_2___, BP_CCED,
BP_SFT_T_ECRC, ___13_BEPO_3___, BP_SFT_T_W,
___ORTHO_15_BOTTOM_BP___
),
// SYMBOLS
[SYMB] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___15_SYMB_1___,
___15_SYMB_2___,
___15_SYMB_3___,
___15_SYMB_4___
),
[KEYPAD] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___15_KP_1___,
___15_KP_2___,
___15_KP_3___,
___15_KP_4___
),
[KEYPAD_ON_BEPO] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___15_KP_B_1___,
___15_KP_B_2___,
___15_KP_B_3___,
___15_KP_B_4___
),
[SYMB_ON_BEPO] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___15_SYMB_B_1___,
___15_SYMB_B_2___,
___15_SYMB_B_3___,
___15_SYMB_B_4___
),
// MEDIA AND MOUSE
[MDIA] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___15_MDIA_1___,
___15_MDIA_2___,
___15_MDIA_3___,
___15_MDIA_4___
),
[LAYERS] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___15_LAYERS_1___,
___15_LAYERS_2___,
___15_LAYERS_3___,
___15___
),
[_RGB] = LAYOUT_ortho_5x15_wrapper(
___ORTHO_15_FUNC_1_12___,
___15_RGB_1___,
___15_RGB_2___,
___15_RGB_3___,
___15___
),
};
/********************************************************************************/
/* Using layers to do RGB underlighting */
/********************************************************************************/
const rgblight_segment_t PROGMEM on_bepo[] = RGBLIGHT_LAYER_SEGMENTS(
{0, 2, HSV_AZURE}
);
const rgblight_segment_t PROGMEM bepo[] = RGBLIGHT_LAYER_SEGMENTS(
{3, 2, HSV_MAGENTA}
);
const rgblight_segment_t PROGMEM dvorak[] = RGBLIGHT_LAYER_SEGMENTS(
{3, 2, HSV_AZURE}
);
const rgblight_segment_t PROGMEM media[] = RGBLIGHT_LAYER_SEGMENTS(
{5, 1, HSV_GREEN}
);
const rgblight_segment_t PROGMEM symbol[] = RGBLIGHT_LAYER_SEGMENTS(
{4, 2, HSV_GOLD}
);
const rgblight_segment_t PROGMEM keypad[] = RGBLIGHT_LAYER_SEGMENTS(
{4, 2, HSV_BLUE}
);
const rgblight_segment_t PROGMEM layers[] = RGBLIGHT_LAYER_SEGMENTS(
{5, 1, HSV_RED}
);
const rgblight_segment_t PROGMEM rgb[] = RGBLIGHT_LAYER_SEGMENTS(
{5, 1, HSV_ORANGE}
);
const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(on_bepo, bepo, dvorak, media, symbol,
keypad, layers, rgb);
void keyboard_post_init_user(void) {
rgblight_sethsv_noeeprom(HSV_PURPLE);
rgblight_layers = rgb_layers;
}
layer_state_t layer_state_set_user(layer_state_t state) {
// rgblight_set_layer_state(0, !on_qwerty());
rgblight_set_layer_state(0, layer_state_cmp(state, DVORAK));
rgblight_set_layer_state(1, layer_state_cmp(state, BEPO));
rgblight_set_layer_state(2, layer_state_cmp(state, DVORAK));
//|| layer_state_cmp(state, DVORAK_ON_BEPO)));
rgblight_set_layer_state(3, layer_state_cmp(state, MDIA));
rgblight_set_layer_state(4, layer_state_cmp(state, SYMB) );
//(layer_state_cmp(state, SYMB) || (layer_state_cmp(state, SYMB_ON_BEPO))));
rgblight_set_layer_state(5, layer_state_cmp(state, KEYPAD) );
///(layer_state_cmp(state, KEYPAD) || (layer_state_cmp(state, KEYPAD_ON_BEPO))));
rgblight_set_layer_state(6, layer_state_cmp(state, LAYERS));
rgblight_set_layer_state(7, layer_state_cmp(state, _RGB));
return state;
}
/* void suspend_power_down_user(void) { */
/* rgblight_disable(); */
/* } */
/* void suspend_wakeup_init_user(void) { */
/* rgblight_enable(); */
/* } */
/* bool is_shift_pressed = false; */
/* bool led_update_user(led_t led_state) { */
/* rgblight_set_layer_state(2, is_shift_pressed != led_state.caps_lock); */
/* return true; */
/* } */
/* bool process_record_user(uint16_t keycode, keyrecord_t* record) { */
/* switch (keycode) { */
/* case KC_LSFT: */
/* case KC_RSFT: */
/* is_shift_pressed = record->event.pressed; */
/* rgblight_set_layer_state(2, is_shift_pressed != host_keyboard_led_state().caps_lock); */
/* default: */
/* return true; */
/* } */
/* } */
@@ -0,0 +1 @@
# The default keymap for xd75, with led controls
@@ -0,0 +1,3 @@
RGBLIGHT_ENABLE = yes
RGBLIGHT_ANIMATION = yes
# BACKLIGHT_ENABLE = yes
+188
View File
@@ -0,0 +1,188 @@
/* Copyright 2020
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include "keymap.h"
// clang-format off
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ „ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Ă │ Î │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ș │ Ț │ Â │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define RO_DLQU KC_GRV // „
#define RO_1 KC_1 // 1
#define RO_2 KC_2 // 2
#define RO_3 KC_3 // 3
#define RO_4 KC_4 // 4
#define RO_5 KC_5 // 5
#define RO_6 KC_6 // 6
#define RO_7 KC_7 // 7
#define RO_8 KC_8 // 8
#define RO_9 KC_9 // 9
#define RO_0 KC_0 // 0
#define RO_MINS KC_MINS // -
#define RO_EQL KC_EQL // =
// Row 2
#define RO_Q KC_Q // Q
#define RO_W KC_W // W
#define RO_E KC_E // E
#define RO_R KC_R // R
#define RO_T KC_T // T
#define RO_Y KC_Y // Y
#define RO_U KC_U // U
#define RO_I KC_I // I
#define RO_O KC_O // O
#define RO_P KC_P // P
#define RO_ABRV KC_LBRC // Ă
#define RO_ICIR KC_RBRC // Î
// Row 3
#define RO_A KC_A // A
#define RO_S KC_S // S
#define RO_D KC_D // D
#define RO_F KC_F // F
#define RO_G KC_G // G
#define RO_H KC_H // H
#define RO_J KC_J // J
#define RO_K KC_K // K
#define RO_L KC_L // L
#define RO_SCOM KC_SCLN // Ș
#define RO_TCOM KC_QUOT // Ț
#define RO_ACIR KC_NUHS // Â
// Row 4
#define RO_BSLS KC_NUBS // (backslash)
#define RO_Z KC_Z // Z
#define RO_X KC_X // X
#define RO_C KC_C // C
#define RO_V KC_V // V
#define RO_B KC_B // B
#define RO_N KC_N // N
#define RO_M KC_M // M
#define RO_COMM KC_COMM // ,
#define RO_DOT KC_DOT // .
#define RO_SLSH KC_SLSH // /
/* Shifted symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ” │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │   │   │   │   │   │   │   │   │   │   │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │   │   │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │ | │   │   │   │   │   │   │   │ ; │ : │ ? │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define RO_RDQU S(RO_DLQU) // ”
#define RO_EXLM S(RO_1) // !
#define RO_AT S(RO_2) // @
#define RO_HASH S(RO_3) // #
#define RO_DLR S(RO_4) // $
#define RO_PERC S(RO_5) // %
#define RO_CIRC S(RO_6) // ^
#define RO_AMPR S(RO_7) // &
#define RO_ASTR S(RO_8) // *
#define RO_LPRN S(RO_9) // (
#define RO_RPRN S(RO_0) // )
#define RO_UNDS S(RO_MINS) // _
#define RO_PLUS S(RO_EQL) // +
// Row 4
#define RO_PIPE S(RO_BSLS) // |
#define RO_SCLN S(RO_COMM) // ;
#define RO_COLN S(RO_DOT) // :
#define RO_QUES S(RO_SLSH) // ?
/* AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ` │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ ¨ │ ¸ │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │ € │   │   │   │   │   │   │ § │ [ │ ] │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │ ß │ Đ │   │   │   │   │   │ Ł │   │ ' │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │   │   │   │ © │   │   │   │   │ < │ > │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define RO_GRV ALGR(RO_DLQU) // `
#define RO_DTIL ALGR(RO_1) // ~ (dead)
#define RO_CARN ALGR(RO_2) // ˇ (dead)
#define RO_DCIR ALGR(RO_3) // ^ (dead)
#define RO_BREV ALGR(RO_4) // ˘ (dead)
#define RO_RNGA ALGR(RO_5) // ° (dead)
#define RO_OGON ALGR(RO_6) // ˛ (dead)
#define RO_DGRV ALGR(RO_7) // ` (dead)
#define RO_DOTA ALGR(RO_8) // ˙ (dead)
#define RO_ACUT ALGR(RO_9) // ´ (dead)
#define RO_DACU ALGR(RO_0) // ˝ (dead)
#define RO_DIAE ALGR(RO_MINS) // ¨ (dead)
#define RO_CEDL ALGR(RO_EQL) // ¸ (dead)
// Row 2
#define RO_EURO ALGR(RO_E) // €
#define RO_SECT ALGR(RO_P) // §
#define RO_LBRC ALGR(RO_ABRV) // [
#define RO_RBRC ALGR(RO_ICIR) // ]
// Row 3
#define RO_SS ALGR(RO_S) // ß
#define RO_DSTR ALGR(RO_D) // Đ
#define RO_LSTR ALGR(RO_L) // Ł
#define RO_QUOT ALGR(RO_TCOM) // '
// Row 4
#define RO_COPY ALGR(RO_C) // ©
#define RO_LABK ALGR(RO_COMM) // <
#define RO_RABK ALGR(RO_DOT) // >
/* Shift+AltGr symbols
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ ~ │   │   │   │   │   │   │   │   │   │   │ – │ ± │       │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │     │   │   │   │   │   │   │   │   │   │   │ { │ } │     │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐    │
* │      │   │   │   │   │   │   │   │   │   │   │ " │   │    │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
* │    │   │   │   │   │   │   │   │   │ « │ » │   │          │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
* │    │    │    │                        │    │    │    │    │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
// Row 1
#define RO_TILD S(ALGR(RO_DLQU)) // ~
#define RO_NDSH S(ALGR(RO_MINS)) // –
#define RO_PLMN S(ALGR(RO_EQL)) // ±
// Row 2
#define RO_LCBR S(ALGR(RO_ABRV)) // {
#define RO_RCBR S(ALGR(RO_ICIR)) // }
// Row 3
#define RO_DQUO S(ALGR(RO_TCOM)) // "
// Row 4
#define RO_LDAQ S(ALGR(RO_COMM)) // «
#define RO_RDAQ S(ALGR(RO_DOT)) // »
@@ -13,11 +13,13 @@
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#pragma once #pragma once
#include "keymap.h" #include "keymap.h"
// clang-format off
/* /*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │       │ * │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │       │
+100
View File
@@ -0,0 +1,100 @@
/* Copyright 2020
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// Sendstring lookup tables for Romanian layouts
#pragma once
#include "keymap_romanian.h"
#include "quantum"
// 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, 1, 1, 1, 0),
KCLUT_ENTRY(1, 1, 1, 1, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
KCLUT_ENTRY(0, 0, 1, 1, 0, 0, 0, 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, 1, 1, 1, 1, 1),
KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 1, 1),
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, 1, 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, 1, 0, 0, 0, 0, 1),
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, 0, 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(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, 0, 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, RO_1, RO_TCOM, RO_3, RO_4, RO_5, RO_7, RO_TCOM,
// ( ) * + , - . /
RO_9, RO_0, RO_8, RO_EQL, RO_COMM, RO_MINS, RO_DOT, RO_SLSH,
// 0 1 2 3 4 5 6 7
RO_0, RO_1, RO_2, RO_3, RO_4, RO_5, RO_6, RO_7,
// 8 9 : ; < = > ?
RO_8, RO_9, RO_DOT, RO_COMM, RO_COMM, RO_EQL, RO_DOT, RO_SLSH,
// @ A B C D E F G
RO_2, RO_A, RO_B, RO_C, RO_D, RO_E, RO_F, RO_G,
// H I J K L M N O
RO_H, RO_I, RO_J, RO_K, RO_L, RO_M, RO_N, RO_O,
// P Q R S T U V W
RO_P, RO_Q, RO_R, RO_S, RO_T, RO_U, RO_V, RO_W,
// X Y Z [ \ ] ^ _
RO_X, RO_Y, RO_Z, RO_ABRV, RO_BSLS, RO_ICIR, RO_6, RO_MINS,
// ` a b c d e f g
RO_DLQU, RO_A, RO_B, RO_C, RO_D, RO_E, RO_F, RO_G,
// h i j k l m n o
RO_H, RO_I, RO_J, RO_K, RO_L, RO_M, RO_N, RO_O,
// p q r s t u v w
RO_P, RO_Q, RO_R, RO_S, RO_T, RO_U, RO_V, RO_W,
// x y z { | } ~ DEL
RO_X, RO_Y, RO_Z, RO_ABRV, RO_BSLS, RO_ICIR, RO_DLQU, KC_DEL
};
+16
View File
@@ -24,15 +24,21 @@ section at the end of this file).
/* ---------------------------- Hardware Config ---------------------------- */ /* ---------------------------- Hardware Config ---------------------------- */
#ifndef USB_CFG_IOPORTNAME
#define USB_CFG_IOPORTNAME D #define USB_CFG_IOPORTNAME D
#endif
/* This is the port where the USB bus is connected. When you configure it to /* This is the port where the USB bus is connected. When you configure it to
* "B", the registers PORTB, PINB and DDRB will be used. * "B", the registers PORTB, PINB and DDRB will be used.
*/ */
#ifndef USB_CFG_DMINUS_BIT
#define USB_CFG_DMINUS_BIT 3 #define USB_CFG_DMINUS_BIT 3
#endif
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected. /* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
* This may be any bit in the port. * This may be any bit in the port.
*/ */
#ifndef USB_CFG_DPLUS_BIT
#define USB_CFG_DPLUS_BIT 2 #define USB_CFG_DPLUS_BIT 2
#endif
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected. /* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
* This may be any bit in the port. Please note that D+ must also be connected * This may be any bit in the port. Please note that D+ must also be connected
* to interrupt pin INT0! [You can also use other interrupts, see section * to interrupt pin INT0! [You can also use other interrupts, see section
@@ -151,7 +157,9 @@ section at the end of this file).
/* This macro (if defined) is executed when a USB SET_ADDRESS request was /* This macro (if defined) is executed when a USB SET_ADDRESS request was
* received. * received.
*/ */
#ifndef USB_COUNT_SOF
#define USB_COUNT_SOF 1 #define USB_COUNT_SOF 1
#endif
/* define this macro to 1 if you need the global variable "usbSofCount" which /* define this macro to 1 if you need the global variable "usbSofCount" which
* counts SOF packets. This feature requires that the hardware interrupt is * counts SOF packets. This feature requires that the hardware interrupt is
* connected to D- instead of D+. * connected to D- instead of D+.
@@ -321,10 +329,18 @@ section at the end of this file).
/* Set INT1 for D- falling edge to count SOF */ /* Set INT1 for D- falling edge to count SOF */
/* #define USB_INTR_CFG EICRA */ /* #define USB_INTR_CFG EICRA */
#ifndef USB_INTR_CFG_SET
#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10)) #define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10))
#endif
/* #define USB_INTR_CFG_CLR 0 */ /* #define USB_INTR_CFG_CLR 0 */
/* #define USB_INTR_ENABLE EIMSK */ /* #define USB_INTR_ENABLE EIMSK */
#ifndef USB_INTR_ENABLE_BIT
#define USB_INTR_ENABLE_BIT INT1 #define USB_INTR_ENABLE_BIT INT1
#endif
/* #define USB_INTR_PENDING EIFR */ /* #define USB_INTR_PENDING EIFR */
#ifndef USB_INTR_PENDING_BIT
#define USB_INTR_PENDING_BIT INTF1 #define USB_INTR_PENDING_BIT INTF1
#endif
#ifndef USB_INTR_VECTOR
#define USB_INTR_VECTOR INT1_vect #define USB_INTR_VECTOR INT1_vect
#endif
+283
View File
@@ -0,0 +1,283 @@
#pragma once
/*
Copyright 2018 Eric Gebhart <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "core_keysets.h"
/******************************************************************/
/* These are the keys for the middle and bottom edge of any layout*/
/* That way we only need to set them once and use them everywhere */
/* The thumb keys, the bottom rows, etc. */
/******************************************************************/
/******************************************************************/
/* Middle Keysets for the XD75 */
/******************************************************************/
// For the middle keys of an xd75. It's got one more column in the middle than
// the ergodox, or the viterbi. And the Ergodox is missing a key in column 7
// counting from either end. Which is the first and 3rd columns of these sets.
// it's all an experient. I'm not sure what make sense here.
// stealing what I can from the ergodox layout.
/* The XD75 has 3 keys inbetween the usual left and right hand */
#define ___ORTHO_15_MIDDLE_T___ OSL(LAYERS), LCTL(KC_A), MDIA_SYMB_KP_LAYERS
#define ___ORTHO_15_MIDDLE_1___ LCTL(KC_C), LCTL(KC_X), LCTL(KC_V)
#define ___ORTHO_15_MIDDLE_2___ TO(SYMB), TO(_RGB), TO(KEYPAD)
#define ___ORTHO_15_MIDDLE_3___ OSL(SYMB), TO(MDIA), OSL(KEYPAD)
#define ___ORTHO_15_MIDDLE_4___ CTL_BSPC, ALT_DEL, XMONAD_ESC, ALT_ENT, CTL_SPC
// The same, for BEPO
#define ___ORTHO_15_MIDDLE_T_BP___ OSL(LAYERS), LCTL(BP_A), MDIA_SYMB_KP_LAYERS
#define ___ORTHO_15_MIDDLE_1_BP___ LCTL(BP_C), LCTL(BP_X), LCTL(BP_V)
#define ___ORTHO_15_MIDDLE_2_BP___ TO(SYMB_ON_BEPO), TO(_RGB), TO(KEYPAD_ON_BEPO)
#define ___ORTHO_15_MIDDLE_3_BP___ OSL(SYMB_ON_BEPO), TO(MDIA), OSL(KEYPAD_ON_BEPO)
// The Viterbi only has 2 keys in the middle.
#define ___ORTHO_14_MIDDLE_T___ OSL(LAYERS), MDIA_SYMB_KP_LAYERS
#define ___ORTHO_14_MIDDLE_1___ LCTL(KC_C), LCTL(KC_V)
#define ___ORTHO_14_MIDDLE_2___ TO(SYMB), TO(KEYPAD)
#define ___ORTHO_14_MIDDLE_3___ OSL(SYMB), OSL(KEYPAD)
// becomes the upper thumbs, the real 4th row if we throw away
// the number row at the top
#define ___ORTHO_14_MIDDLE_4___ LSFT(KC_TAB), HOME_END, KC_PGDN, KC_TAB
// basically the thumb keys like on the ergodox.
#define ___MIDDLE_THUMBS___ CTL_BSPC, ALT_DEL, XMONAD_ESC, KC_PGDN, ALT_ENT, CTL_SPC
// The same, for BEPO
#define ___ORTHO_14_MIDDLE_T_BP___ OSL(LAYERS), MDIA_SYMB_KP_LAYERS
#define ___ORTHO_14_MIDDLE_1_BP___ LCTL(BP_C), LCTL(BP_V)
#define ___ORTHO_14_MIDDLE_2_BP___ TO(SYMB_ON_BEPO), TO(KEYPAD_ON_BEPO)
#define ___ORTHO_14_MIDDLE_3_BP___ OSL(SYMB_ON_BEPO), OSL(KEYPAD_ON_BEPO)
#define ___ORTHO_14_MIDDLE_4_BP___ LSFT(KC_TAB), HOME_END, KC_PGUP, KC_TAB
/********************************************************************/
/** The top rows for numbers, symbols and Fkeys. **/
/********************************************************************/
#define ___ORTHO_15_N___ ___NUMBER_L___, ___ORTHO_15_MIDDLE_T___, ___NUMBER_R___
#define ___ORTHO_15_B_N___ ___NUMBER_BEPO_L___, ___ORTHO_15_MIDDLE_T_BP___, ___NUMBER_BEPO_R___
// the full bepo symbol row.
#define ___ORTHO_15_B_SYMB___ BP_DLR, ___SYMBOL_BEPO_L___, ___ORTHO_15_MIDDLE_T_BP___, ___SYMBOL_BEPO_R___, BP_EQL
// transparent in the middle because I only put this on transient layers.
#define ___ORTHO_15_FUNC_1_12___ ___FUNC_1_6___, ___3___, ___FUNC_7_12___
/********************************************************************/
/** The bottom row and thumbs as needed. **/
/********************************************************************/
#define ___BOTTOM_LEFT___ LCTL(KC_C), LCTL(KC_V), KC_INS, KC_LEFT, KC_RIGHT
#define ___BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLASH, LCTL(KC_V), LCTL(KC_C)
// the bottom rows for keyboards on bepo.
// bepo on bepo - not enough space to go around....
#define ___BOTTOM_LEFT_BP___ LCTL(BP_C), BP_ECRC, LCTL(BP_V), KC_LEFT, KC_RIGHT
#define ___BOTTOM_RIGHT_BP___ KC_UP, KC_DOWN, DB_BACKSLASH, BP_CCED, BP_PERC
// for dvorak on bepo
#define ___BOTTOM_LEFT_FR___ LCTL(BP_C), LCTL(BP_C), LCTL(BP_V), KC_LEFT, KC_RIGHT
#define ___BOTTOM_RIGHT_FR___ KC_UP, KC_DOWN, DB_BACKSLASH, LCTL(KC_V), LCTL(KC_C)
#define ___ORTHO_15_BOTTOM___ ___BOTTOM_LEFT___, ___ORTHO_15_MIDDLE_4___, ___BOTTOM_RIGHT___
#define ___ORTHO_15_BOTTOM_FR___ ___BOTTOM_LEFT_FR___, ___ORTHO_15_MIDDLE_4___, ___BOTTOM_RIGHT_FR___
#define ___ORTHO_15_BOTTOM_BP___ ___BOTTOM_LEFT_BP___, ___ORTHO_15_MIDDLE_4___, ___BOTTOM_RIGHT_BP___
#define ___ORTHO_14_BOTTOM___ ___BOTTOM_LEFT___, ___ORTHO_14_MIDDLE_4___, ___BOTTOM_RIGHT___
#define ___ORTHO_14_BOTTOM_FR___ ___BOTTOM_LEFT_FR___, ___ORTHO_14_MIDDLE_4___, ___BOTTOM_RIGHT_FR___
#define ___ORTHO_14_BOTTOM_BP___ ___BOTTOM_LEFT_BP___, ___ORTHO_14_MIDDLE_4___, ___BOTTOM_RIGHT_BP___
#define ___ORTHO_14_THUMBS_BOTTOM___ ___4___, ___MIDDLE_THUMBS___, ___4___
#define ___ERGODOX_THUMB_LEFT___ \
OSL(SYMB), OSM(KC_LGUI), \
HOME_END, \
CTL_BSPC, ALT_DEL, XMONAD_ESC
#define ___ERGODOX_THUMB_RIGHT___ \
XXX, OSL(KEYPAD), \
KC_PGUP, \
KC_PGDN, ALT_ENT, CTL_SPC
#define ___ERGODOX_THUMB_RIGHT_BP___ \
XXX, OSL(KEYPAD_ON_BEPO), \
KC_PGUP, \
KC_PGDN, ALT_ENT, CTL_SPC
#define ___ERGODOX_THUMB_LEFT_BP___ \
OSL(SYMB_ON_BEPO), OSM(KC_LGUI), \
HOME_END, \
CTL_BSPC, ALT_DEL, XMONAD_ESC
/********************************************************************************/
/* the interior rows for ortholinear keyboards. the first number is the length */
/* So you can put what you want on the outside ends, make new middles as needed */
/* It would be nice to make this a little more dynamic. There is little */
/* differenc between them. */
/********************************************************************************/
//// ortho15 core rows. used with my xd75.
/***********************************************************/
/* ORTHO15 interior rows. used with my xd75 */
/***********************************************************/
#define ___13_DVORAK_1___ ___DVORAK_L1___, ___ORTHO_15_MIDDLE_1___, ___DVORAK_R1___
#define ___13_DVORAK_2___ ___DVORAK_L2___, ___ORTHO_15_MIDDLE_2___, ___DVORAK_R2___
#define ___13_DVORAK_3___ ___DVORAK_L3___, ___ORTHO_15_MIDDLE_3___, ___DVORAK_R3___
#define ___13_QWERTY_1___ ___QWERTY_L1___, ___ORTHO_15_MIDDLE_1___, ___QWERTY_R1___
#define ___13_QWERTY_2___ ___QWERTY_L2___, ___ORTHO_15_MIDDLE_2___, ___QWERTY_R2___
#define ___13_QWERTY_3___ ___QWERTY_L3___, ___ORTHO_15_MIDDLE_3___, ___QWERTY_R3___
#define ___13_COLEMAK_1___ ___COLEMAK_L1___, ___ORTHO_15_MIDDLE_1___, ___COLEMAK_R1___
#define ___13_COLEMAK_2___ ___COLEMAK_L2___, ___ORTHO_15_MIDDLE_2___, ___COLEMAK_R2___
#define ___13_COLEMAK_3___ ___COLEMAK_L3___, ___ORTHO_15_MIDDLE_3___, ___COLEMAK_R3___
#define ___13_WORKMAN_1___ ___WORKMAN_L1___, ___ORTHO_15_MIDDLE_1___, ___WORKMAN_R1___
#define ___13_WORKMAN_2___ ___WORKMAN_L2___, ___ORTHO_15_MIDDLE_2___, ___WORKMAN_R2___
#define ___13_WORKMAN_3___ ___WORKMAN_L3___, ___ORTHO_15_MIDDLE_3___, ___WORKMAN_R3___
#define ___13_NORMAN_1___ ___NORMAN_L1___, ___ORTHO_15_MIDDLE_1___, ___NORMAN_R1___
#define ___13_NORMAN_2___ ___NORMAN_L2___, ___ORTHO_15_MIDDLE_2___, ___NORMAN_R2___
#define ___13_NORMAN_3___ ___NORMAN_L3___, ___ORTHO_15_MIDDLE_3___, ___NORMAN_R3___
#define ___13_DVORAK_B_1___ ___DVORAK_FR_L1___, ___ORTHO_15_MIDDLE_1_BP___, ___DVORAK_FR_R1___
#define ___13_DVORAK_B_2___ ___DVORAK_FR_L2___, ___ORTHO_15_MIDDLE_2_BP___, ___DVORAK_FR_R2___
#define ___13_DVORAK_B_3___ ___DVORAK_FR_L3___, ___ORTHO_15_MIDDLE_3_BP___, ___DVORAK_FR_R3___
#define ___13_BEPO_1___ ___BEPO_FR_L1___, ___ORTHO_15_MIDDLE_1_BP___, ___BEPO_FR_R1___
#define ___13_BEPO_2___ ___BEPO_FR_L2___, ___ORTHO_15_MIDDLE_2_BP___, ___BEPO_FR_R2___
#define ___13_BEPO_3___ ___BEPO_FR_L3___, ___ORTHO_15_MIDDLE_3_BP___, ___BEPO_FR_R3___
// transparent xmonad/dvorak layer
#define ___15_XMONAD_1___ ___, ___DVORAK_L1___, ___3___, ___DVORAK_R1___, ___
#define ___15_XMONAD_2___ ___, ___DVORAK_L2___, ___3___, ___DVORAK_R2___, ___
#define ___15_XMONAD_3___ ___, ___DVORAK_L3___, ___3___, ___DVORAK_R3___, ___
// transparent xmonad/dvorak layer in bepo
#define ___15_XMONAD_B_1___ ___, ___DVORAK_FR_L1___, ___3___, ___DVORAK_FR_R1___, ___
#define ___15_XMONAD_B_2___ ___, ___DVORAK_FR_L2___, ___3___, ___DVORAK_FR_R2___, ___
#define ___15_XMONAD_B_3___ ___, ___DVORAK_FR_L3___, ___3___, ___DVORAK_FR_R3___, ___
#define ___15_SYMB_1___ ___SYMBOLS6_1___, ___3___, ___SYMPAD_1___
#define ___15_SYMB_2___ ___SYMBOLS6_2___, ___3___, ___SYMPAD_2___
#define ___15_SYMB_3___ ___SYMBOLS6_3___, ___3___, ___SYMPAD_3___
#define ___15_SYMB_4___ ___SYMBOLS6_4___, ___3___, ___SYMPAD_4___
#define ___15_KP_1___ ___2___, ___FUNCPAD_T___, ___5___, ___KEYPAD_1___, ___
#define ___15_KP_2___ ___2___, ___FUNCPAD_1___, ___5___, ___KEYPAD_2___, ___
#define ___15_KP_3___ ___2___, ___FUNCPAD_2___, ___5___, ___KEYPAD_3___, KC_PENT
#define ___15_KP_4___ ___2___, ___FUNCPAD_3___, ___5___, ___KEYPAD_4___, ___
#define ___15_KP_B_1___ ___2___, ___FUNCPAD_T___, ___5___, ___KEYPAD_1_BP___, ___
#define ___15_KP_B_2___ ___2___, ___FUNCPAD_1___, ___5___, ___KEYPAD_2_BP___, ___
#define ___15_KP_B_3___ ___2___, ___FUNCPAD_2___, ___5___, ___KEYPAD_3_BP___, KC_PENT
#define ___15_KP_B_4___ ___2___, ___FUNCPAD_3___, ___5___, ___KEYPAD_4_BP___, ___
#define ___15_SYMB_B_1___ ___SYMBOLS6_1_BP___, ___3___, ___SYMPAD_1_BP___
#define ___15_SYMB_B_2___ ___SYMBOLS6_2_BP___, ___3___, ___SYMPAD_2_BP___
#define ___15_SYMB_B_3___ ___SYMBOLS6_3_BP___, ___3___, ___SYMPAD_3_BP___
#define ___15_SYMB_B_4___ ___SYMBOLS6_4_BP___, ___3___, ___SYMPAD_4_BP___
#define ___15_MDIA_1___ ___MOUSE_BTNS_L___, ___4___, KC_VOLU, ___MUTE_PRV_PLAY_NXT_STOP___
#define ___15_MDIA_2___ ___, ___MOUSE_LDUR___, ___4___, KC_VOLD, ___VI_ARROWS___, ___
#define ___15_MDIA_3___ ___, ___MWHEEL_LDUR___, ___4___, KC_PGUP, ___MOUSE_BTNS_R___
#define ___15_MDIA_4___ ___2___, ___MACCL___, ___4___, KC_PGDN, ___5___
#define ___15_LAYERS_1___ ___X3___, ___2_LAYERS_B1___, ___5___, ___3_LAYERS_T_BP___, ___X2___
#define ___15_LAYERS_2___ ___X3___, ___2_LAYERS_B2___, ___5___, ___3_LAYERS_T___, ___X2___
#define ___15_LAYERS_3___ ___X2___, ___3_LAYERS_B3___, ___5___, ___3_LAYERS_T_CTL___, ___X2___
#define ___15_RGB_1___ ___, ___RGB_HUE_SAT_INT_UP___, ___5___, ___5___
#define ___15_RGB_2___ ___, ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___4___, ___RGB_P_B_R_SW_SN___
#define ___15_RGB_3___ ___5___, ___5___, ___RGB_KXGT___, ___
/***********************************************************/
/* ORTHO14 base layer interior rows. used with my viterbi */
/***********************************************************/
#define ___12_DVORAK_1___ ___DVORAK_L1___, ___ORTHO_14_MIDDLE_1___, ___DVORAK_R1___
#define ___12_DVORAK_2___ ___DVORAK_L2___, ___ORTHO_14_MIDDLE_2___, ___DVORAK_R2___
#define ___12_DVORAK_3___ ___DVORAK_L3___, ___ORTHO_14_MIDDLE_3___, ___DVORAK_R3___
#define ___12_QWERTY_1___ ___QWERTY_L1___, ___ORTHO_14_MIDDLE_1___, ___QWERTY_R1___
#define ___12_QWERTY_2___ ___QWERTY_L2___, ___ORTHO_14_MIDDLE_2___, ___QWERTY_R2___
#define ___12_QWERTY_3___ ___QWERTY_L3___, ___ORTHO_14_MIDDLE_3___, ___QWERTY_R3___
#define ___12_COLEMAK_1___ ___COLEMAK_L1___, ___ORTHO_14_MIDDLE_1___, ___COLEMAK_R1___
#define ___12_COLEMAK_2___ ___COLEMAK_L2___, ___ORTHO_14_MIDDLE_2___, ___COLEMAK_R2___
#define ___12_COLEMAK_3___ ___COLEMAK_L3___, ___ORTHO_14_MIDDLE_3___, ___COLEMAK_R3___
#define ___12_WORKMAN_1___ ___WORKMAN_L1___, ___ORTHO_14_MIDDLE_1___, ___WORKMAN_R1___
#define ___12_WORKMAN_2___ ___WORKMAN_L2___, ___ORTHO_14_MIDDLE_2___, ___WORKMAN_R2___
#define ___12_WORKMAN_3___ ___WORKMAN_L3___, ___ORTHO_14_MIDDLE_3___, ___WORKMAN_R3___
#define ___12_NORMAN_1___ ___NORMAN_L1___, ___ORTHO_14_MIDDLE_1___, ___NORMAN_R1___
#define ___12_NORMAN_2___ ___NORMAN_L2___, ___ORTHO_14_MIDDLE_2___, ___NORMAN_R2___
#define ___12_NORMAN_3___ ___NORMAN_L3___, ___ORTHO_14_MIDDLE_3___, ___NORMAN_R3___
#define ___12_DVORAK_B_1___ ___DVORAK_FR_L1___, ___ORTHO_14_MIDDLE_1_BP___, ___DVORAK_FR_R1___
#define ___12_DVORAK_B_2___ ___DVORAK_FR_L2___, ___ORTHO_14_MIDDLE_2_BP___, ___DVORAK_FR_R2___
#define ___12_DVORAK_B_3___ ___DVORAK_FR_L3___, ___ORTHO_14_MIDDLE_3_BP___, ___DVORAK_FR_R3___
#define ___12_BEPO_2___ ___BEPO_FR_L1___, ___ORTHO_14_MIDDLE_1_BP___, ___BEPO_FR_R1___
#define ___12_BEPO_3___ ___BEPO_FR_L2___, ___ORTHO_14_MIDDLE_2_BP___, ___BEPO_FR_R2___
#define ___12_BEPO_4___ ___BEPO_FR_L3___, ___ORTHO_14_MIDDLE_3_BP___, ___BEPO_FR_R3___
// transparent layers.
#define ___14_XMONAD_1___ ___, ___DVORAK_L1___, ___2___, ___DVORAK_R1___, ___
#define ___14_XMONAD_2___ ___, ___DVORAK_L2___, ___2___, ___DVORAK_R2___, ___
#define ___14_XMONAD_3___ ___, ___DVORAK_L3___, ___2___, ___DVORAK_R3___, ___
#define ___14_XMONAD_B_1___ ___, ___DVORAK_FR_L1___, ___2___, ___DVORAK_FR_R1___, ___
#define ___14_XMONAD_B_2___ ___, ___DVORAK_FR_L2___, ___2___, ___DVORAK_FR_R2___, ___
#define ___14_XMONAD_B_3___ ___, ___DVORAK_FR_L3___, ___2___, ___DVORAK_FR_R3___, ___
#define ___14_SYMB_1___ ___SYMBOLS6_1___, ___2___, ___SYMPAD_1___
#define ___14_SYMB_2___ ___SYMBOLS6_2___, ___2___, ___SYMPAD_2___
#define ___14_SYMB_3___ ___SYMBOLS6_3___, ___2___, ___SYMPAD_3___
#define ___14_SYMB_4___ ___SYMBOLS6_4___, ___2___, ___SYMPAD_4___
#define ___14_KP_1___ ___2___, ___FUNCPAD_T___, ___4___, ___KEYPAD_1___, ___
#define ___14_KP_2___ ___2___, ___FUNCPAD_1___, ___4___, ___KEYPAD_2___, ___
#define ___14_KP_3___ ___2___, ___FUNCPAD_2___, ___4___, ___KEYPAD_3___, KC_PENT
#define ___14_KP_4___ ___2___, ___FUNCPAD_3___, ___4___, ___KEYPAD_4___, ___
#define ___14_KP_B_1___ ___2___, ___FUNCPAD_T___, ___4___, ___KEYPAD_1_BP___, ___
#define ___14_KP_B_2___ ___2___, ___FUNCPAD_1___, ___4___, ___KEYPAD_2_BP___, ___
#define ___14_KP_B_3___ ___2___, ___FUNCPAD_2___, ___4___, ___KEYPAD_3_BP___, KC_PENT
#define ___14_KP_B_4___ ___2___, ___FUNCPAD_3___, ___4___, ___KEYPAD_4_BP___, ___
#define ___14_SYMB_B_1___ ___SYMBOLS6_1_BP___, ___2___, ___SYMPAD_1_BP___
#define ___14_SYMB_B_2___ ___SYMBOLS6_2_BP___, ___2___, ___SYMPAD_2_BP___
#define ___14_SYMB_B_3___ ___SYMBOLS6_3_BP___, ___2___, ___SYMPAD_3_BP___
#define ___14_SYMB_B_4___ ___SYMBOLS6_4_BP___, ___2___, ___SYMPAD_4_BP___
#define ___14_MDIA_1___ ___MOUSE_BTNS_L___, ___3___, KC_VOLU, ___MUTE_PRV_PLAY_NXT_STOP___
#define ___14_MDIA_2___ ___, ___MOUSE_LDUR___, ___3___, KC_VOLD, ___VI_ARROWS___, ___
#define ___14_MDIA_3___ ___, ___MWHEEL_LDUR___, ___3___, KC_PGUP, ___MOUSE_BTNS_R___
#define ___14_MDIA_4___ ___2___, ___MACCL___, ___3___, KC_PGDN, ___5___
#define ___14_LAYERS_1___ ___X3___, ___2_LAYERS_B1___, ___4___, ___3_LAYERS_T_BP___, ___X2___
#define ___14_LAYERS_2___ ___X3___, ___2_LAYERS_B2___, ___4___, ___3_LAYERS_T___, ___X2___
#define ___14_LAYERS_3___ ___X2___, ___3_LAYERS_B3___, ___4___, ___3_LAYERS_T_CTL___, ___X2___
#define ___14_RGB_1___ ___, ___RGB_HUE_SAT_INT_UP___, ___4___, ___5___
#define ___14_RGB_2___ ___, ___RGB_HUE_SAT_INT_DN___, RGB_TOG, ___3___, ___RGB_P_B_R_SW_SN___
#define ___14_RGB_3___ ___5___, ___4___, ___RGB_KXGT___, ___
+293
View File
@@ -0,0 +1,293 @@
#pragma once
/*
Copyright 2018 Eric Gebhart <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
#include "process_keycode/process_tap_dance.h"
#include "eeconfig.h"
//#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */
void tap(uint16_t keycode);
bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
typedef union {
uint8_t raw;
struct {
bool clicky_enable :1;
bool rgb_layer_change :1;
bool is_overwatch :1;
bool nuke_switch :1;
};
} userspace_config_t;
// for the creation of dvorak keys on an Bepo keyboard at the OS layer.
// so we can create an array of reasonable size
// for our translation keys. We have to create a
// good range of numbers
#define GR(x) (x-SAFE_RANGE)
uint8_t gr(uint8_t);
void send_keycode(uint8_t);
#define MOD_NONE 0x00
// indexs for the keycode translation table.
#define UNSHIFTED_KEY(key) key_translations[gr(key)][0][0]
#define UNSHIFTED_MODS(key) key_translations[gr(key)][0][1]
#define SHIFTED_KEY(key) key_translations[gr(key)][1][0]
#define SHIFTED_MODS(key) key_translations[gr(key)][1][1]
enum userspace_custom_keycodes {
// keep the keycodes using the send_key function close to SAFE_RANGE
// so the array of keycodes remains a reasonbale size.
DB_1 = SAFE_RANGE, // can always be here
DB_2,
DB_3,
DB_4,
DB_5,
DB_6,
DB_7,
DB_8,
DB_9,
DB_0,
DB_GRV,
DB_SCOLON,
DB_SLASH,
DB_BACKSLASH,
DB_EQL,
DB_DOT,
DB_COMM,
DB_QUOT,
DB_MINUS,
DB_RPRN,
DB_LPRN,
DB_RBRC,
DB_LBRC,
// for symbols layer
DB_HASH,
DB_LCBR,
DB_RCBR,
DB_PIPE,
DB_TILD,
DB_CIRC,
DB_LESS,
DB_GRTR,
// End of dvorak on bepo translation keys.
EPRM,
VRSN,
KC_DVORAK_ON_BEPO,
KC_BEPO,
KC_NORMAN,
KC_QWERTY,
KC_COLEMAK,
KC_DVORAK,
KC_WORKMAN,
KC_MAKE,
KC_RESET,
KC_RGB_T,
KC_SECRET_1,
KC_SECRET_2,
KC_SECRET_3,
KC_SECRET_4,
KC_SECRET_5,
KC_CCCV
};
#define SFTGUI_T(kc) { MT(MOD_LGUI | MOD_LSFT, kc) }
#define SFT_GUI_ESC MT(MOD_LSFT | MOD_LGUI, KC_PGDN) // shift LGUI or Escape.
#define ALT_ENT ALT_T(KC_ENT) // Alt or enter
#define CTL_SPC CTL_T(KC_SPC) // ctrl or space
#define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace
#define ALT_DEL ALT_T(KC_DEL) // Alt or delete
#define GUI_ESC GUI_T(KC_ESC) // Gui or escape
#define ALGR_SYMB ALGR_T(TG(SYMB)) // Alt gre or toggle symbol layer
// OSM keycodes, to keep things clean and easy to change
#define KC_MLSF OSM(MOD_LSFT)
#define KC_MRSF OSM(MOD_RSFT)
#define OS_LGUI OSM(MOD_LGUI)
#define OS_RGUI OSM(MOD_RGUI)
#define OS_LSFT OSM(MOD_LSFT)
#define OS_RSFT OSM(MOD_RSFT)
#define OS_LCTL OSM(MOD_LCTL)
#define OS_RCTL OSM(MOD_RCTL)
#define OS_LALT OSM(MOD_LALT)
#define OS_RALT OSM(MOD_RALT)
#define ALT_APP ALT_T(KC_APP)
#define MG_NKRO MAGIC_TOGGLE_NKRO
//// TAP DANCE
typedef struct {
bool is_press_action;
int state;
} tdtap;
enum {
SINGLE_TAP = 1,
SINGLE_HOLD = 2,
DOUBLE_TAP = 3,
DOUBLE_HOLD = 4,
DOUBLE_SINGLE_TAP = 5, //send two single taps
TRIPLE_TAP = 6,
TRIPLE_HOLD = 7
};
//Tap Dance Declarations
enum {
TD_ESC_CAPS = 0,
TD_TAB_BKTAB = 1,
TD_MDIA_SYMB = 2,
TD_HOME_END = 3,
TD_XMONAD_ESC = 4,
TD_DEF_LAYER_SW = 5,
TD_DEF_OS_LAYER_SW = 6,
TD_MOUSE_BTNS = 7,
TD_DVORAK_BEPO = 8
};
// Tap dance
#define TAB_BKTAB TD(TD_TAB_BKTAB) // Tab or backtab tapdance.
#define MDIA_SYMB_KP_LAYERS TD(TD_MDIA_SYMB) // MDIA, symb, keypad, layouts layer tapdance toggle.
#define DEF_LAYER_SW TD(TD_DEF_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer
#define DEF_OS_LAYER_SW TD(TD_DEF_OS_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer
#define HOME_END TD(TD_HOME_END) // home or end tapdance.
#define XMONAD_ESC TD(TD_XMONAD_ESC) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
#define DVORAK_ET_BEPO TD(TD_DVORAK_BEPO) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
#define TDMOUSE_BTNS TD(TD_MOUSE_BTNS) // hmmm. 1-5
// HOME ROW LAYER TOGGLE (LT) and Shift.
// both sides of the home row have "shift, ___, media , symb, ___" and "___, symb, media, ___, shift".
// so pinky fingers are shift when held and the index and second fingers are symbol and
// media layers when held.
// Dvorak
// shift and layer switch on hold on the home row.
#define KC_SFT_T_A SFT_T(KC_A)
#define KC_SFT_T_S SFT_T(KC_S)
#define KC_LT_SYMB_U LT(SYMB, KC_U)
#define KC_LT_SYMB_H LT(SYMB, KC_H)
#define KC_LT_MDIA_E LT(MDIA, KC_E)
#define KC_LT_MDIA_T LT(MDIA, KC_T)
// Need to add this to the others.
#define KC_LT_KP_N LT(KEYPAD, KC_N)
#define KC_LT_KP_O LT(KEYPAD, KC_O)
// for dvorak on bepo
#define BP_SFT_T_A SFT_T(BP_A)
#define BP_SFT_T_S SFT_T(BP_S)
#define BP_LT_SYMB_U LT(SYMB, BP_U)
#define BP_LT_SYMB_H LT(MDIA, BP_H)
#define BP_LT_MDIA_E LT(MDIA, BP_E)
#define BP_LT_MDIA_T LT(MDIA, BP_T)
// Need to add this to the others.
#define BP_LT_KP_N LT(KEYPAD, BP_N)
#define BP_LT_KP_O LT(KEYPAD, BP_O)
// for bepo on bepo
#define BP_SFT_T_T SFT_T(BP_T)
#define BP_SFT_T_W SFT_T(BP_W)
#define BP_LT_SYMB_I LT(SYMB_ON_BEPO, BP_I)
#define BP_LT_MDIA_E LT(MDIA, BP_E)
#define BP_LT_KP_U LT(KEYPAD, BP_U)
#define BP_LT_SYMB_S LT(SYMB_ON_BEPO, BP_S)
#define BP_LT_MDIA_R LT(MDIA, BP_R)
#define BP_LT_KP_N LT(KEYPAD, BP_N)
#define BP_SFT_T_A SFT_T(BP_A)
#define BP_SFT_T_S SFT_T(BP_S)
#define BP_SFT_T_E SFT_T(BP_E)
#define BP_SFT_T_M SFT_T(BP_M)
#define BP_SFT_T_ECRC SFT_T(BP_ECRC)
#define BP_SFT_T_CCED SFT_T(BP_CCED)
#define BP_LT_SYMB_COMM LT(SYMB,BP_COMM)
//QWERTY
#define KC_SFT_T_SCLN SFT_T(KC_SCLN)
#define KC_LT_MDIA_D LT(MDIA, KC_D)
#define KC_LT_MDIA_K LT(MDIA, KC_K)
#define KC_LT_SYMB_F LT(SYMB, KC_F)
#define KC_LT_SYMB_J LT(SYMB, KC_J)
//COLEMAK
#define KC_SFT_T_O SFT_T(KC_O)
#define KC_LT_MDIA_S LT(MDIA, KC_S)
#define KC_LT_SYMB_T LT(SYMB, KC_T)
#define KC_LT_MDIA_E LT(MDIA, KC_E)
#define KC_LT_SYMB_N LT(SYMB, KC_N)
//WORKMAN
#define KC_SFT_T_I SFT_T(KC_I)
#define KC_LT_MDIA_H LT(MDIA, KC_H)
//NORMAN
// For keys on the homerow. Hold for shift, keypad,mouse,and smbol layers
#define KC_SFT_T_U SFT_T(KC_U)
#define KC_LT_MDIA_I LT(MDIA, KC_I)
// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators).
#define MK_CUT LSFT(KC_DEL) // shift + delete
#define MK_COPY LCTL(KC_INS) // ctrl + insert
#define MK_PASTE LSFT(KC_INS) // shift + insert
#define ___ KC_TRNS
#define XXX KC_NO
// Blocking keys
#define ___X___ XXX
#define ___X2___ XXX, XXX
#define ___X3___ ___X2___, XXX
#define ___X5___ ___X3___, XXX, XXX
#define ___X15___ ___X5___, ___X5___, ___X5___
// Transparent keys
#define ___2___ ___, ___
#define ___3___ ___2___, ___
#define ___4___ ___3___, ___
#define ___5___ ___4___, ___
#define ___6___ ___5___, ___
#define ___14___ ___5___, ___4___, ___5___
#define ___15___ ___5___, ___5___, ___5___
int on_qwerty(void);
int get_xmonad_layer(void);
int cur_dance (qk_tap_dance_state_t *state);
//for the x tap dance. Put it here so it can be used in any keymap
void x_finished (qk_tap_dance_state_t *state, void *user_data);
void x_reset (qk_tap_dance_state_t *state, void *user_data);
+293
View File
@@ -0,0 +1,293 @@
#pragma once
/*
Copyright 2018 Eric Gebhart <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "core_keys.h"
/********************************************************************/
/** Parts are parts, pieces of keysets so we have some decent **/
/** building blocks to make keymaps with. **/
/********************************************************************/
// Since our quirky block definitions are basically a list of comma separated
// arguments, we need a wrapper in order for these definitions to be
// expanded before being used as arguments to the LAYOUT_xxx macro.
#if (!defined(LAYOUT) && defined(KEYMAP))
#define LAYOUT KEYMAP
#endif
#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
#define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__)
#define LAYOUT_ortho_5x14_wrapper(...) LAYOUT_ortho_5x14(__VA_ARGS__)
/********************************************************************/
/** The Core rows of each given layout. **/
/********************************************************************/
//Dvorak on a qwerty software layer in the OS
#define ___DVORAK_L1___ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
#define ___DVORAK_L2___ KC_SFT_T_A, KC_LT_KP_O, KC_LT_MDIA_E, KC_LT_SYMB_U, KC_I
#define ___DVORAK_L3___ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
#define ___DVORAK_R1___ KC_F, KC_G, KC_C, KC_R, KC_L
#define ___DVORAK_R2___ KC_D, KC_LT_SYMB_H, KC_LT_MDIA_T, KC_LT_KP_N, KC_SFT_T_S
#define ___DVORAK_R3___ KC_B, KC_M, KC_W, KC_V, KC_Z
// Qwerty based layers that I don't really use.
#define ___QWERTY_L1___ KC_Q, KC_W, KC_E, KC_R, KC_T
#define ___QWERTY_L2___ KC_SFT_T_A, KC_S, KC_LT_MDIA_D, KC_LT_SYMB_F, KC_G
#define ___QWERTY_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B
#define ___QWERTY_R1___ KC_Y, KC_U, KC_I, KC_O, KC_P
#define ___QWERTY_R2___ KC_H, KC_LT_SYMB_J, KC_LT_MDIA_K, KC_L, KC_SFT_T_SCLN
#define ___QWERTY_R3___ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
// COLEMAK
#define ___COLEMAK_L1___ KC_Q, KC_W, KC_F, KC_P, KC_G
#define ___COLEMAK_L2___ KC_SFT_T_A, KC_R, KC_LT_MDIA_S, KC_LT_SYMB_T, KC_D
#define ___COLEMAK_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B
#define ___COLEMAK_R1___ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
#define ___COLEMAK_R2___ KC_H, KC_LT_SYMB_N, KC_LT_MDIA_E, KC_I, KC_SFT_T_O
#define ___COLEMAK_R3___ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH
// COLEMAK-DH
#define ___COLEMAK_DH_L1___ KC_Q, KC_W, KC_F, KC_P, KC_B
#define ___COLEMAK_DH_L2___ KC_SFT_T_A, KC_R, KC_LT_MDIA_S, KC_LT_SYMB_T, KC_G
#define ___COLEMAK_DH_L3___ KC_Z, KC_X, KC_C, KC_D, KC_V
#define ___COLEMAK_DH_R1___ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
#define ___COLEMAK_DH_R2___ KC_M, KC_LT_SYMB_N, KC_LT_MDIA_E, KC_I, KC_SFT_T_O
#define ___COLEMAK_DH_R3___ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
// WORKMAN
#define ___WORKMAN_L1___ KC_Q, KC_D, KC_R, KC_W, KC_B
#define ___WORKMAN_L2___ KC_SFT_T_A, KC_S, KC_LT_MDIA_H, KC_LT_SYMB_T, KC_G
#define ___WORKMAN_L3___ KC_Z, KC_X, KC_M, KC_C, KC_V
#define ___WORKMAN_R1___ KC_J, KC_F, KC_U, KC_P, KC_SCLN
#define ___WORKMAN_R2___ KC_Y, KC_LT_SYMB_N, KC_LT_MDIA_E, KC_O, KC_SFT_T_I
#define ___WORKMAN_R3___ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
// NORMAN
#define ___NORMAN_L1___ KC_Q, KC_W, KC_D, KC_F, KC_K
#define ___NORMAN_L2___ KC_SFT_T_A, KC_S, KC_LT_MDIA_E, KC_LT_SYMB_T, KC_G
#define ___NORMAN_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B
#define ___NORMAN_R1___ KC_J, KC_U, KC_R, KC_L, KC_SCLN
#define ___NORMAN_R2___ KC_Y, KC_LT_SYMB_N, KC_LT_MDIA_I, KC_O, KC_SFT_T_U
#define ___NORMAN_R3___ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH
// BEPO MAPS
// Dvorak on fr-bepo software layer in the OS.
// for dvorak and all the other qwerty like keyboards on bepo
#define ___DVORAK_FR_L1___ DB_QUOT, DB_COMM, DB_DOT, BP_P, BP_Y
#define ___DVORAK_FR_L2___ BP_SFT_T_A, BP_LT_KP_O, BP_LT_MDIA_E, BP_LT_SYMB_U, BP_I
#define ___DVORAK_FR_L3___ DB_SCOLON, BP_Q, BP_J, BP_K, BP_X
#define ___DVORAK_FR_R1___ BP_F, BP_G, BP_C, BP_R, BP_L
#define ___DVORAK_FR_R2___ BP_D, BP_LT_SYMB_H, BP_LT_MDIA_T, BP_LT_KP_N, BP_SFT_T_S
#define ___DVORAK_FR_R3___ BP_B, BP_M, BP_W, BP_V, BP_Z
// Bepo on fr-bepo software layer
// for bepo on bepo
/* BP_DLR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL, */
#define ___SYMBOL_BEPO_L___ /* BP_DLR */ BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN
/* KC_DEL, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, BP_EQL, */
#define ___SYMBOL_BEPO_R___ BP_AT, BP_PLUS, BP_MINS, BP_SLASH, BP_ASTR /* BP_EQL, BP_PERC */
#define ___BEPO_FR_L1___ BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV
#define ___BEPO_FR_L2___ BP_SFT_T_A, BP_LT_KP_U, BP_LT_SYMB_I, BP_LT_MDIA_E, BP_COMM
#define ___BEPO_FR_L3___ /*BP_ECRC*/ BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K
#define ___BEPO_FR_R1___ /* BP_DCRC,*/ BP_V, BP_D, BP_L, BP_J, BP_Z
#define ___BEPO_FR_R2___ /* BP_C, */ BP_T, BP_LT_SYMB_S, BP_LT_MDIA_R, BP_LT_KP_N, BP_SFT_T_M //BP_CCED
#define ___BEPO_FR_R3___ BP_APOS, BP_Q, BP_G, BP_H, BP_F //BP_SFT_T_W
/* BP_DLR, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, KC_DEL, */
/* KC_TAB, BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV, KC_BSPC, */
/* KC_LSFT, BP_A, BP_U, BP_I, BP_E, BP_COMM, */
/* KC_LCTRL, BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K, KC_ENT, */
/* ESC_FN, BP_ECRC, KC_LGUI, KC_LALT, SPC_RALT, */
/* TT(SWAP), KC_MNXT, */
/* KC_MPLY, */
/* TT(FN), TT(NUMS), KC_MPRV, */
/* /\* right hand *\/ */
/* KC_DEL, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, BP_EQL, */
/* KC_BSPC, BP_DCRC, BP_V, BP_D, BP_L, BP_J, BP_Z, */
/* BP_C, BP_T, BP_S, BP_R, BP_N, M_RSFT, */
/* KC_ENT, BP_APOS, BP_Q, BP_G, BP_H, BP_F, W_RCTL, */
/*******************************************************************/
/** For the top rows. Numbers for most things, symbols for Bepo. **/
/*******************************************************************/
// for everything on qwerty.
#define ___NUMBER_L___ KC_1, KC_2, KC_3, KC_4, KC_5
#define ___NUMBER_R___ KC_6, KC_7, KC_8, KC_9, KC_0
// function key rows, works for everyone.
#define ___FUNC_L___ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
#define ___FUNC_R___ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
#define ___FUNC_1_6___ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6
#define ___FUNC_7_12___ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12
// a top symbol row if someone wants it.
#define ___SYMB_L___ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
#define ___SYMB_R___ KC_CIRC, KC_AMPR, KC_AST, KC_LPRN, KC_RPRN
// For numbers on bepo. Bepo has numbers on shifted keys, the
// reverse of most keyboard layouts.
#define ___NUMBER_BEPO_L___ DB_1, DB_2, DB_3, DB_4, DB_5
#define ___NUMBER_BEPO_R___ DB_6, DB_7, DB_8, DB_9, DB_0
/*******************************************************************/
/* keysets for the auxillary layers. */
/* the KC_P? codes don't work for me. I don't use those shifted */
/* values anyway. */
/*******************************************************************/
// Keypads
#define ___KEYPAD_1___ KC_7, KC_8, KC_9, KC_PSLS
#define ___KEYPAD_2___ KC_4, KC_5, KC_6, KC_PAST
#define ___KEYPAD_3___ KC_1, KC_2, KC_3, KC_PMNS
#define ___KEYPAD_4___ KC_0, KC_DOT, KC_PEQL, KC_PPLS
// Keypad from the default keymap.c of the xd75
#define ___KEYPAD_1_ALT___ KC_P7, KC_P8, KC_P9, KC_MINS
#define ___KEYPAD_2_ALT___ KC_P4, KC_P5, KC_P6, KC_PLUS
#define ___KEYPAD_3_ALT___ KC_P1, KC_P2, KC_P3, KC_PENT
#define ___KEYPAD_4_ALT___ KC_P0, KC_DOT, KC_PENT, KC_PENT
// For Bepo
#define ___KEYPAD_1_BP___ DB_7, DB_8, DB_9, BP_SLASH
#define ___KEYPAD_2_BP___ DB_4, DB_5, DB_6, BP_ASTR
#define ___KEYPAD_3_BP___ DB_1, DB_2, DB_3, DB_MINUS
#define ___KEYPAD_4_BP___ DB_0, DB_DOT, DB_EQL, BP_PLUS
// SYMBOLS
// An arrangement for the left hand with a focus on the ()[]{}s.
#define ___SYMBOLS_1___ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE
#define ___SYMBOLS_2___ KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV
#define ___SYMBOLS_3___ KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD
// A larger 6 column arrangement for the left hand, A merge of dvorak and the above.
#define ___SYMBOLS6_1___ KC_GRV, KC_LT, KC_GT, KC_LCBR, KC_RCBR, KC_HASH
#define ___SYMBOLS6_2___ KC_AMPR, KC_AT, KC_ASTR, KC_LPRN, KC_RPRN, KC_PERC
#define ___SYMBOLS6_3___ KC_DLR, KC_DQT, KC_QUOT, KC_LBRC, KC_RBRC, KC_COLON
#define ___SYMBOLS6_4___ ___2___, KC_TILD, KC_DOT, KC_EXLM, KC_SCLN
#define ___SYMBOLS5_4___ ___, KC_TILD, KC_DOT, KC_EXLM, KC_SCLN
// A symbol pad. Basically the same layout as a number pad with the symbols
// instead of the numbers with some extras around it, in familiar places for the
// right hand.
#define ___SYMPAD_1___ KC_GRV, KC_AMPR, KC_ASTR, KC_LCBR, KC_PLUS, KC_PIPE
#define ___SYMPAD_2___ KC_TILD, KC_DLR, KC_PERC, KC_CIRC, KC_ASTR, KC_GRV
#define ___SYMPAD_3___ ___, KC_EXLM, KC_AT, KC_HASH, KC_MINUS, KC_SLASH
#define ___SYMPAD_4___ ___, KC_RCBR, KC_DOT, KC_EQUAL, KC_UNDS, KC_BSLASH
#define ___5_SYMPAD_4___ KC_RCBR, KC_DOT, KC_EQUAL, KC_UNDS, KC_BSLASH
// Function pad. Same idea as above, but for function keys.
#define ___FUNCPAD_T___ KC_F10, KC_F11, KC_F12
#define ___FUNCPAD_1___ KC_F7, KC_F8, KC_F9
#define ___FUNCPAD_2___ KC_F4, KC_F5, KC_F6
#define ___FUNCPAD_3___ KC_F1, KC_F2, KC_F3
//--- all over again for BEPO
// SYMBOLS FOR BEPO
// The top row. Bepo has symbols not numbers. Numbers are the shifted values.
#define ___SYMBOL_BEPO_L___ /* BP_DLR */ BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN
/* KC_DEL, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, BP_EQL, */
#define ___SYMBOL_BEPO_R___ BP_AT, BP_PLUS, BP_MINS, BP_SLASH, BP_ASTR /* BP_EQL, BP_PERC */
// An arrangement for the left hand with a focus on the ()[]{}s.
#define ___SYMBOLS_1_BP___ KC_EXLM, BP_AT, DB_LCBR, DB_RCBR, DB_PIPE
#define ___SYMBOLS_2_BP___ DB_HASH, BP_DLR, DB_LPRN, DB_RPRN, DB_GRV
#define ___SYMBOLS_3_BP___ BP_PERC, DB_CIRC, DB_LBRC, DB_RBRC, DB_TILD
// A larger 6 column arrangement for the left hand, A merge of dvorak and the above.
#define ___SYMBOLS6_1_BP___ DB_GRV, DB_LESS, DB_GRTR, DB_LCBR, DB_RCBR, DB_HASH
#define ___SYMBOLS6_2_BP___ KC_AMPR, BP_AT, BP_ASTR, DB_LPRN, DB_RPRN, BP_PERC
#define ___SYMBOLS6_3_BP___ BP_DLR, BP_DQOT, DB_QUOT, DB_LBRC, DB_RBRC, KC_COLON
#define ___SYMBOLS6_4_BP___ ___2___, DB_TILD, DB_DOT, KC_EXLM, DB_SCOLON
#define ___SYMBOLS5_4_BP___ ___, DB_TILD, DB_DOT, KC_EXLM, DB_SCOLON
// A symbol pad. Basically the same layout as a number pad with the symbols
// instead of the numbers with some extras around it, in familiar places for the
// right hand.
#define ___SYMPAD_1_BP___ DB_GRV, BP_AMPR, BP_ASTR, DB_LCBR, BP_PLUS, DB_PIPE
#define ___SYMPAD_2_BP___ DB_TILD, BP_DLR, BP_PERC, DB_CIRC, BP_ASTR, DB_GRV
#define ___SYMPAD_3_BP___ ___, BP_EXLM, BP_AT, DB_HASH, BP_MINS, BP_SLSH
#define ___SYMPAD_4_BP___ ___, DB_RCBR, DB_DOT, BP_EQL, BP_MINUS, DB_BACKSLASH
#define ___5_SYMPAD_4_BP___ DB_RCBR, DB_DOT, BP_EQL, BP_MINUS, DB_BACKSLASH
// Parts are parts.
// MOUSE, ARROW and MEDIA KEY SETS
#define ___MOUSE_LDUR___ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
#define ___MWHEEL_LDUR___ KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R
#define ___MOUSE_BTNS_R___ KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5
#define ___MOUSE_BTNS_L___ KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1
#define ___MOUSE_ACCL_012___ KC_ACL0, KC_ACL1, KC_ACL2
#define ___MACCL___ ___MOUSE_ACCL_012___
#define ___PRV_PLAY_NXT_STOP KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP
#define ___VDN_MUTE_VUP___ KC_VOLD, KC_MUTE, KC_VOLU
#define ___MUTE_PRV_PLAY_NXT_STOP___ KC_MUTE, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP
#define ___MUTE_PLAY_STOP___ KC_MUTE, KC_MPLY, KC_MSTP
#define ___VI_ARROWS___ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
// RGB FUNCTION Keysets
// RGB row for the _FN layer from the redo of the default keymap.c
#define ___RGB_HUE_SAT_INT_UP___ RGB_HUI, RGB_SAI, RGB_VAI, RGB_RMOD
#define ___RGB_HUE_SAT_INT_DN___ RGB_HUD, RGB_SAD, RGB_VAD, RGB_MOD
#define ___RGB_MODE_PRV_NXT___ RGB_RMOD, RGB_MOD
#define ___RGB_TOGGLE___ RGB_TOG
#define ___RGB_P_B_R_SW_SN___ RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN
#define ___RGB_KXGT___ RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T
// Print screen, screen lock, pause
#define ___PSCR_SLCK_PAUS___ KC_PSCR, KC_SLCK, KC_PAUS
// LAYER Keyset rows. Changing the Default base layer or the transient layers.
// Some are full length. The baselayers leave the ends open. hence a 13.
// for an ORtho 15.
#define ___2_LAYERS_B1___ DF(BEPO), DF(DVORAK_ON_BEPO)
#define ___2_LAYERS_B2___ DF(COLEMAK), DF(DVORAK)
#define ___3_LAYERS_B3___ DF(QWERTY), DF(NORMAN), DF(WORKMAN)
#define ___3_LAYERS_B4___ ___X3___
// transient layers.
#define ___3_LAYERS_T_BP___ TO(MDIA), TO(SYMB_ON_BEPO), TO(KEYPAD_ON_BEPO)
#define ___3_LAYERS_T___ TO(MDIA), TO(SYMB), TO(KEYPAD)
#define ___3_LAYERS_T_CTL___ TO(_RGB), ___X2___
+11 -5
View File
@@ -14,6 +14,7 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "ericgebhart.h" #include "ericgebhart.h"
#include "quantum.h" #include "quantum.h"
@@ -122,8 +123,6 @@ const uint8_t key_translations[][2][2] = {
[GR(DB_CIRC)] = {{BP_AT, MOD_BIT(KC_RALT)}, {BP_AT, MOD_BIT(KC_RALT)}}, [GR(DB_CIRC)] = {{BP_AT, MOD_BIT(KC_RALT)}, {BP_AT, MOD_BIT(KC_RALT)}},
[GR(DB_LESS)] = {{BP_LGIL, MOD_BIT(KC_RALT)}, {BP_LGIL, MOD_BIT(KC_RALT)}}, [GR(DB_LESS)] = {{BP_LGIL, MOD_BIT(KC_RALT)}, {BP_LGIL, MOD_BIT(KC_RALT)}},
[GR(DB_GRTR)] = {{BP_RGIL, MOD_BIT(KC_RALT)}, {BP_RGIL, MOD_BIT(KC_RALT)}}, [GR(DB_GRTR)] = {{BP_RGIL, MOD_BIT(KC_RALT)}, {BP_RGIL, MOD_BIT(KC_RALT)}},
}; };
@@ -275,7 +274,7 @@ xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record-
// to save on firmware space, since it's limited. // to save on firmware space, since it's limited.
#ifdef MACROS_ENABLED #ifdef MACROS_ENABLED
case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros case KC_OVERWATCH: // Toggle's if we hit "ENTER" or "BACKSPACE" to input macros
if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); } if (record->event.pressed) { userspace_config.is_overwatch ^= 1; eeprom_update_byte(EECONFIG_USER, userspace_config.raw); }
return false; break; return false; break;
#endif // MACROS_ENABLED #endif // MACROS_ENABLED
@@ -304,7 +303,7 @@ xprintf("KL: row: %u, column: %u, pressed: %u\n", record->event.key.col, record-
case CLICKY_TOGGLE: case CLICKY_TOGGLE:
#ifdef AUDIO_CLICKY #ifdef AUDIO_CLICKY
userspace_config.clicky_enable = clicky_enable; userspace_config.clicky_enable = clicky_enable;
eeprom_update_byte(EECONFIG_USERSPACE, userspace_config.raw); eeprom_update_byte(EECONFIG_USER, userspace_config.raw);
#endif #endif
break; break;
#ifdef UNICODE_ENABLE #ifdef UNICODE_ENABLE
@@ -390,13 +389,20 @@ void tap_dance_layer_switch (qk_tap_dance_state_t *state, void *user_data) {
if(on_qwerty()) if(on_qwerty())
layer_invert(SYMB); layer_invert(SYMB);
else else
layer_invert(SYMB_ON_BEPO); layer_invert(SYMB_ON_BEPO);
break; break;
case 2: case 2:
layer_invert(MDIA); layer_invert(MDIA);
break; break;
case 3: case 3:
layer_invert(LAYERS); layer_invert(LAYERS);
break;
case 4:
if(on_qwerty())
layer_invert(KEYPAD);
else
layer_invert(KEYPAD_ON_BEPO);
break;
default: default:
break; break;
} }
+7 -404
View File
@@ -1,52 +1,13 @@
/* #pragma once
Copyright 2018 Eric Gebhart <[email protected]>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#ifndef ericgebhart #ifndef ericgebhart
#define ericgebhart #define ericgebhart
#include "quantum.h" #include QMK_KEYBOARD_H
#include "process_keycode/process_tap_dance.h" #include "base_layers.h"
void tap(uint16_t keycode); //#define ONESHOT_TAP_TOGGLE 2 /* Tapping this number of times holds the key until tapped once again. */
bool process_record_secrets(uint16_t keycode, keyrecord_t *record);
#define EECONFIG_USERSPACE (uint8_t *)19
typedef union {
uint8_t raw;
struct {
bool clicky_enable :1;
bool rgb_layer_change :1;
bool is_overwatch :1;
bool nuke_switch :1;
};
} userspace_config_t;
#define ___ KC_TRNS
#define XXX KC_NO
// The most portable copy/paste keys (windows (mostly), linux, and some terminal emulators).
#define MK_CUT LSFT(KC_DEL) // shift + delete
#define MK_COPY LCTL(KC_INS) // ctrl + insert
#define MK_PASTE LSFT(KC_INS) // shift + insert
#define DVORAK 0 // dvorak layout (default) #define DVORAK 0 // dvorak layout (default)
#define QWERTY 1 #define QWERTY 1
@@ -63,367 +24,9 @@ typedef union {
#define LAYERS 11 // layers and right mousekeys. #define LAYERS 11 // layers and right mousekeys.
#define XMONAD 12 // xmonad ie. dvorak. #define XMONAD 12 // xmonad ie. dvorak.
#define XMONAD_FR 13 // xmonad ie. dvorak. #define XMONAD_FR 13 // xmonad ie. dvorak.
#define KEYPAD 14 // number and Fkey pads
#define KEYPAD_ON_BEPO 15 // number and Fkey pads.
// for the creation of dvorak keys on an Bepo keyboard at the OS layer. #define _RGB 16 // RGB stuff.
// so we can create an array of reasonable size
// for our translation keys. We have to create a
// good range of numbers
#define GR(x) (x-SAFE_RANGE)
uint8_t gr(uint8_t);
void send_keycode(uint8_t);
#define MOD_NONE 0x00
// indexs for the keycode translation table.
#define UNSHIFTED_KEY(key) key_translations[gr(key)][0][0]
#define UNSHIFTED_MODS(key) key_translations[gr(key)][0][1]
#define SHIFTED_KEY(key) key_translations[gr(key)][1][0]
#define SHIFTED_MODS(key) key_translations[gr(key)][1][1]
enum userspace_custom_keycodes {
// keep the keycodes using the send_key function close to SAFE_RANGE
// so the array of keycodes remains a reasonbale size.
DB_1 = SAFE_RANGE, // can always be here
DB_2,
DB_3,
DB_4,
DB_5,
DB_6,
DB_7,
DB_8,
DB_9,
DB_0,
DB_GRV,
DB_SCOLON,
DB_SLASH,
DB_BACKSLASH,
DB_EQL,
DB_DOT,
DB_COMM,
DB_QUOT,
DB_MINUS,
DB_RPRN,
DB_LPRN,
DB_RBRC,
DB_LBRC,
// for symbols layer
DB_HASH,
DB_LCBR,
DB_RCBR,
DB_PIPE,
DB_TILD,
DB_CIRC,
DB_LESS,
DB_GRTR,
// End of dvorak on bepo translation keys.
EPRM,
VRSN,
KC_DVORAK_ON_BEPO,
KC_BEPO,
KC_NORMAN,
KC_QWERTY,
KC_COLEMAK,
KC_DVORAK,
KC_WORKMAN,
KC_MAKE,
KC_RESET,
KC_RGB_T,
KC_SECRET_1,
KC_SECRET_2,
KC_SECRET_3,
KC_SECRET_4,
KC_SECRET_5,
KC_CCCV
};
#define SFTGUI_T(kc) { MT(MOD_LGUI | MOD_LSFT, kc) }
#define SFT_GUI_ESC MT(MOD_LSFT | MOD_LGUI, KC_PGDN) // shift LGUI or Escape.
#define ALT_ENT ALT_T(KC_ENT) // Alt or enter
#define CTL_SPC CTL_T(KC_SPC) // ctrl or space
#define CTL_BSPC CTL_T(KC_BSPC) // ctrl or backspace
#define ALT_DEL ALT_T(KC_DEL) // Alt or delete
#define GUI_ESC GUI_T(KC_ESC) // Gui or escape
#define ALGR_SYMB ALGR_T(TG(SYMB)) // Alt gre or toggle symbol layer
#define KC_SFT_T_U SFT_T(KC_U)
#define KC_SFT_T_H SFT_T(KC_H)
#define KC_LT_SYMB_I LT(SYMB, KC_I)
#define KC_LT_SYMB_D LT(SYMB, KC_D)
// for dvorak on bepo
#define BP_SFT_T_U SFT_T(BP_U)
#define BP_SFT_T_H SFT_T(BP_H)
#define BP_LT_SYMB_D LT(SYMB, BP_D)
// for bepo on bepo
#define BP_SFT_T_T SFT_T(BP_T)
#define BP_LT_SYMB_C LT(SYMB_ON_BEPO, BP_C)
#define BP_LT_SYMB_I LT(SYMB_ON_BEPO, BP_I)
#define BP_SFT_T_E SFT_T(BP_E)
#define BP_SFT_T_ECRC SFT_T(BP_ECRC)
#define BP_SFT_T_CCED SFT_T(BP_CCED)
#define BP_LT_SYMB_COMM LT(SYMB,BP_COMM)
// OSM keycodes, to keep things clean and easy to change
#define KC_MLSF OSM(MOD_LSFT)
#define KC_MRSF OSM(MOD_RSFT)
#define OS_LGUI OSM(MOD_LGUI)
#define OS_RGUI OSM(MOD_RGUI)
#define OS_LSFT OSM(MOD_LSFT)
#define OS_RSFT OSM(MOD_RSFT)
#define OS_LCTL OSM(MOD_LCTL)
#define OS_RCTL OSM(MOD_RCTL)
#define OS_LALT OSM(MOD_LALT)
#define OS_RALT OSM(MOD_RALT)
#define ALT_APP ALT_T(KC_APP)
#define MG_NKRO MAGIC_TOGGLE_NKRO
//// TAP DANCE
typedef struct {
bool is_press_action;
int state;
} tdtap;
enum {
SINGLE_TAP = 1,
SINGLE_HOLD = 2,
DOUBLE_TAP = 3,
DOUBLE_HOLD = 4,
DOUBLE_SINGLE_TAP = 5, //send two single taps
TRIPLE_TAP = 6,
TRIPLE_HOLD = 7
};
//Tap Dance Declarations
enum {
TD_ESC_CAPS = 0,
TD_TAB_BKTAB = 1,
TD_MDIA_SYMB = 2,
TD_HOME_END = 3,
TD_XMONAD_ESC = 4,
TD_DEF_LAYER_SW = 5,
TD_DEF_OS_LAYER_SW = 6,
TD_MOUSE_BTNS = 7,
TD_DVORAK_BEPO = 8
};
// Tap dance
#define TAB_BKTAB TD(TD_TAB_BKTAB) // Tab or backtab tapdance.
#define MDIA_SYMB TD(TD_MDIA_SYMB) // MDIA or Symb layer tapdance toggle.
#define DEF_LAYER_SW TD(TD_DEF_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer
#define DEF_OS_LAYER_SW TD(TD_DEF_OS_LAYER_SW) // dvorak, dvorak_on_bepo, bepo default layer
#define HOME_END TD(TD_HOME_END) // home or end tapdance.
#define XMONAD_ESC TD(TD_XMONAD_ESC) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
#define DVORAK_ET_BEPO TD(TD_DVORAK_BEPO) // Escape, dvorak, media or symb. - tap and hold tap dance. 1-4
#define TDMOUSE_BTNS TD(TD_MOUSE_BTNS) // hmmm. 1-5
int on_qwerty(void);
int get_xmonad_layer(void);
int cur_dance (qk_tap_dance_state_t *state);
//for the x tap dance. Put it here so it can be used in any keymap
void x_finished (qk_tap_dance_state_t *state, void *user_data);
void x_reset (qk_tap_dance_state_t *state, void *user_data);
// Blocks for each of the four major keyboard layouts
// Organized so we can quickly adapt and modify all of them
// at once, rather than for each keyboard, one at a time.
// And this allows for much cleaner blocks in the keymaps.
// For instance Tap/Hold for Control on all of the layouts
// NOTE: These are all the same length. If you do a search/replace
// then you need to add/remove underscores to keep the
// lengths consistent.
// Since our quirky block definitions are basically a list of comma separated
// arguments, we need a wrapper in order for these definitions to be
// expanded before being used as arguments to the LAYOUT_xxx macro.
#if (!defined(LAYOUT) && defined(KEYMAP))
#define LAYOUT KEYMAP
#endif
#define LAYOUT_ergodox_wrapper(...) LAYOUT_ergodox(__VA_ARGS__)
#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
#define KEYMAP_wrapper(...) LAYOUT(__VA_ARGS__)
#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
//Dvorak on a qwerty software layer in the OS
#define ___DVORAK_L1___ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y
#define ___DVORAK_L2___ KC_A, KC_O, KC_E, KC_SFT_T_U, KC_LT_SYMB_I
#define ___DVORAK_L3___ KC_SCLN, KC_Q, KC_J, KC_K, KC_X
#define ___DVORAK_R1___ KC_F, KC_G, KC_C, KC_R, KC_L
#define ___DVORAK_R2___ KC_LT_SYMB_D, KC_SFT_T_H, KC_T, KC_N, KC_S
#define ___DVORAK_R3___ KC_B, KC_M, KC_W, KC_V, KC_Z
// Dvorak on fr-bepo software layer in the OS.
// for dvorak and all the other qwerty like keyboards on bepo
#define ___NUMBER_BEPO_L___ DB_1, DB_2, DB_3, DB_4, DB_5
#define ___NUMBER_BEPO_R___ DB_6, DB_7, DB_8, DB_9, DB_0
#define ___DVORAK_FR_L1___ DB_QUOT, DB_COMM, DB_DOT, BP_P, BP_Y
#define ___DVORAK_FR_L2___ BP_A, BP_O, BP_E, BP_SFT_T_U, BP_LT_SYMB_I
#define ___DVORAK_FR_L3___ DB_SCOLON, BP_Q, BP_J, BP_K, BP_X
#define ___DVORAK_FR_R1___ BP_F, BP_G, BP_C, BP_R, BP_L
#define ___DVORAK_FR_R2___ BP_LT_SYMB_D, BP_SFT_T_H, BP_T, BP_N, BP_S
#define ___DVORAK_FR_R3___ BP_B, BP_M, BP_W, BP_V, BP_Z
// Bepo on fr-bepo software layer
// for bepo on bepo
#define ___SYMBOL_BEPO_L___ /* BP_DLR */ BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN
#define ___SYMBOL_BEPO_R___ BP_AT, BP_PLUS, BP_MINS, BP_SLASH, BP_ASTR /* BP_EQL, BP_PERC */
#define ___BEPO_FR_L1___ BP_B, BP_ECUT, BP_P, BP_O, BP_EGRV
#define ___BEPO_FR_L2___ BP_A, BP_U, BP_I, BP_SFT_T_E, BP_LT_SYMB_COMM
#define ___BEPO_FR_L3___ /*BP_ECRC*/ BP_AGRV, BP_Y, BP_X, BP_DOT, BP_K
#define ___BEPO_FR_R1___ /* BP_DCRC*/ BP_V, BP_D, BP_L, BP_J, BP_Z //, BP_W
#define ___BEPO_FR_R2___ /* BP_C */ BP_SFT_T_T, BP_S, BP_R, BP_N, BP_M //BP_CCED
#define ___BEPO_FR_R3___ BP_APOS, BP_Q, BP_G, BP_H, BP_F
// the bottom rows for keyboards on bepo.
#define ___ERGODOX_BOTTOM_RIGHT_FR___ KC_UP, KC_DOWN, DB_BACKSLASH, LCTL(BP_V), LCTL(BP_C)
#define ___ERGODOX_BOTTOM_LEFT_FR___ LCTL(BP_C), LCTL(BP_V), KC_INS, KC_LEFT, KC_RIGHT
// Since we have 7 default layouts (QWERTY, DVORAK, COLEMAK and WORKMAN, NORMAN,
// 2 of them based on a Bepo software keyboard, --- DVORAK_ON_BEPO and BEPO),
// this allows us to quickly modify the bottom row for all of the layouts
// so we don't have to alter it 4 times and hope that we haven't missed
// anything
#define ___ERGODOX_BOTTOM_LEFT___ LCTL(KC_C), LCTL(KC_V), KC_INS, KC_LEFT, KC_RIGHT
#define ___ERGODOX_BOTTOM_RIGHT___ KC_UP, KC_DOWN, KC_BSLASH, LCTL(KC_V), LCTL(KC_C)
#define ___ERGODOX_THUMB_LEFT___ \
KC_RALT, ALGR_SYMB, \
HOME_END, \
CTL_BSPC, ALT_DEL, XMONAD_ESC
#define ___ERGODOX_THUMB_RIGHT___ \
ALGR_SYMB, TD_MOUSE_BTNS, \
KC_PGUP, \
KC_PGDN, ALT_ENT, CTL_SPC
#define ___ERGODOX_TRANS_THUMBS___ \
___, ___, \
___, \
___, ___, ___ \
#define ___ERGODOX_TRANS_BOTTOM___ \
___,___,___,___,___
#define ___ERGODOX_TRANS_6_ROW___ \
___,___,___,___,___,___
// Qwerty based layers that I don't really use.
#define ___QWERTY_L1___ KC_Q, KC_W, KC_E, KC_R, KC_T
#define ___QWERTY_L2___ KC_A, KC_S, KC_D, KC_F, KC_G
#define ___QWERTY_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B
#define ___QWERTY_R1___ KC_Y, KC_U, KC_I, KC_O, KC_P
#define ___QWERTY_R2___ KC_H, KC_J, KC_K, KC_L, KC_SCLN
#define ___QWERTY_R3___ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLASH
#define ___COLEMAK_L1___ KC_Q, KC_W, KC_F, KC_P, KC_G
#define ___COLEMAK_L2___ KC_A, KC_R, KC_S, KC_T, KC_D
#define ___COLEMAK_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B
#define ___COLEMAK_R1___ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
#define ___COLEMAK_R2___ KC_H, KC_N, KC_E, KC_I, KC_O
#define ___COLEMAK_R3___ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLASH
#define ___COLEMAK_MOD_DH_L1___ KC_Q, KC_W, KC_F, KC_P, KC_B
#define ___COLEMAK_MOD_DH_L2___ KC_A, KC_R, KC_S, KC_T, KC_G
#define ___COLEMAK_MOD_DH_L3___ CTL_T(KC_Z), KC_X, KC_C, KC_D, KC_V
#define ___COLEMAK_MOD_DH_R1___ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
#define ___COLEMAK_MOD_DH_R2___ KC_M, KC_N, KC_E, KC_I, KC_O
#define ___COLEMAK_MOD_DH_R3___ KC_K, KC_H, KC_COMM, KC_DOT, KC_SLASH
#define ___WORKMAN_L1___ KC_Q, KC_D, KC_R, KC_W, KC_B
#define ___WORKMAN_L2___ KC_A, KC_S, KC_H, KC_T, KC_G
#define ___WORKMAN_L3___ KC_Z, KC_X, KC_M, KC_C, KC_V
#define ___WORKMAN_R1___ KC_J, KC_F, KC_U, KC_P, KC_SCLN
#define ___WORKMAN_R2___ KC_Y, KC_N, KC_E, KC_O, KC_I
#define ___WORKMAN_R3___ KC_K, KC_L, KC_COMM, KC_DOT, KC_SLASH
#define ___NORMAN_L1___ KC_Q, KC_W, KC_D, KC_F, KC_K
#define ___NORMAN_L2___ KC_A, KC_S, KC_E, KC_T, KC_G
#define ___NORMAN_L3___ KC_Z, KC_X, KC_C, KC_V, KC_B
#define ___NORMAN_R1___ KC_J, KC_U, KC_R, KC_L, KC_SCLN
#define ___NORMAN_R2___ KC_Y, KC_N, KC_I, KC_O, KC_U
#define ___NORMAN_R3___ KC_P, KC_M, KC_COMM, KC_DOT, KC_SLASH
// For the top rows. Numbers for most things, symbols for Bepo.
// for everything on qwerty.
#define ___NUMBER_L___ KC_1, KC_2, KC_3, KC_4, KC_5
#define ___NUMBER_R___ KC_6, KC_7, KC_8, KC_9, KC_0
// function key rows, works for everyone.
#define ___FUNC_L___ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
#define ___FUNC_R___ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
// Rows for the auxillary layers.
// The symbol layer is for qwerty. I need another one for Bepo...
// the KC_P? codes don't work for me. I don't use those shifted values anyway.
#define ___KEYPAD_1___ KC_7, KC_8, KC_9, KC_PSLS
#define ___KEYPAD_2___ KC_4, KC_5, KC_6, KC_PAST
#define ___KEYPAD_3___ KC_1, KC_2, KC_3, KC_PMNS
#define ___KEYPAD_4___ KC_0, KC_DOT, KC_PEQL, KC_PPLS
#define ___KEYPAD_1_BP___ DB_7, DB_8, DB_9, BP_SLASH
#define ___KEYPAD_2_BP___ DB_4, DB_5, DB_6, BP_ASTR
#define ___KEYPAD_3_BP___ DB_1, DB_2, DB_3, DB_MINUS
#define ___KEYPAD_4_BP___ DB_0, DB_DOT, DB_EQL, BP_PLUS
#define ___SYMBOLS_1___ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE
#define ___SYMBOLS_2___ KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV
#define ___SYMBOLS_3___ KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD
#define ___SYMBOLS_1_BP___ KC_EXLM, BP_AT, DB_LCBR, DB_RCBR, DB_PIPE
#define ___SYMBOLS_2_BP___ DB_HASH, BP_DLR, DB_LPRN, DB_RPRN, DB_GRV
#define ___SYMBOLS_3_BP___ BP_PERC, DB_CIRC, DB_LBRC, DB_RBRC, DB_TILD
#define ___MOUSE_LDUR___ KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
#define ___MWHEEL_LDUR___ KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R
#define ___MOUSE_BTNS_R___ KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5
#define ___MOUSE_BTNS_L___ KC_BTN5, KC_BTN4, KC_BTN3, KC_BTN2, KC_BTN1
#define ___MOUSE_ACCL_012___ KC_ACL0, KC_ACL1, KC_ACL2
#define ___MUTE_PLAY_STOP___ KC_MUTE, KC_MPLY, KC_MSTP
#define ___VI_ARROWS___ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
#define ___LAYERS_L1___ DF(BEPO), DF(DVORAK_ON_BEPO)
#define ___LAYERS_L2___ DF(COLEMAK), DF(DVORAK)
#define ___LAYERS_L3___ DF(QWERTY), DF(NORMAN), DF(WORKMAN)
#define ___LAYERS_L4___ TO(MDIA), TO(SYMB_ON_BEPO), TO(SYMB)
#endif #endif
+4 -7
View File
@@ -1,18 +1,15 @@
USER_NAME := ericgebhart
SRC += ericgebhart.c SRC += ericgebhart.c
MOUSEKEY_ENABLE = yes # Mouse keys MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control EXTRAKEY_ENABLE = yes # Audio control and System control
COMMAND_ENABLE = yes # Commands for debug and configuration COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover - for issues, see github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE = no # USB Nkey Rollover - for issues, see github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard SWAP_HANDS_ENABLE= no # Allow swapping hands of keyboard
KEY_LOCK_ENABLE = yes # Enable the KC_LOCK key KEY_LOCK_ENABLE = yes # Enable the KC_LOCK key
TAP_DANCE_ENABLE = yes # Enable the tap dance feature. TAP_DANCE_ENABLE = yes # Enable the tap dance feature.
CONSOLE_ENABLE = yes # Console for debug CONSOLE_ENABLE = no # Console for debug
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
UNICODE_ENABLE = no UNICODE_ENABLE = no
SLEEP_LED_ENABLE = no SLEEP_LED_ENABLE = no
API_SYSEX_ENABLE = no API_SYSEX_ENABLE = no
RGBLIGHT_ENABLE = no
RGBLIGHT_ANIMATION = no