aboutsummaryrefslogtreecommitdiff
path: root/keyboards/preonic/keymaps/ttys0/keymap.c
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/preonic/keymaps/ttys0/keymap.c')
-rw-r--r--keyboards/preonic/keymaps/ttys0/keymap.c283
1 files changed, 283 insertions, 0 deletions
diff --git a/keyboards/preonic/keymaps/ttys0/keymap.c b/keyboards/preonic/keymaps/ttys0/keymap.c
new file mode 100644
index 000000000..577e69e74
--- /dev/null
+++ b/keyboards/preonic/keymaps/ttys0/keymap.c
@@ -0,0 +1,283 @@
1/* Copyright 2021 Sean Johnson
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 QMK_KEYBOARD_H
18#include "muse.h"
19
20#define a KC_A
21#define b KC_B
22#define c KC_C
23#define d KC_D
24#define e KC_E
25#define f KC_F
26#define g KC_G
27#define h KC_H
28#define i KC_I
29#define j KC_J
30#define k KC_K
31#define l KC_L
32#define m KC_M
33#define n KC_N
34#define o KC_O
35#define p KC_P
36#define q KC_Q
37#define r KC_R
38#define s KC_S
39#define t KC_T
40#define u KC_U
41#define v KC_V
42#define w KC_W
43#define x KC_X
44#define y KC_Y
45#define z KC_Z
46
47#define lopt KC_LALT
48#define lctl KC_LCTL
49#define lsft KC_LSFT
50#define ropt KC_RALT
51#define rctl KC_RCTL
52#define rsft KC_RSFT
53
54#define n0 KC_0
55#define n1 KC_1
56#define n2 KC_2
57#define n3 KC_3
58#define n4 KC_4
59#define n5 KC_5
60#define n6 KC_6
61#define n7 KC_7
62#define n8 KC_8
63#define n9 KC_9
64
65#define bspc KC_BSPC
66#define caps KC_CAPS
67#define comm KC_COMM
68#define dash A(KC_MINS)
69#define scln KC_SCLN
70#define slsh KC_SLSH
71#define spc KC_SPC
72#define tab KC_TAB
73#define del KC_DEL
74#define dot KC_DOT
75#define ent KC_ENT
76#define mins KC_MINS
77#define quot KC_QUOT
78#define esc KC_ESC
79
80#define down KC_DOWN
81#define home G(KC_LEFT)
82#define end G(KC_RGHT)
83#define up KC_UP
84#define pgdn KC_PGDN
85#define pgup KC_PGUP
86#define left KC_LEFT
87#define rght KC_RGHT
88
89#define tabl G(S(KC_LBRC))
90#define tabr G(S(KC_RBRC))
91#define fwd G(KC_RBRC)
92#define back G(KC_LBRC)
93#define dtl C(KC_LEFT)
94#define dtr C(KC_RGHT)
95#define slup S(A(KC_UP))
96#define sldn S(A(KC_DOWN))
97
98#define f1 KC_F1
99#define f2 KC_F2
100#define f3 KC_F3
101#define f4 KC_F4
102#define f5 KC_F5
103#define f6 KC_F6
104#define f7 KC_F7
105#define f8 KC_F8
106#define f9 KC_F9
107#define f10 KC_F10
108#define f11 KC_F11
109#define f12 KC_F12
110#define f13 KC_F13
111#define f14 KC_F14
112#define f15 KC_F15
113#define f16 KC_F16
114#define f17 KC_F17
115#define f18 KC_F18
116#define f19 KC_F19
117#define f20 KC_F20
118
119#define mute KC_MUTE
120#define next KC_MNXT
121#define play KC_MPLY
122#define prev KC_MPRV
123#define vold KC_VOLD
124#define volu KC_VOLU
125
126#define symb MO(SYMB)
127#define move MO(MOVE)
128#define func MO(FUNC)
129
130#define rset RESET
131#define powr KC_POWER
132
133#define ____ KC_TRNS
134#define xxxx KC_NO
135
136#define emji LCMD(LCTL(KC_SPC))
137#define hypr OSM(MOD_HYPR)
138#define brup KC_BRMU
139#define brdn KC_BRMD
140#define escf LT(FUNC,KC_ESC)
141
142enum preonic_layers {
143 BASE,
144 SYMB,
145 MOVE,
146 FUNC,
147};
148
149enum preonic_keycodes {
150 ampr = SAFE_RANGE,
151 astr,
152 at,
153 bsls,
154 circ,
155 dlr,
156 eql,
157 exlm,
158 grv,
159 hash,
160 lbrc,
161 lcbr,
162 lprn,
163 perc,
164 pipe,
165 plus,
166 rbrc,
167 rcbr,
168 rprn,
169 tild,
170 cmd,
171};
172
173const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
174 [BASE] = LAYOUT_preonic_grid(
175 tild, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, mins,
176 tab, q, w, f, p, g, j, l, u, y, scln, pipe,
177 bspc, a, r, s, t, d, h, n, e, i, o, quot,
178 lsft, z, x, c, v, b, k, m, comm, dot, slsh, rsft,
179 hypr, lctl, lopt, cmd, move, ent, spc, symb, cmd, ropt, rctl, escf
180 ),
181
182 [SYMB] = LAYOUT_preonic_grid(
183 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
184 tild, n7, n5, n3, n1, n9, n8, n0, n2, n4, n6, dash,
185 bspc, lbrc, lcbr, lprn, hash, pipe, astr, dlr, rprn, rcbr, rbrc, at,
186 ____, grv, exlm, circ, ampr, ____, ____, plus, mins, eql, bsls, perc,
187 caps, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
188 ),
189
190 [MOVE] = LAYOUT_preonic_grid(
191 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
192 ____, xxxx, slup, dtl, dtr, xxxx, xxxx, home, up, end, xxxx, xxxx,
193 del, xxxx, sldn, tabl, tabr, xxxx, xxxx, left, down, rght, xxxx, xxxx,
194 ____, xxxx, xxxx, back, fwd, xxxx, xxxx, pgdn, pgup, xxxx, xxxx, ____,
195 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
196 ),
197
198 [FUNC] = LAYOUT_preonic_grid(
199 ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
200 rset, f7, f5, f3, f1, f9, f8, f10, f2, f4, f6, volu,
201 powr, f17, f15, f13, f11, f19, f18, f20, f12, f14, f16, vold,
202 brup, brdn, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, xxxx, ____,
203 ____, ____, ____, ____, ____, ____, ____, mute, play, prev, next, ____
204 ),
205};
206
207
208bool send_string_if_keydown(keyrecord_t *record, const char *s) {
209 if (record->event.pressed) {
210 send_string(s);
211 }
212 return true;
213}
214
215int cmd_keys_down = 0;
216
217bool process_record_user(uint16_t keycode, keyrecord_t *record) {
218 switch (keycode) {
219 // Override the default auto shifted symbols to use SEND_STRING See
220 // https://github.com/qmk/qmk_firmware/issues/4072
221 case ampr:
222 return send_string_if_keydown(record, "&");
223 case astr:
224 return send_string_if_keydown(record, "*");
225 case at:
226 return send_string_if_keydown(record, "@");
227 case bsls:
228 return send_string_if_keydown(record, "\\");
229 case circ:
230 return send_string_if_keydown(record, "^");
231 case dlr:
232 return send_string_if_keydown(record, "$");
233 case eql:
234 return send_string_if_keydown(record, "=");
235 case exlm:
236 return send_string_if_keydown(record, "!");
237 case grv:
238 return send_string_if_keydown(record, "`");
239 case hash:
240 return send_string_if_keydown(record, "#");
241 case lbrc:
242 return send_string_if_keydown(record, "[");
243 case lcbr:
244 return send_string_if_keydown(record, "{");
245 case lprn:
246 return send_string_if_keydown(record, "(");
247 case perc:
248 return send_string_if_keydown(record, "%");
249 case pipe:
250 return send_string_if_keydown(record, "|");
251 case plus:
252 return send_string_if_keydown(record, "+");
253 case rbrc:
254 return send_string_if_keydown(record, "]");
255 case rcbr:
256 return send_string_if_keydown(record, "}");
257 case rprn:
258 return send_string_if_keydown(record, ")");
259 case tild:
260 return send_string_if_keydown(record, "~");
261
262 // cmd + cmd -> cmd + ctl
263 case cmd:
264 if (record->event.pressed) {
265 if (cmd_keys_down == 0) {
266 register_code(KC_LCMD);
267 } else {
268 register_code(KC_LCTL);
269 }
270 cmd_keys_down++;
271 } else {
272 if (cmd_keys_down == 1) {
273 unregister_code(KC_LCMD);
274 } else {
275 unregister_code(KC_LCTL);
276 }
277 cmd_keys_down--;
278 }
279 return true;
280 }
281 return true;
282}
283