~ruther/qmk_firmware

7ce5402417b0332569bf48cf2c51e412cd35a18a — Joe Wasson 4 years ago b5ebdf1
Updates to Talljoe's Keymaps (#10115)

* Minor Tweak

* Refactor spacebar defines.

* Add TMO50 layout

* Rename Atreus keymap.

* Refactor Atreus for readability.

* Eliminate tapdance quote and tweak maltroff.

* Factor out tapdance.

* Add some fancy combos and keys.

* Remove combos for now because they cause pain.

* WIP visualizer

* Alternate method for reset

* WIP2 visualizer

* Layer text tweak.

* Add made-up layout Nortron as a combination of Norman and Maltron.

* Add backspace.

* Add Talljoe keymap to Prime E.

* Fix double-colon so it doesn't press enter if shift is released early.

* Use new make command.

* Bring some modern standards into code and add licenses.

* Remove QMK_KEYBOARD_CONFIG_H and fixup QMK_KEYBOARD_H.

* Move from `biton32` to `get_highest_layer`.

* Remove PREVENT_STUCK_MODIFIERS

* Update keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h
33 files changed, 826 insertions(+), 269 deletions(-)

D keyboards/atreus/keymaps/talljoe-atreus/config.h
A keyboards/atreus/keymaps/talljoe/config.h
R keyboards/atreus/keymaps/{talljoe-atreus => talljoe}/keymap.c
R keyboards/atreus/keymaps/{talljoe-atreus => talljoe}/rules.mk
M keyboards/jd45/keymaps/talljoe/config.h
A keyboards/primekb/prime_e/keymaps/talljoe/config.h
A keyboards/primekb/prime_e/keymaps/talljoe/keymap.c
M keyboards/thevankeyboards/bananasplit/keymaps/talljoe/config.h
M keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h
A keyboards/tmo50/keymaps/talljoe/config.h
A keyboards/tmo50/keymaps/talljoe/keymap.c
M layouts/community/60_ansi/talljoe-ansi/config.h
M layouts/community/60_ansi_split_bs_rshift/talljoe/config.h
M layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c
M layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h
M layouts/community/60_hhkb/talljoe-hhkb/config.h
M layouts/community/ortho_4x12/talljoe/config.h
M layouts/community/tkl_ansi/talljoe-tkl/config.h
M users/talljoe/config.h
A users/talljoe/macros.c
A users/talljoe/macros.h
M users/talljoe/rules.mk
M users/talljoe/talljoe.c
M users/talljoe/talljoe.h
A users/talljoe/tapdance/actions/td.function.c
A users/talljoe/tapdance/actions/td.grave.c
A users/talljoe/tapdance/actions/td.lock.c
A users/talljoe/tapdance/actions/td.semicolon.c
A users/talljoe/tapdance/tapdance.h
A users/talljoe/tapdance/tapdance_actions.c
R users/talljoe/{tapdance => tapdance/td_setup}.c
A users/talljoe/tapdance/td_setup.h
A users/talljoe/visualizer.c
D keyboards/atreus/keymaps/talljoe-atreus/config.h => keyboards/atreus/keymaps/talljoe-atreus/config.h +0 -42
@@ 1,42 0,0 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H

#include QMK_KEYBOARD_CONFIG_H

#define PREVENT_STUCK_MODIFIERS
#define SPACE_COUNT 2

#define TEMPLATE(                                                                     \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D,      \
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,           \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,                \
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,           \
    K40, K41, K42,      K44, K45, K46,      K48, K49,      K4B, K4C                 \
) LAYOUT( \
  K11, K12, K13, K14, K15,           K16, K17, K18, K19, K1A, \
  K21, K22, K23, K24, K25,           K26, K27, K28, K29, K2A, \
  K32, K33, K34, K35, K36,           K37, K38, K39, K3A, K3B, \
  K10, K41, K42, K30, K44, K1D, K20, K45, K3C, K0D, K2B, K3D \
)

#define TEMPLATE_NUM(                                                                     \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D,      \
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,           \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,                \
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,           \
    K40, K41, K42,      K44, K45, K46,      K48, K49,      K4B, K4C                 \
) LAYOUT( \
  K11, K12, K13, K14, K15,           K16, K17, K18, K19, K1A, \
  K21, K22, K23, K24, K25,           K26, K27, K28, K29, K2A, \
  K32, K33, K34, K35, K36,           K37, K38, K39, K3A, K3B, \
  K10, K41, K42, K30, K44, K1D, K20, K45, K48, K49, K2B, K3D \
)


#define TEMPLATE_RESET LAYOUT( \
  RESET  , 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, \
  RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
)
#endif

A keyboards/atreus/keymaps/talljoe/config.h => keyboards/atreus/keymaps/talljoe/config.h +53 -0
@@ 0,0 1,53 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#define SPACE_COUNT 3

#define TEMPLATE_TKL( \
  KESC,       KF01, KF02, KF03, KF04, KF05, KF06, KF07, KF08, KF09, KF10, KF11, KF12,   KSCL, KPRS, KADJ, \
  KGRV, K_1 , K_2 , K_3 , K_4 , K_5 , K_6 , K_7 , K_8 , K_9 , K_0 , KMIN, KEQL, KBSP,   KINS, KHOM, KPUP, \
  KTAB, K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , KLBR, KRBR, KBLS,   KDEL, KEND, LPDN, \
  KCAP, K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, KQUO,       KENT,                     \
  KLSH, K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS,             KRSH,         K_UP,       \
  KLCT, KLOS, KLAL,             KSP3, KSP2, KSP1,             KRAL, KROS, KRCT, KPTT,   K_LT, K_DN, K_RT  \
) LAYOUT( \
  K_Q , K_W , K_E , K_R , K_T ,             K_Y , K_U , K_I , K_O , K_P , \
  K_A , K_S , K_D , K_F , K_G ,             K_H , K_J , K_K , K_L , KSMI, \
  K_Z , K_X , K_C , K_V , K_B ,             K_N , K_M , KCMA, KDOT, KSLS, \
  KTAB, KLOS, KLAL, KLSH, KSP3, KSP2, KCAP, KSP1, KRSH, KBLS, KQUO, KADJ \
)

#define TEMPLATE_NUM( \
  KGRV, K_1 , K_2 , K_3 , K_4 , K_5 , K_6 , K_7 , K_8 , K_9 , K_0 , KMIN, KEQL, KBSL, KESC, \
  KTAB, K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , KLBR, KRBR,       KBSP, \
  KCAP, K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, KQUO,             KENT, \
  KLSH, K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS,             KRSH, KADJ, \
  KLCT, KLOS, KLAL,             KSP3, KSP2, KSP1,             KRAL, KROS, KRCT, KPTT        \
) LAYOUT( \
  K_Q , K_W , K_E , K_R , K_T ,             K_Y , K_U , K_I , K_O , K_P , \
  K_A , K_S , K_D , K_F , K_G ,             K_H , K_J , K_K , K_L , KSMI, \
  K_Z , K_X , K_C , K_V , K_B ,             K_N , K_M , KCMA, KDOT, KSLS, \
  KTAB, KLOS, KLAL, KLSH, KSP3, KSP2, KCAP, KSP1, KRAL, KROS, KQUO, KADJ \
)

#define TEMPLATE_RESET LAYOUT( \
  RESET  , 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, \
  RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET  , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
)

R keyboards/atreus/keymaps/talljoe-atreus/keymap.c => keyboards/atreus/keymaps/talljoe/keymap.c +0 -0
R keyboards/atreus/keymaps/talljoe-atreus/rules.mk => keyboards/atreus/keymaps/talljoe/rules.mk +0 -0
M keyboards/jd45/keymaps/talljoe/config.h => keyboards/jd45/keymaps/talljoe/config.h +18 -8
@@ 1,7 1,19 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H

#include QMK_KEYBOARD_CONFIG_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#pragma once

#define PREVENT_STUCK_MODIFIERS
#define SPACE_COUNT 2


@@ 14,9 26,7 @@
    K40, K41, K42,      K44, K45, K46,      K48, K49,      K4B, K4C                 \
) { \
    { K10,   K11,   K12,   K13,   K14,   K15,   K16,   K17,   K18,   K19,   K1A,   K0D,   K1D    }, \
    { K20,   K21,   K22,   K23,   K24,   K25,   K26,   K27,   K28,   K29,   K2A,   K2C,   KC_NO  }, \
    { K20,   K21,   K22,   K23,   K24,   K25,   K26,   K27,   K28,   K29,   K2A,   K2B,   KC_NO  }, \
    { K30,   K32,   K33,   K34,   K35,   K36,   K37,   K38,   K39,   K3A,   K3B,   K3C,   KC_NO  }, \
    { K40,   K00,   K41,   K42,   K44,   KC_NO, K45,   KC_NO, K48,   K49,   K3D,   K4C,   KC_NO  }  \
    { K40,   K00,   K41,   K42,   K44,   KC_NO, K46,   KC_NO, K48,   K49,   K3D,   K4C,   KC_NO  }  \
}

#endif

A keyboards/primekb/prime_e/keymaps/talljoe/config.h => keyboards/primekb/prime_e/keymaps/talljoe/config.h +33 -0
@@ 0,0 1,33 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#define SPACE_COUNT 2

#define TEMPLATE(                                                                   \
    K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D,      \
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,           \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,                \
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,           \
    K40, K41, K42,      K44, K45, K46,      K48, K49,      K4B, K4C                 \
)                                                                                   \
LAYOUT( \
	K10, K11, K12, K13, K14, K15,  		K16, K17, K18, K19, K1A, K1D, K2D, \
	K20, K21, K22, K23, K24, K25,  		K26, K27, K28, K29, K2A,      K2C, \
	K30, K32, K33, K34, K35, K36,  		K2B, K37, K38, K39, K3A, K3B, K3C, \
	K40, K41,  			K42, K44,  		K46, K48, 				 K49, K3D \
)

A keyboards/primekb/prime_e/keymaps/talljoe/keymap.c => keyboards/primekb/prime_e/keymaps/talljoe/keymap.c +1 -0
@@ 0,0 1,1 @@
// This space intentionally left blank

M keyboards/thevankeyboards/bananasplit/keymaps/talljoe/config.h => keyboards/thevankeyboards/bananasplit/keymaps/talljoe/config.h +16 -5
@@ 1,7 1,20 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include QMK_KEYBOARD_CONFIG_H
#pragma once

#define SPACE_COUNT 3



@@ 18,5 31,3 @@
    { K30, KC_NO,    K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D },  \
    { K40, K41, K42, KC_NO, K44, K45, K46, KC_NO, K48, K49, KC_NO, K4B, K4C, KC_NO }\
}

#endif

M keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h => keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h +20 -8
@@ 1,7 1,21 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include QMK_KEYBOARD_CONFIG_H

#define SPACE_COUNT 2



@@ 15,7 29,7 @@
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K0D, \
    K41, K49, K42,      K44, K45,      K3C, K0B, K00, K3D       \
    K41, K49, K42,      K44, K46,      K3C, K0B, K00, K3D       \
)

#define TEMPLATE_ALT(                                                              \


@@ 28,7 42,7 @@
    K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \
    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
    K41, K49, K42,      K44, K45,      K48, K49, K4B, K4C       \
    K41, K49, K42,      K44, K46,      K48, K49, K4B, K4C       \
)

#define TEMPLATE_ADJUST(                                                            \


@@ 41,7 55,7 @@
    K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K2D, \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \
    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
    K40, K41, K42,      K44, K45,      K48, K0B, K0C, K4C       \
    K40, K41, K42,      K44, K46,      K48, K0B, K0C, K4C       \
)

#define TEMPLATE_RESET LAYOUT_arrow( \


@@ 49,5 63,3 @@
    KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
    KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
    KC_NO, KC_NO, KC_NO,      KC_NO, KC_NO,      KC_NO, KC_NO, KC_NO, RESET)

#endif

A keyboards/tmo50/keymaps/talljoe/config.h => keyboards/tmo50/keymaps/talljoe/config.h +33 -0
@@ 0,0 1,33 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#define SPACE_COUNT 2

#define TEMPLATE_TKL(\
  KESC,       KF01, KF02, KF03, KF04, KF05, KF06, KF07, KF08, KF09, KF10, KF11, KF12,   KSCL, KPRS, KADJ, \
  KGRV, K_1 , K_2 , K_3 , K_4 , K_5 , K_6 , K_7 , K_8 , K_9 , K_0 , KMIN, KEQL, KBLS,   KINS, KHOM, KPUP, \
  KTAB, K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , KLBR, KRBR, KBSP,   KDEL, KEND, LPDN, \
  KCAP, K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, KQUO,       KENT,                     \
  KLSH, K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS,             KRSH,         K_UP,       \
  KLCT, KLOS, KLAL,             KSP2, KSP3, KSP1,             KRAL, KROS, KRCT, KPTT,   K_LT, K_DN, K_RT  \
) LAYOUT_all( \
	KF01, KTAB, K_Q , K_W , K_E , K_R , K_T , K_Y , K_U , K_I , K_O , K_P , KLBR, KRBR, KBSP, \
	KF02, KCAP, K_A , K_S , K_D , K_F , K_G , K_H , K_J , K_K , K_L , KSMI, KQUO,       KENT, \
	KF03, KLSH, K_Z , K_X , K_C , K_V , K_B , K_N , K_M , KCMA, KDOT, KSLS,       KRSH, KADJ, \
	KF04,             KLOS, KLAL,       KSP2,             KSP1,       KRAL, KESC              \
)

A keyboards/tmo50/keymaps/talljoe/keymap.c => keyboards/tmo50/keymaps/talljoe/keymap.c +44 -0
@@ 0,0 1,44 @@
#include "quantum.h"
#include "talljoe.h"

bool process_indicator_led_user(uint32_t state){
  return false;
}

#define LED_MASK (_BV(PB0) | _BV(PB1) | _BV(PB2) | _BV(PB3))
#define WHITE (_BV(PB0))
#define YELLOW (_BV(PB1))
#define MAGENTA (_BV(PB2))
#define RED (_BV(PB3))

void matrix_scan_keymap(void) {
  uint32_t lights = WHITE;

  switch(get_highest_layer(layer_state))
  {
    case _NAV:
      lights |= YELLOW;
      break;
    case _NUM:
      lights |= MAGENTA;
      break;
    case _ADJUST:
      lights |= RED;
      break;
    default: {
      uint8_t default_layer = get_highest_layer(default_layer_state);
      lights = 0; // no white LED by default.
      if(default_layer & 1)
        lights |= YELLOW;
      if(default_layer & 2)
        lights |= MAGENTA;
      if(default_layer & 4)
        lights |= RED;
    }
  }

  uint32_t port = PORTB;
  port |= LED_MASK;
  port &= ~lights;
  PORTB = port;
}

M layouts/community/60_ansi/talljoe-ansi/config.h => layouts/community/60_ansi/talljoe-ansi/config.h +18 -5
@@ 1,5 1,20 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include QMK_KEYBOARD_CONFIG_H



@@ 16,7 31,5 @@
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,           \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,                \
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C,                \
    K40, K41, K42,           K45,           K48, K49,      K4B, K4C                 \
    K40, K41, K42,           K46,           K48, K49,      K4B, K4C                 \
)

#endif //CONFIG_USER_H

M layouts/community/60_ansi_split_bs_rshift/talljoe/config.h => layouts/community/60_ansi_split_bs_rshift/talljoe/config.h +18 -7
@@ 1,7 1,20 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H

#include QMK_KEYBOARD_CONFIG_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#define ENABLE_GAME_LAYER



@@ 16,7 29,7 @@
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,           \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,                \
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,           \
    K40, K41, K42,           K45,           K48, K49,      K4B, K4C                 \
    K40, K41, K42,           K46,           K48, K49,      K4B, K4C                 \
)

/* Color Map */


@@ 68,5 81,3 @@
  #define BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001

#endif //KEYBOARD_zeal60

#endif //CONFIG_USER_H

M layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c => layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.c +16 -0
@@ 1,3 1,19 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "solarized.h"

#define MAKE_COLOR(_H, _S, _V) \

M layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h => layouts/community/60_ansi_split_bs_rshift/talljoe/solarized.h +17 -4
@@ 1,5 1,20 @@
#ifndef SOLARIZED_H
#define SOLARIZED_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include "quantum/color.h"



@@ 23,5 38,3 @@ typedef struct {
} solarized_t;

extern solarized_t solarized;

#endif

M layouts/community/60_hhkb/talljoe-hhkb/config.h => layouts/community/60_hhkb/talljoe-hhkb/config.h +18 -4
@@ 1,5 1,20 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include QMK_KEYBOARD_CONFIG_H



@@ 16,10 31,9 @@
    K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,           \
    K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C,                \
    K30,      K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D,           \
         K41, K42,           K45,           K48, K4C                                \
         K41, K42,           K46,           K48, K4C                                \
)

#ifdef RGB_BACKLIGHT_M60_A
  #define ZEAL_RGB
#endif
#endif //CONFIG_USER_H

M layouts/community/ortho_4x12/talljoe/config.h => layouts/community/ortho_4x12/talljoe/config.h +17 -6
@@ 1,7 1,21 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include QMK_KEYBOARD_CONFIG_H
#define SPACE_COUNT 3

#define TEMPLATE(                                                                   \


@@ 17,6 31,3 @@ LAYOUT_ortho_4x12(                                              \
    K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
    K40, K41, K0D, K42, K44, K45, K45, K46, K48, K49, K4B, K4C  \
)


#endif //CONFIG_USER_H

M layouts/community/tkl_ansi/talljoe-tkl/config.h => layouts/community/tkl_ansi/talljoe-tkl/config.h +18 -5
@@ 1,5 1,20 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include QMK_KEYBOARD_CONFIG_H



@@ 18,7 33,5 @@
  KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3,   KK4, KO7, KQ7, \
  KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6,      KB1,                  \
  KN2,      KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0,      KN3,        KO6,      \
  KA4, KP2, KC6,                KK6,                KC0, KM3, KD0, KA1,   KO0, KK0, KL0  \
  KA4, KP2, KC6,                KX2,                KC0, KM3, KD0, KA1,   KO0, KK0, KL0  \
)

#endif //CONFIG_USER_H

M users/talljoe/config.h => users/talljoe/config.h +18 -3
@@ 1,5 1,19 @@
#ifndef USERSPACE_CONFIG_H
#define USERSPACE_CONFIG_H
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#pragma once

#define PERMISSIVE_HOLD



@@ 9,4 23,5 @@
#define BOOTMAGIC_KEY_SKIP KC_I
#define BOOTMAGIC_KEY_EEPROM_CLEAR KC_E

#endif // !USERSPACE_CONFIG_H
#define COMBO_COUNT 2
#define COMBO_TERM 250

A users/talljoe/macros.c => users/talljoe/macros.c +40 -0
@@ 0,0 1,40 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include "talljoe.h"

extern keymap_config_t keymap_config;

ostype_t get_os() {
  if(keymap_config.swap_lalt_lgui) {
    return MACOSX;
  }

  return WINDOWS;
}

#define IS_OSX() (get_os() == MACOSX)

#define MOD_SEND(KEY) (IS_OSX() ? SEND_STRING(SS_LCMD(KEY)) : SEND_STRING(SS_LCTRL(KEY)))

void macro_copy() { MOD_SEND("c"); }
void macro_paste() { MOD_SEND("v"); }
void macro_lock() {
  if (IS_OSX()) {
    SEND_STRING(SS_LCTRL(SS_LCMD("q")));
  } else {
    SEND_STRING(SS_LGUI("l"));
  }
}

A users/talljoe/macros.h => users/talljoe/macros.h +27 -0
@@ 0,0 1,27 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

typedef enum OSTYPE {
  WINDOWS,
  MACOSX,
  LINUX
} ostype_t;

ostype_t get_os(void);

void macro_copy(void);
void macro_paste(void);
void macro_lock(void);

M users/talljoe/rules.mk => users/talljoe/rules.mk +8 -1
@@ 1,4 1,11 @@
SRC += talljoe.c tapdance.c
SRC += talljoe.c macros.c $(wildcard users/talljoe/tapdance/*.c)
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
  SRC += visualizer.c
endif

ifeq ($(strip $(FLASH_BOOTLOADER)), yes)
    OPT_DEFS += -DFLASH_BOOTLOADER
endif

EXTRAFLAGS+=-flto


M users/talljoe/talljoe.c => users/talljoe/talljoe.c +70 -20
@@ 1,3 1,18 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include QMK_KEYBOARD_H

#include "talljoe.h"


@@ 5,14 20,31 @@
#include "../../../keyboards/wilba_tech/wt_rgb_backlight.h"
#endif

#ifdef VISUALIZER_ENABLE
const char layer_names[32][16] = {
  [_BASE] = "QWERTY",
  [_WORKMAN] = "Workman",
  [_NORMAN] = "Norman",
  [_DVORAK] = "Dvorak",
  [_COLMAK] = "Colmak",
  [_MALTROFF] = "Maltroff",
  [_NORTRON] = "Nortron",
  [_GAME] = "Game",
  [_NAV] = "Navigation",
  [_NUM] = "Numpad",
  [_ADJUST] = "Adjust",
  [_RESET] = "Reset",
};
#endif

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_BASE] = TEMPLATE_TKL(
      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 ,          KC_PSCR, KC_SLCK, MO_ADJ ,
      US_LOCK, KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12 ,          KC_PSCR, KC_SLCK, MO_ADJ ,
      US_GRV , KC_1   , KC_2   , KC_3   , KC_4   , KC_5   , KC_6   , KC_7   , KC_8   , KC_9   , KC_0   , KC_MINS, KC_EQL , US_BSLS, KC_INS , KC_HOME, KC_PGUP,
      US_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_BSPC, KC_DEL , KC_END , KC_PGDN,
      CTL_ESC, KC_A,    KC_S,    KC_D,    KC_F,    KC_G   , KC_H,    KC_J,    KC_K,    KC_L,    US_SCLN, KC_QUOT,          US_ENT ,
      SH_LBRC, KC_Z,    KC_X,    KC_C,    KC_V,    KC_B   , KC_N,    KC_M,    KC_COMM, KC_DOT,  KC_SLSH,                   SH_RBRC,          KC_UP  ,
      KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC2, KC_SPC1, KC_SPC3,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT , KC_LEFT, KC_DOWN, KC_RGHT),
      KC_LCTL, KC_LGUI, KC_LALT,                   KC_SPC2, KC_SPC3, KC_SPC1,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT , KC_LEFT, KC_DOWN, KC_RGHT),
  [_WORKMAN] = TEMPLATE(
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, KC_Q   , KC_D   , KC_R   , KC_W   , KC_B   , KC_J   , KC_F   , KC_U   , KC_P   , US_SCLN, _______, _______, _______,


@@ 42,9 74,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_MALTROFF] = TEMPLATE(
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, KC_Q,    KC_P,    KC_Y,    KC_G,    KC_B   , KC_J,    KC_M,    KC_U,    KC_K,    KC_L,    _______, _______, _______,
      _______, KC_A,    KC_N,    KC_I,    KC_S,    KC_F   , KC_D,    KC_T,    KC_H,    KC_O,    KC_R   , US_ENT ,          KC_BSPC,
      _______, KC_Z,    KC_X,    KC_C,    KC_V,    US_QUOT, KC_SCLN, KC_W,    KC_COMM, KC_DOT,  KC_SLSH,          _______, _______,
      _______, KC_A,    KC_N,    KC_I,    KC_S,    KC_F   , KC_D,    KC_T,    KC_H,    KC_O,    KC_R   , _______,          _______,
      _______, KC_Z,    KC_X,    KC_C,    KC_V,    KC_SCLN, KC_BSPC, KC_W,    KC_COMM, KC_DOT,  KC_SLSH,          _______, _______,
      _______, _______, _______,                   MLT_E  , _______, _______,                   _______, _______, _______, _______),
  // It's Norman but like Maltron
  [_NORTRON] = TEMPLATE(
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
      _______, KC_Q   , KC_W   , KC_D   , KC_F   , KC_K   , KC_J   , KC_U   , KC_BSPC, KC_L   , US_SCLN, _______, _______, _______,
      _______, KC_A   , KC_S   , KC_I   , KC_T   , KC_G   , KC_Y   , KC_N   , KC_R   , KC_O   , KC_H   , _______,          _______,
      _______, KC_Z   , KC_X   , KC_C   , KC_V   , KC_B   , KC_P   , KC_M   , KC_COMM, KC_DOT , KC_SLSH,          _______, _______,
      _______, _______, _______,                   MLT_E  , US_ENT , _______,                   _______, _______, _______, _______),
#endif
#ifdef ENABLE_GAME_LAYER
  [_GAME] = TEMPLATE(


@@ 57,27 96,33 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_NAV] = TEMPLATE_NAV(
      KC_GRV , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12 , XXXXXXX, XXXXXXX,
      US_TAB , KC_EXLM, KC_AT  , KC_HASH, KC_DLR , KC_PERC, KC_INS , KC_PGUP, KC_UP  , KC_PGDN, KC_BTN1, KC_BTN3, KC_BTN2, KC_DEL ,
      CTL_ESC, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_AMPR, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , US_QUOT,          TG_ADJ ,
      CTL_ESC, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_AMPR, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END , KC_BSPC,          TG_ADJ ,
      KC_LSFT, KC_EQL,  KC_PLUS, KC_MINS, KC_UNDS, KC_ASTR, KC_CALC, US_GRV , KC_WBAK, KC_WFWD, KC_WREF,          KC_RSFT, KC_APP ,
      KC_LCTL, KC_LGUI, KC_LALT,                   NV_SPC2, NV_SPC1, NV_SPC3,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ),
      KC_LCTL, KC_LGUI, KC_LALT,                   NV_SPC2, NV_SPC3, NV_SPC1,                   KC_RALT, KC_RGUI, KC_RCTL, KC_PTT ),
  [_NUM] = TEMPLATE_NUM(
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
      KC_GRV , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_VOLU, KC_CIRC, KC_7,    KC_8,    KC_9,    KC_PMNS, XXXXXXX, XXXXXXX, KC_DEL ,
      CTL_ESC, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_MUTE, KC_PENT, KC_4,    KC_5,    KC_6,    KC_PPLS, XXXXXXX,          KC_ENT ,
      CTL_ESC, KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_MUTE, KC_PENT, KC_4,    KC_5,    KC_6,    KC_PPLS, KC_BSPC,          KC_ENT ,
      KC_LSFT, KC_F9  , KC_F10 , KC_F11 , KC_F12 , KC_VOLD, KC_PIPE, KC_1,    KC_2,    KC_3,    KC_PAST,          KC_PSLS, TG_NUM ,
      KC_LCTL, KC_LGUI, KC_LALT,                   NM_SPC2, NM_SPC1, NM_SPC3,                   KC_PDOT, KC_PCMM, KC_RCTL, KC_PTT ),
      KC_LCTL, KC_LGUI, KC_LALT,                   NM_SPC2, NM_SPC3, NM_SPC1,                   KC_PDOT, KC_PCMM, KC_RCTL, KC_PTT ),
 // Adjust layer is on the split-shift key; or NAV+Enter (for non-split keyboards)
  [_ADJUST] = TEMPLATE_ADJUST(
      MO_RST , FX(1)  , FX(2)  , FX(3)  , FX(4)  , FX(5)  , FX(6)  , FX(7)  , FX(8) ,  FX(9) ,  FX(10) , BR_DEC , BR_INC , XXXXXXX, MO_RST ,
      MO_RST , H1_INC , S1_INC , H2_INC , S2_INC , EF_INC , RGB_HUI, RGB_SAI, RGB_MOD, RGB_M_P, DFAULTS, RGB_VAD, RGB_VAI, MO_RST ,
      XXXXXXX, H1_DEC , S1_DEC , H2_DEC , S2_DEC , EF_DEC , RGB_HUD, RGB_SAD, RGB_RMOD,RGB_M_K, RGB_M_B, RGB_M_G,          TG_ADJ ,
      TG_NKRO, LY_QWER, LY_WORK, LY_NRMN, LY_DVRK, LY_CLMK, XXXXXXX, LY_MALT, XXXXXXX, XXXXXXX, KC_MAKE,          KC_CAPS, XXXXXXX,
      MO_RST , AG_SWAP, AG_NORM,                   XXXXXXX, BL_TOGG, XXXXXXX,                   RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME),
      TG_NKRO, LY_QWER, LY_WORK, LY_CLMK, LY_DVRK, LY_NTRN, LY_NRMN, LY_MALT, XXXXXXX, XXXXXXX, KC_MAKE,          KC_CAPS, XXXXXXX,
      MO_RST , AG_SWAP, AG_NORM,                   XXXXXXX, XXXXXXX, BL_TOGG,                   RGB_TOG, XXXXXXX, XXXXXXX, TG_GAME),
  // To Reset hit FN + ` + Esc
  [_RESET] = TEMPLATE_RESET,
};

__attribute__((weak))
void matrix_scan_keymap(void) {
}

void matrix_scan_user(void) {
  matrix_scan_keymap();

  #ifdef KEYBOARD_gh60
    if (IS_LAYER_ON(_GAME)) {
      gh60_wasd_leds_on();


@@ 140,16 185,21 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
  switch (keycode) {
    case KC_MAKE:  // Compiles the firmware, and adds the flash command based on keyboard bootloader
      if (!record->event.pressed) {
        SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP

  #if   defined(BOOTLOADER_HALFKAY)
                    ":teensy"
  #elif defined(BOOTLOADER_CATERINA)
                    ":avrdude"
  #else
                    ":dfu"
  #endif
                    SS_TAP(X_ENTER));
          uint8_t temp_mod = get_mods();
          uint8_t temp_osm = get_oneshot_mods();
          clear_mods(); clear_oneshot_mods();
          SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
#ifndef FLASH_BOOTLOADER
          if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
#endif
          {
              SEND_STRING(":flash");
          }
          if ((temp_mod | temp_osm) & MOD_MASK_CTRL) {
              SEND_STRING(" -j8 --output-sync");
          }
          tap_code(KC_ENT);
          set_mods(temp_mod);
      }
      return false;
      break;

M users/talljoe/talljoe.h => users/talljoe/talljoe.h +43 -59
@@ 1,7 1,24 @@
#ifndef USERSPACE
#define USERSPACE

#include "quantum.h"
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include QMK_KEYBOARD_H
#include "tapdance/tapdance.h"
#include "macros.h"

enum userspace_custom_keycodes {
  KC_MAKE = SAFE_RANGE, // can always be here


@@ 22,6 39,7 @@ enum layers {
    _DVORAK,
    _COLMAK,
    _MALTROFF,
    _NORTRON,
    _GAME,
    _NAV,
    _NUM,


@@ 29,14 47,12 @@ enum layers {
    _RESET = RESET_LAYER,
};

enum tap_dancers {
  TD_SEMICOLON,
  TD_GRAVE,
  TD_QUOTE,
};
#ifdef VISUALIZER_ENABLE
  extern const char layer_names[][16];
#endif

#define MO_NAV    MO(_NAV)
#define MO_ADJ    MO(_ADJUST)
#define MO_ADJ    TD(TD_FUNCTION)
#define MO_RST    MO(_RESET)
#define TG_ADJ    TG(_ADJUST)
#define TG_NUM    TG(_NUM)


@@ 52,8 68,10 @@ enum tap_dancers {
#define LY_CLMK   DF(_COLMAK)
#if SPACE_COUNT >= 2
  #define LY_MALT DF(_MALTROFF)
  #define LY_NTRN DF(_NORTRON)
#else
  #define LY_MALT KC_NO
  #define LY_NTRN KC_NO
#endif
#define TG_NKRO   MAGIC_TOGGLE_NKRO
#define KC_PTT    KC_F24


@@ 66,61 84,29 @@ enum tap_dancers {
#define US_BSLS   LCA_T(KC_BSLS)
#define US_SCLN   TD(TD_SEMICOLON)
#define US_GRV    TD(TD_GRAVE)
#define US_QUOT   TD(TD_QUOTE)
#define US_TAB    C_S_T(KC_TAB)
#define SH_LBRC   LSFT_T(KC_LBRC)
#define SH_RBRC   RSFT_T(KC_RBRC)
#define US_LOCK   TD(TD_LOCK)

#define MLT_E     LT(_NUM, KC_E)

#ifndef SPACE_COUNT
  #define SPACE_COUNT 1
#endif
#if (SPACE_COUNT == 1)
  #define KC_SPC1   LT(_NAV, KC_SPC)
  #define KC_SPC2   XXXXXXX
  #define KC_SPC3   XXXXXXX

  #define NV_SPC1   _______
  #define NV_SPC2   _______
  #define NV_SPC3   _______

  #define NM_SPC1   _______
  #define NM_SPC2   _______
  #define NM_SPC3   _______
#elif (SPACE_COUNT == 2)
  #define KC_SPC1   LT(_NAV,KC_SPC)
  #define KC_SPC2   LT(_NUM,KC_ENT)

  #define NV_SPC1   KC_SPC
  #define NV_SPC2   KC_ENT

  #define NM_SPC1   KC_0
  #define NM_SPC2   KC_SPC

  #define KC_SPC3   XXXXXXX
  #define NV_SPC3   XXXXXXX
  #define NM_SPC3   XXXXXXX
#elif (SPACE_COUNT == 3)
  #ifdef SWAP_HANDS_ENABLE
    #define KC_SPC1 SH_T(KC_BSPC)
  #else
    #define KC_SPC1 KC_BSPC
  #endif
  #define KC_SPC2   LT(_NUM,KC_ENT)
  #define KC_SPC3   LT(_NAV,KC_SPC)

  #define NV_SPC1   KC_SPC
  #define NV_SPC2   KC_ENT
  #define NV_SPC3   KC_SPC

  #define NM_SPC1   KC_SPC
  #define NM_SPC2   XXXXXXX
  #define NM_SPC3   KC_0
#else
  #error "Unsupported space count:" SPACE_COUNT
#ifndef SWAP_HANDS_ENABLE
#define SH_T
#endif

#define KC_SPC1   LT(_NAV,KC_SPC)
#define KC_SPC2   LT(_NUM,KC_ENT)
#define KC_SPC3   SH_T(KC_BSPC)

#define NV_SPC1   KC_SPC
#define NV_SPC2   KC_ENT
#define NV_SPC3   KC_SPC

#define NM_SPC1   KC_0
#define NM_SPC2   XXXXXXX
#define NM_SPC3   KC_SPC

#ifndef ZEAL_RGB
  #define BR_INC KC_NO
  #define BR_DEC KC_NO


@@ 195,5 181,3 @@ enum tap_dancers {
      XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,          XXXXXXX, XXXXXXX,           \
      RESET  , XXXXXXX, XXXXXXX,                   XXXXXXX, RESET  , XXXXXXX,                   XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX)
#endif

#endif

A users/talljoe/tapdance/actions/td.function.c => users/talljoe/tapdance/actions/td.function.c +35 -0
@@ 0,0 1,35 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

static struct {
  int state;
} function_state = {0};

// Send semi-colon + enter on two taps
void tap_dance_function_finished(qk_tap_dance_state_t *state, void *user_data) {
  function_state.state = hold_cur_dance(state);
  switch (function_state.state) {
    case SINGLE_HOLD: layer_on(_ADJUST); break;
  }
}

void tap_dance_function_reset(qk_tap_dance_state_t *state, void *user_data) {
  switch (function_state.state) {
    case SPECIAL: reset_keyboard(); break;
    case SINGLE_HOLD: layer_off(_ADJUST); break;
  }
  function_state.state = 0;
}

A users/talljoe/tapdance/actions/td.grave.c => users/talljoe/tapdance/actions/td.grave.c +36 -0
@@ 0,0 1,36 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

// Send `. ~. ```
void tap_dance_grave_finished(qk_tap_dance_state_t *state, void *user_data) {
  switch(state->count) {
    case 1:
      SEND_STRING("`");
      break;
    case 2:
      SEND_STRING("~");
      break;
  }
}

void tap_dance_grave_each(qk_tap_dance_state_t *state, void *user_data) {
  if(state->count == 3) {
    SEND_STRING("```");
  } else if (state->count > 3) {
    SEND_STRING("`");
  }
}


A users/talljoe/tapdance/actions/td.lock.c => users/talljoe/tapdance/actions/td.lock.c +35 -0
@@ 0,0 1,35 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

static struct {
  int state;
} lock_state = {0};

// Send semi-colon + enter on two taps
void tap_dance_lock_finished(qk_tap_dance_state_t *state, void *user_data) {
  lock_state.state = cur_dance(state);
  switch (lock_state.state) {
    case SINGLE_TAP: register_code(KC_ESC); break;
    case SINGLE_HOLD: macro_lock(); break;
  }
}

void tap_dance_lock_reset(qk_tap_dance_state_t *state, void *user_data) {
  switch (lock_state.state) {
    case SINGLE_TAP: unregister_code(KC_ESC); break;
  }
  lock_state.state = 0;
}

A users/talljoe/tapdance/actions/td.semicolon.c => users/talljoe/tapdance/actions/td.semicolon.c +54 -0
@@ 0,0 1,54 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

static struct {
  int semicolon;
  bool mods;
} tap_state = {0};

void tap_dance_semicolon_each(qk_tap_dance_state_t *state, void *user_data) {
    tap_state.mods |= get_mods();
}

// Send semi-colon + enter on two taps
void tap_dance_semicolon_finished(qk_tap_dance_state_t *state, void *user_data) {
  tap_state.semicolon = hold_cur_dance(state);
  switch (tap_state.semicolon) {
    case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_SCLN); break;
    case SINGLE_HOLD: layer_on(_NUM); break;
  }
}

void tap_dance_semicolon_reset(qk_tap_dance_state_t *state, void *user_data) {
  switch (tap_state.semicolon) {
    case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_SCLN); break;
    case DOUBLE_TAP: {
      if (tap_state.mods) {
        SEND_STRING(";;"); // send normal when mods are pressed
      }
      else {
        SEND_STRING(";\n");
      }
      break;
    }
    case TRIPLE_TAP: {
      SEND_STRING(";\n\n");
    }
    case SPECIAL: layer_invert(_NUM); break;
    case SINGLE_HOLD: layer_off(_NUM); break;
  }
  tap_state.semicolon = 0;
}

A users/talljoe/tapdance/tapdance.h => users/talljoe/tapdance/tapdance.h +26 -0
@@ 0,0 1,26 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "quantum.h"
#include "td_setup.h"

enum tap_dancers {
  TD_SEMICOLON,
  TD_GRAVE,
  TD_LOCK,
  TD_FUNCTION,
};


A users/talljoe/tapdance/tapdance_actions.c => users/talljoe/tapdance/tapdance_actions.c +28 -0
@@ 0,0 1,28 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "../talljoe.h"
#include "actions/td.grave.c"
#include "actions/td.lock.c"
#include "actions/td.semicolon.c"
#include "actions/td.function.c"

qk_tap_dance_action_t tap_dance_actions[] = {
  [TD_SEMICOLON] = ACTION_TAP_DANCE_FN_ADVANCED(tap_dance_semicolon_each, tap_dance_semicolon_finished, tap_dance_semicolon_reset),
  [TD_LOCK]      = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_lock_finished, tap_dance_lock_reset),
  [TD_GRAVE]     = ACTION_TAP_DANCE_FN_ADVANCED(tap_dance_grave_each, tap_dance_grave_finished, NULL),
  [TD_FUNCTION]  = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_function_finished, tap_dance_function_reset),
};

R users/talljoe/tapdance.c => users/talljoe/tapdance/td_setup.c +16 -92
@@ 1,21 1,20 @@
//Tap Dance
#include "talljoe.h"
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

enum {
  SINGLE_TAP = 1,
  SINGLE_HOLD = 2,
  DOUBLE_TAP = 3,
  DOUBLE_HOLD = 4,
  DOUBLE_SINGLE_TAP = 5, //send two single taps
  TRIPLE_TAP = 6,
  TRIPLE_HOLD = 7,
  SPECIAL = 8
};

static struct {
  int quote;
  int semicolon;
} tap_state = {0};
#include "tapdance.h"

int cur_dance (qk_tap_dance_state_t *state) {
  if (state->count == 1) {


@@ 69,78 68,3 @@ int hold_cur_dance (qk_tap_dance_state_t *state) {
  }
  else return SPECIAL;
}

// Send semi-colon + enter on two taps
void tap_dance_semicolon_finished(qk_tap_dance_state_t *state, void *user_data) {
  tap_state.semicolon = hold_cur_dance(state);
  switch (tap_state.semicolon) {
    case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_SCLN); break;
    case SINGLE_HOLD: layer_on(_NUM); break;
  }
}

void tap_dance_semicolon_reset(qk_tap_dance_state_t *state, void *user_data) {
  switch (tap_state.semicolon) {
    case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_SCLN); break;
    case DOUBLE_TAP: {
      if (get_mods()) {
        SEND_STRING(";;"); // send normal when mods are pressed
      }
      else {
        SEND_STRING(";\n");
      }
      break;
    }
    case TRIPLE_TAP: {
      SEND_STRING(";\n\n");
    }
    case SPECIAL: layer_invert(_NUM); break;
    case SINGLE_HOLD: layer_off(_NUM); break;
  }
  tap_state.semicolon = 0;
}

// Send `. ~. ```
void tap_dance_grave_finished(qk_tap_dance_state_t *state, void *user_data) {
  switch(state->count) {
    case 1:
      SEND_STRING("`");
      break;
    case 2:
      SEND_STRING("~");
      break;
  }
}

void tap_dance_grave_each(qk_tap_dance_state_t *state, void *user_data) {
  if(state->count == 3) {
    SEND_STRING("```");
  } else if (state->count > 3) {
    SEND_STRING("`");
  }
}


void tap_dance_quote_finished(qk_tap_dance_state_t *state, void *user_data) {
  tap_state.quote = hold_cur_dance(state);
  switch (tap_state.quote) {
    case SINGLE_TAP: case DOUBLE_HOLD: register_code(KC_QUOT); break;
    case SINGLE_HOLD: layer_on(_NAV); break;
  }
}

void tap_dance_quote_reset(qk_tap_dance_state_t *state, void *user_data) {
  switch (tap_state.quote) {
    case SINGLE_TAP: case DOUBLE_HOLD: unregister_code(KC_QUOTE); break;
    case DOUBLE_TAP: SEND_STRING("\""); break;
    case TRIPLE_TAP: layer_invert(_NAV); break;
    case SINGLE_HOLD: layer_off(_NAV); break;
  }
  tap_state.quote = 0;
}

qk_tap_dance_action_t tap_dance_actions[] = {
  [TD_SEMICOLON] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_semicolon_finished, tap_dance_semicolon_reset),
  [TD_GRAVE]     = ACTION_TAP_DANCE_FN_ADVANCED(tap_dance_grave_each, tap_dance_grave_finished, NULL),
  [TD_QUOTE]     = ACTION_TAP_DANCE_FN_ADVANCED(NULL, tap_dance_quote_finished, tap_dance_quote_reset),
};

A users/talljoe/tapdance/td_setup.h => users/talljoe/tapdance/td_setup.h +29 -0
@@ 0,0 1,29 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

enum {
  SINGLE_TAP = 1,
  SINGLE_HOLD = 2,
  DOUBLE_TAP = 3,
  DOUBLE_HOLD = 4,
  DOUBLE_SINGLE_TAP = 5, //send two single taps
  TRIPLE_TAP = 6,
  TRIPLE_HOLD = 7,
  SPECIAL = 8
};

int cur_dance (qk_tap_dance_state_t *state);
int hold_cur_dance (qk_tap_dance_state_t *state);

A users/talljoe/visualizer.c => users/talljoe/visualizer.c +21 -0
@@ 0,0 1,21 @@
/* Copyright 2020 Joseph Wasson
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "talljoe.h"

static void get_visualizer_layer_and_color(visualizer_state_t* state) {
  state->status_text = layer_names[biton32(state->status.layer)];
}