]> git.donarmstrong.com Git - qmk_firmware.git/blob - keyboards/ergodox/keymaps/swedish/keymap.c
Create sv_SE Qwerty layout for ErgoDox
[qmk_firmware.git] / keyboards / ergodox / keymaps / swedish / keymap.c
1 /* Copyright 2017 Andreas Lindhé
2  *
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.
7  *
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.
12  *
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/>.
15  */
16
17 #include "ergodox.h"
18 #include "debug.h"
19 #include "action_layer.h"
20 #include "version.h"
21 #include "keymap_swedish.h"
22
23 #define BASE 0 // default layer
24 #define SYMB 1 // symbols
25 #define MDIA 2 // media keys
26
27 enum custom_keycodes {
28   PLACEHOLDER = SAFE_RANGE, // can always be here
29   EPRM,
30   VRSN,
31   RGB_SLD
32 };
33
34 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
35 /* Keymap 0: Basic layer
36  *
37  * ,--------------------------------------------------.           ,--------------------------------------------------.
38  * |   ½    |   !  |  "   |  #   |  #   |  %   | LEFT |           | RIGHT|   &  |  /   |  (   |  )   |  =   |  ?     |
39  * |   §    |   1  |  2 @ |  3 £ |  4 $ |  5   |      |           |      |   6  |  7 { |  8 [ |  9 ] |  0 } |  + \   |
40  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
41  * | Delete |   Q  |   W  |   E  |   R  |   T  |  L1  |           |  L1  |   Y  |   U  |   I  |   O  |   P  |   Å    |
42  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
43  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
44  * | Caps   |   A  |   S  |   D  |   F  |   G  |------|           |------|   H  |   J  |   K  |   L  |Ö / L2|Ä / Cmd |
45  * | Lock   |      |      |      |      |      | Hyper|           | Meh  |      |      |      |      |      |        |
46  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
47  * | Left   |Z/Ctrl|   X  |   C  |   V  |   B  |      |           |      |   N  |   M  |   ;  |   :  |_/Ctrl| RShift |
48  * | Shift  |      |      |      |      |      |      |           |      |      |      |   ,  |   .  |-     |        |
49  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
50  *   | '/L1 |  `   |AltShf| Left | Right|                                       |  Up  | Down |  ^   |  *   | ~L1  |
51  *   |      |  '   |      |      |      |                                       |      |      |      |      |      |
52  *   `----------------------------------'                                       `----------------------------------'
53  *                                        ,-------------.       ,---------------.
54  *                                        | App  | LGui |       | AltGr|Ctrl/Esc|
55  *                                 ,------|------|------|       |------+--------+------.
56  *                                 |      |      | Home |       | PgUp |        |      |
57  *                                 | Space|Back- |------|       |------|  Tab   |Enter |
58  *                                 |      |space | End  |       | PgDn |        |      |
59  *                                 `--------------------'       `----------------------'
60  */
61 // If it accepts an argument (i.e, is a function), it doesn't need KC_.
62 // Otherwise, it needs KC_*
63 [BASE] = KEYMAP(  // layer 0 : default
64     // left hand
65     NO_HALF,          KC_1,           KC_2,          KC_3,    KC_4,    KC_5,   KC_LEFT,
66     KC_DELT,          KC_Q,           KC_W,          KC_E,    KC_R,    KC_T,   TG(SYMB),
67     KC_BSPC,          KC_A,           KC_S,          KC_D,    KC_F,    KC_G,
68     KC_LSFT,          CTL_T(KC_Z),    KC_X,          KC_C,    KC_V,    KC_B,   ALL_T(KC_NO),
69     LT(SYMB,NO_APOS), NO_ACUT,        LALT(KC_LSFT), KC_LEFT, KC_RGHT,
70                                           ALT_T(KC_APP),  KC_LGUI,
71                                                           KC_HOME,
72                                            KC_SPC,KC_BSPC,KC_END,
73     // right hand
74          KC_RGHT,      KC_6,   KC_7,   KC_8,    KC_9,    KC_0,              NO_PLUS,
75          TG(SYMB),     KC_Y,   KC_U,   KC_I,    KC_O,    KC_P,              NO_AA,
76                        KC_H,   KC_J,   KC_K,    KC_L,    LT(MDIA, NO_OSLH), GUI_T(NO_AE),
77          MEH_T(KC_NO), KC_N,   KC_M,   KC_COMM, KC_DOT,  CTL_T(NO_MINS),    KC_RSFT,
78                                KC_UP,  KC_DOWN, NO_CIRC, NO_ASTR,           KC_FN1,
79          NO_ALGR,        CTL_T(KC_ESC),
80          KC_PGUP,
81          KC_PGDN,KC_TAB, KC_ENT
82 ),
83
84 /* Keymap 1: Symbol Layer
85  *
86  * ,--------------------------------------------------.           ,--------------------------------------------------.
87  * |Version |  F1  |  F2  |  F3  |  F4  |  F5  |      |           |      |  F6  |  F7  |  F8  |  F9  |  F10 |   F11  |
88  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
89  * |        |   !  |   @  |   {  |   }  |   |  |      |           |      |   Up |   7  |   8  |   9  |   *  |   F12  |
90  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
91  * |        |   #  |   $  |   (  |   )  |   `  |------|           |------| Down |   4  |   5  |   6  |   +  |        |
92  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
93  * |        |   %  |   ^  |   [  |   ]  |   ~  |      |           |      |   &  |   1  |   2  |   3  |   \  |        |
94  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
95  *   |      |      |      |      |      |                                       |      |    . |   0  |   =  |      |
96  *   `----------------------------------'                                       `----------------------------------'
97  *                                        ,-------------.       ,-------------.
98  *                                        |Animat|      |       |Toggle|Solid |
99  *                                 ,------|------|------|       |------+------+------.
100  *                                 |Bright|Bright|      |       |      |Hue-  |Hue+  |
101  *                                 |ness- |ness+ |------|       |------|      |      |
102  *                                 |      |      |      |       |      |      |      |
103  *                                 `--------------------'       `--------------------'
104  */
105 // SYMBOLS
106 [SYMB] = KEYMAP(
107        // left hand
108        VRSN,   KC_F1,  KC_F2,  KC_F3,  KC_F4,  KC_F5,  KC_TRNS,
109        KC_TRNS,KC_EXLM,NO_AT,  NO_LCBR,NO_RCBR,NO_PIPE,KC_TRNS,
110        KC_TRNS,KC_HASH,NO_DLR, NO_LPRN,NO_RPRN,NO_GRV,
111        KC_TRNS,KC_PERC,NO_CIRC,NO_LBRC,NO_RBRC,NO_TILD,KC_TRNS,
112           EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
113                                        RGB_MOD,KC_TRNS,
114                                                KC_TRNS,
115                                RGB_VAD,RGB_VAI,KC_TRNS,
116        // right hand
117        KC_TRNS, KC_F6,   KC_F7,  KC_F8,   KC_F9,   KC_F10,  KC_F11,
118        KC_TRNS, KC_UP,   KC_7,   KC_8,    KC_9,    NO_ASTR, KC_F12,
119                 KC_DOWN, KC_4,   KC_5,    KC_6,    NO_PLUS, KC_TRNS,
120        KC_TRNS, NO_AMPR, KC_1,   KC_2,    KC_3,    NO_MINS, KC_TRNS,
121                          KC_TRNS,KC_DOT,  KC_0,    NO_EQL,  KC_TRNS,
122        RGB_TOG, RGB_SLD,
123        KC_TRNS,
124        KC_TRNS, RGB_HUD, RGB_HUI
125 ),
126
127 /* Keymap 2: Media and mouse keys
128  *
129  * ,--------------------------------------------------.           ,--------------------------------------------------.
130  * |        |      |      |      |      |      |      |           |      |      |      |      |      |      |        |
131  * |--------+------+------+------+------+-------------|           |------+------+------+------+------+------+--------|
132  * |        |      |      | MsUp |      |      |      |           |      |      |      |      |      |      |        |
133  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
134  * |        |      |MsLeft|MsDown|MsRght|      |------|           |------|      |      |      |      |      |  Play  |
135  * |--------+------+------+------+------+------|      |           |      |------+------+------+------+------+--------|
136  * |        |      |      |      |      |      |      |           |      |      |      | Prev | Next |      |        |
137  * `--------+------+------+------+------+-------------'           `-------------+------+------+------+------+--------'
138  *   |      |      |      | Lclk | Rclk |                                       |VolUp |VolDn | Mute |      |      |
139  *   `----------------------------------'                                       `----------------------------------'
140  *                                        ,-------------.       ,-------------.
141  *                                        |      |      |       |      |      |
142  *                                 ,------|------|------|       |------+------+------.
143  *                                 |      |      |      |       |      |      |Brwser|
144  *                                 |      |      |------|       |------|      |Back  |
145  *                                 |      |      |      |       |      |      |      |
146  *                                 `--------------------'       `--------------------'
147  */
148 // MEDIA AND MOUSE
149 [MDIA] = KEYMAP(
150        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
151        KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
152        KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
153        KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
154        KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
155                                            KC_TRNS, KC_TRNS,
156                                                     KC_TRNS,
157                                   KC_TRNS, KC_TRNS, KC_TRNS,
158     // right hand
159        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
160        KC_TRNS,  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
161                  KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
162        KC_TRNS,  KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
163                           KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
164        KC_TRNS, KC_TRNS,
165        KC_TRNS,
166        KC_TRNS, KC_TRNS, KC_WBAK
167 ),
168 };
169
170 const uint16_t PROGMEM fn_actions[] = {
171     [1] = ACTION_LAYER_TAP_TOGGLE(SYMB)                // FN1 - Momentary Layer 1 (Symbols)
172 };
173
174 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
175 {
176   // MACRODOWN only works in this function
177       switch(id) {
178         case 0:
179         if (record->event.pressed) {
180           SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
181         }
182         break;
183         case 1:
184         if (record->event.pressed) { // For resetting EEPROM
185           eeconfig_init();
186         }
187         break;
188       }
189     return MACRO_NONE;
190 };
191
192 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
193   switch (keycode) {
194     // dynamically generate these.
195     case EPRM:
196       if (record->event.pressed) {
197         eeconfig_init();
198       }
199       return false;
200       break;
201     case VRSN:
202       if (record->event.pressed) {
203         SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
204       }
205       return false;
206       break;
207     case RGB_SLD:
208       if (record->event.pressed) {
209         #ifdef RGBLIGHT_ENABLE
210           rgblight_mode(1);
211         #endif
212       }
213       return false;
214       break;
215   }
216   return true;
217 }
218
219 // Runs just one time when the keyboard initializes.
220 void matrix_init_user(void) {
221
222 };
223
224
225 // Runs constantly in the background, in a loop.
226 void matrix_scan_user(void) {
227
228     uint8_t layer = biton32(layer_state);
229
230     ergodox_board_led_off();
231     ergodox_right_led_1_off();
232     ergodox_right_led_2_off();
233     ergodox_right_led_3_off();
234     switch (layer) {
235       // TODO: Make this relevant to the ErgoDox EZ.
236         case 1:
237             ergodox_right_led_1_on();
238             break;
239         case 2:
240             ergodox_right_led_2_on();
241             break;
242         default:
243             // none
244             break;
245     }
246
247 };