]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/minidox/keymaps/tomb0y/keymap.c
Add tomb0y's minidox layout
[qmk_firmware.git] / keyboards / minidox / keymaps / tomb0y / keymap.c
1 #include "minidox.h"
2 #include "action_layer.h"
3 #include "eeconfig.h"
4
5 extern keymap_config_t keymap_config;
6
7 #define _WM      0
8 #define _DK      1
9 #define _FUN     2
10
11 #define _DK_ACT  0
12 #define _DK_REL  1
13 #define _KC_COMS 2
14 #define _KC_CENT 3
15
16 #define DK_ACT   M(_DK_ACT)        // activate dead key layer
17 #define DK_REL   M(_DK_REL)        // release dead key layer
18 #define KC_COMS  M(_KC_COMS)       // comma + space
19 #define KC_CENT  M(_KC_CENT)       // comma + enter
20 #define KC_ENOP  ALT_T(KC_ENT)     // press for enter, hold for option
21 #define KC_BSCM  GUI_T(KC_BSPC)    // press for backspace, hold for command
22 #define KC_CTES  CTL_T(KC_ESC)     // press for escape, hold for control
23 #define KC_SHTB  SFT_T(KC_TAB)     // press for tab, hold for shift
24 #define KC_SPFN  LT(_FUN, KC_SPC)  // press for space, hold for function layer (aka spacefn)
25 #define KC_OPTB  RALT(KC_TAB)      // option + tab
26 #define KC_CCSP  RGUI(RCTL(KC_P))  // control + command + p
27 #define KC_CSTB  S(RCTL(KC_TAB))   // shift + control + tab
28 #define KC_C_TB  RCTL(KC_TAB)      // control + tab
29 #define KC_C_LF  RCTL(KC_LEFT)     // control + left
30 #define KC_C_RT  RCTL(KC_RGHT)     // control + right
31 #define KC_BRUP  KC_F15            // brightness up on osx
32 #define KC_BRDN  KC_F14            // brightness down on osx
33
34 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
35 /* Base layer - workman
36  *
37  * ,----------------------------------.           ,----------------------------------.
38  * |   q  |   d  |   r  |   w  |   b  |           |   j  |   f  |   u  |   p  |   ;  |
39  * |------+------+------+------+------|           |------+------+------+------+------|
40  * |   a  |   s  |   h  |   t  |   g  |           |   y  |   n  |   e  |   o  |   i  |
41  * |------+------+------+------+------|           |------+------+------+------+------|
42  * |   z  |   x  |   m  |   c  |   v  |           |   k  |   l  | dead |   .  |   /  |
43  * `----------------------------------'           `----------------------------------'
44  *                  ,--------------------.    ,---------------------.
45  *                 | tab   | esc  | enter|    |bckspc| space|   tab |
46  *                 | shift | ctrl | alt  |    |  gui |   fn | shift |
47  *                 `-------+------+      |    |      |------+-------.
48  *                                `------'    `------'
49  */
50   [_WM] = KEYMAP( \
51     KC_Q,    KC_D,    KC_R,    KC_W,    KC_B,        KC_J,    KC_F,    KC_U,    KC_P,    KC_SCLN, \
52     KC_A,    KC_S,    KC_H,    KC_T,    KC_G,        KC_Y,    KC_N,    KC_E,    KC_O,    KC_I,    \
53     KC_Z,    KC_X,    KC_M,    KC_C,    KC_V,        KC_K,    KC_L,    DK_ACT,  KC_DOT,  KC_SLSH, \
54                       KC_SHTB, KC_CTES, KC_ENOP,     KC_BSCM, KC_SPFN, KC_SHTB                    \
55   ),
56
57 /* Dead key layer
58  *
59  * ,----------------------------------.           ,----------------------------------.
60  * |   %  |   &  |   ?  |   +  |   @  |           |   $  |   _  |   [  |   ]  |   !  |
61  * |------+------+------+------+------|           |------+------+------+------+------|
62  * |   #  |   (  |   =  |   0  |   {  |           |   }  |   1  |   *  |   )  |   -  |
63  * |------+------+------+------+------|           |------+------+------+------+------|
64  * |   6  |   7  |   8  |   9  |   |  |           |   \  |   2  |   3  |   4  |   5  |
65  * `----------------------------------'           `----------------------------------'
66  *                  ,--------------------.    ,---------------------.
67  *                 | tab   | esc  | comma|    |bckspc| comma|   tab |
68  *                 | shift | ctrl |+enter|    |  gui |+space| shift |
69  *                 `-------+------+      |    |      |------+-------.
70  *                                `------'    `------'
71  */
72   [_DK] = KEYMAP( \
73     KC_PERC, KC_AMPR, KC_QUES, KC_PLUS, KC_AT,       KC_DLR,  KC_UNDS, KC_LBRC, KC_RBRC, KC_EXLM, \
74     KC_HASH, KC_LPRN, KC_EQL,  KC_0,    KC_LCBR,     KC_RCBR, KC_1,    KC_ASTR, KC_RPRN, KC_MINS, \
75     KC_6,    KC_7,    KC_8,    KC_9,    KC_PIPE,     KC_BSLS, KC_2,    DK_REL,  KC_4,    KC_5,    \
76                       KC_SHTB, KC_CTES, KC_CENT,     KC_BSCM, KC_COMS, KC_SHTB                    \
77   ),
78
79 /* Function layer
80  *
81  * ,----------------------------------.           ,---------------------------------.
82  * |      |  del |⌃←  |  ⌃→ |      |           | mute | vol- | vol+ | ⌘⌃p |      |
83  * |------+------+------+------+------|           |------+------+------+------+------|
84  * |   `  |  end | pgup | pgdn | home |           |  ←  |   ↓  |   ↑  |  →  |   '  |
85  * |------+------+------+------+------|           |------+------+------+------+------|
86  * | ⌥⇥ |      |⇧⌃⇥| ⌃⇥  |       |           |      |  br- | ,    | br+  |  ^   |
87  * `----------------------------------'           `----------------------------------'
88  *                  ,--------------------.    ,---------------------.
89  *                 | tab   |      | enter|    |bckspc|      |   tab |
90  *                 | shift |      | alt  |    |  gui |      | shift |
91  *                 `-------+------+      |    |      |------+-------.
92  *                                `------'    `------'
93  */
94  [_FUN] = KEYMAP( \
95     XXXXXXX, KC_DEL,  KC_C_LF, KC_C_RT, XXXXXXX,     KC_MUTE, KC_VOLD, KC_VOLU, KC_CCSP, XXXXXXX, \
96     KC_GRV,  KC_END,  KC_PGUP, KC_PGDN, KC_HOME,     KC_LEFT, KC_DOWN, KC_UP,   KC_RGHT, KC_QUOT, \
97     KC_OPTB, XXXXXXX, KC_CSTB, KC_C_TB, XXXXXXX,     XXXXXXX, KC_BRDN, KC_COMM, KC_BRUP, KC_CIRC, \
98                       KC_SHTB, XXXXXXX, KC_ENOP,     KC_BSCM, _______, KC_SHTB                    \
99   )
100 };
101
102 void persistant_default_layer_set(uint16_t default_layer) {
103   eeconfig_update_default_layer(default_layer);
104   default_layer_set(default_layer);
105 }
106
107 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
108 {
109   switch(id) {
110     case _KC_COMS:
111       if (record->event.pressed) {
112         return MACRO(T(COMM), T(SPC), END); // comma + space
113       }
114       break;
115     case _KC_CENT:
116       if (record->event.pressed) {
117         return MACRO(T(COMM), T(ENT), END); // comma + enter
118       }
119       break;
120     case _DK_ACT:
121       if (record->event.pressed) {
122         if (keyboard_report->mods & MOD_BIT(KC_LSFT) || keyboard_report->mods & MOD_BIT(KC_RSFT)) { // act as comma when shift is pressed (eg <)
123           register_code(KC_COMM);
124         } else { // activate oneshot dead key layer otherwise
125           layer_on(_DK);
126           set_oneshot_layer(_DK, ONESHOT_START);
127         }
128       } else { // make sure to deactive dead key layer on key release
129         clear_oneshot_layer_state(ONESHOT_PRESSED);
130         unregister_code(KC_COMM);
131       }
132       break;
133     case _DK_REL:
134       if (record->event.pressed) { // act as 3 on keypress
135         register_code(KC_3);
136       } else { // make sure to deactive dead key layer on key release
137         clear_oneshot_layer_state(ONESHOT_PRESSED);
138         unregister_code(KC_3);
139       }
140       break;
141   }
142
143   return MACRO_NONE;
144 };