summaryrefslogtreecommitdiff
path: root/users/bbaserdem/bbaserdem.h
diff options
context:
space:
mode:
Diffstat (limited to 'users/bbaserdem/bbaserdem.h')
-rw-r--r--users/bbaserdem/bbaserdem.h767
1 files changed, 536 insertions, 231 deletions
diff --git a/users/bbaserdem/bbaserdem.h b/users/bbaserdem/bbaserdem.h
index 3a405f2a47..4792d5c2d7 100644
--- a/users/bbaserdem/bbaserdem.h
+++ b/users/bbaserdem/bbaserdem.h
@@ -1,268 +1,573 @@
-#ifndef USERSPACE
-#define USERSPACE
-
+/* Copyright 2021 Batuhan Başerdem
+ * <baserdem.batuhan@gmail.com> @bbaserdem
+ *
+ * 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 QMK_KEYBOARD_H
#include "quantum.h"
+#include "keymap_dvorak.h"
+
+/* Besides loading libraries and definitions, this file has my layout defs
+ * LAYOUTS:
+ * This file has a couple layouts I use; so that the general changes can be
+ * propagated by only editing this file.
+ */
+
+// Macros to use, this has base level code so not affected by enabled features
+#include "bb-macro.h"
+// Audio from onboard speakers
+#ifdef AUDIO_ENABLE
+#include "bb-audio.h"
+#endif // AUDIO_ENABLE
+// Keycap backlight using non-rgb LEDs
+#ifdef BACKLIGHT_ENABLE
+#include "bb-backlight.h"
+#endif // BACKLIGHT_ENABLE
+// Underglow light using rgb LEDs
+#ifdef RGBLIGHT_ENABLE
+#include "bb-underglow.h"
+#endif // RGBLIGHT_ENABLE
+// Keycap backlight using rgb LEDs
+#ifdef RGB_MATRIX_ENABLE
+#include "bb-rgb.h"
+#endif // RGB_MATRIX_ENABLE
+// Rotary encoder
+#ifdef ENCODER_ENABLE
+#include "bb-encoder.h"
+#endif // ENCODER_ENABLE
+// Oled screen
+#ifdef OLED_ENABLE
+#include "bb-oled.h"
+#endif // OLED_ENABLE
+
+// Structure to keep runtime info on encoder state
+typedef union {
+ uint32_t raw;
+ struct {
+ bool rgb_sleep;
+ };
+} userspace_runtime_t;
-#define XXX KC_NO
+typedef union {
+ uint32_t raw;
+ struct {
+ uint8_t e0base :4; // ( 4:0) The encoder state on most layers; regular function
+ uint8_t e1base :4; // ( 8:1) 9 states for this; 4 bits
+ uint8_t e0point :2; // (10:1) The encoder state on mouse layer; moves pointer
+ uint8_t e1point :2; // (12:1) 4 states for this; 2 bits
+ uint8_t e0rgb :4; // (16:2) The encoder state on media layer; controls light
+ uint8_t e1rgb :4; // (20:2) 5 states for this; 3 bits but 4 is better
+ uint8_t layout :2; // (22:2) Stores keymap layout; 3 states is good on 2 bits
+ uint16_t :10; // (32:3) Padding here, free space for 10 more bits
+ };
+} userspace_config_t;
-// Layers
-#define _DV 0 // Base layer
-#define _AL 1 // Alt char overlay
-#define _GA 2 // Game layer
-#define _NU 3 // Numbers layer
-#define _SE 4 // Settings layer
-#define _MO 5 // Mouse emulation
-#define _MU 6 // Music mode
+// Broadcast us to everyone else
+extern userspace_runtime_t userspace_runtime;
+extern userspace_config_t userspace_config;
-// Define short macros
-#define UNDO LCTL(KC_Z)
-#define REDO LCTL(KC_Y)
-#define COPY LCTL(KC_C)
-#define CUT LCTL(KC_X)
-#define PASTE LCTL(KC_V)
+// Function definitions that can be accessed through specific keymaps
+// Runs before all initialization
+void keyboard_pre_init_keymap(void);
+// For code that launches once midway through initialization
+void matrix_init_keymap(void);
+// For code that launches after initialization is finished.
+void keyboard_post_init_keymap(void);
+// These will be delegated to keymap specific stuff (weak definition)
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record);
+// This code runs on every tick
+void matrix_scan_keymap(void);
+// This code runs after every layer change
+layer_state_t layer_state_set_keymap(layer_state_t state);
+// This code runs when the default layer changes
+layer_state_t default_layer_state_set_keymap (layer_state_t state);
+// Some code
+void housekeeping_task_user(void);
+// This code runs to set LED states
+void led_set_keymap(uint8_t usb_led);
+// For code that runs on suspend
+void suspend_power_down_keymap(void);
+void suspend_wakeup_init_keymap(void);
+// For code that runs on powerdown
+void shutdown_keymap(void);
-// Rename mouse keys with 7 letters
-#ifdef MOUSEKEY_ENABLE
-#define MO_S_N KC_MS_WH_UP
-#define MO_S_S KC_MS_WH_DOWN
-#define MO_S_E KC_MS_WH_RIGHT
-#define MO_S_W KC_MS_WH_LEFT
-#define MO_N KC_MS_UP
-#define MO_S KC_MS_DOWN
-#define MO_E KC_MS_RIGHT
-#define MO_W KC_MS_LEFT
-#define MO_CL_L KC_MS_BTN1
-#define MO_CL_R KC_MS_BTN2
-#define MO_CL_M KC_MS_BTN3
-#define MO_CL_4 KC_MS_BTN4
-#define MO_CL_5 KC_MS_BTN5
-#define MO_AC_0 KC_MS_ACCEL0
-#define MO_AC_1 KC_MS_ACCEL1
-#define MO_AC_2 KC_MS_ACCEL2
+// Make it so that keymaps can use KEYMAP_SAFE_RANGE for custom keycodes
+#ifdef KEYMAP_SAFE_RANGE
+#define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE
#else
-#define MO_S_N KC_NO
-#define MO_S_S KC_NO
-#define MO_S_E KC_NO
-#define MO_S_W KC_NO
-#define MO_N KC_NO
-#define MO_S KC_NO
-#define MO_E KC_NO
-#define MO_W KC_NO
-#define MO_CL_L KC_NO
-#define MO_CL_R KC_NO
-#define MO_CL_M KC_NO
-#define MO_CL_1 KC_NO
-#define MO_CL_2 KC_NO
-#define MO_AC_0 KC_NO
-#define MO_AC_1 KC_NO
-#define MO_AC_2 KC_NO
+#define PLACEHOLDER_SAFE_RANGE SAFE_RANGE
#endif
-// Rename music keys with <8 letters
+// Custom macro keycode ranges
+enum userspace_custom_keycodes {
+ // Safe stuff
+ BB_SAFE = PLACEHOLDER_SAFE_RANGE,
+ // Double entry macros
+ DBL_ANG,
+ DBL_PAR,
+ DBL_CBR,
+ DBL_BRC,
+ // Macro key
+ BB_PGPK,
+ // Unicode strings
+# ifdef UNICODEMAP_ENABLE
+ BB_LENY,
+ BB_TABL,
+ TR_FLAG,
+# endif // UNICODEMAP_ENABLE
+ // Encoder buttons
+# ifdef ENCODER_ENABLE
+ BB_ENC0,
+ BB_ENC1,
+# endif // ENCODER_ENABLE
+ // Oled editor
+# ifdef OLED_ENABLE
+ BB_OLED,
+# endif // OLED_ENABLE
+ //use for keymap specific codes
+ KEYMAP_SAFE_RANGE
+};
+// Mask these keycodes if required features are not enabled
+#ifndef UNICODEMAP_ENABLE
+#define BB_LENY KC_NO
+#define BB_TABL KC_NO
+#define TR_FLAG KC_NO
+#endif // UNICODEMAP_ENABLE
+#ifndef ENCODER_ENABLE
+#define BB_ENC0 KC_NO
+#define BB_ENC1 KC_NO
+#endif // ENCODER_ENABLE
+
+/// Enumerate of layers
+enum userspace_layers {
+ _BASE = 0, // Base layer
+ _CHAR, // Characters layer
+ _GAME, // Game layer
+ _MEDI, // R3: Media layer
+ _NAVI, // R3: Navigation layer
+ _SYMB, // R1: Symbols layer
+ _NUMB, // L1: Numbers layer
+ _FUNC, // L2: Function keys layer
+ _MOUS, // L3: Mouse keys layer
+ _MUSI // Music overlay
+};
+
+// Use 7 wide characters for keymaps, to keep things aligned with 4 tabs
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// These defines allow multiple multi-parameter definitions to expand
+// for these boards
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+#define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
+#define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__)
+#define LAYOUT_ortho_3x10_wrapper(...) LAYOUT_ortho_3x10(__VA_ARGS__)
+#define LAYOUT_split_3x6_3_wrapper(...) LAYOUT_split_3x6_3(__VA_ARGS__)
+#define LAYOUT_split_3x5_3_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__)
+
+// Masks
+#define ___1___ _______
+#define ___2___ _______,_______
+#define ___3___ _______,_______,_______
+#define ___4___ _______,_______,_______,_______
+#define ___5___ _______,_______,_______,_______,_______
+#define ___6___ _______,_______,_______,_______,_______,_______
+#define xxx1xxx KC_NO
+#define xxx2xxx KC_NO, KC_NO
+#define xxx3xxx KC_NO, KC_NO, KC_NO
+#define xxx4xxx KC_NO, KC_NO, KC_NO, KC_NO
+#define xxx5xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+#define xxx6xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+#define xxx1xxx KC_NO
+#define xxx3xxx KC_NO, KC_NO, KC_NO
+#define xxx5xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+#define xxx6xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+
+// Quick macros: in dvorak
+#define BB_UNDO LCTL(KC_SLSH) // Ctrl + Z
+#define BB_REDO LCTL(KC_T) // Ctrl + Y
+#define BB_YANK LCTL(KC_I) // Ctrl + C
+#define BB_CUT LCTL(KC_B) // Ctrl + X
+#define BB_PSTE LCTL(KC_DOT) // Ctrl + V
+
+// Audio keys
#ifdef AUDIO_ENABLE
#define MU_REC KC_LCTL
#define MU_STOP KC_LALT
#define MU_PLAY KC_LGUI
-#define MU_PLAY KC_LGUI
#define MU_FAST KC_UP
#define MU_SLOW KC_DOWN
#define MU_MASK KC_A
-#else
+#define BB_SND MU_ON
+#ifdef TAP_DANCE_ENABLE
+#define MU_TEMP TD(TD_AUDIO_TEMPO)
+#else // TAP_DANCE_ENABLE
+#define MU_TEMP KC_DOWN
+#endif // TAP_DANCE_ENABLE
+#else // AUDIO_ENABLE
#define MU_REC KC_NO
#define MU_STOP KC_NO
#define MU_PLAY KC_NO
-#define MU_PLAY KC_NO
#define MU_FAST KC_NO
+#define MU_TEMP KC_NO
#define MU_SLOW KC_NO
#define MU_MASK KC_NO
-#endif
+#define BB_SND KC_MUTE
+#endif // AUDIO_ENABLE
-// Define non-capitalized UTF shortcuts here
-#ifdef UNICODE_ENABLE
-#define PHY_HBR UC(0x0127)
-#define PHY_DEG UC(0x00b0)
-#define CUR_LIR UC(0x20ba)
-#define CUR_BIT UC(0x20bf)
-#define CUR_EUR UC(0x20ac)
-#define CUR_BPN UC(0x00a3)
-#define CUR_YEN UC(0x00a5)
-#else
-#define PHY_HBR KC_NO
-#define PHY_DEG KC_NO
-#define CUR_LIR KC_NO
-#define CUR_BIT KC_NO
-#define CUR_EUR KC_NO
-#define CUR_BPN KC_NO
-#define CUR_YEN KC_NO
-#endif
+// Unicode keys
+#ifdef UNICODEMAP_ENABLE
+#define TR_ACIR XP(LOW_A_CIRC, UPC_A_CIRC )
+#define TR_CCED XP(LOW_C_CEDI, UPC_C_CEDI )
+#define TR_GBRE XP(LOW_G_BREV, LOW_G_BREV )
+#define TR_ICIR XP(LOW_I_CIRC, LOW_I_CIRC )
+#define TR_I_NO XP(LOW_I_DOTL, LOW_I_DOTL )
+#define TR_IDOT XP(LOW_I_DOTT, LOW_I_DOTT )
+#define TR_ODIA XP(LOW_O_DIAE, LOW_O_DIAE )
+#define TR_SCED XP(LOW_S_CEDI, LOW_S_CEDI )
+#define TR_UCIR XP(LOW_U_CIRC, LOW_U_CIRC )
+#define TR_UDIA XP(LOW_U_DIAE, LOW_U_DIAE )
+#define GR_ALP XP(LOW_ALPHA, UPC_ALPHA )
+#define GR_BET XP(LOW_BETA, UPC_BETA )
+#define GR_GAM XP(LOW_GAMMA, UPC_GAMMA )
+#define GR_DEL XP(LOW_DELTA, UPC_DELTA )
+#define GR_EPS XP(LOW_EPSILON,UPC_EPSILON)
+#define GR_ZET XP(LOW_ZETA, UPC_ZETA )
+#define GR_ETA XP(LOW_ETA, UPC_ETA )
+#define GR_THE XP(LOW_THETA, UPC_THETA )
+#define GR_IOT XP(LOW_IOTA, UPC_IOTA )
+#define GR_KAP XP(LOW_KAPPA, UPC_KAPPA )
+#define GR_LAM XP(LOW_LAMBDA, UPC_LAMBDA )
+#define GR_MU XP(LOW_MU, UPC_MU )
+#define GR_NU XP(LOW_NU, UPC_NU )
+#define GR_XI XP(LOW_XI, UPC_XI )
+#define GR_OMI XP(LOW_OMICRON,UPC_OMICRON)
+#define GR_PI XP(LOW_PI, UPC_PI )
+#define GR_RHO XP(LOW_RHO, UPC_RHO )
+#define GR_SIG XP(LOW_SIGMA, UPC_SIGMA )
+#define GR_TAU XP(LOW_TAU, UPC_TAU )
+#define GR_UPS XP(LOW_UPSILON,UPC_UPSILON)
+#define GR_PHI XP(LOW_PHI, UPC_PHI )
+#define GR_CHI XP(LOW_CHI, UPC_CHI )
+#define GR_PSI XP(LOW_PSI, UPC_PSI )
+#define GR_OME XP(LOW_OMEGA, UPC_OMEGA )
+#define BB_ELLI X(ELLIPSIS)
+#define BB_PLNK X(PLANCK_CON)
+#define BB_ANGS X(ANGSTROM)
+#define BB_BITC X(BITCOIN)
+#else // UNICODEMAP_ENABLE
+#define TR_ACIR KC_A
+#define TR_CCED KC_C
+#define TR_GBRE KC_G
+#define TR_ICIR KC_I
+#define TR_I_NO KC_I
+#define TR_IDOT KC_I
+#define TR_ODIA KC_O
+#define TR_SCED KC_S
+#define TR_UCIR KC_U
+#define TR_UDIA KC_U
+#define GR_ALP KC_NO
+#define GR_BET KC_NO
+#define GR_GAM KC_NO
+#define GR_DEL KC_NO
+#define GR_EPS KC_NO
+#define GR_ZET KC_NO
+#define GR_ETA KC_NO
+#define GR_THE KC_NO
+#define GR_IOT KC_NO
+#define GR_KAP KC_NO
+#define GR_LAM KC_NO
+#define GR_MU KC_NO
+#define GR_NU KC_NO
+#define GR_XI KC_NO
+#define GR_OMI KC_NO
+#define GR_PI KC_NO
+#define GR_RHO KC_NO
+#define GR_SIG KC_NO
+#define GR_TAU KC_NO
+#define GR_UPS KC_NO
+#define GR_PHI KC_NO
+#define GR_CHI KC_NO
+#define GR_PSI KC_NO
+#define GR_OME KC_NO
+#define BB_ELLI KC_NO
+#define BB_PLNK KC_NO
+#define BB_ANGS KC_NO
+#define BB_BITC KC_NO
+#endif // UNICODEMAP_ENABLE
-// Custom keycodes
-enum userspace_custom_keycodes {
- // Turkish letters, with shifting
- TUR_A = SAFE_RANGE,
- TUR_C,
- TUR_G,
- TUR_I,
- TUR_O,
- TUR_S,
- TUR_U,
- // Unicode mode switch
- UNI_LI,
- UNI_WN,
- // Double keys
- DBL_SPC,
- DBL_ANG,
- DBL_PAR,
- DBL_SQR,
- DBL_BRC,
- DBL_QUO,
- DBL_DQT,
- DBL_GRV,
- // Diagonal mouse movements
- MO_NE,
- MO_NW,
- MO_SE,
- MO_SW,
- MO_S_NE,
- MO_S_NW,
- MO_S_SE,
- MO_S_SW,
- // Layer switches and lock functionality
- K_MOUSE,
- K_NUMBR,
- K_LOCK,
- K_GAMES,
- // Secret macros
- SECRET1,
- SECRET2,
- SECRET3
-};
+// MOD-tap definitions
+#define GUI_A MT(MOD_LGUI, DV_A)
+#define ALT_O MT(MOD_LALT, DV_O)
+#define CTRL_E MT(MOD_LCTL, DV_E)
+#define SHIFT_U MT(MOD_LSFT, DV_U)
+#define ALTGR_Q MT(MOD_RALT, DV_Q)
+#define GUI_S MT(MOD_RGUI, DV_S)
+#define ALT_N MT(MOD_LALT, DV_N)
+#define CTRL_T MT(MOD_LCTL, DV_T)
+#define SHIFT_H MT(MOD_LSFT, DV_H)
+#define ALTGR_V MT(MOD_RALT, DV_V)
-// Do tap dancable semicolon key if available
-#ifdef TAP_DANCE_ENABLE
-enum {
- SCL = 0
-};
-#define MY_SCL TD(SCL)
-#else
-#define MY_SCL KC_SCLN
-#endif
+// Layer switches
+#define MED_DEL LT(_MEDI, KC_DEL )
+#define NAV_TAB LT(_NAVI, KC_TAB )
+#define SYM_SPC LT(_SYMB, KC_SPC )
+#define NUM_ENT LT(_NUMB, KC_ENT )
+#define FUN_ESC LT(_FUNC, KC_ESC )
+#define MOU_BSP LT(_MOUS, KC_BSPC)
+
+// Layer switches
+#define BB_CHAR OSL(_CHAR)
+#define BB_GAME TG(_GAME)
-// Shared keymaps
-#define LAYOUT_planck_wrapper(...) LAYOUT_planck_grid(__VA_ARGS__)
-#define LAYOUT_letssplit_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__)
+/* Depending on how the layouts change with language; the keys are shown as;
+ * ┌────────────────────────────────────────────────┐
+ * │AltGr -none- Shift Shift+AltGr │
+ * └────────────────────────────────────────────────┘
+ * If there is an exclamation mark; it indicates a dead key on this map.
+ */
-/* Dvorak
- * ,------------------------------------------------------------------------.
- * | Esc | ' " | , | . | P | Y || F | G | C | R | L | Bkp |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | Tab | A | O | E | U | I || D | H | T | N | S | / ? |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | SYM | ; : | Q | J | K | X || B | M | W | V | Z | SET |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | TUR | OS | Ctrl| Alt | Shf | Spc || Ent | Lft | Dwn | Up | Rght| MSE |
- * `------------------------------------------------------------------------' */
-#define DVORAK \
- KC_ESC, KC_QUOT,KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
- KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
- K_NUMBR,MY_SCL, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_SE), \
- MO(_AL),KC_LGUI,KC_LCTL,KC_LALT,KC_LSFT,KC_SPC, KC_ENT, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,K_MOUSE
+/* Base layout
+ * DVORAK
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * ` ~ │ ' " │ , < │ . > │ p P │ y Y │ │ f F │ g G │ c C │ r R │ l L │ < >
+ * ├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤
+ * \ | │ a A │ o O │ e E │ u U │ i I │ │ d D │ h H │ t T │ n N │ s S │ - _
+ * ├─Gui─┼─Alt─┼─Ctr─┼─Sft─┼─────┤ ├─────┼─Sft─┼─Ctr─┼─Alt─┼─Gui─┤
+ * / ? │ ; : │ q Q │ j J │ k K │ x X │ │ b B │ m M │ w W │ v V │ z Z │ = +
+ * └─────┴AltGr┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴AltGr┴─────┘
+ * │ Del │ Tab │Space│ │Enter│ Esc │BkSpc│
+ * └─Med─┴─Nav─┴─Sym─┘ └─Num─┴─Fun─┴─Mou─┘
+ * TURKISH F
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * ¬+ *±│@f F │ g G │ ğ Ğ │¶ı I │ôo OÔ│ │¥d D │®r R │ n N │°h H │£p P │|< >¦
+ * !├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼────!┤ !
+ * `x Xà│ûu UÛ│îi İÎ│€e E │âa AÂ│ûü ÜÛ│ │₺t T │ k K │µm M │ l L │´y Yá│#ş Şǎ
+ * ! !├─Gui─┼─Alt─┼─Ctr─┼─Sft─┼─────┤ ├─────┼─Sft─┼─Ctr─┼─Alt!┼─Gui─┤
+ * äq Qå│«j J<│»ö Ö>│“v V │¢c C©│”ç Ç │ │ z Z │§s S │×b B │÷. :ȧ│·, ; │~w W
+ * └─────┴AltGr┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴AltGr┴─────┘
+ * │ Del │ Tab │Space│ │Enter│ Esc │BkSpc│
+ * └─Med─┴─Nav─┴─Sym─┘ └─Num─┴─Fun─┴─Mou─┘
+ * The thing about this layout is that these will fit most boards I have.
+ */
+#define _BL1_5_ DV_QUOT,DV_COMM,DV_DOT, DV_P, DV_Y
+#define _BR1_5_ DV_F, DV_G, DV_C, DV_R, DV_L
+#define _BL2_5_ GUI_A, ALT_O, CTRL_E, SHIFT_U,DV_I
+#define _BR2_5_ DV_D, SHIFT_H,CTRL_T, ALT_N, GUI_S
+#define _BL3_5_ DV_SCLN,ALTGR_Q,DV_J, DV_K, DV_X
+#define _BR3_5_ DV_B, DV_M, DV_W, ALTGR_V,DV_Z
+#define _BL4_3_ MED_DEL,NAV_TAB,SYM_SPC
+#define _BR4_3_ NUM_ENT,FUN_ESC,MOU_BSP
+// The extra line for the 6th (or 0th) row
+#define _BL1_1_ DV_GRV
+#define _BR1_1_ KC_NUBS
+#define _BL2_1_ DV_BSLS
+#define _BR2_1_ DV_MINS
+#define _BL3_1_ DV_SLSH
+#define _BR3_1_ DV_EQL
-/* Alternative character overlay
- * ,------------------------------------------------------------------------.
- * | | ' ' | Undo| Redo|Pound| Yen || | G | C | |TLira| Del |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | A | O | Euro| U | I ||Degre|Plank| | | S | Ins |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | " " | Cut | Copy|Paste| || BTC | < > | ( ) | [ ] | { } | PgUp|
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | | | | | || | Home|PgDwn| PgUp| End | |
- * `------------------------------------------------------------------------' */
-#define ALTCHAR \
- _______,DBL_QUO,UNDO, REDO, CUR_BPN,CUR_YEN,_______,TUR_G, TUR_C, _______,CUR_LIR,KC_DEL , \
- _______,TUR_A, TUR_O, CUR_EUR,TUR_U, TUR_I, PHY_DEG,PHY_HBR,_______,_______,TUR_S, KC_INS , \
- _______,DBL_DQT,CUT, COPY, PASTE, DBL_GRV,CUR_BIT,DBL_ANG,DBL_PAR,DBL_SQR,DBL_BRC,_______, \
- _______,_______,_______,_______,_______,DBL_SPC,_______,KC_HOME,KC_PGDN,KC_PGUP,KC_END, _______
+/* Extra characters layer
+ * This is accessed using unicode; so IBus compatible apps only.
+ * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐
+ * │TrFlg│Lenny│Table│ π │ υ │ │ φ │ γ │ χ │ ρ │ λ │
+ * ├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤
+ * │ α │ ο │ ε │ ψ │ ι │ │ δ │ η │ τ │ ν │ σ │
+ * ├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤
+ * │ ₿ │ θ │ ℏ │ κ │ ξ │ │ β │ μ │ ω │ Å │ ζ │
+ * └─────┴─────┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴─────┴─────┘
+ * │ Shf │ ... │ GPG │ │ │ │ Shf │
+ * └─────┴─────┴─────┘ └─────┴─────┴─────┘
+ *
+ */
+#define _CL1_5_ TR_FLAG,BB_LENY,BB_TABL,GR_PI, GR_UPS
+#define _CR1_5_ GR_PHI, GR_GAM, GR_CHI, GR_RHO, GR_LAM
+#define _CL2_5_ GR_ALP, GR_OMI, GR_EPS, GR_PSI, GR_IOT
+#define _CR2_5_ GR_DEL, GR_ETA, GR_TAU, GR_NU, GR_SIG
+#define _CL3_5_ BB_BITC,GR_THE, BB_PLNK,GR_KAP, GR_XI
+#define _CR3_5_ GR_BET, GR_MU, GR_OME, BB_ANGS,GR_ZET
+#define _CL4_3_ KC_RSFT,BB_ELLI,BB_PGPK
+#define _CR4_3_ XXXXXXX,XXXXXXX,KC_LSFT
/* Game layer
- * ,------------------------------------------------------------------------.
- * | OFF | Q | W | E | R | T || Esc | 7 | 8 | 9 |NumLk|Bkspc|
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | Tab | A | S | D | F | G || F1 | 4 | 5 | 6 | \ | Ent |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | Z | X | C | V | B || F2 | 1 | 2 | 3 | ^ | |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | / | ` | | | | Spc || Spc | Ent | 0 | < | v | > |
- * `------------------------------------------------------------------------' */
-#define GAME \
- K_GAMES,KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_P7, KC_P8, KC_P9, KC_NLCK,KC_BSPC, \
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F1, KC_P4, KC_P5, KC_P6, KC_BSLS,KC_ENT , \
- _______,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F2, KC_P1, KC_P2, KC_P3, KC_UP, _______, \
- KC_SLSH,KC_GRV, _______,_______,_______,KC_SPC, KC_SPC, KC_ENT, KC_P0, KC_LEFT,KC_DOWN,KC_RGHT
+ * This layer turns off the tap-hold keys for the left half.
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │ Q │ W │ E │ R │ T │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * Tab │ A │ S │ D │ F │ G │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * Shift│ Z │ X │ C │ V │ B │
+ * └─────┴─────┴─────┼─────┼─────┼─────┐
+ * │ Esc │Enter│Space│
+ * └─────┴─────┴─────┘
+ */
+#define _GA1_5_ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _GA1_1_ _______
+#define _GA2_5_ KC_A, KC_S, KC_D, KC_F, KC_G
+#define _GA2_1_ KC_TAB
+#define _GA3_5_ KC_Z, KC_X, KC_C, KC_V, KC_B
+#define _GA3_1_ KC_LSFT
+#define _GA4_3_ KC_ESC, KC_ENT, KC_SPC
+
+/* Media layer
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │Speed│ Mod │ Hue │ Sat │ Bri │ RGB light control
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │Togg.│Prev.│MuTog│MuStp│Next │ Media control
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │Sink │Vol -│ Mut │Eject│Vol +│ Volume control
+ * ┌─────┼─────┼─────┼─────┴─────┴─────┘
+ * │OledL│Veloc│Music│ Feature control on keyboard
+ * └─────┴─────┴─────┘
+ */
+#define _ME1_5_ RGB_SPI,RGB_MOD,RGB_HUI,RGB_SAI,RGB_VAI
+#define _ME2_5_ RGB_TOG,KC_MPRV,KC_MPLY,KC_MSTP,KC_MNXT
+#define _ME3_5_ KC_F13, KC_VOLD,KC_MUTE,KC_EJCT,KC_VOLU
+#define _ME4_3_ BB_OLED,VLK_TOG,MU_TOG
+
+/* Navigation layer
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │Redo │Paste│Yank │ Cut │PrScr│
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │Undo │ < │ v │ ^ │ > │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ Ins │Home │PgDwn│PgUp │ End │
+ * ┌─────┼─────┼─────┼─────┴─────┴─────┘
+ * │Enter│ Esc │BkSpc│
+ * └─────┴─────┴─────┘
+ */
+#define _NA1_5_ BB_REDO,BB_PSTE,BB_YANK,BB_CUT, KC_PSCR
+#define _NA2_5_ BB_UNDO,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT
+#define _NA3_5_ KC_INS, KC_HOME,KC_PGDN,KC_PGUP,KC_END
+#define _NA4_3_ KC_ENT, KC_ESC, KC_BSPC
/* Symbols layer
- * ,------------------------------------------------------------------------.
- * | OFF | ` | ~ | [ | ] | { || } | - | _ | = | + | |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | 1 | 2 | 3 | 4 | 5 || 6 | 7 | 8 | 9 | 0 | \ |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | ! | @ | # | $ | % || ^ | & | * | ( | ) | LCK |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | | | | | | || | | | | | |
- * `------------------------------------------------------------------------' */
-#define NUMBERS \
- K_NUMBR,KC_GRV, KC_TILD,KC_LBRC,KC_RBRC,KC_LCBR,KC_RCBR,KC_MINS,KC_UNDS,KC_EQL, KC_PLUS,_______, \
- _______,KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, \
- _______,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,K_LOCK , \
- KC_PIPE,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______
+ * This layer has the central columns shifted for convenience
+ * DVORAK
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │ ` │ { │ } │ / │ = │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ ~ │ [ │ ] │ ? │ + │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │CapsL│ ( │ ) │ \ │ | │
+ * ┌─────┼─────┼─────┼─────┴─────┴─────┘
+ * │Enter│ Esc │BkSpc│
+ * └─────┴─────┴─────┘
+ * Turkish F
+ * (AltGr is right on the central column, red. keys on main layer are omitted)
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │ + ¬ │ / \ │ - | │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ * ± │ ? ¿ │ _ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │CapsL│ │ │ │ │
+ * ┌─────┼─────┼─────┼─────┴─────┴─────┘
+ * │Enter│ Esc │BkSpc│
+ * └─────┴─────┴─────┘
+ * QWERTY
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │ ` │ - │ = │ { │ } │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ ~ │ _ │ + │ [ │ ] │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │CapsL│ ( │ ) │ \ │ | │
+ * ┌─────┼─────┼─────┼─────┴─────┴─────┘
+ * │Enter│ Esc │BkSpc│
+ * └─────┴─────┴─────┘
+ */
+#define _SY1_5_ DV_GRV, DV_LCBR,DV_RCBR,DV_SLSH,DV_EQL
+#define _SY2_5_ DV_TILD,DV_LBRC,DV_RBRC,DV_QUES,DV_PLUS
+#define _SY3_5_ KC_CAPS,DV_LPRN,DV_RPRN,DV_BSLS,DV_PIPE
+#define _SY4_3_ KC_ENT, KC_ESC, KC_BSPC
-/* Settings layer
- * ,------------------------------------------------------------------------.
- * |BLLed| F1 | F2 | F3 | F4 | Lin || Win | Wake| |Hue -|Hue +|Reset|
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | F5 | F6 | F7 | F8 | || | |RGBto|Sat -|Sat +| |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | Game| F9 | F10 | F11 | F12 |Vol 0||PrtSc| |RGBan|Bri -|Bri +| |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * |Musir| | | | |Vol -||Vol +| Prev| Stop|TogMu| Next| |
- * `------------------------------------------------------------------------' */
-#define SETTINGS \
- BL_STEP,KC_F1, KC_F2, KC_F3, KC_F4, UNI_LI, UNI_WN, KC_WAKE,_______,RGB_HUD,RGB_HUI,RESET , \
- _______,KC_F5, KC_F6, KC_F7, KC_F8, _______,_______,_______,RGB_TOG,RGB_SAD,RGB_SAI,_______, \
- K_GAMES,KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE,KC_PSCR,_______,RGB_MOD,RGB_VAD,RGB_VAI,_______, \
- MU_TOG, _______,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MPRV,KC_MSTP,KC_MPLY,KC_MNXT,_______
+/* Numbers layer
+ * This layer contains numbers and the associated symbols.
+ * DVORAK
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │ < │ 7 & │ 8 * │ 9 ( │ 0 ) │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ _ │ 4 $ │ 5 % │ 6 ^ │ - │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ > │ 1 ! │ 2 @ │ 3 # │Char.│
+ * └─────┴─────┴─────┼─────┼─────┼─────┐
+ * │ Del │ Tab │Space│
+ * └─────┴─────┴─────┘
+ * Turkish F
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │ < | │{7 ' │[8 ( │]9 )±│}0 =°│
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ │¼4 $ │½5 %⅜│¾6 & │ │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ > ¦ │¹1 !¡│²2 " │#3 ^³│Char.│
+ * └─────┴─────┴─────┼─────┼─────┼─────┐
+ * │ Del │ Tab │Space│
+ * └─────┴─────┴─────┘
+ */
+#define _NU1_5_ KC_NUBS,KC_7, KC_8, KC_9, KC_0
+#define _NU2_5_ DV_UNDS,KC_4, KC_5, KC_6, DV_MINS
+#define _NU3_5_ LSFT(KC_NUBS), KC_1, KC_2, KC_3, BB_CHAR
+#define _NU4_3_ KC_DEL, KC_TAB, KC_SPC
+
+/* Function layer
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │ F01 │ F02 │ F03 │ F04 │EEPRM│
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ F05 │ F06 │ F07 │ F08 │EEPRM│
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ F09 │ F10 │ F11 │ F12 │GameL│
+ * └─────┴─────┴─────┼─────┼─────┼─────┐
+ * │ Del │ Tab │Space│
+ * └─────┴─────┴─────┘
+ */
+#define _FU1_5_ KC_F1, KC_F2, KC_F3, KC_F4, RESET
+#define _FU2_5_ KC_F5, KC_F6, KC_F7, KC_F8, EEP_RST
+#define _FU3_5_ KC_F9, KC_F10, KC_F11, KC_F12, BB_GAME
+#define _FU4_3_ KC_DEL, KC_TAB, KC_SPC
/* Mouse layer
- * ,------------------------------------------------------------------------.
- * |Ulock| \ | ^ | / |.....|.....||.....|.....| |\|.| |^| | |/|.| |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | < | Mid | > |Btn 4|.....||.....|Btn 5| <-- | Mid | --> | |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | / | v | \ |.....|.....||.....|.....| |/| | |v| | |\| | LCK |
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | | | | | | Left||Right| | |Accl0|Accl1|Accl2|
- * `------------------------------------------------------------------------' */
-#define MOUSE \
- K_MOUSE,MO_NW, MO_N, MO_NE, XXX, XXX ,XXX, XXX, MO_S_NW,MO_S_N, MO_S_NE,_______, \
- _______,MO_W, MO_CL_M,MO_E, MO_CL_4,XXX ,XXX, MO_CL_5,MO_S_W, MO_CL_M,MO_S_E, _______, \
- _______,MO_SW, MO_S, MO_SE, XXX, XXX ,XXX, XXX, MO_S_SW,MO_S_S, MO_S_SE,K_LOCK , \
- _______,_______,_______,_______,_______,MO_CL_L,MO_CL_R,_______,MO_AC_0,MO_AC_1,MO_AC_2,_______
+ * ┌─────┬─────┬─────┬─────┬─────┐
+ * │Slow │Right│ Mid │ Lft │Fast │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ |<| │ |v| │ |^| │ |>| │ Bt4 │
+ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ <<< │ vvv │ ^^^ │ >>> │ Bt5 │
+ * └─────┴─────┴─────┼─────┼─────┼─────┐
+ * │ Del │ Tab │Space│
+ * └─────┴─────┴─────┘
+ */
+#define _MO1_5_ KC_ACL0,KC_BTN1,KC_BTN2,KC_BTN3,KC_ACL2
+#define _MO2_5_ KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_BTN4
+#define _MO3_5_ KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,KC_BTN5
+#define _MO4_3_ KC_DEL, KC_TAB, KC_SPC
/* Music layer
- * ,------------------------------------------------------------------------.
- * |.....|.....|.....|.....|.....|.....||.....|.....|.....|.....|.....|.....|
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * |.....|.....|.....|.....|.....|.....||.....|.....|.....|.....|.....|.....|
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * |.....|.....|.....|.....|.....|.....||.....|.....|.....|.....|.....|.....|
- * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
- * | togg| rec | stop| play| slow| fast||modes|.....|.....|.....|.....|.....|
- * `------------------------------------------------------------------------'
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └───┴───┴───┼───┼───┼───┼───┼───┼───┼───┴───┴───┘
+ * │Rec│Stp│Ply│Tmp│Mod│Off│
+ * └───┴───┴───┴───┴───┴───┘
*/
-#define MUSIC \
- MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK, \
- MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK, \
- MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK, \
- MU_TOG, MU_REC, MU_STOP,MU_PLAY,MU_SLOW,MU_FAST,MU_MOD, MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK
-
-#endif
+#define _MUL_3_ MU_REC, MU_STOP,MU_PLAY
+#define _MUR_3_ MU_TEMP,MU_MOD, MU_TOG
+#define _MU_01_ MU_MASK
+#define _MU_02_ MU_MASK,MU_MASK
+#define _MU_03_ MU_MASK,MU_MASK,MU_MASK
+#define _MU_06_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK
+#define _MU_08_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK
+#define _MU_10_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK
+#define _MU_12_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK