summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/gherkin/keymaps/mjt/Makefile29
-rw-r--r--keyboards/gherkin/keymaps/mjt/config.h171
-rw-r--r--keyboards/gherkin/keymaps/mjt/keymap.c280
-rw-r--r--keyboards/hhkb/keymaps/mjt/config.h77
-rw-r--r--keyboards/hhkb/keymaps/mjt/keymap.c114
-rw-r--r--keyboards/hhkb/keymaps/mjt/readme.md16
-rw-r--r--keyboards/jd45/keymaps/mjt/Makefile21
-rw-r--r--keyboards/jd45/keymaps/mjt/config.h85
-rw-r--r--keyboards/jd45/keymaps/mjt/keymap.c80
-rw-r--r--keyboards/jd45/keymaps/mjt/readme.md12
-rw-r--r--keyboards/jd45/keymaps/mjt/rules.mk67
-rw-r--r--keyboards/jd45/keymaps/mjt6u/Makefile23
-rw-r--r--keyboards/jd45/keymaps/mjt6u/config.h84
-rw-r--r--keyboards/jd45/keymaps/mjt6u/keymap.c149
-rw-r--r--keyboards/jd45/keymaps/mjt6u/readme.md23
-rw-r--r--keyboards/lets_split/keymaps/mjt/Makefile25
-rw-r--r--keyboards/lets_split/keymaps/mjt/config.h38
-rw-r--r--keyboards/lets_split/keymaps/mjt/keymap.c217
-rw-r--r--keyboards/mitosis/keymaps/mjt/config.h74
-rw-r--r--keyboards/mitosis/keymaps/mjt/keymap.c329
-rw-r--r--keyboards/planck/keymaps/mjt/Makefile3
-rw-r--r--keyboards/planck/keymaps/mjt/config.h33
-rw-r--r--keyboards/planck/keymaps/mjt/keymap.c283
-rw-r--r--keyboards/planck/keymaps/mjt/readme.md22
-rw-r--r--keyboards/planck/keymaps/mjtnumsym/Makefile3
-rw-r--r--keyboards/planck/keymaps/mjtnumsym/config.h33
-rw-r--r--keyboards/planck/keymaps/mjtnumsym/keymap.c282
-rw-r--r--keyboards/planck/keymaps/mjtnumsym/readme.md26
-rw-r--r--keyboards/roadkit/keymaps/flipphone/Makefile21
-rw-r--r--keyboards/roadkit/keymaps/flipphone/config.h8
-rw-r--r--keyboards/roadkit/keymaps/flipphone/keymap.c216
-rw-r--r--keyboards/roadkit/keymaps/flipphone/readme.md26
-rw-r--r--keyboards/roadkit/keymaps/mjt/Makefile21
-rw-r--r--keyboards/roadkit/keymaps/mjt/config.h8
-rw-r--r--keyboards/roadkit/keymaps/mjt/keymap.c236
-rw-r--r--keyboards/roadkit/keymaps/mjt/readme.md22
-rw-r--r--keyboards/tv44/keymaps/mjt/Makefile21
-rw-r--r--keyboards/tv44/keymaps/mjt/config.h14
-rw-r--r--keyboards/tv44/keymaps/mjt/keymap.c199
-rw-r--r--keyboards/tv44/keymaps/mjt/readme.md26
40 files changed, 3417 insertions, 0 deletions
diff --git a/keyboards/gherkin/keymaps/mjt/Makefile b/keyboards/gherkin/keymaps/mjt/Makefile
new file mode 100644
index 0000000000..b397f86d04
--- /dev/null
+++ b/keyboards/gherkin/keymaps/mjt/Makefile
@@ -0,0 +1,29 @@
+## not sure where this stuff goes ##
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# 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 = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+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 this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE=yes
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/gherkin/keymaps/mjt/config.h b/keyboards/gherkin/keymaps/mjt/config.h
new file mode 100644
index 0000000000..9c9f038389
--- /dev/null
+++ b/keyboards/gherkin/keymaps/mjt/config.h
@@ -0,0 +1,171 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Some Guy
+#define PRODUCT Gherkin
+#define DESCRIPTION 30 percent disaster
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+
+// These are with USB on the left.
+// #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
+// original from TMK: #define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 }
+// #define MATRIX_COL_PINS { D0, D4, F6, D7, E6, B4 }
+
+// these are with USB on the right.
+#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { B4, E6, D7, F6, D4, D0 }
+
+#define CATERINA_BOOTLOADER
+
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_PIN B5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define AUDIO_VOICES
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/gherkin/keymaps/mjt/keymap.c b/keyboards/gherkin/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..3dcc3ca090
--- /dev/null
+++ b/keyboards/gherkin/keymaps/mjt/keymap.c
@@ -0,0 +1,280 @@
+#include "gherkin.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+//Tap Dance Declarations
+enum {
+ TD_Z_LCTL = 0,
+ TD_X_LGUI = 1,
+ TD_C_LALT = 2,
+ TD_A_TAB = 3,
+ TD_Q_ESC = 4,
+// M(0)
+};
+
+//Friendly Layer Names
+enum gherkin_layers {
+ _QWERTY,
+ _SONGS,
+ _NUMBERS,
+ _SYMBOLS,
+ _PLOVER,
+ _ADJUST
+};
+
+// custom keycodes
+enum gherkin_keycodes {
+ QWERTY = SAFE_RANGE,
+ NUMBERS,
+ SYMBOLS,
+ SONGS,
+ PLOVER,
+ BACKLIT,
+ MACSLEEP,
+ EXT_PLV
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = KEYMAP(
+ TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ TD(TD_A_TAB), LT(_SYMBOLS,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_ADJUST,KC_SPC),
+ TD(TD_Z_LCTL), TD(TD_X_LGUI), TD(TD_C_LALT), KC_V, KC_B, LT(_NUMBERS, KC_N), KC_M, KC_COMM, KC_DOT, SFT_T(KC_ENT))
+ ,
+ [_NUMBERS] = KEYMAP(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_HOME, KC_PGDN, KC_PGUP, KC_END ,
+ KC_F7, KC_F8, KC_F9, KC_F10, LT(_ADJUST,KC_F11), _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT)
+ ,
+ [_SYMBOLS] = KEYMAP(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+ KC_GRV, _______, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, KC_MINS, KC_EQL , KC_SCLN, KC_QUOT,
+ KC_TILD, MO(_ADJUST), XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, KC_UNDS, KC_PLUS, S(KC_SCLN), S(KC_QUOT))
+ ,
+ [_PLOVER] = KEYMAP(
+ KC_Q, KC_W, KC_E, KC_R, KC_1, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX)
+ ,
+ [_ADJUST] = KEYMAP(
+ RESET, _______, _______, _______, _______, QWERTY, NUMBERS, SYMBOLS, PLOVER, SONGS,
+ MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, MACSLEEP, _______,
+ BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case NUMBERS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistant_default_layer_set(1UL<<_NUMBERS);
+ }
+ return false;
+ break;
+ case SYMBOLS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ persistant_default_layer_set(1UL<<_SYMBOLS);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(tone_plover);
+ #endif
+ layer_off(_NUMBERS);
+ layer_off(_SYMBOLS);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_plover_gb);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+
+/*
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ keyevent_t event = record->event;
+
+ switch (id) {
+ case 0: {
+ if (record->event.pressed) {
+ key_timer = timer_read(); // if the key is being pressed, we start the timer.
+ }
+ else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
+ if (timer_elapsed(key_timer) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
+ return MACRO( D(LSFT), END );
+ }
+ else {
+ return MACRO( T(N), END );
+ }
+ }
+ break;
+ }
+ }
+ return MACRO_NONE;
+}*/
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+ PLAY_SONG(tone_goodbye);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
+
+void matrix_scan_user(void) {
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Esc, twice for Caps Lock
+ [TD_Z_LCTL] = ACTION_TAP_DANCE_DOUBLE(KC_Z, KC_LCTL),
+ [TD_X_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_X, KC_LGUI),
+ [TD_C_LALT] = ACTION_TAP_DANCE_DOUBLE(KC_C, KC_LALT),
+ [TD_A_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB),
+ [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
+};
+
+// don't know what this is doing...
+/*
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ DDRD |= (1 << 5); PORTD &= ~(1 << 5);
+ } else {
+ DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+ } else {
+ DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+*/
diff --git a/keyboards/hhkb/keymaps/mjt/config.h b/keyboards/hhkb/keymaps/mjt/config.h
new file mode 100644
index 0000000000..d38611538f
--- /dev/null
+++ b/keyboards/hhkb/keymaps/mjt/config.h
@@ -0,0 +1,77 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xCAFE
+#define DEVICE_VER 0x0104
+#define MANUFACTURER q.m.k
+#define PRODUCT HHKB mod
+#define DESCRIPTION q.m.k keyboard firmware for HHKB
+
+/* key matrix size */
+#ifdef HHKB_JP
+# define MATRIX_ROWS 16
+#else
+# define MATRIX_ROWS 8
+#endif
+#define MATRIX_COLS 8
+
+#define TAPPING_TERM 200
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+*/
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/hhkb/keymaps/mjt/keymap.c b/keyboards/hhkb/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..b5cd997148
--- /dev/null
+++ b/keyboards/hhkb/keymaps/mjt/keymap.c
@@ -0,0 +1,114 @@
+/* -*- eval: (turn-on-orgtbl); -*-
+ * default HHKB Layout
+ */
+#include "hhkb.h"
+
+#define BASE 0
+#define HHKB 1
+#define FUNK 2
+#define DYN 3
+#define CTL_ESC CTL_T(KC_ESC)
+#define MACSLEEP LCTL(LSFT(KC_POWER))
+
+enum hhkb_keycodes {
+ QWERTY = SAFE_RANGE,
+ DYNKEY,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BASE Level: Default Layer
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Backs | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Cont | A | S | D | F | G | H | J | K | L | ; | ' | Ent | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+ | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Fn0 | | |
+ |-------+---+---+---+---+---+---+---+---+---+---+-------+-----+-------+---|
+
+ |------+------+-----------------------+------+------|
+ | LAlt | LGUI | ******* Space ******* | RGUI | RAlt |
+ |------+------+-----------------------+------+------|
+ */
+
+ [BASE] = KEYMAP( // default layer
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), TT(FUNK), \
+ KC_LALT, KC_LGUI, /* */ KC_SPC, MO(DYN), KC_RALT),
+
+
+
+ /* Layer HHKB: HHKB mode (HHKB Fn)
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Pwr | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | Caps | | | | | | | | Psc | Slk | Pus | Up | | Backs | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | VoD | VoU | Mut | | | * | / | Hom | PgU | Lef | Rig | Enter | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+ | | | | | | | + | - | End | PgD | Dow | | | | |
+ |------+-----+-----+-----+----+----+----+----+-----+-----+-----+-----+-------+-------+-----|
+
+ |------+------+----------------------+------+------+
+ | **** | **** | ******************** | **** | **** |
+ |------+------+----------------------+------+------+
+
+
+
+ [HHKB] = KEYMAP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ */
+ [FUNK] = KEYMAP(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+[DYN] = KEYMAP(
+KC_TRNS, DYN_REC_START1, DYN_REC_START2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, \
+KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, \
+KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MACSLEEP, KC_HOME, KC_END , KC_TRNS, \
+KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, DYN_REC_STOP, KC_TRNS, KC_TRNS)
+ };
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t macro_kc = (keycode == MO(DYN) ? DYN_REC_STOP : keycode);
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+
+ return true;
+}
diff --git a/keyboards/hhkb/keymaps/mjt/readme.md b/keyboards/hhkb/keymaps/mjt/readme.md
new file mode 100644
index 0000000000..ff575ce247
--- /dev/null
+++ b/keyboards/hhkb/keymaps/mjt/readme.md
@@ -0,0 +1,16 @@
+# Mike's HHKB
+
+- Surprisingly stock for the most part
+- Dynamic macros
+- ctrl key has tapkey for escape
+- right shift has tapkey for enter
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Base for letters and mods.
+
+Funk layer is my tweaked function layer
+
+Dyn layer has dynamic macros. Record with 1 and 2, playback with \ and
+upper-right-most key. Also turns the arrow clusters into nav keys.
diff --git a/keyboards/jd45/keymaps/mjt/Makefile b/keyboards/jd45/keymaps/mjt/Makefile
new file mode 100644
index 0000000000..c920006650
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt/Makefile
@@ -0,0 +1,21 @@
+# 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 = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/jd45/keymaps/mjt/config.h b/keyboards/jd45/keymaps/mjt/config.h
new file mode 100644
index 0000000000..276639514b
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt/config.h
@@ -0,0 +1,85 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER geekhack
+#define PRODUCT JD45
+#define DESCRIPTION q.m.k. keyboard firmware for JD45
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { F0, F1, F5, B4 }
+#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+#define USB_MAX_POWER_CONSUMPTION 50
+#define BACKLIGHT_BREATHING
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/jd45/keymaps/mjt/keymap.c b/keyboards/jd45/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..1a73022169
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt/keymap.c
@@ -0,0 +1,80 @@
+#include "jd45.h"
+
+/* Mike's Layout for JD45 with backlight LEDs acting as layer indicator
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = KEYMAP(
+ TAB, Q, W, E, R, T, Y, U, I, O, P, MINS, BSLS,
+ FN1, A, S, D, F, G, H, J, K, L, QUOT, ENT,
+ FN0, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
+ NO, LCTL, LALT, LGUI, SPC, BSPC, APP, FN2, ESC, NO ),
+[1] = KEYMAP(
+GRV, TRNS, UP, TRNS, 7, 8, 9, 0, MINS, EQL, PSCR, LBRC, RBRC,
+TRNS, LEFT, DOWN, RGHT, 4, 5, 6, INS, HOME, PGUP, SCLN, TRNS,
+TRNS, TRNS, TRNS, TRNS, 1, 2, 3, DEL, END, PGDN, TRNS, TRNS,
+TRNS, TRNS, TRNS, SPC, TRNS, DEL, TRNS, FN3, TRNS, TRNS ),
+[2] = KEYMAP(
+TRNS, TRNS, VOLU, TRNS, F7, F8, F9, F10, F11, F12, PSCR, FN3, FN4,
+TRNS, MPRV, VOLD, MNXT, F4, F5, F6, J, K, L, SCLN, TRNS,
+TRNS, TRNS, TRNS, TRNS, F1, F2, F3, MUTE, MPRV, MNXT, MSTP, TRNS,
+TRNS, TRNS, TRNS, LGUI, TRNS, TRNS, TRNS, TRNS, PAUS, TRNS )
+/* ,
+[3] = KEYMAP(
+TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+TRNS, TRNS, TRNS, TRNS, TRNS, BTLD, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS )*/
+};
+
+enum macro_id {
+ M_LAYER1,
+ M_LAYER2
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_MODS_TAP_TOGGLE(MOD_LSFT),
+ // [1] = ACTION_LAYER_TAP_TOGGLE(1),
+ [1] = ACTION_MACRO(M_LAYER1),
+ [2] = ACTION_LAYER_TAP_TOGGLE(2),
+ [3] = ACTION_BACKLIGHT_STEP(),
+ [4] = ACTION_BACKLIGHT_TOGGLE()
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case M_LAYER1:
+ // need to add a timer for doubletap: https://github.com/jackhumbert/qmk_firmware/wiki#timer-functionality
+ // action_function_tap may also handle this...
+ if (record->event.pressed)
+ {
+ breathing_speed_set(3);
+ breathing_enable();
+ layer_on(1);
+ }
+ else
+ {
+ breathing_speed_set(1);
+ breathing_self_disable();
+ layer_off(1);
+ }
+ break;
+ case M_LAYER2:
+ if (record->event.pressed)
+ {
+ breathing_speed_set(2);
+ breathing_pulse();
+ layer_on(2);
+ }
+ else
+ {
+ breathing_speed_set(1);
+ breathing_self_disable();
+ layer_off(2);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/jd45/keymaps/mjt/readme.md b/keyboards/jd45/keymaps/mjt/readme.md
new file mode 100644
index 0000000000..54bdb83463
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt/readme.md
@@ -0,0 +1,12 @@
+# Mike's JD45 standard layout
+
+- Backlight that matches active layer
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Base for letters and mods.
+
+Function 1 layer adds a centered numpad to the board
+
+Function 2 layer replaces the numpad numbers with Fkeys.
diff --git a/keyboards/jd45/keymaps/mjt/rules.mk b/keyboards/jd45/keymaps/mjt/rules.mk
new file mode 100644
index 0000000000..6eec21160d
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt/rules.mk
@@ -0,0 +1,67 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+# UNICODE_ENABLE = YES # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/jd45/keymaps/mjt6u/Makefile b/keyboards/jd45/keymaps/mjt6u/Makefile
new file mode 100644
index 0000000000..f9cec3b84a
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt6u/Makefile
@@ -0,0 +1,23 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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 this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+DEBUG_ENABLE = yes
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/jd45/keymaps/mjt6u/config.h b/keyboards/jd45/keymaps/mjt6u/config.h
new file mode 100644
index 0000000000..bf9dc6df3b
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt6u/config.h
@@ -0,0 +1,84 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER geekhack
+#define PRODUCT JD45
+#define DESCRIPTION q.m.k. keyboard firmware for JD45
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 13
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { F0, F1, F5, B4 }
+#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B7
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/jd45/keymaps/mjt6u/keymap.c b/keyboards/jd45/keymaps/mjt6u/keymap.c
new file mode 100644
index 0000000000..44f0c31db3
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt6u/keymap.c
@@ -0,0 +1,149 @@
+#include "jd45.h"
+
+enum jd45_layers
+{
+ _QWERTY,
+ _QWERTYNUMMODS,
+ _NUMSYM,
+ _FUNCTION,
+ _NUMPAD,
+ _FKEYNUMPAD,
+ _ADJUST
+};
+
+enum jd45_keycodes
+{
+ NUMSYM = SAFE_RANGE,
+ MACSLEEP,
+ USEFNMODS,
+ USENUMMODS,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+#define LONGPRESS_DELAY 150
+#define LAYER_TOGGLE_DELAY 900
+
+#define _______ KC_TRNS
+#define __MOD__ KC_TRNS
+#define XXXXXXX KC_NO
+#define F_FNSPC F(0)
+#define F_NUMSPC F(1)
+#define F_FNTAB F(2)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = {
+ {F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC},
+ {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
+ { XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_FNSPC, XXXXXXX, XXXXXXX, MO(_FUNCTION), MO(_ADJUST) }
+},
+[_QWERTYNUMMODS] = {
+ {F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC},
+ {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
+ {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_NUMSPC, XXXXXXX, XXXXXXX, MO(_FKEYNUMPAD), MO(_ADJUST) }
+},
+[_NUMSYM] = {
+{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_DEL},
+ {__MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______},
+ {_______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______},
+{XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}
+},
+[_FUNCTION] = {
+{__MOD__, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
+{__MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______},
+{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+{XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__ , __MOD__}
+},
+[_NUMPAD] = {
+{KC_GRV, _______, KC_UP, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC},
+{_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_4, KC_5, KC_6, KC_INS, KC_HOME, KC_PGUP, _______, _______},
+{_______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DEL, KC_END, KC_PGDN, _______, _______},
+{XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}
+},
+[_FKEYNUMPAD] = {
+{_______, _______, KC_VOLU, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, _______},
+{_______, KC_MPRV, KC_VOLD, KC_MNXT, KC_F4, KC_F5, KC_F6, KC_J, KC_K, KC_L, KC_SCLN, _______},
+{_______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______},
+{XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__ }
+},
+[_ADJUST] = {
+ {_______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______},
+ { _______, _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______},
+ { _______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______},
+ {XXXXXXX, _______, _______,XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}
+ }
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_TAP_KEY(_NUMSYM, KC_SPC),
+ [1] = ACTION_LAYER_TAP_KEY(_NUMPAD, KC_SPC),
+ [2] = ACTION_LAYER_TAP_KEY(_FUNCTION, KC_TAB),
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+static bool singular_key = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t macro_kc = (keycode == MO(_ADJUST) ? DYN_REC_STOP : keycode);
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+ println(" ");
+ print("process record");
+
+ switch (keycode) {
+ case MACSLEEP:
+ if (record->event.pressed) {
+ // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case USEFNMODS:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QWERTY);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_fnpc, false, 0);
+ #endif
+ print("Space-FN");
+ }
+ return false;
+ break;
+ case USENUMMODS:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QWERTYNUMMODS);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_fnmac, false, 0);
+ #endif
+ print("Space-Numpad");
+ }
+ return false;
+ break;
+ default:
+ singular_key = false;
+ break;
+ }
+
+ return true;
+};
+
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+ // debug_enable = true;
+}
diff --git a/keyboards/jd45/keymaps/mjt6u/readme.md b/keyboards/jd45/keymaps/mjt6u/readme.md
new file mode 100644
index 0000000000..a43ddf5fca
--- /dev/null
+++ b/keyboards/jd45/keymaps/mjt6u/readme.md
@@ -0,0 +1,23 @@
+# Mike's JD45 with 6u Spacebar
+
+- Early draft of numsym that misses a lot of symbols
+- Numpad layer available for evaluation
+- Works with iPhone Camera Adapter
+- Dynamic macros
+
+## Layers
+
+Qwerty for letters and mods.
+
+Qwertymods layer switches some Modifiers around
+
+Numsym puts the number keys across the top row like a Planck. Arrows are on hjkl
+which makes the other NumSym dynamic from my other boards fall apart
+
+Function layer replaces the top row numbers with Fkeys.
+
+Numpad layer makes a number pad in the center.
+
+Fkeynumpad replaces the numpad numbers with Fkeys.
+
+Adjust layer has macros and configuration.
diff --git a/keyboards/lets_split/keymaps/mjt/Makefile b/keyboards/lets_split/keymaps/mjt/Makefile
new file mode 100644
index 0000000000..90616d1f19
--- /dev/null
+++ b/keyboards/lets_split/keymaps/mjt/Makefile
@@ -0,0 +1,25 @@
+
+# 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 = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+ONEHAND_ENABLE = no # Enable one-hand typing
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/mjt/config.h b/keyboards/lets_split/keymaps/mjt/config.h
new file mode 100644
index 0000000000..dc9fa5b5c0
--- /dev/null
+++ b/keyboards/lets_split/keymaps/mjt/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2012 Jun Wako <wakojun@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
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+
+#define USE_SERIAL
+
+#define MASTER_LEFT
+// #define _MASTER_RIGHT
+// #define EE_HANDS
+
+
+#ifdef SUBPROJECT_rev1
+ #include "../../rev1/config.h"
+#endif
+#ifdef SUBPROJECT_rev2
+ #include "../../rev2/config.h"
+#endif
+#ifdef SUBPROJECT_rev2fliphalf
+ #include "../../rev2fliphalf/config.h"
+#endif
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 10 \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/mjt/keymap.c b/keyboards/lets_split/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..4dd0d9aa91
--- /dev/null
+++ b/keyboards/lets_split/keymaps/mjt/keymap.c
@@ -0,0 +1,217 @@
+#include "lets_split.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+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] = KEYMAP( \
+ 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] = KEYMAP( \
+ 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] = KEYMAP( \
+ 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] = KEYMAP( \
+ 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] = KEYMAP( \
+ 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] = KEYMAP( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#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_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_colemak, false, 0);
+ #endif
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
+ #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;
+} \ No newline at end of file
diff --git a/keyboards/mitosis/keymaps/mjt/config.h b/keyboards/mitosis/keymaps/mjt/config.h
new file mode 100644
index 0000000000..2209a9e0d5
--- /dev/null
+++ b/keyboards/mitosis/keymaps/mjt/config.h
@@ -0,0 +1,74 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEEB
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER MJT
+#define PRODUCT Mitosis
+#define DESCRIPTION q.m.k. keyboard firmware for Mitosis
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 10
+
+// fix iPhone power adapter issue
+#define USB_MAX_POWER_CONSUMPTION 50
+// #define CATERINA_BOOTLOADER
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+#define PREVENT_STUCK_MODIFIERS
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+//UART settings for communication with the RF microcontroller
+#define SERIAL_UART_BAUD 1000000
+#define SERIAL_UART_DATA UDR1
+#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
+#define SERIAL_UART_INIT() do { \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX and RX */ \
+ UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ } while(0)
+
+#endif
diff --git a/keyboards/mitosis/keymaps/mjt/keymap.c b/keyboards/mitosis/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..01443d5f49
--- /dev/null
+++ b/keyboards/mitosis/keymaps/mjt/keymap.c
@@ -0,0 +1,329 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "mitosis.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum mitosis_layers
+{
+ _QWERTY,
+ _SHIFTED,
+ _FUNCTIONPC,
+ _FUNCTIONMAC,
+ _FUNCSHIFT,
+ _ADJUST
+};
+
+enum mitosis_keycodes
+{
+ FNKEY = SAFE_RANGE,
+ SHIFT,
+ MACSLEEP,
+ FNMAC,
+ FNPC,
+ DYNAMIC_MACRO_RANGE,
+};
+
+
+// Macro definitions for readability
+enum mitosis_macros
+{
+ VOLU,
+ VOLD,
+ ESCM
+};
+
+
+#include "dynamic_macro.h"
+
+#define LONGPRESS_DELAY 150
+#define LAYER_TOGGLE_DELAY 900
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define __MOD__ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = { /* QWERTY adapted to this crazy thing */
+ {KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P },
+ {KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN },
+ {SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH) },
+ {XXXXXXX, KC_LCTL, M(ESCM), KC_TAB, KC_QUOT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX },
+ {XXXXXXX, KC_LALT, KC_LGUI, KC_SPC, SHIFT, FNKEY, KC_BSPC, KC_ENT, MO(_ADJUST), XXXXXXX }
+ },
+
+
+ [_SHIFTED] = { /* Shifted Layer, layered so that tri_layer can be used, or selectively
+ able to modify individual key's shifted behaviour */
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {XXXXXXX, __MOD__, KC_DEL, _______, _______, _______, _______, _______, _______, XXXXXXX },
+ {XXXXXXX, __MOD__, __MOD__, _______, __MOD__, __MOD__, _______, _______, KC_NO, XXXXXXX }
+ },
+
+
+ [_FUNCTIONPC] = { /* Function Layer mimicks planck's raise layer somewhat */
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 },
+ {LCTL(KC_A), LCTL(KC_S), _______, LCTL(KC_F),_______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC },
+ {LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V),_______, _______, KC_BSLS, _______, _______, KC_QUOT },
+ {XXXXXXX, __MOD__, KC_DEL, _______, KC_GRV, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX },
+ {XXXXXXX, __MOD__, __MOD__, _______, __MOD__, __MOD__, _______, KC_PSCR, KC_NO, XXXXXXX }
+ },
+
+ [_FUNCTIONMAC] = { /* Function Layer mimicks planck's raise layer somewhat */
+ {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0 },
+ {LGUI(KC_A), LGUI(KC_S), _______, LGUI(KC_F),_______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC },
+ {LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V),_______, _______, KC_BSLS, _______, _______, KC_QUOT },
+ {XXXXXXX, __MOD__, KC_DEL, _______, KC_GRV, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX },
+ {XXXXXXX, __MOD__, __MOD__, _______, __MOD__, __MOD__, _______, KC_PSCR, KC_NO, XXXXXXX }
+ },
+
+ [_FUNCSHIFT] = { /* Function Shifted Layer mimicks planck's lower layer somewhat */
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_LCBR, KC_RCBR },
+ {KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______ },
+ {XXXXXXX, __MOD__, KC_DEL, _______, KC_TILD, _______, _______, _______, _______, XXXXXXX },
+ {XXXXXXX, __MOD__, __MOD__, _______, __MOD__, __MOD__, _______, _______, _______, XXXXXXX }
+ },
+
+
+ [_ADJUST] = { /* Adjust layer for fancy stuff and macros */
+ {RESET, FNPC, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______ },
+ {FNMAC, _______, AU_ON, AU_OFF, _______, _______, _______, _______, MACSLEEP, _______ },
+ {MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY },
+ {XXXXXXX, __MOD__, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, XXXXXXX },
+ {XXXXXXX, __MOD__, __MOD__, _______, __MOD__, __MOD__, _______, _______, __MOD__, XXXXXXX }
+ }
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND);
+float tone_fnpc[][2] = SONG(PLOVER_SOUND);
+float tone_fnmac[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+static uint16_t function_layer = _FUNCTIONMAC;
+static uint16_t key_timer;
+
+void persistent_function_layer_set(uint16_t new_function_layer) {
+ // eeconfig_update_function_layer(new_function_layer);
+ function_layer = new_function_layer;
+ // should clear layers to avoid getting stuck.
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+
+ //switch multiplexing for media, short tap for volume up, long press for play/pause
+ case VOLU:
+ if (record->event.pressed) {
+ key_timer = timer_read(); // if the key is being pressed, we start the timer.
+ } else { // this means the key was just released, so we can figure out how long it was pressed for (tap or "held down").
+ if (timer_elapsed(key_timer) > LONGPRESS_DELAY) { // LONGPRESS_DELAY being 150ms, the threshhold we pick for counting something as a tap.
+ return MACRO(T(MPLY), END);
+ } else {
+ return MACRO(T(VOLU), END);
+ }
+ }
+ break;
+
+ //switch multiplexing for media, short tap for volume down, long press for next track
+ case VOLD:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ } else {
+ if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
+ return MACRO(T(MNXT), END);
+ } else {
+ return MACRO(T(VOLD), END);
+ }
+ }
+ break;
+
+ //switch multiplexing for escape, short tap for escape, long press for context menu
+ case ESCM:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ } else {
+ if (timer_elapsed(key_timer) > LONGPRESS_DELAY) {
+ return MACRO(T(APP), END);
+ } else {
+ return MACRO(T(ESC), END);
+ }
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+static bool singular_key = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t macro_kc = (keycode == MO(_ADJUST) ? DYN_REC_STOP : keycode);
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+ uint8_t layer;
+ layer = biton32(layer_state); // get the current layer
+
+ //custom layer handling for tri_layer,
+ switch (keycode) {
+ case MACSLEEP:
+ if (record->event.pressed) {
+ // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case FNKEY:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ singular_key = true;
+ // layer_on(_FUNCTION);
+ layer_on(function_layer);
+ } else {
+ if (timer_elapsed(key_timer) < LAYER_TOGGLE_DELAY || !singular_key) {
+ layer_off(function_layer);
+ }
+ }
+ update_tri_layer(function_layer, _SHIFTED, _FUNCSHIFT);
+ return false;
+ break;
+ //SHIFT is handled as LSHIFT in the general case
+ case SHIFT:
+ if (record->event.pressed) {
+ key_timer = timer_read();
+ singular_key = true;
+ layer_on(_SHIFTED);
+ register_code(KC_LSFT);
+ } else {
+ if (timer_elapsed(key_timer) < LAYER_TOGGLE_DELAY || !singular_key) {
+ layer_off(_SHIFTED);
+ unregister_code(KC_LSFT);
+ }
+ }
+ update_tri_layer(function_layer, _SHIFTED, _FUNCSHIFT);
+ return false;
+ break;
+ case FNPC:
+ if (record->event.pressed) {
+ persistent_function_layer_set(_FUNCTIONPC);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_fnpc, false, 0);
+ #endif
+ }
+ return false;
+ break;
+ case FNMAC:
+ if (record->event.pressed) {
+ persistent_function_layer_set(_FUNCTIONMAC);
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_fnmac, false, 0);
+ #endif
+ }
+ return false;
+ break;
+ //If any other key was pressed during the layer mod hold period,
+ //then the layer mod was used momentarily, and should block latching
+ default:
+ singular_key = false;
+ break;
+ }
+
+ //FUNCSHIFT has been shifted by the SHIFT handling, some keys need to be excluded
+ if (layer == _FUNCSHIFT) {
+ //F1-F12 should be sent as unshifted keycodes,
+ //and ] needs to be unshifted or it is sent as }
+ if ( (keycode >= KC_F1 && keycode <= KC_F12)
+ || keycode == KC_RBRC ) {
+ if (record->event.pressed) {
+ unregister_mods(MOD_LSFT);
+ } else {
+ register_mods(MOD_LSFT);
+ }
+ }
+ }
+
+ return true;
+};
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+
+#endif
+
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case _QWERTY:
+ set_led_off;
+ break;
+ case _FUNCTIONMAC:
+ set_led_blue;
+ break;
+ case _FUNCTIONPC:
+ set_led_cyan;
+ break;
+ case _SHIFTED:
+ set_led_red;
+ break;
+ case _FUNCSHIFT:
+ set_led_green;
+ break;
+ case _ADJUST:
+ set_led_white;
+ break;
+ default:
+ break;
+ }
+};
diff --git a/keyboards/planck/keymaps/mjt/Makefile b/keyboards/planck/keymaps/mjt/Makefile
new file mode 100644
index 0000000000..457a3d01d4
--- /dev/null
+++ b/keyboards/planck/keymaps/mjt/Makefile
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/mjt/config.h b/keyboards/planck/keymaps/mjt/config.h
new file mode 100644
index 0000000000..4072c5d7f2
--- /dev/null
+++ b/keyboards/planck/keymaps/mjt/config.h
@@ -0,0 +1,33 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/*
+ * 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
+
+// fix iPhone power adapter issue
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+#endif
diff --git a/keyboards/planck/keymaps/mjt/keymap.c b/keyboards/planck/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..599dedf98b
--- /dev/null
+++ b/keyboards/planck/keymaps/mjt/keymap.c
@@ -0,0 +1,283 @@
+// This is MJT's bastardization of the planck and minivan defaults
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.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.
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST,
+ _DYN
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV,
+ MACSLEEP,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// 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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT) },
+ {MO(_DYN), 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 | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = {
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Dn |Pg Up | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Home |Pg Dn |Pg Up | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGDN, KC_PGUP, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | |Pause |PR SC | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| |Sleep |Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |TogLED| | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______ , RESET, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_PSCR, KC_DEL },
+ {_______ , _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, MACSLEEP, PLOVER, _______},
+ {_______ , MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+},
+[_DYN] = {
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______ },
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______}
+}
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistant_default_layer_set(1UL<<_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 BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(tone_plover);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_plover_gb);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+ PLAY_SONG(tone_goodbye);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/mjt/readme.md b/keyboards/planck/keymaps/mjt/readme.md
new file mode 100644
index 0000000000..ce4d90f217
--- /dev/null
+++ b/keyboards/planck/keymaps/mjt/readme.md
@@ -0,0 +1,22 @@
+# Mike's Plancklike Planck
+
+- Music/Audio
+- Dynamic Macros
+- Media Keys
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Qwerty for letters and mods.
+
+Raise and Lower are mostly default with a few tweaks.
+
+Adjust layer is tough to get to so it is only for keyboard configuration stuff.
+
+## Dynamic Macros
+
+Hold TAB key, then press ";" to record macro 1 and "'" to record macro 2.
+
+When you are done recording, press TAB again.
+
+For playback of macros, TAB+"," plays macro 1 and TAB+","plays macro 2.
diff --git a/keyboards/planck/keymaps/mjtnumsym/Makefile b/keyboards/planck/keymaps/mjtnumsym/Makefile
new file mode 100644
index 0000000000..457a3d01d4
--- /dev/null
+++ b/keyboards/planck/keymaps/mjtnumsym/Makefile
@@ -0,0 +1,3 @@
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/planck/keymaps/mjtnumsym/config.h b/keyboards/planck/keymaps/mjtnumsym/config.h
new file mode 100644
index 0000000000..4072c5d7f2
--- /dev/null
+++ b/keyboards/planck/keymaps/mjtnumsym/config.h
@@ -0,0 +1,33 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+/*
+ * 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
+
+// fix iPhone power adapter issue
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+#endif
diff --git a/keyboards/planck/keymaps/mjtnumsym/keymap.c b/keyboards/planck/keymaps/mjtnumsym/keymap.c
new file mode 100644
index 0000000000..0be016fb7f
--- /dev/null
+++ b/keyboards/planck/keymaps/mjtnumsym/keymap.c
@@ -0,0 +1,282 @@
+// This is MJT's bastardization of the planck and minivan defaults
+
+#include "planck.h"
+#include "action_layer.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#include "eeconfig.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.
+
+enum planck_layers {
+ _QWERTY,
+ _FKEYS,
+ _NUMSYM,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ PLOVER,
+ FKEYS,
+ NUMSYM,
+ BACKLIT,
+ EXT_PLV,
+ MACSLEEP,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// 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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |FKEYS | Space |NUMSYM | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = {
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT) },
+ {KC_LCTL, KC_LCTL, KC_LALT, KC_LGUI, FKEYS, KC_SPC, KC_SPC, NUMSYM, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
+},
+
+/* FKEYS
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F11 | F12 | F13 | F14 | F15 | | |Sleep | | Rec1 | Rec2 |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | Mac1 | Mac2 | | Stop |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FKEYS] = {
+ {KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______},
+ {KC_DEL, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F6, _______, _______, MACSLEEP, DYN_REC_START1, DYN_REC_START2},
+ {_______, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, DYN_REC_STOP},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+/* NUMSYM
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | _ | + | { | } | | | - | = | [ | ] | \ | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Home |Pg Dn |Pg Up | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NUMSYM] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
+ {KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______},
+ {_______,KC_UNDS, KC_PLUS,KC_LCBR, KC_RCBR, KC_PIPE, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+
+/* Adjust (FKEYS + NUMSYM)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | |Pause |PR SC | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| |Sleep |Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |TogLED| | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = {
+ {_______ , RESET, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, KC_PSCR, KC_DEL },
+ {_______ , _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, MACSLEEP, PLOVER, _______},
+ {_______ , MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
+ {BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
+} /*,
+[_DYN] = {
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______ },
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______}
+}*/
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t macro_kc = (keycode == FKEYS ? DYN_REC_STOP : keycode);
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case FKEYS:
+ if (record->event.pressed) {
+ layer_on(_FKEYS);
+ update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+ } else {
+ layer_off(_FKEYS);
+ update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+ }
+ return false;
+ break;
+ case NUMSYM:
+ if (record->event.pressed) {
+ layer_on(_NUMSYM);
+ update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+ } else {
+ layer_off(_NUMSYM);
+ update_tri_layer(_FKEYS, _NUMSYM, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(tone_plover);
+ #endif
+ layer_off(_NUMSYM);
+ layer_off(_FKEYS);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_plover_gb);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+ PLAY_SONG(tone_goodbye);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
diff --git a/keyboards/planck/keymaps/mjtnumsym/readme.md b/keyboards/planck/keymaps/mjtnumsym/readme.md
new file mode 100644
index 0000000000..ba6d05144c
--- /dev/null
+++ b/keyboards/planck/keymaps/mjtnumsym/readme.md
@@ -0,0 +1,26 @@
+# Mike's Rethought Planck
+
+- Music/Audio
+- Dynamic Macros
+- Media Keys
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Qwerty for letters and mods.
+
+Numsym for all numbers and symbols used in typing. Follows a similar approach to
+planck but puts both on the same layer eschewing the F-keys.
+
+Fkeys layer is for the seldom used stuff like F-keys and some additional features
+such as dynamic macros, media keys, and a sleep shortcut for OS X.
+
+Adjust layer is mainly for keyboard configuration stuff.
+
+## Dynamic Macros
+
+Hold TAB key, then press ";" to record macro 1 and "'" to record macro 2.
+
+When you are done recording, press TAB again.
+
+For playback of macros, TAB+"," plays macro 1 and TAB+","plays macro 2.
diff --git a/keyboards/roadkit/keymaps/flipphone/Makefile b/keyboards/roadkit/keymaps/flipphone/Makefile
new file mode 100644
index 0000000000..f4671a9d11
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/Makefile
@@ -0,0 +1,21 @@
+# 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 = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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 this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/config.h b/keyboards/roadkit/keymaps/flipphone/config.h
new file mode 100644
index 0000000000..df06a26206
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/keymap.c b/keyboards/roadkit/keymaps/flipphone/keymap.c
new file mode 100644
index 0000000000..b48d72e9ee
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/keymap.c
@@ -0,0 +1,216 @@
+#include "roadkit.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+void backlight_toggle(void){
+};
+
+enum roadkit_layers {
+ _NUMPAD,
+ _FPH,
+ _FPHNOISY,
+ _ADJUST,
+ _DYN
+};
+
+enum roadkit_keycodes {
+ NUMPAD = SAFE_RANGE,
+ FPH_1,
+ FPH_2,
+ FPH_3,
+ FPH_4,
+ FPH_5,
+ FPH_6,
+ FPH_7,
+ FPH_8,
+ FPH_9,
+ FN_0,
+ BACKLIT,
+ MACSLEEP,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// Fillers to make keymaps cleaner looking
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_NUMPAD] = /* Numpad */
+ KEYMAP(KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
+ KC_KP_4, KC_KP_5, KC_KP_6, \
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, \
+ LT(_ADJUST, KC_KP_0), KC_KP_DOT),
+ [_FPH] = /* Quiet T9 */
+ KEYMAP(FPH_7, FPH_8, FPH_9, KC_KP_PLUS, \
+ FPH_4, FPH_5, FPH_6, \
+ FPH_1, FPH_2, FPH_3, SFT_T(KC_KP_ENTER), \
+ LT(_ADJUST, KC_SPACE), KC_KP_DOT),
+ [_FPHNOISY] = /* Noisy T9 */
+ KEYMAP(FPH_7, FPH_8, FPH_9, KC_KP_PLUS, \
+ FPH_4, FPH_5, FPH_6, \
+ FPH_1, FPH_2, FPH_3, SFT_T(KC_KP_ENTER), \
+ LT(_ADJUST, KC_SPACE), KC_KP_DOT),
+ [_ADJUST] = /* Adjustments */
+ KEYMAP(KC_NUMLOCK, TG(_FPHNOISY), TG(_FPH), TG(_NUMPAD), \
+ KC_BSPC, BACKLIT, KC_DEL, \
+ MACSLEEP, _______, _______, _______, \
+ _______, MO(_DYN)),
+ [_DYN] = /* DYNAMIC MACRO */
+ KEYMAP(DYN_REC_START1, DYN_REC_START2, _______, DYN_REC_STOP, \
+ _______, _______, _______, \
+ DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
+ _______, _______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+uint16_t fph_tap_qty = false;
+uint16_t fph_keycode = 0; // stores which spacebar was used, either raise or lower...
+
+uint16_t get_render_keycode(uint16_t keycode, uint16_t tap_qty){ // maybe replace shift with "mods"
+ tap_qty--; // reduce by one to match array indexes.
+ switch(keycode){
+ case FPH_2:
+ {uint16_t kc[] = {KC_A, KC_B, KC_C};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_3:
+ {uint16_t kc[] = {KC_D, KC_E, KC_F};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_4:
+ {uint16_t kc[] = {KC_G, KC_H, KC_I};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_5:
+ {uint16_t kc[] = {KC_J, KC_K, KC_L};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_6:
+ {uint16_t kc[] = {KC_M, KC_N, KC_O};
+ if(tap_qty % 6 > 2)
+ return LSFT(kc[tap_qty % 3]);
+ return kc[tap_qty % 3];}
+ break;
+ case FPH_7:
+ {uint16_t kc[] = {KC_P, KC_Q, KC_R, KC_S};
+ if(tap_qty % 8 > 2)
+ return LSFT(kc[tap_qty % 4]);
+ return kc[tap_qty % 4];}
+ break;
+ case FPH_8:
+ {uint16_t kc[] = {KC_T, KC_U, KC_V};
+ if(tap_qty % 8 > 2)
+ return LSFT(kc[tap_qty % 4]);
+ return kc[tap_qty % 4];}
+ break;
+ case FPH_9:
+ {uint16_t kc[] = {KC_W, KC_X, KC_Y, KC_Z};
+ if(tap_qty % 8 > 2)
+ return LSFT(kc[tap_qty % 4]);
+ return kc[tap_qty % 4];}
+ break;
+ case FPH_1:
+ {uint16_t kc[] = {KC_COMM, LSFT(KC_SLSH), KC_EXLM, KC_AT, KC_MINS, KC_UNDS, KC_PLUS, \
+ KC_SCLN, LSFT(KC_SCLN), KC_QUOT, LSFT(KC_QUOT), KC_TILD, \
+ KC_PIPE, KC_BSLS, KC_HASH, LSFT(KC_4), KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, \
+ KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, LSFT(KC_COMM), LSFT(KC_DOT)};
+ return kc[tap_qty % 26];}
+ }
+ return KC_NO;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+ uint8_t layer;
+ layer = biton32(layer_state);
+
+ switch (keycode) {
+ case FPH_1 ... FPH_9:
+ if(layer == _FPHNOISY){
+ if (record->event.pressed) {
+ if(fph_keycode != keycode) { // key change
+ fph_tap_qty = 0;
+ fph_keycode = keycode;
+ } else { // same key tapped again so erase and increment.
+ register_code(KC_BSPC);
+ unregister_code(KC_BSPC);
+ fph_tap_qty++;
+ }
+ uint16_t render_keycode = get_render_keycode(keycode, fph_tap_qty);
+ // find mods? Apply mods..
+ register_code(render_keycode);
+ unregister_code(render_keycode);
+ } else {
+ // do we need to do anything on key-release?
+ }
+ } else { // not noisy, be demure .
+ if (record->event.pressed) {
+ if(fph_keycode != keycode) { // key change, kill everything.
+ uint16_t render_keycode = get_render_keycode(fph_keycode, fph_tap_qty);
+ // find mods? Apply mods..
+ register_code(render_keycode);
+ unregister_code(render_keycode);
+ fph_keycode = keycode;
+ fph_tap_qty = 0;
+ } else { // same key tapped again so increment counter silently
+ fph_tap_qty++;
+ }
+ } else {
+ // do we need to do anything on key-release?
+ // maybe start a timer on this one?
+ }
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/roadkit/keymaps/flipphone/readme.md b/keyboards/roadkit/keymaps/flipphone/readme.md
new file mode 100644
index 0000000000..ad630be195
--- /dev/null
+++ b/keyboards/roadkit/keymaps/flipphone/readme.md
@@ -0,0 +1,26 @@
+# Flip Phone layout for Roadkit
+
+BEWARE, THIS DOES NOT WORK YET.
+
+Uses the numpad with classic cellular phone style letters assigned to the numbers.
+
+# LAYERS
+
+* Numpad - The layer that matches the caps mostly
+* FPH - Base layer for text
+* FPHNOISY - Text layer that outputs every character and then backspaces as they're replaced
+* DYN - dynamic macro layer for recording and playing macros
+
+## FPH
+
+Poke the "2" key twice and it makes "B".
+
+## FPHNOISY
+
+Poke the "2" key twice and it makes "A"+backspace+"B" so you can see it cycle through.
+
+## MACROS
+
+May be able to record macros with the T9 layer because the "KC_*"s are only sent
+at the end. Trying to do a macro with T9NOISY would probably fill up the buffer
+in just a few characters.
diff --git a/keyboards/roadkit/keymaps/mjt/Makefile b/keyboards/roadkit/keymaps/mjt/Makefile
new file mode 100644
index 0000000000..f4671a9d11
--- /dev/null
+++ b/keyboards/roadkit/keymaps/mjt/Makefile
@@ -0,0 +1,21 @@
+# 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 = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = 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 this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/mjt/config.h b/keyboards/roadkit/keymaps/mjt/config.h
new file mode 100644
index 0000000000..df06a26206
--- /dev/null
+++ b/keyboards/roadkit/keymaps/mjt/config.h
@@ -0,0 +1,8 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+
+#endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/mjt/keymap.c b/keyboards/roadkit/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..d3c82ac84a
--- /dev/null
+++ b/keyboards/roadkit/keymaps/mjt/keymap.c
@@ -0,0 +1,236 @@
+#include "roadkit.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+void backlight_toggle(void){
+};
+
+enum roadkit_layers {
+ _NUMPAD,
+ _NAVIGATION,
+ _EXCEL,
+ _ADJUST,
+ _DYN
+};
+
+enum minivan_keycodes {
+ NUMPAD = SAFE_RANGE,
+ NAVIGATION,
+ EXCEL,
+ NUMPAD_LOCK,
+ NAVIGATION_LOCK,
+ EXCEL_LOCK,
+ PARENS,
+ BRACKETS,
+ BRACES,
+ BACKLIT,
+ MACSLEEP,
+ DYNAMIC_MACRO_RANGE,
+};
+
+#include "dynamic_macro.h"
+
+// Fillers to make keymaps cleaner looking
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_NUMPAD] = /* Numpad */
+ KEYMAP(KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, \
+ KC_KP_4, KC_KP_5, KC_KP_6, \
+ KC_KP_1, KC_KP_2, KC_KP_3, NAVIGATION, \
+ EXCEL, KC_KP_DOT),
+ [_EXCEL] = /* Excel related */
+ KEYMAP(KC_KP_SLASH, KC_KP_ASTERISK, KC_MINS, KC_TAB, \
+ KC_QUOT, KC_KP_EQUAL, PARENS , \
+ KC_DQT, BRACKETS, BRACES, _______, \
+ _______, MO(_DYN)),
+ [_NAVIGATION] = /* Navigation */
+ KEYMAP(KC_HOME, _______, KC_PGUP, KC_TAB, \
+ KC_END, KC_UP, KC_PGDN, \
+ KC_LEFT, KC_DOWN, KC_RIGHT, _______, \
+ _______, MO(_DYN)),
+ [_ADJUST] = /* Adjustments */
+ KEYMAP(KC_NUMLOCK, MACSLEEP, BACKLIT, _______, \
+ KC_BSPC, _______, KC_DEL, \
+ EXCEL_LOCK, NUMPAD_LOCK, NAVIGATION_LOCK, _______, \
+ _______, _______),
+ [_DYN] = /* DYNAMIC MACRO */
+ KEYMAP(DYN_REC_START1, DYN_REC_START2, _______, _______, \
+ _______, _______, _______, \
+ DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, _______, _______, \
+ _______, _______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_numpad[][2] = SONG(QWERTY_SOUND);
+float tone_excel[][2] = SONG(DVORAK_SOUND);
+float tone_navigation[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool fn_tap_used = false; // sets to false when space is pressed,
+ // sets to true when any other key is pressed,
+ //when space is lifted, if another key was prssed, don't send space.
+uint16_t fn_keycode = 0; // stores which spacebar was used, either raise or lower...
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case NAVIGATION: // This key is enter if tapped, navigation if held
+ if (record->event.pressed) {
+ fn_keycode = NAVIGATION; // these two lines figure out if the next action is
+ fn_tap_used = false;
+ layer_on(_NAVIGATION);
+ update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+ } else {
+ layer_off(_NAVIGATION);
+ update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+ if(!fn_tap_used && fn_keycode == NAVIGATION ){
+ register_code(KC_KP_ENTER);
+ unregister_code(KC_KP_ENTER);
+ fn_keycode = 0;
+ fn_tap_used = false;
+ }
+ }
+ return false;
+ break;
+ case EXCEL:
+ if (record->event.pressed) {
+ fn_keycode = EXCEL;
+ fn_tap_used = false;
+ layer_on(_EXCEL);
+ update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+ } else {
+ layer_off(_EXCEL);
+ update_tri_layer(_EXCEL, _NAVIGATION, _ADJUST);
+ if(!fn_tap_used && fn_keycode == EXCEL ){
+ register_code(KC_KP_0);
+ unregister_code(KC_KP_0);
+ fn_keycode = 0;
+ fn_tap_used = false;
+ }
+ }
+ return false;
+ break;
+ default:
+ fn_tap_used = true;
+ break; // don't return because this just handles the spacebars.
+ }
+ // this is the normal keycode processing switch from Planck default layout.
+ switch (keycode) {
+ case NUMPAD_LOCK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_numpad, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_NUMPAD);
+ }
+ return false;
+ break;
+ case NAVIGATION_LOCK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_navigation, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_NAVIGATION);
+ }
+ return false;
+ break;
+ case EXCEL_LOCK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_excel, false, 0);
+ #endif
+ persistant_default_layer_set(1UL<<_EXCEL);
+ }
+ return false;
+ break;
+ case PARENS:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_9);
+ unregister_code(KC_9);
+ register_code(KC_0);
+ unregister_code(KC_0);
+ register_code(KC_RSFT);
+ register_code(KC_LEFT);
+ unregister_code(KC_LEFT);
+ }
+ return false;
+ break;
+ case BRACKETS:
+ if (record->event.pressed) {
+ register_code(KC_LBRC);
+ unregister_code(KC_LBRC);
+ register_code(KC_RBRC);
+ unregister_code(KC_RBRC);
+ register_code(KC_LEFT);
+ unregister_code(KC_LEFT);
+ }
+ return false;
+ break;
+ case BRACES:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_LBRC);
+ unregister_code(KC_LBRC);
+ register_code(KC_RBRC);
+ unregister_code(KC_RBRC);
+ unregister_code(KC_RSFT);
+ register_code(KC_LEFT);
+ unregister_code(KC_LEFT);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/roadkit/keymaps/mjt/readme.md b/keyboards/roadkit/keymaps/mjt/readme.md
new file mode 100644
index 0000000000..80c0e5240e
--- /dev/null
+++ b/keyboards/roadkit/keymaps/mjt/readme.md
@@ -0,0 +1,22 @@
+# Mike's custom keymap for roadkit
+
+Based on the 13 key layout.
+
+## LAYERS
+
+* Numpad - The layer that matches the caps
+* Excel - / * - = and () [] {} macros
+* Navigation - arrow keys and home/end
+* ADJUST - just like planck adjust, lets you set default layer.
+* DYN - dynamic macro layer for recording and playing macros
+
+## MACROS
+
+Sadly, the dynamic macros are probably going worthless because they keys that
+they record have to be pressed on this keyboard. This keyboard doesn't have
+most letters...
+
+## LEADER KEYS
+
+This board would probably be better with the user of leader keys instead of
+complex layers with a raise/lower setup... Something to look into for later.
diff --git a/keyboards/tv44/keymaps/mjt/Makefile b/keyboards/tv44/keymaps/mjt/Makefile
new file mode 100644
index 0000000000..41afd9a551
--- /dev/null
+++ b/keyboards/tv44/keymaps/mjt/Makefile
@@ -0,0 +1,21 @@
+# 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 = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+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 this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/tv44/keymaps/mjt/config.h b/keyboards/tv44/keymaps/mjt/config.h
new file mode 100644
index 0000000000..e89a3ea125
--- /dev/null
+++ b/keyboards/tv44/keymaps/mjt/config.h
@@ -0,0 +1,14 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "../../config.h"
+
+// place overrides here
+#ifdef BACKLIGHT_ENABLE
+ #define BACKLIGHT_PIN B2
+ #define BACKLIGHT_LEVELS 7
+#endif
+
+#define USB_MAX_POWER_CONSUMPTION 50
+
+#endif
diff --git a/keyboards/tv44/keymaps/mjt/keymap.c b/keyboards/tv44/keymaps/mjt/keymap.c
new file mode 100644
index 0000000000..25f8cfc52a
--- /dev/null
+++ b/keyboards/tv44/keymaps/mjt/keymap.c
@@ -0,0 +1,199 @@
+//Author: mike terhar
+
+#include "tv44.h"
+#include "action_layer.h"
+#include "eeconfig.h"
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+enum minivan_layers {
+ _QWERTY,
+ _NUMSYM,
+ _FKEYS,
+ _FKEYGRV,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ DYNKEY,
+ DYNAMIC_MACRO_RANGE,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define FKEYS F(_FKEYS)
+#define NUMSYM F(_NUMSYM)
+#define FKEYGRV F(_FKEYGRV)
+#define MACSLEEP M(5)
+#define PLOVER M(6)
+#define LAYERRESET M(7)
+#define BACKLIT M(8)
+#define ADJUST M(9)
+#define XXXXXXX KC_NO
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = {
+ {FKEYS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT},
+ {KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT,KC_SLSH,SFT_T(KC_ENT) },
+ {KC_LCTL,KC_LALT,KC_LGUI, KC_SPC,XXXXXXX,XXXXXXX,XXXXXXX,NUMSYM,KC_LEFT,KC_DOWN,KC_UP ,KC_RIGHT}
+},
+[_NUMSYM] = {
+ {FKEYGRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
+ {KC_DEL,KC_EXLM, KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, ADJUST },
+ { _______, KC_UNDS,KC_PLUS, KC_LCBR,KC_RCBR,KC_PIPE , KC_MINS,KC_EQL,KC_LBRC, KC_RBRC, KC_BSLS, _______},
+ {_______,_______,_______,_______,XXXXXXX,XXXXXXX,XXXXXXX,_______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+[_FKEYS] ={
+ {_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______},
+ {KC_DEL, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, MACSLEEP, DYN_REC_START1, DYN_REC_START2 },
+ {KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,_______,DYN_REC_STOP},
+ {_______,_______,_______,LAYERRESET,XXXXXXX,XXXXXXX,XXXXXXX,LAYERRESET, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {LAYERRESET, XXXXXXX, KC_C, KC_V, XXXXXXX , XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+[_ADJUST] = {
+ {_______ , RESET, _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PAUS, KC_PSCR, KC_DEL },
+ {_______ , _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, _______, MACSLEEP, PLOVER, _______},
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {BACKLIT, _______, _______, LAYERRESET, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______}
+}
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_adjust[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+ [_FKEYS] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_TAB),
+ [_FKEYGRV] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_GRV),
+ [_NUMSYM] = ACTION_LAYER_TAP_TOGGLE(_NUMSYM),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 5: // MACSLEEP
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ break;
+ case 6: // PLOVER
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_NUMSYM);
+ layer_off(_FKEYS);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ }
+ break;
+ case 7: // LAYERRESET
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ layer_off(_NUMSYM);
+ layer_off(_FKEYS);
+ layer_off(_PLOVER);
+ layer_off(_ADJUST);
+ }
+ break;
+ case 8: // BACKLIT
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ case 9: // ADJUST
+ if(record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_adjust, false, 0);
+ #endif
+ layer_off(_NUMSYM);
+ layer_off(_FKEYS);
+ layer_off(_PLOVER);
+ layer_on(_ADJUST);
+ }
+ }
+ return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t macro_kc = keycode;
+ if (keycode == FKEYS || keycode == ADJUST || keycode == FKEYGRV ){
+ macro_kc = DYN_REC_STOP;
+ }
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+#endif
diff --git a/keyboards/tv44/keymaps/mjt/readme.md b/keyboards/tv44/keymaps/mjt/readme.md
new file mode 100644
index 0000000000..c86985f6cb
--- /dev/null
+++ b/keyboards/tv44/keymaps/mjt/readme.md
@@ -0,0 +1,26 @@
+# Mike's Minivan
+
+- Arrow Layout (45key)
+- Dynamic Macros
+- Media Keys
+- Works with iPhone Camera Adapter
+
+## Layers
+
+Qwerty for letters and mods.
+
+Numsym for all numbers and symbols used in typing. Follows a similar approach to
+planck but puts both on the same layer eschewing the F-keys.
+
+Fkeys layer is for the seldom used stuff like F-keys and some additional features
+such as dynamic macros, media keys, and a sleep shortcut for OS X.
+
+Adjust layer is tough to get to so it is only for keyboard configuration stuff.
+
+## Dynamic Macros
+
+Hold TAB key, then press ";" to record macro 1 and "'" to record macro 2.
+
+When you are done recording, press TAB again.
+
+For playback of macros, TAB+"," plays macro 1 and TAB+","plays macro 2.