From 599e6452230b9582251f065a5dcb0c136a4e7b3d Mon Sep 17 00:00:00 2001 From: CallMeMero Date: Wed, 1 Jan 2025 12:24:50 +0100 Subject: [PATCH] added keymaps for qwertz and started the colemak keymap --- callmemero_totem_colemak.uf2 | Bin 0 -> 83968 bytes callmemero_totem_qwertz.uf2 | Bin 0 -> 83968 bytes keyboards/callmemero/keymaps/totem/keymap.c | 2 +- .../callmemero/keymaps/totem_colemak/config.h | 33 ++ .../callmemero/keymaps/totem_colemak/keymap.c | 377 +++++++++++++++++ .../callmemero/keymaps/totem_colemak/rules.mk | 4 + .../callmemero/keymaps/totem_qwertz/config.h | 33 ++ .../callmemero/keymaps/totem_qwertz/keymap.c | 393 ++++++++++++++++++ .../callmemero/keymaps/totem_qwertz/rules.mk | 4 + 9 files changed, 845 insertions(+), 1 deletion(-) create mode 100644 callmemero_totem_colemak.uf2 create mode 100644 callmemero_totem_qwertz.uf2 create mode 100644 keyboards/callmemero/keymaps/totem_colemak/config.h create mode 100644 keyboards/callmemero/keymaps/totem_colemak/keymap.c create mode 100644 keyboards/callmemero/keymaps/totem_colemak/rules.mk create mode 100644 keyboards/callmemero/keymaps/totem_qwertz/config.h create mode 100644 keyboards/callmemero/keymaps/totem_qwertz/keymap.c create mode 100644 keyboards/callmemero/keymaps/totem_qwertz/rules.mk diff --git a/callmemero_totem_colemak.uf2 b/callmemero_totem_colemak.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..ed1aef94e9fe81685dfbcf97709e74452a6e761d GIT binary patch literal 83968 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 literal 0 HcmV?d00001 diff --git a/callmemero_totem_qwertz.uf2 b/callmemero_totem_qwertz.uf2 new file mode 100644 index 0000000000000000000000000000000000000000..42b71e9dc74aac50c5d7e5b26214b5b267e95559 GIT binary patch literal 83968 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

G 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 literal 0 HcmV?d00001 diff --git a/keyboards/callmemero/keymaps/totem/keymap.c b/keyboards/callmemero/keymaps/totem/keymap.c index f19b5ce9..412d52d3 100644 --- a/keyboards/callmemero/keymaps/totem/keymap.c +++ b/keyboards/callmemero/keymaps/totem/keymap.c @@ -257,7 +257,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ │ CTRL │ ALT │ CMD │ SHFT │ ││ │ LEFT │ DOWN │ RIGHT │ PGDN │ ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ - │ BACK │ │ │ MEH │ HYPR │ ││ │ ~ │ │ / │ │ FWD │ + │ │ │ │ MEH │ HYPR │ ││ │ ~ │ │ / │ │ │ └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ │ │ │ ││ ENT │ BSPC │ DEL │ └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ diff --git a/keyboards/callmemero/keymaps/totem_colemak/config.h b/keyboards/callmemero/keymaps/totem_colemak/config.h new file mode 100644 index 00000000..5b471c17 --- /dev/null +++ b/keyboards/callmemero/keymaps/totem_colemak/config.h @@ -0,0 +1,33 @@ +#pragma once + +/* The way how "handedness" is decided (which half is which), +see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness +for more options. +*/ + +#define MASTER_LEFT +// #define MASTER_RIGHT + +/* QMK */ +#define TAPPING_TERM 200 + +/* Miryoku, see https://sunaku.github.io/home-row-mods.html*/ +#define BILATERAL_COMBINATIONS_LIMIT_CHORD_TO_N_KEYS 4 /* GUI, Alt, Ctrl, Shift */ +#define BILATERAL_COMBINATIONS_DELAY_MODS_THAT_MATCH MOD_MASK_GUI +#define BILATERAL_COMBINATIONS_DELAY_MATCHED_MODS_BY 120 /* ms */ +#define BILATERAL_COMBINATIONS_ALLOW_CROSSOVER_AFTER 80 /* ms */ +#define BILATERAL_COMBINATIONS_ALLOW_SAMESIDED_AFTER 3000 /* ms */ +#define BILATERAL_COMBINATIONS_TYPING_STREAK_TIMEOUT 160 /* ms */ +#define BILATERAL_COMBINATIONS_TYPING_STREAK_MODMASK (~MOD_MASK_SHIFT) + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD +#define CAPS_WORD_INVERT_ON_SHIFT +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_TAPPING +//#define NO_MUSIC_MODE + +#define COMBO_COUNT 50 +#define COMBO_MUST_TAP_PER_COMBO diff --git a/keyboards/callmemero/keymaps/totem_colemak/keymap.c b/keyboards/callmemero/keymaps/totem_colemak/keymap.c new file mode 100644 index 00000000..05ebd528 --- /dev/null +++ b/keyboards/callmemero/keymaps/totem_colemak/keymap.c @@ -0,0 +1,377 @@ +/* + ▀▀▀▀▀ ▀▀▀▀▀ ▀▀█▀▀ + ▄▀▀▀▄ ▄ ▄▀▀▀▄ ▄ ▄▀▀▀▄ █ ▄▀▀▀▄ + █ █ █ █ █ █ █ █ █ █ █ + ▀▀▀ █ ▀▀▀ █ ▀▀▀ ▀ ▀▀▀ + █ ▄▄▄█▄▄▄ █ █ + ▀ █ █ █ █▄█ + ▀▀▀▀▀ █ █ █ ▀ ┌─┐┌─╴╷┌──┬─ + ▀ ▀ ▀ │ ┐├─╴│└─┐│ + └─┘└─╴╵╶─┘╵ +▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +*/ + +#include QMK_KEYBOARD_H +#include +#include "callmemero.h" + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ D E F I N I T I O N S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e l a y e r s │ +// └─────────────────────────────────────────────────┘ + +enum totem_layers { + _BASE, + _NAV, + _NUM, + _FUN, + _UTIL +}; + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e k e y c o d e s │ +// └─────────────────────────────────────────────────┘ + +enum custom_keycodes { + NAV = SAFE_RANGE, + NUM, + FUN, + UTIL +}; + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e m a c r o n a m e s │ +// └─────────────────────────────────────────────────┘ + +// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐ + +#define CTL_A MT(MOD_LCTL, KC_A) +#define ALT_R MT(MOD_LALT, KC_R) +#define GUI_S MT(MOD_LGUI, KC_S) +#define SHT_T MT(MOD_LSFT, KC_T) +#define HYP_V MT(MOD_HYPR, KC_V) +#define MEH_C MT(MOD_MEH, KC_C) + +// RIGHT HAND HOME ROW MODS ├───────────────────────────────────┐ + +#define SHT_N MT(MOD_RSFT, KC_N) +#define GUI_E MT(MOD_LGUI, KC_E) +#define ALT_I MT(MOD_LALT, KC_I) +#define CTL_O MT(MOD_LCTL, KC_O) +#define HYP_M MT(MOD_HYPR, KC_M) +#define MEH_COM MT(MOD_MEH, KC_COMM) + +// LAYER TAP KEYS ├───────────────────────────────────┐ + +#define NAV LT(_NAV, KC_SPACE) +#define NUM LT(_NUM, KC_BSPC) +#define FUN LT(_FUN, KC_DEL) +#define UTIL LT(_UTIL, KC_ESC) + +// OTHER KEY DEFINITIONS ├───────────────────────────────────┐ + +#define OS_SHT OSM(MOD_LSFT) + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e c o m b o s │ +// └─────────────────────────────────────────────────┘ + +// Left hand vertical combos +// Between top and home row +const uint16_t PROGMEM at_combo[] = {KC_W, ALT_R, COMBO_END}; +const uint16_t PROGMEM hash_combo[] = {KC_F, GUI_S, COMBO_END}; +const uint16_t PROGMEM dollar_combo[] = {KC_P, SHT_T, COMBO_END}; +const uint16_t PROGMEM perc_combo[] = {KC_G, KC_D, COMBO_END}; + +// Between home and bottom row +const uint16_t PROGMEM grave_combo[] = {ALT_R, KC_X, COMBO_END}; +const uint16_t PROGMEM bsls_combo[] = {GUI_S, MEH_C, COMBO_END}; +const uint16_t PROGMEM eql_combo[] = {SHT_T, HYP_V, COMBO_END}; +const uint16_t PROGMEM tilde_combo[] = {KC_D, KC_B, COMBO_END}; + +// horizontal combos +const uint16_t PROGMEM esc_combo[] = {ALT_R, SHT_T, COMBO_END}; +const uint16_t PROGMEM copy_combo[] = {KC_X, MEH_C, COMBO_END}; +const uint16_t PROGMEM paste_combo[] = {MEH_C, HYP_V, COMBO_END}; +const uint16_t PROGMEM cut_combo[] = {KC_X, HYP_V, COMBO_END}; + +// Right hand vertical combos +// Between top and home row +const uint16_t PROGMEM caret_combo[] = {KC_J, KC_H, COMBO_END}; +const uint16_t PROGMEM plus_combo[] = {KC_L, SHT_N, COMBO_END}; +const uint16_t PROGMEM star_combo[] = {KC_U, GUI_E, COMBO_END}; +const uint16_t PROGMEM amp_combo[] = {KC_Y, ALT_I, COMBO_END}; + +// Between home and bottow row +const uint16_t PROGMEM unds_combo[] = {KC_H, KC_K, COMBO_END}; +const uint16_t PROGMEM mins_combo[] = {SHT_N, HYP_M, COMBO_END}; +const uint16_t PROGMEM slsh_combo[] = {GUI_E, MEH_COM, COMBO_END}; +const uint16_t PROGMEM pipe_combo[] = {ALT_I, KC_DOT, COMBO_END}; + +// Horizontal combos: brackets +const uint16_t PROGMEM lsqr_combo[] = {KC_L, KC_U, COMBO_END}; +const uint16_t PROGMEM rsqr_combo[] = {KC_U, KC_Y, COMBO_END}; +const uint16_t PROGMEM lpar_combo[] = {SHT_N, GUI_E, COMBO_END}; +const uint16_t PROGMEM rpar_combo[] = {GUI_E, ALT_I, COMBO_END}; +const uint16_t PROGMEM lcbr_combo[] = {HYP_M, MEH_COM, COMBO_END}; +const uint16_t PROGMEM rcbr_combo[] = {MEH_COM, KC_DOT, COMBO_END}; + +// Vertical combos: Umlaute +const uint16_t PROGMEM ae_combo[] = {KC_P, KC_G, COMBO_END}; +const uint16_t PROGMEM oe_combo[] = {SHT_T, KC_D, COMBO_END}; +const uint16_t PROGMEM ue_combo[] = {HYP_V, KC_B, COMBO_END}; +const uint16_t PROGMEM sz_combo[] = {KC_J, KC_L, COMBO_END}; + +const uint16_t PROGMEM lt_combo[] = {KC_H, SHT_N, COMBO_END}; +const uint16_t PROGMEM gt_combo[] = {ALT_I, CTL_O, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + COMBO(at_combo, KC_AT), + COMBO(hash_combo, KC_HASH), + COMBO(dollar_combo, KC_DLR), + COMBO(perc_combo, KC_PERC), + COMBO(grave_combo, KC_GRV), + COMBO(bsls_combo, KC_BSLS), + COMBO(eql_combo, KC_EQL), + COMBO(tilde_combo, KC_TILD), + COMBO(esc_combo, KC_ESC), + COMBO(copy_combo, LCTL(KC_C)), + COMBO(paste_combo, LCTL(KC_V)), + COMBO(cut_combo, LCTL(KC_X)), + COMBO(caret_combo, KC_CIRC), + COMBO(plus_combo, KC_PLUS), + COMBO(star_combo, KC_ASTR), + COMBO(amp_combo, KC_AMPR), + COMBO(unds_combo, KC_UNDS), + COMBO(mins_combo, KC_MINS), + COMBO(slsh_combo, KC_SLSH), + COMBO(pipe_combo, KC_PIPE), + COMBO(lsqr_combo, KC_LBRC), + COMBO(rsqr_combo, KC_RBRC), + COMBO(lpar_combo, KC_LPRN), + COMBO(rpar_combo, KC_RPRN), + COMBO(lcbr_combo, KC_LCBR), + COMBO(rcbr_combo, KC_RCBR), + COMBO(ae_combo, RALT(KC_Q)), + COMBO(oe_combo, RALT(KC_P)), + COMBO(ue_combo, RALT(KC_Y)), + COMBO(lt_combo, KC_LT), + COMBO(gt_combo, KC_GT), + COMBO(sz_combo, RALT(KC_S)) +}; + + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e k e y o v e r r i d e s │ +// └─────────────────────────────────────────────────┘ + +// shift + ? = ! +const key_override_t quexclam_override = ko_make_basic(MOD_MASK_SHIFT, KC_QUES, KC_EXLM); + +// Override comma key: no mod = , | shift = ; | ctrl+shift = < +const key_override_t semicolon_override = + ko_make_with_layers_negmods_and_options( + MOD_MASK_SHIFT, // Trigger modifiers: shift + MEH_COM, // Trigger key: meh_comma hold tap key + KC_SCLN, // Replacement key: ; + ~0, // Activate on all layers + MOD_MASK_CA, // Do not activate when ctrl, alt or gui is pressed + ko_option_no_reregister_trigger); +const key_override_t lt_override = + ko_make_with_layers_negmods_and_options( + MOD_MASK_CS, // Trigger modifiers: ctrl+shift + MEH_COM, // Trigger key: meh_comma hold tap key + KC_LT, // Replacemeng key: < + ~0, // All layers + MOD_MASK_AG, // Do not activate when alt or gui is pressed + ko_option_no_reregister_trigger); + +// Override . key: no mod = . | shift = : | ctrl+shift = > +const key_override_t colon_override = + ko_make_with_layers_negmods_and_options( + MOD_MASK_SHIFT, // Trigger modifiers: shift + KC_DOT, // Trigger key: dot key + KC_COLN, // Replacement key: : + ~0, // Activate on all layers + MOD_MASK_CA, // Do not activate when ctrl or alt is pressed + ko_option_no_reregister_trigger); +const key_override_t gt_override = + ko_make_with_layers_negmods_and_options( + MOD_MASK_CS, // Trigger modifiers: ctrl+shift + KC_DOT, // Trigger key: dot key + KC_GT, // Replacemeng key: > + ~0, // All layers + MOD_MASK_AG, // Do not activate when alt or gui is pressed + ko_option_no_reregister_trigger); + +// This globally defines all key overrides to be used ├───────────┐ +const key_override_t *key_overrides[] = { + &quexclam_override, + &semicolon_override, + <_override, + &colon_override, + >_override +}; + + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ K E Y M A P S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + ┌─────────────────────────────────────────────────┐ + │ b a s e │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + ┄┈┈───═╡ Q │ W │ F │ P │ G ││ J │ L │ U │ Y │ ' │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ A │ R │ S │ T │ D ││ H │ N │ E │ I │ O │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ TAB │ Z │ X │ C │ V │ B ││ K │ M │ ,; │ .: │ ?! │ TAB │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ UTIL │ NAV │ SHIFT ││ ENT │ NUM │ FUN │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘*/ + + [_BASE] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, + CTL_A, ALT_R, GUI_S, SHT_T, KC_D, KC_H, SHT_N, GUI_E, ALT_I, CTL_O, + OS_SHT, KC_Z, KC_X, MEH_C, HYP_V, KC_B, KC_K, HYP_M, MEH_COM, KC_DOT, KC_QUES, KC_TAB, + UTIL, NAV, KC_TAB, KC_ENT, NUM, FUN + ), + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ n a v │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + ╌┄┈┈───═╡ │ │ │ │ ││ │ HOME │ UP │ END │ PGUP │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ CTRL │ ALT │ CMD │ SHFT │ ││ │ LEFT │ DOWN │ RIGHT │ PGDN │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ │ │ MEH │ HYPR │ ││ │ ~ │ │ / │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ ENT │ BSPC │ DEL │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_NAV] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + _______, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, + KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, + _______, _______, _______, KC_MEH, KC_HYPR, _______, _______, KC_TILD, _______, KC_SLSH, _______, _______, + _______, _______, _______, KC_ENT, KC_BSPC, KC_DEL + ), + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ n u m │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + ╌┄┈┈── ─═╡ + │ 7 │ 8 │ 9 │ * ││ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ 0 │ 4 │ 5 │ 6 │ = ││ │ SHFT │ CMD │ ALT │ CTRL │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ ( │ - │ 1 │ 2 │ 3 │ / ││ │ HYPR │ MEH │ │ │ ) │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ . │ : ││ │ │ │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_NUM] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_PLUS, KC_7, KC_8, KC_9, KC_ASTR, _______, _______, _______, _______, _______, + KC_0, KC_4, KC_5, KC_6, KC_EQL, _______, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, + KC_LPRN, KC_MINS, KC_1, KC_2, KC_3, KC_SLSH, _______, KC_HYPR, KC_MEH, _______, _______, KC_RPRN, + _______, KC_DOT, KC_SCLN, _______, _______, _______ + ), +/* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ f u n c t i o n │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + ╌┄┈ ┈───═╡ F12 │ F7 │ F8 │ F9 │ ││ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ F11 │ F4 │ F5 │ F6 │ ││ │ SHFT │ CMD │ ALT │ CTRL │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ F10 │ F1 │ F2 │ F3 │ ││ │ HYPR │ MEH │ │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ │ │ │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_FUN] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_F12, KC_F7, KC_F8, KC_F9, _______, _______, _______, _______, _______, _______, + KC_F11, KC_F4, KC_F5, KC_F6, _______, _______, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, + _______, KC_F10, KC_F1, KC_F2, KC_F3, _______, _______, KC_HYPR, KC_MEH, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), +/* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ u t i l i t y │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + ╌┄┈ ┈───═╡ BOOT │ │ │ │ ││ € │ <<<<< │ VOL+ │ >>>>> │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ │ │ │ │ ││ │ │ VOL- │ │ │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ │ │ │ │ ││ │ │ │ │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ │ │ MUTE │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_UTIL] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + QK_BOOT, _______, _______, _______, _______, RALT(KC_5), KC_MPRV, KC_VOLU, KC_MNXT, _______, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______, _______, _______, + _______, _______, _______, _______, _______, KC_MUTE + ) +}; + + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ M A C R O S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +// Make sure combos are always tapped and not held +bool get_combo_must_tap(uint16_t index, combo_t *combo) { + // If you want all combos to be tap-only, just uncomment the next line + return true; + +} + + +/* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + + ██████ + ██ ▄▄▄▄ + ██ ██▀▀██ + ▀▀ ██▄▄██ + ██████ ▀▀▀▀ + ██ ▄▄▄▄▄▄ + ██ ██▀▀▀▀ + ██ ██████ + ██▄▄▄▄ + ▀▀▀▀▀▀ + ████████ + ██ ██ ██ + ██ ██ ██ + ▀▀ ▀▀ ▀▀ + ████████ + +*/ diff --git a/keyboards/callmemero/keymaps/totem_colemak/rules.mk b/keyboards/callmemero/keymaps/totem_colemak/rules.mk new file mode 100644 index 00000000..061e9cff --- /dev/null +++ b/keyboards/callmemero/keymaps/totem_colemak/rules.mk @@ -0,0 +1,4 @@ +DYNAMIC_MACRO_ENABLE = yes +COMBO_ENABLE = yes +KEY_OVERRIDE_ENABLE = yes +CAPS_WORD_ENABLE = yes diff --git a/keyboards/callmemero/keymaps/totem_qwertz/config.h b/keyboards/callmemero/keymaps/totem_qwertz/config.h new file mode 100644 index 00000000..5b471c17 --- /dev/null +++ b/keyboards/callmemero/keymaps/totem_qwertz/config.h @@ -0,0 +1,33 @@ +#pragma once + +/* The way how "handedness" is decided (which half is which), +see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness +for more options. +*/ + +#define MASTER_LEFT +// #define MASTER_RIGHT + +/* QMK */ +#define TAPPING_TERM 200 + +/* Miryoku, see https://sunaku.github.io/home-row-mods.html*/ +#define BILATERAL_COMBINATIONS_LIMIT_CHORD_TO_N_KEYS 4 /* GUI, Alt, Ctrl, Shift */ +#define BILATERAL_COMBINATIONS_DELAY_MODS_THAT_MATCH MOD_MASK_GUI +#define BILATERAL_COMBINATIONS_DELAY_MATCHED_MODS_BY 120 /* ms */ +#define BILATERAL_COMBINATIONS_ALLOW_CROSSOVER_AFTER 80 /* ms */ +#define BILATERAL_COMBINATIONS_ALLOW_SAMESIDED_AFTER 3000 /* ms */ +#define BILATERAL_COMBINATIONS_TYPING_STREAK_TIMEOUT 160 /* ms */ +#define BILATERAL_COMBINATIONS_TYPING_STREAK_MODMASK (~MOD_MASK_SHIFT) + +#undef LOCKING_SUPPORT_ENABLE +#undef LOCKING_RESYNC_ENABLE + +#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD +#define CAPS_WORD_INVERT_ON_SHIFT +//#define NO_ACTION_ONESHOT +//#define NO_ACTION_TAPPING +//#define NO_MUSIC_MODE + +#define COMBO_COUNT 50 +#define COMBO_MUST_TAP_PER_COMBO diff --git a/keyboards/callmemero/keymaps/totem_qwertz/keymap.c b/keyboards/callmemero/keymaps/totem_qwertz/keymap.c new file mode 100644 index 00000000..327e4689 --- /dev/null +++ b/keyboards/callmemero/keymaps/totem_qwertz/keymap.c @@ -0,0 +1,393 @@ +/* + ▀▀▀▀▀ ▀▀▀▀▀ ▀▀█▀▀ + ▄▀▀▀▄ ▄ ▄▀▀▀▄ ▄ ▄▀▀▀▄ █ ▄▀▀▀▄ + █ █ █ █ █ █ █ █ █ █ █ + ▀▀▀ █ ▀▀▀ █ ▀▀▀ ▀ ▀▀▀ + █ ▄▄▄█▄▄▄ █ █ + ▀ █ █ █ █▄█ + ▀▀▀▀▀ █ █ █ ▀ ┌─┐┌─╴╷┌──┬─ + ▀ ▀ ▀ │ ┐├─╴│└─┐│ + └─┘└─╴╵╶─┘╵ +▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +*/ + +#include QMK_KEYBOARD_H +#include +#include "callmemero.h" + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ D E F I N I T I O N S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e q w e r t z m a p p i n g │ +// └─────────────────────────────────────────────────┘ + +#define QWERTZ_SINGLE_QUOTE S(KC_BSLS) // +#define QWERTZ_DOUBLE_QUOTE KC_AT // +#define QWERTZ_Z KC_Y // +#define QWERTZ_Y KC_Z // +#define QWERTZ_QUES KC_UNDS // +#define QWERTZ_EXLM KC_EXLM // +#define QWERTZ_AT RALT(KC_Q) // +#define QWERTZ_HASH KC_BSLS // +#define QWERTZ_TICK KC_EQL // ´ +#define QWERTZ_BSLS RALT(KC_MINS) // \/ +#define QWERTZ_EQL KC_RPRN // +#define QWERTZ_TILD RALT(KC_RBRC) // +#define QWERTZ_CIRC KC_GRV // +#define QWERTZ_PPLS KC_RBRC // +#define QWERTZ_ASTR S(KC_RBRC) // +#define QWERTZ_AMPR KC_CIRC // +#define QWERTZ_UNDS S(KC_SLSH) // +#define QWERTZ_MINS KC_SLSH // +#define QWERTZ_SLSH KC_AMPR // +#define QWERTZ_PIPE RALT(KC_NUBS) // +#define QWERTZ_LSQR RALT(KC_8) // +#define QWERTZ_RSQR RALT(KC_9) // +#define QWERTZ_LBRC KC_ASTR // +#define QWERTZ_RBRC KC_LPRN // +#define QWERTZ_LCBR RALT(KC_7) // +#define QWERTZ_RCBR RALT(KC_0) // +#define QWERTZ_AE KC_QUOT // +#define QWERTZ_OE KC_SCLN // +#define QWERTZ_UE KC_LBRC // +#define QWERTZ_LT KC_NUBS // +#define QWERTZ_GT S(KC_NUBS) // +#define QWERTZ_SZ KC_MINS // + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e l a y e r s │ +// └─────────────────────────────────────────────────┘ + +enum totem_layers { + _BASE, + _NAV, + _NUM, + _FUN, + _UTIL +}; + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e k e y c o d e s │ +// └─────────────────────────────────────────────────┘ + +enum custom_keycodes { + NAV = SAFE_RANGE, + NUM, + FUN, + UTIL +}; + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e m a c r o n a m e s │ +// └─────────────────────────────────────────────────┘ + +// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐ + +#define CTL_A MT(MOD_LCTL, KC_A) +#define ALT_S MT(MOD_LALT, KC_S) +#define GUI_D MT(MOD_LGUI, KC_D) +#define SHT_F MT(MOD_LSFT, KC_F) +#define HYP_V MT(MOD_HYPR, KC_V) +#define MEH_C MT(MOD_MEH, KC_C) + +// RIGHT HAND HOME ROW MODS ├───────────────────────────────────┐ + +#define SHT_J MT(MOD_RSFT, KC_J) +#define GUI_K MT(MOD_LGUI, KC_K) +#define ALT_L MT(MOD_LALT, KC_L) +#define CTL_P MT(MOD_LCTL, KC_P) +#define HYP_M MT(MOD_HYPR, KC_M) +#define MEH_COM MT(MOD_MEH, KC_COMM) + +// LAYER TAP KEYS ├───────────────────────────────────┐ + +#define NAV LT(_NAV, KC_SPACE) +#define NUM LT(_NUM, KC_BSPC) +#define FUN LT(_FUN, KC_DEL) +#define UTIL LT(_UTIL, KC_ESC) + +// OTHER KEY DEFINITIONS ├───────────────────────────────────┐ + +#define OS_SHT OSM(MOD_LSFT) + + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e c o m b o s │ +// └─────────────────────────────────────────────────┘ + +// Left hand vertical combos +// Between top and home row +const uint16_t PROGMEM at_combo[] = {KC_W, ALT_S, COMBO_END}; +const uint16_t PROGMEM hash_combo[] = {KC_E, GUI_D, COMBO_END}; +const uint16_t PROGMEM dollar_combo[] = {KC_R, SHT_F, COMBO_END}; +const uint16_t PROGMEM perc_combo[] = {KC_T, KC_G, COMBO_END}; + +// Between home and bottom row +const uint16_t PROGMEM tick_combo[] = {ALT_S, KC_X, COMBO_END}; +const uint16_t PROGMEM bsls_combo[] = {GUI_D, MEH_C, COMBO_END}; +const uint16_t PROGMEM eql_combo[] = {SHT_F, HYP_V, COMBO_END}; +const uint16_t PROGMEM tilde_combo[] = {KC_G, KC_B, COMBO_END}; + +// horizontal combos +const uint16_t PROGMEM copy_combo[] = {KC_X, MEH_C, COMBO_END}; +const uint16_t PROGMEM paste_combo[] = {MEH_C, HYP_V, COMBO_END}; +const uint16_t PROGMEM cut_combo[] = {KC_X, HYP_V, COMBO_END}; + +// Right hand vertical combos +// Between top and home row +const uint16_t PROGMEM caret_combo[] = {QWERTZ_Z, KC_H, COMBO_END}; +const uint16_t PROGMEM plus_combo[] = {KC_U, SHT_J, COMBO_END}; +const uint16_t PROGMEM star_combo[] = {KC_I, GUI_K, COMBO_END}; +const uint16_t PROGMEM amp_combo[] = {KC_O, ALT_L, COMBO_END}; + +// Between home and bottow row +const uint16_t PROGMEM unds_combo[] = {KC_H, KC_N, COMBO_END}; +const uint16_t PROGMEM mins_combo[] = {SHT_J, HYP_M, COMBO_END}; +const uint16_t PROGMEM slsh_combo[] = {GUI_K, MEH_COM, COMBO_END}; +const uint16_t PROGMEM pipe_combo[] = {ALT_L, KC_DOT, COMBO_END}; + +// Horizontal combos: brackets +const uint16_t PROGMEM lsqr_combo[] = {KC_U, KC_I, COMBO_END}; +const uint16_t PROGMEM rsqr_combo[] = {KC_I, KC_O, COMBO_END}; +const uint16_t PROGMEM lpar_combo[] = {SHT_J, GUI_K, COMBO_END}; +const uint16_t PROGMEM rpar_combo[] = {GUI_K, ALT_L, COMBO_END}; +const uint16_t PROGMEM lcbr_combo[] = {HYP_M, MEH_COM, COMBO_END}; +const uint16_t PROGMEM rcbr_combo[] = {MEH_COM, KC_DOT, COMBO_END}; + +// Vertical combos: Umlaute +const uint16_t PROGMEM ae_combo[] = {KC_R, KC_T, COMBO_END}; +const uint16_t PROGMEM oe_combo[] = {SHT_F, KC_G, COMBO_END}; +const uint16_t PROGMEM ue_combo[] = {HYP_V, KC_B, COMBO_END}; +const uint16_t PROGMEM sz_combo[] = {QWERTZ_Z, KC_U, COMBO_END}; + +const uint16_t PROGMEM lt_combo[] = {KC_H, SHT_J, COMBO_END}; +const uint16_t PROGMEM gt_combo[] = {ALT_L, CTL_P, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + COMBO(at_combo, QWERTZ_AT), + COMBO(hash_combo, QWERTZ_HASH), + COMBO(dollar_combo, KC_DLR), + COMBO(perc_combo, KC_PERC), + COMBO(tick_combo, QWERTZ_TICK), + COMBO(bsls_combo, QWERTZ_BSLS), + COMBO(eql_combo, QWERTZ_EQL), + COMBO(tilde_combo, QWERTZ_TILD), + COMBO(copy_combo, LCTL(KC_C)), + COMBO(paste_combo, LCTL(KC_V)), + COMBO(cut_combo, LCTL(KC_X)), + COMBO(caret_combo, QWERTZ_CIRC), + COMBO(plus_combo, QWERTZ_PPLS), + COMBO(star_combo, QWERTZ_ASTR), + COMBO(amp_combo, QWERTZ_AMPR), + COMBO(unds_combo, QWERTZ_UNDS), + COMBO(mins_combo, QWERTZ_MINS), + COMBO(slsh_combo, QWERTZ_SLSH), + COMBO(pipe_combo, QWERTZ_PIPE), + COMBO(lsqr_combo, QWERTZ_LSQR), + COMBO(rsqr_combo, QWERTZ_RSQR), + COMBO(lpar_combo, QWERTZ_LBRC), + COMBO(rpar_combo, QWERTZ_RBRC), + COMBO(lcbr_combo, QWERTZ_LCBR), + COMBO(rcbr_combo, QWERTZ_RCBR), + COMBO(ae_combo, QWERTZ_AE), + COMBO(oe_combo, QWERTZ_OE), + COMBO(ue_combo, QWERTZ_UE), + COMBO(lt_combo, QWERTZ_LT), + COMBO(gt_combo, QWERTZ_GT), + COMBO(sz_combo, QWERTZ_SZ) +}; + +// ┌─────────────────────────────────────────────────┐ +// │ d e f i n e k e y o v e r r i d e s │ +// └─────────────────────────────────────────────────┘ + +// shift + ? = ! +const key_override_t quexclam_override = + ko_make_with_layers_negmods_and_options( + MOD_MASK_SHIFT, // Trigger modifiers: shift + QWERTZ_QUES, // Trigger key: + QWERTZ_EXLM, // Replacement key: + ~0, // Activate on all layers + MOD_MASK_CA, // Do not activate when ctrl, alt or gui is pressed + ko_option_no_reregister_trigger); + +// Override quote key: no mod = ' | shift = " +const key_override_t quote_override = + ko_make_with_layers_negmods_and_options( + MOD_MASK_SHIFT, // Trigger modifiers: shift + QWERTZ_SINGLE_QUOTE, // Trigger key: + QWERTZ_DOUBLE_QUOTE, // Replacement key: + ~0, // Activate on all layers + MOD_MASK_CA, // Do not activate when ctrl, alt or gui is pressed + ko_option_no_reregister_trigger); + +// This globally defines all key overrides to be used ├───────────┐ +const key_override_t *key_overrides[] = { + &quexclam_override, + "e_override +}; + + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ K E Y M A P S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + ┌─────────────────────────────────────────────────┐ + │ b a s e │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + │ Q │ W │ E │ R │ T ││ Z │ U │ I │ O │ ' │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ A │ S │ D │ F │ G ││ H │ J │ K │ L │ P │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ TAB │ Y │ X │ C │ V │ B ││ N │ M │ ,; │ .: │ ?! │ ALT_GR │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ UTIL │ NAV │ SHIFT ││ ENT │ NUM │ FUN │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘*/ + + [_BASE] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_Q, KC_W, KC_E, KC_R, KC_T, QWERTZ_Z, KC_U, KC_I, KC_O, QWERTZ_SINGLE_QUOTE, + CTL_A, ALT_S, GUI_D, SHT_F, KC_G, KC_H, SHT_J, GUI_K, ALT_L, CTL_P, + OS_SHT, QWERTZ_Y, KC_X, MEH_C, HYP_V, KC_B, KC_N, HYP_M, MEH_COM, KC_DOT, QWERTZ_QUES, KC_RALT, + UTIL, NAV, KC_TAB, KC_ENT, NUM, FUN + ), + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ n a v │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + │ │ │ │ │ ││ │ HOME │ UP │ END │ PGUP │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ CTRL │ ALT │ CMD │ SHFT │ ││ │ LEFT │ DOWN │ RIGHT │ PGDN │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ │ │ MEH │ HYPR │ ││ │ │ │ │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ ENT │ BSPC │ DEL │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_NAV] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + _______, _______, _______, _______, _______, _______, KC_HOME, KC_UP, KC_END, KC_PGUP, + KC_LCTL, KC_LALT, KC_LGUI, KC_LSFT, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDN, + _______, _______, _______, KC_MEH, KC_HYPR, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, KC_ENT, KC_BSPC, KC_DEL + ), + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ n u m │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + │ + │ 7 │ 8 │ 9 │ * ││ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ 0 │ 4 │ 5 │ 6 │ = ││ │ SHFT │ CMD │ ALT │ CTRL │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ - │ 1 │ 2 │ 3 │ / ││ │ HYPR │ MEH │ │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ . │ , ││ │ │ │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_NUM] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_PPLS, KC_7, KC_8, KC_9, KC_PAST, _______, _______, _______, _______, _______, + KC_0, KC_4, KC_5, KC_6, QWERTZ_EQL,_______, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, + _______, KC_PMNS, KC_1, KC_2, KC_3, KC_PSLS, _______, KC_HYPR, KC_MEH, _______, _______, _______, + _______, KC_DOT, KC_PDOT, _______, _______, _______ + ), +/* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ f u n c t i o n │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + │ F12 │ F7 │ F8 │ F9 │ ││ │ │ │ │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ F11 │ F4 │ F5 │ F6 │ ││ │ SHFT │ CMD │ ALT │ CTRL │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ F10 │ F1 │ F2 │ F3 │ ││ │ HYPR │ MEH │ │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ │ │ │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_FUN] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_F12, KC_F7, KC_F8, KC_F9, _______, _______, _______, _______, _______, _______, + KC_F11, KC_F4, KC_F5, KC_F6, _______, _______, KC_LSFT, KC_LGUI, KC_LALT, KC_LCTL, + _______, KC_F10, KC_F1, KC_F2, KC_F3, _______, _______, KC_HYPR, KC_MEH, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), +/* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ u t i l i t y │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + │ BOOT │ │ │ │ ││ € │ <<<<< │ VOL+ │ >>>>> │ │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ │ │ │ │ ││ │ │ VOL- │ │ │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ │ │ │ │ ││ │ │ PL/PA │ │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ │ │ MUTE │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_UTIL] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + QK_BOOT, _______, _______, _______, _______, RALT(KC_E), KC_MPRV, KC_VOLU, KC_MNXT, _______, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, _______, _______, _______, + _______, _______, _______, _______, _______, KC_MUTE + ) +}; + + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ M A C R O S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +// Make sure combos are always tapped and not held +bool get_combo_must_tap(uint16_t index, combo_t *combo) { + // If you want all combos to be tap-only, just uncomment the next line + return true; + +} + + +/* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + + ██████ + ██ ▄▄▄▄ + ██ ██▀▀██ + ▀▀ ██▄▄██ + ██████ ▀▀▀▀ + ██ ▄▄▄▄▄▄ + ██ ██▀▀▀▀ + ██ ██████ + ██▄▄▄▄ + ▀▀▀▀▀▀ + ████████ + ██ ██ ██ + ██ ██ ██ + ▀▀ ▀▀ ▀▀ + ████████ + +*/ + + + diff --git a/keyboards/callmemero/keymaps/totem_qwertz/rules.mk b/keyboards/callmemero/keymaps/totem_qwertz/rules.mk new file mode 100644 index 00000000..061e9cff --- /dev/null +++ b/keyboards/callmemero/keymaps/totem_qwertz/rules.mk @@ -0,0 +1,4 @@ +DYNAMIC_MACRO_ENABLE = yes +COMBO_ENABLE = yes +KEY_OVERRIDE_ENABLE = yes +CAPS_WORD_ENABLE = yes