qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

keymap.c (12446B)


      1 // Copyright 2023 Danny Nguyen (danny@keeb.io)
      2 // SPDX-License-Identifier: GPL-2.0-or-later
      3 
      4 #include QMK_KEYBOARD_H
      5 
      6 // Each layer gets a name for readability, which is then used in the keymap matrix below.
      7 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
      8 // Layer names don't all need to be of the same length, obviously, and you can also skip them
      9 // entirely and just use numbers.
     10 enum layer_names {
     11     _QWERTY,
     12     _COLEMAK,
     13     _DVORAK,
     14     _LOWER,
     15     _RAISE,
     16     _ADJUST
     17 };
     18 
     19 enum custom_keycodes {
     20   QWERTY = SAFE_RANGE,
     21   COLEMAK,
     22   DVORAK,
     23   LOWER,
     24   RAISE,
     25   ADJUST,
     26 };
     27 
     28 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     29 
     30 /* Qwerty
     31  * ,-----------------------------------------------------------------------------------.
     32  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
     33  * |------+------+------+------+------+------+------+------+------+------+------+------|
     34  * | Tab  |   Q  |   W  |   E  |   R  |   T  |   Y  |   U  |   I  |   O  |   P  | Del  |
     35  * |------+------+------+------+------+-------------+------+------+------+------+------|
     36  * | Esc  |   A  |   S  |   D  |   F  |   G  |   H  |   J  |   K  |   L  |   ;  |  "   |
     37  * |------+------+------+------+------+------|------+------+------+------+------+------|
     38  * | Shift|   Z  |   X  |   C  |   V  |   B  |   N  |   M  |   ,  |   .  |   /  |Enter |
     39  * |------+------+------+------+------+------+------+------+------+------+------+------|
     40  * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
     41  * `-----------------------------------------------------------------------------------'
     42  */
     43 [_QWERTY] = LAYOUT_ortho_5x12(
     44   KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
     45   KC_TAB,  KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,    KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,    KC_DEL,
     46   KC_ESC,  KC_A,    KC_S,    KC_D,    KC_F,    KC_G,    KC_H,    KC_J,    KC_K,    KC_L,    KC_SCLN, KC_QUOT,
     47   KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
     48   ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
     49 ),
     50 
     51 /* Colemak
     52  * ,-----------------------------------------------------------------------------------.
     53  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
     54  * |------+------+------+------+------+------+------+------+------+------+------+------|
     55  * | Tab  |   Q  |   W  |   F  |   P  |   G  |   J  |   L  |   U  |   Y  |   ;  | Del  |
     56  * |------+------+------+------+------+-------------+------+------+------+------+------|
     57  * | Esc  |   A  |   R  |   S  |   T  |   D  |   H  |   N  |   E  |   I  |   O  |  "   |
     58  * |------+------+------+------+------+------|------+------+------+------+------+------|
     59  * | Shift|   Z  |   X  |   C  |   V  |   B  |   K  |   M  |   ,  |   .  |   /  |Enter |
     60  * |------+------+------+------+------+------+------+------+------+------+------+------|
     61  * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
     62  * `-----------------------------------------------------------------------------------'
     63  */
     64 [_COLEMAK] = LAYOUT_ortho_5x12(
     65   KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
     66   KC_TAB,  KC_Q,    KC_W,    KC_F,    KC_P,    KC_G,    KC_J,    KC_L,    KC_U,    KC_Y,    KC_SCLN, KC_DEL,
     67   KC_ESC,  KC_A,    KC_R,    KC_S,    KC_T,    KC_D,    KC_H,    KC_N,    KC_E,    KC_I,    KC_O,    KC_QUOT,
     68   KC_LSFT, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,    KC_K,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH, KC_ENT ,
     69   ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
     70 ),
     71 
     72 /* Dvorak
     73  * ,-----------------------------------------------------------------------------------.
     74  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
     75  * |------+------+------+------+------+------+------+------+------+------+------+------|
     76  * | Tab  |   "  |   ,  |   .  |   P  |   Y  |   F  |   G  |   C  |   R  |   L  | Del  |
     77  * |------+------+------+------+------+-------------+------+------+------+------+------|
     78  * | Esc  |   A  |   O  |   E  |   U  |   I  |   D  |   H  |   T  |   N  |   S  |  /   |
     79  * |------+------+------+------+------+------|------+------+------+------+------+------|
     80  * | Shift|   ;  |   Q  |   J  |   K  |   X  |   B  |   M  |   W  |   V  |   Z  |Enter |
     81  * |------+------+------+------+------+------+------+------+------+------+------+------|
     82  * |Adjust| Ctrl | Alt  | GUI  |Lower |Space |Space |Raise | Left | Down |  Up  |Right |
     83  * `-----------------------------------------------------------------------------------'
     84  */
     85 [_DVORAK] = LAYOUT_ortho_5x12(
     86   KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
     87   KC_TAB,  KC_QUOT, KC_COMM, KC_DOT,  KC_P,    KC_Y,    KC_F,    KC_G,    KC_C,    KC_R,    KC_L,    KC_DEL,
     88   KC_ESC,  KC_A,    KC_O,    KC_E,    KC_U,    KC_I,    KC_D,    KC_H,    KC_T,    KC_N,    KC_S,    KC_SLSH,
     89   KC_LSFT, KC_SCLN, KC_Q,    KC_J,    KC_K,    KC_X,    KC_B,    KC_M,    KC_W,    KC_V,    KC_Z,    KC_ENT ,
     90   ADJUST,  KC_LCTL, KC_LALT, KC_LGUI, LOWER,   KC_SPC,  KC_SPC,  RAISE,   KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT
     91 ),
     92 
     93 /* Lower
     94  * ,-----------------------------------------------------------------------------------.
     95  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Bksp |
     96  * |------+------+------+------+------+-------------+------+------+------+------+------|
     97  * |   ~  |   !  |   @  |   #  |   $  |   %  |   ^  |   &  |   *  |   (  |   )  | Del  |
     98  * |------+------+------+------+------+-------------+------+------+------+------+------|
     99  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   _  |   +  |     |    \  |  |   |
    100  * |------+------+------+------+------+------|------+------+------+------+------+------|
    101  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO ~ |ISO | | Home | End  |      |
    102  * |------+------+------+------+------+------+------+------+------+------+------+------|
    103  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
    104  * `-----------------------------------------------------------------------------------'
    105  */
    106 [_LOWER] = LAYOUT_ortho_5x12(
    107   KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
    108   KC_TILD, KC_EXLM, KC_AT,   KC_HASH, KC_DLR,  KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
    109   KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
    110   BL_STEP, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME,KC_END, _______,
    111   _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
    112 ),
    113 
    114 /* Raise
    115  * ,-----------------------------------------------------------------------------------.
    116  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Bksp |
    117  * |------+------+------+------+------+-------------+------+------+------+------+------|
    118  * |   `  |   1  |   2  |   3  |   4  |   5  |   6  |   7  |   8  |   9  |   0  | Del  |
    119  * |------+------+------+------+------+-------------+------+------+------+------+------|
    120  * | Del  |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |   -  |   =  |   [  |   ]  |  \   |
    121  * |------+------+------+------+------+------|------+------+------+------+------+------|
    122  * |      |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |ISO # |ISO / |Pg Up |Pg Dn |      |
    123  * |------+------+------+------+------+------+------+------+------+------+------+------|
    124  * |      |      |      |      |      |             |      | Next | Vol- | Vol+ | Play |
    125  * `-----------------------------------------------------------------------------------'
    126  */
    127 [_RAISE] = LAYOUT_ortho_5x12(
    128   KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_BSPC,
    129   KC_GRV,  KC_1,    KC_2,    KC_3,    KC_4,    KC_5,    KC_6,    KC_7,    KC_8,    KC_9,    KC_0,    KC_DEL,
    130   KC_DEL,  KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_MINS, KC_EQL,  KC_LBRC, KC_RBRC, KC_BSLS,
    131   _______, KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,  KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
    132   _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
    133 ),
    134 
    135 /* Adjust (Lower + Raise)
    136  * ,-----------------------------------------------------------------------------------.
    137  * |  F1  |  F2  |  F3  |  F4  |  F5  |  F6  |  F7  |  F8  |  F9  |  F10 |  F11 |  F12 |
    138  * |------+------+------+------+------+------+------+------+------+------+------+------|
    139  * |      | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn|      |  Del |
    140  * |------+------+------+------+------+-------------+------+------+------+------+------|
    141  * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
    142  * |------+------+------+------+------+------|------+------+------+------+------+------|
    143  * |      |      |      |      |      |      |      |      |      |      |      |      |
    144  * |------+------+------+------+------+------+------+------+------+------+------+------|
    145  * |      |      |      |      |      |             |      |      |      |      |      |
    146  * `-----------------------------------------------------------------------------------'
    147  */
    148 [_ADJUST] =  LAYOUT_ortho_5x12(
    149   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,  KC_F11,  KC_F12,
    150   _______, QK_BOOT, RM_TOGG, RM_NEXT, RM_HUED, RM_HUEU, RM_SATD, RM_SATU, RM_VALD, RM_VALU, _______, KC_DEL,
    151   _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______,
    152   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
    153   _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
    154 )
    155 
    156 
    157 };
    158 
    159 #ifdef AUDIO_ENABLE
    160 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
    161 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
    162 float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
    163 #endif
    164 
    165 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    166   switch (keycode) {
    167     case QWERTY:
    168       if (record->event.pressed) {
    169         #ifdef AUDIO_ENABLE
    170           PLAY_SONG(tone_qwerty);
    171         #endif
    172         set_single_persistent_default_layer(_QWERTY);
    173       }
    174       return false;
    175       break;
    176     case COLEMAK:
    177       if (record->event.pressed) {
    178         #ifdef AUDIO_ENABLE
    179           PLAY_SONG(tone_colemak);
    180         #endif
    181         set_single_persistent_default_layer(_COLEMAK);
    182       }
    183       return false;
    184       break;
    185     case DVORAK:
    186       if (record->event.pressed) {
    187         #ifdef AUDIO_ENABLE
    188           PLAY_SONG(tone_dvorak);
    189         #endif
    190         set_single_persistent_default_layer(_DVORAK);
    191       }
    192       return false;
    193       break;
    194     case LOWER:
    195       if (record->event.pressed) {
    196         layer_on(_LOWER);
    197         update_tri_layer(_LOWER, _RAISE, _ADJUST);
    198       } else {
    199         layer_off(_LOWER);
    200         update_tri_layer(_LOWER, _RAISE, _ADJUST);
    201       }
    202       return false;
    203       break;
    204     case RAISE:
    205       if (record->event.pressed) {
    206         layer_on(_RAISE);
    207         update_tri_layer(_LOWER, _RAISE, _ADJUST);
    208       } else {
    209         layer_off(_RAISE);
    210         update_tri_layer(_LOWER, _RAISE, _ADJUST);
    211       }
    212       return false;
    213       break;
    214     case ADJUST:
    215       if (record->event.pressed) {
    216         layer_on(_ADJUST);
    217       } else {
    218         layer_off(_ADJUST);
    219       }
    220       return false;
    221       break;
    222   }
    223   return true;
    224 }
    225 
    226 #ifdef ENCODER_MAP_ENABLE
    227 const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
    228     [_QWERTY] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
    229     [_COLEMAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
    230     [_DVORAK] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGUP, KC_PGDN) },
    231     [_LOWER] = { ENCODER_CCW_CW(RM_NEXT, RM_PREV), ENCODER_CCW_CW(KC_MNXT, KC_MPRV) },
    232     [_RAISE] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) },
    233     [_ADJUST] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }
    234 };
    235 #endif