aboutsummaryrefslogtreecommitdiffstats
path: root/keyboards/dm9records/plaid/keymaps
diff options
context:
space:
mode:
authorGravatar James Young <18669334+noroadsleft@users.noreply.github.com>2020-05-30 13:14:59 -0700
committerGravatar GitHub <noreply@github.com>2020-05-30 13:14:59 -0700
commitfced377ac007d27f2650ccffbe0b18abcdcfe23d (patch)
treebd5b141987394a5a16cfc416bfe2b9efdb14d067 /keyboards/dm9records/plaid/keymaps
parent7b8a013826ad90714a05ea522de53adf964ab3b9 (diff)
downloadqmk_firmware-fced377ac007d27f2650ccffbe0b18abcdcfe23d.tar.gz
2020 May 30 Breaking Changes Update (#9215)
* Branch point for 2020 May 30 Breaking Change * Migrate `ACTION_LAYER_TOGGLE` to `TG()` (#8954) * Migrate `ACTION_MODS_ONESHOT` to `OSM()` (#8957) * Migrate `ACTION_DEFAULT_LAYER_SET` to `DF()` (#8958) * Migrate `ACTION_LAYER_MODS` to `LM()` (#8959) * Migrate `ACTION_MODS_TAP_KEY` to `MT()` (#8968) * Convert V-USB usbdrv to a submodule (#8321) * Unify Tap Hold functions and documentation (#8348) * Changing board names to prevent confusion (#8412) * Move the Keyboardio Model01 to a keyboardio/ subdir (#8499) * Move spaceman keyboards (#8830) * Migrate miscellaneous `fn_actions` entries (#8977) * Migrate `ACTION_MODS_KEY` to chained mod keycodes (#8979) * Organizing my keyboards (plaid, tartan, ergoinu) (#8537) * Refactor Lily58 to use split_common (#6260) * Refactor zinc to use split_common (#7114) * Add a message if bin/qmk doesn't work (#9000) * Fix conflicting types for 'tfp_printf' (#8269) * Fixed RGB_DISABLE_AFTER_TIMEOUT to be seconds based & small internals cleanup (#6480) * Refactor and updates to TKC1800 code (#8472) * Switch to qmk forks for everything (#9019) * audio refactor: replace deprecated PLAY_NOTE_ARRAY (#8484) * Audio enable corrections (2/3) (#8903) * Split HHKB to ANSI and JP layouts and Add VIA support for each (#8582) * Audio enable corrections (Part 4) (#8974) * Fix typo from PR7114 (#9171) * Augment future branch Changelogs (#8978) * Revert "Branch point for 2020 May 30 Breaking Change"
Diffstat (limited to 'keyboards/dm9records/plaid/keymaps')
-rw-r--r--keyboards/dm9records/plaid/keymaps/brickbots/config.h19
-rw-r--r--keyboards/dm9records/plaid/keymaps/brickbots/keymap.c411
-rw-r--r--keyboards/dm9records/plaid/keymaps/brickbots/readme.md36
-rw-r--r--keyboards/dm9records/plaid/keymaps/default/config.h19
-rw-r--r--keyboards/dm9records/plaid/keymaps/default/keymap.c410
-rw-r--r--keyboards/dm9records/plaid/keymaps/default/readme.md35
-rw-r--r--keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h19
-rw-r--r--keyboards/dm9records/plaid/keymaps/thehalfdeafchef/keymap.c182
-rw-r--r--keyboards/dm9records/plaid/keymaps/thehalfdeafchef/readme.md5
9 files changed, 1136 insertions, 0 deletions
diff --git a/keyboards/dm9records/plaid/keymaps/brickbots/config.h b/keyboards/dm9records/plaid/keymaps/brickbots/config.h
new file mode 100644
index 000000000..5733b9e4b
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/brickbots/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c b/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
new file mode 100644
index 000000000..20b6eac68
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
@@ -0,0 +1,411 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum plaid_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST
+};
+
+enum plaid_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ EXT_PLV,
+ LED_1,
+ LED_2,
+ LED_3,
+ LED_4,
+ LED_5,
+ LED_6,
+ LED_7,
+ LED_8,
+ LED_9,
+ LED_0
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// array of keys considered modifiers for led purposes
+const uint16_t modifiers[] = {
+ KC_LCTL,
+ KC_RCTL,
+ KC_LALT,
+ KC_RALT,
+ KC_LSFT,
+ KC_RSFT,
+ KC_LGUI,
+ KC_RGUI,
+ LOWER,
+ RAISE
+};
+
+//Setup consts for LED modes
+#define LEDMODE_ON 1 //always on
+#define LEDMODE_OFF 0 //always off
+#define LEDMODE_MODS 2 //On with modifiers
+#define LEDMODE_BLINKIN 3 //blinkinlights - % chance toggle on keypress
+#define LEDMODE_KEY 4 //On with any keypress, off with key release
+#define LEDMODE_ENTER 5 // On with enter key
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ltrl | Rctl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_plaid_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_LCTL, KC_RCTL, 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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_plaid_grid(
+ 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 ,
+ KC_LCTL, KC_RALT, 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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_plaid_grid(
+ 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 ,
+ KC_LCTL, KC_RALT, 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] = LAYOUT_plaid_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_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 Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_plaid_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = LAYOUT_plaid_grid(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Reset | | | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_plaid_grid(
+ RESET,LED_1, LED_2, LED_3, LED_4, LED_5,LED_6, LED_7, LED_8, LED_9, LED_0,KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+//Setup config struct for LED
+typedef union {
+ uint32_t raw;
+ struct {
+ uint8_t red_mode :8;
+ uint8_t green_mode :8;
+ };
+} led_config_t;
+led_config_t led_config;
+
+//Set leds to saved state during powerup
+void keyboard_post_init_user(void) {
+ // Call the post init code.
+ led_config.raw = eeconfig_read_user();
+
+ if(led_config.red_mode == LEDMODE_ON) {
+ writePinHigh(LED_RED);
+ }
+
+ if(led_config.green_mode == LEDMODE_ON) {
+ writePinHigh(LED_GREEN);
+ }
+}
+
+void eeconfig_init_user(void) { // EEPROM is getting reset!
+ led_config.raw = 0;
+ led_config.red_mode = LEDMODE_ON;
+ led_config.green_mode = LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+ eeconfig_update_user(led_config.raw);
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
+ switch (led_mode) {
+ case LEDMODE_MODS:
+ for (int i=0;i<sizeof(modifiers) / sizeof(modifiers[0]);i++) {
+ if(keycode==modifiers[i]) {
+ if (record->event.pressed) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ }
+ }
+ break;
+ case LEDMODE_BLINKIN:
+ if (record->event.pressed) {
+ if(rand() % 2 == 1) {
+ if(rand() % 2 == 0) {
+ writePinLow(led);
+ }
+ else {
+ writePinHigh(led);
+ }
+ }
+ }
+ break;
+ case LEDMODE_KEY:
+ if (record->event.pressed) {
+ writePinHigh(led);
+ return;
+ }
+ else {
+ writePinLow(led);
+ return;
+ }
+ break;
+ case LEDMODE_ENTER:
+ if (keycode==KC_ENT) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ break;
+
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ /* If the either led mode is keypressed based, call the led updater
+ then let it fall through the keypress handlers. Just to keep
+ the logic out of this procedure */
+ if (led_config.red_mode >= LEDMODE_MODS && led_config.red_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_RED, led_config.red_mode, keycode, record);
+ }
+ if (led_config.green_mode >= LEDMODE_MODS && led_config.green_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_GREEN, led_config.green_mode, keycode, record);
+ }
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ 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) {
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case LED_1:
+ if (record->event.pressed) {
+ if (led_config.red_mode==LEDMODE_ON) {
+ led_config.red_mode=LEDMODE_OFF;
+ writePinLow(LED_RED);
+ }
+ else {
+ led_config.red_mode=LEDMODE_ON;
+ writePinHigh(LED_RED);
+ }
+ }
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_2:
+ if (record->event.pressed) {
+ if (led_config.green_mode==LEDMODE_ON) {
+ led_config.green_mode=LEDMODE_OFF;
+ writePinLow(LED_GREEN);
+ }
+ else {
+ led_config.green_mode=LEDMODE_ON;
+ writePinHigh(LED_GREEN);
+ }
+ }
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_3:
+ led_config.red_mode=LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_4:
+ led_config.green_mode=LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_5:
+ led_config.red_mode=LEDMODE_BLINKIN;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_6:
+ led_config.green_mode=LEDMODE_BLINKIN;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_7:
+ led_config.red_mode=LEDMODE_KEY;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_8:
+ led_config.green_mode=LEDMODE_KEY;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_9:
+ led_config.red_mode=LEDMODE_ENTER;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_0:
+ led_config.green_mode=LEDMODE_ENTER;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/dm9records/plaid/keymaps/brickbots/readme.md b/keyboards/dm9records/plaid/keymaps/brickbots/readme.md
new file mode 100644
index 000000000..48a12fa8b
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/brickbots/readme.md
@@ -0,0 +1,36 @@
+# Brickbots keymap for plaid
+Original copyright 2019 Takuya Urakawa (dm9records.com)
+LED Support added by Richard Sutherland (rich@brickbots.com)
+
+This layout is based on the Planck layout, with esc/tab swapped and an extra
+ctrl key in the bottom left corner. It includes an adjust layer (6)
+accessible by holding the lower and raise modifiers (MO3 and MO4) together.
+The adjustment layer is used to set the behavior of the two LEDs:
+
+**Modifier Mode:**
+Activates when any modifier (shift, alt, os, MO) key is held
+down. LED turns off when key is release
+
+**Blinkinlights Mode:**
+Random chance of state change on each keystroke.
+
+**Keypress Mode:**
+On for any keypress as long as the key is pressed
+
+**Carriage Mode:**
+Turns on when enter is pressed, turns off when any next key is pressed
+
+To set the behavior of an LED, and save it to eeprom, hold the
+raise/lower keys together to access the adjust layer, then use
+the keys indicated below to set the behaviors
+
+* q = Toggle Red LED state, deactivates any other modes
+* w = Toggle Green LED state, deactivates any other modes
+* e = Set RED LED to modifier mode
+* r = Set GREEN LED to modifier mode
+* t = Set RED LED to Blinkinlights mode
+* y = set GREEN LED to Blinkinlights mode
+* u = set RED LED to Keypress mode
+* i = set GREEN LED to Keypress mode
+* o = set RED LED to Carriage mode
+* p = set GREEN LED to Carriage mode
diff --git a/keyboards/dm9records/plaid/keymaps/default/config.h b/keyboards/dm9records/plaid/keymaps/default/config.h
new file mode 100644
index 000000000..5733b9e4b
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/dm9records/plaid/keymaps/default/keymap.c b/keyboards/dm9records/plaid/keymaps/default/keymap.c
new file mode 100644
index 000000000..6a858a4a7
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/default/keymap.c
@@ -0,0 +1,410 @@
+/* Copyright 2019 Takuya Urakawa (dm9records.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/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+
+enum plaid_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST
+};
+
+enum plaid_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ EXT_PLV,
+ LED_1,
+ LED_2,
+ LED_3,
+ LED_4,
+ LED_5,
+ LED_6,
+ LED_7,
+ LED_8,
+ LED_9,
+ LED_0
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// array of keys considered modifiers for led purposes
+const uint16_t modifiers[] = {
+ KC_LCTL,
+ KC_RCTL,
+ KC_LALT,
+ KC_RALT,
+ KC_LSFT,
+ KC_RSFT,
+ KC_LGUI,
+ KC_RGUI,
+ LOWER,
+ RAISE
+};
+
+//Setup consts for LED modes
+#define LEDMODE_ON 1 //always on
+#define LEDMODE_OFF 0 //always off
+#define LEDMODE_MODS 2 //On with modifiers
+#define LEDMODE_BLINKIN 3 //blinkinlights - % chance toggle on keypress
+#define LEDMODE_KEY 4 //On with any keypress, off with key release
+#define LEDMODE_ENTER 5 // On with enter key
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_plaid_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_LCTL, KC_RALT, 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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_plaid_grid(
+ 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 ,
+ KC_LCTL, KC_RALT, 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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | RAlt | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_plaid_grid(
+ 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 ,
+ KC_LCTL, KC_RALT, 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] = LAYOUT_plaid_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_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 Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_plaid_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Exit | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = LAYOUT_plaid_grid(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Reset | | | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_plaid_grid(
+ RESET,LED_1, LED_2, LED_3, LED_4, LED_5,LED_6, LED_7, LED_8, LED_9, LED_0,KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+//Setup config struct for LED
+typedef union {
+ uint32_t raw;
+ struct {
+ uint8_t red_mode :8;
+ uint8_t green_mode :8;
+ };
+} led_config_t;
+led_config_t led_config;
+
+//Set leds to saved state during powerup
+void keyboard_post_init_user(void) {
+ // Call the post init code.
+ led_config.raw = eeconfig_read_user();
+
+ if(led_config.red_mode == LEDMODE_ON) {
+ writePinHigh(LED_RED);
+ }
+
+ if(led_config.green_mode == LEDMODE_ON) {
+ writePinHigh(LED_GREEN);
+ }
+}
+
+void eeconfig_init_user(void) { // EEPROM is getting reset!
+ led_config.raw = 0;
+ led_config.red_mode = LEDMODE_ON;
+ led_config.green_mode = LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+ eeconfig_update_user(led_config.raw);
+}
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
+ switch (led_mode) {
+ case LEDMODE_MODS:
+ for (int i=0;i<sizeof(modifiers) / sizeof(modifiers[0]);i++) {
+ if(keycode==modifiers[i]) {
+ if (record->event.pressed) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ }
+ }
+ break;
+ case LEDMODE_BLINKIN:
+ if (record->event.pressed) {
+ if(rand() % 2 == 1) {
+ if(rand() % 2 == 0) {
+ writePinLow(led);
+ }
+ else {
+ writePinHigh(led);
+ }
+ }
+ }
+ break;
+ case LEDMODE_KEY:
+ if (record->event.pressed) {
+ writePinHigh(led);
+ return;
+ }
+ else {
+ writePinLow(led);
+ return;
+ }
+ break;
+ case LEDMODE_ENTER:
+ if (keycode==KC_ENT) {
+ writePinHigh(led);
+ }
+ else {
+ writePinLow(led);
+ }
+ break;
+
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ /* If the either led mode is keypressed based, call the led updater
+ then let it fall through the keypress handlers. Just to keep
+ the logic out of this procedure */
+ if (led_config.red_mode >= LEDMODE_MODS && led_config.red_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_RED, led_config.red_mode, keycode, record);
+ }
+ if (led_config.green_mode >= LEDMODE_MODS && led_config.green_mode <= LEDMODE_ENTER) {
+ led_keypress_update(LED_GREEN, led_config.green_mode, keycode, record);
+ }
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ 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) {
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case LED_1:
+ if (record->event.pressed) {
+ if (led_config.red_mode==LEDMODE_ON) {
+ led_config.red_mode=LEDMODE_OFF;
+ writePinLow(LED_RED);
+ }
+ else {
+ led_config.red_mode=LEDMODE_ON;
+ writePinHigh(LED_RED);
+ }
+ }
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_2:
+ if (record->event.pressed) {
+ if (led_config.green_mode==LEDMODE_ON) {
+ led_config.green_mode=LEDMODE_OFF;
+ writePinLow(LED_GREEN);
+ }
+ else {
+ led_config.green_mode=LEDMODE_ON;
+ writePinHigh(LED_GREEN);
+ }
+ }
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_3:
+ led_config.red_mode=LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_4:
+ led_config.green_mode=LEDMODE_MODS;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_5:
+ led_config.red_mode=LEDMODE_BLINKIN;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_6:
+ led_config.green_mode=LEDMODE_BLINKIN;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_7:
+ led_config.red_mode=LEDMODE_KEY;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_8:
+ led_config.green_mode=LEDMODE_KEY;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_9:
+ led_config.red_mode=LEDMODE_ENTER;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ case LED_0:
+ led_config.green_mode=LEDMODE_ENTER;
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/dm9records/plaid/keymaps/default/readme.md b/keyboards/dm9records/plaid/keymaps/default/readme.md
new file mode 100644
index 000000000..5a08a1fff
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/default/readme.md
@@ -0,0 +1,35 @@
+# The default keymap for plaid
+Original copyright 2019 Takuya Urakawa (dm9records.com)
+LED Support added by Richard Sutherland (rich@brickbots.com)
+
+This layout is based on the Planck layout, and includes an adjust layer (6)
+accessible by holding the lower and raise modifiers (MO3 and MO4) together.
+The adjustment layer is used to set the behavior of the two LEDs:
+
+**Modifier Mode:**
+Activates when any modifier (shift, alt, os, MO) key is held
+down. LED turns off when key is release
+
+**Blinkinlights Mode:**
+Random chance of state change on each keystroke.
+
+**Keypress Mode:**
+On for any keypress as long as the key is pressed
+
+**Carriage Mode:**
+Turns on when enter is pressed, turns off when any next key is pressed
+
+To set the behavior of an LED, and save it to eeprom, hold the
+raise/lower keys together to access the adjust layer, then use
+the keys indicated below to set the behaviors
+
+* q = Toggle Red LED state, deactivates any other modes
+* w = Toggle Green LED state, deactivates any other modes
+* e = Set RED LED to modifier mode
+* r = Set GREEN LED to modifier mode
+* t = Set RED LED to Blinkinlights mode
+* y = set GREEN LED to Blinkinlights mode
+* u = set RED LED to Keypress mode
+* i = set GREEN LED to Keypress mode
+* o = set RED LED to Carriage mode
+* p = set GREEN LED to Carriage mode
diff --git a/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h
new file mode 100644
index 000000000..4bcbc6f67
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2019 Ian Canino (ian@thecommittedbug.io)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/keymap.c b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/keymap.c
new file mode 100644
index 000000000..bdf6c54c3
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/keymap.c
@@ -0,0 +1,182 @@
+#include QMK_KEYBOARD_H
+
+enum plaid_layers {
+ _QWERTY,
+ _DVORAK,
+ _COLEMAK,
+ _LOWER,
+ _RAISE,
+ _FUNCTION,
+};
+
+enum plaid_keycodes { QWERTY = SAFE_RANGE, COLEMAK, DVORAK, LED };
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+#define LED_ON 1
+#define LED_OFF 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | LS/( | Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | LGUI | Alt | [ |Lower | Space |Raise | ] | RGUI | \ | RS/) |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_planck_mit(KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_LCTL, KC_LGUI, KC_LALT, KC_LBRC, LOWER, KC_SPC, RAISE, KC_RBRC, KC_RGUI, KC_BSLS, KC_RSPC),
+
+ /* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | LS/( | Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | LGUI | Alt | [ |Lower | Space |Raise | ] | RGUI | \ | RS/) |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+ [_COLEMAK] = LAYOUT_planck_mit(KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_RBRC, KC_RGUI, KC_BSLS, KC_RSPC),
+
+ /* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | LGUI | Alt | [ |Lower | Space |Raise | ] | RGUI | \ | RS/) |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+ [_DVORAK] = LAYOUT_planck_mit(KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, KC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT, KC_LCTL, KC_RALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_RBRC, KC_RGUI, KC_BSLS, KC_RSPC),
+
+ /* LOWER
+ * ,----------------------------------------------------------------------------.
+ * | | | MPRV | MPLY | MNXT | | | | PGUP| UP | PGDN|PSCR |
+ * |------+------+------+------+------+-----+-----+-----+-----+-----------+-----+
+ * | | | MUTE | VOLD | VOLU | | | | LEFT| DOWN|RIGHT| |
+ * |------+------+------+------+------+-----+-----+-----+-----+-----+-----+-----+
+ * | | | MAIL | WBAK | WFWD | | | | HOME| | END | |
+ * |------+------+------+------+------+-----+-----+-----+-----+-----------+-----+
+ * | | | | | | DEL | | | | | |
+ * `----------------------------------------------------------------------------'
+ */
+
+ [_LOWER] = LAYOUT_planck_mit(KC_NO, KC_NO, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_NO, KC_NO, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_MAIL, KC_WBAK, KC_WFWD, KC_NO, KC_NO, KC_NO, KC_HOME, KC_NO, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ /* RAISE
+ * ,--------------------------------------------------------------------------------.
+ * | NLCK | 1 | 2 | 3 | - | | | | ! | # | $ | + |
+ * |------+------+------+------+------+-----+-----+-----+------+------+------+------+
+ * | / | 4 | 5 | 6 | + | | | | % | ! | ! | = |
+ * |------+------+------+------+------+-----+-----+-----+------+------+------+------+
+ * | * | 7 | 8 | 9 | , | | | | _ | - | @ | ~ |
+ * |------+------+------+------+------+-----+-----+-----+------+------+------+------+
+ * | | 0 | . | Ent | = | | | | | | ` |
+ * `--------------------------------------------------------------------------------'
+ */
+
+ [_RAISE] = LAYOUT_planck_mit(KC_NLCK, KC_P1, KC_P2, KC_P3, KC_PMNS, KC_NO, KC_NO, KC_NO, KC_EXLM, KC_HASH, KC_DLR, KC_PLUS, KC_PSLS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_NO, KC_NO, KC_NO, KC_PERC, KC_ASTR, KC_AMPR, KC_EQL, KC_PAST, KC_P7, KC_P8, KC_P9, KC_PCMM, KC_NO, KC_NO, KC_NO, KC_UNDS, KC_MINS, KC_AT, KC_TILDE, KC_NO, KC_P0, KC_PDOT, KC_PENT, KC_PEQL, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_GRV),
+
+ /* Function (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------------------------------------------.
+ * | RESET| LCA_T(F1) | LCA_T(F2) | LCA_T(F3) | LCA_T(F4) | LCA_T(F5) | LCA_T(F6) | LCA_T(F7) | | | | |
+ * |------+------------+-----------+-----------+-----------+-----------+-----------+-----------+------+------+------+------+
+ * | | | | | | QWERTY | DVORAK | COLEMAK | | | | |
+ * |------+------------+-----------+-----------+-----------+-----------+-----------+-----------+------+------+------+------+
+ * | | | | | | | | | | | | |
+ * |------+------------+-----------+-----------+-----------+-----------+-----------+-----------+------+------+------+------+
+ * | | | | | | LED | | | | | |
+ * `-----------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_FUNCTION] = LAYOUT_planck_mit(RESET, LCA_T(KC_F1), LCA_T(KC_F2), LCA_T(KC_F3), LCA_T(KC_F4), LCA_T(KC_F5), LCA_T(KC_F6), LCA_T(KC_F7), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, QWERTY, DVORAK, COLEMAK, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, LED, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO)};
+
+// constants to toggle LED behavior
+
+// Setup config struct for LED
+typedef union {
+ uint32_t raw;
+ struct {
+ bool red_mode : 1;
+ bool green_mode : 1;
+ };
+} led_config_t;
+led_config_t led_config;
+
+void keyboard_post_init_user(void) { led_config.raw = eeconfig_read_user(); }
+
+void eeconfig_init_user(void) { // EEPROM is getting reset!
+ led_config.raw = 0;
+ led_config.red_mode = LED_ON;
+ led_config.green_mode = LED_ON;
+ eeconfig_update_user(led_config.raw);
+ eeconfig_update_user(led_config.raw);
+}
+
+// When LOWER and RAISE are held together, go to the FUNCTION layer
+uint32_t layer_state_set_user(uint32_t state) { return update_tri_layer_state(state, _LOWER, _RAISE, _FUNCTION); }
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case _LOWER:
+ writePinHigh(LED_RED);
+ break;
+ case _RAISE:
+ writePinHigh(LED_GREEN);
+ break;
+ default:
+ writePinLow(LED_GREEN);
+ writePinLow(LED_RED);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case LED:
+ if (record->event.pressed) {
+ if (led_config.red_mode == LED_ON && led_config.green_mode == LED_ON) {
+ led_config.red_mode = LED_OFF;
+ led_config.green_mode = LED_OFF;
+ } else if (led_config.red_mode == LED_OFF && led_config.green_mode == LED_OFF) {
+ led_config.red_mode = LED_ON;
+ led_config.green_mode = LED_ON;
+ }
+ }
+ eeconfig_update_user(led_config.raw);
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/readme.md b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/readme.md
new file mode 100644
index 000000000..bd09965b5
--- /dev/null
+++ b/keyboards/dm9records/plaid/keymaps/thehalfdeafchef/readme.md
@@ -0,0 +1,5 @@
+![Plaid Layout Image](https://i.imgur.com/WnVnwEG.png)
+
+# The Half Deaf Chef Plaid Layout
+
+Opinionated keymaps optimized for programmers. The Left and Right Shift tap as parenthesis and the bracket keys are to either side of the layer keys (LOWER, RAISE). A 'right-side' up number pad in a layer with a complementary 'symbol' pad on the opposite side. An additional layer is provided to switch to virtual console on Linux based systems running xorg. These changes are propagated among all the layouts.