summaryrefslogtreecommitdiff
path: root/keyboards/levinson/keymaps
diff options
context:
space:
mode:
authorAlex Ong <the.onga@gmail.com>2019-01-04 19:39:14 +1100
committerAlex Ong <the.onga@gmail.com>2019-01-04 19:39:14 +1100
commit47c91fc7f75ae0a477e55b687aa0fc30da0a283c (patch)
tree65ad39452748ff2e6d4a83ce54ede6ca22c9ada9 /keyboards/levinson/keymaps
parentac9b88e8ccbbf38762871504cd827ff0d941c426 (diff)
parent563ce3f225d981ce460c12ca5130dfe47af41df0 (diff)
downloadqmk_firmware-47c91fc7f75ae0a477e55b687aa0fc30da0a283c.tar.gz
qmk_firmware-47c91fc7f75ae0a477e55b687aa0fc30da0a283c.zip
Merge branch 'master' of https://github.com/qmk/qmk_firmware
Diffstat (limited to 'keyboards/levinson/keymaps')
-rw-r--r--keyboards/levinson/keymaps/atreus/config.h22
-rw-r--r--keyboards/levinson/keymaps/atreus/keymap.c41
-rw-r--r--keyboards/levinson/keymaps/atreus/readme.md8
-rw-r--r--keyboards/levinson/keymaps/bakingpy2u/config.h7
-rw-r--r--keyboards/levinson/keymaps/bakingpy2u/keymap.c4
-rw-r--r--keyboards/levinson/keymaps/bakingpy2u/rules.mk4
-rw-r--r--keyboards/levinson/keymaps/default/config.h8
-rw-r--r--keyboards/levinson/keymaps/default/rules.mk5
-rw-r--r--keyboards/levinson/keymaps/drogglbecher/config.h17
-rw-r--r--keyboards/levinson/keymaps/drogglbecher/keymap.c76
-rw-r--r--keyboards/levinson/keymaps/drogglbecher/rules.mk10
-rw-r--r--keyboards/levinson/keymaps/jyh/config.h29
-rw-r--r--keyboards/levinson/keymaps/jyh/keymap.c215
-rw-r--r--keyboards/levinson/keymaps/jyh/readme.md32
-rw-r--r--keyboards/levinson/keymaps/jyh/rules.mk1
-rw-r--r--keyboards/levinson/keymaps/jyh2/config.h33
-rw-r--r--keyboards/levinson/keymaps/jyh2/keymap.c222
-rw-r--r--keyboards/levinson/keymaps/jyh2/readme.md32
-rw-r--r--keyboards/levinson/keymaps/jyh2/rules.mk2
-rw-r--r--keyboards/levinson/keymaps/losinggeneration/rules.mk2
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/README.md21
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/config.h20
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/keymap.c201
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/rules.mk2
-rw-r--r--keyboards/levinson/keymaps/steno/config.h34
-rw-r--r--keyboards/levinson/keymaps/steno/keymap.c148
-rw-r--r--keyboards/levinson/keymaps/steno/rules.mk7
-rw-r--r--keyboards/levinson/keymaps/treadwell/config.h6
-rw-r--r--keyboards/levinson/keymaps/treadwell/keymap.c64
-rw-r--r--keyboards/levinson/keymaps/treadwell/rules.mk4
-rw-r--r--keyboards/levinson/keymaps/valgrahf/rules.mk5
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/config.h35
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/keymap.c237
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/readme.md9
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/rules.mk5
35 files changed, 1491 insertions, 77 deletions
diff --git a/keyboards/levinson/keymaps/atreus/config.h b/keyboards/levinson/keymaps/atreus/config.h
new file mode 100644
index 0000000000..a82c15238a
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/atreus/keymap.c b/keyboards/levinson/keymaps/atreus/keymap.c
new file mode 100644
index 0000000000..61ad04ef74
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/atreus/readme.md b/keyboards/levinson/keymaps/atreus/readme.md
new file mode 100644
index 0000000000..0b548ace17
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/bakingpy2u/config.h b/keyboards/levinson/keymaps/bakingpy2u/config.h
index 75753ac2e7..1db6ea433f 100644
--- a/keyboards/levinson/keymaps/bakingpy2u/config.h
+++ b/keyboards/levinson/keymaps/bakingpy2u/config.h
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -22,5 +19,3 @@
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/levinson/keymaps/bakingpy2u/keymap.c b/keyboards/levinson/keymaps/bakingpy2u/keymap.c
index da46d2a05a..219e3468fb 100644
--- a/keyboards/levinson/keymaps/bakingpy2u/keymap.c
+++ b/keyboards/levinson/keymaps/bakingpy2u/keymap.c
@@ -1,6 +1,4 @@
-#include "levinson.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
diff --git a/keyboards/levinson/keymaps/bakingpy2u/rules.mk b/keyboards/levinson/keymaps/bakingpy2u/rules.mk
index 22b6ec4766..d7463419b4 100644
--- a/keyboards/levinson/keymaps/bakingpy2u/rules.mk
+++ b/keyboards/levinson/keymaps/bakingpy2u/rules.mk
@@ -1,6 +1,2 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/default/config.h b/keyboards/levinson/keymaps/default/config.h
index 6b31e8d14e..e710d6e4aa 100644
--- a/keyboards/levinson/keymaps/default/config.h
+++ b/keyboards/levinson/keymaps/default/config.h
@@ -3,6 +3,7 @@ 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
@@ -18,10 +19,7 @@ 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_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -33,5 +31,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
-
-#endif
diff --git a/keyboards/levinson/keymaps/default/rules.mk b/keyboards/levinson/keymaps/default/rules.mk
index 457a3d01d4..d7463419b4 100644
--- a/keyboards/levinson/keymaps/default/rules.mk
+++ b/keyboards/levinson/keymaps/default/rules.mk
@@ -1,3 +1,2 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/levinson/keymaps/drogglbecher/config.h b/keyboards/levinson/keymaps/drogglbecher/config.h
new file mode 100644
index 0000000000..ef96ff00b1
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/drogglbecher/keymap.c b/keyboards/levinson/keymaps/drogglbecher/keymap.c
new file mode 100644
index 0000000000..b8d2dc5949
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/drogglbecher/rules.mk b/keyboards/levinson/keymaps/drogglbecher/rules.mk
new file mode 100644
index 0000000000..b223b71aba
--- /dev/null
+++ b/keyboards/levinson/keymaps/drogglbecher/rules.mk
@@ -0,0 +1,10 @@
+AUTO_SHIFT_ENABLE = no
+AUTO_SHIFT_MODIFIERS = no
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
+UNICODE_ENABLE = yes
+DEFAULT_FOLDER = levinson/rev2
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/levinson/keymaps/jyh/config.h b/keyboards/levinson/keymaps/jyh/config.h
new file mode 100644
index 0000000000..d3e598bd09
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/jyh/keymap.c b/keyboards/levinson/keymaps/jyh/keymap.c
new file mode 100644
index 0000000000..d8cfa7e06b
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/jyh/readme.md b/keyboards/levinson/keymaps/jyh/readme.md
new file mode 100644
index 0000000000..e20424e518
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/jyh/rules.mk b/keyboards/levinson/keymaps/jyh/rules.mk
new file mode 100644
index 0000000000..66110cfcc0
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE=yes
diff --git a/keyboards/levinson/keymaps/jyh2/config.h b/keyboards/levinson/keymaps/jyh2/config.h
new file mode 100644
index 0000000000..f50674bb88
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/jyh2/keymap.c b/keyboards/levinson/keymaps/jyh2/keymap.c
new file mode 100644
index 0000000000..4b7442928e
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/jyh2/readme.md b/keyboards/levinson/keymaps/jyh2/readme.md
new file mode 100644
index 0000000000..45ca956922
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/jyh2/rules.mk b/keyboards/levinson/keymaps/jyh2/rules.mk
new file mode 100644
index 0000000000..fbb3b49d6b
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh2/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE=yes
+BOOTMAGIC_ENABLE=no
diff --git a/keyboards/levinson/keymaps/losinggeneration/rules.mk b/keyboards/levinson/keymaps/losinggeneration/rules.mk
index f3e47b4c2e..c8eef2cb3f 100644
--- a/keyboards/levinson/keymaps/losinggeneration/rules.mk
+++ b/keyboards/levinson/keymaps/losinggeneration/rules.mk
@@ -10,7 +10,7 @@ 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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/levinson/keymaps/mmacdougall/README.md b/keyboards/levinson/keymaps/mmacdougall/README.md
new file mode 100644
index 0000000000..bae8c8a4b8
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/mmacdougall/config.h b/keyboards/levinson/keymaps/mmacdougall/config.h
new file mode 100644
index 0000000000..63dd5bc88f
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/mmacdougall/keymap.c b/keyboards/levinson/keymaps/mmacdougall/keymap.c
new file mode 100644
index 0000000000..dec47a7616
--- /dev/null
+++ b/keyboards/levinson/keymaps/mmacdougall/keymap.c
@@ -0,0 +1,201 @@
+#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,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+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/levinson/keymaps/mmacdougall/rules.mk b/keyboards/levinson/keymaps/mmacdougall/rules.mk
new file mode 100644
index 0000000000..d7463419b4
--- /dev/null
+++ b/keyboards/levinson/keymaps/mmacdougall/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/levinson/keymaps/steno/config.h b/keyboards/levinson/keymaps/steno/config.h
new file mode 100644
index 0000000000..9cbc148e42
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/steno/keymap.c b/keyboards/levinson/keymaps/steno/keymap.c
new file mode 100644
index 0000000000..cd7493467a
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/steno/rules.mk b/keyboards/levinson/keymaps/steno/rules.mk
new file mode 100644
index 0000000000..9c31e590ee
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/treadwell/config.h b/keyboards/levinson/keymaps/treadwell/config.h
index e6648db144..69783937b2 100644
--- a/keyboards/levinson/keymaps/treadwell/config.h
+++ b/keyboards/levinson/keymaps/treadwell/config.h
@@ -16,6 +16,12 @@
#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
diff --git a/keyboards/levinson/keymaps/treadwell/keymap.c b/keyboards/levinson/keymaps/treadwell/keymap.c
index 10d7d30355..bcc744a6dd 100644
--- a/keyboards/levinson/keymaps/treadwell/keymap.c
+++ b/keyboards/levinson/keymaps/treadwell/keymap.c
@@ -1,12 +1,10 @@
-#include "levinson.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _COLEMAK 1
-#define _DVORAK 2
+#define _GAME 2
#define _NUMB 3
#define _CODE 4
#define _SYS 5
@@ -16,7 +14,7 @@ extern keymap_config_t keymap_config;
enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
- DVORAK,
+ GAME,
NUMB,
CODE,
SYS,
@@ -27,13 +25,9 @@ enum custom_keycodes {
#define KC_ KC_TRNS
#define _______ 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_X1 CODE
#define KC_X2 NUMB
-#define KC_X3 SYS
+#define KC_X3 MO(_SYS)
#define KC_X4 MT(MOD_LSFT, KC_ENT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -62,25 +56,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//`----+----+----+----+----+----' `----+----+----+----+----+----'
),
- [_DVORAK] = LAYOUT_kc(
+ [_GAME] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS,
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- BSPC, A , O , E , U , I , D , H , T , N , S ,SLSH,
+ ESC , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 ,
+ LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- X3 ,LCTL,LALT,LGUI, X1 ,LALT, SPC , X2 ,LEFT,DOWN, UP ,RGHT
+ 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,PMNS,
+ 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,MPLY,MNXT, , ,VOLD,VOLU,MUTE, , ,
+ , ,MPRV,MNXT,MPLY, , ,VOLD,VOLU,MUTE, , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , ,LALT, , , , , ,
//`----+----+----+----+----+----' `----+----+----+----+----+----'
@@ -92,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+------+----+----+----+----| |----+----+----+----+----+----|
CAPS,SELECT,LEFT,DOWN,RGHT,DEL , PGDN, END,LBRC,RBRC,MINS,UNDS,
//|----+------+----+----+----+----| |----+----+----+----+----+----|
- , UNDO ,CUT ,COPY,PASTE, , LEFT,RGHT,LCBR,RCBR,PLUS,PEQL,
+ LSFT, UNDO ,CUT ,COPY,PASTE, , LEFT,RGHT,LCBR,RCBR,PLUS,PEQL,
//|----+------+----+----+----+----| |----+----+----+----+----+----|
, , , , ,LALT, , , , , ,
//`----+------+----+----+----+----' `----+----+----+----+----+----'
@@ -100,10 +94,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_SYS] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , , , , , , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , , , , , , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , , , , , ,
@@ -123,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_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, DVORAK, _______, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, GAME , _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
)
@@ -131,43 +125,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-#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);
+ set_single_persistent_default_layer(_QWERTY);
}
return false;
break;
case COLEMAK:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- persistent_default_layer_set(1UL<<_COLEMAK);
+ set_single_persistent_default_layer(_COLEMAK);
}
return false;
break;
- case DVORAK:
+ case GAME:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_dvorak);
- #endif
- persistent_default_layer_set(1UL<<_DVORAK);
+ set_single_persistent_default_layer(_GAME);
}
return false;
break;
diff --git a/keyboards/levinson/keymaps/treadwell/rules.mk b/keyboards/levinson/keymaps/treadwell/rules.mk
index c5e16f1369..1d2d9e5a9c 100644
--- a/keyboards/levinson/keymaps/treadwell/rules.mk
+++ b/keyboards/levinson/keymaps/treadwell/rules.mk
@@ -1,6 +1,2 @@
RGBLIGHT_ENABLE = no
BACKLIGHT_ENABLE = no
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/valgrahf/rules.mk b/keyboards/levinson/keymaps/valgrahf/rules.mk
index 0db809fe4b..1f54b32c48 100644
--- a/keyboards/levinson/keymaps/valgrahf/rules.mk
+++ b/keyboards/levinson/keymaps/valgrahf/rules.mk
@@ -1,8 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
AUDIO_ENABLE = no
-USE_I2C = no
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/xtonhasvim/config.h b/keyboards/levinson/keymaps/xtonhasvim/config.h
new file mode 100644
index 0000000000..bcd2220ce0
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/xtonhasvim/keymap.c b/keyboards/levinson/keymaps/xtonhasvim/keymap.c
new file mode 100644
index 0000000000..b9341ff35a
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/xtonhasvim/readme.md b/keyboards/levinson/keymaps/xtonhasvim/readme.md
new file mode 100644
index 0000000000..9ff4ce1f19
--- /dev/null
+++ b/keyboards/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/levinson/keymaps/xtonhasvim/rules.mk b/keyboards/levinson/keymaps/xtonhasvim/rules.mk
new file mode 100644
index 0000000000..ad5466991c
--- /dev/null
+++ b/keyboards/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.