3 static uint16_t key_timer;
6 return (timer_elapsed(key_timer) < 150) ? true : false;
10 #define norm 0 // Default layer
11 #define elev 1 // Layer directional keys
12 #define supr 2 // F-keys and mediakeys
27 #define GRAV KC_GRV //
28 #define MEDI F(FNO1)//
30 // General shortenings
43 #define NUBS KC_NUBS // Less/ greater sign
44 #define COMM KC_COMM // Comma
45 #define FSTO KC_DOT // Full stop
66 // Special Actions and Media Keys
67 #define INSE KC_INS // Insert here
68 #define HOME KC_HOME // Go to beginning of line
69 #define ENDI KC_END // go to end of line
70 #define PSCR KC_PSCR // Print Screen
71 #define SLCK KC_SLCK // go to end of line
72 #define PGDN KC_PGDN // go to end of line
73 #define PGUP KC_PGUP // go to end of line
74 #define PLPS KC_MPLY // Play/Pause
75 #define PAUS KC_PAUS // Pause button
76 #define MUTE KC_MUTE // Mute sound
77 #define VOLU KC_VOLU // Volume increase
78 #define VOLD KC_VOLD // Volume decrease
79 #define MNXT KC_MNXT // next track
80 #define MPRV KC_MPRV // prev track
81 #define MSTP KC_MSTP // stop playing
82 #define MSEL KC_MSEL // Select media (Start playing it)
83 #define MAIL KC_MAIL // Open default mail app
84 #define CALC KC_CALC // Open default calculator app
85 #define MYCM KC_MYCM // Open default file manager
86 //#define LILO KC_XXXXXX // Reserved for later
87 //#define LIHI KC_XXXXXX // Reserved for later
90 // dual-role shortcuts
91 #define DUTB LT(elev, KC_TAB) // `tabs` layer on hold and tab on tap
92 #define DUSP LT(spac, KC_SPACE) // `spce` layer on hold and space on tap
93 #define LOCK LGUI(KC_L) // lock computer (win)
95 // Space Admiral Strokers
96 #define SADL MAC0 // Hold for lshift and { on tap
97 #define SADR MAC1 // Hold for rshift and } on tap
98 #define CADL MAC2 // Hold for lctrl and [ on tap
99 #define CADR MAC3 // Hold for rctrl and ] on tap
101 // arrow cluster duality bottom right corner
102 #define ARLF ALT_T(KC_LEFT) // Left arrow
103 #define ARRT CTL_T(KC_RIGHT)// Right arrow
104 #define ARUP SFT_T(KC_UP) // Up arrow
105 #define ARDN GUI_T(KC_DOWN) // Down arrow
108 #define NOCL RALT(KC_7) // [
109 #define NOCR RALT(KC_0) // ]
110 #define NOPL LSFT(KC_8) // (
111 #define NOPR LSFT(KC_9) // )
112 #define NOAL KC_NUBS // <
113 #define NOAR LSFT(KC_NUBS) // >
114 #define NOBL RALT(KC_8) // [
115 #define NOBR RALT(KC_9) // ]
117 // increase readability
120 #define SCAN KC_TRNS // Scandinavian keys, the Row 5 key 5 is actually Row 1 key 15 on the PCB
122 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
123 [ norm ] = KEYMAP( // Normal scandinavian mapping (danish has QUOT and SCLN wapped)
124 GRAV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MINS, EQUL, BSPC, DELE,\
125 DUTB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LBRC, RBRC, DEAD,\
126 ALTR, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SCLN, QUOT, NUHS, ENTE,\
127 SADL, NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, COMM, FSTO, SLSH, SADR, DEAD,\
128 CADL, ALTL, GUIL, DUSP, GUIR, MEDI, MENO, CADR),
130 [ elev ] = KEYMAP( // The f-Row (with f13-14), Special keys and media keys
131 LOCK, FK01, FK02, FK03, FK04, FK05, FK06, FK07, FK08, FK09, FK10, FK11, FK12, FK13, FK14,\
132 XXXX, XXXX, XXXX, XXXX, MAIL, XXXX, XXXX, HOME, INSE, PSCR, SLCK, PAUS, PGUP, XXXX,\
133 XXXX, XXXX, XXXX, XXXX, MYCM, XXXX, XXXX, MPRV, PAUS, MNXT, XXXX, XXXX, PGDN, ENDI,\
134 XXXX, XXXX, XXXX, XXXX, CALC, XXXX, XXXX, XXXX, MUTE, VOLD, VOLU, XXXX, ARUP, DEAD,\
135 XXXX, XXXX, XXXX, PLPS, XXXX, ARLF, ARDN, ARRT),
137 [ spac ] = KEYMAP( // The space controls (by pressing space)
138 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
139 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
140 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
141 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\
142 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX),
144 [ supr ] = KEYMAP( // Additional layer for later use.
145 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
146 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
147 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX,\
148 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, DEAD,\
149 XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX),
152 const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) { // MACRODOWN only works in this function
154 case 0: //MAC0 - Hold for lshift and { on tap
155 if (record->event.pressed) {
156 key_timer = timer_read();
157 return MACRO(D(LSFT), END );
159 return checktime() ? MACRO(U(LSFT),D(RALT),T(7),U(RALT),END): MACRO(U(LSFT),END);
161 case 1: //MAC1 - Hold for rshift and } on tap
162 if (record->event.pressed) {
163 key_timer = timer_read();
164 return MACRO(D(RSFT), END );
166 return checktime() ? MACRO(U(RSFT),D(RALT),T(0),U(RALT),END): MACRO(U(RSFT),END);
168 case 2: //MAC2 - Hold for lctrl and [ on tap
169 if (record->event.pressed) {
170 key_timer = timer_read();
171 return MACRO(D(LCTL), END );
172 } else {return checktime() ? MACRO(U(LCTL),D(RALT),T(8),U(RALT),END):MACRO(U(LCTL),END);
174 case 3: //MAC3 - Hold for rctrl and ] on tap
175 if (record->event.pressed) {
176 key_timer = timer_read();
177 return MACRO(D(RCTL), END );
179 return checktime() ? MACRO(U(RCTL),D(RALT),T(9),U(RALT),END):MACRO(U(RCTL),END);
181 case 4: //MAC4 reserved for later.
182 if (record->event.pressed) { } else { }; break;
183 case 5: //MAC5 reserved for later.
184 if (record->event.pressed) { } else { }; break;
185 case 6: //MAC6 reserved for later.
186 if (record->event.pressed) { } else { }; break;
191 void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { }
192 enum function_id { };
193 const uint16_t PROGMEM fn_actions[] = { };