--- /dev/null
+{
+ "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 }
+ ]
+ }
+ }
+}
/* 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, \
-#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;
+ }
+};
#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, \
-#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)};
--- /dev/null
+{
+ "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 }
+ ]
+ }
+ }
+}
/* 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, \
/**
*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, \
-#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;
+}
-#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[] = {
/**
*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, \
-#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;
+}
-#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;
+}
-#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;
+};
-#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;
+}