]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/levinson/keymaps/hexwire/keymap.c
Add Levinson rev2 (#1939)
[qmk_firmware.git] / keyboards / levinson / keymaps / hexwire / keymap.c
1 #include "levinson.h"
2 #include "action_layer.h"
3 #include "eeconfig.h"
4
5 extern keymap_config_t keymap_config;
6
7 #define _QWERTY 0
8 #define _COLEMAK 1
9 #define _DVORAK 2
10 #define _LOWER 3
11 #define _RAISE 4
12 #define _FN3 5
13 #define _FN4 6
14 #define _ADJUST 16
15
16 enum custom_keycodes {
17   QWERTY = SAFE_RANGE,
18   COLEMAK,
19   DVORAK,
20   LOWER,
21   RAISE,
22   FN3,
23   FN4,
24   ADJUST,
25 };
26
27 #define KC_ KC_TRNS
28 #define _______ KC_TRNS
29
30 #define KC_CAPW LGUI(LSFT(KC_3))        // Capture whole screen
31 #define KC_CPYW LGUI(LSFT(LCTL(KC_3)))  // Copy whole screen
32 #define KC_CAPP LGUI(LSFT(KC_4))        // Capture portion of screen
33 #define KC_CPYP LGUI(LSFT(LCTL(KC_4)))  // Copy portion of screen
34 #define KC_X0 MT(MOD_LCTL, KC_ESC)
35 #define KC_X1 LOWER
36 #define KC_X2 RAISE
37 #define KC_X3 LT(_FN3, KC_GRV)
38 #define KC_X4 MT(MOD_LSFT, KC_ENT)
39 #define KC_X5 BL_STEP
40
41 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42
43   [_QWERTY] = KC_KEYMAP(
44   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
45      TAB , Q  , W  , E  , R  , T  ,      Y  , U  , I  , O  , P  ,MINS,
46   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
47       X0 , A  , S  , D  , F  , G  ,      H  , J  , K  , L  ,SCLN,QUOT,
48   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
49      LSFT, Z  , X  , C  , V  , B  ,      N  , M  ,COMM,DOT ,SLSH, X4 ,
50   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
51       X5 ,LCTL,LALT,LGUI, X1 ,SPC ,     BSPC, X2 ,LEFT,DOWN, UP ,RGHT
52   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
53   ),
54
55   [_COLEMAK] = KC_KEYMAP(
56   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
57      TAB , Q  , W  , F  , P  , G  ,      J  , L  , U  , Y  ,SCLN,MINS,
58   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
59       X0 , A  , R  , S  , T  , D  ,      H  , N  , E  , I  , O  ,QUOT,
60   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
61      LSFT, Z  , X  , C  , V  , B  ,      K  , M  ,COMM,DOT ,SLSH, X4 ,
62   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
63       X3 ,LCTL,LALT,LGUI, X1 ,SPC ,     BSPC, X2 ,LEFT,DOWN, UP ,RGHT
64   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
65   ),
66
67   [_DVORAK] = KC_KEYMAP(
68   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
69      TAB ,QUOT,COMM,DOT , P  , Y  ,      F  , G  , C  , R  , L  ,MINS,
70   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
71       X0 , A  , O  , E  , U  , I  ,      D  , H  , T  , N  , S  ,SLSH,
72   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
73      LSFT,SCLN, Q  , J  , K  , X  ,      B  , M  , W  , V  , Z  , X4 ,
74   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
75       X3 ,LCTL,LALT,LGUI, X1 ,SPC ,     BSPC, X2 ,LEFT,DOWN, UP ,RGHT
76   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
77   ),
78
79   [_LOWER] = KC_KEYMAP(
80   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
81          , 1  , 2  , 3  , 4  , 5  ,      6  , 7  , 8  , 9  , 0  ,    ,
82   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
83      DEL ,CAPP,LEFT,RGHT, UP ,LBRC,     RBRC, P4 , P5 , P6 ,PLUS,PIPE,
84   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
85          ,CPYP,    ,    ,DOWN,LCBR,     RCBR, P1 , P2 , P3 ,MINS,    ,
86   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
87          ,    ,    ,    ,    ,    ,     DEL ,    , P0 ,PDOT,    ,
88   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
89   ),
90
91   [_RAISE] = KC_KEYMAP(
92   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
93          ,EXLM, AT ,HASH,DLR ,PERC,     CIRC,AMPR,ASTR,LPRN,RPRN,    ,
94   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
95      DEL ,MPRV,MNXT,VOLU,PGUP,UNDS,     EQL ,HOME,    ,    ,    ,BSLS,
96   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
97      MUTE,MSTP,MPLY,VOLD,PGDN,MINS,     PLUS,END ,    ,    ,    ,    ,
98   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
99          ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,
100   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
101   ),
102
103   [_FN3] = KC_KEYMAP(
104   //,----+----+----+----+----+----.    ,----+----+----+----+----+----.
105      F12 , F1 , F2 , F3 , F4 , F5 ,      F6 , F7 , F8 , F9 ,F10 ,F11 ,
106   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
107          ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
108   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
109          ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,    ,
110   //|----+----+----+----+----+----|    |----+----+----+----+----+----|
111          ,    ,    ,    ,    ,    ,         ,    ,    ,    ,    ,
112   //`----+----+----+----+----+----'    `----+----+----+----+----+----'
113   ),
114
115 /* Adjust (Lower + Raise)
116  * ,-----------------------------------------------------------------------------------.
117  * |      | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn|      |      |
118  * |------+------+------+------+------+-------------+------+------+------+------+------|
119  * |      |      |      |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|      |      |
120  * |------+------+------+------+------+------|------+------+------+------+------+------|
121  * |      |      |      |      |      |      |      |      |      |      |      |      |
122  * |------+------+------+------+------+------+------+------+------+------+------+------|
123  * |      |      |      |      |      |             |      |      |      |      |      |
124  * `-----------------------------------------------------------------------------------'
125  */
126   [_ADJUST] = KEYMAP( \
127     _______, RESET  , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
128     _______, _______, _______, AU_ON,   AU_OFF,  AG_NORM, AG_SWAP, QWERTY,  COLEMAK, DVORAK,  _______, _______, \
129     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
130     _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
131   )
132
133
134 };
135
136 #ifdef AUDIO_ENABLE
137 float tone_qwerty[][2]     = SONG(QWERTY_SOUND);
138 float tone_dvorak[][2]     = SONG(DVORAK_SOUND);
139 float tone_colemak[][2]    = SONG(COLEMAK_SOUND);
140 #endif
141
142 void persistent_default_layer_set(uint16_t default_layer) {
143   eeconfig_update_default_layer(default_layer);
144   default_layer_set(default_layer);
145 }
146
147 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
148   switch (keycode) {
149     case QWERTY:
150       if (record->event.pressed) {
151         #ifdef AUDIO_ENABLE
152           PLAY_SONG(tone_qwerty);
153         #endif
154         persistent_default_layer_set(1UL<<_QWERTY);
155       }
156       return false;
157       break;
158     case COLEMAK:
159       if (record->event.pressed) {
160         #ifdef AUDIO_ENABLE
161           PLAY_SONG(tone_colemak);
162         #endif
163         persistent_default_layer_set(1UL<<_COLEMAK);
164       }
165       return false;
166       break;
167     case DVORAK:
168       if (record->event.pressed) {
169         #ifdef AUDIO_ENABLE
170           PLAY_SONG(tone_dvorak);
171         #endif
172         persistent_default_layer_set(1UL<<_DVORAK);
173       }
174       return false;
175       break;
176     case LOWER:
177       if (record->event.pressed) {
178         layer_on(_LOWER);
179         update_tri_layer(_LOWER, _RAISE, _ADJUST);
180       } else {
181         layer_off(_LOWER);
182         update_tri_layer(_LOWER, _RAISE, _ADJUST);
183       }
184       return false;
185       break;
186     case RAISE:
187       if (record->event.pressed) {
188         layer_on(_RAISE);
189         update_tri_layer(_LOWER, _RAISE, _ADJUST);
190       } else {
191         layer_off(_RAISE);
192         update_tri_layer(_LOWER, _RAISE, _ADJUST);
193       }
194       return false;
195       break;
196     case ADJUST:
197       if (record->event.pressed) {
198         layer_on(_ADJUST);
199       } else {
200         layer_off(_ADJUST);
201       }
202       return false;
203       break;
204   }
205   return true;
206 }