QMK Configurator Support for JD45 and JD40 (#2851)
authorEric <22215921+ericywl@users.noreply.github.com>
Mon, 30 Apr 2018 15:22:02 +0000 (23:22 +0800)
committerDrashna Jaelre <drashna@live.com>
Mon, 30 Apr 2018 15:22:02 +0000 (08:22 -0700)
* Added JD45 Config

* Added JD40 Config

* Changed KEYMAP to LAYOUT for JD40 and JD45

15 files changed:
keyboards/jd40/info.json [new file with mode: 0644]
keyboards/jd40/jd40.h
keyboards/jd40/keymaps/default/keymap.c
keyboards/jd40/keymaps/vanagon/config.h
keyboards/jd40/keymaps/vanagon/keymap.c
keyboards/jd45/info.json [new file with mode: 0644]
keyboards/jd45/jd45.h
keyboards/jd45/keymaps/blakedietz/config.h
keyboards/jd45/keymaps/blakedietz/keymap.c
keyboards/jd45/keymaps/default/keymap.c
keyboards/jd45/keymaps/jeebak/config.h
keyboards/jd45/keymaps/jeebak/keymap.c
keyboards/jd45/keymaps/justin/keymap.c
keyboards/jd45/keymaps/mjt/keymap.c
keyboards/jd45/keymaps/mjt6u/keymap.c

diff --git a/keyboards/jd40/info.json b/keyboards/jd40/info.json
new file mode 100644 (file)
index 0000000..4d321ee
--- /dev/null
@@ -0,0 +1,57 @@
+{
+  "keyboard_name": "jd40",
+  "url": "",
+  "maintainer": "qmk",
+  "width": 12,
+  "height": 4,
+  "layouts": {
+    "LAYOUT": {
+      "layout": [
+        { "label": "Esc", "x": 0, "y": 0 },
+        { "label": "Q", "x": 1, "y": 0 },
+        { "label": "W", "x": 2, "y": 0 },
+        { "label": "E", "x": 3, "y": 0 },
+        { "label": "R", "x": 4, "y": 0 },
+        { "label": "T", "x": 5, "y": 0 },
+        { "label": "Y", "x": 6, "y": 0 },
+        { "label": "U", "x": 7, "y": 0 },
+        { "label": "I", "x": 8, "y": 0 },
+        { "label": "O", "x": 9, "y": 0 },
+        { "label": "P", "x": 10, "y": 0 },
+        { "label": "Back<br>Space", "x": 11, "y": 0 },
+        { "label": "Tab", "x": 0, "y": 1, "w": 1.25 },
+        { "label": "A", "x": 1.25, "y": 1 },
+        { "label": "S", "x": 2.25, "y": 1 },
+        { "label": "D", "x": 3.25, "y": 1 },
+        { "label": "F", "x": 4.25, "y": 1 },
+        { "label": "G", "x": 5.25, "y": 1 },
+        { "label": "H", "x": 6.25, "y": 1 },
+        { "label": "J", "x": 7.25, "y": 1 },
+        { "label": "K", "x": 8.25, "y": 1 },
+        { "label": "L", "x": 9.25, "y": 1 },
+        { "label": "Enter", "x": 10.25, "y": 1, "w": 1.75 },
+        { "label": "Shift", "x": 0, "y": 2, "w": 1.75 },
+        { "label": "Z", "x": 1.75, "y": 2 },
+        { "label": "X", "x": 2.75, "y": 2 },
+        { "label": "C", "x": 3.75, "y": 2 },
+        { "label": "V", "x": 4.75, "y": 2 },
+        { "label": "B", "x": 5.75, "y": 2 },
+        { "label": "N", "x": 6.75, "y": 2 },
+        { "label": "M", "x": 7.75, "y": 2 },
+        { "label": "<", "x": 8.75, "y": 2 },
+        { "label": "Shift", "x": 9.75, "y": 2, "w": 1.25 },
+        { "label": ">", "x": 11, "y": 2 },
+        { "label": "Ctrl", "x": 0, "y": 3 },
+        { "label": "Fn", "x": 1, "y": 3 },
+        { "label": "Alt", "x": 2, "y": 3 },
+        { "label": "Super", "x": 3, "y": 3, "w": 1.25 },
+        { "x": 4.25, "y": 3, "w": 1.75 },
+        { "x": 6, "y": 3, "w": 1.75 },
+        { "label": "Menu", "x": 7.75, "y": 3, "w": 1.25 },
+        { "label": "Alt", "x": 9, "y": 3 },
+        { "label": "Fn2", "x": 10, "y": 3 },
+        { "label": "Ctrl", "x": 11, "y": 3 }
+      ]
+    }
+  }
+}
index 77a1222..0000bc7 100644 (file)
@@ -30,7 +30,7 @@ inline void gh60_wasd_leds_off(void)          { DDRF &= ~(1<<7); PORTF &= ~(1<<7); }
 
 /* JD40 MKII keymap definition macro
  */
-#define KEYMAP( \
+#define LAYOUT( \
     K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
        K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, \
        K24, K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, \
dissimilarity index 68%
index 79ac146..b8cff95 100644 (file)
-#include "jd40.h"
-#include "action_layer.h"
-
-#define _BL 0
-#define _AL 1
-#define _FL 2
-#define _UL 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-       [_BL] = KEYMAP(
-  F12,  Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P,   BSPC,
-  TAB,  A,    S,    D,    F,    G,    H,    J,    K,    L,    ENT,
-  LSFT, Z,    X,    C,    V,    B,    N,    M,    COMM, UP, DOT,
-  LCTL, LGUI, LALT, FN0,  SPC,  SPC,  FN0,  LEFT,  DOWN, RIGHT ),
-  
-       [_AL] = KEYMAP(
-  GRV,   F1,   F2,   F3,   F4,   F5,   F6,   F7,   F8,   F9,  F10,  DEL,
-  CAPS, 1,    2,    3,    4,    5,    6,    7,    8,    9,    0,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SCLN, PGUP, QUOT,
-  TRNS, TRNS, TRNS, TRNS, FN3,  FN3,  TRNS, HOME, PGDN, END ),
-
-       [_FL] = 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, TRNS, TRNS, TRNS, TRNS,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ),
-   
-       [_UL] = KEYMAP(
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
-  TRNS, FN4,  FN5,  FN11, FN10, 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 ),
-};
-
-enum function_id {
-    RGBLED_TOGGLE,
-    RGBLED_STEP_MODE,
-    RGBLED_INCREASE_HUE,
-    RGBLED_DECREASE_HUE,
-    RGBLED_INCREASE_SAT,
-    RGBLED_DECREASE_SAT,
-    RGBLED_INCREASE_VAL,
-    RGBLED_DECREASE_VAL,
-    SHIFT_ESC, 
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [0]  = ACTION_LAYER_MOMENTARY(1),  // Momentary Fn overlay
-    [1]  = ACTION_LAYER_TOGGLE(2),     // Toggle Arrow Layer overlay
-    [2]  = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer
-    [3]  = ACTION_LAYER_TOGGLE(3),     // Toggle Underglow Layer overlay
-    [4]  = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
-    [5]  = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
-    [6]  = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
-    [7]  = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
-    [8]  = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
-    [9]  = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
-    [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
-    [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
-    [12] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-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;
-};
-
-void matrix_scan_user(void) {
-
-// Layer LED indicators
-// ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
-    uint32_t layer = layer_state;
-    if (layer & (1<<1)) {
-        //gh60_wasd_leds_on();
-    } else {
-        //gh60_wasd_leds_off();
-    }
-
-    if (layer & (1<<2)) {
-        //gh60_esc_led_on();
-    } else {
-        //gh60_esc_led_off();
-    }
-};
-
-#define MODS_CTRL_MASK  (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
-  switch (id) {
-    case RGBLED_TOGGLE:
-      //led operations
-      if (record->event.pressed) {
-        rgblight_toggle();
-        }
-        break;
-    case RGBLED_INCREASE_HUE:
-      if (record->event.pressed) {
-        rgblight_increase_hue();
-        }
-        break;
-    case RGBLED_DECREASE_HUE:
-      if (record->event.pressed) {
-        rgblight_decrease_hue();
-        }
-        break;
-    case RGBLED_INCREASE_SAT:
-      if (record->event.pressed) {
-        rgblight_increase_sat();
-        }
-        break;
-    case RGBLED_DECREASE_SAT:
-      if (record->event.pressed) {
-        rgblight_decrease_sat();
-        }
-        break;
-    case RGBLED_INCREASE_VAL:
-        if (record->event.pressed) {
-          rgblight_increase_val();
-        }
-        break;
-    case RGBLED_DECREASE_VAL:
-        if (record->event.pressed) {
-          rgblight_decrease_val();
-        }
-        break;
-    case RGBLED_STEP_MODE:
-        if (record->event.pressed) {
-          rgblight_step();
-        }
-        break;
-    static uint8_t shift_esc_shift_mask;
-    // Shift + ESC = ~
-    case SHIFT_ESC:
-      shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
-      if (record->event.pressed) {
-        if (shift_esc_shift_mask) {
-          add_key(KC_GRV);
-          send_keyboard_report();
-        } else {
-          add_key(KC_ESC);
-          send_keyboard_report();
-        }
-      } else {
-        if (shift_esc_shift_mask) {
-          del_key(KC_GRV);
-          send_keyboard_report();
-        } else {
-          del_key(KC_ESC);
-          send_keyboard_report();
-        }
-      }
-      break;
-    }
-};
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+#define _BL 0
+#define _AL 1
+#define _FL 2
+#define _UL 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_BL] = LAYOUT(
+        F12, Q, W, E, R, T, Y, U, I, O, P, BSPC,
+        TAB, A, S, D, F, G, H, J, K, L, ENT,
+        LSFT, Z, X, C, V, B, N, M, COMM, UP, DOT,
+        LCTL, LGUI, LALT, FN0, SPC, SPC, FN0, LEFT, DOWN, RIGHT),
+
+    [_AL] = LAYOUT(
+        GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, DEL,
+        CAPS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SCLN, PGUP, QUOT,
+        TRNS, TRNS, TRNS, TRNS, FN3, FN3, TRNS, HOME, PGDN, END),
+
+    [_FL] = LAYOUT(
+        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, TRNS, TRNS, TRNS, TRNS,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+
+    [_UL] = LAYOUT(
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
+        TRNS, FN4, FN5, FN11, FN10, 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),
+};
+
+enum function_id
+{
+    RGBLED_TOGGLE,
+    RGBLED_STEP_MODE,
+    RGBLED_INCREASE_HUE,
+    RGBLED_DECREASE_HUE,
+    RGBLED_INCREASE_SAT,
+    RGBLED_DECREASE_SAT,
+    RGBLED_INCREASE_VAL,
+    RGBLED_DECREASE_VAL,
+    SHIFT_ESC,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_LAYER_MOMENTARY(1),         // Momentary Fn overlay
+    [1] = ACTION_LAYER_TOGGLE(2),            // Toggle Arrow Layer overlay
+    [2] = ACTION_LAYER_TAP_KEY(2, KC_CAPS),  // Tap to toggle caps lock and hold to activate function layer
+    [3] = ACTION_LAYER_TOGGLE(3),            // Toggle Underglow Layer overlay
+    [4] = ACTION_FUNCTION(RGBLED_TOGGLE),    //Turn on/off underglow
+    [5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
+    [6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
+    [7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
+    [8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
+    [9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
+    [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
+    [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
+    [12] = ACTION_FUNCTION(SHIFT_ESC),
+};
+
+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;
+};
+
+void matrix_scan_user(void)
+{
+
+    // Layer LED indicators
+    // ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
+    uint32_t layer = layer_state;
+    if (layer & (1 << 1))
+    {
+        //gh60_wasd_leds_on();
+    }
+    else
+    {
+        //gh60_wasd_leds_off();
+    }
+
+    if (layer & (1 << 2))
+    {
+        //gh60_esc_led_on();
+    }
+    else
+    {
+        //gh60_esc_led_off();
+    }
+};
+
+#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))
+
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    switch (id)
+    {
+    case RGBLED_TOGGLE:
+        //led operations
+        if (record->event.pressed)
+        {
+            rgblight_toggle();
+        }
+        break;
+    case RGBLED_INCREASE_HUE:
+        if (record->event.pressed)
+        {
+            rgblight_increase_hue();
+        }
+        break;
+    case RGBLED_DECREASE_HUE:
+        if (record->event.pressed)
+        {
+            rgblight_decrease_hue();
+        }
+        break;
+    case RGBLED_INCREASE_SAT:
+        if (record->event.pressed)
+        {
+            rgblight_increase_sat();
+        }
+        break;
+    case RGBLED_DECREASE_SAT:
+        if (record->event.pressed)
+        {
+            rgblight_decrease_sat();
+        }
+        break;
+    case RGBLED_INCREASE_VAL:
+        if (record->event.pressed)
+        {
+            rgblight_increase_val();
+        }
+        break;
+    case RGBLED_DECREASE_VAL:
+        if (record->event.pressed)
+        {
+            rgblight_decrease_val();
+        }
+        break;
+    case RGBLED_STEP_MODE:
+        if (record->event.pressed)
+        {
+            rgblight_step();
+        }
+        break;
+        static uint8_t shift_esc_shift_mask;
+    // Shift + ESC = ~
+    case SHIFT_ESC:
+        shift_esc_shift_mask = get_mods() & MODS_CTRL_MASK;
+        if (record->event.pressed)
+        {
+            if (shift_esc_shift_mask)
+            {
+                add_key(KC_GRV);
+                send_keyboard_report();
+            }
+            else
+            {
+                add_key(KC_ESC);
+                send_keyboard_report();
+            }
+        }
+        else
+        {
+            if (shift_esc_shift_mask)
+            {
+                del_key(KC_GRV);
+                send_keyboard_report();
+            }
+            else
+            {
+                del_key(KC_ESC);
+                send_keyboard_report();
+            }
+        }
+        break;
+    }
+};
index 65d2fe6..ed09b50 100644 (file)
@@ -1,6 +1,6 @@
 #include "../../config.h"
 
-#define KEYMAP_VANAGON(\
+#define LAYOUT_VANAGON(\
        K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, \
        K13, K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, \
        K24, K25, K26, K27, K28, K29, K30, K31, K32, K33, K34, \
dissimilarity index 92%
index 3431461..e16a44a 100644 (file)
@@ -1,29 +1,26 @@
-#include "jd40.h"
-#include "action_layer.h"
-
-enum {
-       _BL = 0,
-       _AL1,
-       _AL2,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-       [_BL] = KEYMAP_VANAGON(
-               KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
-               MO(_AL1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MO(_AL1),
-               KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
-               MO(_AL2), KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, KC_RALT, KC_RSPC, MO(_AL2)
-       ),
-       [_AL1] = KEYMAP_VANAGON(
-               KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_TRNS,
-               KC_TRNS, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_COLN, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_TRNS,
-               KC_TRNS, KC_ESC, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
-       ),
-       [_AL2] = KEYMAP_VANAGON(
-               KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
-               KC_TRNS, KC_PIPE, KC_DQT, KC_UNDS, KC_PLUS, KC_SCLN, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_1, KC_2, KC_3, KC_TRNS,
-               KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
-       )
-};
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+enum
+{
+    _BL = 0,
+    _AL1,
+    _AL2,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_BL] = LAYOUT_VANAGON(
+        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+        MO(_AL1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, MO(_AL1),
+        KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+        MO(_AL2), KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_RGUI, KC_RALT, KC_RSPC, MO(_AL2)),
+    [_AL1] = LAYOUT_VANAGON(
+        KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_TRNS,
+        KC_TRNS, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_COLN, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_TRNS,
+        KC_TRNS, KC_ESC, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+    [_AL2] = LAYOUT_VANAGON(
+        KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+        KC_TRNS, KC_PIPE, KC_DQT, KC_UNDS, KC_PLUS, KC_SCLN, KC_TRNS, KC_4, KC_5, KC_6, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_0, KC_1, KC_2, KC_3, KC_TRNS,
+        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)};
diff --git a/keyboards/jd45/info.json b/keyboards/jd45/info.json
new file mode 100644 (file)
index 0000000..77ad23a
--- /dev/null
@@ -0,0 +1,60 @@
+{
+  "keyboard_name": "jd45",
+  "url": "",
+  "maintainer": "qmk",
+  "width": 13,
+  "height": 4,
+  "layouts": {
+    "LAYOUT": {
+      "layout": [
+        { "label": "Tab", "x": 0, "y": 0 },
+        { "label": "Q", "x": 1, "y": 0 },
+        { "label": "W", "x": 2, "y": 0 },
+        { "label": "E", "x": 3, "y": 0 },
+        { "label": "R", "x": 4, "y": 0 },
+        { "label": "T", "x": 5, "y": 0 },
+        { "label": "Y", "x": 6, "y": 0 },
+        { "label": "U", "x": 7, "y": 0 },
+        { "label": "I", "x": 8, "y": 0 },
+        { "label": "O", "x": 9, "y": 0 },
+        { "label": "P", "x": 10, "y": 0 },
+        { "label": "Back<br>Space", "x": 11, "y": 0 },
+        { "x": 12, "y": 0 },
+        { "label": "Caps", "x": 0, "y": 1, "w": 1.25 },
+        { "label": "A", "x": 1.25, "y": 1 },
+        { "label": "S", "x": 2.25, "y": 1 },
+        { "label": "D", "x": 3.25, "y": 1 },
+        { "label": "F", "x": 4.25, "y": 1 },
+        { "label": "G", "x": 5.25, "y": 1 },
+        { "label": "H", "x": 6.25, "y": 1 },
+        { "label": "J", "x": 7.25, "y": 1 },
+        { "label": "K", "x": 8.25, "y": 1 },
+        { "label": "L", "x": 9.25, "y": 1 },
+        { "label": ":", "x": 10.25, "y": 1 },
+        { "label": "Enter", "x": 11.25, "y": 1, "w": 1.75 },
+        { "label": "Shift", "x": 0, "y": 2, "w": 1.75 },
+        { "label": "Z", "x": 1.75, "y": 2 },
+        { "label": "X", "x": 2.75, "y": 2 },
+        { "label": "C", "x": 3.75, "y": 2 },
+        { "label": "V", "x": 4.75, "y": 2 },
+        { "label": "B", "x": 5.75, "y": 2 },
+        { "label": "N", "x": 6.75, "y": 2 },
+        { "label": "M", "x": 7.75, "y": 2 },
+        { "label": "<", "x": 8.75, "y": 2 },
+        { "label": ">", "x": 9.75, "y": 2 },
+        { "label": "?", "x": 10.75, "y": 2 },
+        { "label": "Shift", "x": 11.75, "y": 2, "w": 1.25 },
+        { "label": "Hyper", "x": 0, "y": 3, "w": 1.25 },
+        { "label": "Super", "x": 1.25, "y": 3 },
+        { "label": "Meta", "x": 2.25, "y": 3, "w": 1.25 },
+        { "label": "Alt", "x": 3.5, "y": 3, "w": 1.25 },
+        { "x": 4.75, "y": 3, "w": 1.75 },
+        { "x": 6.5, "y": 3, "w": 1.75 },
+        { "label": "Meta", "x": 8.25, "y": 3, "w": 1.25 },
+        { "label": "Super", "x": 9.5, "y": 3, "w": 1.25 },
+        { "label": "Fn2", "x": 10.75, "y": 3 },
+        { "label": "Ctrl", "x": 11.75, "y": 3, "w": 1.25 }
+      ]
+    }
+  }
+}
index 04ac664..48641c1 100644 (file)
@@ -5,7 +5,7 @@
 
 /* JD45 keymap definition macro
  */
-#define KEYMAP( \
+#define LAYOUT( \
     K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \
        K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \
        K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \
index 6667d6f..38d850e 100644 (file)
@@ -3,7 +3,7 @@
 /**
  *JD45 keymap definition macro
  */
-#define KEYMAP_JD45( \
+#define LAYOUT_JD45( \
     K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \
     K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \
     K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \
dissimilarity index 62%
index 1b1d081..bde760a 100644 (file)
-#include "jd45.h"
-
-extern keymap_config_t keymap_config;
-
-/*
- * Each layer gets a name for readability, which is then used in the keymap matrix below.
- * The underscores don't mean anything - you can have a layer called STUFF or any other name.
- * Layer names don't all need to be of the same length, obviously, and you can also skip them
- * entirely and just use numbers.
- */
-#define _ADJUST 16
-#define _LOWER 3
-#define _MEDIA 8
-#define _MOUSECURSOR 7
-#define _QWERTY 0
-#define _RAISE 4
-#define _VIM 9
-// TODO: (bdietz) - make a symbols layer for fun emoji and ascii art
-// TODO: (bdietz) - make a symbol layer for greek symbols
-
-// Keycodes
-enum planck_keycodes {
-  QWERTY = SAFE_RANGE,
-  LOWER,
-  RAISE,
-};
-
-enum macro_keycodes {
-  KC_ALT_TAB,
-  KC_CMD_TAB,
-  KC_CTL_TAB,
-  KC_CMD_SLSH,
-  KC_AG_FIND,
-  KC_AG_AGAIN,
-  KC_AG_UNDO,
-  KC_AG_CUT,
-  KC_AG_COPY,
-  KC_AG_PASTE,
-  KC_AG_DESK_L,
-  KC_AG_DESK_R,
-  KC_AG_TAB_C,
-  KC_AG_TAB_N,
-  KC_AG_TAB_R,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-/**
- * This section of macros is for tap or hold functionality. Keys will fire off the second symbol in the name if tapped
- * or fire the first symbol in the name if held. For example
- * GUI_Z
- *
- * - will fire z if tapped
- * - will fire cmd/super/win if held
- */
-#define ALT_DOT     ALT_T(KC_DOT)
-#define ALT_X       ALT_T(KC_X)
-#define CTL_SLSH    CTL_T(KC_SLSH)
-#define CTL_Z       CTL_T(KC_Z)
-#define GUI_C       GUI_T(KC_C)
-#define GUI_COMM    GUI_T(KC_COMM)
-#define HPR_ESC     ALL_T(KC_ESC)
-#define HPR_QUO     ALL_T(KC_QUOT)
-
-// Toggle to VIM when left space button is held, emit space keycode when left space is tapped
-#define TGL_VIM     LT(_VIM, KC_SPC)
-// Toggle to the mouse layer when the right space button is held and emit enter when right space is tapped
-#define TGL_MOUSE   LT(_MOUSECURSOR, KC_ENT)
-
-// TODO: (bdietz) - need to audit these keycodes to see what sort of cool things the default layout was doing.
-#define ALT_TAB     M(KC_ALT_TAB)               // Macro for Alt-Tab
-#define CMD_TAB     M(KC_CMD_TAB)               // Macro for Cmd-Tab
-#define CTL_TAB     M(KC_CTL_TAB)               // Macro for Ctl-Tab
-#define CMD_SLSH    M(KC_CMD_SLSH)              // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
-#define AG_FIND     M(KC_AG_FIND)               // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
-#define AG_AGAIN    M(KC_AG_AGAIN)
-#define AG_UNDO     M(KC_AG_UNDO)
-#define AG_CUT      M(KC_AG_CUT)
-#define AG_COPY     M(KC_AG_COPY)
-#define AG_PASTE    M(KC_AG_PASTE)
-#define AG_D_L      M(KC_AG_DESK_L)             // For Virtual Desktop Switching: Left, and
-#define AG_D_R      M(KC_AG_DESK_R)             //                                Right
-#define AG_T_C      M(KC_AG_TAB_C)              // For Chrome, etc. Tab Close,
-#define AG_T_N      M(KC_AG_TAB_N)              //                  Tab New, and
-#define AG_T_R      M(KC_AG_TAB_R)              //                  Tab Reopen Closed
-
-/* Qwerty
- *
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |   Tab   |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |      |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |Hyper/Esc|   A  |   S  |  D   |   F  |   G  |   H  |   J  |   K  |   L  |MEDIA/;|  Hyper/"   |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |   Shift   |CTL/Zl|ALT/X |GUI/C |   V  |   B  |   N  |   M  |GUI/, | ALT/.|CTL// |  Shift    |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       | Lower | VIM/Space| MOUSE/Ent|  Raise  |        |        |          |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QWERTY] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-     KC_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSPC, ALL_T(KC_NO),
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    HPR_ESC ,   KC_A,    KC_S,   KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, LT(_MEDIA, KC_SCLN), HPR_QUO,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    KC_LSFT,   CTL_Z,  ALT_X,   GUI_C,    KC_V,    KC_B,    KC_N,    KC_M,GUI_COMM, ALT_DOT, CTL_SLSH,    KC_RSFT    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,  _______  ,  _______  ,   LOWER   ,  TGL_VIM  , TGL_MOUSE ,    RAISE  ,  _______  ,  _______  , _______),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-// TODO: (bdietz) - update the keymap documentation to include the modifier keys on the third row
-/* Lower
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |   `     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_LOWER] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-     KC_GRV,KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    KC_LBRC ,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,    KC_PIPE     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    KC_RBRC  ,  CTL_T(KC_F7),   ALT_T(KC_F8),GUI_T(KC_F9),  KC_F10,  KC_F11,  KC_F12, KC_MINS,  GUI_T(KC_EQL) , ALT_T(KC_LBRC), CTL_T(KC_RBRC),    KC_BSLS    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Raise
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |   ~     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_RAISE] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    KC_TILD,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC, KC_BSPC,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    KC_DLR  ,   KC_4,    KC_5,    KC_6,  KC_DOT, KC_PLUS,  KC_DOT,    KC_4,    KC_5,    KC_6, KC_ASTR,    KC_PIPE     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    KC_EQL   ,   CTL_T(KC_7),    ALT_T(KC_8),    GUI_T(KC_9),    KC_0, KC_MINS,  KC_DOT, KC_1 ,GUI_T(KC_2), ALT_T(KC_3), CTL_T(KC_SLSH),    KC_BSLS    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Mouse Layer
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |        |        |          |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-
-[_MOUSECURSOR] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    _______,_______, _______, KC_MS_U, _______, _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    _______ ,_______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN2, _______, _______,    _______     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    _______  ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______, _______),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Adjust (Lower + Raise)
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |         |      |      |      |      |      |      |      |      |      |      |      | Del  |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |          |      |      |      |      |AGnorm|AGswap|Qwerty|Mouse |      |Plover|            |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |           |      |      |      |      |     |       |      |      |      |      |           |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |        |        |  Reset   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_ADJUST] = KEYMAP_JD45(
-
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP,  QWERTY, _______,  _______,  _______,    _______     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    _______  ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    _______,    _______,  RESET),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* VIM
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |         |      |      |      |      |      |      |      |      |      |      |      |      |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |          |      |      |      |      |      | LEFT | DOWN | UP   |RIGHT |      |            |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |           |      |      |      |      |     |       |      |      |      |      |           |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |        |        |          |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_VIM] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    _______ ,_______, _______, _______, _______, _______, KC_LEFT, KC_DOWN,   KC_UP, KC_RIGHT,  _______,    _______     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    _______  ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    _______,    _______,_______),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Media
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |         |      |      |      |      |      |      |      |      |      |      |      |      |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |          |      |      |      |      |      |      | Prev | Next | Mute |      | Play/Pause |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |           |      |      |      |      |     |       | VolD | VolU |      |      |           |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |        |        |          |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_MEDIA] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    _______ ,_______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE, _______,    KC_MPLY     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    _______  ,_______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______,    _______    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    _______,    _______,  _______)
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-};
-
-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) {
-        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;
-  }
-  return true;
-}
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    if (!eeconfig_is_enabled()) {
-      eeconfig_init();
-    }
-
-    bool use_cmd = true;    // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
-    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
-    // quantum/quantum.c
-    if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
-      use_cmd = false;      // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
-    }
-
-    switch (id) {
-      case KC_ALT_TAB:
-        if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
-        else        { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
-      case KC_CMD_TAB:
-        if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
-        else        { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
-
-      case KC_CTL_TAB:
-        return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
-      case KC_CMD_SLSH:
-        return (record->event.pressed ? MACRO( D(LGUI),  D(SLSH),END ) : MACRO( U(SLSH),END ));
-
-      case KC_AG_FIND:
-        return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
-      case KC_AG_AGAIN:
-        return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
-      case KC_AG_UNDO:
-        return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
-      case KC_AG_CUT:
-        return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
-      case KC_AG_COPY:
-        return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
-      case KC_AG_PASTE:
-        return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
-
-      case KC_AG_DESK_L:
-        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
-      case KC_AG_DESK_R:
-        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
-
-      case KC_AG_TAB_C:
-        return use_cmd ? MACRODOWN( D(LGUI),            T(W), END ) : MACRODOWN( D(LCTRL),            T(W), END );
-      case KC_AG_TAB_N:
-        return use_cmd ? MACRODOWN( D(LGUI),            T(T), END ) : MACRODOWN( D(LCTRL),            T(T), END );
-      case KC_AG_TAB_R:
-        return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
-    }
-
-    return MACRO_NONE;
-}
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+/*
+ * Each layer gets a name for readability, which is then used in the keymap matrix below.
+ * The underscores don't mean anything - you can have a layer called STUFF or any other name.
+ * Layer names don't all need to be of the same length, obviously, and you can also skip them
+ * entirely and just use numbers.
+ */
+#define _ADJUST 16
+#define _LOWER 3
+#define _MEDIA 8
+#define _MOUSECURSOR 7
+#define _QWERTY 0
+#define _RAISE 4
+#define _VIM 9
+// TODO: (bdietz) - make a symbols layer for fun emoji and ascii art
+// TODO: (bdietz) - make a symbol layer for greek symbols
+
+// Keycodes
+enum planck_keycodes
+{
+    QWERTY = SAFE_RANGE,
+    LOWER,
+    RAISE,
+};
+
+enum macro_keycodes
+{
+    KC_ALT_TAB,
+    KC_CMD_TAB,
+    KC_CTL_TAB,
+    KC_CMD_SLSH,
+    KC_AG_FIND,
+    KC_AG_AGAIN,
+    KC_AG_UNDO,
+    KC_AG_CUT,
+    KC_AG_COPY,
+    KC_AG_PASTE,
+    KC_AG_DESK_L,
+    KC_AG_DESK_R,
+    KC_AG_TAB_C,
+    KC_AG_TAB_N,
+    KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+/**
+ * This section of macros is for tap or hold functionality. Keys will fire off the second symbol in the name if tapped
+ * or fire the first symbol in the name if held. For example
+ * GUI_Z
+ *
+ * - will fire z if tapped
+ * - will fire cmd/super/win if held
+ */
+#define ALT_DOT ALT_T(KC_DOT)
+#define ALT_X ALT_T(KC_X)
+#define CTL_SLSH CTL_T(KC_SLSH)
+#define CTL_Z CTL_T(KC_Z)
+#define GUI_C GUI_T(KC_C)
+#define GUI_COMM GUI_T(KC_COMM)
+#define HPR_ESC ALL_T(KC_ESC)
+#define HPR_QUO ALL_T(KC_QUOT)
+
+// Toggle to VIM when left space button is held, emit space keycode when left space is tapped
+#define TGL_VIM LT(_VIM, KC_SPC)
+// Toggle to the mouse layer when the right space button is held and emit enter when right space is tapped
+#define TGL_MOUSE LT(_MOUSECURSOR, KC_ENT)
+
+// TODO: (bdietz) - need to audit these keycodes to see what sort of cool things the default layout was doing.
+#define ALT_TAB M(KC_ALT_TAB)   // Macro for Alt-Tab
+#define CMD_TAB M(KC_CMD_TAB)   // Macro for Cmd-Tab
+#define CTL_TAB M(KC_CTL_TAB)   // Macro for Ctl-Tab
+#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND M(KC_AG_FIND)   // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN M(KC_AG_AGAIN)
+#define AG_UNDO M(KC_AG_UNDO)
+#define AG_CUT M(KC_AG_CUT)
+#define AG_COPY M(KC_AG_COPY)
+#define AG_PASTE M(KC_AG_PASTE)
+#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
+#define AG_D_R M(KC_AG_DESK_R) //                                Right
+#define AG_T_C M(KC_AG_TAB_C)  // For Chrome, etc. Tab Close,
+#define AG_T_N M(KC_AG_TAB_N)  //                  Tab New, and
+#define AG_T_R M(KC_AG_TAB_R)  //                  Tab Reopen Closed
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   Tab   |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |Hyper/Esc|   A  |   S  |  D   |   F  |   G  |   H  |   J  |   K  |   L  |MEDIA/;|  Hyper/"   |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   Shift   |CTL/Zl|ALT/X |GUI/C |   V  |   B  |   N  |   M  |GUI/, | ALT/.|CTL// |  Shift    |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       | Lower | VIM/Space| MOUSE/Ent|  Raise  |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_QWERTY] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, ALL_T(KC_NO),
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        HPR_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MEDIA, KC_SCLN), HPR_QUO,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        KC_LSFT, CTL_Z, ALT_X, GUI_C, KC_V, KC_B, KC_N, KC_M, GUI_COMM, ALT_DOT, CTL_SLSH, KC_RSFT,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, LOWER, TGL_VIM, TGL_MOUSE, RAISE, _______, _______, _______),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    // TODO: (bdietz) - update the keymap documentation to include the modifier keys on the third row
+    /* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   `     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_LOWER] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        KC_LBRC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        KC_RBRC, CTL_T(KC_F7), ALT_T(KC_F8), GUI_T(KC_F9), KC_F10, KC_F11, KC_F12, KC_MINS, GUI_T(KC_EQL), ALT_T(KC_LBRC), CTL_T(KC_RBRC), KC_BSLS,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   ~     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_RAISE] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        KC_EQL, CTL_T(KC_7), ALT_T(KC_8), GUI_T(KC_9), KC_0, KC_MINS, KC_DOT, KC_1, GUI_T(KC_2), ALT_T(KC_3), CTL_T(KC_SLSH), KC_BSLS,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+    [_MOUSECURSOR] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        _______, _______, _______, KC_MS_U, _______, _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |      |      |      |      |      |      |      |      |      |      | Del  |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |      |      |      |      |AGnorm|AGswap|Qwerty|Mouse |      |Plover|            |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      |      |     |       |      |      |      |      |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |  Reset   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_ADJUST] = LAYOUT_JD45(
+
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* VIM
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |      |      |      |      |      | LEFT | DOWN | UP   |RIGHT |      |            |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      |      |     |       |      |      |      |      |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_VIM] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Media
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |      |      |      |      |      |      |      |      |      |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |      |      |      |      |      |      | Prev | Next | Mute |      | Play/Pause |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      |      |     |       | VolD | VolU |      |      |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_MEDIA] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE, _______, KC_MPLY,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+};
+
+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)
+        {
+            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;
+    }
+    return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    if (!eeconfig_is_enabled())
+    {
+        eeconfig_init();
+    }
+
+    bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+    // quantum/quantum.c
+    if (keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1)
+    {
+        use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+    }
+
+    switch (id)
+    {
+    case KC_ALT_TAB:
+        if (use_cmd)
+        {
+            return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END));
+        }
+        else
+        {
+            return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END));
+        }
+    case KC_CMD_TAB:
+        if (use_cmd)
+        {
+            return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END));
+        }
+        else
+        {
+            return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END));
+        }
+
+    case KC_CTL_TAB:
+        return (record->event.pressed ? MACRO(D(LCTRL), D(TAB), END) : MACRO(U(TAB), END));
+    case KC_CMD_SLSH:
+        return (record->event.pressed ? MACRO(D(LGUI), D(SLSH), END) : MACRO(U(SLSH), END));
+
+    case KC_AG_FIND:
+        return use_cmd ? MACRODOWN(D(LGUI), T(F), END) : MACRODOWN(D(LCTRL), T(F), END);
+    case KC_AG_AGAIN:
+        return use_cmd ? MACRODOWN(D(LGUI), T(G), END) : MACRODOWN(D(LCTRL), T(G), END);
+    case KC_AG_UNDO:
+        return use_cmd ? MACRODOWN(D(LGUI), T(Z), END) : MACRODOWN(D(LCTRL), T(Z), END);
+    case KC_AG_CUT:
+        return use_cmd ? MACRODOWN(D(LGUI), T(X), END) : MACRODOWN(D(LCTRL), T(X), END);
+    case KC_AG_COPY:
+        return use_cmd ? MACRODOWN(D(LGUI), T(C), END) : MACRODOWN(D(LCTRL), T(C), END);
+    case KC_AG_PASTE:
+        return use_cmd ? MACRODOWN(D(LGUI), T(V), END) : MACRODOWN(D(LCTRL), T(V), END);
+
+    case KC_AG_DESK_L:
+        return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(SCLN), END) : MACRODOWN(D(LALT), D(LCTRL), T(SCLN), END);
+    case KC_AG_DESK_R:
+        return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(QUOT), END) : MACRODOWN(D(LALT), D(LCTRL), T(QUOT), END);
+
+    case KC_AG_TAB_C:
+        return use_cmd ? MACRODOWN(D(LGUI), T(W), END) : MACRODOWN(D(LCTRL), T(W), END);
+    case KC_AG_TAB_N:
+        return use_cmd ? MACRODOWN(D(LGUI), T(T), END) : MACRODOWN(D(LCTRL), T(T), END);
+    case KC_AG_TAB_R:
+        return use_cmd ? MACRODOWN(D(LGUI), D(LSHIFT), T(T), END) : MACRODOWN(D(LCTRL), D(LSHIFT), T(T), END);
+    }
+
+    return MACRO_NONE;
+}
index 95abb15..0bb519f 100644 (file)
@@ -1,15 +1,15 @@
-#include "jd45.h"
+#include QMK_KEYBOARD_H
 
 /* this keymap is to provide a basic keyboard layout for testing the matrix
  * for more practical and complicated keymap refer to other keymaps in the same folder
  */
 
 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP(
-  ESC,   Q,    W,    E,    R,    T,    Y,    U,    I,    O,    P,     QUOT, BSPC,
-  TAB,   A,    S,    D,    F,    G,    H,    J,    K,    L,    SCLN,  ENT,
-  LSFT,  Z,    X,    C,    V,    B,    N,    M,    COMM, DOT,  SLSH,  RSFT,
-  PAUSE, LCTL, LALT, DEL,  SPC,  DEL,  LEFT, UP,   DOWN, RIGHT ),
+    [0] = LAYOUT(
+        ESC, Q, W, E, R, T, Y, U, I, O, P, QUOT, BSPC,
+        TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT,
+        LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
+        PAUSE, LCTL, LALT, DEL, SPC, DEL, LEFT, UP, DOWN, RIGHT),
 };
 
 const uint16_t PROGMEM fn_actions[] = {
index 53a1f0a..bfaa128 100644 (file)
@@ -3,7 +3,7 @@
 /**
  *JD45 keymap definition macro
  */
-#define KEYMAP_JD45( \
+#define LAYOUT_JD45( \
     K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, \
     K14, K15, K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, \
     K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, \
dissimilarity index 63%
index 0da114a..c711939 100644 (file)
-#include "jd45.h"
-
-extern keymap_config_t keymap_config;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
-#define _PLOVER 5
-#define _TOUCHCURSOR 6
-#define _MOUSECURSOR 7
-#define _ADJUST 16
-
-// Keycodes
-enum planck_keycodes {
-  QWERTY = SAFE_RANGE,
-  COLEMAK,
-  DVORAK,
-  PLOVER,
-  LOWER,
-  RAISE,
-  BACKLIT,
-  EXT_PLV
-};
-
-enum macro_keycodes {
-  KC_ALT_TAB,
-  KC_CMD_TAB,
-  KC_CTL_TAB,
-  KC_CMD_SLSH,
-  KC_AG_FIND,
-  KC_AG_AGAIN,
-  KC_AG_UNDO,
-  KC_AG_CUT,
-  KC_AG_COPY,
-  KC_AG_PASTE,
-  KC_AG_DESK_L,
-  KC_AG_DESK_R,
-  KC_AG_TAB_C,
-  KC_AG_TAB_N,
-  KC_AG_TAB_R,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-// Custom macros
-#define CTL_ESC     CTL_T(KC_ESC)               // Tap for Esc, hold for Ctrl
-#define SFT_ENT     SFT_T(KC_ENT)               // Tap for Enter, hold for Shift
-#define HPR_TAB     ALL_T(KC_TAB)               // Tap for Tab, hold for Hyper
-#define GUI_SEM     GUI_T(KC_SCLN)              // Tap for Semicolon, hold for GUI
-#define ALT_QUO     ALT_T(KC_QUOT)              // Tap for Quote, hold for Alt
-// Requires KC_TRNS/_______ for the trigger key in the destination layer
-#define LT_TC       LT(_TOUCHCURSOR, KC_SPC)    // L-ayer T-ap T-ouch C-ursor
-#define LT_MC(kc)   LT(_MOUSECURSOR, kc)        // L-ayer T-ap M-ouse C-ursor
-#define ALT_TAB     M(KC_ALT_TAB)               // Macro for Alt-Tab
-#define CMD_TAB     M(KC_CMD_TAB)               // Macro for Cmd-Tab
-#define CTL_TAB     M(KC_CTL_TAB)               // Macro for Ctl-Tab
-#define CMD_SLSH    M(KC_CMD_SLSH)              // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
-#define AG_FIND     M(KC_AG_FIND)               // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
-#define AG_AGAIN    M(KC_AG_AGAIN)
-#define AG_UNDO     M(KC_AG_UNDO)
-#define AG_CUT      M(KC_AG_CUT)
-#define AG_COPY     M(KC_AG_COPY)
-#define AG_PASTE    M(KC_AG_PASTE)
-#define AG_D_L      M(KC_AG_DESK_L)             // For Virtual Desktop Switching: Left, and
-#define AG_D_R      M(KC_AG_DESK_R)             //                                Right
-#define AG_T_C      M(KC_AG_TAB_C)              // For Chrome, etc. Tab Close,
-#define AG_T_N      M(KC_AG_TAB_N)              //                  Tab New, and
-#define AG_T_R      M(KC_AG_TAB_R)              //                  Tab Reopen Closed
-
-/* Qwerty
- *
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QWERTY] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    HPR_TAB,   KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P, KC_BSPC, KC_BSPC,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    CTL_ESC ,   KC_A, KC_S,LT_MC(KC_D),    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L, GUI_SEM,    ALT_QUO     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    KC_LSFT  ,   KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,    SFT_ENT    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Colemak
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |Hyper/Tab|   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * | Ctrl/Esc |   A  |   R  | MC/S |   T  |   D  |   H  |   N  |   E  |   I  |   O  |    "       |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | Shift     |   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_COLEMAK] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    HPR_TAB,   KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y, KC_SCLN, KC_BSPC, KC_BSPC,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    CTL_ESC ,   KC_A, KC_R,LT_MC(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,    SFT_ENT    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Dvorak
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |Hyper/Tab|   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * | Ctrl/Esc |   A  |   O  | MC/E |   U  |   I  |   D  |   H  |   T  |   N  |   S  |    /       |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | Shift     |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |  Sft/Ent  |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_DVORAK] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    HPR_TAB,KC_QUOT, KC_COMM,  KC_DOT,    KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L, KC_BSPC, KC_BSPC,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    CTL_ESC ,   KC_A,    KC_O,LT_MC(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,    SFT_ENT    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    KC_RGUI  ,  KC_LALT  ,  KC_LGUI  ,   LOWER   ,   LT_TC   ,   LT_TC   ,    RAISE  ,  KC_VOLD  ,  KC_VOLU  , KC_MPLY),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Lower
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_LOWER] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    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_BSPC,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    KC_LBRC ,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR,    KC_PIPE     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    KC_RBRC  ,  KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,  KC_F12, KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC,    KC_BSLS    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    BACKLIT  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Raise
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_RAISE] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    KC_0   ,   KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0, KC_BSPC, KC_BSPC,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    KC_DLR  ,   KC_4,    KC_5,    KC_6,  KC_DOT, KC_PLUS,  KC_DOT,    KC_4,    KC_5,    KC_6, KC_ASTR,    KC_PIPE     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    KC_EQL   ,   KC_7,    KC_8,    KC_9,    KC_0, KC_MINS,  KC_DOT,    KC_1,    KC_2,    KC_3, KC_SLSH,    KC_BSLS    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    BACKLIT  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    KC_MPRV,    KC_MNXT, KC_MUTE),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |      |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |        |        |          |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- *
- * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
- * seem to work on Mac. Presumably they'll work under Windows.
- */
-
-[_TOUCHCURSOR] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD,  KC_INS, KC_HOME,   KC_UP,  KC_END, KC_BSPC, _______, _______,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    _______ ,KC_LALT,  KC_SPC,  AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT,  AG_D_L,    AG_D_R      ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    _______  ,AG_UNDO,  AG_CUT, AG_COPY,AG_PASTE,  KC_GRV, KC_PGDN,  KC_DEL,  AG_T_N,  AG_T_R,CMD_SLSH,    _______    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______, _______   , _______   ,    _______,    _______,    _______, _______),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Mouse Layer
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |        |        |          |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-
-[_MOUSECURSOR] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4,    KC_BTN5     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    _______  ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3,    _______    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,    _______,    _______,    _______,    _______,    _______, _______),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Plover layer (http://opensteno.org)
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |      #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |         |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |     D       |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | TogOut    |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |    Z      |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Exit   |       |   A   |   O   |          |          |    E    |   U    |        |          |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-
-[_PLOVER] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    KC_1   ,   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,       KC_C,       KC_V,  XXXXXXX  ,  XXXXXXX  ,       KC_N,       KC_M,    XXXXXXX, XXXXXXX),
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-
-/* Adjust (Lower + Raise)
- * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
- * |         |      |      |      |      |      |      |      |      |      |      |      | Del  |
- * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
- * |          |      |      |      |      |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|            |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * |           |      |      |      |      |     |       |      |      |      |      |           |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * |        |       |       |       |          |          |         |        |        |  Reset   |
- *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
- */
-[_ADJUST] = KEYMAP_JD45(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
-    _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
-    _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP,  QWERTY, COLEMAK,  DVORAK,  PLOVER,    _______     ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-    _______  ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,    _______    ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-    _______  ,    _______,    _______,    _______,  _______  ,  _______  ,    _______,    _______,    _______,  RESET)
-/*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
-};
-
-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) {
-        default_layer_set(1UL<<_QWERTY);
-      }
-      return false;
-      break;
-    case COLEMAK:
-      if (record->event.pressed) {
-        default_layer_set(1UL<<_COLEMAK);
-      }
-      return false;
-      break;
-    case DVORAK:
-      if (record->event.pressed) {
-        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 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) {
-        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;
-  }
-  return true;
-}
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    if (!eeconfig_is_enabled()) {
-      eeconfig_init();
-    }
-
-    bool use_cmd = true;    // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
-    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
-    // quantum/quantum.c
-    if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
-      use_cmd = false;      // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
-    }
-
-    switch (id) {
-      case KC_ALT_TAB:
-        if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
-        else        { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
-      case KC_CMD_TAB:
-        if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI),  D(TAB), END ) : MACRO( U(TAB), END )); }
-        else        { return (record->event.pressed ? MACRO( D(LALT),  D(TAB), END ) : MACRO( U(TAB), END )); }
-
-      case KC_CTL_TAB:
-        return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
-      case KC_CMD_SLSH:
-        return (record->event.pressed ? MACRO( D(LGUI),  D(SLSH),END ) : MACRO( U(SLSH),END ));
-
-      case KC_AG_FIND:
-        return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
-      case KC_AG_AGAIN:
-        return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
-      case KC_AG_UNDO:
-        return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
-      case KC_AG_CUT:
-        return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
-      case KC_AG_COPY:
-        return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
-      case KC_AG_PASTE:
-        return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
-
-      case KC_AG_DESK_L:
-        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
-      case KC_AG_DESK_R:
-        return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
-
-      case KC_AG_TAB_C:
-        return use_cmd ? MACRODOWN( D(LGUI),            T(W), END ) : MACRODOWN( D(LCTRL),            T(W), END );
-      case KC_AG_TAB_N:
-        return use_cmd ? MACRODOWN( D(LGUI),            T(T), END ) : MACRODOWN( D(LCTRL),            T(T), END );
-      case KC_AG_TAB_R:
-        return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
-    }
-
-    return MACRO_NONE;
-}
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes
+{
+    QWERTY = SAFE_RANGE,
+    COLEMAK,
+    DVORAK,
+    PLOVER,
+    LOWER,
+    RAISE,
+    BACKLIT,
+    EXT_PLV
+};
+
+enum macro_keycodes
+{
+    KC_ALT_TAB,
+    KC_CMD_TAB,
+    KC_CTL_TAB,
+    KC_CMD_SLSH,
+    KC_AG_FIND,
+    KC_AG_AGAIN,
+    KC_AG_UNDO,
+    KC_AG_CUT,
+    KC_AG_COPY,
+    KC_AG_PASTE,
+    KC_AG_DESK_L,
+    KC_AG_DESK_R,
+    KC_AG_TAB_C,
+    KC_AG_TAB_N,
+    KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC)  // Tap for Esc, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT)  // Tap for Enter, hold for Shift
+#define HPR_TAB ALL_T(KC_TAB)  // Tap for Tab, hold for Hyper
+#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI
+#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB M(KC_ALT_TAB)          // Macro for Alt-Tab
+#define CMD_TAB M(KC_CMD_TAB)          // Macro for Cmd-Tab
+#define CTL_TAB M(KC_CTL_TAB)          // Macro for Ctl-Tab
+#define CMD_SLSH M(KC_CMD_SLSH)        // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND M(KC_AG_FIND)          // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN M(KC_AG_AGAIN)
+#define AG_UNDO M(KC_AG_UNDO)
+#define AG_CUT M(KC_AG_CUT)
+#define AG_COPY M(KC_AG_COPY)
+#define AG_PASTE M(KC_AG_PASTE)
+#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
+#define AG_D_R M(KC_AG_DESK_R) //                                Right
+#define AG_T_C M(KC_AG_TAB_C)  // For Chrome, etc. Tab Close,
+#define AG_T_N M(KC_AG_TAB_N)  //                  Tab New, and
+#define AG_T_R M(KC_AG_TAB_R)  //                  Tab Reopen Closed
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   S  | MC/D |   F  |   G  |   H  |   J  |   K  |   L  |GUI/; |   Alt/"    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   Shift   |   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [_QWERTY] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_BSPC,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        CTL_ESC, KC_A, KC_S, LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_VOLD, KC_VOLU, KC_MPLY),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   R  | MC/S |   T  |   D  |   H  |   N  |   E  |   I  |   O  |    "       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_COLEMAK] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        CTL_ESC, KC_A, KC_R, LT_MC(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, SFT_ENT,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_VOLD, KC_VOLU, KC_MPLY),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |Hyper/Tab|   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * | Ctrl/Esc |   A  |   O  | MC/E |   U  |   I  |   D  |   H  |   T  |   N  |   S  |    /       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift     |   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |  Sft/Ent  |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |   RGUI |  Alt  |  GUI  | Lower | TC/Space | TC/Space |  Raise  |  Vol-  |  Vol+  |   Play   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_DVORAK] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_BSPC,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        CTL_ESC, KC_A, KC_O, LT_MC(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, SFT_ENT,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        KC_RGUI, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_VOLD, KC_VOLU, KC_MPLY),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   ~     |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   [      |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |   {  |   }  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   ]       |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |   -  |   =  |   [  |   ]  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_LOWER] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        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_BSPC,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        KC_LBRC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        KC_RBRC, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        BACKLIT, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |   0     |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |   $      |   4  |   5  |   6  |   .  |   +  |   .  |   4  |   5  |   6  |   *  |   "|"      |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |   =       |   7  |   8  |   9  |   0  |   -  |   .  |   1  |   2  |   3  |   /  |    \      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite  |       |       |       |          |          |         |  Prev  |  Next  |   Mute   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_RAISE] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        KC_DLR, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        KC_EQL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        BACKLIT, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MUTE),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * | AltTab  |CmdTab|CtlTab| GUI  |Shift |  ~   |Insert| Home |  Up  | End  | Bksp |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          | Alt  |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L|  Desk_R    |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           | Undo | Cut  | Copy |Paste |  `   | PgDn | Del  |Tab_N |Tab_R |iTerm2|           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+    [_TOUCHCURSOR] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______, _______,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        _______, KC_LALT, KC_SPC, AG_T_C, AG_FIND, AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        _______, AG_UNDO, AG_CUT, AG_COPY, AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R, CMD_SLSH, _______,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |ACCL0 |      |      |      |      |WHL_L |  Up  |WHL_R | BTN2 |      |      |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |ACCL2 | BTN2 |      | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 |   BTN5     |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      | BTN3 |      |WHL_Dn| BTN1 |      |      | BTN3 |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+    [_MOUSECURSOR] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        _______, _______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        _______, KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        _______, _______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Plover layer (http://opensteno.org)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |      #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |   #  |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |         |   S  |   T  |   P  |   H  |   *  |   *  |   F  |   P  |   L  |   T  |     D       |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | TogOut    |   S  |   K  |   W  |   R  |   *  |   *  |   R  |   B  |   G  |   S  |    Z      |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Exit   |       |   A   |   O   |          |          |    E    |   U    |        |          |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+
+    [_PLOVER] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        KC_1, 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, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX),
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+
+    /* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------+------.
+ * |         |      |      |      |      |      |      |      |      |      |      |      | Del  |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------`------|
+ * |          |      |      |      |      |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover|            |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * |           |      |      |      |      |     |       |      |      |      |      |           |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * |        |       |       |       |          |          |         |        |        |  Reset   |
+ *  `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
+ */
+    [_ADJUST] = LAYOUT_JD45(
+        /*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+        /*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
+        _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+        /*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+        /*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+        _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET)
+    /*`----------+-----------+-----------+-----------+----^^^----+----^^^----+-----------+-----------+-----------+--------'*/
+};
+
+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)
+        {
+            default_layer_set(1UL << _QWERTY);
+        }
+        return false;
+        break;
+    case COLEMAK:
+        if (record->event.pressed)
+        {
+            default_layer_set(1UL << _COLEMAK);
+        }
+        return false;
+        break;
+    case DVORAK:
+        if (record->event.pressed)
+        {
+            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 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)
+        {
+            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;
+    }
+    return true;
+}
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    if (!eeconfig_is_enabled())
+    {
+        eeconfig_init();
+    }
+
+    bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+    // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+    // quantum/quantum.c
+    if (keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1)
+    {
+        use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+    }
+
+    switch (id)
+    {
+    case KC_ALT_TAB:
+        if (use_cmd)
+        {
+            return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END));
+        }
+        else
+        {
+            return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END));
+        }
+    case KC_CMD_TAB:
+        if (use_cmd)
+        {
+            return (record->event.pressed ? MACRO(D(LGUI), D(TAB), END) : MACRO(U(TAB), END));
+        }
+        else
+        {
+            return (record->event.pressed ? MACRO(D(LALT), D(TAB), END) : MACRO(U(TAB), END));
+        }
+
+    case KC_CTL_TAB:
+        return (record->event.pressed ? MACRO(D(LCTRL), D(TAB), END) : MACRO(U(TAB), END));
+    case KC_CMD_SLSH:
+        return (record->event.pressed ? MACRO(D(LGUI), D(SLSH), END) : MACRO(U(SLSH), END));
+
+    case KC_AG_FIND:
+        return use_cmd ? MACRODOWN(D(LGUI), T(F), END) : MACRODOWN(D(LCTRL), T(F), END);
+    case KC_AG_AGAIN:
+        return use_cmd ? MACRODOWN(D(LGUI), T(G), END) : MACRODOWN(D(LCTRL), T(G), END);
+    case KC_AG_UNDO:
+        return use_cmd ? MACRODOWN(D(LGUI), T(Z), END) : MACRODOWN(D(LCTRL), T(Z), END);
+    case KC_AG_CUT:
+        return use_cmd ? MACRODOWN(D(LGUI), T(X), END) : MACRODOWN(D(LCTRL), T(X), END);
+    case KC_AG_COPY:
+        return use_cmd ? MACRODOWN(D(LGUI), T(C), END) : MACRODOWN(D(LCTRL), T(C), END);
+    case KC_AG_PASTE:
+        return use_cmd ? MACRODOWN(D(LGUI), T(V), END) : MACRODOWN(D(LCTRL), T(V), END);
+
+    case KC_AG_DESK_L:
+        return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(SCLN), END) : MACRODOWN(D(LALT), D(LCTRL), T(SCLN), END);
+    case KC_AG_DESK_R:
+        return use_cmd ? MACRODOWN(D(LGUI), D(LCTRL), T(QUOT), END) : MACRODOWN(D(LALT), D(LCTRL), T(QUOT), END);
+
+    case KC_AG_TAB_C:
+        return use_cmd ? MACRODOWN(D(LGUI), T(W), END) : MACRODOWN(D(LCTRL), T(W), END);
+    case KC_AG_TAB_N:
+        return use_cmd ? MACRODOWN(D(LGUI), T(T), END) : MACRODOWN(D(LCTRL), T(T), END);
+    case KC_AG_TAB_R:
+        return use_cmd ? MACRODOWN(D(LGUI), D(LSHIFT), T(T), END) : MACRODOWN(D(LCTRL), D(LSHIFT), T(T), END);
+    }
+
+    return MACRO_NONE;
+}
dissimilarity index 68%
index c278abb..a797582 100644 (file)
@@ -1,86 +1,82 @@
-#include "jd45.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP(
-  ESC,  Q,    W,    F,    P,    G,    J,    L,    U,    Y,    SCLN, QUOT, BSPC,
-  FN8,  A,    R,    S,    T,    D,    H,    N,    E,    I,    O,     ENT,
-  LSFT, Z,    X,    C,    V,    B,    K,    M,    COMM, DOT,  SLSH,  FN6,
-  FN4, LGUI, FN7, FN2,  FN1,  SPC,  FN5,  RALT,  FN3, FN0 ),
-[1] = KEYMAP(
-  TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, END,  PGDN, DOWN, TRNS,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS ),
-[2] = KEYMAP(
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,    7,    8,    9,    0, TRNS, TRNS,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC,    4,    5,    6,  DOT, TRNS,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC,    1,    2,    3, BSLS, TRNS,
-  TRNS,FN29, TRNS, TRNS, TRNS, PAUSE,  EQL, MINS, TRNS, TRNS ),
-[3] = KEYMAP(
-  TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
-  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, TRNS, TRNS, TRNS, TRNS ),
-[4] = KEYMAP(
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,    7,    8,    9,    0, TRNS, TRNS,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC,    4,    5,    6,  DOT, TRNS,
-  TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC,    1,    2,    3, BSLS, TRNS,
-  TRNS,FN29, TRNS, TRNS, TRNS, PAUSE,  EQL, MINS, TRNS, TRNS ),
-};
-
-enum macro_id {
-   PSWD1,
-   PSWD2,
-   PSWD3,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-    [0] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_MINS),
-    [1] = ACTION_LAYER_MOMENTARY(1),  // FN1
-    [2] = ACTION_LAYER_MOMENTARY(2),  // FN2
-    [3] = ACTION_LAYER_MOMENTARY(3),  // FN3
-    [4] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_GRV),
-    [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_RGUI),
-    [6] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_CAPS),
-    [7] = ACTION_LAYER_MODS(4, MOD_LSFT),  // FN4
-    [8] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB),
-
-    [10] = ACTION_MACRO(PSWD1),
-    [11] = ACTION_MACRO(PSWD2),
-    [12] = ACTION_MACRO(PSWD3),
-    
-    [29] = ACTION_BACKLIGHT_TOGGLE(),
-    [30] = ACTION_BACKLIGHT_INCREASE(),
-    [31] = ACTION_BACKLIGHT_DECREASE()
-    
-};
-
-/*
- * Macro definition
- */
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-    switch (id) {
-        case PSWD1:
-            return (record->event.pressed ?
-                    MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) :
-                    MACRO_NONE );
-        case PSWD2:
-            return (record->event.pressed ?
-                    MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) :
-                    MACRO_NONE );
-        case PSWD3:
-            return (record->event.pressed ?
-                    MACRO( I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END ) :
-                    MACRO_NONE );
-        //case VOLUP:
-        //    return (record->event.pressed ?
-        //            MACRO( D(VOLU), U(VOLU), END ) :
-        //            MACRO_NONE );
-        //case ALT_TAB:
-        //    return (record->event.pressed ?
-        //            MACRO( D(LALT), D(TAB), END ) :
-        //            MACRO( U(TAB), END ));
-    }
-    return MACRO_NONE;
-}
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT(
+        ESC, Q, W, F, P, G, J, L, U, Y, SCLN, QUOT, BSPC,
+        FN8, A, R, S, T, D, H, N, E, I, O, ENT,
+        LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, FN6,
+        FN4, LGUI, FN7, FN2, FN1, SPC, FN5, RALT, FN3, FN0),
+    [1] = LAYOUT(
+        TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, END, PGDN, DOWN, TRNS,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
+    [2] = LAYOUT(
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS,
+        TRNS, FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS),
+    [3] = LAYOUT(
+        TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
+        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, TRNS, TRNS, TRNS, TRNS),
+    [4] = LAYOUT(
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS,
+        TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS,
+        TRNS, FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS),
+};
+
+enum macro_id
+{
+    PSWD1,
+    PSWD2,
+    PSWD3,
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+    [0] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_MINS),
+    [1] = ACTION_LAYER_MOMENTARY(1), // FN1
+    [2] = ACTION_LAYER_MOMENTARY(2), // FN2
+    [3] = ACTION_LAYER_MOMENTARY(3), // FN3
+    [4] = ACTION_MODS_TAP_KEY(MOD_LSFT, KC_GRV),
+    [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_RGUI),
+    [6] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_CAPS),
+    [7] = ACTION_LAYER_MODS(4, MOD_LSFT), // FN4
+    [8] = ACTION_MODS_TAP_KEY(MOD_LCTL, KC_TAB),
+
+    [10] = ACTION_MACRO(PSWD1),
+    [11] = ACTION_MACRO(PSWD2),
+    [12] = ACTION_MACRO(PSWD3),
+
+    [29] = ACTION_BACKLIGHT_TOGGLE(),
+    [30] = ACTION_BACKLIGHT_INCREASE(),
+    [31] = ACTION_BACKLIGHT_DECREASE()
+
+};
+
+/*
+ * Macro definition
+ */
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+    switch (id)
+    {
+    case PSWD1:
+        return (record->event.pressed ? MACRO(I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END) : MACRO_NONE);
+    case PSWD2:
+        return (record->event.pressed ? MACRO(I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END) : MACRO_NONE);
+    case PSWD3:
+        return (record->event.pressed ? MACRO(I(0), T(1), T(2), T(3), T(4), T(5), T(6), T(7), T(8), T(ENT), END) : MACRO_NONE);
+        //case VOLUP:
+        //    return (record->event.pressed ?
+        //            MACRO( D(VOLU), U(VOLU), END ) :
+        //            MACRO_NONE );
+        //case ALT_TAB:
+        //    return (record->event.pressed ?
+        //            MACRO( D(LALT), D(TAB), END ) :
+        //            MACRO( U(TAB), END ));
+    }
+    return MACRO_NONE;
+}
dissimilarity index 70%
index 610552e..a53b096 100644 (file)
@@ -1,80 +1,81 @@
-#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_period_set(3);
-                breathing_enable();
-                layer_on(1);
-            }
-            else
-            {
-                breathing_period_set(1);
-                breathing_self_disable();
-                layer_off(1);
-            }
-        break;
-        case M_LAYER2:
-            if (record->event.pressed)
-            {
-                breathing_period_set(2);
-                breathing_pulse();
-                layer_on(2);
-            }
-            else
-            {
-                breathing_period_set(1);
-                breathing_self_disable();
-                layer_off(2);
-            }
-        break;
-      }
-    return MACRO_NONE;
-};
+#include QMK_KEYBOARD_H
+
+/* Mike's Layout for JD45 with backlight LEDs acting as layer indicator
+ */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+    [0] = LAYOUT(
+        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] = LAYOUT(
+        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] = LAYOUT(
+        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] = LAYOUT(
+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_period_set(3);
+            breathing_enable();
+            layer_on(1);
+        }
+        else
+        {
+            breathing_period_set(1);
+            breathing_self_disable();
+            layer_off(1);
+        }
+        break;
+    case M_LAYER2:
+        if (record->event.pressed)
+        {
+            breathing_period_set(2);
+            breathing_pulse();
+            layer_on(2);
+        }
+        else
+        {
+            breathing_period_set(1);
+            breathing_self_disable();
+            layer_off(2);
+        }
+        break;
+    }
+    return MACRO_NONE;
+};
dissimilarity index 91%
index 44f0c31..c17a07f 100644 (file)
-#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;
-}
+#include QMK_KEYBOARD_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;
+}