diff --git a/keyboards/callmemero/callmemero.c b/keyboards/callmemero/callmemero.c new file mode 100644 index 00000000..ae8e4a4e --- /dev/null +++ b/keyboards/callmemero/callmemero.c @@ -0,0 +1,56 @@ +/* Copyright 2022 + * GEIST @geigeigeist + * + * 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 "callmemero.h" + + +#ifdef SWAP_HANDS_ENABLE + +__attribute__ ((weak)) +const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = + // The LAYOUT macro could work for this, but it was harder to figure out the + // identity using it. + + // This is the identity layout. +/* +{ \ + { {0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0} }, \ + { {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1} }, \ + { {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2} }, \ + { {0, 3}, {2, 3}, {3, 3}, {4, 3} }, \ + \ + { {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4} }, \ + { {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5} }, \ + { {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6} }, \ + { {0, 7}, {1, 7}, {2, 7}, {4, 7}, \ +}; +*/ + + // This is the mirror, q <-> p, w <-> o, etc... +{ \ + { {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4} }, \ + { {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5} }, \ + { {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6} }, \ + { {4, 7}, {2, 7}, {1, 7}, {0, 7} }, \ + \ + { {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0} }, \ + { {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1} }, \ + { {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2} }, \ + { {4, 3}, {3, 3}, {2, 3}, {0, 3} }, \ +}; + +#endif //SWAP_HANDS_ENABLE diff --git a/keyboards/callmemero/callmemero.h b/keyboards/callmemero/callmemero.h new file mode 100644 index 00000000..4724e0fa --- /dev/null +++ b/keyboards/callmemero/callmemero.h @@ -0,0 +1,55 @@ +/* Copyright 2022 + * GEIST @geigeigeist + * + * 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 . + */ + +//#pragma once +#include "quantum.h" + +/* This a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +// readability +#define ___ KC_NO + +// |SW01|SW02|SW03|SW04|SW05| |SW05|SW04|SW03|SW02|SW01| +// |SW06|SW07|SW08|SW09|SW10| |SW10|SW09|SW08|SW07|SW06| +// |SW16|SW11|SW12|SW13|SW14|SW15| |SW15|SW14|SW13|SW12|SW11|SW16| +// |SW17|SW18|SW19| |SW19|SW18|SW17| + +#define LAYOUT( \ + L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \ + L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \ + L30, L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, R34,\ + L32, L33, L34, R30, R31, R32 \ + ) \ + { \ + { L00, L01, L02, L03, L04 }, \ + { L10, L11, L12, L13, L14 }, \ + { L20, L21, L22, L23, L24 }, \ + { L30, ___, L32, L33, L34 }, \ + { R04, R03, R02, R01, R00 }, \ + { R14, R13, R12, R11, R10 }, \ + { R24, R23, R22, R21, R20 }, \ + { R34, ___, R32, R31, R30 }, \ + } + + diff --git a/keyboards/callmemero/config.h b/keyboards/callmemero/config.h new file mode 100644 index 00000000..33318364 --- /dev/null +++ b/keyboards/callmemero/config.h @@ -0,0 +1,50 @@ +/* +Copyright 2022 GEIST <@geigeigeist> + +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 . +*/ + +#pragma once + +/* key matrix size */ +// Rows are doubled-up +#define MATRIX_ROWS 8 +#define MATRIX_COLS 5 + + +// wiring of each half +#define MATRIX_ROW_PINS { GP26, GP27, GP28, GP29 } +#define MATRIX_COL_PINS { GP6, GP7, GP3, GP4, GP2 } +#define DIODE_DIRECTION COL2ROW + + +//#define NO_ACTION_MACRO +//#define NO_ACTION_FUNCTION + +#define DEBOUNCE 5 + + +/* Serial settings */ +#define USE_SERIAL +/* serial.c configuration for split keyboard */ +#define SOFT_SERIAL_PIN GP0 +//#define SPLIT_LAYER_STATE_ENABLE +//#define SPLIT_USB_DETECT +#define SERIAL_USE_MULTI_TRANSACTION +/* communication between sides */ +#define SERIAL_PIO_USE_PIO1 + + +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U diff --git a/keyboards/callmemero/halconf.h b/keyboards/callmemero/halconf.h new file mode 100644 index 00000000..58f0849b --- /dev/null +++ b/keyboards/callmemero/halconf.h @@ -0,0 +1,7 @@ +#pragma once + +#define HAL_USE_I2C TRUE +#define HAL_USE_PWM TRUE +#define HAL_USE_PAL TRUE + +#include_next diff --git a/keyboards/callmemero/info.json b/keyboards/callmemero/info.json new file mode 100644 index 00000000..ae264b85 --- /dev/null +++ b/keyboards/callmemero/info.json @@ -0,0 +1,168 @@ +{ + "keyboard_name": "TOTEM", + "url": "https://github.com/GEIGEIGEIST/TOTEM", + "manufacturer": "GEIST", + "usb": { + "vid": "0x3A3C", + "pid": "0x0002", + "device_version": "0.3.0" + }, + "layouts": { + "LAYOUT": { + "layout": [ + { + "x": 5, + "y": 12.35 + }, + { + "x": 15, + "y": 12.35 + }, + { + "x": 6, + "y": 12.85 + }, + { + "x": 14, + "y": 12.85 + }, + { + "x": 7, + "y": 13.1 + }, + { + "x": 13, + "y": 13.1 + }, + { + "x": 5, + "y": 13.25 + }, + { + "x": 15, + "y": 13.25 + }, + { + "x": 6, + "y": 13.85 + }, + { + "x": 14, + "y": 13.85 + }, + { + "x": 7, + "y": 14.1 + }, + { + "x": 13, + "y": 14.1 + }, + { + "x": 5, + "y": 14.35 + }, + { + "x": 15, + "y": 14.35 + }, + { + "x": 6, + "y": 15.85 + }, + { + "x": 14, + "y": 15.85 + }, + { + "x": 7, + "y": 15.1 + }, + { + "x": 13, + "y": 15.1 + }, + { + "x": 1.6, + "y": 11.5000000000000004 + }, + { + "x": 1.4, + "y": 7.900000000000001 + }, + { + "x": 1.5, + "y": 5.900000000000001 + }, + { + "x": 1.5, + "y": 6.900000000000001 + }, + { + "x": 1.5, + "y": 7.900000000000001 + }, + { + "x": 1.75, + "y": 6.55 + }, + { + "x": 1.75, + "y": 7.55 + }, + { + "x": 2.75, + "y": 20.2500000000000007 + }, + { + "x": 1.75, + "y": 29.6500000000000006 + }, + { + "x": 1.6, + "y": 4.9500000000000005 + }, + { + "x": 1.6, + "y": 4.9500000000000005 + }, + { + "x": 1.4, + "y": 1.350000000000002 + }, + { + "x": 1.4, + "y": 1.350000000000002 + }, + { + "x": 1.0, + "y": 0 + }, + { + "x": 1.0, + "y": 1 + }, + { + "x": 0, + "y": 13.700000000000002 + }, + { + "x": 1.0, + "y": 2 + }, + { + "x": 1.25, + "y": 0 + }, + { + "x": 1.25, + "y": 1 + }, + { + "x": 1.25, + "y": 2 + } + ] + } + } +} diff --git a/keyboards/callmemero/keyboard-layout.json b/keyboards/callmemero/keyboard-layout.json new file mode 100644 index 00000000..83eadeec --- /dev/null +++ b/keyboards/callmemero/keyboard-layout.json @@ -0,0 +1,171 @@ +[ + { + "backcolor": "#656565", + "css": ".keylabel {\n font-weight: bold;\n}\n\n.keylabel2 {\n color: #dbff00 !important;\n font-size: 10px;\n}\n\n.keylabel5 {\n color: #0700ff !important;\n font-size: 10px;\n}\n\n.keylabel6 {\n color: #9c5b00 !important;\n font-size: 10px;\n}\n\n.keylabel2 {\n color: #009616 !important;\n font-size: 10px;\n}\n\n.keytop {\n background-color: rgb(255 255 255 / 0.1) !important;\n}" + }, + [ + { + "x": 1, + "fa": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1 + ] + }, + "Q\nF12\nboot\n\n\n\n\n+", + "W\nF7\n\n\n\n\n\n7", + "E\nF8\n\n\n\n\n\n8", + "R\nF9\n\n\n\n\n\n9", + "T\n\n\n\n\n\n\n*", + { + "x": 0.75 + }, + "Y", + { + "t": "#000000\n\n\n#dbff00", + "fa": [ + 0, + 0, + 0, + 1 + ] + }, + "U\n\n\nHome", + { + "f": 3 + }, + "I\n\n\n", + "O\n\n\nEnd", + "P\n\n\nPgUp" + ], + [ + { + "x": 1, + "t": "#000000", + "a": 0, + "fa": [ + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1 + ] + }, + "A\nF11\n\n\nCTRL\n\n\n0", + "S\nF4\n\n\nALT\n\n\n4", + "D\nF5\n\n\nGUI\n\n\n5", + "F\nF6\n\n\nSHFT\n\n\n6", + { + "a": 4 + }, + "G\n\n\n\n\n\n\n=", + { + "x": 0.75 + }, + "H", + { + "t": "#000000\n\n\n#dbff00", + "a": 0, + "f": 3 + }, + "J\n\n\n\nSHFT", + { + "f": 3 + }, + "K\n\n\n\nGUI", + { + "f": 3 + }, + "L\n\n\n\nALT", + "\"\n\n\nPgDn\nCTRL\n\n'" + ], + [ + { + "t": "#000000", + "a": 4 + }, + "TAB\n\n\n\n\n\n\n(", + "Z\nF10\n\n\n\n\n\n-", + { + "f": 3 + }, + "X\nF1\n\n\n\n\n\n1", + { + "t": "#000000\n\n\n\n\n\n\n#0700ff" + }, + "C\nF2\n\n\n\n\n\n2", + { + "a": 0 + }, + "V\nF3\n\n\nHYPR\n\n\n3", + { + "a": 4 + }, + "B\n\n\n\n\n\n\n/", + { + "x": 0.75, + "t": "#000000" + }, + "N", + { + "t": "#000000\n\n\n#dbff00", + "a": 0 + }, + "M\n\n\n~\nHYPR", + { + "t": "#000000", + "a": 4 + }, + ";\n\n\n\n\n\n,", + { + "t": "#000000\n\n\n#dbff00" + }, + ":\n\n\n/\n\n\n.", + { + "t": "#000000" + }, + "!\n\n\n\n\n\n?", + { + "t": "#000000\n\n\n\n\n\n\n#0700ff" + }, + "TAB\n\n\n\n\n\n\n)" + ], + [ + { + "x": 3, + "t": "#000000\n\n\n\n#009616", + "a": 0 + }, + "ESC\n\n\n\nUTIL", + { + "t": "#000000\n\n\n\n#dbff00" + }, + "Spc\n\n\n\nNAV", + { + "t": "#000000", + "a": 4 + }, + "!Shft", + { + "x": 0.75 + }, + "Ent", + { + "t": "#000000\n\n\n\n#0700ff", + "a": 0 + }, + "Bsp\n\n\n\nNUM", + { + "t": "#000000\n\n\n\n#9c5b00" + }, + "Del\n\n\n\nFUN" + ] +] \ No newline at end of file diff --git a/keyboards/callmemero/keyboard-layout.png b/keyboards/callmemero/keyboard-layout.png new file mode 100644 index 00000000..f5fc092a Binary files /dev/null and b/keyboards/callmemero/keyboard-layout.png differ diff --git a/keyboards/callmemero/keymap.png b/keyboards/callmemero/keymap.png new file mode 100644 index 00000000..f481fcae Binary files /dev/null and b/keyboards/callmemero/keymap.png differ diff --git a/keyboards/callmemero/keymaps/default/config.h b/keyboards/callmemero/keymaps/default/config.h new file mode 100644 index 00000000..e851aa23 --- /dev/null +++ b/keyboards/callmemero/keymaps/default/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 28 +#define COMBO_MUST_TAP_PER_COMBO diff --git a/keyboards/callmemero/keymaps/default/keymap.c b/keyboards/callmemero/keymaps/default/keymap.c new file mode 100644 index 00000000..8a269688 --- /dev/null +++ b/keyboards/callmemero/keymaps/default/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_D MT(MOD_HYPR, KC_D) +#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_H MT(MOD_HYPR, KC_H) +#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) +#define BACK G(KC_LBRC) +#define FWD G(KC_RBRC) + +#define S_CUT G(KC_X) +#define S_COPY G(KC_C) +#define S_PASTE G(KC_V) + +// ┌─────────────────────────────────────────────────┐ +// │ 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_B, KC_G, 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_D, COMBO_END}; +const uint16_t PROGMEM tilde_combo[] = {KC_G, KC_V, 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_D, COMBO_END}; +const uint16_t PROGMEM cut_combo[] = {KC_X, HYP_D, COMBO_END}; + +// Right hand vertical combos +// Between top and home row +const uint16_t PROGMEM caret_combo[] = {KC_J, KC_M, 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_M, KC_K, COMBO_END}; +const uint16_t PROGMEM mins_combo[] = {SHT_N, HYP_H, 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_H, MEH_COM, COMBO_END}; +const uint16_t PROGMEM rcbr_combo[] = {MEH_COM, KC_DOT, COMBO_END}; + +const uint16_t PROGMEM lt_combo[] = {KC_M, 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, S_COPY), + COMBO(paste_combo, S_PASTE), + COMBO(cut_combo, S_CUT), + 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(lt_combo, KC_LT), + COMBO(gt_combo, KC_GT) +}; + + +// ┌─────────────────────────────────────────────────┐ +// │ 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 = (const key_override_t *[]){ + &quexclam_override, + &semicolon_override, + <_override, + &colon_override, + >_override, + NULL // Null terminate the array of overrides! +}; + + +// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +// │ K E Y M A P S │ +// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* + ┌─────────────────────────────────────────────────┐ + │ b a s e │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + ┄┈┈───═╡ Q │ W │ F │ P │ B ││ J │ L │ U │ Y │ ' │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ A │ R │ S │ T │ G ││ M │ N │ E │ I │ O │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ TAB │ Z │ X │ C │ D │ V ││ K │ H │ ,; │ .: │ ?! │ TAB │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ UTIL │ NAV │ SHIFT ││ ENT │ NUM │ FUN │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘*/ + + [_BASE] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, + CTL_A, ALT_R, GUI_S, SHT_T, KC_G, KC_M, SHT_N, GUI_E, ALT_I, CTL_O, + KC_TAB, KC_Z, KC_X, MEH_C, HYP_D, KC_V, KC_K, HYP_H, MEH_COM, KC_DOT, KC_QUES, KC_TAB, + UTIL, NAV, OS_SHT, KC_ENT, NUM, FUN + ), + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ n a v │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + ╌┄┈┈───═╡ │ │ │ │ ││ │ HOME │ UP │ END │ PGUP │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ CTRL │ ALT │ CMD │ SHFT │ ││ │ LEFT │ DOWN │ RIGHT │ PGDN │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ BACK │ │ │ MEH │ HYPR │ ││ │ ~ │ │ / │ │ FWD │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ 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, + BACK, _______, _______, KC_MEH, KC_HYPR, _______, _______, KC_TILD, _______, KC_SLSH, _______, FWD, + _______, _______, _______, 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, _______, _______, _______, _______, _______, _______, KC_VOLU, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_VOLD, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MCTL, + _______, _______, _______, _______, _______, 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/default/rules.mk b/keyboards/callmemero/keymaps/default/rules.mk new file mode 100644 index 00000000..061e9cff --- /dev/null +++ b/keyboards/callmemero/keymaps/default/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/config.h b/keyboards/callmemero/keymaps/totem/config.h new file mode 100644 index 00000000..94fd2869 --- /dev/null +++ b/keyboards/callmemero/keymaps/totem/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 31 +#define COMBO_MUST_TAP_PER_COMBO diff --git a/keyboards/callmemero/keymaps/totem/keymap.c b/keyboards/callmemero/keymaps/totem/keymap.c new file mode 100644 index 00000000..0d896aa2 --- /dev/null +++ b/keyboards/callmemero/keymaps/totem/keymap.c @@ -0,0 +1,387 @@ +/* + ▀▀▀▀▀ ▀▀▀▀▀ ▀▀█▀▀ + ▄▀▀▀▄ ▄ ▄▀▀▀▄ ▄ ▄▀▀▀▄ █ ▄▀▀▀▄ + █ █ █ █ █ █ █ █ █ █ █ + ▀▀▀ █ ▀▀▀ █ ▀▀▀ ▀ ▀▀▀ + █ ▄▄▄█▄▄▄ █ █ + ▀ █ █ █ █▄█ + ▀▀▀▀▀ █ █ █ ▀ ┌─┐┌─╴╷┌──┬─ + ▀ ▀ ▀ │ ┐├─╴│└─┐│ + └─┘└─╴╵╶─┘╵ +▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ +*/ + +#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_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_QUOT MT(MOD_LCTL, KC_QUOT) +#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) +#define EURO_SIGN RALT(KC_5) + +// TODO, create marco for undo and redo +// todo, add keybind for capslock + + +// ┌─────────────────────────────────────────────────┐ +// │ 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 grave_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 esc_combo[] = {ALT_S, SHT_F, 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_Y, 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 lt_combo[] = {KC_H, SHT_J, COMBO_END}; +const uint16_t PROGMEM gt_combo[] = {ALT_L, CTL_QUOT, COMBO_END}; + +// todo, create combo for ß + + +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(euro_combo, EURO_SIGN) +}; + + +// ┌─────────────────────────────────────────────────┐ +// │ 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 │ E │ R │ T ││ Y │ U │ I │ O │ P │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ A │ S │ D │ F │ G ││ H │ J │ K │ L │ ' │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ TAB │ Y │ X │ C │ V │ B ││ N │ M │ ,; │ .: │ ?! │ TAB │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ UTIL │ NAV │ SHIFT ││ ENT │ NUM │ FUN │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘*/ + + [_BASE] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + CTL_A, ALT_S, GUI_D, SHT_F, KC_G, KC_H, SHT_J, GUI_K, ALT_L, CTL_QUOT, + KC_TAB, KC_Z, KC_X, MEH_C, HYP_V, KC_B, KC_N, HYP_M, MEH_COM, KC_DOT, KC_QUES, KC_TAB, + UTIL, NAV, OS_SHT, KC_ENT, NUM, FUN + ), + /* + ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸ + + ┌─────────────────────────────────────────────────┐ + │ n a v │ ╭╮╭╮╭╮╭╮ + └─────────────────────────────────────────────────┘ │╰╯╰╯╰╯│ + ┌─────────┬─────────┬─────────┬─────────┬──────╨──┐┌──╨──────┬─────────┬─────────┬─────────┬─────────┐ + │ │ │ │ │ ││ │ HOME │ UP │ END │ PGUP │ + ├─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┤ + │ CTRL │ ALT │ CMD │ SHFT │ ││ │ LEFT │ DOWN │ RIGHT │ PGDN │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ BACK │ │ │ MEH │ HYPR │ ││ │ ~ │ │ / │ │ FWD │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ 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- │ │ │ + ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐ + │ │ │ │ │ │ ││ │ │ PL/PA │ │ │ │ + └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┤├─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘ + │ │ │ ││ │ │ MUTE │ + └─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┘ */ + + [_UTIL] = LAYOUT( + //╷ ╷ ╷ ╷ ╷ ╷ ╷╷ ╷ ╷ ╷ ╷ ╷ ╷ + QK_BOOT, _______, _______, _______, _______, EURO_SIGN, 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/rules.mk b/keyboards/callmemero/keymaps/totem/rules.mk new file mode 100644 index 00000000..061e9cff --- /dev/null +++ b/keyboards/callmemero/keymaps/totem/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/mcuconf.h b/keyboards/callmemero/mcuconf.h new file mode 100644 index 00000000..c7d2f690 --- /dev/null +++ b/keyboards/callmemero/mcuconf.h @@ -0,0 +1,9 @@ +#pragma once + +#include_next + +#undef RP_PWM_USE_PWM4 +#define RP_PWM_USE_PWM4 TRUE + +#undef RP_PWM_USE_TIM1 +#define RP_PWM_USE_TIM1 TRUE diff --git a/keyboards/callmemero/readme.md b/keyboards/callmemero/readme.md new file mode 100644 index 00000000..dbcf93cd --- /dev/null +++ b/keyboards/callmemero/readme.md @@ -0,0 +1,26 @@ +``` + ▀▀▀▀▀ ▀▀▀▀▀ ▀▀█▀▀ + ▄▀▀▀▄ ▄ ▄▀▀▀▄ ▄ ▄▀▀▀▄ █ ▄▀▀▀▄ + █ █ █ █ █ █ █ █ █ █ █ + ▀▀▀ █ ▀▀▀ █ ▀▀▀ ▀ ▀▀▀ + █ ▄▄▄█▄▄▄ █ █ + ▀ █ █ █ █▄█ + ▀▀▀▀▀ █ █ █ ▀ + ▀ ▀ ▀ +▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ + +``` +# TOTEM split keyboard + +TOTEM is 34 keys column-staggered split keyboard made by @geigeigeist. It uses the Seeed XIAO RP2040. + +You can use this command to compile the firmware +`qmk compile -kb callmemero -km totem` + +
+Miryoku inspired keymap for TOTEM keyboard, showing all six layers +
+ +
+Miryoku inspired keymap for TOTEM keyboard, showing all six layers +
diff --git a/keyboards/callmemero/rules.mk b/keyboards/callmemero/rules.mk new file mode 100644 index 00000000..64aa03b2 --- /dev/null +++ b/keyboards/callmemero/rules.mk @@ -0,0 +1,35 @@ +# MCU name +MCU = RP2040 + +# Bootloader selection +BOOTLOADER = rp2040 + +# Ignore some warnings during the build, likely to be fixed before RP2040 PR is merged +ALLOW_WARNINGS = yes + +# For bilateral combinations patch +DEFERRED_EXEC_ENABLE = yes + +# LTO must be disabled for RP2040 builds +LTO_ENABLE = no + +SPLIT_KEYBOARD = yes +SWAP_HANDS_ENABLE = yes + +# PIO serial/WS2812 drivers must be used on RP2040 +SERIAL_DRIVER = vendor +WS2812_DRIVER = vendor + +#SPACE SAVING +EXTRAKEY_ENABLE = yes +AUDIO_ENABLE = no +MUSIC_ENABLE = no +AUTO_SHIFT_ENABLE = no +LTO_ENABLE = no +CONSOLE_ENABLE = no +COMMAND_ENABLE = no +MOUSEKEY_ENABLE = yes +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = no +MAGIC_ENABLE = no +