You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

333 lines
18 KiB

/*
Copyright 2019 @foostan
Copyright 2020 Drashna Jaelre <@drashna>
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 <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "keymap_german.h"
enum custom_keycodes {
QWERTZ = SAFE_RANGE,
ADNW,
};
enum tapdance_codes {
TD_GREET = 0,
};
enum {_B_QWER, _B_ADNW, _NUM_R, _FUN_R, _MOUS_L, _NAV_L, _PUNC_R, _PUNC_L};
// For QWERTZ base layer
#define _GUI_A LGUI_T(DE_A)
#define _ALT_S LALT_T(DE_S)
#define _CTL_D LCTL_T(DE_D)
#define _SFT_F LSFT_T(DE_F)
#define _ALGR_X ALGR_T(DE_X)
#define _GUI_OE LGUI_T(DE_ODIA)
#define _ALT_L LALT_T(DE_L)
#define _CTL_K LCTL_T(DE_K)
#define _SFT_J LSFT_T(DE_J)
#define _ALGR_DT ALGR_T(DE_DOT)
// For ADNW base layer
#define _GUI_H LGUI_T(DE_H)
#define _ALT_A LALT_T(DE_A)
#define _CTL_E LCTL_T(DE_E)
#define _SFT_I LSFT_T(DE_I)
#define _ALGR_Q ALGR_T(DE_Q)
#define _GUI_S LGUI_T(DE_S)
#define _ALT_N LALT_T(DE_N)
#define _CTL_R LCTL_T(DE_R)
#define _SFT_T LSFT_T(DE_T)
#define _ALGR_V ALGR_T(DE_V)
#define _ALGR_M ALGR_T(DE_M)
// Layer mods
#define _FUN_ESC LT(_FUN_R, KC_ESC)
#define _SYM_SPC LT(_PUNC_R, KC_SPC)
#define _NUM_TAB LT(_NUM_R, KC_TAB)
#define _NAV_ENT LT(_NAV_L, KC_ENT)
#define _SYM_BSP LT(_PUNC_L, KC_BSPC)
#define _MS_DEL LT(_MOUS_L, KC_DEL)
#define _LSKIP C(KC_LEFT)
#define _RSKIP C(KC_RIGHT)
#define _CUT C(DE_X)
#define _COPY C(DE_C)
#define _PASTE C(DE_V)
#define _UNDO C(DE_Z)
#define _REDO C(DE_Y)
const uint16_t PROGMEM both_shift_is_caps[] = {_SFT_F, _SFT_J, COMBO_END};
const uint16_t PROGMEM thumb_mods_lock_mouse[] = {_FUN_ESC, _MS_DEL, COMBO_END};
combo_t key_combos[COMBO_COUNT] = {
COMBO(both_shift_is_caps, KC_CAPS),
COMBO(thumb_mods_lock_mouse, TG(_MOUS_L))
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_B_QWER] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
TD(TD_GREET), DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, DE_SS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_PLY1, _GUI_A, _ALT_S, _CTL_D, _SFT_F, DE_G, DE_H, _SFT_J, _CTL_K, _ALT_L, _GUI_OE, DE_ADIA,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_PLY2, DE_Y, _ALGR_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM,_ALGR_DT, DE_MINS, DE_UDIA,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_FUN_ESC, _SYM_SPC, _NUM_TAB, _NAV_ENT, _SYM_BSP, _MS_DEL
//`--------------------------' `--------------------------'
),
/*
// My custom layout named "KoyKay"
[_B_ADNW] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
TD(TD_GREET), DE_K, DE_DOT, DE_O, DE_COMM, DE_Y, DE_P, DE_D, DE_L, DE_M, DE_J, DE_SS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_PLY1, _GUI_H, _ALT_A, _CTL_E, _SFT_I, DE_U, DE_G, _SFT_T, _CTL_R, _ALT_N, _GUI_S, DE_F,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_PLY2, DE_Z, _ALGR_Q, DE_ADIA, DE_UDIA, DE_ODIA, DE_B, DE_C, DE_W, _ALGR_V, DE_X, DE_MINS,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_FUN_ESC, _SYM_SPC, _NUM_TAB, _NAV_ENT, _SYM_BSP, _MS_DEL
//`--------------------------' `--------------------------'
),
*/
// Generic KOY layout by ADNW - but "ß" and "Z" switched compared to original:
// K.O,Y VGCLßZ
// HAEIU DTRNSF
// XQÄÜÖ BPWMJ
[_B_ADNW] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
TD(TD_GREET), DE_K, DE_DOT, DE_O, DE_COMM, DE_Y, DE_V, DE_G, DE_C, DE_L, DE_Z, DE_SS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_PLY1, _GUI_H, _ALT_A, _CTL_E, _SFT_I, DE_U, DE_D, _SFT_T, _CTL_R, _ALT_N, _GUI_S, DE_F,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_PLY2, DE_X, _ALGR_Q, DE_ADIA, DE_UDIA, DE_ODIA, DE_B, DE_P, DE_W, _ALGR_M, DE_J, DE_MINS,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_FUN_ESC, _SYM_SPC, _NUM_TAB, _NAV_ENT, _SYM_BSP, _MS_DEL
//`--------------------------' `--------------------------'
),
[_NUM_R] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
XXXXXXX,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_DOT, DE_7, DE_8, DE_9, DE_LPRN, DE_RPRN,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX,KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, DE_COMM, DE_4, DE_5, DE_6, DE_PLUS, DE_ASTR,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX,XXXXXXX, KC_ALGR, XXXXXXX, XXXXXXX, XXXXXXX, DE_0, DE_1, DE_2, DE_3, DE_MINS, DE_SLSH,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, KC_BSPC, KC_DEL
//`--------------------------' `--------------------------'
),
[_FUN_R] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F12, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DF(_B_QWER), KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_APP, KC_F4, KC_F5, KC_F6, KC_F11, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DF(_B_ADNW), XXXXXXX, KC_ALGR, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F10, XXXXXXX,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
//`--------------------------' `--------------------------'
),
[_PUNC_R] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_ASTR, DE_LABK, DE_RABK, DE_SLSH, DE_BSLS, DE_SECT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX,KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, DE_PLUS, DE_EXLM, DE_QUES, DE_DQUO, DE_QUOT, DE_SCLN,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX,KC_ALGR, XXXXXXX, XXXXXXX, XXXXXXX, DE_EQL, DE_GRV, DE_ACUT, XXXXXXX, DE_DEG, DE_COLN,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
XXXXXXX, XXXXXXX, XXXXXXX, KC_ENT, KC_BSPC, KC_DEL
//`--------------------------' `--------------------------'
),
[_PUNC_L] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
DE_MICR, DE_AT, DE_EURO, DE_LCBR, DE_RCBR, DE_DLR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DE_MINS, DE_PIPE, DE_AMPR, DE_LPRN, DE_RPRN, DE_HASH, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DE_UNDS, DE_CIRC, DE_TILD, DE_LBRC, DE_RBRC, DE_PERC, XXXXXXX, XXXXXXX, XXXXXXX, KC_ALGR, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX
//`--------------------------' `--------------------------'
),
[_MOUS_L] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
DM_RSTP, KC_WH_L, KC_WH_U, KC_MS_U, KC_WH_D, KC_WH_R, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_REC1, KC_WBAK, KC_MS_L, KC_MS_D, KC_MS_R, KC_WFWD, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
DM_REC2, XXXXXXX, KC_WH_L, KC_WREF, KC_WH_R, XXXXXXX, XXXXXXX, XXXXXXX, KC_ACL0, KC_ALGR, KC_ACL2, XXXXXXX,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
_______, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, _______
//`--------------------------' `--------------------------'
),
[_NAV_L] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
XXXXXXX, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_PGDN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX, _LSKIP, KC_LEFT, KC_DOWN, KC_RGHT, _RSKIP, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, XXXXXXX,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
XXXXXXX, _REDO, _CUT, _COPY, _PASTE, _UNDO, XXXXXXX, XXXXXXX, XXXXXXX, KC_ALGR, XXXXXXX, XXXXXXX,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
KC_ESC, KC_SPC, KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX
//`--------------------------' `--------------------------'
)
};
bool _macro_is_recording = false;
void dynamic_macro_record_start_user(int8_t direction) {
_macro_is_recording = true;
}
void dynamic_macro_record_end_user(int8_t direction) {
_macro_is_recording = false;
}
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
if (!is_keyboard_master()) {
return OLED_ROTATION_180; // flips the display 180 degrees if offhand
}
return rotation;
}
void oled_render_layer_state(void) {
oled_write_P(PSTR("Layer: "), false);
switch (get_highest_layer(layer_state)) {
case _B_QWER:
case _B_ADNW:
if (get_highest_layer(default_layer_state) == _B_QWER) {
oled_write_ln_P(PSTR("QWERTZ"), false);
} else {
oled_write_ln_P(PSTR("ADNW-ish"), false);
}
break;
case _PUNC_L:
case _PUNC_R:
oled_write_ln_P(PSTR("Symbols"), false);
break;
case _NUM_R:
oled_write_ln_P(PSTR("Numbers"), false);
break;
case _FUN_R:
oled_write_ln_P(PSTR("F-Keys"), false);
break;
case _MOUS_L:
oled_write_ln_P(PSTR("Mouse"), false);
break;
case _NAV_L:
oled_write_ln_P(PSTR("Navigate"), false);
break;
}
}
void oled_render_empty_line(void) {
oled_write_ln_P(PSTR(""), false);
}
void render_keylock_status(uint8_t led_usb_state) {
led_t led_state = host_keyboard_led_state();
oled_write_P(PSTR("Lock: "), false);
oled_write_P(PSTR("N"), led_state.num_lock);
oled_write_P(PSTR(" "), false);
oled_write_P(PSTR("C"), led_state.caps_lock);
oled_write_P(PSTR(" "), false);
oled_write_ln_P(PSTR("S"), led_state.scroll_lock);
}
void render_bootmagic_status(bool status) {
/* Show Ctrl-Gui Swap options */
static const char PROGMEM logo[][2][3] = {
{{0x97, 0x98, 0}, {0xb7, 0xb8, 0}},
{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}},
};
if (status) {
oled_write_ln_P(logo[0][0], false);
oled_write_ln_P(logo[0][1], false);
} else {
oled_write_ln_P(logo[1][0], false);
oled_write_ln_P(logo[1][1], false);
}
}
void render_dyn_macro_is_recording(void) {
oled_write_P(PSTR("Macro rec: "), false);
if (_macro_is_recording) {
oled_write_ln_P(PSTR("ON "), false);
} else {
oled_write_ln_P(PSTR("OFF"), false);
}
}
void oled_render_logo(void) {
static const char PROGMEM cherry_logo[] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112,112,224, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0,224,248,252,252, 62, 30, 30, 30, 30, 30, 30, 30, 0, 0, 0,254,254,254,254,192,192,192,192,192,192,192,254,254,254,254, 0, 0, 0,254,254,254,254,142,142,142,142,142,142,142, 14, 14, 14, 0, 0, 0,254,254,254,254, 14, 14, 14, 14, 14, 14,158,254,252,252,240, 0, 0, 0,254,254,254,254, 14, 14, 14, 14, 14, 14,158,254,254,252,248, 0, 6, 14, 62,254,254,252,240,192,128,192,240,252,254,254, 62, 14, 6, 0, 0, 0, 0,224,240,248,248,252,252,252,255,249,240,206, 31,254,240,230,190,252,252,240,128, 0,
0, 0, 15, 63,127,127,248,240,240,240,240,240,240,240, 0, 0, 0,255,255,255,255, 3, 3, 3, 3, 3, 3, 3,255,255,255,255, 0, 0, 0,255,255,255,255,227,227,227,227,227,227,227,224,224,224, 0, 0, 0,255,255,255,255, 15, 15, 15, 15, 15, 15, 63,255,255,243,193, 0, 0, 0,255,255,255,255, 15, 15, 15, 15, 15, 15, 63,255,255,243,193, 0, 0, 0, 0, 0, 1, 7,255,255,255,255,255, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 7, 15, 31, 31, 31,159,223,223,207,231,243,248,243,247,231,207, 31, 31, 31, 63, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 7, 15, 15, 31, 31, 31, 15, 15, 7, 1, 0, 0, 0, 0, 0,
};
oled_write_raw_P(cherry_logo, sizeof(cherry_logo));
}
bool oled_task_user(void) {
if (is_keyboard_master()) {
oled_render_layer_state();
oled_render_empty_line();
render_keylock_status(host_keyboard_leds());
oled_set_cursor(0, 3);
render_dyn_macro_is_recording();
} else {
oled_render_logo();
}
return false;
}
void print_greeting (tap_dance_state_t *state, void *user_data) {
if (state->count == 1) {
SEND_STRING("Viele Gr");
tap_code(DE_UDIA);
tap_code(DE_SS);
SEND_STRING("e\nMax");
reset_tap_dance(state);
}
else if (state->count == 2) {
SEND_STRING("Best regards\n");
SEND_STRING("Max");
reset_tap_dance(state);
}
}
tap_dance_action_t tap_dance_actions[] = {
[TD_GREET] = ACTION_TAP_DANCE_FN(print_greeting),
};
#endif // OLED_DRIVER_ENABLE