summaryrefslogtreecommitdiff
path: root/keyboards/keebio/levinson
diff options
context:
space:
mode:
authorDanny <nooges@users.noreply.github.com>2019-02-12 19:57:24 -0500
committerDrashna Jaelre <drashna@live.com>2019-02-12 16:57:24 -0800
commitb2ee290c9f506e42dd9c4577c8147646c405aeb0 (patch)
tree4338c3ee37d2f8380c24624a24d8a4cb81d54693 /keyboards/keebio/levinson
parent994852712dbd183e2c764d624ae8ba7d3efb385a (diff)
[Keyboard] Move Keebio boards to own folder (#5109)
* Move boards into keebio folder * Rename keymap * Update BDN9 files * Update BFO-9000 files * Update Chocopad files * Update Dilly files * Update Fourier files, collapse rev1 into main * Update Iris files * Update Laplace files * Update Levinson files, fix buswerks keymap * Update Nyquist files * Fix keymap issues * Update Quefrency files * Update Rorschach files * Update TF68 files * Update Viterbi files * Update Viterbi files * Update Wavelet files * Reformat default layout * Fix up default folder for Iris * Remove already defined aliases
Diffstat (limited to 'keyboards/keebio/levinson')
-rw-r--r--keyboards/keebio/levinson/config.h25
-rw-r--r--keyboards/keebio/levinson/info.json12
-rw-r--r--keyboards/keebio/levinson/keymaps/atreus/config.h22
-rw-r--r--keyboards/keebio/levinson/keymaps/atreus/keymap.c41
-rw-r--r--keyboards/keebio/levinson/keymaps/atreus/readme.md8
-rw-r--r--keyboards/keebio/levinson/keymaps/bakingpy2u/config.h21
-rw-r--r--keyboards/keebio/levinson/keymaps/bakingpy2u/keymap.c203
-rw-r--r--keyboards/keebio/levinson/keymaps/bakingpy2u/rules.mk2
-rw-r--r--keyboards/keebio/levinson/keymaps/default/config.h28
-rw-r--r--keyboards/keebio/levinson/keymaps/default/keymap.c208
-rw-r--r--keyboards/keebio/levinson/keymaps/default/rules.mk2
-rw-r--r--keyboards/keebio/levinson/keymaps/drogglbecher/config.h17
-rw-r--r--keyboards/keebio/levinson/keymaps/drogglbecher/keymap.c76
-rw-r--r--keyboards/keebio/levinson/keymaps/drogglbecher/rules.mk7
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh/config.h29
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh/keymap.c215
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh/readme.md32
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh/rules.mk1
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh2/config.h33
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh2/keymap.c222
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh2/readme.md32
-rw-r--r--keyboards/keebio/levinson/keymaps/jyh2/rules.mk2
-rw-r--r--keyboards/keebio/levinson/keymaps/losinggeneration/README.md28
-rw-r--r--keyboards/keebio/levinson/keymaps/losinggeneration/config.h42
-rw-r--r--keyboards/keebio/levinson/keymaps/losinggeneration/keymap.c38
-rw-r--r--keyboards/keebio/levinson/keymaps/losinggeneration/rules.mk14
-rw-r--r--keyboards/keebio/levinson/keymaps/mmacdougall/README.md21
-rw-r--r--keyboards/keebio/levinson/keymaps/mmacdougall/config.h20
-rw-r--r--keyboards/keebio/levinson/keymaps/mmacdougall/keymap.c197
-rw-r--r--keyboards/keebio/levinson/keymaps/mmacdougall/rules.mk2
-rw-r--r--keyboards/keebio/levinson/keymaps/steno/config.h34
-rw-r--r--keyboards/keebio/levinson/keymaps/steno/keymap.c148
-rw-r--r--keyboards/keebio/levinson/keymaps/steno/rules.mk7
-rw-r--r--keyboards/keebio/levinson/keymaps/treadwell/config.h32
-rw-r--r--keyboards/keebio/levinson/keymaps/treadwell/keymap.c177
-rw-r--r--keyboards/keebio/levinson/keymaps/treadwell/rules.mk2
-rw-r--r--keyboards/keebio/levinson/keymaps/valgrahf/config.h25
-rw-r--r--keyboards/keebio/levinson/keymaps/valgrahf/keymap.c63
-rw-r--r--keyboards/keebio/levinson/keymaps/valgrahf/rules.mk3
-rw-r--r--keyboards/keebio/levinson/keymaps/xtonhasvim/config.h35
-rw-r--r--keyboards/keebio/levinson/keymaps/xtonhasvim/keymap.c237
-rw-r--r--keyboards/keebio/levinson/keymaps/xtonhasvim/readme.md9
-rw-r--r--keyboards/keebio/levinson/keymaps/xtonhasvim/rules.mk5
-rw-r--r--keyboards/keebio/levinson/levinson.c16
-rw-r--r--keyboards/keebio/levinson/levinson.h25
-rw-r--r--keyboards/keebio/levinson/readme.md28
-rw-r--r--keyboards/keebio/levinson/rev1/config.h59
-rw-r--r--keyboards/keebio/levinson/rev1/rev1.c22
-rw-r--r--keyboards/keebio/levinson/rev1/rev1.h59
-rw-r--r--keyboards/keebio/levinson/rev1/rules.mk1
-rw-r--r--keyboards/keebio/levinson/rev2/config.h59
-rw-r--r--keyboards/keebio/levinson/rev2/rev2.c22
-rw-r--r--keyboards/keebio/levinson/rev2/rev2.h59
-rw-r--r--keyboards/keebio/levinson/rev2/rules.mk1
-rw-r--r--keyboards/keebio/levinson/rules.mk33
55 files changed, 2761 insertions, 0 deletions
diff --git a/keyboards/keebio/levinson/config.h b/keyboards/keebio/levinson/config.h
new file mode 100644
index 0000000000..ca0c79e554
--- /dev/null
+++ b/keyboards/keebio/levinson/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General 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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+#endif
diff --git a/keyboards/keebio/levinson/info.json b/keyboards/keebio/levinson/info.json
new file mode 100644
index 0000000000..2fb8fa9e3e
--- /dev/null
+++ b/keyboards/keebio/levinson/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Levinson",
+ "url": "https://keeb.io",
+ "maintainer": "Keebio",
+ "width": 13,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/keebio/levinson/keymaps/atreus/config.h b/keyboards/keebio/levinson/keymaps/atreus/config.h
new file mode 100644
index 0000000000..a82c15238a
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/atreus/config.h
@@ -0,0 +1,22 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+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
+
+#define MASTER_LEFT
diff --git a/keyboards/keebio/levinson/keymaps/atreus/keymap.c b/keyboards/keebio/levinson/keymaps/atreus/keymap.c
new file mode 100644
index 0000000000..61ad04ef74
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/atreus/keymap.c
@@ -0,0 +1,41 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _RS 1
+#define _LW 2
+
+/*
+ * 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 , . /
+ * esc tab gui shift bksp ctrl || alt space raise - ' enter
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = LAYOUT_ortho_4x12( /* Qwerty */
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
+ KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT ),
+/*
+ * ! @ up { } || pgup 7 8 9 *
+ * # left down right $ || pgdn 4 5 6 +
+ * [ ] ( ) & || ` 1 2 3 \
+ * lower insert super shift bksp ctrl || alt space fn . 0 =
+ */
+[_RS] = LAYOUT_ortho_4x12( /* [> RAISE <] */
+ KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_NO, KC_NO, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
+ KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_NO, KC_NO, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
+ KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_NO, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
+ TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ),
+/*
+ * insert home up end pgup || up F7 F8 F9 F10
+ * del left down right pgdn || down F4 F5 F6 F11
+ * volup reset || F1 F2 F3 F12
+ * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
+ */
+[_LW] = LAYOUT_ortho_4x12( /* [> LOWER <] */
+ KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
+ KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_NO, KC_NO, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
+ KC_NO, KC_VOLU, KC_NO, KC_NO, RESET, KC_NO, KC_NO, KC_NO, KC_F1, KC_F2, KC_F3, KC_F12 ,
+ KC_NO, KC_VOLD, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, TO(_QW), KC_PSCR, KC_SLCK, KC_PAUS )
+};
diff --git a/keyboards/keebio/levinson/keymaps/atreus/readme.md b/keyboards/keebio/levinson/keymaps/atreus/readme.md
new file mode 100644
index 0000000000..0b548ace17
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/atreus/readme.md
@@ -0,0 +1,8 @@
+# Atreus layout port
+
+Port the default Atreus layout to the Levinson/Let's Split.
+
+The purpose is to try out the layout to get a sense of what works in it.
+
+The 'extra' keys on the Levinson are dead in this version, to make a
+more faithful emulation of the atreus layout.
diff --git a/keyboards/keebio/levinson/keymaps/bakingpy2u/config.h b/keyboards/keebio/levinson/keymaps/bakingpy2u/config.h
new file mode 100644
index 0000000000..1db6ea433f
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/bakingpy2u/config.h
@@ -0,0 +1,21 @@
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define TAPPING_TERM 150
+
+#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
diff --git a/keyboards/keebio/levinson/keymaps/bakingpy2u/keymap.c b/keyboards/keebio/levinson/keymaps/bakingpy2u/keymap.c
new file mode 100644
index 0000000000..6a6ab496ab
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/bakingpy2u/keymap.c
@@ -0,0 +1,203 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _FN3 5
+#define _FN4 6
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ FN3,
+ FN4,
+ ADJUST,
+};
+
+#define KC_ KC_TRNS
+
+#define KC_CAPW LGUI(LSFT(KC_3)) // Capture whole screen
+#define KC_CPYW LGUI(LSFT(LCTL(KC_3))) // Copy whole screen
+#define KC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen
+#define KC_CPYP LGUI(LSFT(LCTL(KC_4))) // Copy portion of screen
+#define KC_X0 MT(MOD_LCTL, KC_ESC)
+#define KC_X1 LOWER
+#define KC_X2 RAISE
+#define KC_X3 LT(_FN3, KC_GRV)
+#define KC_X4 MT(MOD_LSFT, KC_ENT)
+#define KC_X5 BL_STEP
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X3 ,LCTL, X1 ,LGUI,SPC ,SPC , BSPC,BSPC, X2 ,RALT, UP ,RGHT
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_COLEMAK] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X0 , A , R , S , T , D , H , N , E , I , O ,QUOT,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X3 ,LCTL, X1 ,LGUI,SPC ,SPC , BSPC,BSPC, X2 ,RALT, UP ,RGHT
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_DVORAK] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X0 , A , O , E , U , I , D , H , T , N , S ,SLSH,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X3 ,LCTL, X1 ,LGUI,SPC ,SPC , BSPC,BSPC, X2 ,RALT, UP ,RGHT
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ X5 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ DEL ,CAPP,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,CPYP, , ,DOWN,LCBR, RCBR, P1 , P2 , P3 ,MINS, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , ,DEL , DEL , , P0 ,PDOT, ,
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ DEL ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ MUTE,MSTP,MPLY,VOLD,PGDN,MINS, PLUS,END , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , ,
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_FN3] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , ,
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistent_default_layer_set(1UL<<_DVORAK);
+ }
+ 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;
+}
diff --git a/keyboards/keebio/levinson/keymaps/bakingpy2u/rules.mk b/keyboards/keebio/levinson/keymaps/bakingpy2u/rules.mk
new file mode 100644
index 0000000000..d7463419b4
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/bakingpy2u/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/levinson/keymaps/default/config.h b/keyboards/keebio/levinson/keymaps/default/config.h
new file mode 100644
index 0000000000..be2d71e8f0
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/default/config.h
@@ -0,0 +1,28 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General 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 USE_I2C
+
+/* Select hand configuration */
+// #define MASTER_RIGHT
+// #define EE_HANDS
diff --git a/keyboards/keebio/levinson/keymaps/default/keymap.c b/keyboards/keebio/levinson/keymaps/default/keymap.c
new file mode 100644
index 0000000000..abf253380b
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/default/keymap.c
@@ -0,0 +1,208 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ BL_STEP, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistent_default_layer_set(1UL<<_DVORAK);
+ }
+ 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;
+}
diff --git a/keyboards/keebio/levinson/keymaps/default/rules.mk b/keyboards/keebio/levinson/keymaps/default/rules.mk
new file mode 100644
index 0000000000..d7463419b4
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/levinson/keymaps/drogglbecher/config.h b/keyboards/keebio/levinson/keymaps/drogglbecher/config.h
new file mode 100644
index 0000000000..ef96ff00b1
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/drogglbecher/config.h
@@ -0,0 +1,17 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "config_common.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+/* #define USE_I2C */
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+/* #define _MASTER_RIGHT */
+/* #define EE_HANDS */
+
+#endif
diff --git a/keyboards/keebio/levinson/keymaps/drogglbecher/keymap.c b/keyboards/keebio/levinson/keymaps/drogglbecher/keymap.c
new file mode 100644
index 0000000000..b8d2dc5949
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/drogglbecher/keymap.c
@@ -0,0 +1,76 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _FN0 0
+#define _FN1 1
+#define _FN2 2
+
+#define KC_X1 MO(_FN1)
+#define KC_X2 MO(_FN2)
+
+#define KC_LPRN LSFT(KC_9) // (
+#define KC_RPRN LSFT(KC_0) // )
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ ESC │ q │ w │ e │ r │ t │ │ y │ u │ i │ o │ p │ BS │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ CTRL │ a │ s │ d │ f │ g │ │ h │ j │ k │ l │ " ' │ RET │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ SHFT │ z │ x │ c │ v │ b │ │ n │ m │ [ { │ ] } │ ; : │ SHFT │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ L1 │ ALT │ L2 │ TAB | SPC │ SPC │ │ SPC │ SPC │ , < │ . > │ - _ │ / ? │
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+
+ [_FN0] = LAYOUT_ortho_4x12( \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_LBRC, KC_RBRC, KC_SCLN, KC_RSFT, \
+ KC_X1, KC_LALT, KC_X2, KC_TAB, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_COMM, KC_DOT, KC_MINS, KC_SLSH \
+ ),
+
+ /* ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ DEL │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ ä │ ö │ ü │ ß │ │ │ LEFT │ DOWN │ UP │ RGT │ │ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ Ä │ Ö │ Ü │ € │ │ │ │ │ ( │ ) │ │ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ | │ │ | SPC │ SPC │ │ SPC │ SPC │ │ │ │ \ | │
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+
+ [_FN1] = LAYOUT_ortho_4x12( \
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, UC(L'ä'), UC(L'ö'), UC(L'ü'), UC(L'ß'), _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_PIPE, \
+ _______, UC(L'Ä'), UC(L'Ö'), UC(L'Ü'), UC(L'€'), _______, _______, _______, KC_LPRN, KC_RPRN, _______, _______, \
+ _______, _______, _______, KC_TAB, KC_SPC, KC_SPC, KC_SPC, KC_SPC, _______, _______, _______, KC_BSLS \
+ ),
+
+ /* ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ ` │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ~ │ + │ = │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ │ │ │ │ │ │ HOME │ PGDN │ PGUP │ END │ │ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ │ │ │ SPC │ SPC │ │ SPC │ SPC │ │ VOL+ │ VOL- │ MUTE │
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+
+ [_FN2] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_TILD, KC_PLUS, KC_PEQL, \
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, _______, _______, _______, KC_SPC, KC_SPC, KC_SPC, KC_SPC, _______, KC_VOLD, KC_VOLU, KC_MUTE \
+ )
+
+};
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+};
diff --git a/keyboards/keebio/levinson/keymaps/drogglbecher/rules.mk b/keyboards/keebio/levinson/keymaps/drogglbecher/rules.mk
new file mode 100644
index 0000000000..b2a5451c82
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/drogglbecher/rules.mk
@@ -0,0 +1,7 @@
+AUTO_SHIFT_ENABLE = no
+AUTO_SHIFT_MODIFIERS = no
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
+UNICODE_ENABLE = yes
+DEFAULT_FOLDER = levinson/rev2
+
diff --git a/keyboards/keebio/levinson/keymaps/jyh/config.h b/keyboards/keebio/levinson/keymaps/jyh/config.h
new file mode 100644
index 0000000000..d3e598bd09
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh/config.h
@@ -0,0 +1,29 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+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
+
+/* Select hand configuration */
+#define MASTER_LEFT
+
+/* Tap Dance timing */
+#define TAPPING_TERM 150
+
+/* Toggling layer requires # taps */
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/keebio/levinson/keymaps/jyh/keymap.c b/keyboards/keebio/levinson/keymaps/jyh/keymap.c
new file mode 100644
index 0000000000..d8cfa7e06b
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh/keymap.c
@@ -0,0 +1,215 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3 /* Symbols, Media */
+#define _RAISE 4 /* Numbers, Arrows */
+#define _FUNC 5 /* Function Keys */
+#define _NUMS 6 /* Numpad */
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define KC_ KC_TRNS
+
+// tap toggle numpad on
+#define NUMPAD TT(_NUMS)
+
+// Mod Tap Definitions
+// -------------------
+ // Tap Hold
+ // ------------------
+#define CTL_ESC MT(MOD_LCTL, KC_ESC) // Esc Left Control
+#define SFT_ENT MT(MOD_RSFT, KC_ENT) // Enter Right Shift
+#define CTL_SPC MT(MOD_LCTL, KC_SPC) // Space Left Control
+#define ALT_SPC MT(MOD_LALT, KC_SPC) // Space Left Alt
+#define ALT_BSP MT(MOD_LALT, KC_BSPC) // Bkspace Left Alt
+#define HPR_TAB MT(MOD_HYPR, KC_TAB) // Tab Hyper (Super+Ctrl+Alt+Shift)
+#define HPR_GRV MT(MOD_HYPR, KC_GRV) // ` Hyper
+#define HPR_TIL MT(MOD_HYPR, KC_TILD) // ~ Hyper
+#define MEH_TIL MT(MOD_MEH, KC_GRV) // ` Meh (Ctrl+Alt+Shift)
+#define SFT_MIN MT(MOD_LSFT, KC_MINS) // - Left Shift
+#define NPD_UND LT(_NUMS, KC_UNDS) // _ Layer Numpad
+#define FNC_PIP LT(_FUNC, KC_PIPE) // | Layer Function Keys
+
+#define CTL_DEL MT(MOD_LCTL, KC_DEL) // Del Left Control
+#define CTL_QOT MT(MOD_RCTL, KC_QUOT) // ' Right Control
+#define CTL_BSL MT(MOD_RCTL, KC_BSLS) // \ Right Control
+#define CTL_PIP MT(MOD_RCTL, KC_PIPE) // | Right Control
+
+// Redefine for LAYOUT_kc
+#define KC_CTL_BSL CTL_BSL
+#define KC_CTL_PIP CTL_PIP
+#define KC_CTL_DEL CTL_DEL
+#define KC_HPR_TIL HPR_TIL
+#define KC_HPR_GRV HPR_GRV
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ *
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B | | N | M | , | . | / | Enter|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Numpd| Meh | Meta | Alt | Lower| Space| | Space| Raise| Alt | Meta | Hyper| Func |
+ * `-----------------------------------------' `-----------------------------------------'
+ *
+ * with Hold (Emacs-oriented)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Hyper| | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | | | | | | | | | | | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| | | | | | | | | | | | Shift|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_ortho_4x12(
+ HPR_TAB, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
+ CTL_ESC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, CTL_QOT,
+ SFT_MIN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, SFT_ENT,
+ NUMPAD , KC_MEH , KC_LGUI, KC_LALT, LOWER, CTL_SPC, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_HYPR, MO(_FUNC)
+ ),
+
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Left | Up | Down | Right| ( | | ) | - | = | [ | ] | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | ; | ' | * | , | { | | } | _ | + | . | / | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RAISE] = LAYOUT_kc_ortho_4x12(
+ HPR_GRV, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
+ ,LEFT, UP ,DOWN,RGHT,LPRN, RPRN,MINS, EQL,LBRC,RBRC,CTL_PIP,
+ ,COLN,QUOT,ASTR,COMM,LCBR, RCBR,UNDS,PLUS, , , ,
+ , , , , , , , , , , ,
+ ),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | Vol+ | Mute | Play | PgUp | : | | ' | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Vol- | < M | M > | PgDn | ; | | " | | | , | . | / | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_LOWER] = LAYOUT_kc_ortho_4x12(
+ HPR_TIL,EXLM, AT ,HASH,DLR , PERC , CIRC,AMPR,ASTR,LPRN,RPRN, ,
+ CTL_DEL,VOLU,MUTE,MPLY,PGUP, COLN , QUOT,MINS, EQL,LBRC,RBRC,CTL_BSL,
+ ,VOLD,MPRV,MNXT,PGDN, SCLN , DQUO,PIPE,COMM, DOT,SLSH, ,
+ , , , , , , , , , , ,
+ ),
+
+ [_FUNC] = LAYOUT_kc_ortho_4x12(
+// ,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , F21, F22, F23, F24, NO , NO , NO , NO , NO , NO , ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , ,
+// `----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_NUMS] = LAYOUT_kc_ortho_4x12(
+// ,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,SLSH, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,CAPS, INS,HOME,PGUP,LPRN, RPRN, 4 , 5 , 6 ,ASTR, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,NLCK, DEL, END,PGDN,SCLN, COMM, 1 , 2 , 3 ,MINS, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , 0 ,DOT ,EQL ,PLUS,
+// `----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_ADJUST] = LAYOUT_ortho_4x12(
+// ,-------+--------+--------+--------+--------+--------. ,-------+--------+--------+--------+--------+--------.
+ RESET , XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL , \
+// |-------+--------+--------+--------+--------+--------| |-------+--------+--------+--------+--------+--------|
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+// |-------+--------+--------+--------+--------+--------| |-------+--------+--------+--------+--------+--------|
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+// |-------+--------+--------+--------+--------+--------| |-------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+// `-------+--------+--------+--------+--------+--------' `-------+--------+--------+--------+--------+--------,
+ )
+
+/*
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+};
+
+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;
+}
diff --git a/keyboards/keebio/levinson/keymaps/jyh/readme.md b/keyboards/keebio/levinson/keymaps/jyh/readme.md
new file mode 100644
index 0000000000..e20424e518
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh/readme.md
@@ -0,0 +1,32 @@
+# jyh's levinson layout
+
+[Levinson](https://keeb.io/products/levinson-lets-split-w-led-backlight)
+built on rev2 PCBs. A split 4x12 keyboard with LED backlights.
+
+The layout is oriented towards needs for programming, Emacs, XMonad,
+and experience with 60% keyboards with no base layer arrow keys
+(Poker). It makes heavy use of modifiers and layers.
+
+## Layout features
+
+ * Extensive use of _Mod Tap_, e.g.
+ * Tap sends Esc, Hold sends Left Control
+ * Tap sends Enter, Hold sends Right Shift
+ * ... and many more
+ * Hyper and Meh keys
+ * Right modifier keys in place of arrow keys
+ * Arrows are instead available in two alternate locations:
+ * WASD arrows on _Adjust_
+ * Arrow cluster on _Raise_ (inspired by hexwire)
+ * Centered symbol/bracket cluster on _Lower/Raise_
+ * Inspired by hexwire layout
+ * Programming-oriented
+ * Spacebar sends modifier keys on hold (_this is finicky in practice. may shut off completely_)
+ * Control ~~and Alt/Meta~~ on left ~~and right~~ space, respectively
+ * Strict space available on _Function_ and _Numpad_ layers
+ * For Emacs keychords
+ * Extra dedicated layers
+ * Numpad (available with tap toggle)
+ * Function key (F01-24)
+ * Redunant keys where it is convenient to have characters together
+ on one layer
diff --git a/keyboards/keebio/levinson/keymaps/jyh/rules.mk b/keyboards/keebio/levinson/keymaps/jyh/rules.mk
new file mode 100644
index 0000000000..66110cfcc0
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE=yes
diff --git a/keyboards/keebio/levinson/keymaps/jyh2/config.h b/keyboards/keebio/levinson/keymaps/jyh2/config.h
new file mode 100644
index 0000000000..f50674bb88
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh2/config.h
@@ -0,0 +1,33 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+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
+
+/* Select hand configuration */
+#define MASTER_LEFT
+
+/* Tap Dance timing */
+#define TAPPING_TERM 150
+
+/* Toggling layer requires # taps */
+#define TAPPING_TOGGLE 3
+
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+
diff --git a/keyboards/keebio/levinson/keymaps/jyh2/keymap.c b/keyboards/keebio/levinson/keymaps/jyh2/keymap.c
new file mode 100644
index 0000000000..4b7442928e
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh2/keymap.c
@@ -0,0 +1,222 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3 /* Symbols, Media */
+#define _RAISE 4 /* Numbers, Arrows */
+#define _FUNC 5 /* Function Keys */
+#define _NUMS 6 /* Numpad */
+#define _ADJUST 16
+
+/* short layer aliases */
+#define _QW _QWERTY
+#define _LW _LOWER
+#define _RS _RAISE
+#define _NM _NUMS
+#define _AD _ADJUST
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ MKITPNK,
+ DYNAMIC_MACRO_RANGE
+};
+
+#include "dynamic_macro.h"
+
+#define DREC_1 DYN_REC_START1
+#define DREC_2 DYN_REC_START2
+#define DPLAY_1 DYN_MACRO_PLAY1
+#define DPLAY_2 DYN_MACRO_PLAY2
+#define DSTOP DYN_REC_STOP
+
+
+// Mod Tap Definitions
+// -------------------
+ // Tap Hold
+ // ------------------
+#define GUI_GRV MT(MOD_LGUI, KC_GRV) // ` Meta
+#define CTL_ESC MT(MOD_LCTL, KC_ESC) // Esc Left Control
+#define SFT_MIN MT(MOD_LSFT, KC_MINS) // - Left Shift
+#define MEH_LBC MT(MOD_MEH, KC_LBRC) // [ Meh
+#define CTL_BSP MT(MOD_LCTL, KC_BSPC) // Bkspce Left Control
+#define HPR_RBC MT(MOD_HYPR, KC_RBRC) // ] Hyper
+#define SFT_EQL MT(MOD_RSFT, KC_EQL) // = Right Shift
+#define GUI_BSL MT(MOD_RGUI, KC_BSLS) // \ Meta
+
+#define NUM_TAB LT(_NUMS, KC_TAB) // Tab Layer Numpad
+
+#define CTL_DEL MT(MOD_LCTL, KC_DEL) // Del Left Control
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B | | N | M | , | . | / | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | [ | Meta | Alt | Lower| Bksp | | Space| Raise| Alt | Meta | ] | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ * with Hold (Emacs-oriented)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Meta | | | | | | | | | | | | Meta |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| | | | | | | | | | | | Shift|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Numpd| Meh | | | | Ctrl | | | | | | Hyper| |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_QW] = LAYOUT_ortho_4x12(
+ GUI_GRV, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , GUI_BSL,
+ CTL_ESC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ SFT_MIN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, SFT_EQL,
+ NUM_TAB, MEH_LBC, KC_LGUI, KC_LALT, LOWER , CTL_BSP, KC_SPC , RAISE , KC_RALT, KC_RGUI, HPR_RBC, KC_ENT
+ ),
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Left | Up | Down | Right| ; | | ' | 4 | 5 | 6 | * | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | { | } | ( | ) | , | | - | 1 | 2 | 3 | / | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | |Adjust| | | | RAISE| . | 0 | + | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RS] = LAYOUT_ortho_4x12(
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
+ _______, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, KC_SCLN, KC_QUOT, KC_4 , KC_5 , KC_6 , KC_ASTR, _______,
+ _______, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_COMM, KC_MINS, KC_1 , KC_2 , KC_3 , KC_SLSH, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_DOT , KC_0 , KC_PLUS, _______
+ ),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | Vol+ | Mute | Play | PgUp | Home | | F1 | F2 | F3 | F4 | F5 | F6 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Vol- | < M | M > | PgDn | End | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | |LOWER | | | |Adjust| | | | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_LW] = LAYOUT_ortho_4x12(
+ _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ CTL_DEL, KC_VOLU, KC_MUTE, KC_MPLY, KC_PGUP, KC_HOME, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
+ _______, KC_VOLD, KC_MPRV, KC_MNXT, KC_PGDN, KC_END , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* Numpad
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | PrSc | ScrLk| Pause| | | | 7 | 8 | 9 | 0 | Lock |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | Ins | Home | PgUp | | | | 4 | 5 | 6 | / | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | Del | End | PgDn | | | | 1 | 2 | 3 | * | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |NUMPAD| | | | | | | | 0 | . | + | - | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_NM] = LAYOUT_ortho_4x12(
+ XXXXXXX, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, XXXXXXX, XXXXXXX, KC_7 , KC_8 , KC_9 , KC_0 , TO(_NM),
+ XXXXXXX, XXXXXXX, KC_INS , KC_HOME, KC_PGUP, XXXXXXX, XXXXXXX, KC_4 , KC_5 , KC_6 , KC_SLSH, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_DEL , KC_END , KC_PGDN, XXXXXXX, XXXXXXX, KC_1 , KC_2 , KC_3 , KC_ASTR, KC_EQL ,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, KC_0 , KC_DOT , KC_PLUS, KC_MINS, _______
+ ),
+
+/* Adjust
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Reset| | Up | | | Rec1 | | Rec2 | Plain| Snake|Gradnt| | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Caps | Left | Down | Right|MkItPk| Play1| | Play2| RGB | HUE+ | SAT+ | BRI+ | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | Stop1| | Stop2| MODE | HUE- | SAT- | BRI- | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_ortho_4x12(
+ RESET , XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, DREC_1 , DREC_2 , RGB_M_P, RGB_M_SN,RGB_M_G, XXXXXXX, KC_DEL ,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, MKITPNK, DPLAY_1, DPLAY_2, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DSTOP , DSTOP , RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+void make_it_pink_blue(void) {
+ uint16_t blue_hue = 210;
+ uint16_t pink_hue = 315;
+
+ /* key is pressed */
+ uint16_t hue = rgblight_get_hue();
+ uint8_t sat = rgblight_get_sat();
+ uint8_t val = rgblight_get_val();
+
+ if (hue != blue_hue)
+ rgblight_sethsv(blue_hue, sat, val);
+ else
+ rgblight_sethsv(pink_hue, sat, val);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record))
+ return false;
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ 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;
+ case MKITPNK:
+ if (record->event.pressed)
+ make_it_pink_blue();
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/keebio/levinson/keymaps/jyh2/readme.md b/keyboards/keebio/levinson/keymaps/jyh2/readme.md
new file mode 100644
index 0000000000..45ca956922
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh2/readme.md
@@ -0,0 +1,32 @@
+# jyh's levinson layout
+
+[Levinson](https://keeb.io/products/levinson-lets-split-w-led-backlight)
+built on rev2 PCBs. A split 4x12 keyboard with LED backlights.
+
+The layout is oriented towards needs for programming, Emacs, XMonad,
+and experience with 60% keyboards with no base layer arrow keys
+(Poker). It makes heavy use of modifiers and layers. It is influenced
+by good ideas from the Atreus keyboard layout.
+
+## Layout features
+
+ * Extensive use of _Mod Tap_, e.g.
+ * Tap sends Esc, Hold sends Left Control
+ * Tap sends Tab, Hold activates Numpad layer
+ * Tap sends - , Hold sends Shift
+ * ... and many more
+ * Places Tab and Enter on bottom corners, for hitting with palm
+ * Meta is available on top corners, for controlling XMonad
+ * Control on center key, for Emacs (among other things)
+ * Backspace (Control Hold) and Space on center keys
+ * All 60% keys available on base layer, except for numbers
+ * Hyper and Meh keys
+ * Right modifier keys in place of arrow keys
+ * Arrows are instead available in two alternate locations:
+ * WASD arrows on _Adjust_
+ * Arrow cluster on _Raise_ (inspired by hexwire)
+ * Numpad and Numrow on _Raise_ layer. Each is faster in some contexts
+ * Function keys on _Lower_
+ * Dynamic macros from QMK firmware on _Adjust_
+ * Redunant keys where it is convenient to have characters together
+ on one layer
diff --git a/keyboards/keebio/levinson/keymaps/jyh2/rules.mk b/keyboards/keebio/levinson/keymaps/jyh2/rules.mk
new file mode 100644
index 0000000000..fbb3b49d6b
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/jyh2/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE=yes
+BOOTMAGIC_ENABLE=no
diff --git a/keyboards/keebio/levinson/keymaps/losinggeneration/README.md b/keyboards/keebio/levinson/keymaps/losinggeneration/README.md
new file mode 100644
index 0000000000..44c904508a
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/losinggeneration/README.md
@@ -0,0 +1,28 @@
+losinggeneration's Levinson Layout
+============================
+
+See description of the layout in the common folder
+[here](../../../../users/losinggeneration/README.md)
+
+## Features
+- Adjust
+ - Removed AGSwap, AGNorm, & Del
+ - Added Caps Lock, F1-F12 in a 4x3 grid, backlight control, arrow cluster,
+ and layer transitions to the new layers.
+ - Moved Reset & Audio control to the right side
+
+## Layouts
+
+### Adjust (Lower + Raise)
+
+```
+ ,-----------------------------------------..-----------------------------------------.
+ | | F1 | F2 | F3 | F4 |BL Off|| RESET| Game |Numpad|Mouse | |Sleep |
+ |------+------+------+------+------+------||------+------+------+------+------+------|
+ | | F5 | F6 | F7 | F8 |BL Tg ||Aud on|Qwerty|Colmak|Workmn|Dvorak| |
+ |------+------+------+------+------+------||------+------+------+------+------+------|
+ | CAPS | F9 | F10 | F11 | F12 |BL On ||Audoff| | | | Up | |
+ |------+------+------+------+------+------||------+------+------+------+------+------|
+ | | | | | | || | | XXX | Left | Down |Right |
+ `-----------------------------------------''-----------------------------------------'
+```
diff --git a/keyboards/keebio/levinson/keymaps/losinggeneration/config.h b/keyboards/keebio/levinson/keymaps/losinggeneration/config.h
new file mode 100644
index 0000000000..917c6a98ba
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/losinggeneration/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+Copyright 2018 Harley Laue <losinggeneration@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+long with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include QMK_KEYBOARD_CONFIG_H
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+/* #define USE_I2C */
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+/* #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
+
+#endif
diff --git a/keyboards/keebio/levinson/keymaps/losinggeneration/keymap.c b/keyboards/keebio/levinson/keymaps/losinggeneration/keymap.c
new file mode 100644
index 0000000000..aea6aed78c
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/losinggeneration/keymap.c
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+#include "losinggeneration-config.h"
+#include "losinggeneration-keymap.h"
+
+extern keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = CATMAP( QWERTY_LAYER ),
+[_COLEMAK] = CATMAP( COLEMAK_LAYER ),
+[_WORKMAN] = CATMAP( WORKMAN_LAYER ),
+[_DVORAK] = CATMAP( DVORAK_LAYER ),
+[_GAME] = CATMAP( GAME_LAYER ),
+[_NUMPAD] = CATMAP( NUMPAD_LAYER ),
+[_MOUSE] = CATMAP( MOUSE_LAYER ),
+[_LOWER] = CATMAP( LOWER_LAYER ),
+[_RAISE] = CATMAP( RAISE_LAYER ),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------..-----------------------------------------.
+ * | | F1 | F2 | F3 | F4 |BL Off|| RESET| Game |Numpad|Mouse | |Sleep |
+ * |------+------+------+------+------+------||------+------+------+------+------+------|
+ * | | F5 | F6 | F7 | F8 |BL Tg ||Aud on|Qwerty|Colmak|Workmn|Dvorak| |
+ * |------+------+------+------+------+------||------+------+------+------+------+------|
+ * | CAPS | F9 | F10 | F11 | F12 |BL On ||Audoff| | | | Up | |
+ * |------+------+------+------+------+------||------+------+------+------+------+------|
+ * | | | | | | || | | XXX | Left | Down |Right |
+ * `-----------------------------------------''-----------------------------------------'
+ */
+[_ADJUST] = CATMAP( \
+ _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , BL_OFF , RESET , TO_GAME, TO_NUM , TO_MS , _______, KC_SLEP, \
+ _______, KC_F5 , KC_F6 , KC_F7 , KC_F8 , BL_TOGG, AU_ON , QWERTY , COLEMAK, WORKMAN, DVORAK , _______, \
+ KC_CAPS, KC_F9 , KC_F10, KC_F11 , KC_F12 , BL_ON , AU_OFF , _______, _______, _______, KC_UP , _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT \
+)
+
+};
+
diff --git a/keyboards/keebio/levinson/keymaps/losinggeneration/rules.mk b/keyboards/keebio/levinson/keymaps/losinggeneration/rules.mk
new file mode 100644
index 0000000000..ee3ea67f7d
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/losinggeneration/rules.mk
@@ -0,0 +1,14 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+AUDIO_ENABLE = no # Audio output on port C6
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+COMMAND_ENABLE = no # Commands for debug and configuration
+CONSOLE_ENABLE = no # Console for debug(+400)
+MIDI_ENABLE = no # MIDI controls
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+
diff --git a/keyboards/keebio/levinson/keymaps/mmacdougall/README.md b/keyboards/keebio/levinson/keymaps/mmacdougall/README.md
new file mode 100644
index 0000000000..bae8c8a4b8
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/mmacdougall/README.md
@@ -0,0 +1,21 @@
+mmacdougall's Levinson Layout
+============================
+
+Similar to default layout, however RGB & backlight controls are mapped to adjust layer
+
+## Layouts
+
+### Adjust (Lower + Raise)
+
+```
+/* Adjust (Lower + Raise)
+ ,-----------------------------------------------------------------------------------.
+ | | Reset| | | | | | | | | | Del |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ |B Step|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/keebio/levinson/keymaps/mmacdougall/config.h b/keyboards/keebio/levinson/keymaps/mmacdougall/config.h
new file mode 100644
index 0000000000..63dd5bc88f
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/mmacdougall/config.h
@@ -0,0 +1,20 @@
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #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
diff --git a/keyboards/keebio/levinson/keymaps/mmacdougall/keymap.c b/keyboards/keebio/levinson/keymaps/mmacdougall/keymap.c
new file mode 100644
index 0000000000..76d9c72998
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/mmacdougall/keymap.c
@@ -0,0 +1,197 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |B Step|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ BL_STEP, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ 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;
+}
diff --git a/keyboards/keebio/levinson/keymaps/mmacdougall/rules.mk b/keyboards/keebio/levinson/keymaps/mmacdougall/rules.mk
new file mode 100644
index 0000000000..d7463419b4
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/mmacdougall/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/levinson/keymaps/steno/config.h b/keyboards/keebio/levinson/keymaps/steno/config.h
new file mode 100644
index 0000000000..9cbc148e42
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/steno/config.h
@@ -0,0 +1,34 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_I2C
+// #define USE_SERIAL
+
+
+#define FORCE_NKRO //For Steno.
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+
diff --git a/keyboards/keebio/levinson/keymaps/steno/keymap.c b/keyboards/keebio/levinson/keymaps/steno/keymap.c
new file mode 100644
index 0000000000..cd7493467a
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/steno/keymap.c
@@ -0,0 +1,148 @@
+#include QMK_KEYBOARD_H
+#include "keymap_steno.h"
+
+extern keymap_config_t keymap_config;
+
+#define _PLOVER 0
+#define _QWERTY 1
+#define _LOWER 2
+#define _RAISE 3
+#define _ADJUST 4
+
+enum custom_keycodes
+{
+ PLOVER = SAFE_RANGE,
+ QWERTY,
+ LOWER,
+ RAISE,
+ ADJUST,
+ EXT_QWE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
+{
+
+ [_PLOVER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ STN_PWR, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ STN_FN, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, STN_RE1, STN_RE2, XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX, XXXXXXX, QWERTY, XXXXXXX
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LGUI, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LALT, KC_MINUS, KC_TAB, KC_LCTL, LOWER, KC_SPC, KC_ENT, RAISE, KC_RCTL, KC_RGUI, EXT_QWE, KC_RALT
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_7, KC_8, KC_9, KC_PLUS, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_F7, KC_F8, KC_LEFT, KC_UP, KC_RGHT, KC_F9, KC_PSLS, KC_4, KC_5, KC_6, KC_MINUS, KC_MUTE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_F10, KC_F11, KC_DOWN, KC_F11, KC_F12, KC_PAST, KC_1, KC_2, KC_3, KC_EQL, KC_VOLU,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, KC_0, _______, KC_COMM, KC_DOT, KC_ENT, KC_VOLD
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRAVE, KC_TILD, KC_UNDS, KC_EQL, KC_PIPE, _______, KC_HOME, KC_DEL, _______, KC_INS, KC_PGUP, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_BSLASH,KC_LCBR, KC_RCBR, KC_MINUS, KC_LBRC, KC_RBRC, KC_END, KC_LEFT, KC_UP, KC_RGHT, KC_PGDN, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_COLN, KC_LT, KC_GT, KC_PLUS, KC_LPRN, KC_RPRN, _______, _______, KC_DOWN, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, KC_CAPS, KC_MENU, KC_APP, KC_PSCR, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______,_______, _______, _______, KC_PAUS, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_SLCK, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+
+};
+
+
+void matrix_init_user() {
+ steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case PLOVER:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_PLOVER);
+ }
+ 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;
+ case QWERTY:
+ if (!record->event.pressed) {
+ layer_on(_QWERTY);
+ }
+ return false;
+ break;
+ case EXT_QWE:
+ if (record->event.pressed) {
+ layer_off(_QWERTY);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/keebio/levinson/keymaps/steno/rules.mk b/keyboards/keebio/levinson/keymaps/steno/rules.mk
new file mode 100644
index 0000000000..9c31e590ee
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/steno/rules.mk
@@ -0,0 +1,7 @@
+EXTRAKEY_ENABLE = no # Disable if you run out of usb endpoints. Media keys need this to work.
+MOUSEKEY_ENABLE = no # Mouse keys(+4700) Uses extra usb enpoints.
+STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER.
+AUDIO_ENABLE = no # Audio output on port C6
+MIDI_ENABLE = no # MIDI controls
+NKRO_ENABLE = yes
+BOOTMAGIC_ENABLE = yes
diff --git a/keyboards/keebio/levinson/keymaps/treadwell/config.h b/keyboards/keebio/levinson/keymaps/treadwell/config.h
new file mode 100644
index 0000000000..69783937b2
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/treadwell/config.h
@@ -0,0 +1,32 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "config_common.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define TAPPING_TERM 150
+
+/* default layer sounds */
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(GAME_SOUND), \
+ SONG(COLEMAK_SOUND) \
+ }
+
+//#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
+
+#endif
diff --git a/keyboards/keebio/levinson/keymaps/treadwell/keymap.c b/keyboards/keebio/levinson/keymaps/treadwell/keymap.c
new file mode 100644
index 0000000000..2f0da0f525
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/treadwell/keymap.c
@@ -0,0 +1,177 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _GAME 2
+#define _NUMB 3
+#define _CODE 4
+#define _SYS 5
+#define _FN4 6
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ GAME,
+ NUMB,
+ CODE,
+ SYS,
+ FN4,
+ ADJUST,
+};
+
+#define KC_ KC_TRNS
+
+#define KC_X1 CODE
+#define KC_X2 NUMB
+#define KC_X3 MO(_SYS)
+#define KC_X4 MT(MOD_LSFT, KC_ENT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ BSPC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X3 ,LCTL,LALT,LGUI, X1 ,LALT, SPC , X2 ,LEFT,DOWN, UP ,RGHT
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_COLEMAK] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ BSPC, A , R , S , T , D , H , N , E , I , O ,QUOT,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X3 ,LCTL,LALT,LGUI, X1 ,LALT, SPC , X2 ,LEFT,DOWN, UP ,RGHT
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_GAME] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ESC , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ X3 ,LCTL,LALT,LGUI, X2 , SPC, SPC , X1 ,LEFT,DOWN, UP ,RGHT
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_NUMB] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, DEL,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,UNDS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , ,MPRV,MNXT,MPLY, , ,VOLD,VOLU,MUTE, , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , ,LALT, , , , , ,
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_CODE] = LAYOUT_kc(
+ //,----+------+----+----+----+----. ,----+----+----+----+----+----.
+ ESC , , , UP , , , PGUP,HOME,LPRN,RPRN,BSLS,PIPE,
+ //|----+------+----+----+----+----| |----+----+----+----+----+----|
+ CAPS,SELECT,LEFT,DOWN,RGHT,DEL , PGDN, END,LBRC,RBRC,MINS,UNDS,
+ //|----+------+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, UNDO ,CUT ,COPY,PASTE, , LEFT,RGHT,LCBR,RCBR,PLUS,PEQL,
+ //|----+------+----+----+----+----| |----+----+----+----+----+----|
+ , , , , ,LALT, , , , , ,
+ //`----+------+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_SYS] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , , , , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , ,
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, GAME , _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+
+
+};
+
+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 COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case GAME:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_GAME);
+ }
+ return false;
+ break;
+ case NUMB:
+ if (record->event.pressed) {
+ layer_on(_NUMB);
+ update_tri_layer(_NUMB, _CODE, _ADJUST);
+ } else {
+ layer_off(_NUMB);
+ update_tri_layer(_NUMB, _CODE, _ADJUST);
+ }
+ return false;
+ break;
+ case CODE:
+ if (record->event.pressed) {
+ layer_on(_CODE);
+ update_tri_layer(_NUMB, _CODE, _ADJUST);
+ } else {
+ layer_off(_CODE);
+ update_tri_layer(_NUMB, _CODE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/keebio/levinson/keymaps/treadwell/rules.mk b/keyboards/keebio/levinson/keymaps/treadwell/rules.mk
new file mode 100644
index 0000000000..1d2d9e5a9c
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/treadwell/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
diff --git a/keyboards/keebio/levinson/keymaps/valgrahf/config.h b/keyboards/keebio/levinson/keymaps/valgrahf/config.h
new file mode 100644
index 0000000000..b7c6b0a7f5
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/valgrahf/config.h
@@ -0,0 +1,25 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "config_common.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define RGB_DI_PIN D3
+#define RGBLED_NUM 12
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_SLEEP
+
+#endif
diff --git a/keyboards/keebio/levinson/keymaps/valgrahf/keymap.c b/keyboards/keebio/levinson/keymaps/valgrahf/keymap.c
new file mode 100644
index 0000000000..cbe86db373
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/valgrahf/keymap.c
@@ -0,0 +1,63 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _BASE 0
+#define _FN1 1
+#define _FN2 2
+
+#define KC_ KC_TRNS
+#define KC_FN1 LT(_FN1, KC_NO)
+#define KC_FN2 LT(_FN2, KC_NO)
+#define KC_SPFN LT(_FN1, KC_SPACE)
+#define KC_RST RESET
+#define KC_DBUG DEBUG
+#define KC_RTOG RGB_TOG
+#define KC_RMOD RGB_MOD
+#define KC_RHUI RGB_HUI
+#define KC_RHUD RGB_HUD
+#define KC_RSAI RGB_SAI
+#define KC_RSAD RGB_SAD
+#define KC_RVAI RGB_VAI
+#define KC_RVAD RGB_VAD
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = LAYOUT_kc_ortho_4x12(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TAB, Q , W , E , R , T , Y , U , I , O , P ,BSPC,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ESC, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , N , M ,COMM, DOT,SLSH,PGUP,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LCTL,LGUI,LALT, FN1, ENT, ENT, SPC, SPC, FN2,HOME, END,PGDN
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_FN1] = LAYOUT_kc_ortho_4x12(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ GRV, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ DEL, F1, F2, F3, F4, F5, F6,MINS, EQL,LBRC,RBRC,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , F7, F8, F9, F10, F11, F12, , , , UP, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , ,LEFT,DOWN,RIGHT
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_FN2] = LAYOUT_kc_ortho_4x12(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ DEL,RHUI,RSAI,RVAI, , , ,UNDS,PLUS,LCBR,RCBR,PIPE,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,RHUD,RSAD,RVAD, , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,RTOG,RMOD, , , , , , , , ,
+ //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+};
diff --git a/keyboards/keebio/levinson/keymaps/valgrahf/rules.mk b/keyboards/keebio/levinson/keymaps/valgrahf/rules.mk
new file mode 100644
index 0000000000..1f54b32c48
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/valgrahf/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
diff --git a/keyboards/keebio/levinson/keymaps/xtonhasvim/config.h b/keyboards/keebio/levinson/keymaps/xtonhasvim/config.h
new file mode 100644
index 0000000000..bcd2220ce0
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/xtonhasvim/config.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#define USE_SERIAL
+
+// #define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+// #define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// help for fast typist+dual function keys?
+#define PERMISSIVE_HOLD
+
+// where is the cord plugged in?
+#define MASTER_LEFT
diff --git a/keyboards/keebio/levinson/keymaps/xtonhasvim/keymap.c b/keyboards/keebio/levinson/keymaps/xtonhasvim/keymap.c
new file mode 100644
index 0000000000..b9341ff35a
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/xtonhasvim/keymap.c
@@ -0,0 +1,237 @@
+ /* Copyright 2015-2017 Christon DeWan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "xtonhasvim.h"
+#include "fancylighting.h"
+
+/************************************
+ * states
+ ************************************/
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _MOVE,
+ _MOUSE,
+ _CMD
+};
+
+extern uint8_t vim_cmd_layer(void) { return _CMD; }
+
+/************************************
+ * keymaps!
+ ************************************/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl*| A* | S | D | F | G | H | J | K | L | ;* | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | chkwm| | Alt | GUI |Lower*| Sp|ace |Raise*| SPC | GUI | | Vim |
+ * `-----------------------------------------------------------------------------------'
+ *
+ * - Ctrl acts as Esc when tapped.
+ * - Holding A or ; switches to movement layer.
+ * - Raise and Lower are one-shot layers.
+ */
+[_QWERTY] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,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, RSFT_T(KC_ENT) , \
+ LSFT(KC_LALT), MO(_MOVE), KC_LALT, KC_LGUI, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_RGUI, KC_RALT, MO(_MOVE), VIM_START \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Bail | | | | | |Raise | | | Bail | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC, \
+ KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN, \
+ RESET, TO(_QWERTY), _______, _______, _______, _______, _______, MO(_RAISE), _______, _______, TO(_QWERTY), X_____X \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Bail | | |Lower | | | | | | Bail | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN, \
+ X_____X, TO(_QWERTY), _______, _______, MO(_LOWER), _______, _______, _______, _______, _______, TO(_QWERTY), RESET \
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-------------------------------------------------------------------------------------.
+ * |BL Raise| | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------+------+------+------+------+------|
+ * |BL Lower| | | | | | | | | | | |
+ * |--------+------+------+------+------+------|------+------+------+------+------+------|
+ * |BL STEP | | | | | | | Next | Vol- | Vol+ | Play | |
+ * |--------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Backlite| Bail | | | | | | | | | Bail | |
+ * `-------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ BL_INC, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, RGB_MODE_PLAIN, \
+ BL_DEC, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, RGB_MODE_REVERSE, \
+ BL_STEP, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, RGB_MODE_FORWARD, \
+ BL_TOGG, TO(_MOUSE), _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), RGB_TOG \
+),
+
+
+/* movement layer (hold semicolon) */
+[_MOVE] = LAYOUT_ortho_4x12( \
+ TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, \
+ _______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, X_____X, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______, \
+ _______, _______, _______, _______, _______, X_____X, X_____X, _______, _______, _______, _______, X_____X \
+),
+
+/* mouse layer
+ */
+[_MOUSE] = LAYOUT_ortho_4x12( \
+ TO(_QWERTY), X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X, \
+ _______, X_____X, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______, \
+ _______, TO(_QWERTY), _______, _______, _______, X_____X, X_____X, _______, _______, _______, TO(_QWERTY), X_____X \
+),
+
+/* vim command layer.
+ */
+[_CMD] = LAYOUT_ortho_4x12( \
+ X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, \
+ VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, \
+ VIM_SHIFT, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT, \
+ _______, TO(_QWERTY), _______, _______, X_____X, X_____X, X_____X, X_____X, _______, _______, TO(_QWERTY), X_____X \
+)
+
+};
+
+
+
+#define C_RED 0xFF, 0x00, 0x00
+#define C_GRN 0x00, 0xFF, 0x00
+#define C_BLU 0x00, 0x00, 0xFF
+
+#define C_YAN 0x00, 0xFF, 0xFF
+#define C_PRP 0x7A, 0x00, 0xFF
+#define C_ORG 0xFF, 0x93, 0x00
+
+void rgbflag(uint8_t r, uint8_t g, uint8_t b, uint8_t rr, uint8_t gg, uint8_t bb) {
+ LED_TYPE *target_led = user_rgb_mode ? shadowed_led : led;
+ for (int i = 0; i < RGBLED_NUM; i++) {
+ switch (i) {
+ case 10: case 11:
+ target_led[i].r = r;
+ target_led[i].g = g;
+ target_led[i].b = b;
+ break;
+ case 0: case 1:
+ target_led[i].r = rr;
+ target_led[i].g = gg;
+ target_led[i].b = bb;
+ break;
+ default:
+ target_led[i].r = 0;
+ target_led[i].g = 0;
+ target_led[i].b = 0;
+ break;
+ }
+ }
+ rgblight_set();
+}
+
+void set_state_leds(void) {
+ if (rgblight_get_mode() == 1) {
+ switch (biton32(layer_state)) {
+ case _RAISE:
+ rgbflag(C_BLU, C_GRN);
+ break;
+ case _LOWER:
+ rgbflag(C_BLU, C_RED);
+ break;
+ case _ADJUST:
+ rgbflag(C_BLU, C_PRP);
+ break;
+ case _MOVE:
+ rgbflag(C_RED, C_PRP);
+ break;
+ case _MOUSE:
+ rgbflag(C_RED, C_GRN);
+ break;
+ case _CMD:
+ switch(vstate) {
+ case VIM_V:
+ case VIM_VI:
+ case VIM_VS:
+ rgbflag(C_GRN, C_YAN);
+ break;
+ case VIM_C:
+ case VIM_CI:
+ rgbflag(C_GRN, C_ORG);
+ break;
+ case VIM_D:
+ case VIM_DI:
+ rgbflag(C_GRN, C_RED);
+ break;
+ case VIM_G:
+ rgbflag(C_GRN, C_BLU);
+ break;
+ case VIM_Y:
+ rgbflag(C_GRN, C_PRP);
+ break;
+ case VIM_START:
+ default:
+ rgbflag(C_GRN, C_GRN);
+ break;
+ }
+ break;
+ default: // for any other layers, or the default layer
+ rgbflag(C_YAN, C_YAN);
+ break;
+ }
+ }
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+}
diff --git a/keyboards/keebio/levinson/keymaps/xtonhasvim/readme.md b/keyboards/keebio/levinson/keymaps/xtonhasvim/readme.md
new file mode 100644
index 0000000000..9ff4ce1f19
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/xtonhasvim/readme.md
@@ -0,0 +1,9 @@
+# Xton has a tiny keyboard! With Vim!
+
+Based on the standard Planck layout with a few changes:
+
+* Escape moved to dual-function with control.
+* Dedicated movement and mouse layers.
+* Top and middle row swapped in `_RAISE` and `_LOWER` because I never use F-keys.
+* Vim layers! See `users/xtonhasvim`.
+
diff --git a/keyboards/keebio/levinson/keymaps/xtonhasvim/rules.mk b/keyboards/keebio/levinson/keymaps/xtonhasvim/rules.mk
new file mode 100644
index 0000000000..ad5466991c
--- /dev/null
+++ b/keyboards/keebio/levinson/keymaps/xtonhasvim/rules.mk
@@ -0,0 +1,5 @@
+# MOUSEKEY_ENABLE = yes
+# BACKLIGHT_ENABLE = yes
+# AUDIO_ENABLE = no
+
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/keebio/levinson/levinson.c b/keyboards/keebio/levinson/levinson.c
new file mode 100644
index 0000000000..95f3fe9ef8
--- /dev/null
+++ b/keyboards/keebio/levinson/levinson.c
@@ -0,0 +1,16 @@
+#include "levinson.h"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+
+ {{5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+ {{5, 5}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}},
+ {{5, 6}, {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}},
+ {{5, 7}, {4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+};
+#endif
diff --git a/keyboards/keebio/levinson/levinson.h b/keyboards/keebio/levinson/levinson.h
new file mode 100644
index 0000000000..88c2361ad0
--- /dev/null
+++ b/keyboards/keebio/levinson/levinson.h
@@ -0,0 +1,25 @@
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_keebio_levinson_rev1
+ #include "rev1.h"
+#else
+ #include "rev2.h"
+#endif
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
+ )
+
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
diff --git a/keyboards/keebio/levinson/readme.md b/keyboards/keebio/levinson/readme.md
new file mode 100644
index 0000000000..8cb4ff1cf7
--- /dev/null
+++ b/keyboards/keebio/levinson/readme.md
@@ -0,0 +1,28 @@
+Levinson
+========
+
+A split 40% split 4x12 ortholinear keyboard made and sold by Keebio. It's essentially a Let's Split with LED backlight support and 2u thumb key support. [More info at Keebio](https://keeb.io).
+
+Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
+Hardware Supported: Pro Micro, Elite-C
+Hardware Availability: [Keebio](https://keeb.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make levinson/rev2:default
+
+Example of flashing this keyboard with Pro micro:
+
+ make levinson/rev2:default:avrdude
+
+Example of flashing this keyboard with Elite-C:
+
+You'll need to add `BOOTLOADER = atmel-dfu` to your `rules.mk` to ensure that resetting the board works properly.
+
+Hold the reset button on the Elite-C board, or the reset button on the keyboard if already assembled, then release the button and run:
+
+ make levinson/rev2:default:dfu
+
+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).
+
+A build guide for this keyboard can be found here: [Levinson Build Guide](https://docs.keeb.io)
diff --git a/keyboards/keebio/levinson/rev1/config.h b/keyboards/keebio/levinson/rev1/config.h
new file mode 100644
index 0000000000..0359796feb
--- /dev/null
+++ b/keyboards/keebio/levinson/rev1/config.h
@@ -0,0 +1,59 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General 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 QMK_KEYBOARD_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCB10
+#define PRODUCT_ID 0x1146
+#define DEVICE_VER 0x0100
+#define MANUFACTURER Keebio
+#define PRODUCT Levinson
+#define DESCRIPTION Split 40 percent ortholinear keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, F4 }
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 12 // Number of LEDs
+
+/* Backlight LEDs */
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_LEVELS 7
diff --git a/keyboards/keebio/levinson/rev1/rev1.c b/keyboards/keebio/levinson/rev1/rev1.c
new file mode 100644
index 0000000000..573fa787ba
--- /dev/null
+++ b/keyboards/keebio/levinson/rev1/rev1.c
@@ -0,0 +1,22 @@
+#include "levinson.h"
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
diff --git a/keyboards/keebio/levinson/rev1/rev1.h b/keyboards/keebio/levinson/rev1/rev1.h
new file mode 100644
index 0000000000..2120bb0fa9
--- /dev/null
+++ b/keyboards/keebio/levinson/rev1/rev1.h
@@ -0,0 +1,59 @@
+#pragma once
+
+#include "levinson.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#ifndef FLIP_HALF
+// Standard Keymap
+// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 } \
+ }
+#else
+// Keymap with right side flipped
+// (TRRS jack on both halves are to the right)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 } \
+ }
+#endif
+
+#define LAYOUT_ortho_4x12 LAYOUT
diff --git a/keyboards/keebio/levinson/rev1/rules.mk b/keyboards/keebio/levinson/rev1/rules.mk
new file mode 100644
index 0000000000..bd518d8f27
--- /dev/null
+++ b/keyboards/keebio/levinson/rev1/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/levinson/rev2/config.h b/keyboards/keebio/levinson/rev2/config.h
new file mode 100644
index 0000000000..a9fe895866
--- /dev/null
+++ b/keyboards/keebio/levinson/rev2/config.h
@@ -0,0 +1,59 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General 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 QMK_KEYBOARD_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCB10
+#define PRODUCT_ID 0x1146
+#define DEVICE_VER 0x0200
+#define MANUFACTURER Keebio
+#define PRODUCT Levinson
+#define DESCRIPTION Split 40 percent ortholinear keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D4, D7, E6, B4 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 12 // Number of LEDs
+
+/* Backlight LEDs */
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_LEVELS 7
diff --git a/keyboards/keebio/levinson/rev2/rev2.c b/keyboards/keebio/levinson/rev2/rev2.c
new file mode 100644
index 0000000000..573fa787ba
--- /dev/null
+++ b/keyboards/keebio/levinson/rev2/rev2.c
@@ -0,0 +1,22 @@
+#include "levinson.h"
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
diff --git a/keyboards/keebio/levinson/rev2/rev2.h b/keyboards/keebio/levinson/rev2/rev2.h
new file mode 100644
index 0000000000..2120bb0fa9
--- /dev/null
+++ b/keyboards/keebio/levinson/rev2/rev2.h
@@ -0,0 +1,59 @@
+#pragma once
+
+#include "levinson.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#ifndef FLIP_HALF
+// Standard Keymap
+// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 } \
+ }
+#else
+// Keymap with right side flipped
+// (TRRS jack on both halves are to the right)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 } \
+ }
+#endif
+
+#define LAYOUT_ortho_4x12 LAYOUT
diff --git a/keyboards/keebio/levinson/rev2/rules.mk b/keyboards/keebio/levinson/rev2/rules.mk
new file mode 100644
index 0000000000..bd518d8f27
--- /dev/null
+++ b/keyboards/keebio/levinson/rev2/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/keebio/levinson/rules.mk b/keyboards/keebio/levinson/rules.mk
new file mode 100644
index 0000000000..cdaef48890
--- /dev/null
+++ b/keyboards/keebio/levinson/rules.mk
@@ -0,0 +1,33 @@
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+SPLIT_KEYBOARD = yes
+
+LAYOUTS = ortho_4x12
+DEFAULT_FOLDER = keebio/levinson/rev2