I think I fixed all the issues with klor basic keymap
- Modernized Geist's repo
  - Converted to data driven json config, nearly emulating what
    geist had in default
  - still allowed Atmel and RP2040. Compiles for both
  - added default saegewerk and worked out haptic driver kinks
  - had to replace deprecated defines
- Still testing and can't test everything
  - only have Saegewerk, not the other three layouts
  - only have RP2040
  - Also missed soldering the encoder diodes
  - not going to test RGBlight
- still need to add my keymap lol
			
			
This commit is contained in:
		
							parent
							
								
									ce371b48d9
								
							
						
					
					
						commit
						10fed13d0f
					
				
					 7 changed files with 25 additions and 931 deletions
				
			
		| 
						 | 
				
			
			@ -25,6 +25,7 @@
 | 
			
		|||
        "encoder": true,
 | 
			
		||||
        "extrakey": false,
 | 
			
		||||
        "grave_esc": false,
 | 
			
		||||
        "haptic": false,
 | 
			
		||||
        "magic": false,
 | 
			
		||||
        "mousekey": false,
 | 
			
		||||
        "music": false,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -20,9 +20,12 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "klor.h"
 | 
			
		||||
//#ifdef HAPTIC_ENABLE
 | 
			
		||||
//#include "drivers/haptic/DRV2605L.h"
 | 
			
		||||
//#endif //HAPTIC ENABLE
 | 
			
		||||
 | 
			
		||||
// this should be handled by common_rules.mk but the code doesn't work without it
 | 
			
		||||
#ifdef HAPTIC_ENABLE
 | 
			
		||||
#include "drivers/haptic/drv2605l.h"
 | 
			
		||||
#endif //HAPTIC ENABLE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
| 
						 | 
				
			
			@ -616,7 +619,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
                  #endif // AUDIO_ENABLE        
 | 
			
		||||
                }
 | 
			
		||||
              #ifdef HAPTIC_ENABLE
 | 
			
		||||
                DRV_pulse(pulsing_strong);
 | 
			
		||||
                drv2605l_pulse(DRV2605L_EFFECT_PULSING_STRONG_1_100);
 | 
			
		||||
              #endif // HAPTIC_ENABLE
 | 
			
		||||
            eeconfig_update_keymap(keymap_config.raw);
 | 
			
		||||
            clear_keyboard();  // ──── clear to prevent stuck keys    
 | 
			
		||||
| 
						 | 
				
			
			@ -632,7 +635,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
            if (record->event.pressed) {
 | 
			
		||||
                set_single_persistent_default_layer(_COLEMAK);
 | 
			
		||||
                #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(transition_hum);
 | 
			
		||||
                  drv2605l_pulse(DRV2605L_EFFECT_TRANSITION_HUM_1_100);
 | 
			
		||||
                #endif // HAPTIC_ENABLE
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -640,7 +643,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
            if (record->event.pressed) {
 | 
			
		||||
                set_single_persistent_default_layer(_QWERTY);
 | 
			
		||||
                #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(transition_hum);
 | 
			
		||||
                  drv2605l_pulse(DRV2605L_EFFECT_TRANSITION_HUM_1_100);
 | 
			
		||||
                #endif // HAPTIC_ENABLE
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -692,7 +695,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
      case KC_MPLY:
 | 
			
		||||
        if (record->event.pressed) {
 | 
			
		||||
          #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(sharp_click);
 | 
			
		||||
                  drv2605l_pulse(DRV2605L_EFFECT_SHARP_CLICK_100);
 | 
			
		||||
          #endif // HAPTIC_ENABL
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,97 +0,0 @@
 | 
			
		|||
#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
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//#define TAPPING_TERM 170
 | 
			
		||||
#define TAPPING_TERM 170
 | 
			
		||||
 | 
			
		||||
// Prevent normal rollover on alphas from accidentally triggering mods.
 | 
			
		||||
#define IGNORE_MOD_TAP_INTERRUPT
 | 
			
		||||
 | 
			
		||||
// Enable rapid switch from tap to hold, disables double tap hold auto-repeat.
 | 
			
		||||
#define TAPPING_FORCE_HOLD
 | 
			
		||||
 | 
			
		||||
// Auto Shift
 | 
			
		||||
#define NO_AUTO_SHIFT_ALPHA
 | 
			
		||||
#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
 | 
			
		||||
#define AUTO_SHIFT_NO_SETUP
 | 
			
		||||
 | 
			
		||||
#undef LOCKING_SUPPORT_ENABLE
 | 
			
		||||
#undef LOCKING_RESYNC_ENABLE
 | 
			
		||||
#define NO_ACTION_ONESHOT
 | 
			
		||||
//#define NO_ACTION_TAPPING
 | 
			
		||||
//#define NO_MUSIC_MODE
 | 
			
		||||
 | 
			
		||||
#define COMBO_COUNT 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifdef POINTING_DEVICE_ENABLE
 | 
			
		||||
//#    define POINTING_DEVICE_ROTATION_90
 | 
			
		||||
#    define SPLIT_POINTING_ENABLE
 | 
			
		||||
#    define POINTING_DEVICE_RIGHT
 | 
			
		||||
#    define POINTING_DEVICE_ROTATION_270
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// RGB matrix support
 | 
			
		||||
#ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
#    define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
 | 
			
		||||
// RGB Matrix Animation modes. Explicitly enabled
 | 
			
		||||
// For full list of effects, see:
 | 
			
		||||
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effect
 | 
			
		||||
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_ALPHAS_MODS
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_SOLID_COLOR
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_BREATHING
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_BAND_SAT
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_BAND_VAL
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_CYCLE_ALL
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_DUAL_BEACON
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_RAINBOW_BEACON
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_RAINDROPS
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_HUE_BREATHING
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_HUE_PENDULUM
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_HUE_WAVE
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_PIXEL_RAIN
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_PIXEL_FLOW
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
 | 
			
		||||
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined ├─────────────────────────────┐
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_TYPING_HEATMAP
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_DIGITAL_RAIN
 | 
			
		||||
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined ├────────────┐
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_SPLASH
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_MULTISPLASH
 | 
			
		||||
//#    define ENABLE_RGB_MATRIX_SOLID_SPLASH
 | 
			
		||||
#    define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,802 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
 | 
			
		||||
                                        █         █    █            ▄▄▄▀▀▀▀▀▀▄▄▄        █▀▀▀▀▀▀▀▀▀▀█
 | 
			
		||||
                                        █        █     █          ▄▀            ▀▄      █          █
 | 
			
		||||
                                        █       █      █        ▄▀                ▀▄    █          █
 | 
			
		||||
                                        █      █       █        █                  █    █          █
 | 
			
		||||
                                        █     █        █       █                    █   █          █
 | 
			
		||||
                                        █    █         █       █                    █   █▄▄▄▄▄▄▄▄▄▄█
 | 
			
		||||
                                        █   █ █        █       █                    █   █      █
 | 
			
		||||
                                        █  █   █       █        █                  █    █       █
 | 
			
		||||
                                        █ █     █      █        ▀▄                ▄▀    █        █
 | 
			
		||||
                                        ██       █     █          ▀▄            ▄▀      █         █
 | 
			
		||||
                                        █         █    █▄▄▄▄▄▄▄▄    ▀▀▀▄▄▄▄▄▄▀▀▀        █          █
 | 
			
		||||
 | 
			
		||||
                                        ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
 | 
			
		||||
                                        ┌─┐┌─╴╷┌──┬─
 | 
			
		||||
                                        │ ┐├─╴│└─┐│
 | 
			
		||||
                                        └─┘└─╴╵╶─┘╵
 | 
			
		||||
*/
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "klor.h"
 | 
			
		||||
#ifdef HAPTIC_ENABLE
 | 
			
		||||
#include "drivers/haptic/DRV2605L.h"
 | 
			
		||||
#endif //HAPTIC ENABLE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ D E F I N I T I O N S                                                                                                                      │
 | 
			
		||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
			
		||||
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ d e f i n e   l a y e r s                                 │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘ 
 | 
			
		||||
 | 
			
		||||
enum klor_layers {
 | 
			
		||||
    /* _M_XYZ = Mac Os, _W_XYZ = Win/Linux */
 | 
			
		||||
    _COLEMAK,
 | 
			
		||||
    _QWERTY,
 | 
			
		||||
    _LOWER,
 | 
			
		||||
    _RAISE,
 | 
			
		||||
    _ADJUST,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ d e f i n e   k e y c o d e s                             │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
enum custom_keycodes {
 | 
			
		||||
    COLEMAK = SAFE_RANGE,
 | 
			
		||||
    QWERTY,
 | 
			
		||||
    LOWER,
 | 
			
		||||
    RAISE,
 | 
			
		||||
    ADJUST,
 | 
			
		||||
    OS_SWAP,
 | 
			
		||||
    WMAIL,
 | 
			
		||||
    GMAIL,
 | 
			
		||||
    GIPHY,
 | 
			
		||||
    MAKE_H,
 | 
			
		||||
    SNAP1,
 | 
			
		||||
    SNAP2
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ d e f i n e   m a c r o n a m e s                         │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
// LEFT HAND HOME ROW MODS ├───────────────────────────────────┐
 | 
			
		||||
 | 
			
		||||
#define GUI_A MT(MOD_LGUI, KC_A)
 | 
			
		||||
#define ALT_R MT(MOD_LALT, KC_R)
 | 
			
		||||
#define CTL_S MT(MOD_LCTL, KC_S)
 | 
			
		||||
#define SHT_T MT(MOD_LSFT, KC_T)
 | 
			
		||||
 | 
			
		||||
// RIGHT HAND HOME ROW MODS ├───────────────────────────────────┐
 | 
			
		||||
 | 
			
		||||
#define SHT_N MT(MOD_RSFT, KC_N)
 | 
			
		||||
#define CTL_E MT(MOD_LCTL, KC_E)
 | 
			
		||||
#define ALT_I MT(MOD_LALT, KC_I)
 | 
			
		||||
#define GUI_O MT(MOD_LGUI, KC_O)
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ d e f i n e   c o m b o s                                 │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM esc_combo[] = {KC_TAB, KC_Q, COMBO_END};
 | 
			
		||||
//const uint16_t PROGMEM save_combo[] = {KC_D, KC_S, COMBO_END};
 | 
			
		||||
combo_t key_combos[COMBO_COUNT] = {
 | 
			
		||||
    COMBO(esc_combo, KC_ESC)
 | 
			
		||||
    //COMBO(save_combo, C(KC_S))
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ d e f i n e   k e y   o v e r r i d e s                   │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
const key_override_t sve_key_override = ko_make_basic(MOD_MASK_GUI, KC_S, C(KC_S));
 | 
			
		||||
 | 
			
		||||
// This globally defines all key overrides to be used ├───────────┐
 | 
			
		||||
const key_override_t **key_overrides = (const key_override_t *[]){
 | 
			
		||||
  &sve_key_override,
 | 
			
		||||
  NULL // Null terminate the array of overrides!
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ d e f i n e   s o u n d s                                 │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
#ifdef AUDIO_ENABLE
 | 
			
		||||
  #define WINXP_SOUND W__NOTE(_DS6), Q__NOTE(_DS5), H__NOTE(_AS5), H__NOTE(_GS5), H__NOTE(_DS5), H__NOTE(_DS6), H__NOTE(_AS5)
 | 
			
		||||
  #define MAC_SOUND S__NOTE(_CS5), B__NOTE(_C5)
 | 
			
		||||
 
 | 
			
		||||
  float winxp_song[][2] = SONG(WINXP_SOUND);
 | 
			
		||||
  float mac_song[][2] = SONG(MAC_SOUND);
 | 
			
		||||
#endif // AUDIO_ENABLE
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ K E Y M A P S                                                                                                                              │
 | 
			
		||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
			
		||||
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
   ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
   │ c o l e m a k                                             │
 | 
			
		||||
   └───────────────────────────────────────────────────────────┘
 | 
			
		||||
             ┌─────────┬─────────┬─────────┬─────────┬─────────┐                    ┌─────────┬─────────┬─────────┬─────────┬─────────┐
 | 
			
		||||
             │    Q    │    W    │    F    │    P    │    G    │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │    J    │    L    │    U    │    Y    │    ;    │   
 | 
			
		||||
   ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
 | 
			
		||||
   │   TAB   │    A    │    R    │    S    │    T    │    D    ├─╯                ╰─┤    H    │    N    │    E    │    I    │    O    │    "    │
 | 
			
		||||
   ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
 | 
			
		||||
   │   DEL   │    Z    │    X    │    C    │    V    │    B    ││ SHIFT  ││PLY/PSE ││    K    │    M    │    ,    │    .    │    /    │  SHIFT  │
 | 
			
		||||
   └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
 | 
			
		||||
                                 │  CTRL   │  LOWER  │  SPACE  │   ALT   ││ CMD/WIN │  ENTER  │  RAISE  │  BSPCE  │  
 | 
			
		||||
                                 └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ 
 | 
			
		||||
 | 
			
		||||
   [_COLEMAK] = LAYOUT_polydactyl(
 | 
			
		||||
 //╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷
 | 
			
		||||
              KC_Q,     KC_W,     KC_F,     KC_P,     KC_G,                          KC_J,     KC_L,     KC_U,     KC_Y,     KC_SCLN,  
 | 
			
		||||
    KC_TAB,   GUI_A,    ALT_R,    CTL_S,    SHT_T,    KC_D,                          KC_H,     SHT_N,    CTL_E,    ALT_I,    GUI_O,    KC_QUOT,
 | 
			
		||||
    KC_Q,     KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_LSFT,   KC_MPLY,  KC_K,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_BSLS,
 | 
			
		||||
                                  KC_DEL,   LOWER,    KC_SPC,   KC_ESC,    KC_LGUI,  KC_ENT,   RAISE,    KC_BSPC
 | 
			
		||||
 ),
 | 
			
		||||
 /*
 | 
			
		||||
   ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
 | 
			
		||||
 | 
			
		||||
   ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
   │ q w e r t y                                               │
 | 
			
		||||
   └───────────────────────────────────────────────────────────┘
 | 
			
		||||
             ┌─────────┬─────────┬─────────┬─────────┬─────────┐                    ┌─────────┬─────────┬─────────┬─────────┬─────────┐
 | 
			
		||||
             │    Q    │    W    │    E    │    R    │    T    │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │    Y    │    U    │    I    │    O    │    P    │   
 | 
			
		||||
   ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
 | 
			
		||||
   │   TAB   │    A    │    S    │    D    │    F    │    G    ├─╯                ╰─┤    H    │    J    │    K    │    L    │    ;    │    "    │
 | 
			
		||||
   ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
 | 
			
		||||
   │   DEL   │    Z    │    X    │    C    │    V    │    B    ││ SHIFT  ││PLY/PSE ││    N    │    M    │    ,    │    .    │    /    │  SHIFT  │
 | 
			
		||||
   └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
 | 
			
		||||
                                 │  CTRL   │  LOWER  │  SPACE  │   ALT   ││ CMD/WIN │  ENTER  │  RAISE  │ BSPACE  │  
 | 
			
		||||
                                 └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ 
 | 
			
		||||
 | 
			
		||||
   [_QWERTY] = LAYOUT_polydactyl(
 | 
			
		||||
 //╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷
 | 
			
		||||
              KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,                          KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,  
 | 
			
		||||
    KC_TAB,   KC_A,     KC_S,     KC_D,     KC_F,     KC_G,                          KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,
 | 
			
		||||
    KC_DEL,   KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_LSFT,   KC_MPLY,  KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,  KC_RSFT,
 | 
			
		||||
                                  KC_LCTL,  LOWER,    KC_SPC,   KC_LALT,   KC_LGUI,  KC_ENT,   RAISE,    KC_BSPC
 | 
			
		||||
 ),
 | 
			
		||||
 | 
			
		||||
 /*
 | 
			
		||||
   ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
 | 
			
		||||
   
 | 
			
		||||
   ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
   │ l o w e r                                                 │
 | 
			
		||||
   └───────────────────────────────────────────────────────────┘
 | 
			
		||||
             ┌─────────┬─────────┬─────────┬─────────┬─────────┐                    ┌─────────┬─────────┬─────────┬─────────┬─────────┐
 | 
			
		||||
             │ CAPSLCK │ NUMLCK  │    ↑    │    =    │    {    │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │    }    │    7    │    8    │    9    │    +    │   
 | 
			
		||||
   ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
 | 
			
		||||
   │   ESC   │  HOME   │    ←    │    ↓    │    →    │    [    ├─╯                ╰─┤    ]    │    4    │    5    │    6    │    -    │    '    │
 | 
			
		||||
   ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
 | 
			
		||||
   │ SCRNSHT │   END   │   PG↑   │  SAVE   │   PG↓   │    (    ││  MUTE  ││PLY/PSE ││    )    │    1    │    2    │    3    │    *    │    ▼    │
 | 
			
		||||
   └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
 | 
			
		||||
                                 │    ▼    │    ▼    │    ▼    │    ▼    ││    ▼    │    ▼    │ ADJUST  │    0    │  
 | 
			
		||||
                                 └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ 
 | 
			
		||||
 | 
			
		||||
   [_LOWER] = LAYOUT_polydactyl(
 | 
			
		||||
 //╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷
 | 
			
		||||
              KC_CAPS,  KC_NUM,   KC_UP,    KC_EQL,   KC_LCBR,                       KC_RCBR,  KC_P7,    KC_P8,    KC_P9,    KC_PPLS,
 | 
			
		||||
    KC_ESC,   KC_HOME,  KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_LBRC,                       KC_RBRC,  KC_P4,    KC_P5,    KC_P6,    KC_MINS,  KC_DQT, 
 | 
			
		||||
    SNAP2,    KC_END,   KC_PGUP,  C(KC_S),  KC_PGDN,  KC_LPRN,  KC_MUTE,   KC_MPLY,  KC_RPRN,  KC_P1,    KC_P2,    KC_P3,    KC_PAST,  _______, 
 | 
			
		||||
                                  _______,  _______,  _______,  RGB_MOD,   RGB_MOD,  _______,  _______,  KC_P0
 | 
			
		||||
 ),
 | 
			
		||||
 /*
 | 
			
		||||
   ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
 | 
			
		||||
   
 | 
			
		||||
   ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
   │ r a i s e                                                 │
 | 
			
		||||
   └───────────────────────────────────────────────────────────┘
 | 
			
		||||
             ┌─────────┬─────────┬─────────┬─────────┬─────────┐                    ┌─────────┬─────────┬─────────┬─────────┬─────────┐
 | 
			
		||||
             │    !    │    @    │    #    │    $    │    %    │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │    ^    │    &    │    Ü    │    °    │    /    │   
 | 
			
		||||
   ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
 | 
			
		||||
   │   GMX   │    Ä    │    è    │    SZ   │    é    │         ├─╯                ╰─┤         │    ¥    │    €    │    £    │    Ö    │         │
 | 
			
		||||
   ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
 | 
			
		||||
   │   WEB   │    `    │    ~    │   CUE   │         │         ││  MUTE  ││PLY/PSE ││         │         │         │ DM REC1 │ DM STOP │ DM PLY1 │
 | 
			
		||||
   └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
 | 
			
		||||
                                 │  GIPHY  │ ADJUST  │    ▼    │    ▼    ││    ▼    │    ▼    │    ▼    │    ▼    │  
 | 
			
		||||
                                 └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ 
 | 
			
		||||
 | 
			
		||||
   [_RAISE] = LAYOUT_polydactyl(
 | 
			
		||||
 //╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷
 | 
			
		||||
              KC_EXLM,  KC_AT,    KC_HASH,  KC_DLR,   KC_PERC,                       KC_CIRC,  KC_AMPR,  RALT(KC_U),RALT(KC_3),KC_BSLS,
 | 
			
		||||
    GMAIL,    RALT(KC_A),RALT(KC_F),RALT(KC_S),RALT(KC_G),XXXXXXX,                   XXXXXXX,LSFT(RALT(KC_4)),RALT(KC_5), RALT(KC_4),  RALT(KC_O), XXXXXXX,  
 | 
			
		||||
    WMAIL,    KC_GRV, LSFT(KC_GRV),RALT(KC_C),XXXXXXX,XXXXXXX,  KC_MUTE,   KC_MPLY,  XXXXXXX,  XXXXXXX,  XXXXXXX,  DM_REC1,  DM_RSTP,  DM_PLY1, 
 | 
			
		||||
                                  GIPHY,    _______,  _______,  RGB_MOD,   RGB_MOD,  _______,  _______,  _______
 | 
			
		||||
 ),
 | 
			
		||||
 /*
 | 
			
		||||
   ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
 | 
			
		||||
   
 | 
			
		||||
   ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
   │ a d j u s t                                               │
 | 
			
		||||
   └───────────────────────────────────────────────────────────┘
 | 
			
		||||
             ┌─────────┬─────────┬─────────┬─────────┬─────────┐                    ┌─────────┬─────────┬─────────┬─────────┬─────────┐
 | 
			
		||||
             │ AUDIO   │ HAPTIC  │         │         │         │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │         │   F7    │   F8    │   F9    │   F14   │   
 | 
			
		||||
   ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
 | 
			
		||||
   │  RESET  │ DEBUG   │ QWERTY  │         │         │         ├─╯                ╰─┤         │   F4    │   F5    │   F6    │   F12   │   F13   │
 | 
			
		||||
   ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
 | 
			
		||||
   │  MAKE   │ OS SWAP │ COLEMAK │         │         │         ││  MUTE  ││PLY/PSE ││         │   F1    │   F2    │   F3    │   F10   │   F11   │
 | 
			
		||||
   └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
 | 
			
		||||
                                 │    ▼    │    ▼    │    ▼    │    ▼    ││    ▼    │    ▼    │    ▼    │    ▼    │  
 | 
			
		||||
                                 └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ */ 
 | 
			
		||||
 | 
			
		||||
   [_ADJUST] = LAYOUT_polydactyl(
 | 
			
		||||
 //╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷
 | 
			
		||||
              AU_TOG,   HPT_TOG,  RGB_HUI,  RGB_MOD,  XXXXXXX,                       XXXXXXX,  KC_F7,    KC_F8,    KC_F9,    KC_F14,   
 | 
			
		||||
    QK_BOOT,  DB_TOGG,  QWERTY,   RGB_SAI,  XXXXXXX,  XXXXXXX,                       XXXXXXX,  KC_F4,    KC_F5,    KC_F6,    KC_F12,   KC_F13,
 | 
			
		||||
    MAKE_H,   OS_SWAP,  COLEMAK,  RGB_VAI,  XXXXXXX,  XXXXXXX,  KC_MUTE,   KC_MPLY,  XXXXXXX,  KC_F1,    KC_F2,    KC_F3,    KC_F10,   KC_F11,
 | 
			
		||||
                                  _______,  _______,  _______,  _______,   _______,  _______,  _______,  _______
 | 
			
		||||
 )
 | 
			
		||||
 | 
			
		||||
 /*
 | 
			
		||||
   ╺━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸
 | 
			
		||||
   
 | 
			
		||||
   ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
   │ t e m p l a t e                                           │
 | 
			
		||||
   └───────────────────────────────────────────────────────────┘
 | 
			
		||||
             ┌─────────┬─────────┬─────────┬─────────┬─────────┐                    ┌─────────┬─────────┬─────────┬─────────┬─────────┐
 | 
			
		||||
             │         │         │         │         │         │ ╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮╭╮ │         │         │         │         │         │   
 | 
			
		||||
   ┌─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │╰╯╰╯╰╯╰╯╰╯╰╯╰╯╰╯│ ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┐
 | 
			
		||||
   │         │         │         │         │         │         ├─╯                ╰─┤         │         │         │         │         │         │
 | 
			
		||||
   ├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤╭────────╮╭────────╮├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤
 | 
			
		||||
   │         │         │         │         │         │         ││        ││        ││         │         │         │         │         │         │
 | 
			
		||||
   └─────────┴─────────┴─────────┼─────────┼─────────┼─────────┼╰────────╯╰────────╯┼─────────┼─────────┼─────────┼─────────┴─────────┴─────────┘
 | 
			
		||||
                                 │         │         │         │         ││         │         │         │         │  
 | 
			
		||||
                                 └─────────┴─────────┴─────────┴─────────┘└─────────┴─────────┴─────────┴─────────┘ 
 | 
			
		||||
 | 
			
		||||
   [_TEMPLATE] = LAYOUT_polydactyl(
 | 
			
		||||
 //╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷╷         ╷         ╷         ╷         ╷         ╷         ╷         ╷
 | 
			
		||||
              _______,  _______,  _______,  _______,  _______,                       _______,  _______,  _______,  _______,  _______,
 | 
			
		||||
    _______,  _______,  _______,  _______,  _______,  _______,                       _______,  _______,  _______,  _______,  _______,  _______,
 | 
			
		||||
    _______,  _______,  _______,  _______,  _______,  _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______,
 | 
			
		||||
                                  _______,  _______,  _______,  _______,   _______,  _______,  _______,  _______
 | 
			
		||||
 )*/ 
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ T R A C K B A L L                                                                                                                          │
 | 
			
		||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
			
		||||
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
 | 
			
		||||
 | 
			
		||||
#ifdef POINTING_DEVICE_ENABLE
 | 
			
		||||
 | 
			
		||||
void pointing_device_init_user(void) {
 | 
			
		||||
    set_auto_mouse_layer(_MOUSE); // only required if AUTO_MOUSE_DEFAULT_LAYER is not set to index of <mouse_layer>
 | 
			
		||||
    set_auto_mouse_enable(true);  // always required before the auto mouse feature will work
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
 | 
			
		||||
    if (scrolling_mode) {
 | 
			
		||||
        mouse_report.h = mouse_report.x;
 | 
			
		||||
        mouse_report.v = mouse_report.y;
 | 
			
		||||
        mouse_report.x = 0;
 | 
			
		||||
        mouse_report.y = 0;
 | 
			
		||||
    }
 | 
			
		||||
    return mouse_report;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif //POINTING_DEVICE_ENABLE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ H A P T I C   F E E D B A C K                                                                                                              │
 | 
			
		||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
			
		||||
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
 | 
			
		||||
 | 
			
		||||
void keyboard_post_init_user(void) {
 | 
			
		||||
  // Call the post init code.
 | 
			
		||||
  #if HAPTIC_ENABLE
 | 
			
		||||
    haptic_disable(); // disables per key haptic feedback by default
 | 
			
		||||
  #endif //HAPTIC ENABLE
 | 
			
		||||
  
 | 
			
		||||
  #if RGB_MATRIX_ENABLE
 | 
			
		||||
    rgblight_enable_noeeprom();
 | 
			
		||||
    //rgblight_sethsv_noeeprom(35, 255, 255); // set default RGB color to yellow
 | 
			
		||||
  #endif //RGB_MATRIX_ENABLE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ O L E D                                                                                                                                    │
 | 
			
		||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
			
		||||
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ d y n a m i c   m a c r o                                 │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
char layer_state_str[24];
 | 
			
		||||
char o_text[24] = "";
 | 
			
		||||
int dmacro_num = 0; 
 | 
			
		||||
 | 
			
		||||
#ifdef DYNAMIC_MACRO_ENABLE
 | 
			
		||||
    char dmacro_text[4][24] = { "", "RECORDING", "STOP RECORDING",  "PLAY RECORDING"};
 | 
			
		||||
    static uint16_t dmacro_timer;
 | 
			
		||||
    const char PROGMEM rec_ico[] = {0xD1, 0xE1, 0};
 | 
			
		||||
    const char PROGMEM stop_ico[] = {0xD3, 0xE1, 0};
 | 
			
		||||
    const char PROGMEM play_ico[] = {0xD2, 0xE1, 0};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // DYNMACRO RECORD ├─────────────────────────────────────────────────────────────┐
 | 
			
		||||
    void dynamic_macro_record_start_user(void) {
 | 
			
		||||
          dmacro_num = 1;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // DYNMACRO STOP RECORDING ├─────────────────────────────────────────────────────┐
 | 
			
		||||
    void dynamic_macro_record_end_user(int8_t direction) {
 | 
			
		||||
          dmacro_num = 2;
 | 
			
		||||
          dmacro_timer = timer_read();
 | 
			
		||||
        return; 
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // DYNMACRO PLAY RECORDING ├─────────────────────────────────────────────────────┐
 | 
			
		||||
    void dynamic_macro_play_user(int8_t direction) {
 | 
			
		||||
          dmacro_num = 3;
 | 
			
		||||
          dmacro_timer = timer_read();
 | 
			
		||||
        return; 
 | 
			
		||||
    }
 | 
			
		||||
#endif //DYNAMIC_MACRO_ENABLE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
  #ifdef DYNAMIC_MACRO_ENABLE
 | 
			
		||||
    // DynMacroTimer
 | 
			
		||||
    if(dmacro_num > 0){
 | 
			
		||||
        if (timer_elapsed(dmacro_timer) < 3000) {
 | 
			
		||||
            strcpy ( o_text, dmacro_text[dmacro_num] );
 | 
			
		||||
          }    
 | 
			
		||||
        else {
 | 
			
		||||
            if (dmacro_num == 1) {
 | 
			
		||||
                strcpy ( o_text, dmacro_text[1] );
 | 
			
		||||
              }
 | 
			
		||||
            else {
 | 
			
		||||
                strcpy ( o_text, layer_state_str );
 | 
			
		||||
                dmacro_num = 0;
 | 
			
		||||
              }
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
   #endif //DYNAMIC_MACRO_ENABLE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ o l e d   g r a p h i c s                                 │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
void render_os_lock_status(void) {
 | 
			
		||||
    static const char PROGMEM sep_v[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0};
 | 
			
		||||
    static const char PROGMEM sep_h1[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
 | 
			
		||||
    static const char PROGMEM sep_h2[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
 | 
			
		||||
    static const char PROGMEM face_1[] = {0x80, 0x81, 0x82, 0x83, 0x84, 0xE1, 0};  
 | 
			
		||||
    static const char PROGMEM face_2[] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xE1, 0}; 
 | 
			
		||||
    static const char PROGMEM os_m_1[] = {0x95, 0x96, 0};
 | 
			
		||||
    static const char PROGMEM os_m_2[] = {0xB5, 0xB6, 0};
 | 
			
		||||
    static const char PROGMEM os_w_1[] = {0x97, 0x98, 0};
 | 
			
		||||
    static const char PROGMEM os_w_2[] = {0xB7, 0xB8, 0};
 | 
			
		||||
    static const char PROGMEM s_lock[] = {0x8F, 0x90, 0};
 | 
			
		||||
    static const char PROGMEM n_lock[] = {0x91, 0x92, 0};
 | 
			
		||||
    static const char PROGMEM c_lock[] = {0x93, 0x94, 0};
 | 
			
		||||
    static const char PROGMEM b_lock[] = {0xE1, 0xE1, 0};
 | 
			
		||||
    #ifdef AUDIO_ENABLE  
 | 
			
		||||
      static const char PROGMEM aud_en[] = {0xAF, 0xB0, 0};
 | 
			
		||||
      static const char PROGMEM aud_di[] = {0xCF, 0xD0, 0};
 | 
			
		||||
    #endif
 | 
			
		||||
    #ifdef HAPTIC_ENABLE
 | 
			
		||||
      static const char PROGMEM hap_en[] = {0xB1, 0xB2, 0};
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
// os mode status ────────────────────────────────────────┐
 | 
			
		||||
 | 
			
		||||
    oled_write_ln_P(sep_v, false);
 | 
			
		||||
 | 
			
		||||
    if (keymap_config.swap_lctl_lgui) {
 | 
			
		||||
        oled_write_P(os_m_1, false); // ──── MAC
 | 
			
		||||
    } else {
 | 
			
		||||
        oled_write_P(os_w_1, false); // ──── WIN
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    oled_write_P(sep_h1, false);
 | 
			
		||||
    oled_write_P(face_1, false);
 | 
			
		||||
 | 
			
		||||
    if (keymap_config.swap_lctl_lgui) {
 | 
			
		||||
        oled_write_P(os_m_2, false); // ──── MAC
 | 
			
		||||
    } else {
 | 
			
		||||
        oled_write_P(os_w_2, false); // ──── WIN
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    oled_write_P(sep_h1, false);
 | 
			
		||||
    oled_write_P(face_2, false);
 | 
			
		||||
    oled_write_ln_P(sep_v, false);
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
// lock key layer status ─────────────────────────────────┐
 | 
			
		||||
 | 
			
		||||
    led_t led_usb_state = host_keyboard_led_state();
 | 
			
		||||
 | 
			
		||||
    if (led_usb_state.num_lock) {
 | 
			
		||||
        oled_write_P(n_lock, false); // ──── NUMLOCK
 | 
			
		||||
    } else {
 | 
			
		||||
        oled_write_P(b_lock, false);
 | 
			
		||||
    }
 | 
			
		||||
    if (led_usb_state.caps_lock) {
 | 
			
		||||
        oled_write_P(c_lock, false); // ─── CAPSLOCK
 | 
			
		||||
    } else {
 | 
			
		||||
        oled_write_P(b_lock, false);
 | 
			
		||||
    }
 | 
			
		||||
    if (led_usb_state.scroll_lock) { // ─ SCROLLLOCK
 | 
			
		||||
        oled_write_P(s_lock, false);
 | 
			
		||||
    } else {
 | 
			
		||||
        oled_write_P(b_lock, false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
// hardware feature status ──────────────────────────────┐
 | 
			
		||||
 | 
			
		||||
    oled_write_P(sep_h2, false);
 | 
			
		||||
 | 
			
		||||
    #ifndef AUDIO_ENABLE 
 | 
			
		||||
        oled_write_P(b_lock, false);
 | 
			
		||||
    #endif
 | 
			
		||||
    #ifndef HAPTIC_ENABLE 
 | 
			
		||||
        oled_write_P(b_lock, false);
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
    #ifdef AUDIO_ENABLE // ────────────────── AUDIO
 | 
			
		||||
        if (is_audio_on()) { 
 | 
			
		||||
          oled_write_P(aud_en, false); 
 | 
			
		||||
        } else {
 | 
			
		||||
          oled_write_P(aud_di, false);
 | 
			
		||||
        }
 | 
			
		||||
    #endif // AUDIO ENABLE
 | 
			
		||||
 | 
			
		||||
     #ifdef HAPTIC_ENABLE // ─────────────── HAPTIC
 | 
			
		||||
        oled_write_P(hap_en, false); 
 | 
			
		||||
     #endif // HAPTIC ENABLE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// layer status ──────────────────────────────────────────┐
 | 
			
		||||
 | 
			
		||||
int layerstate = 0;
 | 
			
		||||
 | 
			
		||||
layer_state_t layer_state_set_kb(layer_state_t state) {
 | 
			
		||||
      switch (get_highest_layer(layer_state | default_layer_state)) {
 | 
			
		||||
            case 0:
 | 
			
		||||
                strcpy ( layer_state_str, "BASE COLEMAK");
 | 
			
		||||
                break;
 | 
			
		||||
            case 1:
 | 
			
		||||
                strcpy ( layer_state_str, "BASE QWERTY");
 | 
			
		||||
                break;
 | 
			
		||||
            case 2:
 | 
			
		||||
                strcpy ( layer_state_str, "LOWER");
 | 
			
		||||
                break;
 | 
			
		||||
            case 3:
 | 
			
		||||
                strcpy ( layer_state_str, "RAISE");
 | 
			
		||||
                break;
 | 
			
		||||
            case 4:
 | 
			
		||||
                strcpy ( layer_state_str, "ADJUST");
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                strcpy ( layer_state_str, "XXXXXX");
 | 
			
		||||
        }
 | 
			
		||||
      if (dmacro_num < 1) {
 | 
			
		||||
          strcpy ( o_text, layer_state_str );
 | 
			
		||||
    }
 | 
			
		||||
  //return state;
 | 
			
		||||
    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ w r i t e   t o   o l e d                                 │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
bool oled_task_kb(void) {
 | 
			
		||||
    if (!oled_task_user()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (is_keyboard_master()) {  // ────────────────────────── PRIMARY SIDE
 | 
			
		||||
 | 
			
		||||
        // layer status ──────────────────────────────────────────────────┐
 | 
			
		||||
        #ifdef DYNAMIC_MACRO_ENABLE
 | 
			
		||||
            if(dmacro_num == 1){ oled_write_P(rec_ico, false); }
 | 
			
		||||
            if(dmacro_num == 2){ oled_write_P(stop_ico, false); }
 | 
			
		||||
            if(dmacro_num == 3){ oled_write_P(play_ico, false); }
 | 
			
		||||
        #endif //DYNAMIC_MACRO_ENABLE
 | 
			
		||||
 | 
			
		||||
        oled_write_ln(o_text, false);
 | 
			
		||||
        render_os_lock_status();
 | 
			
		||||
 | 
			
		||||
    } else {  // ─────────────────────────────────────────── SECONDARY SIDE
 | 
			
		||||
 | 
			
		||||
        // KLOR face ─────────────────────────────────────────────────────┐
 | 
			
		||||
 | 
			
		||||
        static const char PROGMEM klor_face[] = {
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 
 | 
			
		||||
            0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 
 | 
			
		||||
            0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
 | 
			
		||||
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 | 
			
		||||
        };
 | 
			
		||||
        oled_write_raw_P(klor_face, sizeof(klor_face));
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
#endif // OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case SHT_T:
 | 
			
		||||
            return TAPPING_TERM - 150; 
 | 
			
		||||
        case SHT_N:
 | 
			
		||||
            return TAPPING_TERM - 150;  
 | 
			
		||||
        default:
 | 
			
		||||
            return TAPPING_TERM;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ M A C R O S                                                                                                                                │
 | 
			
		||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
			
		||||
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
 | 
			
		||||
        case OS_SWAP: 
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                if (!keymap_config.swap_lctl_lgui) {
 | 
			
		||||
                  keymap_config.swap_lctl_lgui = true;  // ─── MAC
 | 
			
		||||
                  #ifdef AUDIO_ENABLE
 | 
			
		||||
                    PLAY_SONG(mac_song);
 | 
			
		||||
                  #endif // AUDIO_ENABLE
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                  keymap_config.swap_lctl_lgui = false; // ─── WIN
 | 
			
		||||
                  #ifdef AUDIO_ENABLE
 | 
			
		||||
                    PLAY_SONG(winxp_song);
 | 
			
		||||
                  #endif // AUDIO_ENABLE        
 | 
			
		||||
                }
 | 
			
		||||
              #ifdef HAPTIC_ENABLE
 | 
			
		||||
                DRV_pulse(pulsing_strong);
 | 
			
		||||
              #endif // HAPTIC_ENABLE
 | 
			
		||||
            eeconfig_update_keymap(keymap_config.raw);
 | 
			
		||||
            clear_keyboard();  // ──── clear to prevent stuck keys    
 | 
			
		||||
            return false;
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ l a y e r                                                 │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
        case COLEMAK:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                set_single_persistent_default_layer(_COLEMAK);
 | 
			
		||||
                #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(transition_hum);
 | 
			
		||||
                #endif // HAPTIC_ENABLE
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        case QWERTY:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                set_single_persistent_default_layer(_QWERTY);
 | 
			
		||||
                #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(transition_hum);
 | 
			
		||||
                #endif // HAPTIC_ENABLE
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        case LOWER:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                layer_on(_LOWER);
 | 
			
		||||
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
 | 
			
		||||
            } else {
 | 
			
		||||
                layer_off(_LOWER);
 | 
			
		||||
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        case RAISE:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                layer_on(_RAISE);
 | 
			
		||||
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
 | 
			
		||||
            } else {
 | 
			
		||||
                layer_off(_RAISE);
 | 
			
		||||
                update_tri_layer(_LOWER, _RAISE, _ADJUST);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        case ADJUST:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                layer_on(_ADJUST);
 | 
			
		||||
            } else {
 | 
			
		||||
                layer_off(_ADJUST);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ q m k                                                     │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
        case MAKE_H:
 | 
			
		||||
          if (record->event.pressed) {
 | 
			
		||||
            #ifdef KEYBOARD_klor_2040
 | 
			
		||||
              SEND_STRING ("qmk compile -kb klor/2040 -km geist");
 | 
			
		||||
            #else 
 | 
			
		||||
              SEND_STRING ("qmk compile -kb klor -km geist");
 | 
			
		||||
            #endif
 | 
			
		||||
            tap_code(KC_ENTER); 
 | 
			
		||||
          } 
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ p r o d u c t i v i t y                                   │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
      case WMAIL:
 | 
			
		||||
          if (record->event.pressed) {
 | 
			
		||||
            SEND_STRING ("igit.igit@web.de");
 | 
			
		||||
          } 
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
      case GMAIL:
 | 
			
		||||
          if (record->event.pressed) {
 | 
			
		||||
            SEND_STRING ("igit@gmx.de");
 | 
			
		||||
          } 
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
      case GIPHY:
 | 
			
		||||
          if (record->event.pressed) {
 | 
			
		||||
            SEND_STRING ("@gif ");
 | 
			
		||||
          } 
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
     case SNAP1:
 | 
			
		||||
          if (record->event.pressed) {
 | 
			
		||||
            if (keymap_config.swap_lctl_lgui) {
 | 
			
		||||
              SEND_STRING(SS_LSFT(SS_LCMD("4")));           //MAC
 | 
			
		||||
            } else {
 | 
			
		||||
              SEND_STRING(SS_LWIN(SS_TAP(X_PSCR)));         //WIN
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
      case SNAP2:
 | 
			
		||||
          if (record->event.pressed) {
 | 
			
		||||
            if (keymap_config.swap_lctl_lgui) {
 | 
			
		||||
              SEND_STRING(SS_LSFT(SS_LCMD(SS_LCTL("4"))));  //MAC           
 | 
			
		||||
            } else {
 | 
			
		||||
              SEND_STRING(SS_LSFT(SS_LWIN("S")));           //WIN
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
      case KC_MPLY:
 | 
			
		||||
        if (record->event.pressed) {
 | 
			
		||||
          #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(sharp_click);
 | 
			
		||||
          #endif // HAPTIC_ENABL
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ E N C O D E R                                                                                                                              │
 | 
			
		||||
// └────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
 | 
			
		||||
// ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▘
 | 
			
		||||
 | 
			
		||||
#ifdef ENCODER_ENABLE
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ e n c o d e r  L                                          │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘ 
 | 
			
		||||
 | 
			
		||||
bool encoder_update_user(uint8_t index, bool clockwise) {
 | 
			
		||||
    if (index == 0) {
 | 
			
		||||
        if (clockwise) {
 | 
			
		||||
            tap_code(KC_PGDN);
 | 
			
		||||
        } else {
 | 
			
		||||
            tap_code(KC_PGUP);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
// ┌───────────────────────────────────────────────────────────┐
 | 
			
		||||
// │ e n c o d e r  R                                          │
 | 
			
		||||
// └───────────────────────────────────────────────────────────┘
 | 
			
		||||
 | 
			
		||||
    } else if (index == 1) {
 | 
			
		||||
      if(IS_LAYER_ON(_LOWER)){
 | 
			
		||||
          if (clockwise) {
 | 
			
		||||
              tap_code(KC_MNXT);
 | 
			
		||||
          } else {
 | 
			
		||||
              tap_code(KC_MPRV);
 | 
			
		||||
          }
 | 
			
		||||
      }else {
 | 
			
		||||
            if (clockwise) {
 | 
			
		||||
              tap_code(KC_VOLU);
 | 
			
		||||
          } else {
 | 
			
		||||
              tap_code(KC_VOLD);
 | 
			
		||||
          }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // ENCODER_ENABLE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
                                                       ▐█    ▟▛ ▐█     ▄▆▀▀▀▀▀▀▆▄  ▐█▀▀▀▀▀█▌
 | 
			
		||||
                                                       ▐█   ▟▛  ▐█    ▟▛        ▜▙ ▐█     █▌
 | 
			
		||||
                                                       ▐█  ▟▛   ▐█   ▐█          █▋▐█     █▌
 | 
			
		||||
                                                       ▐█ ▟█▙   ▐█   ▐█          █▋▐█▀▀▜█▀▀▘
 | 
			
		||||
                                                       ▐█▟▛ ▜▙  ▐█    ▜▙        ▟▛ ▐█   ▜▙
 | 
			
		||||
                                                       ▐█▛   ▜▙ ▐█▄▄▄▄ ▀▜▆▄▄▄▄▆▛▀  ▐█    ▜▙
 | 
			
		||||
 | 
			
		||||
                                                                 ▄██████████████▄
 | 
			
		||||
                                                                 ████████████████
 | 
			
		||||
                                                            ▄██████▀  ▀████▀  ▀██████▄
 | 
			
		||||
                                                            ███████▄  ▄████▄  ▄███████
 | 
			
		||||
                                                            ███████████▀▀▀▀███████████
 | 
			
		||||
                                                            ▀█████████▀ ▄▄ ▀█████████▀
 | 
			
		||||
                                                                 ████▀ ▄██▄ ▀████
 | 
			
		||||
                                                                 ████▄▄████▄▄████
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,17 +0,0 @@
 | 
			
		|||
OLED_ENABLE = yes
 | 
			
		||||
OLED_DRIVER = SSD1306
 | 
			
		||||
ENCODER_ENABLE = yes
 | 
			
		||||
EXTRAKEY_ENABLE = yes
 | 
			
		||||
DYNAMIC_MACRO_ENABLE = yes
 | 
			
		||||
COMBO_ENABLE = yes
 | 
			
		||||
KEY_OVERRIDE_ENABLE = yes
 | 
			
		||||
 | 
			
		||||
#HAPTIC FEEBACK
 | 
			
		||||
HAPTIC_ENABLE = yes
 | 
			
		||||
 | 
			
		||||
#PER KEY RGB
 | 
			
		||||
RGB_MATRIX_ENABLE = yes     # Enable keyboard RGB matrix (do not use together with RGBLIGHT_ENABLE)
 | 
			
		||||
 | 
			
		||||
#AUDIO
 | 
			
		||||
AUDIO_ENABLE = yes
 | 
			
		||||
MUSIC_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			@ -20,9 +20,11 @@
 | 
			
		|||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "klor.h"
 | 
			
		||||
//#ifdef HAPTIC_ENABLE
 | 
			
		||||
//#include "drivers/haptic/DRV2605L.h"
 | 
			
		||||
//#endif //HAPTIC ENABLE
 | 
			
		||||
 | 
			
		||||
// this should be handled by common_rules.mk but the code doesn't work without it
 | 
			
		||||
#ifdef HAPTIC_ENABLE
 | 
			
		||||
#include "drivers/haptic/drv2605l.h"
 | 
			
		||||
#endif //HAPTIC ENABLE
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
 | 
			
		||||
| 
						 | 
				
			
			@ -616,7 +618,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
                  #endif // AUDIO_ENABLE        
 | 
			
		||||
                }
 | 
			
		||||
              #ifdef HAPTIC_ENABLE
 | 
			
		||||
                DRV_pulse(pulsing_strong);
 | 
			
		||||
                drv2605l_pulse(DRV2605L_EFFECT_PULSING_STRONG_1_100);
 | 
			
		||||
              #endif // HAPTIC_ENABLE
 | 
			
		||||
            eeconfig_update_keymap(keymap_config.raw);
 | 
			
		||||
            clear_keyboard();  // ──── clear to prevent stuck keys    
 | 
			
		||||
| 
						 | 
				
			
			@ -632,7 +634,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
            if (record->event.pressed) {
 | 
			
		||||
                set_single_persistent_default_layer(_COLEMAK);
 | 
			
		||||
                #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(transition_hum);
 | 
			
		||||
                  drv2605l_pulse(DRV2605L_EFFECT_TRANSITION_HUM_1_100);
 | 
			
		||||
                #endif // HAPTIC_ENABLE
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -640,7 +642,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
            if (record->event.pressed) {
 | 
			
		||||
                set_single_persistent_default_layer(_QWERTY);
 | 
			
		||||
                #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(transition_hum);
 | 
			
		||||
                  drv2605l_pulse(DRV2605L_EFFECT_TRANSITION_HUM_1_100);
 | 
			
		||||
                #endif // HAPTIC_ENABLE
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
| 
						 | 
				
			
			@ -692,7 +694,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
      case KC_MPLY:
 | 
			
		||||
        if (record->event.pressed) {
 | 
			
		||||
          #ifdef HAPTIC_ENABLE
 | 
			
		||||
                  DRV_pulse(sharp_click);
 | 
			
		||||
                  drv2605l_pulse(DRV2605L_EFFECT_SHARP_CLICK_100);
 | 
			
		||||
          #endif // HAPTIC_ENABL
 | 
			
		||||
        }
 | 
			
		||||
        break;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,4 +5,8 @@ COMBO_ENABLE = no
 | 
			
		|||
KEY_OVERRIDE_ENABLE = no
 | 
			
		||||
 | 
			
		||||
#HAPTIC FEEBACK
 | 
			
		||||
HAPTIC_ENABLE = yes
 | 
			
		||||
HAPTIC_ENABLE = yes
 | 
			
		||||
 | 
			
		||||
RGB_MATRIX_ENABLE = yes
 | 
			
		||||
 | 
			
		||||
MUSIC_ENABLE = yes
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue