1 /* Copyright 2015-2017 Jack Humbert
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 #define _______ KC_TRNS
35 #define UNDO LCTL(KC_Z)
36 #define REDO LCTL(KC_Y)
37 #define COPYCUT TD(CPC)
38 #define PASTE LCTL(KC_V)
40 #define MO_SC_U KC_MS_WH_UP
41 #define MO_SC_D KC_MS_WH_DOWN
42 #define MO_SC_L KC_MS_WH_LEFT
43 #define MO_SC_R KC_MS_WH_RIGHT
45 #define MO_D KC_MS_DOWN
46 #define MO_L KC_MS_LEFT
47 #define MO_R KC_MS_RIGHT
48 #define MO_CL_L KC_MS_BTN1
49 #define MO_CL_R KC_MS_BTN2
50 #define MO_CL_M KC_MS_BTN3
51 #define MO_CL_1 KC_MS_BTN4
52 #define MO_CL_2 KC_MS_BTN5
53 #define MO_AC_0 KC_MS_ACCEL0
54 #define MO_AC_1 KC_MS_ACCEL1
55 #define MO_AC_2 KC_MS_ACCEL2
57 #define PHY_HB UC(0x0127)
58 #define PHY_DE UC(0xc2b0)
59 #define TUR_TL UC(0x20ba)
60 #define EUR_ER UC(0x20ac)
61 #define EUR_PN UC(0x00a3)
63 enum custom_keycodes {
88 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
91 * ,------------------------------------------------------------------------.
92 * | Blt | " | , | . | P | Y || F | G | C | R | L | Bkp |
93 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
94 * | Esc | A | O | E | U | I || D | H | T | N | S | Del |
95 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
96 * |Sh\CL| ; : | Q | J | K | X || B | M | W | V | Z |MOUSE|
97 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
98 * | Ctl | Alt | Meta| Tab | SYM | Spc || Ent | FUN | Lft | Dwn | Up | Rgt |
99 * `------------------------------------------------------------------------'
102 {BL_STEP,TD(QUO),KC_COMM,KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC},
103 {KC_ESC ,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_DEL },
104 {TD(CLS),TD(SCL),KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, TT(_MO)},
105 {KC_LCTL,TD(ATD),KC_LGUI,KC_TAB, TT(_SY),KC_SPC, KC_ENT, TT(_FN),KC_LEFT,KC_DOWN,KC_UP, KC_RGHT}
108 {_______,_______,_______,_______,_______,_______,_______, TUR_G, TUR_C, _______,_______,_______},
109 {_______, TUR_A, TUR_O, _______, TUR_U, TUR_I, _______, PHY_HB,_______,_______, TUR_S, _______},
110 {_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______},
111 {_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______}
115 * ,------------------------------------------------------------------------.
116 * | OFF | Q | W | E | R | T || F1 | F2 | Ctrl| ^ |Shift| Esc |
117 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
118 * | ~ | A | S | D | F | G || F3 | F4 | < | v | > |Enter|
119 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
120 * | Shf | Z | X | C | V | B || F5 | F6 | , | . | / ? | Alt |
121 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
122 * | Alt | Ctrl| ` ~ | - _ | | Spc || Spc | | 1 | 2 | 3 | 4 |
123 * `------------------------------------------------------------------------'
126 {TG(_GM),KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F1, KC_F2, KC_RCTL,KC_UP, KC_RSFT,KC_ESC },
127 {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_F3, KC_F4, KC_LEFT,KC_DOWN,KC_RGHT,KC_ENT },
128 {KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F5, KC_F6, KC_COMM,KC_DOT, KC_SLSH,KC_RALT},
129 {KC_LALT,KC_LCTL,KC_GRV, KC_MINS,_______,KC_SPC, KC_SPC, _______,KC_1, KC_2, KC_3, KC_4 }
132 /* Mouse control layer
133 * ,------------------------------------------------------------------------.
134 * | |.....| ^ |.....|.....|Acc 2||.....|.....|.....| |^| |.....| |
135 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
136 * | | < | v | > |.....|Acc 1||.....|.....| <-- | |v| | --> | |
137 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
138 * | | Left| Mid |Right|.....|Acc 0||.....|.....|Btn 4|.....|Btn 5| |
139 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
140 * | | | | | | || | | | | | |
141 * `------------------------------------------------------------------------'
144 {TG(_MO),XXX, MO_U, XXX, XXX, MO_AC_2,XXX, XXX, XXX, MO_SC_U,XXX, _______},
145 {_______,MO_L, MO_D, MO_R, XXX, MO_AC_1,XXX, XXX, MO_SC_L,MO_SC_D,MO_SC_R,_______},
146 {_______,MO_CL_L,MO_CL_M,MO_CL_R,XXX, MO_AC_0,XXX, XXX, MO_CL_1,XXX, MO_CL_2,_______},
147 {_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______}
151 * ,------------------------------------------------------------------------.
152 * | OFF | ! | 1 | 2 | 3 | & || = | + | - | * | % | |
153 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
154 * | _ | ( ) | 4 | 5 | 6 | \ || / | [ ] | { } | < > | | | |
155 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
156 * |degre| ? | 7 | 8 | 9 | ~ || ` | @ | # | $ | ^ | |
157 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
158 * | | | | 0 | | || | |TLira| Euro|Pound| |
159 * `------------------------------------------------------------------------'
163 {TG(_SY),KC_EXLM,KC_1, KC_2, KC_3, KC_AMPR,KC_EQL, KC_PLUS,KC_MINS,KC_ASTR,KC_PERC,_______},
164 {KC_UNDS,PARAN, KC_4, KC_5, KC_6, KC_BSLS,KC_SLSH,SQUAR, CURLY, ANGUL, KC_PIPE,_______},
165 {PHY_DE, KC_QUES,KC_7, KC_8, KC_9, KC_TILD,KC_GRV, KC_AT, KC_HASH,KC_DLR, KC_CIRC,_______},
166 {_______,_______,_______,KC_0, _______,_______,_______,_______,TUR_TL, EUR_ER, EUR_PN, _______}
170 * ,------------------------------------------------------------------------.
171 * | OFF | game|music| | |RESET||RESET| win | lin | wake|sleep|power|
172 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
173 * | F1 | F2 | F3 | F4 | F5 | F6 || F7 | F8 | F9 | F10 | F11 | F12 |
174 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
175 * | | undo| redo|cutcp|paste|vol 0||prtsc| ins | rev.| stop| play| next|
176 * |-----+-----+-----+-----+-----+-----++-----+-----+-----+-----+-----+-----|
177 * | | | | | |vol -||vol +| | home|pg dn|pg up| end |
178 * `------------------------------------------------------------------------'
182 {TG(_FN),TG(_GM),MU_ON, _______,_______,RESET, RESET, UNI_LI, UNI_WN ,KC_WAKE,KC_SLEP,KC_PWR },
183 {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 },
184 {_______,UNDO, REDO, COPYCUT,PASTE, KC_MUTE,KC_PSCR,KC_INS, KC_MPRV,KC_MSTP,KC_MPLY,KC_MNXT},
185 {_______,_______,_______,_______,_______,KC_VOLD,KC_VOLU,_______,KC_HOME,KC_PGDN,KC_PGUP,KC_END }
189 * ,-----------------------------------------------------------------------.
190 * | OFF |rec S| stop| play|sped^|spedv|cycle|.....|.....|.....|.....|.....|
191 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
192 * |.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|
193 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
194 * |.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|
195 * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
196 * |.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|.....|
197 * `-----------------------------------------------------------------------'
200 { MU_OFF, KC_LCTL, KC_LALT, KC_LGUI, KC_UP, KC_DOWN, MU_MOD, XXX, XXX, XXX, XXX, XXX },
201 { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX },
202 { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX },
203 { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX }
207 // Set unicode method to linux.
208 void matrix_init_user(){
209 set_unicode_input_mode(UC_LNX);
213 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
214 // This section is a bit tedious in VIM, so I shortened lines
215 // Check for shift letter
216 bool is_capital = ( keyboard_report->mods &
217 (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) ) ^
218 ( keyboard_report->mods & MOD_BIT(KC_CAPS) );
220 // Add music layer to music functionality
222 if (record->event.pressed) { layer_on(_MS); }
225 if (record->event.pressed) { layer_off(_MS); }
227 // Turkish letters keycodes
229 if (record->event.pressed) {
231 unicode_input_start(); register_hex(0x00c2); unicode_input_finish();
233 unicode_input_start(); register_hex(0x00e2); unicode_input_finish();
238 if (record->event.pressed) {
240 unicode_input_start(); register_hex(0x00dc); unicode_input_finish();
242 unicode_input_start(); register_hex(0x00fc); unicode_input_finish();
247 if (record->event.pressed) {
249 unicode_input_start(); register_hex(0x0130); unicode_input_finish();
251 unicode_input_start(); register_hex(0x0131); unicode_input_finish();
256 if (record->event.pressed) {
258 unicode_input_start(); register_hex(0x00d6); unicode_input_finish();
260 unicode_input_start(); register_hex(0x00f6); unicode_input_finish();
265 if (record->event.pressed) {
267 unicode_input_start(); register_hex(0x015e); unicode_input_finish();
269 unicode_input_start(); register_hex(0x015f); unicode_input_finish();
274 if (record->event.pressed) {
276 unicode_input_start(); register_hex(0x011e); unicode_input_finish();
278 unicode_input_start(); register_hex(0x011f); unicode_input_finish();
283 if (record->event.pressed) {
285 unicode_input_start(); register_hex(0x00c7); unicode_input_finish();
287 unicode_input_start(); register_hex(0x00e7); unicode_input_finish();
291 // Keys to change unicode mode
293 if( record->event.pressed ) {
294 set_unicode_input_mode(UC_LNX);
298 if( record->event.pressed ) {
299 set_unicode_input_mode(UC_WIN);
306 // Tap dance feature for the altgr implementation
307 void altgr_dvo_tap (qk_tap_dance_state_t *state, void *user_data) {
308 if (state->count == 1) {
309 register_code (KC_RALT);
310 } else if (state->count == 2) {
311 unregister_code (KC_RALT);
313 } else if (state->count == 3) {
317 void altgr_dvo_end (qk_tap_dance_state_t *state, void *user_data) {
318 if (state->count == 1) {
319 unregister_code (KC_RALT);
320 } else if (state->count == 2) {
325 // Shift vs capslock function
326 void caps_tap (qk_tap_dance_state_t *state, void *user_data) {
327 if (state->count == 1) {
328 register_code (KC_LSFT);
329 } else if (state->count == 2) {
330 unregister_code (KC_LSFT);
331 register_code (KC_CAPS);
334 void caps_tap_end (qk_tap_dance_state_t *state, void *user_data) {
335 if (state->count == 1) {
336 unregister_code (KC_LSFT);
338 unregister_code (KC_CAPS);
343 void paranthesis_dance (qk_tap_dance_state_t *state, void *user_data) {
344 if (state->count == 1) {
345 SEND_STRING("()"); register_code(KC_LEFT); unregister_code(KC_LEFT);
346 } else if (state->count == 2) {
348 } else if (state->count == 3) {
352 void curly_dance (qk_tap_dance_state_t *state, void *user_data) {
353 if (state->count == 1) {
354 SEND_STRING("{}"); register_code(KC_LEFT); unregister_code(KC_LEFT);
355 } else if (state->count == 2) {
357 } else if (state->count == 3) {
362 void square_dance (qk_tap_dance_state_t *state, void *user_data) {
363 if (state->count == 1) {
364 SEND_STRING("[]"); register_code(KC_LEFT); unregister_code(KC_LEFT);
365 } else if (state->count == 2) {
367 } else if (state->count == 3) {
372 void angular_dance (qk_tap_dance_state_t *state, void *user_data) {
373 if (state->count == 1) {
374 SEND_STRING("<>"); register_code(KC_LEFT); unregister_code(KC_LEFT);
375 } else if (state->count == 2) {
377 } else if (state->count == 3) {
382 // Copy or cut feature
383 void copy_cut (qk_tap_dance_state_t *state, void *user_data) {
384 if (state->count == 1) {
385 register_code (KC_LCTL);
386 register_code (KC_C);
387 unregister_code (KC_C);
388 unregister_code (KC_LCTL);
389 } else if (state->count == 2) {
390 register_code (KC_LCTL);
391 register_code (KC_X);
392 unregister_code (KC_X);
393 unregister_code (KC_LCTL);
398 qk_tap_dance_action_t tap_dance_actions[] = {
399 // Tap once for Left Ctrl, second one is momentory switch to layer TUR
400 [ATD] = ACTION_TAP_DANCE_FN_ADVANCED( altgr_dvo_tap, NULL, altgr_dvo_end )
401 // Advanced tap dance feature allows for immediate response to shift
402 ,[CLS] = ACTION_TAP_DANCE_FN_ADVANCED( caps_tap, NULL, caps_tap_end )
403 // Shifting for double quote and semicolon
404 ,[SCL] = ACTION_TAP_DANCE_DOUBLE( KC_SCLN, KC_COLN )
405 ,[QUO] = ACTION_TAP_DANCE_DOUBLE( KC_QUOT, KC_DQUO )
406 // Tap dances for paranthesis, which sends macros
407 ,[PAR] = ACTION_TAP_DANCE_FN_ADVANCED( NULL, NULL, paranthesis_dance )
408 ,[CUR] = ACTION_TAP_DANCE_FN_ADVANCED( NULL, NULL, curly_dance )
409 ,[SQU] = ACTION_TAP_DANCE_FN_ADVANCED( NULL, NULL, square_dance )
410 ,[ANG] = ACTION_TAP_DANCE_FN_ADVANCED( NULL, NULL, angular_dance )
411 // Tap dance for copy/cutting
412 ,[CPC] = ACTION_TAP_DANCE_FN( copy_cut )