aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--keyboards/satan/keymaps/lepa/keymap.c119
-rw-r--r--keyboards/satan/keymaps/lepa/readme.md4
-rw-r--r--keyboards/satan/keymaps/lepa/rules.mk22
3 files changed, 145 insertions, 0 deletions
diff --git a/keyboards/satan/keymaps/lepa/keymap.c b/keyboards/satan/keymaps/lepa/keymap.c
new file mode 100644
index 000000000..080068427
--- /dev/null
+++ b/keyboards/satan/keymaps/lepa/keymap.c
@@ -0,0 +1,119 @@
1#include QMK_KEYBOARD_H
2
3#define MY_LESC LT(1, KC_ESC)
4#define MY_RENT LT(1, KC_ENT)
5#define MY_LCA TD(TD_LCA)
6#define MY_RCA TD(TD_RCA)
7#define MY_LGA TD(TD_LGA)
8#define MY_RGA TD(TD_RGA)
9#define MY_APP TD(TD_APP_HYPR)
10
11enum {
12 TD_LCA,
13 TD_RCA,
14 TD_LGA,
15 TD_RGA,
16 TD_APP_HYPR
17};
18
19
20const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
21 LAYOUT_60_ansi(
22 KC_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, KC_BSPC,
23 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,
24 MY_LESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, MY_RENT,
25 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
26 MY_LGA, KC_LALT, MY_LCA, KC_SPC, MY_RCA, KC_RALT, MY_APP, MY_RGA),
27
28 LAYOUT_60_ansi(
29 KC_TRNS, 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_DEL,
30 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
31 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS,
32 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
33 KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
34};
35
36enum {
37 SINGLE_TAP = 1,
38 SINGLE_HOLD = 2,
39 DOUBLE_TAP = 3,
40 DOUBLE_HOLD = 4,
41 DOUBLE_SINGLE_TAP = 5,
42 UNKNOWN_TAP = 6
43};
44
45typedef struct {
46 bool is_press_action;
47 int state;
48} tap;
49
50int cur_dance(qk_tap_dance_state_t *state) {
51 switch (state->count) {
52 case 1:
53 if (state->interrupted || state->pressed == 0) {
54 return SINGLE_TAP;
55 }
56 return SINGLE_HOLD;
57 case 2:
58 if (state->interrupted) {
59 return DOUBLE_SINGLE_TAP;
60 }
61 if (state->pressed) {
62 return DOUBLE_HOLD;
63 }
64 return DOUBLE_TAP;
65 }
66 return UNKNOWN_TAP;
67}
68
69#define my_dance_combo(N, K1, K2) \
70static tap N ## _state = { \
71 .is_press_action = true, \
72 .state = 0 \
73}; \
74 \
75void N ## _finished(qk_tap_dance_state_t *state, void *user_data) { \
76 N ## _state.state = cur_dance(state); \
77 switch (N ## _state.state) { \
78 case SINGLE_TAP: \
79 case SINGLE_HOLD: \
80 register_code(K1); \
81 break; \
82 case DOUBLE_TAP: \
83 case DOUBLE_SINGLE_TAP: \
84 case DOUBLE_HOLD: \
85 register_code(K1); \
86 register_code(K2); \
87 break; \
88 } \
89} \
90 \
91void N ## _reset(qk_tap_dance_state_t *state, void *user_data) { \
92 switch (N ## _state.state) { \
93 case SINGLE_TAP: \
94 case SINGLE_HOLD: \
95 unregister_code(K1); \
96 break; \
97 case DOUBLE_TAP: \
98 case DOUBLE_SINGLE_TAP: \
99 case DOUBLE_HOLD: \
100 unregister_code(K2); \
101 unregister_code(K1); \
102 break; \
103 } \
104 N ## _state.state = 0; \
105}
106
107my_dance_combo(lca, KC_LCTL, KC_LALT)
108my_dance_combo(rca, KC_RCTL, KC_RALT)
109my_dance_combo(lga, KC_LGUI, KC_LALT)
110my_dance_combo(rga, KC_RGUI, KC_RALT)
111
112qk_tap_dance_action_t tap_dance_actions[] = {
113 [TD_LCA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lca_finished, lca_reset),
114 [TD_RCA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rca_finished, rca_reset),
115 [TD_LGA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, lga_finished, lga_reset),
116 [TD_RGA] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, rga_finished, rga_reset),
117
118 [TD_APP_HYPR] = ACTION_TAP_DANCE_DOUBLE(KC_APP, KC_HYPR)
119};
diff --git a/keyboards/satan/keymaps/lepa/readme.md b/keyboards/satan/keymaps/lepa/readme.md
new file mode 100644
index 000000000..99ee135f0
--- /dev/null
+++ b/keyboards/satan/keymaps/lepa/readme.md
@@ -0,0 +1,4 @@
1# Satan GH60 ANSI Layout that uses tap dance
2
3![Satan GH60 Image](https://i.imgur.com/9bKM2TM.png)
4
diff --git a/keyboards/satan/keymaps/lepa/rules.mk b/keyboards/satan/keymaps/lepa/rules.mk
new file mode 100644
index 000000000..636dd1b1d
--- /dev/null
+++ b/keyboards/satan/keymaps/lepa/rules.mk
@@ -0,0 +1,22 @@
1# Build Options
2# change to "no" to disable the options, or define them in the Makefile in
3# the appropriate keymap folder that will get included automatically
4#
5BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
6MOUSEKEY_ENABLE = no # Mouse keys(+4700)
7EXTRAKEY_ENABLE = no # Audio control and System control(+450)
8CONSOLE_ENABLE = no # Console for debug(+400)
9COMMAND_ENABLE = yes # Commands for debug and configuration
10NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
11BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
12MIDI_ENABLE = no # MIDI controls
13AUDIO_ENABLE = no # Audio output on port C6
14UNICODE_ENABLE = no # Unicode
15BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
16RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
17SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
18TAP_DANCE_ENABLE = yes
19
20ifndef QUANTUM_DIR
21 include ../../../../Makefile
22endif