~ruther/qmk_firmware

8ed1addd1e3ab783d86ba5d0a0935e2e7ec400f2 — James Young 4 years ago 25c97e0
Update noroadsleft userspace and keymaps (2021-05-03) (#12796)

* Set Dvorak as the standard base layer

* Remove unneeded includes

* Remove custom handling for Quake 2

Have now rewritten my in-game configuration to use Dvorak mapping instead of QWERTY, which means I don't need any of this stuff.

* Clean up comments in KC60 keymap
M keyboards/coseyfannitutti/discipline/keymaps/noroadsleft/keymap.c => keyboards/coseyfannitutti/discipline/keymaps/noroadsleft/keymap.c +10 -11
@@ 15,11 15,10 @@
 */

#include "noroadsleft.h"
#include "sendstring_dvorak.h"

enum layer_names {
    _QW,
    _DV,
    _QW,
    _NP,
    _FN,
    _SY


@@ 30,14 29,6 @@ enum layer_names {

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    [_QW] = LAYOUT_65_ansi(
        KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_HOME,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
        FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  KC_PGDN,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_UP,   KC_END,
        CTL_GRV, KC_LGUI, KC_LALT,                            KC_SPC,                    KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
    ),

    [_DV] = LAYOUT_65_ansi(
        KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC, KC_BSPC, KC_HOME,
        KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH, KC_EQL,  KC_BSLS, KC_PGUP,


@@ 46,6 37,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        CTL_GRV, KC_LGUI, KC_LALT,                            KC_SPC,                    KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
    ),

    [_QW] = LAYOUT_65_ansi(
        KC_GESC, KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC, KC_HOME,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
        FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,  KC_PGDN,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_RSFT, KC_UP,   KC_END,
        CTL_GRV, KC_LGUI, KC_LALT,                            KC_SPC,                    KC_RALT, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
    ),

    [_NP] = LAYOUT_65_ansi(
        _______, _______, _______, _______, _______, _______, _______, KC_P7,   KC_P8,   KC_P9,   _______, _______, _______, _______, _______,
        _______, _______, _______, _______, KC_E,    KC_F,    _______, KC_P4,   KC_P5,   KC_P6,   KC_PAST, KC_PSLS, KC_PEQL, _______, _______,


@@ 63,7 62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    ),

    [_SY] = LAYOUT_65_ansi(
        TG(_SY), TO(_QW), TO(_DV), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,   XXXXXXX, DEBUG,   XXXXXXX, VRSN,    XXXXXXX, XXXXXXX,
        TG(_SY), TO(_DV), TO(_QW), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,   XXXXXXX, DEBUG,   XXXXXXX, VRSN,    XXXXXXX, XXXXXXX,
        XXXXXXX, XXXXXXX, M_MDSWP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX, XXXXXXX,
        XXXXXXX,          XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,

M keyboards/kbdfans/kbd75/keymaps/noroadsleft/keymap.c => keyboards/kbdfans/kbd75/keymaps/noroadsleft/keymap.c +12 -80
@@ 15,8 15,6 @@
 */

#include "noroadsleft.h"
//#include "version.h"
#include "sendstring_dvorak.h"

#define LAYOUT_75_ansi_wkl( \
    K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \


@@ 35,20 33,13 @@
}

enum layer_names {
    _QW,
    _DV,
    _QW,
    _Q2,
    _FN,
    _SY
};

enum custom_keycodes {
    GO_Q2 = KEYMAP_SAFE_RANGE,
    Q2_ENT
};

unsigned char q2InputMode = 0;

// Tap Dance declarations
enum tap_dances {
    LAG,


@@ 65,14 56,6 @@ qk_tap_dance_action_t tap_dance_actions[] = {
#define FN_CAPS LT(_FN,KC_CAPS)

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    [_QW] = LAYOUT_75_ansi_wkl(
        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, MO(_SY),
        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,           KC_BSPC, KC_HOME,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGUP,
        FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,           KC_PGDN,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_UP,   KC_END,
        KC_LCTL, TD(LAG),                                     KC_SPC,                                      TD(RAG), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [_DV] = LAYOUT_75_ansi_wkl(
        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, MO(_SY),
        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC,          KC_BSPC, KC_HOME,


@@ 81,11 64,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        KC_LSFT,          KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,             KC_RSFT, KC_UP,   KC_END,
        KC_LCTL, TD(LAG),                                     KC_SPC,                                      TD(RAG), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [_QW] = LAYOUT_75_ansi_wkl(
        KC_ESC,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  _______, _______, MO(_SY),
        KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,           KC_BSPC, KC_HOME,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,          KC_PGUP,
        FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,           KC_PGDN,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT, KC_UP,   KC_END,
        KC_LCTL, TD(LAG),                                     KC_SPC,                                      TD(RAG), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
    ),
    [_Q2] = LAYOUT_75_ansi_wkl(
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        KC_GRV,  _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          Q2_ENT,           _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,          _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______, _______, _______,
        _______, KC_LALT,                                     _______,                                     KC_RALT, _______, _______, _______, _______
    ),


@@ 98,7 89,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        _______, _______,                                     _______,                                     _______, _______, _______, _______, _______
    ),
    [_SY] = LAYOUT_75_ansi_wkl(
        _______, TO(_QW), TO(_DV), _______, GO_Q2,   _______, _______, _______, RESET,   EEP_RST, DEBUG,   _______, VRSN,    _______, _______, _______,
        _______, TO(_DV), TO(_QW), _______, TG(_Q2), _______, _______, _______, RESET,   EEP_RST, DEBUG,   _______, VRSN,    _______, _______, _______,
        _______, _______, M_MDSWP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          KC_DEL,  _______,
        _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,          _______,          _______,


@@ 111,62 102,3 @@ bool led_update_user(led_t led_state) {
    writePin(B2, !led_state.caps_lock);
    return false;
}

bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case GO_Q2:
            if (record->event.pressed) {
                layer_move(_QW);
                layer_on(_Q2);
            };
            return false;
        case Q2_ENT:
            if (record->event.pressed) {
                if (q2InputMode == 0) {
                    tap_code(KC_ENT);
                    q2InputMode = 1;
                    layer_on(_DV);
                    //layer_on(_Q2);
                } else if (q2InputMode == 1) {
                    tap_code(KC_ENT);
                    q2InputMode = 0;
                    layer_off(_DV);
                } else {
                    tap_code(KC_ENT);
                }
            };
            return false;
        case KC_ESC:
            if (record->event.pressed) {
                if (q2InputMode > 0) {
                    tap_code(KC_ESC);
                    q2InputMode = 0;
                    layer_off(_DV);
                } else {
                    tap_code(KC_ESC);
                }
            };
            return false;
        case KC_GRV:
            if (IS_LAYER_ON(_Q2) == true) {
                if (record->event.pressed) {
                    if (q2InputMode == 0) {
                        tap_code(KC_GRV);
                        q2InputMode = 2;
                        layer_on(_DV);
                    } else if (q2InputMode == 1) {
                        tap_code(KC_GRV);
                        q2InputMode = 2;
                    } else {
                        tap_code(KC_GRV);
                        q2InputMode = 0;
                        layer_off(_DV);
                    }
                    return false;
                }
            };
            return true;
        default:
            return true;
    }
}

M keyboards/kc60/keymaps/noroadsleft/keymap.c => keyboards/kc60/keymaps/noroadsleft/keymap.c +23 -118
@@ 15,27 15,22 @@
 */

#include "noroadsleft.h"
#include "sendstring_dvorak.h"
//#include "sendstring_colemak.h"
#include "print.h"


/**********************
** LAYER DEFINITIONS **
**********************/
// LAYER DEFINITIONS
enum layer_names {
    // BASE LAYERS
    _QW,  // QWERTY
    _DV,  // Dvorak
    _CM,  // Colemak
    _DV,
    _QW,
    _CM,
    // QUAKE 2 OVERLAY
    _Q2,  // Quake 2
    _Q2,
    // FUNCTION LAYER
    _FN,  // Function
    _FN,
    // OTHER LAYERS
    _NP,  // Numpad
    _MA,  // Macros
    _SY,  // System
    _NP,
    _MA,
    _SY,
};




@@ 44,97 39,11 @@ enum layer_names {
#define CTL_GRV MT(MOD_LCTL, KC_GRV)  // Left Control when held, Grave accent when tapped


// MACRO DEFINITIONS
enum custom_keycodes {
    GO_Q2 = KEYMAP_SAFE_RANGE,
    Q2_ENT
};


/*******************
** MODIFIER MASKS **
*******************/
unsigned char q2InputMode = 0;


bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
    switch(keycode) {
        // these are our macros!
        case GO_Q2:
            if (record->event.pressed) {
                //default_layer_set(_QW);
                layer_move(_QW); // TO(_QW);
                layer_on(_Q2);
                //layer_off(_SY);
            };
            return false;
        case Q2_ENT:
            if (record->event.pressed) {
                if (q2InputMode == 0) {
                    tap_code(KC_ENT);
                    q2InputMode = 1;
                    layer_on(_DV);
                    //layer_on(_Q2);
                } else if (q2InputMode == 1) {
                    tap_code(KC_ENT);
                    q2InputMode = 0;
                    layer_off(_DV);
                } else {
                    tap_code(KC_ENT);
                }
            };
            return false;
        case KC_ESC:
            if (record->event.pressed) {
                if (q2InputMode > 0) {
                    tap_code(KC_ESC);
                    q2InputMode = 0;
                    layer_off(_DV);
                } else {
                    tap_code(KC_ESC);
                }
            };
            return false;
        case KC_GRV:
            if (IS_LAYER_ON(_Q2) == true) {
                if (record->event.pressed) {
                    if (q2InputMode == 0) {
                        tap_code(KC_GRV);
                        q2InputMode = 2;
                        layer_on(_DV);
                    } else if (q2InputMode == 1) {
                        tap_code(KC_GRV);
                        q2InputMode = 2;
                    } else {
                        tap_code(KC_GRV);
                        q2InputMode = 0;
                        layer_off(_DV);
                    }
                }
            };
            return false;
    } // switch()
    return true;
};


// KEYMAPS
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    /****************
    ** BASE LAYERS **
    ****************/

    /* QWERTY */
    [_QW] = LAYOUT_60_ansi(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
        FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT,
        CTL_GRV, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_MA), MO(_FN), KC_RCTL
    ),
    // BASE LAYERS

    /* Dvorak */
    [_DV] = LAYOUT_60_ansi(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_LBRC, KC_RBRC, KC_BSPC,
        KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_SLSH, KC_EQL,  KC_BSLS,


@@ 143,7 52,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        CTL_GRV, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_MA), MO(_FN), KC_RCTL
    ),

    /* Colemak */
    [_QW] = LAYOUT_60_ansi(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
        KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_LBRC, KC_RBRC, KC_BSLS,
        FN_CAPS, KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,          KC_ENT,
        KC_LSFT,          KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,          KC_RSFT,
        CTL_GRV, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_MA), MO(_FN), KC_RCTL
    ),

    [_CM] = LAYOUT_60_ansi(
        KC_ESC,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_MINS, KC_EQL,  KC_BSPC,
        KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS,


@@ 152,24 68,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        CTL_GRV, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(_MA), MO(_FN), KC_RCTL
    ),

    /*********************
    ** QUAKE 2 OVERLAYS **
    *********************/
    // QUAKE 2 OVERLAYS

    /* Quake 2 */
    [_Q2] = LAYOUT_60_ansi(
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          Q2_ENT,
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        _______,          _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
        KC_GRV,  _______, _______,                            _______,                            _______, _______, _______, _______
    ),

    /********************
    ** FUNCTION LAYERS **
    ********************/
    // FUNCTION LAYER

    /* Fn layer */
    [_FN] = LAYOUT_60_ansi(
        KC_GRV,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_DEL,
        _______, KC_CALC, KC_APP,  _______, _______, _______, KC_INS,  KC_HOME, KC_UP,   KC_END,  KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS,


@@ 178,11 88,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        _______, _______, _______,                            TG(_NP),                            _______, _______, _______, _______
    ),

    /*****************
    ** OTHER LAYERS **
    *****************/
    // OTHER LAYERS

    /* Numpad layer */
    [_NP] = LAYOUT_60_ansi(
        _______, _______, _______, _______, _______, _______, _______, KC_P7,   KC_P8,   KC_P9,   _______, _______, _______, _______,
        _______, _______, _______, _______, KC_E,    KC_F,    _______, KC_P4,   KC_P5,   KC_P6,   KC_PAST, KC_PSLS, KC_PEQL, _______,


@@ 191,7 98,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        _______, _______, _______,                            TG(_NP),                            _______, _______, _______, _______
    ),

    /* Macro layer */
    [_MA] = LAYOUT_60_ansi(
        _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DM_REC1, DM_REC2, _______,
        _______, _______, _______, G_PUSH,  _______, _______, _______, _______, _______, _______, _______, DM_PLY1, DM_PLY2, DM_RSTP,


@@ 200,9 106,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
        _______, _______, _______,                            _______,                            _______, _______, _______, _______
    ),

    /* System layer */
    [_SY] = LAYOUT_60_ansi(
        TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2,   XXXXXXX, XXXXXXX, XXXXXXX, RESET,   XXXXXXX, DEBUG,   XXXXXXX, VRSN,    XXXXXXX,
        TG(_SY), TO(_QW), TO(_DV), TO(_CM), TG(_Q2), XXXXXXX, XXXXXXX, XXXXXXX, RESET,   XXXXXXX, DEBUG,   XXXXXXX, VRSN,    XXXXXXX,
        XXXXXXX, XXXXXXX, M_MDSWP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
        XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX,
        XXXXXXX,          XXXXXXX, XXXXXXX, BL_DEC,  BL_TOGG, BL_INC,  BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX,

M keyboards/kc60/keymaps/noroadsleft/readme.md => keyboards/kc60/keymaps/noroadsleft/readme.md +18 -28
@@ 1,6 1,6 @@
# @noroadsleft's KC60 keymap

### Last updated: April 26, 2021 13:33 (-0700)
### Last updated: May 3, 2021 16:42 (-0700)

![](https://i.imgur.com/tzhXQYIl.jpg)



@@ 24,9 24,9 @@ Descriptions of the physical locations of keys will use the key's function in a 
## Outline

- [Base Layers](#base-layers)
  - Layer 0: QWERTY `_QW`
  - Layer 1: Hardware Dvorak `_DV`
  - Layer 2: Hardware Colemak `_CM`
  - Layer 0: Dvorak `_DV`
  - Layer 1: QWERTY `_QW`
  - Layer 2: Colemak `_CM`
- [Quake 2 Layer](#quake-2-layer)
  - Layer 3: Quake 2 `_Q2`
- [Function Layer](#function-layer)


@@ 41,30 41,28 @@ Descriptions of the physical locations of keys will use the key's function in a 

## Base Layers

### Layer 0: QWERTY - `_QW`
My base layers are pretty standard for a 60%, with the following changes:

Standard QWERTY layout, with four QMK features:

- The `Menu` key has been replaced by `MO(_FW)`, which moves to my Windows Fn layer when held.
- The `Menu` key has been replaced by `MO(_FN)`, which moves to my Function layer when held.
- The Right `GUI` key has been replaced with a `MO(_MA)` key, which moves to the Macro layer when held.
- The `Caps Lock` key has been replaced with a dual function `LT()` key, which opens the Windows Fn layer when held, and is `Caps Lock` when tapped
- The Left `Control` key has been replaced with a `MT(MOD_CTRL, KC_GRV)` key, which is <code>&#96; ~</code> when tapped and `Ctrl` when held.
- The `Caps Lock` key has been replaced with a dual function `LT()` key, which opens the Function layer when held, and is `Caps Lock` when tapped.
- The Left `Control` key has been replaced with a `MT(MOD_CTRL, KC_GRV)` key, which is `Ctrl` when held and <code>&#96; ~</code> when tapped.

![QWERTY layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/qwerty.png)
### Layer 0: Dvorak - `_DV`

A hardware-based Dvorak Simplified layout. In this layer, I can leave the host system in QWERTY, plug my keyboard in, and still type in Dvorak.

----
![Dvorak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/dvorak.png)

### Layer 1: Hardware Dvorak - `_DV`

- Accessed by holding either `Fn` and tapping `/?` key, then tapping `2@`.
### Layer 1: QWERTY - `_QW`

A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared computer that runs MacOS Sierra, in US QWERTY layout. In this layer, I can leave the system in QWERTY, plug my keyboard in, and still type in Dvorak.
- Accessed by holding either `Fn` and tapping `/?` key, then tapping `2@`.

![Hardware Dvorak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/dvorak.png)
For when other people need to use my keyboard. :)

![QWERTY layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/qwerty.png)

----

### Layer 2: Hardware Colemak `_CM`



@@ 72,7 70,7 @@ A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared com

A hardware-based Colemak layout. Been thinking of trying it, so it's here.

![Hardware Colemak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/colemak.png)
![Colemak layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/colemak.png)


----


@@ 83,11 81,7 @@ A hardware-based Colemak layout. Been thinking of trying it, so it's here.

- Accessed by holding either `Fn` key and tapping the `/?` key, then tapping `4$`

These layers were born out of the confusion I have had trying to use the in-game chat and the console in [Quake 2](https://en.wikipedia.org/wiki/Quake_II). When Quake 2 came out, alternate keyboard layouts weren't really a thing. As a result, all in-game text input is hard-locked to US QWERTY, regardless of what the operating system is using for its input method.

I have solved this by writing a custom QMK macro. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L205), is a [macro](./keymap.c#L63-L70) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that changes the dual-function Left Control/Grave key to a standard Left Control, and the Enter key into a special Enter key specific to Quake 2.

When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L71-L86) I've created sends the keycode for `Enter`, then follows with flipping an internal boolean variable and enabling the Hardware Dvorak layer. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` key is sent, which sends the message, then the macro flips the boolean back to false and disables the Hardware Dvorak layer, which brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L87-L97) that cancels the sending of the message, and undoes the layers.
I used to have some macro craziness here. I've now switched to leaving my main system in QWERTY and having the Dvorak stuff happen on the keyboard, and setting my in-game key assignments to the Dvorak mapping (`.OEU` instead of `ESDF`).

![Quake 2](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/quake2.png)



@@ 96,7 90,7 @@ When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./k

## Function Layer

### Layer 4: Fn layer - `_FN`
### Layer 4: Function layer - `_FN`

- Accessed by holding either `Fn` key from any base layer



@@ 118,8 112,6 @@ Puts a Numpad on the right-hand side of the keyboard. A through F included for h
![Numpad layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/numpad.png)


----

### Layer 6: Macro layer - `_MA`

- Accessed by holding the right-side `Win` key


@@ 131,8 123,6 @@ For macro documentation, see [my userspace readme](../../../../users/noroadsleft
![Macro layer](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/keyboards/kc60/keymaps/noroadsleft/macros.png)


----

### Layer 7: System layer - `_SY`

- Accessed by holding either `Fn` key and tapping the `/?` key

M users/noroadsleft/readme.md => users/noroadsleft/readme.md +4 -4
@@ 25,7 25,7 @@ Some frequently used Git commands.
| [`G_FTCH`](./noroadsleft.c#L43-L52) | `git fetch upstream `  | `git pull upstream `         |
| [`G_BRCH`](./noroadsleft.c#L53-L62) | `master`               | `$(git branch-name)`         |

`$(git branch-name)` is an alias for `git rev-parse --abbrev-ref HEAD`, which normally return the name of the current branch.
`$(git branch-name)` is an alias for `git rev-parse --abbrev-ref HEAD`, which normally returns the name of the current branch.

### "Macro Mode" Macros and Customized Keycodes



@@ 76,6 76,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
## Footnotes

- 1: [^](#macro-mode-macros-and-customized-keycodes) The `M_MDSWP` keycode is used in my keymaps in the following locations:
  - [KC60](../../keyboards/kc60/keymaps/noroadsleft/keymap.c#L206)
  - [KBDfans KBD75 rev1](../../keyboards/kbdfans/kbd75/keymaps/noroadsleft/keymap.c#L102)
  - [CoseyFannitutti Discipline](../../keyboards/coseyfannitutti/discipline/keymaps/noroadsleft/keymap.c#L67)
  - [KC60](../../keyboards/kc60/keymaps/noroadsleft/keymap.c#L111)
  - [KBDfans KBD75 rev1](../../keyboards/kbdfans/kbd75/keymaps/noroadsleft/keymap.c#L93)
  - [CoseyFannitutti Discipline](../../keyboards/coseyfannitutti/discipline/keymaps/noroadsleft/keymap.c#L66)