Added my keyboard

This commit is contained in:
CallMeMero 2024-12-18 13:14:05 +00:00
parent 35edec2998
commit 117be9eef5
17 changed files with 1415 additions and 0 deletions

View file

@ -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 <http://www.gnu.org/licenses/>.
*/
#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

View file

@ -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 <http://www.gnu.org/licenses/>.
*/
//#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 }, \
}

View file

@ -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 <http://www.gnu.org/licenses/>.
*/
#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

View file

@ -0,0 +1,7 @@
#pragma once
#define HAL_USE_I2C TRUE
#define HAL_USE_PWM TRUE
#define HAL_USE_PAL TRUE
#include_next <halconf.h>

View file

@ -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
}
]
}
}
}

View file

@ -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<i class='fa fa-step-backward'></i>\nHome",
{
"f": 3
},
"I\n\n<i class='fa fa-volume-up'></i>\n<i class='fa fa-caret-up'></i>",
"O\n\n<i class='fa fa-step-forward'></i>\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<i class='fa fa-caret-left'></i>\nSHFT",
{
"f": 3
},
"K\n\n<i class='fa fa-volume-down'></i>\n<i class='fa fa-caret-down'></i>\nGUI",
{
"f": 3
},
"L\n\n\n<i class='fa fa-caret-right'></i>\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<i class='fa fa-play'></i>\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<i class='kb kb-Multimedia-Mute-2'></i>\n\nFUN"
]
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

View file

@ -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

View file

@ -0,0 +1,377 @@
/*
*/
#include QMK_KEYBOARD_H
#include <stdio.h>
#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,
&lt_override,
&colon_override,
&gt_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;
}
/*
*/

View file

@ -0,0 +1,4 @@
DYNAMIC_MACRO_ENABLE = yes
COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
CAPS_WORD_ENABLE = yes

View file

@ -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

View file

@ -0,0 +1,387 @@
/*
*/
#include QMK_KEYBOARD_H
#include <stdio.h>
#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,
&lt_override,
&colon_override,
&gt_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;
}
/*
*/

View file

@ -0,0 +1,4 @@
DYNAMIC_MACRO_ENABLE = yes
COMBO_ENABLE = yes
KEY_OVERRIDE_ENABLE = yes
CAPS_WORD_ENABLE = yes

View file

@ -0,0 +1,9 @@
#pragma once
#include_next <mcuconf.h>
#undef RP_PWM_USE_PWM4
#define RP_PWM_USE_PWM4 TRUE
#undef RP_PWM_USE_TIM1
#define RP_PWM_USE_TIM1 TRUE

View file

@ -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`
<figure>
<img src="./keyboard-layout.png" alt="Miryoku inspired keymap for TOTEM keyboard, showing all six layers" width="100%" />
</figure>
<figure>
<img src="./keymap.png" alt="Miryoku inspired keymap for TOTEM keyboard, showing all six layers" width="100%" />
</figure>

View file

@ -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