qmk_firmware

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

keymap.c (23172B)


      1 /* Copyright 2020 Thys de Wet
      2  *
      3  * This program is free software: you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License as published by
      5  * the Free Software Foundation, either version 2 of the License, or
      6  * (at your option) any later version.
      7  *
      8  * This program is distributed in the hope that it will be useful,
      9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11  * GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15  */
     16 #include QMK_KEYBOARD_H
     17 
     18 //This keymap is HEAVILY inspired by sofle
     19 
     20 enum grandiceps_layers {
     21     _QWERTY,
     22     _COLEMAK,
     23     _LOWER,
     24     _RAISE,
     25     _ADJUST,
     26 };
     27 
     28 enum custom_keycodes {
     29     KC_LOWER = SAFE_RANGE,
     30     KC_RAISE,
     31     KC_ADJUST,
     32     KC_PRVWD,
     33     KC_NXTWD,
     34     KC_LSTRT,
     35     KC_LEND,
     36     KC_DLINE,
     37     KC_TEAMS
     38 };
     39 
     40 #define KC_QWERTY PDF(_QWERTY)
     41 #define KC_COLEMAK PDF(_COLEMAK)
     42 
     43 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
     44 /*
     45  * QWERTY
     46  * ,-----------------------------------------.                    ,-----------------------------------------.
     47  * |  ESC  |   1  |   2  |   3  |   4  |   5  |                    |   6  |   7  |   8  |   9  |   0  |  -   |
     48  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     49  * | DEL  |   Q  |   W  |   E  |   R  |   T  |                    |   Y  |   U  |   I  |   O  |   P  | Bspc |
     50  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     51  * | Tab  |   A  |   S  |   D  |   F  |   G  |-------.    ,-------|   H  |   J  |   K  |   L  |   ;  |  '   |
     52  * |------+------+------+------+------+------|       |    |       |------+------+------+------+------+------|
     53  * |LShift|   Z  |   X  |   C  |   V  |   B  |-------|    |-------|   N  |   M  |   ,  |   .  |   /  |RShift|
     54  * `-----------------------------------------/       /     \      \-----------------------------------------'
     55  *            | LGUI | LAlt | LCTR |LOWER | /Space  /       \Enter \  |RAISE | RCTR | RAlt | RGUI |
     56  *            |      |      |      |      |/       /         \      \ |      |      |      |      |
     57  *            `----------------------------------'           '------''---------------------------'
     58  */
     59 
     60 [_QWERTY] = LAYOUT(
     61   KC_ESC,   KC_1,   KC_2,    KC_3,    KC_4,    KC_5,                     KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_MINS,
     62   KC_DEL,   KC_Q,   KC_W,    KC_E,    KC_R,    KC_T,                     KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,  KC_BSPC,
     63   KC_TAB,   KC_A,   KC_S,    KC_D,    KC_F,    KC_G,                     KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,  KC_QUOT,
     64   KC_LSFT,  KC_Z,   KC_X,    KC_C,    KC_V,    KC_B, KC_MUTE,     KC_TEAMS,KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,  KC_RSFT,
     65                  KC_LGUI,KC_LALT,KC_LCTL, KC_LOWER, KC_SPC,      KC_ENT,  KC_RAISE, KC_RCTL, KC_RALT, KC_RGUI
     66 ),
     67 /*
     68  * COLEMAK
     69  * ,-----------------------------------------.                    ,-----------------------------------------.
     70  * |  `   |   1  |   2  |   3  |   4  |   5  |                    |   6  |   7  |   8  |   9  |   0  |  `   |
     71  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     72  * | ESC  |   Q  |   W  |   F  |   P  |   G  |                    |   J  |   L  |   U  |   Y  |   ;  | Bspc |
     73  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     74  * | TAB  |   A  |   R  |   S  |   T  |   D  |-------.    ,-------|   H  |   N  |   E  |   I  |   O  |  '   |
     75  * |------+------+------+------+------+------|  MUTE |    |       |------+------+------+------+------+------|
     76  * |LShift|   Z  |   X  |   C  |   V  |   B  |-------|    |-------|   K  |   M  |   ,  |   .  |   /  |RShift|
     77  * `-----------------------------------------/       /     \      \-----------------------------------------'
     78  *            | LGUI | LAlt | LCTR |LOWER | /Enter  /       \Space \  |RAISE | RCTR | RAlt | RGUI |
     79  *            |      |      |      |      |/       /         \      \ |      |      |      |      |
     80  *            `----------------------------------'           '------''---------------------------'
     81  */
     82 
     83 [_COLEMAK] = LAYOUT(
     84   KC_GRV,   KC_1,   KC_2,    KC_3,    KC_4,    KC_5,                      KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_GRV,
     85   KC_ESC,   KC_Q,   KC_W,    KC_F,    KC_P,    KC_G,                      KC_J,    KC_L,    KC_U,    KC_Y, KC_SCLN,  KC_BSPC,
     86   KC_TAB,   KC_A,   KC_R,    KC_S,    KC_T,    KC_D,                      KC_H,    KC_N,    KC_E,    KC_I,    KC_O,  KC_QUOT,
     87   KC_LSFT,  KC_Z,   KC_X,    KC_C,    KC_V,    KC_B, KC_MUTE,      XXXXXXX,KC_K,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,  KC_RSFT,
     88                  KC_LGUI,KC_LALT,KC_LCTL,KC_LOWER, KC_ENT,      KC_SPC,  KC_RAISE, KC_RCTL, KC_RALT, KC_RGUI
     89 ),
     90 /* LOWER
     91  * ,-----------------------------------------.                    ,-----------------------------------------.
     92  * |      |  F1  |  F2  |  F3  |  F4  |  F5  |                    |  F6  |  F7  |  F8  |  F9  | F10  | F11  |
     93  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     94  * |  `   |   1  |   2  |   3  |   4  |   5  |                    |   6  |   7  |   8  |   9  |   0  | F12  |
     95  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
     96  * | Tab  |   !  |   @  |   #  |   $  |   %  |-------.    ,-------|   ^  |   &  |   *  |   (  |   )  |   |  |
     97  * |------+------+------+------+------+------|  MUTE |    |       |------+------+------+------+------+------|
     98  * | Shift|  =   |  -   |  +   |   {  |   }  |-------|    |-------|   [  |   ]  |   ;  |   :  |   \  | Shift|
     99  * `-----------------------------------------/       /     \      \-----------------------------------------'
    100  *            | LGUI | LAlt | LCTR |LOWER | /Enter  /       \Space \  |RAISE | RCTR | RAlt | RGUI |
    101  *            |      |      |      |      |/       /         \      \ |      |      |      |      |
    102  *            `----------------------------------'           '------''---------------------------'
    103  */
    104 [_LOWER] = LAYOUT(
    105   _______,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                       KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,
    106   KC_GRV,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                        KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_NUBS,
    107   _______, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                       KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
    108   _______,  KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______,       _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______,
    109                        _______, _______, _______, _______, _______,       _______, _______, _______, _______, _______
    110 ),
    111 /* RAISE
    112  * ,----------------------------------------.                    ,-----------------------------------------.
    113  * |      |      |      |      |      |      |                    |      |      |      |      |      |      |
    114  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
    115  * | Esc  | Ins  | Pscr | Menu |      |      |                    |      | PWrd |  Up  | NWrd | DLine| Bspc |
    116  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
    117  * | Tab  | LAt  | LCtl |LShift|      | Caps |-------.    ,-------|      | Left | Down | Rigth|  Del | Bspc |
    118  * |------+------+------+------+------+------|  MUTE  |    |       |------+------+------+------+------+------|
    119  * |Shift | Undo |  Cut | Copy | Paste|      |-------|    |-------|      | LStr |      | LEnd |      | Shift|
    120  * `-----------------------------------------/       /     \      \-----------------------------------------'
    121  *            | LGUI | LAlt | LCTR |LOWER | /Enter  /       \Space \  |RAISE | RCTR | RAlt | RGUI |
    122  *            |      |      |      |      |/       /         \      \ |      |      |      |      |
    123  *            `----------------------------------'           '------''---------------------------'
    124  */
    125 [_RAISE] = LAYOUT(
    126   _______, _______ , _______ , _______ , _______ , _______,                           _______,  _______  , _______,  _______ ,  _______ ,_______,
    127   _______, KC_INS,   KC_PSCR, KC_APP,   XXXXXXX,   XXXXXXX,                           KC_PGUP, KC_PRVWD,   KC_UP,   KC_NXTWD,   KC_DLINE, KC_BSPC,
    128   _______, KC_LALT,  KC_LCTL, KC_LSFT,  XXXXXXX,   KC_CAPS,                           KC_PGDN, KC_LEFT,    KC_DOWN, KC_RGHT,    KC_DEL,   KC_BSPC,
    129   _______, KC_UNDO,  KC_CUT,  KC_COPY,  KC_PASTE,  XXXXXXX,  _______,       _______,  XXXXXXX, KC_LSTRT,   XXXXXXX, KC_LEND,    XXXXXXX, _______,
    130                          _______, _______, _______, _______, _______,       _______, _______, _______, _______, _______
    131 ),
    132 /* ADJUST
    133  * ,-----------------------------------------.                    ,-----------------------------------------.
    134  * |      |      |      |      |      |      |                    |      |      |      |      |      |      |
    135  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
    136  * | QK_BOOT|      |QWERTY|COLEMAK|      |      |                    |      |      |      |      |      |      |
    137  * |------+------+------+------+------+------|                    |------+------+------+------+------+------|
    138  * |      |      |MACWIN|      |      |      |-------.    ,-------|      | VOLDO| MUTE | VOLUP|      |      |
    139  * |------+------+------+------+------+------|  MUTE |    |       |------+------+------+------+------+------|
    140  * |      |      |      |      |      |      |-------|    |-------|      | PREV | PLAY | NEXT |      |      |
    141  * `-----------------------------------------/       /     \      \-----------------------------------------'
    142  *            | LGUI | LAlt | LCTR |LOWER | /Enter  /       \Space \  |RAISE | RCTR | RAlt | RGUI |
    143  *            |      |      |      |      |/       /         \      \ |      |      |      |      |
    144  *            `----------------------------------'           '------''---------------------------'
    145  */
    146   [_ADJUST] = LAYOUT(
    147   XXXXXXX , XXXXXXX,  XXXXXXX,  XXXXXXX,   XXXXXXX, XXXXXXX,                    UG_NEXT,  UG_VALU, UG_SATU, UG_HUEU, XXXXXXX, UG_TOGG,
    148   QK_BOOT  ,  XXXXXXX,  KC_QWERTY,KC_COLEMAK,CG_TOGG, XXXXXXX,                    UG_PREV,  UG_VALD, UG_SATD, UG_HUED, XXXXXXX, XXXXXXX,
    149   XXXXXXX , XXXXXXX,  CG_TOGG,  XXXXXXX,   XXXXXXX, XXXXXXX,                    XXXXXXX,  KC_VOLD, KC_MUTE, KC_VOLU, XXXXXXX, XXXXXXX,
    150   XXXXXXX , XXXXXXX,  XXXXXXX,  XXXXXXX,   XXXXXXX, XXXXXXX, XXXXXXX,  XXXXXXX, XXXXXXX,  KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
    151             _______, _______, _______,          _______, _______,         _______, _______,        _______, _______, _______
    152   )
    153 };
    154 
    155 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    156     switch (keycode) {
    157         case KC_LOWER:
    158             if (record->event.pressed) {
    159                 layer_on(_LOWER);
    160                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
    161             } else {
    162                 layer_off(_LOWER);
    163                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
    164             }
    165             return false;
    166         case KC_RAISE:
    167             if (record->event.pressed) {
    168                 layer_on(_RAISE);
    169                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
    170             } else {
    171                 layer_off(_RAISE);
    172                 update_tri_layer(_LOWER, _RAISE, _ADJUST);
    173             }
    174             return false;
    175         case KC_ADJUST:
    176             if (record->event.pressed) {
    177                 layer_on(_ADJUST);
    178             } else {
    179                 layer_off(_ADJUST);
    180             }
    181             return false;
    182         case KC_PRVWD:
    183             if (record->event.pressed) {
    184                 if (keymap_config.swap_lctl_lgui) {
    185                     register_mods(mod_config(MOD_LALT));
    186                     register_code(KC_LEFT);
    187                 } else {
    188                     register_mods(mod_config(MOD_LCTL));
    189                     register_code(KC_LEFT);
    190                 }
    191             } else {
    192                 if (keymap_config.swap_lctl_lgui) {
    193                     unregister_mods(mod_config(MOD_LALT));
    194                     unregister_code(KC_LEFT);
    195                 } else {
    196                     unregister_mods(mod_config(MOD_LCTL));
    197                     unregister_code(KC_LEFT);
    198                 }
    199             }
    200             break;
    201         case KC_NXTWD:
    202              if (record->event.pressed) {
    203                 if (keymap_config.swap_lctl_lgui) {
    204                     register_mods(mod_config(MOD_LALT));
    205                     register_code(KC_RIGHT);
    206                 } else {
    207                     register_mods(mod_config(MOD_LCTL));
    208                     register_code(KC_RIGHT);
    209                 }
    210             } else {
    211                 if (keymap_config.swap_lctl_lgui) {
    212                     unregister_mods(mod_config(MOD_LALT));
    213                     unregister_code(KC_RIGHT);
    214                 } else {
    215                     unregister_mods(mod_config(MOD_LCTL));
    216                     unregister_code(KC_RIGHT);
    217                 }
    218             }
    219             break;
    220         case KC_LSTRT:
    221             if (record->event.pressed) {
    222                 if (keymap_config.swap_lctl_lgui) {
    223                      //CMD-arrow on Mac, but we have CTL and GUI swapped
    224                     register_mods(mod_config(MOD_LCTL));
    225                     register_code(KC_LEFT);
    226                 } else {
    227                     register_code(KC_HOME);
    228                 }
    229             } else {
    230                 if (keymap_config.swap_lctl_lgui) {
    231                     unregister_mods(mod_config(MOD_LCTL));
    232                     unregister_code(KC_LEFT);
    233                 } else {
    234                     unregister_code(KC_HOME);
    235                 }
    236             }
    237             break;
    238         case KC_LEND:
    239             if (record->event.pressed) {
    240                 if (keymap_config.swap_lctl_lgui) {
    241                     //CMD-arrow on Mac, but we have CTL and GUI swapped
    242                     register_mods(mod_config(MOD_LCTL));
    243                     register_code(KC_RIGHT);
    244                 } else {
    245                     register_code(KC_END);
    246                 }
    247             } else {
    248                 if (keymap_config.swap_lctl_lgui) {
    249                     unregister_mods(mod_config(MOD_LCTL));
    250                     unregister_code(KC_RIGHT);
    251                 } else {
    252                     unregister_code(KC_END);
    253                 }
    254             }
    255             break;
    256         case KC_DLINE:
    257             if (record->event.pressed) {
    258                 register_mods(mod_config(MOD_LCTL));
    259                 register_code(KC_BSPC);
    260             } else {
    261                 unregister_mods(mod_config(MOD_LCTL));
    262                 unregister_code(KC_BSPC);
    263             }
    264             break;
    265         case KC_COPY:
    266             if (record->event.pressed) {
    267                 register_mods(mod_config(MOD_LCTL));
    268                 register_code(KC_C);
    269             } else {
    270                 unregister_mods(mod_config(MOD_LCTL));
    271                 unregister_code(KC_C);
    272             }
    273             return false;
    274         case KC_PASTE:
    275             if (record->event.pressed) {
    276                 register_mods(mod_config(MOD_LCTL));
    277                 register_code(KC_V);
    278             } else {
    279                 unregister_mods(mod_config(MOD_LCTL));
    280                 unregister_code(KC_V);
    281             }
    282             return false;
    283         case KC_CUT:
    284             if (record->event.pressed) {
    285                 register_mods(mod_config(MOD_LCTL));
    286                 register_code(KC_X);
    287             } else {
    288                 unregister_mods(mod_config(MOD_LCTL));
    289                 unregister_code(KC_X);
    290             }
    291             return false;
    292             break;
    293         case KC_UNDO:
    294             if (record->event.pressed) {
    295                 register_mods(mod_config(MOD_LCTL));
    296                 register_code(KC_Z);
    297             } else {
    298                 unregister_mods(mod_config(MOD_LCTL));
    299                 unregister_code(KC_Z);
    300             }
    301             return false;
    302 
    303         case KC_TEAMS:
    304          if (record->event.pressed) {
    305               register_mods(mod_config(MOD_LCTL));
    306               register_mods(mod_config(MOD_LSFT));
    307               register_code(KC_M);
    308           } else {
    309               unregister_mods(mod_config(MOD_LCTL));
    310               unregister_mods(mod_config(MOD_LSFT));
    311               unregister_code(KC_M);
    312           }
    313           return false;
    314     }
    315     return true;
    316 }
    317 
    318 #ifdef OLED_ENABLE
    319 static void render_logo(void) {
    320   static const char PROGMEM my_logo[] = {
    321     // 'protea', 128x32px
    322   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    323   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    324   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    325   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    326   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x38, 0x1c, 0x0c, 0x06, 0x82, 0x80, 0xc0, 0xc0,
    327   0x40, 0x00, 0x80, 0x90, 0xd0, 0xd8, 0xc8, 0xc8, 0x44, 0x44, 0x00, 0x88, 0xb8, 0xb8, 0xd8, 0xd8,
    328   0xc0, 0xc0, 0x80, 0x20, 0x60, 0x60, 0x50, 0xd0, 0xb0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    329   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    330   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    331   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
    332   0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x30, 0x30,
    333   0x30, 0x30, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
    334   0x20, 0x20, 0x20, 0x20, 0x20, 0x08, 0x07, 0x01, 0x90, 0x90, 0x90, 0x99, 0x99, 0x90, 0x84, 0x22,
    335   0x6b, 0xe9, 0xf5, 0xf5, 0xf5, 0xe5, 0xc5, 0x10, 0x1e, 0x1e, 0x4e, 0x60, 0xf1, 0xf9, 0xf9, 0xf9,
    336   0xf8, 0x78, 0x7a, 0x7b, 0x33, 0x37, 0xc6, 0xee, 0xcc, 0x19, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00,
    337   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    338   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    339   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    340   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    341   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    342   0x00, 0x01, 0x02, 0x0c, 0x30, 0xc0, 0x80, 0x00, 0x06, 0x0c, 0x18, 0x31, 0x71, 0x61, 0x69, 0x40,
    343   0x42, 0x86, 0x0d, 0x1d, 0x19, 0x39, 0x31, 0x76, 0x67, 0x6f, 0x4f, 0x0f, 0x0e, 0xce, 0xc0, 0xc0,
    344   0xd2, 0xd6, 0xd7, 0xb7, 0x37, 0x3b, 0xda, 0xc0, 0xcb, 0x08, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00,
    345   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    346   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    347   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    348   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    349   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    350   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x06, 0x0e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00,
    351   0x0e, 0x1c, 0x38, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x06, 0x04, 0x05, 0x01,
    352   0x01, 0x01, 0x01, 0x05, 0x04, 0x06, 0x06, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    353   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    354   };
    355 
    356   oled_write_raw_P(my_logo, sizeof(my_logo));
    357 }
    358 
    359 static void print_status_narrow(void) {
    360     // Print current mode
    361     oled_write_P(PSTR("\n\n"), false);
    362     oled_write_ln_P(PSTR("MODE"), false);
    363     oled_write_ln_P(PSTR("\n"), false);
    364     if (keymap_config.swap_lctl_lgui) {
    365         oled_write_ln_P(PSTR("MAC\n"), false);
    366     } else {
    367         oled_write_ln_P(PSTR("WIN\n"), false);
    368     }
    369 
    370     switch (get_highest_layer(default_layer_state)) {
    371         case _QWERTY:
    372             oled_write_ln_P(PSTR("Qwrt"), false);
    373             break;
    374         case _COLEMAK:
    375             oled_write_ln_P(PSTR("Clmk"), false);
    376             break;
    377         default:
    378             oled_write_P(PSTR("Undef"), false);
    379     }
    380     oled_write_P(PSTR("\n\n"), false);
    381     // Print current layer
    382     oled_write_ln_P(PSTR("LAYER"), false);
    383     switch (get_highest_layer(layer_state)) {
    384         case _COLEMAK:
    385         case _QWERTY:
    386             oled_write_P(PSTR("Base\n"), false);
    387             break;
    388         case _RAISE:
    389             oled_write_P(PSTR("Raise"), false);
    390             break;
    391         case _LOWER:
    392             oled_write_P(PSTR("Lower"), false);
    393             break;
    394         case _ADJUST:
    395             oled_write_P(PSTR("Adj\n"), false);
    396             break;
    397         default:
    398             oled_write_ln_P(PSTR("Undef"), false);
    399     }
    400     oled_write_P(PSTR("\n\n"), false);
    401     led_t led_usb_state = host_keyboard_led_state();
    402     oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
    403       oled_write_P(PSTR("\n\n"), false);
    404 }
    405 
    406 bool oled_task_user(void) {
    407     if (is_keyboard_master()) {
    408        print_status_narrow();
    409     } else {
    410         render_logo();
    411     }
    412     return false;
    413 }
    414 
    415 oled_rotation_t oled_init_user(oled_rotation_t rotation) {
    416     if (is_keyboard_master()) {
    417         return OLED_ROTATION_270;
    418     } else {
    419         return rotation;
    420     }
    421 }
    422 #endif
    423 
    424 #ifdef ENCODER_ENABLE
    425 bool encoder_update_user(uint8_t index, bool clockwise){
    426 
    427     if (index == 0) {
    428         switch (get_highest_layer(layer_state)) {
    429             case _QWERTY:
    430                 // Move whole words. Hold shift to select while moving.
    431                 if (clockwise) {
    432                     tap_code(KC_VOLU);
    433                 } else {
    434                     tap_code(KC_VOLD);
    435                 }
    436                 break;
    437             default:
    438                 // History scrubbing. For Adobe products, hold shift while moving
    439                 // backward to go forward instead.
    440                 if (clockwise) {
    441                     tap_code16(C(KC_Z));
    442                 } else {
    443                     tap_code16(C(KC_Y));
    444                 }
    445                 break;
    446         }
    447     } else if (index == 1) {
    448         switch (get_highest_layer(layer_state)) {
    449             case _QWERTY:
    450                 // Scrolling with PageUp and PgDn.
    451                 if (!clockwise) {
    452                     tap_code16(KC_PGDN);
    453                 } else {
    454                     tap_code16(KC_PGUP);
    455                 }
    456                 break;
    457             default:
    458                 if (clockwise) {
    459                     tap_code16(A(KC_TAB));
    460                 } else {
    461                     tap_code16(A(S(KC_TAB)));
    462                 }
    463                 break;
    464         }
    465     }
    466 
    467     return true;
    468 }
    469 #endif