~ruther/qmk_firmware

aab2bad08966bfea083b9b50486c82dba380a25a — QMK Bot 2 years ago 9f58067 + cd4a265
Merge remote-tracking branch 'origin/master' into develop
A keyboards/ktec/ergodone/keymaps/art/.gitignore => keyboards/ktec/ergodone/keymaps/art/.gitignore +1 -0
@@ 0,0 1,1 @@
*user_config.c
\ No newline at end of file

M keyboards/ktec/ergodone/keymaps/art/keymap.c => keyboards/ktec/ergodone/keymaps/art/keymap.c +107 -100
@@ 1,68 1,51 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#include "art.h"
#include "sendstring_workman_zxcvm.h"

bool is_win = true;

enum custom_keycodes {
  keyboardSpecificKeyCode = NEW_SAFE_RANGE //not used
};

void led_show_current_os(void) {
  if (is_win) {
    ergodox_right_led_1_on();
    wait_ms(50);
    ergodox_right_led_1_off();
    wait_ms(50);
    ergodox_right_led_1_on();
    wait_ms(50);
    ergodox_right_led_1_off();
    wait_ms(50);
    ergodox_right_led_1_on();
    wait_ms(50);
    ergodox_right_led_1_off();
    wait_ms(50);
  } else {
    ergodox_right_led_3_on();
    wait_ms(50);
    ergodox_right_led_3_off();
    wait_ms(50);
    ergodox_right_led_3_on();
    wait_ms(50);
    ergodox_right_led_3_off();
    wait_ms(50);
    ergodox_right_led_3_on();
    wait_ms(50);
    ergodox_right_led_3_off();
    wait_ms(50);
  }
void num_led_on(void) {
  ergodox_right_led_1_on();
}

void matrix_init_user(void) {
  led_show_current_os();
void num_led_off(void) {
  ergodox_right_led_1_off();
}

void led_set_user(uint8_t usb_led) {
  if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
    ergodox_right_led_2_on();
  } else {
    ergodox_right_led_2_off();
  }
void caps_led_on(void) {
  ergodox_right_led_2_on();
}

void caps_led_off(void) {
  ergodox_right_led_2_off();
}

void scroll_led_on(void) {
  ergodox_right_led_3_on();
}

layer_state_t layer_state_set_user(layer_state_t state) {
  ergodox_board_led_off();
  ergodox_right_led_1_off();
void scroll_led_off(void) {
  ergodox_right_led_3_off();
}

layer_state_t layer_state_set_user(layer_state_t state) {
  num_led_off();
  scroll_led_off();
  switch (get_highest_layer(state)) {
    case MEDIA:
    case WORKMAN:
      scroll_led_on();
    case NAV:
    case CTRL_NAV:
    case SHIFT_NAV:
      ergodox_right_led_1_on();
      num_led_on();
      break;
    case FKEYS:
      ergodox_right_led_3_on();
      scroll_led_on();
      break;
  }
  return state;


@@ 74,13 57,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |  ` ~   |   1  |   2  |   3  |   4  |   5  |  ESC |           | - _  |   6  |   7  |   8  |   9  |   0  |   ]    |
 * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
 * | Tab    |   Q  |   W  |   E  |   R  |   T  | ???  |           |  =   |   Y  |   U  |   I  |   O  |   P  |   [    |
 * | Tab    |   Q  |   W  |   E  |   R  |   T  |  \   |           |  =   |   Y  |   U  |   I  |   O  |   P  |   [    |
 * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
 * | Caps   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |  ;   |   '    |
 * |--------+------+------+------+------+------| FKEYS|           | FKEYS|------+------+------+------+------+--------|
 * | LShift |   Z  |   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ,  |   .  | / git| RShift |
 * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
 *   |LCtrl |Media\| Win  |Alt   | NAV  |                                       | Home | End  |Workmn|      | RCtrl|
 *   |  <-  |  ->  | Win  |Alt   | ctrl |                                       | Home | End  |Workmn|      | RCtrl|
 *   `----------------------------------'                                       `----------------------------------'
 *                                        ,-------------.       ,---------------.
 *                                        | Del  |  Ins |       | Left |  Right |


@@ 93,27 76,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[QWERTY] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  KC_GRAVE,         KC_1,         KC_2,       KC_3,       KC_4,              KC_5,      KC_ESCAPE,
  KC_TAB,           KC_Q,         KC_W,       KC_E,       KC_R,              KC_T,      XXXXXXX,
  KC_TAB,           KC_Q,         KC_W,       KC_E,       KC_R,              KC_T,      KC_BSLASH,
  KC_CAPS,          KC_A,         KC_S,       KC_D,       KC_F,              KC_G,
  KC_LSFT,          KC_Z,         KC_X,       KC_C,       KC_V,              KC_B,      TT(FKEYS),
  KC_LCTRL,  LT(MEDIA, KC_BSLASH), KC_LWIN,   KC_LALT,    LT(NAV, KC_RIGHT),
  KC_LEFT,         KC_RIGHT,      KC_LWIN,    KC_LALT,    KC_LCTRL,

                                           KC_DEL,    KC_INS,
                                                      KC_PGUP,
                                  KC_SPC, LT(COMBOS,KC_BSPC), KC_PGDOWN,
                                           KC_INS,    KC_PGUP,
                                                      LT(MEDIA,KC_PGDOWN),
                          LT(NAV,KC_SPC),  KC_BSPC,   LT(COMBOS,KC_DEL),

  // -----------------------------------------------------right hand-----------------------------------------------------
  KC_MINS,          KC_6,         KC_7,       KC_8,       KC_9,              KC_0,      KC_RBRC,
  KC_EQL,           KC_Y,         KC_U,       KC_I,       KC_O,              KC_P,      KC_LBRC,
                    KC_H,         KC_J,       KC_K,       KC_L,              KC_SCLN,   KC_QUOT,
  TT(FKEYS),        KC_N,         KC_M,       KC_COMM,    KC_DOT,        LT(GIT,KC_SLSH), KC_RSFT,
                                  KC_HOME,    KC_END,     DF(WORKMAN),       KC_RALT,   KC_RCTRL,
                                  KC_HOME,    KC_END,     TO(WORKMAN),       KC_RALT,   KC_RCTRL,

    KC_LEFT,                KC_RIGHT,
    LT(SHIFT_NAV, KC_UP),
    LT(CTRL_NAV, KC_DOWN),  MO(NAV),   KC_ENT
    LT(CTRL_NAV, KC_DOWN),  TT(NAV),   KC_ENT
),
 /* Workman
/* Workman
 *
 * ,--------------------------------------------------.           ,--------------------------------------------------.
 * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |


@@ 134,7 117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 *                                 |      |      |      |       |      |        |      |
 *                                 `--------------------'       `----------------------'
 */
[WORKMAN] = LAYOUT_ergodox(  
[WORKMAN] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  _______,          _______,      _______,    _______,    _______,           _______,   _______,
  _______,          KC_Q,         KC_D,       KC_R,       KC_W,              KC_B,      _______,


@@ 150,8 133,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  _______,          _______,      _______,    _______,    _______,           _______,   _______,
  _______,          KC_J,         KC_F,       KC_U,       KC_P,              KC_SCLN,   _______,
                    KC_Y,         KC_N,       KC_E,       KC_O,              KC_I,      _______,
  _______,          KC_K,         KC_L,       KC_COMM,    KC_DOT,            KC_SLSH,   _______,
                                  _______,    _______,    DF(QWERTY),        _______,   _______,
  _______,          KC_K,         KC_L,       _______,    _______,           _______,   _______,
                                  _______,    _______,    TO(QWERTY),        _______,   _______,

    _______,  _______,
    _______,


@@ 160,8 143,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[FKEYS] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  _______,          KC_F1,            KC_F2,            KC_F3,            KC_F4,            KC_F5,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          KC_F1,            KC_F2,            KC_F3,            KC_F4,            KC_F5,            _______,
  _______,          _______,          _______,          _______,          _______,          _______,          KC_LALT,
  _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,


@@ 170,11 153,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                                       _______,
                                  _______,  _______,   _______,
  // -----------------------------------------------------right hand-----------------------------------------------------
  _______,          KC_F6,            KC_F7,            KC_F8,            KC_F9,            KC_F10,           KC_F11,
  _______,          _______,          _______,          _______,          _______,          _______,          KC_F12,
                    _______,          _______,          _______,          _______,          _______,          KC_PSCREEN,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
                    _______,          _______,          _______,          _______,          _______,
  _______,          KC_F6,            KC_F7,            KC_F8,            KC_F9,            KC_F10,           _______,
  KC_LALT,          _______,          _______,          _______,          _______,          _______,          _______,
                    _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          KC_F11,
                    _______,          _______,          _______,          KC_PSCREEN,       KC_F12,

    _______,     _______,
    _______,


@@ 183,20 166,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

[NAV] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  _______,          LALT(KC_F1),      LALT(KC_F2),      LALT(KC_F3),      LALT(KC_F4),      LALT(KC_F5),      _______,
  _______,          _______,          KC_HOME,          KC_UP,            KC_END,           KC_PGUP,          _______,
  _______,          _______,          KC_LEFT,          KC_DOWN,          KC_RIGHT,         KC_PGDOWN,
  _______,          _______,          _______,          _______,          KC_LALT,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,        
  _______,          _______,          _______,          _______,          _______,          _______,      _______,
  _______,          KC_ESC,           KC_HOME,          KC_UP,            KC_END,           KC_PGUP,          _______,
  _______,          XXXXXXX,          KC_LEFT,          KC_DOWN,          KC_RIGHT,         KC_PGDOWN,
  _______,          LCTL(KC_Z),       LCTL(KC_X),       LCTL(KC_C),       LCTL(KC_V),       XXXXXXX,          _______,
  _______,          _______,          _______,          _______,          _______,

                                            _______,   _______,
                                                       _______,
                                  _______,  KC_DEL,    _______,                               
                                  KC_DEL,   _______,   _______,
  // -----------------------------------------------------right hand-----------------------------------------------------
  _______,          LALT(KC_F6),      LALT(KC_F7),      LALT(KC_F8),      LALT(KC_F9),      LALT(KC_F10),     LALT(KC_F11),
  _______,          _______,          _______,          _______,          _______,          _______,          LALT(KC_F12),
                    _______,          CTR_ALT,          KC_RSFT,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          XXXXXXX,          KC_MS_BTN1,       KC_MS_BTN3,       KC_MS_BTN2,       _______,          _______,
                    KC_APP,           CTR_ALT,          KC_RSFT,          CTR_ALT_SHIFT,    _______,          _______,
  _______,          XXXXXXX,          XXXXXXX,          _______,          _______,          _______,          _______,
                    _______,          _______,          _______,          _______,          _______,

    _______,     _______,


@@ 209,7 192,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          CTL_ALT(KC_HOME), CTL_ALT(KC_UP),   CTL_ALT(KC_END),  CTL_ALT(KC_PGUP), _______,
  _______,          _______,          CTL_ALT(KC_LEFT), CTL_ALT(KC_DOWN), CTL_ALT(KC_RIGHT),CTL_ALT(KC_PGDOWN),
  _______,          _______,          CTL_ALT(KC_X),    CTL_ALT(KC_C),    CTL_ALT(KC_V),    _______,          _______,
  _______,          _______,          LCTL(KC_X),       LCTL(KC_C),       LCTL(KC_V),    _______,          _______,
  _______,          _______,          _______,          _______,          _______,

                                            CTL_ALT(KC_DEL),  _______,


@@ 232,7 215,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          LSFT(KC_HOME),    LSFT(KC_UP),      LSFT(KC_END),     LSFT(KC_PGUP),    _______,
  _______,          _______,          LSFT(KC_LEFT),    LSFT(KC_DOWN),    LSFT(KC_RIGHT),   LSFT(KC_PGDOWN),
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          LCTL(KC_X),       LCTL(KC_C),       LCTL(KC_V),       _______,          _______,
  _______,          _______,          _______,          _______,          _______,

                                            _______,   _______,


@@ 252,12 235,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    CTR_ALT,       _______,    _______
),

[COMBOS] = LAYOUT_ergodox(  
[COMBOS] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  TILD_BLOCK,       PRESCRIPTION,          _______,          _______,          FOURS,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          ADMINS,          SARCASM,          _______,          CTRL_CTV,         _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  TILD_BLOCK,       _______,          QUOTES_RU,        K_CUST1,          K_CUST2,          K_CUST3,          _______,
  _______,          _______,          _______,          NEUTRAL_COPY,     _______,          BEAT_BROWSER,     _______,
  _______,          ADMINS,           SARCASM,          ALL_BEST,         CTRL_CTV,         _______,
  _______,          _______,          _______,          CTRL_CAV,         _______,          LMB_SPAM,         _______,
  _______,          _______,          _______,          _______,          _______,

                                            _______,   _______,


@@ 265,9 248,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
                                  _______,  _______,   _______,

  // -----------------------------------------------------right hand-----------------------------------------------------
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
                    _______,          _______,          _______,          _______,          _______,          _______,
  DASHES,           _______,          _______,          STARS,            PARENTHS,         _______,          TOG_OS,
  _______,          K_SECR1,          K_SECR2,          K_SECR3,          K_SECR4,          _______,          BRACES,
                    AT_EMAIL,         _______,          _______,          _______,          _______,          QUOTES,
  _______,          _______,          CTRL_LCTV,        _______,          _______,          _______,          _______,
                    _______,          _______,          _______,          _______,          _______,



@@ 276,7 259,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    _______,     _______,    _______
),

// [STRINGS] = LAYOUT_ergodox(  
// [STRINGS] = LAYOUT_ergodox(
//   // -----------------------------------------------------left hand-----------------------------------------------------
//   _______,          _______,          _______,          _______,          _______,          _______,          _______,
//   _______,          _______,          _______,          _______,          _______,          _______,          _______,


@@ 300,12 283,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//     _______,     _______,    _______
// ),

[MEDIA] = LAYOUT_ergodox(  
[MEDIA] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          KC_MPRV,          KC_VOLU,          KC_MNXT,          _______,          _______,
  _______,          _______,          _______,          KC_VOLD,          _______,          _______,
  _______,          _______,          _______,          KC_MUTE,          KC_MPLY,          _______,          _______,
  XXXXXXX,          KC_MPRV,          KC_VOLU,          KC_MNXT,          _______,          _______,          _______,
  _______,          _______,          KC_VOLD,          _______,          _______,          _______,
  _______,          _______,          KC_MUTE,          KC_MPLY,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,

                                            _______,   _______,


@@ 315,7 298,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  // -----------------------------------------------------right hand-----------------------------------------------------
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
                    _______,          _______,          _______,          TOG_OS,           _______,          _______,
                    _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
                    _______,          _______,          _______,          _______,          _______,



@@ 324,12 307,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    _______,     _______,    _______
),

[GIT] = LAYOUT_ergodox(  
[GIT] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          G_DIFF,           G_RST,            _______,          G_BRCH,          _______,
  _______,          _______,          G_DIFF,           G_R,              _______,          G_BRCH,          _______,
  _______,          G_ADD,            G_S,              _______,          _______,          _______,
  _______,          _______,          _______,          G_C,              _______,          G_MERG,          _______,
  _______,          G_DEV,            _______,          G_C,              _______,          G_MERG,          _______,
  _______,          _______,          _______,          _______,          _______,

                                            _______,   _______,


@@ 338,9 321,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

  // -----------------------------------------------------right hand-----------------------------------------------------
  _______,          _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          G_FTCH,           _______,          G_P,              _______,          _______,
  _______,          _______,          G_FTCH,           G_PULL,           G_PUSH,           _______,          _______,
                    _______,          _______,          _______,          _______,          _______,          _______,
  _______,          _______,          G_LOG,            _______,          G_DEV,            _______,          _______,
  _______,          _______,          G_LOG,            _______,          XXXXXXX,          _______,          _______,
                    _______,          _______,          _______,          _______,          _______,

    _______,     _______,


@@ 348,13 331,37 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
    _______,     _______,    _______
),

[GIT_C] = LAYOUT_ergodox(  
[GIT_C] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          G_CHEC,           XXXXXXX,          XXXXXXX,
  _______,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,

                                            XXXXXXX,   XXXXXXX,
                                                       XXXXXXX,
                                  XXXXXXX,  KC_BSPC,   XXXXXXX,

  // -----------------------------------------------------right hand-----------------------------------------------------
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          G_COMM,           XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,

    XXXXXXX,     XXXXXXX,
    XXXXXXX,
    XXXXXXX,     XXXXXXX,    XXXXXXX
),

[GIT_R] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          G_RBASE,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          G_RST,            XXXXXXX,          XXXXXXX,          XXXXXXX,
  _______,          XXXXXXX,          XXXXXXX,          XXXXXXX,          G_RVERT,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,

                                            XXXXXXX,   XXXXXXX,
                                                       XXXXXXX,


@@ 365,20 372,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          G_COMM,           XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,

    XXXXXXX,     XXXXXXX,
    XXXXXXX,
    XXXXXXX,     XXXXXXX,    XXXXXXX
),

[GIT_S] = LAYOUT_ergodox(  
[GIT_S] = LAYOUT_ergodox(
  // -----------------------------------------------------left hand-----------------------------------------------------
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          G_STSH,           G_SHOW,           G_STAT,           XXXXXXX,
  _______,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,

                                            XXXXXXX,   XXXXXXX,
                                                       XXXXXXX,


@@ 389,7 396,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          G_COMM,           XXXXXXX,          XXXXXXX,
  XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,
                    XXXXXXX,          XXXXXXX,          XXXXXXX,          XXXXXXX,          _______,

    XXXXXXX,     XXXXXXX,
    XXXXXXX,


@@ 412,7 419,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 *                         `----------------------------------'
 */

// [] = LAYOUT_ergodox(  
// [] = LAYOUT_ergodox(
//   // -----------------------------------------------------left hand-----------------------------------------------------
//   _______,          _______,          _______,          _______,          _______,          _______,          _______,
//   _______,          _______,          _______,          _______,          _______,          _______,          _______,

A keyboards/ktec/ergodone/keymaps/art/rules.mk => keyboards/ktec/ergodone/keymaps/art/rules.mk +1 -0
@@ 0,0 1,1 @@
SRC += user_config.c

A keyboards/ktec/ergodone/keymaps/art/user_config.c.example => keyboards/ktec/ergodone/keymaps/art/user_config.c.example +6 -0
@@ 0,0 1,6 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

bool is_win = true;

M keyboards/mt/split75/config.h => keyboards/mt/split75/config.h +5 -0
@@ 1,3 1,6 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

/* matrix size */


@@ 13,3 16,5 @@
#define RGBLIGHT_SLEEP

#define BACKLIGHT_PIN D4

#define I2C_START_RETRY_COUNT 1
\ No newline at end of file

A keyboards/mt/split75/keymaps/art/.gitignore => keyboards/mt/split75/keymaps/art/.gitignore +1 -0
@@ 0,0 1,1 @@
*user_config.c
\ No newline at end of file

A keyboards/mt/split75/keymaps/art/config.h => keyboards/mt/split75/keymaps/art/config.h +10 -0
@@ 0,0 1,10 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#undef RGBLIGHT_ANIMATIONS
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_STATIC_GRADIENT

// #define DYNAMIC_MACRO_SIZE 48
\ No newline at end of file

M keyboards/mt/split75/keymaps/art/keymap.c => keyboards/mt/split75/keymaps/art/keymap.c +89 -93
@@ 1,64 1,50 @@
#include <art.h>
#include <sendstring_workman_zxcvm.h>
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

bool is_win = false;
#include "art.h"
#include "sendstring_workman_zxcvm.h"

enum custom_keycodes {
  keyboardSpecificKeyCode = NEW_SAFE_RANGE //not used atm
};

bool led_update_user(led_t led_state) {
  writePin(CAPSLOCK_LED_PIN, led_state.caps_lock);
  return false;
void num_led_on(void) {
  writePinHigh(LED_NUM_LOCK_PIN);
}

void led_show_current_os(void) {
  if (is_win) {
    writePinHigh(NUMLOCK_LED_PIN);
    wait_ms(50);
    writePinLow(NUMLOCK_LED_PIN);
    wait_ms(50);
    writePinHigh(NUMLOCK_LED_PIN);
    wait_ms(50);
    writePinLow(NUMLOCK_LED_PIN);
    wait_ms(50);
    writePinHigh(NUMLOCK_LED_PIN);
    wait_ms(50);
    writePinLow(NUMLOCK_LED_PIN);
    wait_ms(50);
  } else {
    writePinHigh(SCROLLLOCK_LED_PIN);
    wait_ms(50);
    writePinLow(SCROLLLOCK_LED_PIN);
    wait_ms(50);
    writePinHigh(SCROLLLOCK_LED_PIN);
    wait_ms(50);
    writePinLow(SCROLLLOCK_LED_PIN);
    wait_ms(50);
    writePinHigh(SCROLLLOCK_LED_PIN);
    wait_ms(50);
    writePinLow(SCROLLLOCK_LED_PIN);
    wait_ms(50);
  }
void num_led_off(void) {
  writePinLow(LED_NUM_LOCK_PIN);
}

void caps_led_on(void) {
  writePinHigh(LED_CAPS_LOCK_PIN);
}

void caps_led_off(void) {
  writePinLow(LED_CAPS_LOCK_PIN);
}

void keyboard_pre_init_user(void) {
  led_show_current_os();
  
  layer_state_set_user(layer_state);
void scroll_led_on(void) {
  writePinHigh(LED_SCROLL_LOCK_PIN);
}

void scroll_led_off(void) {
  writePinLow(LED_SCROLL_LOCK_PIN);
}

layer_state_t layer_state_set_user(layer_state_t state) {
  writePinLow(NUMLOCK_LED_PIN);
  writePinLow(SCROLLLOCK_LED_PIN);
  num_led_off();
  scroll_led_off();
  switch (get_highest_layer(state)) {
    case MEDIA:
      writePinHigh(SCROLLLOCK_LED_PIN);
    case WORKMAN:
      scroll_led_on();
    case BASE:
      writePinHigh(NUMLOCK_LED_PIN);
    case NAV:
      num_led_on();
      break;
    case NUMPAD:
      writePinHigh(SCROLLLOCK_LED_PIN);
      scroll_led_on();
      break;
  }
  return state;


@@ 82,12 68,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  */
  [QWERTY] = LAYOUT(
//--------------------------------Left Hand------------------------------------| |--------------------------------Right Hand------------------------------------------------
                 KC_ESC,   KC_F1,   KC_F2,   KC_F3,  KC_F4,  KC_F5,  KC_F6,                KC_F7,  KC_F8,   KC_F9,  KC_F10,  KC_F11,   KC_F12,   LT(CONFIG, KC_PSCR),  KC_INS,  KC_HOME,
                 KC_ESC,   KC_MPLY, KC_F2,   KC_F3,  KC_F4,  KC_F5,  KC_F6,                KC_F7,  KC_F8,   KC_F9,  KC_F10,  KC_F11,   KC_F12,   LT(CONFIG, KC_PSCR),  KC_INS,  KC_HOME,
KC_VOLD,KC_VOLU, KC_GRAVE, KC_1,    KC_2,    KC_3,   KC_4,   KC_5,   KC_6,                 KC_7,   KC_8,    KC_9,   KC_0,    KC_MINUS, KC_EQUAL, KC_BSPC,          KC_DEL,
KC_MPRV,KC_MNXT, KC_TAB,   KC_Q,    KC_W,    KC_E,   KC_R,   KC_T,                 KC_Y,   KC_U,   KC_I,    KC_O,   KC_P,    KC_LBRC,  KC_RBRC,  KC_BSLS,           KC_END,
KC_HOME,KC_END,  KC_CAPS,  KC_A,    KC_S,    KC_D,   KC_F,   KC_G,   KC_H,   KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENTER,         KC_PGUP,
DYN_MACRO_PLAY1,MO(STRINGS),KC_LSFT,KC_Z,KC_X,KC_C,  KC_V,   KC_B,                 KC_N,   KC_M,   KC_COMM, KC_DOT, LT(GIT,KC_SLSH),                     KC_RSFT,  KC_UP,   KC_PGDN,
DYN_REC_STOP,DYN_REC_START1,KC_LCTL, KC_LGUI, KC_LALT, LT(MEDIA,KC_SPC), LT(COMBOS,KC_BSPC),            LT(NAV, KC_ENTER),        KC_RALT, MO(LAYOUT_CHG),KC_RCTL,                     KC_LEFT,  KC_DOWN, KC_RIGHT
DYN_MACRO_PLAY1,KC_MUTE,KC_LSFT,KC_Z,KC_X,KC_C,  KC_V,   KC_B,                 KC_N,   KC_M,   KC_COMM, KC_DOT, LT(GIT,KC_SLSH),                     KC_RSFT,  KC_UP,   KC_PGDN,
DYN_REC_STOP,DYN_REC_START1,KC_LCTL, KC_LGUI, KC_LALT, LT(MEDIA,KC_SPC), LT(COMBOS,KC_BSPC),       LT(NAV,KC_APP), LT(LAYOUT_CHG, KC_ENTER),KC_RALT,KC_RCTL,   KC_LEFT,  KC_DOWN, KC_RIGHT
  ),

  /* Base          ,-----------------------------------------.     ,-----------------------------------------------------.


@@ 111,7 97,7 @@ KC_8,  KC_9,    KC_GRAVE, KC_1,    KC_2,    KC_3,   KC_4,   KC_5,   KC_6,       
KC_6,  KC_7,    KC_TAB,   KC_Q,    KC_W,    KC_E,   KC_R,   KC_T,                 KC_Y,   KC_U,   KC_I,    KC_O,   KC_P,    KC_LBRC,  KC_RBRC,  KC_BSLS,           KC_END,
KC_4,  KC_5,    KC_CAPS,  KC_A,    KC_S,    KC_D,   KC_F,   KC_G,                 KC_H,   KC_J,   KC_K,    KC_L,   KC_SCLN, KC_QUOT,  KC_ENTER,                    KC_PGUP,
KC_2,  KC_3,    KC_LSFT,  KC_Z,    KC_X,    KC_C,   KC_V,   KC_B,                 KC_N,   KC_M,   KC_COMM, KC_DOT, KC_SLSH,                     KC_RSFT,  KC_UP,   KC_PGDN,
KC_0,  KC_1,    OS_CTRL,  OS_WIN,  KC_LALT, KC_SPC, KC_SPC,                       KC_SPC,         KC_RALT, MO(QWERTY_MOD),  KC_RCTL,            KC_LEFT,  KC_DOWN, KC_RIGHT
KC_0,  KC_1,    OS_CTRL,  OS_WIN,  KC_LALT, KC_SPC, KC_SPC,                       KC_SPC,      MO(QWERTY_MOD), KC_RALT, KC_RCTL,           KC_LEFT,  KC_DOWN, KC_RIGHT
  ),

  [WORKMAN] = LAYOUT(


@@ 121,19 107,19 @@ _______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,
_______,  _______,    _______,  KC_Q,     KC_D,     KC_R,     KC_W,     KC_B,                 KC_J,     KC_F,      KC_U,     KC_P,     KC_SCLN,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  KC_A,     KC_S,     KC_H,     KC_T,     KC_G,                 KC_Y,     KC_N,      KC_E,     KC_O,     KC_I,     _______,  _______,           _______,
_______,  _______,    _______,  KC_Z,     KC_X,     KC_C,     KC_V,     KC_M,                 KC_K,     KC_L,      KC_COMM,  KC_DOT,   _______,                      _______, _______,  _______,
_______,  _______,    _______, _______,   _______,  _______,  _______,                        _______,             _______,  TO(QWERTY), _______,           _______, _______,  _______
_______,  _______,    _______, _______,   _______,  _______,  LT(COMBOS,KC_BSPC),       LT(NAV,KC_APP), LT(LAYOUT_CHG, KC_ENTER), TO(QWERTY), _______,               _______,  _______, _______
  ),
  

  [NAV] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
KC_8,  KC_9,    _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
KC_6,  KC_7,    _______,  _______,  KC_HOME,  KC_UP,    KC_END,   KC_PGUP,              _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
KC_4,  KC_5,    _______,  _______,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_PGDOWN,            _______,  CTR_ALT,   KC_RSFT,  _______,  _______,  _______,  _______,            _______,
KC_2,  KC_3,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______,  _______, _______,
KC_6,  KC_7,    _______,  KC_ESC,   KC_HOME,  KC_UP,    KC_END,   KC_PGUP,              XXXXXXX, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2, XXXXXXX,  _______,  _______,  _______,           _______,
KC_4,  KC_5,    _______,  XXXXXXX,  KC_LEFT,  KC_DOWN,  KC_RIGHT, KC_PGDOWN,            KC_APP,  CTR_ALT, KC_RSFT, CTR_ALT_SHIFT, _______, _______, _______,          _______,
KC_2,  KC_3,    _______,  XXXXXXX, LCTL(KC_X),LCTL(KC_C),LCTL(KC_V), XXXXXXX,           XXXXXXX,  XXXXXXX,   _______,  _______,  _______,                      _______,  _______, _______,
KC_0,  KC_1,    _______,  _______,  _______,  KC_DEL,   _______,                        _______,             _______,  _______,  _______,            _______,  _______,  _______
  ),
  

  [MEDIA] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,


@@ 141,57 127,57 @@ _______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,
_______,  _______,    _______,  KC_MPRV,  KC_VOLU,  KC_MNXT,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  KC_VOLD,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
_______,  _______,    _______,  _______,  KC_MUTE,  KC_MPLY,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______, _______,   _______,                      _______, _______,  _______
_______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______,  _______,  _______,                      _______, _______,  _______
  ),
  

  [COMBOS] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  SARCASM,  _______,  CTRL_CTV, _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
_______,  _______,    _______,  _______,  _______,  CTRL_CAV, _______,  _______,              _______,  CTRL_LCTV, _______,  _______,  _______,                      _______, _______,  _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______, _______,   _______,                      _______, _______,  _______
_______, _______,  TILD_BLOCK,  _______, QUOTES_RU, K_CUST1, K_CUST2, K_CUST3, _______,                 _______,   STARS,    PARENTHS, _______,  DASHES,   _______,  _______,           _______,
_______,  _______,    _______,  _______,  _______, NEUTRAL_COPY, _______, BEAT_BROWSER,      K_SECR1,  K_SECR2,   K_SECR3,  K_SECR4,  _______,  BRACES,   TOG_OS,   _______,           _______,
_______,  _______,    _______,  ADMINS,   SARCASM,  ALL_BEST,CTRL_CTV, _______,              AT_EMAIL, _______,   _______,  _______,  _______,  QUOTES,   _______,                     _______,
_______,  _______,    _______,  _______,  _______,  CTRL_CAV, _______,  XXXXXXX,              _______,  CTRL_LCTV, _______,  _______,  _______,                      _______, _______,  _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______,  _______,  _______,                      _______, _______,  _______
  ),
  
  [STRINGS] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
_______,  _______,    TILD_BLOCK, PRESCRIPTION,  _______,  _______,  FOURS,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  ADMINS,   _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______, _______,   _______,                      _______, _______,  _______
  ),  

//   [STRINGS] = LAYOUT(
// //--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
//                       _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
// _______,  _______,    TILD_BLOCK, _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
// _______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
// _______,  _______,    _______,  ADMINS,   _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
// _______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
// _______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______, _______,   _______,                      _______, _______,  _______
//   ),

  [QWERTY_MOD] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
                      _______,  _______,  KC_VOLD,  KC_VOLU,  KC_MUTE,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  KC_MPRV,  KC_VOLU,  KC_MNXT,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  KC_VOLD,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
_______,  _______,    _______,  _______,  KC_MUTE,  KC_MPLY,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
_______,  _______,    TO(QWERTY),_______, _______,  _______,  _______,                        _______,             _______, _______,   _______,                      _______, _______,  _______
_______,  _______,   TO(QWERTY),_______,  _______,  _______,  _______,                        _______,             _______,  _______,  _______,                      _______, _______,  _______
  ),
  

  [LAYOUT_CHG] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
                      _______,  KC_F1,    _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  CTL_ALT(KC_HOME),  CTL_ALT(KC_UP),    CTL_ALT(KC_END),   CTL_ALT(KC_PGUP),              _______,  _______,_______, _______,_______,_______,_______,  _______,           _______,
_______,  _______,    _______,  _______,  CTL_ALT(KC_LEFT),  CTL_ALT(KC_DOWN),  CTL_ALT(KC_RIGHT), CTL_ALT(KC_PGDOWN),              _______,_______,_______,_______,_______,  _______,  _______,           _______,
_______,  _______,    TO(WORKMAN),  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
_______, _______, TO(WORKMAN),  LCTL(KC_Z), LCTL(KC_X),      LCTL(KC_C),        LCTL(KC_V),        _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
TO(NUMPAD), TO(NUMPAD), TO(BASE),  _______,  _______,  _______,  CTL_ALT(KC_BSPC),                KC_LSFT,             _______, _______, _______,                      _______, _______,  _______
  ),  
  
  ),

  [CONFIG] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
RGB_VAI,  RGB_VAD,    RGB_MODE_PLAIN,  RGB_MODE_BREATHE,  RGB_MODE_RAINBOW,  RGB_MODE_SWIRL,  RGB_MODE_SNAKE,  RGB_MODE_KNIGHT,  RGB_MODE_XMAS,              RGB_MODE_GRADIENT,   RGB_MODE_RGBTEST,  XXXXXXX,  XXXXXXX,  _______,  _______,  _______,           _______,
RGB_SAI,  RGB_SAD,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  TOG_OS,  _______,  _______,  _______,  _______,           _______,
RGB_HUI,  RGB_HUD,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
RGB_MOD,  RGB_RMOD,   _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
RGB_TOG,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______, _______,   _______,                      _______, _______,  _______
RGB_VAD,  RGB_VAI,    RGB_MODE_PLAIN,  RGB_MODE_BREATHE,  RGB_MODE_RAINBOW,  RGB_MODE_SWIRL,  RGB_MODE_SNAKE,  RGB_MODE_KNIGHT,  RGB_MODE_XMAS,  RGB_MODE_GRADIENT,   RGB_MODE_RGBTEST,  XXXXXXX,  XXXXXXX,  _______,  _______,  _______,           _______,
RGB_SAD,  RGB_SAI,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  XXXXXXX,  _______,  _______,  _______,  _______,           _______,
RGB_HUD,  RGB_HUI,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
RGB_RMOD, RGB_MOD,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
RGB_TOG,  XXXXXXX,    _______,  _______,  _______,  _______,  _______,                        _______,             _______,  _______,  _______,                      _______, _______,  _______
  ),

  [NUMPAD] = LAYOUT(


@@ 203,17 189,17 @@ KC_4,  KC_5,    _______,  _______,  _______,  _______,  _______,  _______,      
KC_2,  KC_3,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
KC_0,  KC_1,    _______,  _______,  _______,  _______,  _______,                        _______,             _______, TO(QWERTY),_______,                      _______, _______,  _______
  ),
  

  [GIT] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,  _______, _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,  _______,              _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  G_DIFF,   G_RST,    _______,  G_BRCH,               _______,   G_FTCH,   _______,  G_P,      _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  _______,  G_DIFF,   G_R,      _______,  G_BRCH,               _______,   G_FTCH,   G_PULL,   G_PUSH,   _______,  _______,  _______,  _______,           _______,
_______,  _______,    _______,  G_ADD,    G_S,      _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
_______,  _______,    _______,  _______,  _______,  G_C,      _______,  G_MERG,               _______,   G_LOG,    _______,  G_DEV,    _______,                      _______, _______,  _______,
_______,  _______,    _______,  G_DEV,    _______,  G_C,      _______,  G_MERG,               _______,   G_LOG,    _______,  XXXXXXX,  _______,                      _______, _______,  _______,
_______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______,  _______,  _______,                      _______, _______,  _______
  ),
  

  [GIT_C] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX, XXXXXXX,


@@ 221,9 207,19 @@ XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,           XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  G_CHEC,   XXXXXXX,  XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  G_COMM,   XXXXXXX,  XXXXXXX,  XXXXXXX,                     XXXXXXX,
XXXXXXX,  XXXXXXX,    _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,                      _______, XXXXXXX,  XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  KC_BSPC,                        XXXXXXX,             XXXXXXX,  XXXXXXX,  XXXXXXX,                      XXXXXXX, XXXXXXX,  XXXXXXX
XXXXXXX,  XXXXXXX,    _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  KC_BSPC,                        XXXXXXX,             XXXXXXX,  XXXXXXX,  _______,                      XXXXXXX, XXXXXXX,  XXXXXXX
  ),

  [GIT_R] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX, XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  _______,           XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  G_RBASE,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,           XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  G_RST,    XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,                     XXXXXXX,
XXXXXXX,  XXXXXXX,    _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  G_RVERT,  XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,                      _______, XXXXXXX,  XXXXXXX,
XXXXXXX,  XXXXXXX,    _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  KC_BSPC,                        XXXXXXX,             XXXXXXX,  XXXXXXX,  _______,                      XXXXXXX, XXXXXXX,  XXXXXXX
  ),
  

  [GIT_S] = LAYOUT(
//--------------------------------Left Hand-----------------------------------------------| |--------------------------------Right Hand------------------------------------------------
                      XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX, XXXXXXX,


@@ 231,9 227,9 @@ XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,           XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  G_STSH,   G_SHOW,   G_STAT,   XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,                     XXXXXXX,
XXXXXXX,  XXXXXXX,    _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,              XXXXXXX,  XXXXXXX,   XXXXXXX,  XXXXXXX,  XXXXXXX,                      _______, XXXXXXX,  XXXXXXX,
XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  KC_BSPC,                        XXXXXXX,             XXXXXXX, XXXXXXX,   XXXXXXX,                      XXXXXXX, XXXXXXX,  XXXXXXX
  ),   
  
XXXXXXX,  XXXXXXX,    _______,  XXXXXXX,  XXXXXXX,  XXXXXXX,  KC_BSPC,                        XXXXXXX,             XXXXXXX,  XXXXXXX,  _______,                      XXXXXXX, XXXXXXX,  XXXXXXX
  ),

 /*                ,-----------------------------------------.     ,-----------------------------------------------------.
  *                |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |     |
  * ,-----------.  |-----+-----+-----+-----+-----+-----+-----|     |-----+-----+-----+-----+-----+-----+-----------+-----|


@@ 255,7 251,7 @@ XXXXXXX,  XXXXXXX,    XXXXXXX,  XXXXXXX,  XXXXXXX,  XXXXXXX,  KC_BSPC,          
// _______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,  _______,           _______,
// _______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,  _______,  _______,                     _______,
// _______,  _______,    _______,  _______,  _______,  _______,  _______,  _______,              _______,  _______,   _______,  _______,  _______,                      _______, _______,  _______,
// _______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______, _______,   _______,                      _______, _______,  _______
// _______,  _______,    _______,  _______,  _______,  _______,  _______,                        _______,             _______,  _______,  _______,                      _______, _______,  _______
  // ),
};



@@ 264,4 260,4 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {

  }
  return true;
}
\ No newline at end of file
}

M keyboards/mt/split75/keymaps/art/rules.mk => keyboards/mt/split75/keymaps/art/rules.mk +3 -1
@@ 1,1 1,3 @@
DYNAMIC_MACRO_ENABLE = yes
\ No newline at end of file
SRC += user_config.c

# DYNAMIC_MACRO_ENABLE = yes # doesn't work atm

A keyboards/mt/split75/keymaps/art/user_config.c.example => keyboards/mt/split75/keymaps/art/user_config.c.example +6 -0
@@ 0,0 1,6 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

bool is_win = true;

M keyboards/mt/split75/keymaps/default/keymap.c => keyboards/mt/split75/keymaps/default/keymap.c +3 -0
@@ 1,3 1,6 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#include QMK_KEYBOARD_H

enum layer_names {

M keyboards/mt/split75/split75.c => keyboards/mt/split75/split75.c +3 -0
@@ 1,1 1,4 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#include "split75.h"

M keyboards/mt/split75/split75.h => keyboards/mt/split75/split75.h +3 -0
@@ 1,3 1,6 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "quantum.h"

A users/art/.gitignore => users/art/.gitignore +3 -0
@@ 0,0 1,3 @@
*user_config.*
custom_definitions.h
secr.h

M users/art/art.c => users/art/art.c +509 -251
@@ 1,103 1,116 @@
#include "art.h"
#include "string.h"
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

__attribute__ ((weak))
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  return true;
}
#include "art.h"
#include "custom_definitions.h"
#include "secr.h"
#include "funcs/led_funcs.h"
#include "funcs/string_funcs.h"

__attribute__ ((weak))
void led_show_current_os(void) {
}
static const int COPY_DELAY = 50;
static const int INCOGNITO_DELAY = 500;
static const int LMB_SPAM_INTERVAL = 30;
static const uint8_t OS_MOD_KEYS[2] = {MOD_LALT, MOD_LCTL};

static bool mac_ctrl_on = false; //for switching tabs
static bool mac_gui_on = false; //for switching languages
static bool mac_alt_tab_on = false; //for switching windows
bool mac_ctrl_on = false; //for switching tabs
bool mac_gui_on = false; //for switching languages
bool mac_alt_window_switching_on = false; //for switching windows

static const char *key_up[2] = {SS_UP(X_LALT), SS_UP(X_LCTL)};
static const char *key_down[2] = {SS_DOWN(X_LALT), SS_DOWN(X_LCTL)};
int char_to_bspace = 1;
int char_to_del = 0;

int char_to_del = 1;
static bool sarcasm_on = false;
static bool sarcasm_key = false;
static bool full_caps_mode = false;
bool hw_caps_on;

void backspace_n_times(int times) {
  for (int i=0; i<times; i++) {
    SEND_STRING(SS_TAP(X_BSPC));  
  }
}
static bool is_lmb_timer_active = false;
static uint16_t lmb_timer = 0;

void send_string_remembering_length(char *string) {
  send_string(string);
  char_to_del = strlen(string);
__attribute__ ((weak))
bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
  return true;
}

void send_shifted_strings(char *string1, char *string2) {
  if ( get_mods() & MOD_MASK_SHIFT ) {
    clear_mods();
    send_string_remembering_length(string2);
  } else {
    send_string_remembering_length(string1);
  }
void keyboard_post_init_user(void) {
  led_show_variable_status(is_win);
  layer_state_set_user(layer_state);
}

void send_shifted_strings_add(char *string1, char *string2) {
  bool shifted = get_mods() & MOD_MASK_SHIFT;
  clear_mods();

  send_string_remembering_length(string1);

  if (shifted) {
    send_string(string2);
    char_to_del = strlen(string1) + strlen(string2);
void matrix_scan_user(void) {
  if (is_lmb_timer_active) {
    if (timer_elapsed(lmb_timer) > LMB_SPAM_INTERVAL) {
      SEND_STRING(SS_TAP(X_BTN1)); //do stuff that needs spamming
      lmb_timer = timer_read();
    }
  }
}

bool is_mac_with_base_layer_off(void) {
  return !is_win && !layer_state_is(BASE);
bool caps_word_on(void) {
  return hw_caps_on && !full_caps_mode;
}


bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  if (sarcasm_on) {
    sarcasm_key = ! sarcasm_key;  
    if (sarcasm_key) {
      SEND_STRING(SS_TAP(X_CAPS));
  if (record->event.pressed) {
    if (sarcasm_on) {
      sarcasm_key = ! sarcasm_key;
      del_mods(MOD_LSFT);
      if (sarcasm_key) {
        add_mods(MOD_LSFT);
      }
    }
  }

  //Checking all other non-backspace keys to clear the backspace buffer. This is to prevent the bug of deleting N chars sometime after using a macro
  if (record->event.pressed && (keycode != KC_BSPACE && keycode != XXXXXXX)) {
    char_to_del = 1;
    //Checking all other non-backspace keys to clear the backspace buffer. This is to prevent the bug of deleting N chars sometime after using a macro
    switch (keycode) {
      case LT(COMBOS,KC_BSPC):
      case KC_BSPACE:
      case KC_DEL:
      case KC_LSFT:
      case KC_RSFT:
      case XXXXXXX:
        break;
      default:
        char_to_bspace = 1;
        char_to_del = 0;
        break;
    }
  }

  switch (keycode) {
    case XXXXXXX:
      if (record->event.pressed && !layer_state_is(BASE)) {
        blink_leds(NUM_SCROLL_LED_ON);
        return true;
      }
      break;
    case KC_TAB:
      if (record->event.pressed && is_mac_with_base_layer_off()) {
        uint8_t mods = get_mods();
        uint8_t mod_state = mods & MOD_MASK_ALT;
        if (get_mods() & mod_state) {
          del_mods(mod_state);
          add_mods(MOD_LCTL);
          mac_alt_tab_on = true;
        }

        mod_state = mods & MOD_MASK_CTRL;
        if (get_mods() & mod_state && !mac_alt_tab_on) {
        uint8_t mod_state = get_mods() & MOD_MASK_CTRL;
        if (get_mods() & mod_state && !mac_alt_window_switching_on) {
          del_mods(mod_state);
          add_mods(MOD_LGUI);
          mac_ctrl_on = true;
        }
      }
    case KC_GRAVE:
      if (record->event.pressed && is_mac_with_base_layer_off()) {
        uint8_t mod_state = get_mods() & MOD_MASK_ALT;
        if (get_mods() & mod_state) {
          del_mods(mod_state);
          add_mods(MOD_LCTL);
          mac_alt_window_switching_on = true;
        }
      }
      break;
    case KC_LSFT:
      if (record->event.pressed && is_mac_with_base_layer_off()) {
        uint8_t mods = get_mods();
        uint8_t mod_state = mods & MOD_MASK_AG;
      if (record->event.pressed && is_mac_with_base_layer_off() && !mac_ctrl_on) {
        uint8_t mod_state = get_mods() & MOD_MASK_AG;
        if (get_mods() & mod_state) {
          del_mods(mod_state);
          add_mods(MOD_LGUI);
          mac_gui_on = true;
          SEND_STRING(SS_TAP(X_SPACE));
          send_string(lang_switch_combo);
          return false;
        } else {
          return true;


@@ 110,27 123,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        /* && !mac_ctrl_on/!mac_alt_tab_on are required since setting the state while holding the key changes
        the modifier from OS's perspective. As a result, just the pressed key cannot be the single source
        of truth to determine which state we're in, and a separate bool is required */
        uint8_t mods = get_mods();
        uint8_t mod_state = mods & MOD_MASK_ALT;
        uint8_t alt_state = get_mods() & MOD_MASK_ALT;
        uint8_t ctrl_state = get_mods() & MOD_MASK_CTRL;

        //Allows Ctrl <-/-> on Mac if Ctrl Tab is already pressed
        if (get_mods() & mod_state && mac_alt_tab_on && !mac_ctrl_on) {
          del_mods(mod_state);
        if (get_mods() & alt_state && mac_alt_window_switching_on && !mac_ctrl_on) {
          del_mods(alt_state);
          add_mods(MOD_LCTL);
        }

        mod_state = mods & MOD_MASK_CTRL;
        if (get_mods() & mod_state && !mac_alt_tab_on) {
          del_mods(mod_state);
          add_mods(MOD_LALT);
          mac_ctrl_on = true;
        }
      }
      break;
    case KC_DEL:
      if (record->event.pressed && is_mac_with_base_layer_off()) {
        uint8_t mod_state = get_mods() & MOD_MASK_CTRL;
        if (get_mods() & mod_state) {
          del_mods(mod_state);
        if (get_mods() & ctrl_state && !mac_alt_window_switching_on && !mac_gui_on) {
          del_mods(ctrl_state);
          add_mods(MOD_LALT);
          mac_ctrl_on = true;
        }


@@ 138,28 141,31 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
      break;
    case KC_LALT:
      if (!record->event.pressed && is_mac_with_base_layer_off()) {
        if (mac_alt_tab_on) {
        if (mac_alt_window_switching_on) {
          unregister_mods(MOD_LCTL);
          mac_alt_tab_on = false;
          mac_alt_window_switching_on = false;
          return false;
        } else if (mac_gui_on) {
          SEND_STRING(SS_UP(X_LGUI));
          unregister_mods(MOD_LGUI);
          mac_gui_on = false;
          return false;
        }
        return true;
      }
      break;
    case KC_RALT:
      if (!record->event.pressed && mac_alt_tab_on && is_mac_with_base_layer_off()) {
      if (!record->event.pressed && mac_alt_window_switching_on && is_mac_with_base_layer_off()) {
        unregister_mods(MOD_LCTL);
        mac_alt_tab_on = false;
        mac_alt_window_switching_on = false;
        return false;
      }
      break;
    case KC_LCTL:
    case KC_RCTL:
      if (!record->event.pressed && mac_ctrl_on && is_mac_with_base_layer_off()) {
        SEND_STRING(SS_UP(X_LGUI) SS_UP(X_LALT));
        // Need to remove only previously set mods (e.g. WIN & ALT) to preserve Shift, etc
        unregister_mods(MOD_LGUI);
        unregister_mods(MOD_LALT);
        mac_ctrl_on = false;
        return false;
      }


@@ 177,67 183,134 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
        return false;
      }
      break;
    case KC_DEL:
    case KC_BSPC:
      if (record->event.pressed) {
        if (char_to_del > 1) {
          layer_off(GIT_C);
          layer_off(GIT_S);
          backspace_n_times(char_to_del);
          char_to_del = 1;
          return false;
        }

        if (is_mac_with_base_layer_off()) {
          uint8_t mod_state = get_mods() & MOD_MASK_CTRL;
          if (get_mods() & mod_state) {
            del_mods(mod_state);
            add_mods(MOD_LALT);
            mac_ctrl_on = true;
        return handle_del_bspace();
      }
      break;
    case LT(COMBOS, KC_BSPC):
      if (record->event.pressed && record->tap.count == 1) {
        return handle_del_bspace();
      }
      break;
    case LT(NAV,KC_APP):
      if (!record->event.pressed && !is_win) {
        mac_ctrl_on = false;
        mac_gui_on = false;
        mac_alt_window_switching_on = false;
        clear_mods();
        SEND_STRING(SS_TAP(X_LCTL) SS_TAP(X_LGUI) SS_TAP(X_LALT) SS_TAP(X_LSFT));
        return true;
      }
      break;
    /* -------------------------------------------------------------------------
     *                            CAPS WORD
     * ------------------------------------------------------------------------ */
    case KC_CAPS:
      if (record->event.pressed && !layer_state_is(BASE))  {
        if (get_mods() & MOD_MASK_SHIFT) {
          full_caps_mode = true;
          led_show_variable_status(full_caps_mode);
          if (hw_caps_on) {
            SEND_STRING(SS_TAP(X_CAPS));
          }
        } else if (hw_caps_on) {
          full_caps_mode = false;
        }
      }
      break;

    // case KC_SPACE:
    case LT(MEDIA,KC_SPC):
    case LT(NAV,KC_SPC):
      if (record->event.pressed && caps_word_on() && !layer_state_is(BASE) && record->tap.count == 1) {
        SEND_STRING(SS_TAP(X_CAPS));
      }
      break;
    case KC_MINS:
      if (record->event.pressed && caps_word_on() && !layer_state_is(BASE)) {
        SEND_STRING("_");
        return false;
      }
      break;
    /* -------------------------------------------------------------------------
     *                            CUSTOM MACROS
     * ------------------------------------------------------------------------ */
    
    case CTRL_CTV:
      if (record->event.pressed) {
        if ( get_mods() & MOD_MASK_SHIFT ) {
          clear_mods();
          SEND_STRING(SS_LCTL("ctv"));
        } else {
          SEND_STRING(SS_LCTL("ctv") SS_TAP(X_ENTER));
        bool shifted = get_mods() & MOD_MASK_SHIFT;
        clear_mods();

        SEND_STRING(SS_LCTL("c"));
        wait_ms(COPY_DELAY);
        SEND_STRING(SS_LCTL("tv"));

        if (!shifted) {
          SEND_STRING(SS_TAP(X_ENTER));
        }
      }
      break;
    case BEAT_BROWSER:
      if (record->event.pressed) {
        SEND_STRING(SS_LCTL("c"));
        wait_ms(COPY_DELAY);
        SEND_STRING(SS_LGUI("1") SS_LCTL("tv") SS_TAP(X_ENTER));
      }
      break;
    case CTRL_LCTV:
      if (record->event.pressed) {
        if ( get_mods() & MOD_MASK_SHIFT ) {
        if (get_mods() & MOD_MASK_SHIFT) {
          //Firefox
          clear_mods();
          SEND_STRING(SS_LCTL("lcP"));
          wait_ms(200);
          SEND_STRING(SS_LCTL("lc"));
          wait_ms(COPY_DELAY);
          SEND_STRING(SS_LCTL("P"));
          wait_ms(INCOGNITO_DELAY);
          SEND_STRING(SS_LCTL("v") SS_TAP(X_ENTER));
        } else if ( get_mods() & MOD_MASK_CTRL ) {
        } else if (get_mods() & MOD_MASK_CTRL) {
          //Chrome
          clear_mods();
          SEND_STRING(SS_LCTL("lcNv") SS_TAP(X_ENTER));
          SEND_STRING(SS_LCTL("lc"));
          wait_ms(COPY_DELAY);
          SEND_STRING(SS_LCTL("Nv") SS_TAP(X_ENTER));
        } else {
          SEND_STRING(SS_LCTL("lctv"));
          SEND_STRING(SS_LCTL("lc"));
          wait_ms(COPY_DELAY);
          SEND_STRING(SS_LCTL("tv"));
        }
      }
      break;
    case CTRL_CAV:
      if (record->event.pressed) {
        SEND_STRING(SS_LCTL("c" SS_TAP(X_TAB)));
        wait_ms(50);
        wait_ms(COPY_DELAY);
        SEND_STRING(SS_LCTL("av"));
      }
      break;
    case NEUTRAL_COPY:
      if (record->event.pressed && is_win) {
        uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
        if (shifted) {
          del_mods(shifted);
          SEND_STRING(SS_LCTL("z"));
        }
        SEND_STRING(SS_LCTL("c"));
        wait_ms(COPY_DELAY);
        SEND_STRING(SS_LGUI("r") SS_LCTL("vac") SS_TAP(X_ESC));
      }
      break;
    case SARCASM:
      if (record->event.pressed) {
        del_mods(MOD_LSFT);
        sarcasm_on = !sarcasm_on;
        led_show_variable_status(sarcasm_on);
      }
      break;
    case LMB_SPAM:
      if (record->event.pressed) {
        is_lmb_timer_active = ! is_lmb_timer_active;
        lmb_timer = timer_read();
      }
      break;



@@ 247,14 320,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    case TOG_OS:
      if (record->event.pressed) {
        is_win = ! is_win;
        led_show_current_os();
        led_show_variable_status(is_win);
      }
      break;
    case CTR_ALT:
      if (record->event.pressed) {
        send_string(key_down[is_win]);
        add_mods(OS_MOD_KEYS[is_win]);
      } else {
        send_string(key_up[is_win]);
        unregister_mods(OS_MOD_KEYS[is_win]);
      }
      break;
    case CTR_ALT_SHIFT:
      if (record->event.pressed) {
        add_mods(OS_MOD_KEYS[is_win]);
        add_mods(MOD_RSFT);
      } else {
        unregister_mods(OS_MOD_KEYS[is_win]);
        unregister_mods(MOD_RSFT);
      }
      break;
    case OS_CTRL:


@@ 298,166 380,342 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    //   break;
    // case :
    //   if (record->event.pressed) {
    //     send_string_remembering_length("", "");
    //     send_shifted_strings("", "");
    //   }
    //   break;
    case TILD_BLOCK:
      if (record->event.pressed) {
        SEND_STRING("```" SS_LSFT(SS_TAP(X_ENTER) SS_TAP(X_ENTER)) "```" SS_TAP(X_UP));
        char_to_del = 4;
        uint8_t alted = get_mods() & MOD_MASK_ALT;
        uint8_t switch_lang_state = get_mods() & MOD_MASK_CTRL;

        if (switch_lang_state) {
          del_mods(switch_lang_state);
          switch_lang();
        }

        if (alted) {
          del_mods(alted);
          SEND_STRING(SS_TAP(X_ESC) "```" SS_LSFT(SS_TAP(X_ENTER) SS_TAP(X_ENTER)) "```" SS_TAP(X_UP));
          char_to_bspace = 4;
          char_to_del = 4;
        } else {
          SEND_STRING("`` ");

          uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
          del_mods(shifted);
          SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
          add_mods(shifted);
          char_to_bspace = 1;
          char_to_del = 2;
        } 

        if (switch_lang_state) {
          switch_lang();
        }
      }
      break;
    case ADMINS:
    case ALL_BEST:
      if (record->event.pressed) {
        send_shifted_strings_add("admin", "/aurora/status");
        send_shifted_strings_add("All the best,\nArt", "joms");
      }
      break;
    case PRESCRIPTION:
    case AT_EMAIL:
      if (record->event.pressed) {
        SEND_STRING("55\t12122019\t");
        char_to_del = 8;
        send_string_remembering_length("@gmail.com");
      }
      break;      
    case BRACES:
      if (record->event.pressed) {
        uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
        uint8_t switch_lang_state = get_mods() & MOD_MASK_CTRL;
        if (switch_lang_state) {
          del_mods(switch_lang_state);
          switch_lang();
        }

        add_mods(shifted);
        SEND_STRING("[]");

        del_mods(shifted);
        SEND_STRING(SS_TAP(X_LEFT));
        add_mods(shifted);

        if (switch_lang_state) {
          switch_lang();
        }
        char_to_bspace = 1;
        char_to_del = 1;
      }
      break;
    case FOURS:
    case DASHES:
      if (record->event.pressed) {
        SEND_STRING("4444333322221111\t1\t12\t21\t123\n");
        char_to_del = 16;
        SEND_STRING("--");

        uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
        del_mods(shifted);
        SEND_STRING(" " SS_TAP(X_LEFT) SS_TAP(X_LEFT));
        add_mods(shifted);
        char_to_bspace = 1;
        char_to_del = 2;
      }
      break;
    case PARENTHS:
      if (record->event.pressed) {
        clear_mods();
        SEND_STRING("() " SS_TAP(X_LEFT) SS_TAP(X_LEFT));
        char_to_bspace = 1;
        char_to_del = 2;
      }
      break;
    case QUOTES:
      if (record->event.pressed) {
        uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
        uint8_t switch_lang_state = get_mods() & MOD_MASK_CTRL;
        if (switch_lang_state) {
          del_mods(switch_lang_state);
          switch_lang();
        }

        add_mods(shifted);
        SEND_STRING("''");

        del_mods(shifted);
        wait_ms(LONG_TYPING_INTERVAL);
        SEND_STRING(" " SS_TAP(X_LEFT) SS_TAP(X_LEFT));
        add_mods(shifted);

        if (switch_lang_state) {
          switch_lang();
        }
        char_to_bspace = 1;
        char_to_del = 2;
      }
      break;
    case QUOTES_RU:
      if (record->event.pressed) {
        clear_mods();
        SEND_STRING("@@ ");
        wait_ms(LONG_TYPING_INTERVAL);
        SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT));
        char_to_bspace = 1;
        char_to_del = 2;
      }
      break;
    case STARS:
      if (record->event.pressed) {
        clear_mods();
        SEND_STRING("** " SS_TAP(X_LEFT) SS_TAP(X_LEFT));
        char_to_bspace = 1;
        char_to_del = 2;
      }
      break;

    case ADMINS:
      if (record->event.pressed) {
        send_string_remembering_length("admin");
      }
      break;
      
  case G_ADD:
    if (record->event.pressed) {
      send_string_remembering_length("git add ");
    }
    break;
  case G_BRCH:
    if (record->event.pressed) {
      send_shifted_strings_add("git branch ", "-d ");
    }
    break;
  case G_C:
    if (record->event.pressed) {
      send_string_remembering_length("git c[Heckout/Ommit]");
      layer_on(GIT_C);
    }
    break;
  case G_CHEC:
    if (!record->event.pressed) {
      bool shifted = get_mods() & MOD_MASK_SHIFT;
      clear_mods();
            
      backspace_n_times(15);
      SEND_STRING("heckout ");
      char_to_del = 13;
      if (shifted) {
        SEND_STRING("-b ");
        char_to_del = 16;
      }
      layer_off(GIT_C);
    }
    break;
  case G_COMM:
    if (!record->event.pressed) {
      bool shifted = get_mods() & MOD_MASK_SHIFT;
      clear_mods();
      
      backspace_n_times(15);
      SEND_STRING("ommit -");
      char_to_del = 15;
      if (shifted) {
        SEND_STRING("a");
        char_to_del = 16;
      }
      SEND_STRING("m \"\"" SS_TAP(X_LEFT));
      layer_off(GIT_C);
    }
    break;
  case G_DEV:
    if (record->event.pressed) {
      send_shifted_strings("develop", "master");
    }
    break;
  case G_DIFF:
    if (record->event.pressed) {
      send_string_remembering_length("git diff ");
    }
    break;	
  case G_FTCH:
    if (record->event.pressed) {
      send_string_remembering_length("git fetch ");
    }
    break;
  case G_LOG:
    if (record->event.pressed) {
      send_string_remembering_length("git log ");
    }
    break;
  case G_MERG:
    if (record->event.pressed) {
      send_string_remembering_length("git merge ");
    }
    break;
  case G_P:
    if (record->event.pressed) {
      send_shifted_strings_add("git pu", "sh -u ");
    }
    break;
  case G_RST:
    if (record->event.pressed) {
      send_string_remembering_length("git reset ");
    }
    break;
  case G_S:
    if (!record->event.pressed) {
      send_string_remembering_length("git s[taSh/How/taTus]");
      layer_on(GIT_S);			
    }
    break;
  case G_SHOW:
    if (!record->event.pressed) {
      backspace_n_times(16);
      SEND_STRING("how ");
      char_to_del = 9;
      layer_off(GIT_S);
    }
    break;			
  case G_STSH:
    if (!record->event.pressed) {
      bool shifted = get_mods() & MOD_MASK_SHIFT;
      clear_mods();
    case G_ADD:
      if (record->event.pressed) {
        send_string_remembering_length("git add ");
      }
      break;
    case G_BRCH:
      if (record->event.pressed) {
        send_shifted_strings_add("git branch ", "-d ");
      }
      break;
    case G_C:
      if (record->event.pressed) {
        send_string_remembering_length("git c[Heckout/Ommit]");
        layer_on(GIT_C);
      }
      break;
    case G_CHEC:
      if (!record->event.pressed) {
        bool shifted = get_mods() & MOD_MASK_SHIFT;
        clear_mods();
              
        press_n_times(15, KC_BSPACE);
        send_string_with_translation("heckout ");
        char_to_bspace = 13;
        if (shifted) {
          send_string_with_translation("-b ");
          char_to_bspace = 16;
        }
        layer_off(GIT_C);
      }
      break;
    case G_COMM:
      if (!record->event.pressed) {
        bool ctrled = get_mods() & MOD_MASK_CTRL;
        bool shifted = get_mods() & MOD_MASK_SHIFT;
        clear_mods();

        press_n_times(15, KC_BSPACE);
        send_string_with_translation("ommit ");
        char_to_bspace = 11;
        layer_off(GIT_C);

        if (ctrled) {
          return false;
        }

        SEND_STRING("-");
        char_to_bspace = 15;
        if (shifted) {
          send_string_with_translation("a");
          char_to_bspace = 16;
        }
        send_string_with_translation("m");
        SEND_STRING(" \"\"" SS_TAP(X_LEFT));
        char_to_del = 1;
      }
      break;
    case G_DEV:
      if (record->event.pressed) {
        send_shifted_strings("develop", "master");
      }
      break;
    case G_DIFF:
      if (record->event.pressed) {
        send_string_remembering_length("git diff ");
      }
      break;	
    case G_FTCH:
      if (record->event.pressed) {
        send_string_remembering_length("git fetch ");
      }
      break;
    case G_LOG:
      if (record->event.pressed) {
        send_string_remembering_length("git log ");
      }
      break;
    case G_MERG:
      if (record->event.pressed) {
        send_string_remembering_length("git merge ");
      }
      break;
    case G_PULL:
      if (record->event.pressed) {
        send_string_remembering_length("git pull ");
      }
      break;
    case G_PUSH:
      if (record->event.pressed) {
        send_string_remembering_length("git push -u ");
      }
      break;
    case G_R:
      if (!record->event.pressed) {
        send_string_remembering_length("git re[Set/Vert/Base -i]");
        layer_on(GIT_R);
      }
      break;
    case G_RBASE:
      if (!record->event.pressed) {
        press_n_times(18, KC_BSPACE);
        send_string_with_translation("base -i ");
        char_to_bspace = 14;
        layer_off(GIT_R);
      }
      break;
    case G_RVERT:
      if (!record->event.pressed) {
        press_n_times(18, KC_BSPACE);
        send_string_with_translation("vert ");
        char_to_bspace = 11;
        layer_off(GIT_R);
      }
      break;
    case G_RST:
      if (!record->event.pressed) {
        bool shifted = get_mods() & MOD_MASK_SHIFT;
        clear_mods();

      backspace_n_times(16);
      SEND_STRING("tash ");
      char_to_del = 10;
        press_n_times(18, KC_BSPACE);
        send_string_with_translation("set ");
        char_to_bspace = 10;

      if (shifted) {
        if (shifted) {
          send_string_with_translation("--hard ");
          char_to_bspace = 17;
        }
        layer_off(GIT_R);
      }
      break;
    case G_S:
      if (!record->event.pressed) {
        send_string_remembering_length("git s[taSh/How/taTus]");
        layer_on(GIT_S);			
      }
      break;
    case G_SHOW:
      if (!record->event.pressed) {
        press_n_times(16, KC_BSPACE);
        send_string_with_translation("how ");
        char_to_bspace = 9;
        layer_off(GIT_S);
      }
      break;			
    case G_STSH:
      if (!record->event.pressed) {
        bool shifted = get_mods() & MOD_MASK_SHIFT;
        clear_mods();
        SEND_STRING("apply ");

        char_to_del = 16;
        press_n_times(16, KC_BSPACE);
        send_string_with_translation("tash ");
        char_to_bspace = 10;

        if (shifted) {
          clear_mods();
          send_string_with_translation("apply ");

          char_to_bspace = 16;
        }

        layer_off(GIT_S);
      }
      break;		
    case G_STAT:
      if (!record->event.pressed) {
        press_n_times(16, KC_BSPACE);
        send_string_with_translation("tatus ");
        char_to_bspace = 11;
        layer_off(GIT_S);
      }
      break;

      layer_off(GIT_S);
    }
    break;		
  case G_STAT:
    if (!record->event.pressed) {
      backspace_n_times(16);
      SEND_STRING("tatus ");
      char_to_del = 11;
      layer_off(GIT_S);
    }
    break;
    case K_CUST1 ... K_CUST3: // custom strings not stored in source control
      if (!record->event.pressed) {
          send_string_remembering_length(custom[keycode - K_CUST1]);
          blink_leds(NUM_SCROLL_LED_ON);
      }
      break;
    case K_SECR1 ... K_SECR4: // Secrets!  Externally defined strings, not stored in repo
      if (!record->event.pressed) {
          send_string_remembering_length(secrets[keycode - K_SECR1]);
          blink_leds(NUM_SCROLL_LED_ON);
      }
      break;

  case CTL_ALT_START ... CTL_ALT_END:
    if (record->event.pressed) {
      if (is_win) {
        tap_code16(LCTL(keycode - CTL_ALT_START));
    case CTL_ALT_START ... CTL_ALT_END:
      if (record->event.pressed) {
        if (is_win) {
          register_code16(LCTL(keycode - CTL_ALT_START));
        } else {
          register_code16(LALT(keycode - CTL_ALT_START));
        }
      } else {
        tap_code16(LALT(keycode - CTL_ALT_START));
        if (is_win) {
          unregister_code16(LCTL(keycode - CTL_ALT_START));
        } else {
          unregister_code16(LALT(keycode - CTL_ALT_START));
        }
      }
    }
    break;
      break;
  }

  return process_record_keymap(keycode, record);

M users/art/art.h => users/art/art.h +48 -10
@@ 1,18 1,30 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once
#include QMK_KEYBOARD_H

#define CTL_ALT(kc) (CTL_ALT_START + ((kc) & 0xff))

extern bool is_win;
#define TYPING_INTERVAL 20
#define LONG_TYPING_INTERVAL 50

enum layer_names {
#if SPLIT75_SETUP_FOR_PUBLIC_USE_BY_DEFAULT && defined(KEYBOARD_wheatfield_split75) // defined by "KEYBOARD" followed by folder structure
  BASE,
  QWERTY,
  WORKMAN,  
  BASE, //only specific for split75
#if defined(KEYBOARD_wheatfield_split75)
  QWERTY_MOD,
#else
  QWERTY,
  BASE,
#endif

  WORKMAN,
#if defined(KEYBOARD_mt_split75)
  CONFIG,
  LAYOUT_CHG,
#elif defined(KEYBOARD_ergodone)
  QWERTY_MOD,
#elif defined(KEYBOARD_ktec_ergodone)
  FKEYS,
  CTRL_NAV,
  SHIFT_NAV,


@@ 20,12 32,12 @@ enum layer_names {

  MEDIA,
  COMBOS,
  STRINGS,
  CONFIG,
  //STRINGS,
  NAV,
  NUMPAD,
  GIT,
  GIT_C,
  GIT_R,
  GIT_S
};



@@ 33,35 45,61 @@ enum custom_keycodes_art {
  CTRL_CTV = SAFE_RANGE,
  CTRL_LCTV,
  CTRL_CAV,
  BEAT_BROWSER,
  NEUTRAL_COPY,
  SARCASM,
  LMB_SPAM,

  TOG_OS,
  CTR_ALT,
  CTR_ALT_SHIFT,
  OS_CTRL,
  OS_WIN,

  TILD_BLOCK,
  ALL_BEST,
  AT_EMAIL,
  BRACES,
  DASHES,
  PARENTHS,
  STARS,
  QUOTES,
  QUOTES_RU,

  ADMINS,
  PRESCRIPTION,
  FOURS,
  

  G_ADD,
  G_BRCH,
  G_C,
  G_CHEC,	
  G_CHEC,
  G_COMM,
  G_DEV,
  G_DIFF,
  G_FTCH,
  G_LOG,
  G_MERG,
  G_P,
  G_PULL,
  G_PUSH,
  G_R,
  G_RBASE,
  G_RVERT,
  G_RST,
  G_S,
  G_STAT,
  G_STSH,
  G_SHOW,

  K_CUST1,
  K_CUST2,
  K_CUST3,

  K_SECR1,
  K_SECR2,
  K_SECR3,
  K_SECR4,

  CTL_ALT_START,
  CTL_ALT_END = CTL_ALT_START + 0xff,


A users/art/art_user_config.h.example => users/art/art_user_config.h.example +7 -0
@@ 0,0 1,7 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#define SPLIT75_SETUP_FOR_PUBLIC_USE_BY_DEFAULT true
#define WORKMAN_TO_QWERTY_HW_MAPPING false

#define lang_switch_combo SS_LGUI(SS_TAP(X_Z))
\ No newline at end of file

M users/art/config.h => users/art/config.h +10 -0
@@ 1,4 1,14 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#undef TAPPING_TOGGLE
#define TAPPING_TOGGLE 2

#define COMBO_SHOULD_TRIGGER

// saving space
#define LAYER_STATE_16BIT // remove if using more than 16 layers
#define NO_ACTION_ONESHOT
#define NO_MUSIC_MODE
\ No newline at end of file

A users/art/custom_definitions.h.example => users/art/custom_definitions.h.example +8 -0
@@ 0,0 1,8 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

static char * custom[] = {
  "",
  "",
  ""
};
\ No newline at end of file

A users/art/funcs/led_funcs.c => users/art/funcs/led_funcs.c +55 -0
@@ 0,0 1,55 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#include "led_funcs.h"

bool hw_caps_on;

__attribute__ ((weak)) void num_led_on(void) {}
__attribute__ ((weak)) void num_led_off(void) {}
__attribute__ ((weak)) void caps_led_on(void) {}
__attribute__ ((weak)) void caps_led_off(void) {}
__attribute__ ((weak)) void scroll_led_on(void) {}
__attribute__ ((weak)) void scroll_led_off(void) {}

void toggle_leds(int leds) {
  if (NUM_LED_ON & leds) {
    num_led_on();
  } else {
    num_led_off();
  }
  if (SCROLL_LED_ON & leds) {
    scroll_led_on();
  } else {
    scroll_led_off();
  }
}

bool led_update_user(led_t led_state) {
  // only use caps LED - ignore Num & Scroll
  if (led_state.caps_lock) {
    caps_led_on();
  } else {
    caps_led_off();
  }

  hw_caps_on = led_state.caps_lock;
  return false; // 'false' prevents led_update_kb from firing
}

void blink_leds(int leds) {
  for (int i = 0; i < 3; i++) {
    toggle_leds(leds);
    wait_ms(BLINKING_INTERVAL);
    toggle_leds(ALL_OFF);
    wait_ms(BLINKING_INTERVAL);
  }
}

void led_show_variable_status(bool value) {
  if (value) {
    blink_leds(NUM_LED_ON);
  } else {
    blink_leds(SCROLL_LED_ON);
  }
}
\ No newline at end of file

A users/art/funcs/led_funcs.h => users/art/funcs/led_funcs.h +17 -0
@@ 0,0 1,17 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once
#include QMK_KEYBOARD_H

#define NUM_LED_ON 4
#define SCROLL_LED_ON 1
#define NUM_SCROLL_LED_ON 5
#define ALL_OFF 0

#define BLINKING_INTERVAL 25

void toggle_leds(int leds);
bool led_update_user(led_t led_state);
void blink_leds(int leds);
void led_show_variable_status(bool value);
\ No newline at end of file

A users/art/funcs/string_funcs.c => users/art/funcs/string_funcs.c +309 -0
@@ 0,0 1,309 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#include "art.h"
#include "string_funcs.h"
#include "string.h"

bool mac_ctrl_on;

int char_to_bspace;
int char_to_del;

enum combo_events {
  HOMEROW_UP,
  HOMEROW_LEFT,
  HOMEROW_RIGHT,
  HOMEROW_DOWN,
  HOMEROW_PREV_WORD,
  HOMEROW_NEXT_WORD,
  HOMEROW_HOME,
  HOMEROW_END,

  ED_F1,
  ED_F2,
  ED_F3,
  ED_F4,
  ED_F5,
  ED_F6,
  ED_F7,
  ED_F8,
  ED_F9,
  ED_F10,
  ED_F11,
  ED_F12,
  ED_PSCREEN,

  ED_ENTER,

  ED_CS_ENTER,
  BSPC_LSFT_CLEAR,
  COMBO_LENGTH
};
uint16_t COMBO_LEN = COMBO_LENGTH; // do not remove - needed for combos to work

const uint16_t PROGMEM combo_up[] = {KC_W, KC_R, COMBO_END};
const uint16_t PROGMEM combo_left[] = {KC_S, KC_E, COMBO_END};
const uint16_t PROGMEM combo_right[] = {KC_F, KC_E, COMBO_END};
const uint16_t PROGMEM combo_down[] = {KC_S, KC_F, COMBO_END};
const uint16_t PROGMEM combo_prev_word[] = {KC_S, KC_LCTRL, COMBO_END};
const uint16_t PROGMEM combo_next_word[] = {KC_F, KC_LCTRL, COMBO_END};
const uint16_t PROGMEM combo_end[] = {KC_W, KC_E, COMBO_END};
const uint16_t PROGMEM combo_home[] = {KC_E, KC_R, COMBO_END};

const uint16_t PROGMEM combo_enter[] = {KC_BSPC, KC_INS, COMBO_END};

const uint16_t PROGMEM combo_f1[] = {KC_1, KC_Q, COMBO_END};
const uint16_t PROGMEM combo_f2[] = {KC_2, KC_W, COMBO_END};
const uint16_t PROGMEM combo_f3[] = {KC_3, KC_E, COMBO_END};
const uint16_t PROGMEM combo_f4[] = {KC_4, KC_R, COMBO_END};
const uint16_t PROGMEM combo_f5[] = {KC_5, KC_T, COMBO_END};
const uint16_t PROGMEM combo_f6[] = {KC_6, KC_Y, COMBO_END};
const uint16_t PROGMEM combo_f7[] = {KC_7, KC_U, COMBO_END};
const uint16_t PROGMEM combo_f8[] = {KC_8, KC_I, COMBO_END};
const uint16_t PROGMEM combo_f9[] = {KC_9, KC_O, COMBO_END};
const uint16_t PROGMEM combo_f10[] = {KC_0, KC_P, COMBO_END};
const uint16_t PROGMEM combo_f11[] = {LT(GIT,KC_SLSH), KC_RSFT, COMBO_END};
const uint16_t PROGMEM combo_f12[] = {KC_RALT, KC_RCTRL, COMBO_END};
const uint16_t PROGMEM combo_pscreen[] = {TO(WORKMAN), KC_RALT, COMBO_END};

const uint16_t PROGMEM done_sm[] = {KC_LEFT, KC_RIGHT, COMBO_END};
const uint16_t PROGMEM clear_line_combo[] = {KC_BSPC, KC_LSFT, COMBO_END};

combo_t key_combos[] = {
  [HOMEROW_UP] = COMBO(combo_up, KC_UP),
  [HOMEROW_LEFT] = COMBO(combo_left, KC_LEFT),
  [HOMEROW_RIGHT] = COMBO(combo_right, KC_RIGHT),
  [HOMEROW_DOWN] = COMBO(combo_down, KC_DOWN),
  [HOMEROW_PREV_WORD] = COMBO_ACTION(combo_prev_word),
  [HOMEROW_NEXT_WORD] = COMBO_ACTION(combo_next_word),
  [HOMEROW_HOME] = COMBO(combo_end, KC_HOME),
  [HOMEROW_END] = COMBO(combo_home, KC_END),

  #if defined(KEYBOARD_ktec_ergodone)
  [ED_ENTER] = COMBO(combo_enter, KC_ENTER),

  [ED_F1] = COMBO(combo_f1, KC_F1),
  [ED_F2] = COMBO(combo_f2, KC_F2),
  [ED_F3] = COMBO(combo_f3, KC_F3),
  [ED_F4] = COMBO(combo_f4, KC_F4),
  [ED_F5] = COMBO(combo_f5, KC_F5),
  [ED_F6] = COMBO(combo_f6, KC_F6),
  [ED_F7] = COMBO(combo_f7, KC_F7),
  [ED_F8] = COMBO(combo_f8, KC_F8),
  [ED_F9] = COMBO(combo_f9, KC_F9),
  [ED_F10] = COMBO(combo_f10, KC_F10),
  [ED_F11] = COMBO(combo_f11, KC_F11),
  [ED_F12] = COMBO(combo_f12, KC_F12),
  [ED_PSCREEN] = COMBO(combo_pscreen, KC_PSCREEN),

  [ED_CS_ENTER] = COMBO_ACTION(done_sm),
  #endif

  [BSPC_LSFT_CLEAR] = COMBO_ACTION(clear_line_combo),
};

void process_combo_event(uint16_t combo_index, bool pressed) {
    switch(combo_index) {
      case HOMEROW_PREV_WORD:
        if (pressed) {
          if (is_win) {
            tap_code16(C(KC_LEFT));
          } else {
            tap_code16(A(KC_LEFT));
          }
        }
        break;
      case HOMEROW_NEXT_WORD:
        if (pressed) {
          if (is_win) {
            tap_code16(C(KC_RIGHT));
          } else {
            tap_code16(A(KC_RIGHT));
          }
        }
        break; 
      case BSPC_LSFT_CLEAR:
        if (pressed) {
          tap_code16(KC_END);
          tap_code16(S(KC_HOME));
          tap_code16(KC_BSPC);
        }
        break;
      case ED_CS_ENTER:
        if (pressed) {
          tap_code16(C(S(KC_ENTER)));
        }
        break;        
    }
}

bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode, keyrecord_t *record) {
  return !layer_state_is(BASE);
}

bool is_mac_with_base_layer_off(void) {
  return !is_win && !layer_state_is(BASE);
}

void switch_lang(void) {
  if (is_win) {
    SEND_STRING(SS_LALT(SS_TAP(X_LSFT)));
  } else {
    send_string(lang_switch_combo);
    wait_ms(10);
  }
}

void press_n_times(int times, uint16_t key) {
  for (int i=0; i<times; i++) {
    // wait_ms(TYPING_INTERVAL);
    tap_code16(key);
  }
}


bool handle_del_bspace(void) {
  if (char_to_bspace > 1 || char_to_del > 0) {
    layer_off(GIT_C);
    layer_off(GIT_R);
    layer_off(GIT_S);

    press_n_times(char_to_bspace, KC_BSPACE);
    char_to_bspace = 1;
    press_n_times(char_to_del, KC_DEL);
    char_to_del = 0;

    return false;
  }

  if (is_mac_with_base_layer_off()) {
    uint8_t mod_state = get_mods() & MOD_MASK_CTRL;
    if (get_mods() & mod_state) {
      del_mods(mod_state);
      add_mods(MOD_LALT);
      mac_ctrl_on = true;
    }
  }
  return true;
}

void send_string_with_translation(char *string) {
  #if WORKMAN_TO_QWERTY_HW_MAPPING
  if (layer_state_is(WORKMAN)) {
    int isUpperCase = 0;
    for (int i = 0; i < strlen(string); i++) {
      char toPrint = string[i];
      if (isupper(toPrint)) {
        if (toPrint == 'P') {
          SEND_STRING(":");
          continue;
        }

        isUpperCase = 1;
        toPrint = tolower(toPrint);
      }
      switch (toPrint) {
        case ':':
          toPrint = 'I';
          break;

        case 'w':
          toPrint = 'd';
          break; 
        case 'e':
          toPrint = 'r';
          break; 
        case 'r':
          toPrint = 'w';
          break; 
        case 't':
          toPrint = 'b';
          break; 
        case 'y':
          toPrint = 'j';
          break; 
        case 'u':
          toPrint = 'f';
          break; 
        case 'i':
          toPrint = 'u';
          break; 
        case 'o':
          toPrint = 'p';
          break; 
        case 'p':
          toPrint = ';';
          break; 

        case 'd':
          toPrint = 'h';
          break; 
        case 'f':
          toPrint = 't';
          break; 
        case 'h':
          toPrint = 'y';
          break; 
        case 'j':
          toPrint = 'n';
          break; 
        case 'k':
          toPrint = 'e';
          break; 
        case 'l':
          toPrint = 'o';
          break; 
        case ';':
          toPrint = 'i';
          break; 

        case 'b':
          toPrint = 'm';
          break; 
        case 'n':
          toPrint = 'k';
          break; 
        case 'm':
          toPrint = 'l';
          break; 
      }
      if (isUpperCase) {
        isUpperCase = 0;
        toPrint = toupper(toPrint);
      }
      send_char(toPrint);
    }
  } else {
    send_string(string);
  }
  #else
  send_string(string);
  #endif
}

void send_string_remembering_length(char *string) {
  send_string_with_translation(string);
  char_to_bspace = strlen(string);
}

void send_shifted_strings(char *string1, char *string2) {
  if (get_mods() & MOD_MASK_SHIFT) {
    clear_mods();
    send_string_remembering_length(string2);
  } else {
    send_string_remembering_length(string1);
  }
}

void send_shifted_strings_add(char *string1, char *string2) {
  bool shifted = get_mods() & MOD_MASK_SHIFT;
  clear_mods();

  send_string_remembering_length(string1);

  if (shifted) {
    send_string(string2);
    char_to_bspace = strlen(string1) + strlen(string2);
  }
}
\ No newline at end of file

A users/art/funcs/string_funcs.h => users/art/funcs/string_funcs.h +14 -0
@@ 0,0 1,14 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once
#include QMK_KEYBOARD_H

bool is_mac_with_base_layer_off(void);
void switch_lang(void);
void press_n_times(int times, uint16_t key);
bool handle_del_bspace(void);
void send_string_with_translation(char *string);
void send_string_remembering_length(char *string);
void send_shifted_strings(char *string1, char *string2);
void send_shifted_strings_add(char *string1, char *string2);
\ No newline at end of file

M users/art/rules.mk => users/art/rules.mk +15 -1
@@ 1,1 1,15 @@
SRC += art.c
\ No newline at end of file
SRC += art.c
SRC += funcs/led_funcs.c
SRC += funcs/string_funcs.c

COMBO_ENABLE = yes

# saving space
COMMAND_ENABLE = no
CONSOLE_ENABLE = no
GRAVE_ESC_ENABLE = no 
LTO_ENABLE = yes
MAGIC_ENABLE = no
# MOUSEKEY_ENABLE = no
MUSIC_ENABLE = no
SPACE_CADET_ENABLE = no
\ No newline at end of file

A users/art/secr.h.example => users/art/secr.h.example +9 -0
@@ 0,0 1,9 @@
// Copyright 2022 Artjoms Rizihs (@artjomsR)
// SPDX-License-Identifier: GPL-2.0-or-later

static char * secrets[] = {
  "",
  "",
  "",
  ""
};
\ No newline at end of file