/* Copyright 2022 HorrorTroll * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include QMK_KEYBOARD_H // OLED animation #include "./lib/bongocat/bongocat.h" // 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. enum layer_names { _BASE, _FN, _FN1, _FN2 }; // enum layer_keycodes { }; const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ │ 1 │ 2 │ 3 │ 4 │ │Ply│ │TO1│ ├───┼───┼───┼───┤ └───┘ └───┘ │ 5 │ 6 │ 7 │ 8 │ ├───┼───┼───┼───┤ │ 9 │ 0 │ ↑ │Ent│ ┌───┐ ├───┼───┼───┼───┤ │Mut│ │Fn2│ ← │ ↓ │ → │ └───┘ └───┴───┴───┴───┘ ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ │ ! │ @ │ # │ $ │ │ │ │ │ ├───┼───┼───┼───┤ └───┘ └───┘ │ % │ ^ │ & │ * │ ├───┼───┼───┼───┤ │ ( │ ) │ │ │ ┌───┐ ├───┼───┼───┼───┤ │ │ │ │ │ │ │ └───┘ └───┴───┴───┴───┘ */ /* Row: 0 1 2 3 4 */ [_BASE] = LAYOUT( KC_1, KC_2, KC_3, KC_4, KC_MPLY, KC_5, KC_6, KC_7, KC_8, TO(_FN), KC_9, KC_0, KC_UP, KC_ENT, KC_MUTE, MO(_FN2), KC_LEFT, KC_DOWN, KC_RIGHT ), /* ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ │ │ │ │ │ │ │ │ │ ├───┼───┼───┼───┤ └───┘ └───┘ │ │ │ │ │ ├───┼───┼───┼───┤ │ │ │ │ │ ┌───┐ ├───┼───┼───┼───┤ │ │ │ │ │ │ │ └───┘ └───┴───┴───┴───┘ */ /* Row: 0 1 2 3 4 */ [_FN] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_FN1), _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ │ │ │ │ │ │ │ │ │ ├───┼───┼───┼───┤ └───┘ └───┘ │ │ │ │ │ ├───┼───┼───┼───┤ │ │ │ │ │ ┌───┐ ├───┼───┼───┼───┤ │ │ │ │ │ │ │ └───┘ └───┴───┴───┴───┘ */ /* Row: 0 1 2 3 4 */ [_FN1] = LAYOUT( _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_FN2), _______, _______, _______, _______, _______, _______, _______, _______, _______ ), /* ┌───┬───┬───┬───┐ ┌───┐ ┌───┐ │Spi│Spd│ │ │ │ │ │TO0│ ├───┼───┼───┼───┤ └───┘ └───┘ │Sai│Sad│ │ │ ├───┼───┼───┼───┤ │Tog│Mod│Hui│ │ ┌───┐ ├───┼───┼───┼───┤ │ │ │ │Vai│Hud│Vad│ └───┘ └───┴───┴───┴───┘ */ /* Row: 0 1 2 3 4 */ [_FN2] = LAYOUT( RGB_SPI, RGB_SPD, _______, QK_BOOT, _______, RGB_SAI, RGB_SAD, _______, _______, TO(_BASE), RGB_TOG, RGB_MOD, RGB_HUI, _______, _______, _______, RGB_VAI, RGB_HUD, RGB_VAD ), }; #ifdef OLED_ENABLE bool oled_task_user(void) { led_t led_usb_state = host_keyboard_led_state(); render_bongocat(); oled_set_cursor(14, 0); // sets cursor to (column, row) using charactar spacing (4 rows on 128x32 screen, anything more will overflow back to the top) oled_write_P(PSTR("WPM:"), false); oled_write(get_u8_str(get_current_wpm(), '0'), false); // writes wpm on top right corner of string oled_set_cursor(17, 2); oled_write_P(led_usb_state.caps_lock ? PSTR("CAPS") : PSTR(" "), false); oled_set_cursor(17, 3); oled_write_P(led_usb_state.scroll_lock ? PSTR("SCRL") : PSTR(" "), false); return true; } #endif #ifdef ENCODER_MAP_ENABLE const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { [_BASE] = { ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(KC_PGDN, KC_PGUP), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, [_FN] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, [_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, }; #endif