arnaucube
arnaucube/configsPublic Self-hosted repository
configs/keymap.c
keymap.cRaw
  1/*
  2Copyright 2019 @foostan
  3Copyright 2020 Drashna Jaelre <@drashna>
  4
  5This program is free software: you can redistribute it and/or modify
  6it under the terms of the GNU General Public License as published by
  7the Free Software Foundation, either version 2 of the License, or
  8(at your option) any later version.
  9
 10This program is distributed in the hope that it will be useful,
 11but WITHOUT ANY WARRANTY; without even the implied warranty of
 12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13GNU General Public License for more details.
 14
 15You should have received a copy of the GNU General Public License
 16along with this program.  If not, see <http://www.gnu.org/licenses/>.
 17*/
 18
 19// INSTRUCTIONS
 20// install qmk: python3 -m pip install --user qmk (https://docs.qmk.fm/#/newbs_getting_started)
 21// clone repo https://github.com/qmk/qmk_firmware into ~/qmk_firmware
 22// copy this file into ~/qmk_firmware/keyboards/crkbd/keymaps/default/keymap.c
 23// copy qmk.ini into ~/
 24// compile the keymap:
 25// > qmk compile -kb crkbd -km default
 26// once keyboard connected, execute:
 27// > qmk flash
 28// or if previous doesn't work, use:
 29// > qmk flash -kb crkbd -km default
 30
 31#include QMK_KEYBOARD_H
 32
 33const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 34  [0] = LAYOUT_split_3x6_3(
 35  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 36       KC_TAB,    KC_Q,    KC_W,    KC_E,    KC_R,    KC_T,                         KC_Y,    KC_U,    KC_I,    KC_O,   KC_P,  KC_BSPC,
 37  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 38      KC_LCTL,    KC_A,    KC_S,    KC_D,    KC_F,    KC_G,                         KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN, KC_QUOT,
 39  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 40      KC_LSFT,    KC_Z,    KC_X,    KC_C,    KC_V,    KC_B,                         KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH, KC_RSFT,
 41  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 42                                          KC_LGUI,   MO(1),  KC_SPC,     KC_ENT,   MO(2), KC_RALT
 43                                      //`--------------------------'  `--------------------------'
 44
 45  ),
 46
 47  [1] = LAYOUT_split_3x6_3(
 48  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 49       KC_ESC,    KC_1,    KC_2,    KC_3,    KC_4,    KC_5,                         KC_6,    KC_7,    KC_8,    KC_9,    KC_0,  KC_DEL,
 50  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 51      KC_LCTL,KC_MUTE,KC_VOLD,KC_VOLU, XXXXXXX, XXXXXXX,                      KC_LEFT, KC_DOWN,   KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX,
 52  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 53      KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 54  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 55                                          KC_LGUI, _______,  KC_SPC,     KC_ENT,   MO(3), KC_RALT
 56                                      //`--------------------------'  `--------------------------'
 57  ),
 58
 59  [2] = LAYOUT_split_3x6_3(
 60  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 61       KC_ESC, KC_EXLM,   KC_AT, KC_HASH,  KC_DLR, KC_PERC,                      KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,  KC_DEL,
 62  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 63      KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_MINS,  KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,  KC_GRV,
 64  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 65      KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,                      KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD,
 66  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 67                                          KC_LGUI,   MO(3),  KC_SPC,     KC_ENT, _______, KC_RALT
 68                                      //`--------------------------'  `--------------------------'
 69  ),
 70
 71  [3] = LAYOUT_split_3x6_3(
 72  //,-----------------------------------------------------.                    ,-----------------------------------------------------.
 73        QK_RBT,   KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,                        KC_F6,   KC_F7,   KC_F8,   KC_F9,  KC_F10,  KC_F11,
 74  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 75      RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,  KC_F12,
 76  //|--------+--------+--------+--------+--------+--------|                    |--------+--------+--------+--------+--------+--------|
 77      RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX,                      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
 78  //|--------+--------+--------+--------+--------+--------+--------|  |--------+--------+--------+--------+--------+--------+--------|
 79                                          KC_LGUI, _______,  KC_SPC,     KC_ENT, _______, KC_RALT
 80                                      //`--------------------------'  `--------------------------'
 81  )
 82};
 83
 84#ifdef OLED_DRIVER_ENABLE
 85oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 86  if (!is_master) {
 87    return OLED_ROTATION_180;  // flips the display 180 degrees if offhand
 88  }
 89  return rotation;
 90}
 91
 92#define L_BASE 0
 93#define L_LOWER 2
 94#define L_RAISE 4
 95#define L_ADJUST 8
 96
 97void oled_render_layer_state(void) {
 98    oled_write_P(PSTR("Layer: "), false);
 99    switch (layer_state) {
100        case L_BASE:
101            oled_write_ln_P(PSTR("Default"), false);
102            break;
103        case L_LOWER:
104            oled_write_ln_P(PSTR("Lower"), false);
105            break;
106        case L_RAISE:
107            oled_write_ln_P(PSTR("Raise"), false);
108            break;
109        case L_ADJUST:
110        case L_ADJUST|L_LOWER:
111        case L_ADJUST|L_RAISE:
112        case L_ADJUST|L_LOWER|L_RAISE:
113            oled_write_ln_P(PSTR("Adjust"), false);
114            break;
115    }
116}
117
118
119char keylog_str[24] = {};
120
121const char code_to_name[60] = {
122    ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
123    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
124    'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
125    '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
126    'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
127    '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
128
129void set_keylog(uint16_t keycode, keyrecord_t *record) {
130  char name = ' ';
131    if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) ||
132        (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
133  if (keycode < 60) {
134    name = code_to_name[keycode];
135  }
136
137  // update keylog
138  snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
139           record->event.key.row, record->event.key.col,
140           keycode, name);
141}
142
143void oled_render_keylog(void) {
144    oled_write(keylog_str, false);
145}
146
147void render_bootmagic_status(bool status) {
148    /* Show Ctrl-Gui Swap options */
149    static const char PROGMEM logo[][2][3] = {
150        {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
151        {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
152    };
153    if (status) {
154        oled_write_ln_P(logo[0][0], false);
155        oled_write_ln_P(logo[0][1], false);
156    } else {
157        oled_write_ln_P(logo[1][0], false);
158        oled_write_ln_P(logo[1][1], false);
159    }
160}
161
162void oled_render_logo(void) {
163    static const char PROGMEM crkbd_logo[] = {
164        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
165        0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
166        0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
167        0};
168    oled_write_P(crkbd_logo, false);
169}
170
171void oled_task_user(void) {
172    if (is_master) {
173        oled_render_layer_state();
174        oled_render_keylog();
175    } else {
176        oled_render_logo();
177    }
178}
179
180bool process_record_user(uint16_t keycode, keyrecord_t *record) {
181  if (record->event.pressed) {
182    set_keylog(keycode, record);
183  }
184  return true;
185}
186#endif // OLED_DRIVER_ENABLE