]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/viterbi/keymaps/mike808/keymap.c
Merge branch 'master' of github.com:qmk/qmk_firmware into hf/shinydox
[qmk_firmware.git] / keyboards / viterbi / keymaps / mike808 / keymap.c
1 #include QMK_KEYBOARD_H
2
3 #define _DVORAK 0
4 #define _QWERTY 1
5 #define _FN1 2
6 #define _MOUSE 3
7
8 enum custom_keycodes {
9   DVORAK = SAFE_RANGE,
10   QWERTY,
11 };
12
13 #define KC_ KC_TRNS
14 #define _______ KC_TRNS
15
16 #define KC_DVOR DVORAK
17 #define KC_QWER QWERTY
18 #define KC_FN1 MO(_FN1)
19
20 // Tap-Hold keys (QWERTY)
21 #define KC_S_C MT(MOD_LCTL, KC_S)
22 #define KC_D_A MT(MOD_LALT, KC_D)
23 #define KC_F_G MT(MOD_LGUI, KC_F)
24 #define KC_J_G MT(MOD_RGUI, KC_J)
25 #define KC_K_A MT(MOD_RALT, KC_K)
26 #define KC_L_C MT(MOD_RCTL, KC_L)
27
28 // Tap-Hold keys (Dvorak)
29 #define KC_O_C MT(MOD_LCTL, KC_O)
30 #define KC_E_A MT(MOD_LALT, KC_E)
31 #define KC_U_G MT(MOD_LGUI, KC_U)
32 #define KC_H_G MT(MOD_RGUI, KC_H)
33 #define KC_T_A MT(MOD_RALT, KC_T)
34 #define KC_N_C MT(MOD_RCTL, KC_N)
35
36 #define KC_G_A LGUI(KC_A)
37 #define KC_G_C LGUI(KC_C)
38 #define KC_G_V LGUI(KC_V)
39 #define KC_G_X LGUI(KC_X)
40 #define KC_G_Z LGUI(KC_Z)
41 #define KC_G_BL LGUI(KC_BSLS)
42 #define KC_G_TB LGUI(KC_TAB)
43 #define KC_G_SP LGUI(KC_SPC)
44
45 #define KC_ENTM LT(_MOUSE, KC_ENT)
46
47 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
48
49   [_QWERTY] = LAYOUT_kc(
50   //,----+----+----+----+----+----+----.    ,----+----+----+----+----+----+----.
51      DVOR,ESC , 1  , 2  , 3  , 4  , 5  ,      6  , 7  , 8  , 9  , 0  ,MINS,PGUP,
52   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
53      G_A ,TAB , Q  , W  , E  , R  , T  ,      Y  , U  , I  , O  , P  ,BSLS,PGDN,
54   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
55      G_X ,CAPS, A  ,S_C ,D_A ,F_G , G  ,      H  ,J_G ,K_A ,L_C ,SCLN,QUOT, UP ,
56   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
57      G_C ,LSFT, Z  , X  , C  , V  , B  ,      N  , M  ,COMM,DOT ,SLSH,RSFT,DOWN,
58   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
59      G_V ,FN1 ,G_TB,G_SP,BSPC,SPC ,SPC ,     ENTM,ENTM,G_Z ,GRV ,EQL ,LEFT,RGHT
60   //`----+----+----+----+----+----+----'    `----+----+----+----+----+----+----'
61   ),
62
63   [_DVORAK] = LAYOUT_kc(
64   //,----+----+----+----+----+----+----.    ,----+----+----+----+----+----+----.
65      QWER,ESC , 1  , 2  , 3  , 4  , 5  ,      6  , 7  , 8  , 9  , 0  ,EQL ,PGUP,
66   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
67      G_A ,TAB ,QUOT,COMM,DOT , P  , Y  ,      F  , G  , C  , R  , L  ,SLSH,PGDN,
68   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
69      G_X ,CAPS, A  ,O_C ,E_A ,U_G , I  ,      D  ,H_G ,T_A ,N_C , S  ,MINS, UP ,
70   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
71      G_C ,LSFT,SCLN, Q  , J  , K  , X  ,      B  , M  , W  , V  , Z  ,RSFT,DOWN,
72   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
73      G_V ,FN1 ,G_TB,G_SP,BSPC,SPC ,SPC ,     ENTM,ENTM,G_Z ,GRV ,BSLS,LEFT,RGHT
74   //`----+----+----+----+----+----+----'    `----+----+----+----+----+----+----'
75   ),
76
77   [_FN1] = LAYOUT_kc(
78   //,----+----+----+----+----+----+----.    ,----+----+----+----+----+----+----.
79          ,    , F1 , F2 , F3 , F4 , F5 ,      F6 , F7 , F8 , F9 ,F10 ,F11 ,    ,
80   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
81          ,    ,EXLM, AT ,LCBR,RCBR,PIPE,         , P7 , P8 , P9 ,ASTR,F12 ,    ,
82   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
83          ,    ,HASH,DLR ,LPRN,RPRN,GRV ,         , P4 , P5 , P6 ,PLUS,MINS,    ,
84   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
85          ,    ,PERC,CIRC,LBRC,RBRC,TILD,     AMPR, P1 , P2 , P3 ,SLSH,    ,    ,
86   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
87          ,    ,    ,    ,    ,    ,    ,         ,    ,PDOT, P0 ,EQL ,    ,    
88   //`----+----+----+----+----+----+----'    `----+----+----+----+----+----+----'
89   ),
90
91   [_MOUSE] = LAYOUT_kc(
92   //,----+----+----+----+----+----+----.    ,----+----+----+----+----+----+----.
93          ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,    ,
94   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
95          ,    ,    ,    ,MS_U,    ,    ,         ,    ,    ,    ,    ,    ,    ,
96   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
97          ,    ,    ,MS_L,MS_D,MS_R,    ,         ,    ,    ,    ,    ,    ,    ,
98   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
99          ,    ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,    ,
100   //|----+----+----+----+----+----+----|    |----+----+----+----+----+----+----|
101          ,    ,    ,    ,BTN1,BTN2,    ,         ,    ,    ,    ,    ,    ,    
102   //`----+----+----+----+----+----+----'    `----+----+----+----+----+----+----'
103   )
104 };
105
106 #ifdef AUDIO_ENABLE
107 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
108 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
109 #endif
110
111 void update_rgblight(uint16_t layer) {
112   if (layer & (1UL << _DVORAK)) {
113     rgblight_sethsv_green();
114   } else if (layer & (1UL << _QWERTY)) {
115     rgblight_sethsv_goldenrod();
116   }
117 }
118
119 void persistent_default_layer_set(uint16_t default_layer) {
120   eeconfig_update_default_layer(default_layer);
121   default_layer_set(default_layer);
122   #ifdef RGBLIGHT_ENABLE
123   update_rgblight(default_layer);
124   #endif // RGBLIGHT_ENABLE
125 }
126
127 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
128   switch (keycode) {
129     case QWERTY:
130       if (record->event.pressed) {
131         #ifdef AUDIO_ENABLE
132           PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
133         #endif
134         persistent_default_layer_set(1UL << _QWERTY);
135       }
136       return false;
137       break;
138     case DVORAK:
139       if (record->event.pressed) {
140         #ifdef AUDIO_ENABLE
141           PLAY_NOTE_ARRAY(tone_dvorak, false, 0);
142         #endif
143         persistent_default_layer_set(1UL << _DVORAK);
144       }
145       return false;
146       break;
147   }
148   return true;
149 }
150
151
152 void matrix_init_user(void) {
153   #ifdef RGBLIGHT_ENABLE
154   rgblight_enable();
155   uint8_t default_layer = eeconfig_read_default_layer();
156   update_rgblight(default_layer);
157   #endif
158 }