├── .gitignore
├── LICENSE
├── README.md
├── case
├── framework-16-keyboard-case-bottom.stl
├── framework-16-keyboard-case-left.stl
├── framework-16-keyboard-case-right.stl
└── framework-16-keyboard-case-top.stl
├── images
├── framework16keyboardv1_0.jpg
├── framework16keyboardv1_1.jpg
├── framework16keyboardv1_2.jpg
├── framework16keyboardv1_3.jpg
└── framework16keyboardv1_4.jpg
├── kicad
└── framework16v1
│ ├── ._framework16v1.kicad_pcb
│ ├── framework16v1.kicad_pcb
│ ├── framework16v1.kicad_pro
│ ├── framework16v1.round-tracks-config
│ ├── framework16v1.step
│ └── gerber_to_order
│ ├── framework16v1_270.0x104.215538mm_for_Default.zip
│ ├── framework16v1_270.0x104.215538mm_for_Elecrow.zip
│ ├── framework16v1_270.0x104.215538mm_for_FusionPCB.zip
│ ├── framework16v1_270.0x104.215538mm_for_JLCPCB.zip
│ └── framework16v1_270.0x104.215538mm_for_PCBWay.zip
├── qmk
└── keyboards
│ └── framework_v1
│ ├── keyboard.json
│ ├── keymaps
│ └── default
│ │ ├── config.h
│ │ └── keymap.c
│ └── readme.md
└── zmk
└── boards
└── shields
└── framework_v1
├── Kconfig.defconfig
├── Kconfig.shield
├── framework_v1.conf
├── framework_v1.keymap
├── framework_v1.overlay
└── framework_v1_keypos.h
/.gitignore:
--------------------------------------------------------------------------------
1 | # For PCBs designed using KiCad: https://www.kicad.org/
2 | # Format documentation: https://kicad.org/help/file-formats/
3 |
4 | # Temporary files
5 | *.000
6 | *.bak
7 | *.bck
8 | *.kicad_pcb-bak
9 | *.kicad_sch-bak
10 | *-backups
11 | *.kicad_prl
12 | *.sch-bak
13 | *~
14 | _autosave-*
15 | *.tmp
16 | *-save.pro
17 | *-save.kicad_pcb
18 | fp-info-cache
19 | ~*.lck
20 | \#auto_saved_files#
21 |
22 | # Netlist files (exported from Eeschema)
23 | *.net
24 |
25 | # Autorouter files (exported from Pcbnew)
26 | *.dsn
27 | *.ses
28 |
29 | # Exported BOM files
30 | *.xml
31 | *.csv
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 sommerper
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Framework 16 Keyboard v1
2 |
3 | 
4 |
5 | Here's an ortholinear split keyboard that fits in your Framework 16 instead of the default keyboard.
6 |
7 | It's using Kaihl Choc switches and the case has an angle of 5 degrees so it will not allow you to close the laptop while using it.
8 |
9 | ## ZMK and QMK
10 |
11 | There some settings for zmk and qmk to get you started with the correct pin layout. The ZMK config is based on [Urob's config](https://github.com/urob/zmk-config)
12 |
13 | Any Pro Micro compatible controller should work. The nice!nano v2 is used in the image, and I have also connected an RP2040 without any problems.
14 |
15 | ## 3D Print Files
16 | - Left and Right are for the laptop. They should have a tight fit without having to squeeze them in between the other components.
17 | - Bottom is for your desk so you can choose to put the pcb on your desk as well. It's possible to fit this on the build plate of a standard Prusa mk3s if you put it diagonally.
18 | - Top is for travel protection. It fits on top of the Bottom case with the keyboard inside.
19 |
20 | 
21 |
22 | ## ⚠️ Disclaimer
23 |
24 | These PCB files are provided **as-is**, without any warranty or guarantee of functionality or safety. Use them at your own risk. I am not responsible for any damage, injury, or loss resulting from the use of these files.
25 |
--------------------------------------------------------------------------------
/case/framework-16-keyboard-case-top.stl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/case/framework-16-keyboard-case-top.stl
--------------------------------------------------------------------------------
/images/framework16keyboardv1_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/images/framework16keyboardv1_0.jpg
--------------------------------------------------------------------------------
/images/framework16keyboardv1_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/images/framework16keyboardv1_1.jpg
--------------------------------------------------------------------------------
/images/framework16keyboardv1_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/images/framework16keyboardv1_2.jpg
--------------------------------------------------------------------------------
/images/framework16keyboardv1_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/images/framework16keyboardv1_3.jpg
--------------------------------------------------------------------------------
/images/framework16keyboardv1_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/images/framework16keyboardv1_4.jpg
--------------------------------------------------------------------------------
/kicad/framework16v1/._framework16v1.kicad_pcb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/kicad/framework16v1/._framework16v1.kicad_pcb
--------------------------------------------------------------------------------
/kicad/framework16v1/framework16v1.kicad_pro:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "3dviewports": [],
4 | "design_settings": {
5 | "defaults": {
6 | "apply_defaults_to_fp_fields": false,
7 | "apply_defaults_to_fp_shapes": false,
8 | "apply_defaults_to_fp_text": false,
9 | "board_outline_line_width": 0.05,
10 | "copper_line_width": 0.2,
11 | "copper_text_italic": false,
12 | "copper_text_size_h": 1.5,
13 | "copper_text_size_v": 1.5,
14 | "copper_text_thickness": 0.3,
15 | "copper_text_upright": false,
16 | "courtyard_line_width": 0.05,
17 | "dimension_precision": 4,
18 | "dimension_units": 3,
19 | "dimensions": {
20 | "arrow_length": 1270000,
21 | "extension_offset": 500000,
22 | "keep_text_aligned": true,
23 | "suppress_zeroes": true,
24 | "text_position": 0,
25 | "units_format": 0
26 | },
27 | "fab_line_width": 0.1,
28 | "fab_text_italic": false,
29 | "fab_text_size_h": 1.0,
30 | "fab_text_size_v": 1.0,
31 | "fab_text_thickness": 0.15,
32 | "fab_text_upright": false,
33 | "other_line_width": 0.1,
34 | "other_text_italic": false,
35 | "other_text_size_h": 1.0,
36 | "other_text_size_v": 1.0,
37 | "other_text_thickness": 0.15,
38 | "other_text_upright": false,
39 | "pads": {
40 | "drill": 0.762,
41 | "height": 1.524,
42 | "width": 1.524
43 | },
44 | "silk_line_width": 0.12,
45 | "silk_text_italic": false,
46 | "silk_text_size_h": 1.0,
47 | "silk_text_size_v": 1.0,
48 | "silk_text_thickness": 0.15,
49 | "silk_text_upright": false,
50 | "zones": {
51 | "min_clearance": 0.508
52 | }
53 | },
54 | "diff_pair_dimensions": [],
55 | "drc_exclusions": [],
56 | "meta": {
57 | "filename": "board_design_settings.json",
58 | "version": 2
59 | },
60 | "rule_severities": {
61 | "annular_width": "error",
62 | "clearance": "error",
63 | "connection_width": "warning",
64 | "copper_edge_clearance": "error",
65 | "copper_sliver": "warning",
66 | "courtyards_overlap": "error",
67 | "creepage": "error",
68 | "diff_pair_gap_out_of_range": "error",
69 | "diff_pair_uncoupled_length_too_long": "error",
70 | "drill_out_of_range": "error",
71 | "duplicate_footprints": "warning",
72 | "extra_footprint": "warning",
73 | "footprint": "error",
74 | "footprint_filters_mismatch": "ignore",
75 | "footprint_symbol_mismatch": "warning",
76 | "footprint_type_mismatch": "ignore",
77 | "hole_clearance": "error",
78 | "hole_to_hole": "warning",
79 | "holes_co_located": "warning",
80 | "invalid_outline": "error",
81 | "isolated_copper": "warning",
82 | "item_on_disabled_layer": "error",
83 | "items_not_allowed": "error",
84 | "length_out_of_range": "error",
85 | "lib_footprint_issues": "warning",
86 | "lib_footprint_mismatch": "warning",
87 | "malformed_courtyard": "error",
88 | "microvia_drill_out_of_range": "error",
89 | "mirrored_text_on_front_layer": "warning",
90 | "missing_courtyard": "ignore",
91 | "missing_footprint": "warning",
92 | "net_conflict": "warning",
93 | "nonmirrored_text_on_back_layer": "warning",
94 | "npth_inside_courtyard": "ignore",
95 | "padstack": "warning",
96 | "pth_inside_courtyard": "ignore",
97 | "shorting_items": "error",
98 | "silk_edge_clearance": "warning",
99 | "silk_over_copper": "warning",
100 | "silk_overlap": "warning",
101 | "skew_out_of_range": "error",
102 | "solder_mask_bridge": "error",
103 | "starved_thermal": "error",
104 | "text_height": "warning",
105 | "text_thickness": "warning",
106 | "through_hole_pad_without_hole": "error",
107 | "too_many_vias": "error",
108 | "track_angle": "error",
109 | "track_dangling": "warning",
110 | "track_segment_length": "error",
111 | "track_width": "error",
112 | "tracks_crossing": "error",
113 | "unconnected_items": "error",
114 | "unresolved_variable": "error",
115 | "via_dangling": "warning",
116 | "zones_intersect": "error"
117 | },
118 | "rules": {
119 | "max_error": 0.005,
120 | "min_clearance": 0.0,
121 | "min_connection": 0.0,
122 | "min_copper_edge_clearance": 0.075,
123 | "min_groove_width": 0.0,
124 | "min_hole_clearance": 0.25,
125 | "min_hole_to_hole": 0.25,
126 | "min_microvia_diameter": 0.2,
127 | "min_microvia_drill": 0.1,
128 | "min_resolved_spokes": 2,
129 | "min_silk_clearance": 0.0,
130 | "min_text_height": 0.8,
131 | "min_text_thickness": 0.08,
132 | "min_through_hole_diameter": 0.3,
133 | "min_track_width": 0.2,
134 | "min_via_annular_width": 0.1,
135 | "min_via_diameter": 0.4,
136 | "solder_mask_to_copper_clearance": 0.0,
137 | "use_height_for_length_calcs": true
138 | },
139 | "teardrop_options": [
140 | {
141 | "td_onpthpad": true,
142 | "td_onroundshapesonly": false,
143 | "td_onsmdpad": true,
144 | "td_ontrackend": false,
145 | "td_onvia": true
146 | }
147 | ],
148 | "teardrop_parameters": [
149 | {
150 | "td_allow_use_two_tracks": true,
151 | "td_curve_segcount": 0,
152 | "td_height_ratio": 1.0,
153 | "td_length_ratio": 0.5,
154 | "td_maxheight": 2.0,
155 | "td_maxlen": 1.0,
156 | "td_on_pad_in_zone": false,
157 | "td_target_name": "td_round_shape",
158 | "td_width_to_size_filter_ratio": 0.9
159 | },
160 | {
161 | "td_allow_use_two_tracks": true,
162 | "td_curve_segcount": 0,
163 | "td_height_ratio": 1.0,
164 | "td_length_ratio": 0.5,
165 | "td_maxheight": 2.0,
166 | "td_maxlen": 1.0,
167 | "td_on_pad_in_zone": false,
168 | "td_target_name": "td_rect_shape",
169 | "td_width_to_size_filter_ratio": 0.9
170 | },
171 | {
172 | "td_allow_use_two_tracks": true,
173 | "td_curve_segcount": 0,
174 | "td_height_ratio": 1.0,
175 | "td_length_ratio": 0.5,
176 | "td_maxheight": 2.0,
177 | "td_maxlen": 1.0,
178 | "td_on_pad_in_zone": false,
179 | "td_target_name": "td_track_end",
180 | "td_width_to_size_filter_ratio": 0.9
181 | }
182 | ],
183 | "track_widths": [],
184 | "tuning_pattern_settings": {
185 | "diff_pair_defaults": {
186 | "corner_radius_percentage": 80,
187 | "corner_style": 1,
188 | "max_amplitude": 1.0,
189 | "min_amplitude": 0.2,
190 | "single_sided": false,
191 | "spacing": 1.0
192 | },
193 | "diff_pair_skew_defaults": {
194 | "corner_radius_percentage": 80,
195 | "corner_style": 1,
196 | "max_amplitude": 1.0,
197 | "min_amplitude": 0.2,
198 | "single_sided": false,
199 | "spacing": 0.6
200 | },
201 | "single_track_defaults": {
202 | "corner_radius_percentage": 80,
203 | "corner_style": 1,
204 | "max_amplitude": 1.0,
205 | "min_amplitude": 0.2,
206 | "single_sided": false,
207 | "spacing": 0.6
208 | }
209 | },
210 | "via_dimensions": [],
211 | "zones_allow_external_fillets": false
212 | },
213 | "ipc2581": {
214 | "dist": "",
215 | "distpn": "",
216 | "internal_id": "",
217 | "mfg": "",
218 | "mpn": ""
219 | },
220 | "layer_pairs": [],
221 | "layer_presets": [],
222 | "viewports": []
223 | },
224 | "boards": [],
225 | "cvpcb": {
226 | "equivalence_files": []
227 | },
228 | "libraries": {
229 | "pinned_footprint_libs": [],
230 | "pinned_symbol_libs": []
231 | },
232 | "meta": {
233 | "filename": "framework16v1.kicad_pro",
234 | "version": 3
235 | },
236 | "net_settings": {
237 | "classes": [
238 | {
239 | "bus_width": 12,
240 | "clearance": 0.2,
241 | "diff_pair_gap": 0.25,
242 | "diff_pair_via_gap": 0.25,
243 | "diff_pair_width": 0.2,
244 | "line_style": 0,
245 | "microvia_diameter": 0.3,
246 | "microvia_drill": 0.1,
247 | "name": "Default",
248 | "pcb_color": "rgba(0, 0, 0, 0.000)",
249 | "priority": -1,
250 | "schematic_color": "rgba(0, 0, 0, 0.000)",
251 | "track_width": 0.25,
252 | "via_diameter": 0.8,
253 | "via_drill": 0.4,
254 | "wire_width": 6
255 | }
256 | ],
257 | "meta": {
258 | "version": 4
259 | },
260 | "net_colors": null,
261 | "netclass_assignments": null,
262 | "netclass_patterns": [
263 | {
264 | "netclass": "Default",
265 | "pattern": ""
266 | },
267 | {
268 | "netclass": "Default",
269 | "pattern": "P7"
270 | },
271 | {
272 | "netclass": "Default",
273 | "pattern": "pinky_home"
274 | },
275 | {
276 | "netclass": "Default",
277 | "pattern": "pinky_top"
278 | },
279 | {
280 | "netclass": "Default",
281 | "pattern": "pinky_num"
282 | },
283 | {
284 | "netclass": "Default",
285 | "pattern": "P8"
286 | },
287 | {
288 | "netclass": "Default",
289 | "pattern": "ring_bottom"
290 | },
291 | {
292 | "netclass": "Default",
293 | "pattern": "ring_home"
294 | },
295 | {
296 | "netclass": "Default",
297 | "pattern": "ring_top"
298 | },
299 | {
300 | "netclass": "Default",
301 | "pattern": "ring_num"
302 | },
303 | {
304 | "netclass": "Default",
305 | "pattern": "P9"
306 | },
307 | {
308 | "netclass": "Default",
309 | "pattern": "middle_bottom"
310 | },
311 | {
312 | "netclass": "Default",
313 | "pattern": "middle_home"
314 | },
315 | {
316 | "netclass": "Default",
317 | "pattern": "middle_top"
318 | },
319 | {
320 | "netclass": "Default",
321 | "pattern": "middle_num"
322 | },
323 | {
324 | "netclass": "Default",
325 | "pattern": "P10"
326 | },
327 | {
328 | "netclass": "Default",
329 | "pattern": "index_home"
330 | },
331 | {
332 | "netclass": "Default",
333 | "pattern": "index_top"
334 | },
335 | {
336 | "netclass": "Default",
337 | "pattern": "index_num"
338 | },
339 | {
340 | "netclass": "Default",
341 | "pattern": "P16"
342 | },
343 | {
344 | "netclass": "Default",
345 | "pattern": "inner_home"
346 | },
347 | {
348 | "netclass": "Default",
349 | "pattern": "inner_top"
350 | },
351 | {
352 | "netclass": "Default",
353 | "pattern": "inner_num"
354 | },
355 | {
356 | "netclass": "Default",
357 | "pattern": "near_thumb"
358 | },
359 | {
360 | "netclass": "Default",
361 | "pattern": "home_thumb"
362 | },
363 | {
364 | "netclass": "Default",
365 | "pattern": "P15"
366 | },
367 | {
368 | "netclass": "Default",
369 | "pattern": "far_thumb"
370 | },
371 | {
372 | "netclass": "Default",
373 | "pattern": "mirror_pinky_home"
374 | },
375 | {
376 | "netclass": "Default",
377 | "pattern": "mirror_pinky_top"
378 | },
379 | {
380 | "netclass": "Default",
381 | "pattern": "mirror_pinky_num"
382 | },
383 | {
384 | "netclass": "Default",
385 | "pattern": "mirror_ring_bottom"
386 | },
387 | {
388 | "netclass": "Default",
389 | "pattern": "mirror_ring_home"
390 | },
391 | {
392 | "netclass": "Default",
393 | "pattern": "mirror_ring_top"
394 | },
395 | {
396 | "netclass": "Default",
397 | "pattern": "mirror_ring_num"
398 | },
399 | {
400 | "netclass": "Default",
401 | "pattern": "mirror_middle_bottom"
402 | },
403 | {
404 | "netclass": "Default",
405 | "pattern": "mirror_middle_home"
406 | },
407 | {
408 | "netclass": "Default",
409 | "pattern": "mirror_middle_top"
410 | },
411 | {
412 | "netclass": "Default",
413 | "pattern": "mirror_middle_num"
414 | },
415 | {
416 | "netclass": "Default",
417 | "pattern": "mirror_index_home"
418 | },
419 | {
420 | "netclass": "Default",
421 | "pattern": "mirror_index_top"
422 | },
423 | {
424 | "netclass": "Default",
425 | "pattern": "mirror_index_num"
426 | },
427 | {
428 | "netclass": "Default",
429 | "pattern": "mirror_inner_home"
430 | },
431 | {
432 | "netclass": "Default",
433 | "pattern": "mirror_inner_top"
434 | },
435 | {
436 | "netclass": "Default",
437 | "pattern": "mirror_inner_num"
438 | },
439 | {
440 | "netclass": "Default",
441 | "pattern": "mirror_near_thumb"
442 | },
443 | {
444 | "netclass": "Default",
445 | "pattern": "mirror_home_thumb"
446 | },
447 | {
448 | "netclass": "Default",
449 | "pattern": "mirror_far_thumb"
450 | },
451 | {
452 | "netclass": "Default",
453 | "pattern": "P4"
454 | },
455 | {
456 | "netclass": "Default",
457 | "pattern": "P0"
458 | },
459 | {
460 | "netclass": "Default",
461 | "pattern": "P1"
462 | },
463 | {
464 | "netclass": "Default",
465 | "pattern": "P5"
466 | },
467 | {
468 | "netclass": "Default",
469 | "pattern": "P19"
470 | },
471 | {
472 | "netclass": "Default",
473 | "pattern": "P20"
474 | },
475 | {
476 | "netclass": "Default",
477 | "pattern": "P21"
478 | },
479 | {
480 | "netclass": "Default",
481 | "pattern": "P18"
482 | },
483 | {
484 | "netclass": "Default",
485 | "pattern": "RAW"
486 | },
487 | {
488 | "netclass": "Default",
489 | "pattern": "GND"
490 | },
491 | {
492 | "netclass": "Default",
493 | "pattern": "RST"
494 | },
495 | {
496 | "netclass": "Default",
497 | "pattern": "VCC"
498 | },
499 | {
500 | "netclass": "Default",
501 | "pattern": "P14"
502 | },
503 | {
504 | "netclass": "Default",
505 | "pattern": "P2"
506 | },
507 | {
508 | "netclass": "Default",
509 | "pattern": "P3"
510 | },
511 | {
512 | "netclass": "Default",
513 | "pattern": "P6"
514 | },
515 | {
516 | "netclass": "Default",
517 | "pattern": "P101"
518 | },
519 | {
520 | "netclass": "Default",
521 | "pattern": "P102"
522 | },
523 | {
524 | "netclass": "Default",
525 | "pattern": "P107"
526 | },
527 | {
528 | "netclass": "Default",
529 | "pattern": "MCU1_24"
530 | },
531 | {
532 | "netclass": "Default",
533 | "pattern": "MCU1_1"
534 | },
535 | {
536 | "netclass": "Default",
537 | "pattern": "MCU1_23"
538 | },
539 | {
540 | "netclass": "Default",
541 | "pattern": "MCU1_2"
542 | },
543 | {
544 | "netclass": "Default",
545 | "pattern": "MCU1_22"
546 | },
547 | {
548 | "netclass": "Default",
549 | "pattern": "MCU1_3"
550 | },
551 | {
552 | "netclass": "Default",
553 | "pattern": "MCU1_21"
554 | },
555 | {
556 | "netclass": "Default",
557 | "pattern": "MCU1_4"
558 | },
559 | {
560 | "netclass": "Default",
561 | "pattern": "MCU1_20"
562 | },
563 | {
564 | "netclass": "Default",
565 | "pattern": "MCU1_5"
566 | },
567 | {
568 | "netclass": "Default",
569 | "pattern": "MCU1_19"
570 | },
571 | {
572 | "netclass": "Default",
573 | "pattern": "MCU1_6"
574 | },
575 | {
576 | "netclass": "Default",
577 | "pattern": "MCU1_18"
578 | },
579 | {
580 | "netclass": "Default",
581 | "pattern": "MCU1_7"
582 | },
583 | {
584 | "netclass": "Default",
585 | "pattern": "MCU1_17"
586 | },
587 | {
588 | "netclass": "Default",
589 | "pattern": "MCU1_8"
590 | },
591 | {
592 | "netclass": "Default",
593 | "pattern": "MCU1_16"
594 | },
595 | {
596 | "netclass": "Default",
597 | "pattern": "MCU1_9"
598 | },
599 | {
600 | "netclass": "Default",
601 | "pattern": "MCU1_15"
602 | },
603 | {
604 | "netclass": "Default",
605 | "pattern": "MCU1_10"
606 | },
607 | {
608 | "netclass": "Default",
609 | "pattern": "MCU1_14"
610 | },
611 | {
612 | "netclass": "Default",
613 | "pattern": "MCU1_11"
614 | },
615 | {
616 | "netclass": "Default",
617 | "pattern": "MCU1_13"
618 | },
619 | {
620 | "netclass": "Default",
621 | "pattern": "MCU1_12"
622 | },
623 | {
624 | "netclass": "Default",
625 | "pattern": "BAT"
626 | }
627 | ]
628 | },
629 | "pcbnew": {
630 | "last_paths": {
631 | "gencad": "",
632 | "idf": "",
633 | "netlist": "",
634 | "plot": "",
635 | "pos_files": "",
636 | "specctra_dsn": "",
637 | "step": "",
638 | "svg": "",
639 | "vrml": ""
640 | },
641 | "page_layout_descr_file": ""
642 | },
643 | "schematic": {
644 | "legacy_lib_dir": "",
645 | "legacy_lib_list": []
646 | },
647 | "sheets": [],
648 | "text_variables": {}
649 | }
650 |
--------------------------------------------------------------------------------
/kicad/framework16v1/framework16v1.round-tracks-config:
--------------------------------------------------------------------------------
1 | Default True 1.0 2
2 | False True False
3 |
--------------------------------------------------------------------------------
/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_Default.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_Default.zip
--------------------------------------------------------------------------------
/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_Elecrow.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_Elecrow.zip
--------------------------------------------------------------------------------
/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_FusionPCB.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_FusionPCB.zip
--------------------------------------------------------------------------------
/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_JLCPCB.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_JLCPCB.zip
--------------------------------------------------------------------------------
/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_PCBWay.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/sommerper/framework16-keyboard-v1/0367c605819d629a1eedcd6792cfe532f3803712/kicad/framework16v1/gerber_to_order/framework16v1_270.0x104.215538mm_for_PCBWay.zip
--------------------------------------------------------------------------------
/qmk/keyboards/framework_v1/keyboard.json:
--------------------------------------------------------------------------------
1 | {
2 | "keyboard_name": "Framework 16 Keyboard v1",
3 | "manufacturer": "Phero",
4 | "url": "",
5 | "maintainer": "qmk",
6 | "features": {
7 | "bootmagic": true,
8 | "extrakey": true,
9 | "mousekey": true,
10 | "nkro": true
11 | },
12 | "usb": {
13 | "vid": "0x4354",
14 | "pid": "0x0001",
15 | "device_version": "0.0.1"
16 | },
17 | "processor": "atmega32u4",
18 | "bootloader": "caterina",
19 | "diode_direction": "COL2ROW",
20 | "matrix_pins": {
21 | "cols": ["E6", "B4", "B5", "B6", "B2", "B1"],
22 | "rows": ["D3", "F4", "D2", "F5", "D4", "F6", "C6", "F7"]
23 | },
24 | "community_layouts": ["framework"],
25 | "layouts": {
26 | "LAYOUT_framework": {
27 | "layout": [
28 | {"label": "Q", "matrix": [0, 0], "x": 1, "y": 0.9},
29 | {"label": "W", "matrix": [0, 1], "x": 2, "y": 0.6},
30 | {"label": "E", "matrix": [0, 2], "x": 3, "y": 0.3},
31 | {"label": "R", "matrix": [0, 3], "x": 4, "y": 0.3},
32 | {"label": "T", "matrix": [0, 4], "x": 5, "y": 0.6},
33 |
34 | {"label": "Y", "matrix": [1, 4], "x": 7, "y": 0.6},
35 | {"label": "U", "matrix": [1, 3], "x": 8, "y": 0.3},
36 | {"label": "I", "matrix": [1, 2], "x": 9, "y": 0.3},
37 | {"label": "O", "matrix": [1, 1], "x": 10, "y": 0.6},
38 | {"label": "P", "matrix": [1, 0], "x": 11, "y": 0.9},
39 |
40 | {"label": "Q", "matrix": [2, 0], "x": 1, "y": 1.9},
41 | {"label": "W", "matrix": [2, 1], "x": 2, "y": 1.6},
42 | {"label": "E", "matrix": [2, 2], "x": 3, "y": 1.3},
43 | {"label": "R", "matrix": [2, 3], "x": 4, "y": 1.3},
44 | {"label": "T", "matrix": [2, 4], "x": 5, "y": 1.6},
45 |
46 | {"label": "Y", "matrix": [3, 4], "x": 7, "y": 1.6},
47 | {"label": "U", "matrix": [3, 3], "x": 8, "y": 1.3},
48 | {"label": "I", "matrix": [3, 2], "x": 9, "y": 1.3},
49 | {"label": "O", "matrix": [3, 1], "x": 10, "y": 1.6},
50 | {"label": "P", "matrix": [3, 0], "x": 11, "y": 1.9},
51 |
52 | {"label": "Q", "matrix": [4, 0], "x": 1, "y": 2.9},
53 | {"label": "W", "matrix": [4, 1], "x": 2, "y": 2.6},
54 | {"label": "E", "matrix": [4, 2], "x": 3, "y": 2.3},
55 | {"label": "R", "matrix": [4, 3], "x": 4, "y": 2.3},
56 | {"label": "T", "matrix": [4, 4], "x": 5, "y": 2.6},
57 |
58 | {"label": "Y", "matrix": [5, 4], "x": 7, "y": 2.6},
59 | {"label": "U", "matrix": [5, 3], "x": 8, "y": 2.3},
60 | {"label": "I", "matrix": [5, 2], "x": 9, "y": 2.3},
61 | {"label": "O", "matrix": [5, 1], "x": 10, "y": 2.6},
62 | {"label": "P", "matrix": [5, 0], "x": 11, "y": 2.9},
63 |
64 | {"label": "W", "matrix": [6, 1], "x": 2, "y": 3},
65 | {"label": "E", "matrix": [6, 2], "x": 3, "y": 3},
66 | {"label": "R", "matrix": [6, 3], "x": 3, "y": 3.8},
67 | {"label": "T", "matrix": [6, 4], "x": 4, "y": 4},
68 |
69 | {"label": "Y", "matrix": [7, 4], "x": 6, "y": 3},
70 | {"label": "U", "matrix": [7, 3], "x": 7, "y": 3},
71 | {"label": "I", "matrix": [7, 2], "x": 8, "y": 3},
72 | {"label": "O", "matrix": [7, 1], "x": 9, "y": 3},
73 |
74 | {"label": "Q", "matrix": [6, 5], "x": 5, "y": 4.2},
75 | {"label": "W", "matrix": [7, 5], "x": 2, "y": 3}
76 | ]
77 | }
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/qmk/keyboards/framework_v1/keymaps/default/config.h:
--------------------------------------------------------------------------------
1 | // Copyright QMK Community
2 | // SPDX-License-Identifier: GPL-2.0+
3 |
4 | #pragma once
5 |
6 |
7 | #ifdef AUDIO_ENABLE
8 | #define STARTUP_SONG SONG(PLANCK_SOUND)
9 | // #define STARTUP_SONG SONG(NO_SOUND)
10 |
11 | #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
12 | SONG(COLEMAK_SOUND), \
13 | SONG(DVORAK_SOUND) \
14 | }
15 | #endif
16 |
17 | #define MUSIC_MASK (keycode != KC_NO)
18 |
19 | /*
20 | * MIDI options
21 | */
22 |
23 | /* enable basic MIDI features:
24 | - MIDI notes can be sent when in Music mode is on
25 | */
26 |
27 | #define MIDI_BASIC
28 |
29 | /* enable advanced MIDI features:
30 | - MIDI notes can be added to the keymap
31 | - Octave shift and transpose
32 | - Virtual sustain, portamento, and modulation wheel
33 | - etc.
34 | */
35 | //#define MIDI_ADVANCED
36 |
37 | /* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
38 | //#define MIDI_TONE_KEYCODE_OCTAVES 2
39 |
--------------------------------------------------------------------------------
/qmk/keyboards/framework_v1/keymaps/default/keymap.c:
--------------------------------------------------------------------------------
1 | /* Copyright 2015-2017 Jack Humbert
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 .
15 | */
16 |
17 | #include QMK_KEYBOARD_H
18 |
19 |
20 | enum framework_layers {
21 | _QWERTY,
22 | };
23 |
24 | #define QWERTY PDF(_QWERTY)
25 |
26 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
27 | [_QWERTY] = LAYOUT_framework(
28 | KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
29 | KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J,
30 | KC_K, KC_L, KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
31 | KC_U, KC_Y, KC_Z, KC_X, KC_SPC, KC_ASTR, KC_COMMA,KC_AT, KC_AMPR, KC_DOT
32 | )
33 | };
34 |
35 |
--------------------------------------------------------------------------------
/qmk/keyboards/framework_v1/readme.md:
--------------------------------------------------------------------------------
1 | # Contra
2 |
3 | Contra is a low cost 40% keyboard.
4 |
5 | * Keyboard Maintainer: The QMK Community
6 | * Hardware Supported: [Contra](https://github.com/ai03-2725/Contra)
7 | * Hardware Availability: PCB sold by various vendors
8 |
9 | Make example for this keyboard (after setting up your build environment):
10 |
11 | make contra:default
12 |
13 | See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
14 |
15 | ## Bootloader
16 |
17 | Enter the bootloader in 3 ways:
18 |
19 | * **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is configured.
20 | * **Physical reset button**: Briefly press the reset button soldered on the PCB.
21 | * **Bootmagic reset**: Hold down the top left key and plug in the controller.
22 |
--------------------------------------------------------------------------------
/zmk/boards/shields/framework_v1/Kconfig.defconfig:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2021 The ZMK Contributors
2 | # SPDX-License-Identifier: MIT
3 |
4 | if SHIELD_FRAMEWORK_V1
5 |
6 | config ZMK_KEYBOARD_NAME
7 | default "Framework v1 Keyboard"
8 |
9 | endif
--------------------------------------------------------------------------------
/zmk/boards/shields/framework_v1/Kconfig.shield:
--------------------------------------------------------------------------------
1 | # Copyright (c) 2021 The ZMK Contributors
2 | # SPDX-License-Identifier: MIT
3 |
4 | config SHIELD_FRAMEWORK_V1
5 | def_bool $(shields_list_contains,framework_v1)
--------------------------------------------------------------------------------
/zmk/boards/shields/framework_v1/framework_v1.conf:
--------------------------------------------------------------------------------
1 | CONFIG_ZMK_KEYBOARD_NAME="Framework_v1"
2 | CONFIG_ZMK_BLE_EXPERIMENTAL_FEATURES=y
3 | CONFIG_ZMK_SLEEP=y
4 | CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
5 | CONFIG_ZMK_BLE_EXPERIMENTAL_CONN=y
6 | CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
7 | CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n
--------------------------------------------------------------------------------
/zmk/boards/shields/framework_v1/framework_v1.keymap:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 The ZMK Contributors
3 | *
4 | * SPDX-License-Identifier: MIT
5 | */
6 |
7 |
8 | #include
9 | #include
10 | #include
11 | #include
12 | #include "zmk-helpers/helper.h"
13 | #include "framework_v1.overlay"
14 | #include "framework_v1_keypos.h"
15 |
16 |
17 | #define BASE 0
18 | #define LOWER 1
19 | #define RAISE 2
20 |
21 | #define BASEMAC 3
22 | #define LOWERMAC 4
23 | #define RAISEMAC 5
24 |
25 | #define QUERTY 6
26 | #define EXTRAS 7
27 | #define NUMPAD 8
28 | #define NUMBERS 9
29 | #define BLUETOOTH 10
30 | #define LANG 11
31 |
32 | // left-hand keys
33 | #define KEYS_L LN4 LN3 LN2 LN1 LN0 LT4 LT3 LT2 LT1 LT0 LM4 LM3 LM2 LM1 LM0 LB1 LB0
34 | // right-hand keys
35 | #define KEYS_R RN0 RN1 RN2 RN3 RN4 RT0 RT1 RT2 RT3 RT4 RM0 RM1 RM2 RM3 RM4 RB0 RB1
36 | // left-hand thumb keys
37 | #define THUMBS_L LH0 LH1 LH2
38 | // right-hand thumb keys
39 | #define THUMBS_R RH0 RH1 RH2
40 |
41 | / {
42 | conditional_layers {
43 | compatible = "zmk,conditional-layers";
44 | tri_layer {
45 | if-layers = ;
46 | then-layer = ;
47 | };
48 | tri_layer_mac {
49 | if-layers = ;
50 | then-layer = ;
51 | };
52 | };
53 | };
54 |
55 |
56 | #define XXX &none
57 | #define ___ &trans
58 |
59 | #undef COMBO_TERM
60 | #define COMBO_TERM 18
61 |
62 |
63 | // --------------------------------------------
64 | // ------------------ COMBOS ------------------
65 | // --------------------------------------------
66 | ZMK_COMBO(comboDoubleQuote1, &kp SQT, RM1 RM2, BASE)
67 |
68 |
69 |
70 | // --------------------------------------------
71 | // ------------------- HMR --------------------
72 | // --------------------------------------------
73 | #define MAKE_HRM(NAME, HOLD, TAP, TRIGGER_POS) \
74 | ZMK_BEHAVIOR(NAME, hold_tap, \
75 | flavor = "balanced"; \
76 | tapping-term-ms = <280>; \
77 | quick-tap-ms = <150>; \
78 | bindings = , ; \
79 | hold-trigger-key-positions = ; \
80 | hold-trigger-on-release; \
81 | hold-while-undecided; \
82 | )
83 |
84 | // left-hand HRMs
85 | MAKE_HRM(hml, &kp, &kp, THUMBS_L THUMBS_R KEYS_R)
86 | // right-hand HRMs
87 | MAKE_HRM(hmr, &kp, &kp, THUMBS_L THUMBS_R KEYS_L)
88 |
89 |
90 | // --------------------------------------------
91 | // ----------------- TOGGLES ------------------
92 | // --------------------------------------------
93 | < {
94 | tapping-term-ms = <280>;
95 | quick-tap-ms = <280>; // repeat on tap-into-hold
96 | flavor = "balanced";
97 | };
98 |
99 | &mt {
100 | tapping-term-ms = <280>;
101 | quick-tap-ms = <280>; // repeat on tap-into-hold
102 | flavor = "balanced";
103 | };
104 |
105 | // --------------------------------------------
106 | // --------------- BEHAVIOURS -----------------
107 | // --------------------------------------------
108 |
109 | ZMK_BEHAVIOR(alt_dot, hold_tap,
110 | flavor = "balanced";
111 | tapping-term-ms = <200>;
112 | bindings = <&kp>, <&alt_morph>;
113 | hold-while-undecided;
114 | )
115 | ZMK_BEHAVIOR(alt_morph, mod_morph,
116 | bindings = <&kp DOT>, <&kp COMMA>;
117 | mods = <(MOD_LSFT|MOD_RSFT)>;
118 | )
119 | // ----------------------------
120 | ZMK_BEHAVIOR(alt_sqt, hold_tap,
121 | flavor = "balanced";
122 | tapping-term-ms = <200>;
123 | bindings = <&kp>, <&alt_morph_sqt>;
124 | )
125 |
126 | ZMK_BEHAVIOR(alt_morph_sqt, mod_morph,
127 | bindings = <&kp SQT>, <&kp COMMA>;
128 | mods = <(MOD_LSFT|MOD_RSFT)>;
129 | )
130 |
131 | ZMK_BEHAVIOR(copy_cut, tap_dance,
132 | tapping-term-ms = <200>;
133 | bindings = <&kp LC(INS)>, <&kp LC(X)>;
134 | )
135 |
136 | ZMK_BEHAVIOR(copy_cut_mac, tap_dance,
137 | tapping-term-ms = <200>;
138 | bindings = <&kp LG(C)>, <&kp LG(X)>;
139 | )
140 |
141 |
142 | // --------------------------------------------
143 | // ----------------- MACROS -------------------
144 | // --------------------------------------------
145 | ZMK_BEHAVIOR(qu_macro, macro,
146 | wait-ms = <0>;
147 | tap-ms = <5>;
148 | bindings = <&kp Q>, <&kp U>;
149 | )
150 | ZMK_BEHAVIOR(qui_macro, macro,
151 | wait-ms = <0>;
152 | tap-ms = <5>;
153 | bindings = <&kp Q>, <&kp U>, <&kp I>;
154 | )
155 | ZMK_BEHAVIOR(sch_macro, macro,
156 | wait-ms = <0>;
157 | tap-ms = <5>;
158 | bindings = <&kp S>, <&kp C>, <&kp H>;
159 | )
160 |
161 | // -------------------------------------------------------------------
162 | // Linux
163 | // -------------------------------------------------------------------
164 | // / {
165 | // keymap {
166 | // compatible = "zmk,keymap";
167 |
168 | // base_layer {
169 | // bindings = <
170 | // &kp TILDE &kp C &kp L &kp D &kp K &kp J &kp F &kp O &kp U &kp SEMI
171 | // &kp R &kp S &kp T &kp H &kp G &kp M &kp N &kp E &kp I &kp A
172 | // &kp Q &kp W &kp V &kp B &kp SQT &kp COLON &kp P &kp X &kp Y &kp Z
173 | // &kp GRAVE &kp DQT &kp COMMA &kp DOT
174 | // &mt LALT TAB &kp HASH &kp DOLLAR &kp LT &kp SLASH &kp GT
175 |
176 |
177 | // >;
178 | // };
179 | // };
180 | // };
181 |
182 |
183 | ZMK_LAYER(base,
184 | &kp HASH &kp C &kp L &kp D &kp K &kp J &kp F &kp O &kp U &kp SEMI
185 | &kp R &hml LGUI S &hml LCTRL T &hml LSHIFT H &kp G &kp M &hmr RSHIFT N &hmr RCTRL E &hmr RGUI I &kp A
186 | &kp Q &kp W &kp V < NUMPAD B &kp SQT &kp COLON &kp P &kp X &kp Y &kp Z
187 | &kp GRAVE &kp DQT &kp COMMA &kp DOT
188 | &mt LALT TAB < LOWER BSPC < NUMBERS ESC < LANG RET < RAISE SPC &alt_sqt RALT 0
189 | )
190 |
191 | ZMK_LAYER(lower,
192 | &tog BASEMAC &kp K_VOL_DN &kp K_MUTE &kp K_VOL_UP &kp LC(BSPC) XXX &kp HOME XXX &kp END XXX
193 | &caps_word &kp LGUI &kp LCTRL &kp LSHIFT &kp BSPC XXX &kp LEFT &kp UP &kp RIGHT XXX
194 | &kp LC(Z) XXX ©_cut &kp LS(INS) &kp DEL XXX &kp PG_UP &kp DOWN &kp PG_DN &kp LC(SLASH)
195 | ___ ___ ___ ___
196 | ___ ___ ___ ___ < RAISE MINUS ___
197 | )
198 |
199 | ZMK_LAYER(raise,
200 | XXX &kp AT &kp HASH &kp DOLLAR &kp PERCENT XXX &kp AMPS &kp LPAR &kp RPAR XXX
201 | &kp BACKSLASH &kp LT &kp SLASH &kp GT &kp QMARK XXX &kp PIPE &kp LBRC &kp RBRC &kp CARET
202 | &kp EXCL &kp TILDE &kp MINUS &kp DOT XXX &kp SEMI &kp ASTERISK &kp LBKT &kp RBKT &kp EQUAL
203 | ___ ___ ___ ___
204 | ___ < LOWER UNDERSCORE ___ ___ ___ &kp EQUAL
205 | )
206 |
207 | // -------------------------------------------------------------------
208 | // Linux end
209 | // -------------------------------------------------------------------
210 |
211 | // -------------------------------------------------------------------
212 | // Mac start
213 | // -------------------------------------------------------------------
214 |
215 | ZMK_LAYER(basemac,
216 | &kp M &kp C &kp L &kp D &kp K &kp J &kp F &kp O &kp U &kp SEMI
217 | &kp R &hml LGUI S &hml LCTRL T &hml LSHIFT H &kp G &kp M &hmr RSHIFT N &hmr RCTRL E &hmr RGUI I &kp A
218 | &kp Q &kp W &kp V < NUMPAD B &kp SQT &kp COLON &kp P &kp X &kp Y &kp Z
219 | &kp GRAVE &kp DQT &kp COMMA &kp DOT
220 | &mt LALT TAB < LOWERMAC BSPC < NUMBERS ESC < LANG RET < RAISEMAC SPC &alt_sqt RALT 0
221 |
222 | )
223 |
224 | ZMK_LAYER(lowermac,
225 | &tog BASE &kp K_VOL_DN &kp K_MUTE &kp K_VOL_UP &kp LG(BSPC) &kp HOME &kp LG(LEFT) XXX &kp LG(RIGHT) &kp END
226 | XXX &kp LGUI &kp LCTRL &kp LSHIFT &kp BSPC XXX &kp LEFT &kp UP &kp RIGHT &kp RETURN
227 | &kp LG(Z) XXX ©_cut_mac &kp LG(V) &kp DEL XXX &kp PG_UP &kp DOWN &kp PG_DN &kp LG(SLASH)
228 | ___ ___ ___ ___
229 | ___ ___ ___ ___ < RAISEMAC MINUS ___
230 | )
231 |
232 | ZMK_LAYER(raisemac,
233 | XXX &kp AT &kp HASH &kp DOLLAR &kp PERCENT XXX &kp AMPS &kp LPAR &kp RPAR XXX
234 | &kp BACKSLASH &kp LT &kp SLASH &kp GT &kp QMARK XXX &kp PIPE &kp LBRC &kp RBRC &kp CARET
235 | &kp EXCL &kp TILDE &kp MINUS &kp DOT XXX &kp SEMI &kp ASTERISK &kp LBKT &kp RBKT &kp EQUAL
236 | ___ ___ ___ ___
237 | ___ < LOWERMAC UNDERSCORE ___ ___ ___ ___
238 | )
239 |
240 | // -------------------------------------------------------------------
241 | // Mac end
242 | // -------------------------------------------------------------------
243 |
244 | ZMK_LAYER(querty,
245 | &kp Q &kp R &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P
246 | &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp K &kp L
247 | &kp Z &kp X &kp C &kp V &kp B &kp N &kp N &kp M &kp COMMA &kp DOT
248 | &kp LCTRL &kp LSHIFT &kp COMMA &kp DOT
249 | &mt LALT TAB < LOWER BSPC < NUMBERS ESC < LANG RET < RAISE SPC &alt_dot RALT 0
250 | )
251 |
252 | ZMK_LAYER(extras,
253 | XXX XXX XXX XXX XXX &kp F13 &kp F7 &kp F8 &kp F9 &kp F10
254 | &mo BLUETOOTH XXX XXX XXX XXX &kp F14 &kp F4 &kp F5 &kp F6 &kp F11
255 | XXX XXX XXX XXX XXX &kp F15 &kp F1 &kp F2 &kp F3 &kp F12
256 | ___ ___ ___ ___
257 | ___ XXX ___ ___ XXX ___
258 | )
259 |
260 | ZMK_LAYER(numpad,
261 | XXX &kp NUMBER_7 &kp NUMBER_8 &kp NUMBER_9 XXX &kp KP_DIVIDE &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_MINUS
262 | XXX &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_6 XXX &kp KP_MULTIPLY &kp KP_N4 &kp KP_N5 &kp KP_N6 &kp KP_PLUS
263 | &kp NUMBER_0 &kp NUMBER_1 &kp NUMBER_2 &kp NUMBER_3 XXX &kp COLON &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_EQUAL
264 | &kp CAPSLOCK &kp KP_NUMLOCK &kp COMMA &kp KP_DOT
265 | ___ ___ ___ ___ &kp KP_N0 &kp KP_DOT
266 | )
267 |
268 | ZMK_LAYER(numbers,
269 | &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp KP_N8 &kp F9 &kp F10
270 | &kp NUMBER_1 &kp NUMBER_2 &kp NUMBER_3 &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_6 &kp NUMBER_7 &kp KP_N8 &kp NUMBER_9 &kp NUMBER_0
271 | &kp F11 &kp F12 &kp F13 &kp F14 &kp F15 &kp F16 &kp F17 &kp KP_N8 &kp F19 &kp F20
272 | ___ ___ ___ ___
273 | ___ ___ ___ ___ ___ ___
274 | )
275 |
276 | ZMK_LAYER(bluetooth,
277 | XXX XXX XXX XXX XXX &sys_reset XXX &out OUT_BLE &out OUT_USB &bootloader
278 | XXX XXX XXX XXX XXX XXX &bt BT_SEL 4 &bt BT_SEL 5 XXX XXX
279 | XXX XXX XXX XXX XXX &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 XXX
280 | XXX XXX &bt BT_CLR XXX
281 | XXX XXX XXX XXX XXX XXX
282 | )
283 |
284 | ZMK_LAYER(lang,
285 | XXX &sch_macro XXX XXX XXX XXX XXX &kp RA(P) &kp RA(Y) XXX
286 | &qui_macro &kp RA(S) XXX XXX XXX XXX XXX &kp RA(L) &kp RA(Z) &kp RA(Q)
287 | &qu_macro XXX XXX XXX XXX XXX XXX XXX XXX &kp RA(W)
288 | ___ ___ XXX XXX
289 | ___ XXX ___ ___ XXX XXX
290 | )
--------------------------------------------------------------------------------
/zmk/boards/shields/framework_v1/framework_v1.overlay:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2021 The ZMK Contributors
3 | *
4 | * SPDX-License-Identifier: MIT
5 | */
6 |
7 | #include
8 |
9 | / {
10 | chosen {
11 | zmk,kscan = &kscan0;
12 | zmk,matrix_transform = &default_transform;
13 | };
14 |
15 | default_transform: keymap_transform_0 {
16 | compatible = "zmk,matrix-transform";
17 | columns = <5>;
18 | rows = <8>;
19 | map = <
20 | RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0)
21 | RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(3,4) RC(3,3) RC(3,2) RC(3,1) RC(3,0)
22 | RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(5,4) RC(5,3) RC(5,2) RC(5,1) RC(5,0)
23 | RC(6,1) RC(6,2) RC(7,2) RC(7,1)
24 | RC(6,3) RC(6,4) RC(6,5) RC(7,5) RC(7,4) RC(7,3)
25 | >;
26 | };
27 |
28 | kscan0: kscan_0 {
29 | compatible = "zmk,kscan-gpio-matrix";
30 | label = "KSCAN";
31 | diode-direction = "col2row";
32 |
33 | // nrfmicro_13
34 | // col-gpios
35 | // = <&gpio0 9 GPIO_ACTIVE_HIGH>
36 | // , <&gpio0 10 GPIO_ACTIVE_HIGH>
37 | // , <&gpio1 6 GPIO_ACTIVE_HIGH>
38 | // , <&gpio1 11 GPIO_ACTIVE_HIGH>
39 | // , <&gpio0 28 GPIO_ACTIVE_HIGH>
40 | // , <&gpio1 13 GPIO_ACTIVE_HIGH>
41 | // ;
42 |
43 | // row-gpios
44 | // = <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
45 | // , <&gpio0 30 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
46 | // , <&gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
47 | // , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
48 | // , <&gpio0 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
49 | // , <&gpio0 29 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
50 | // , <&gpio0 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
51 | // , <&gpio1 02 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
52 | // ;
53 |
54 | // nice nano
55 | col-gpios
56 | = <&gpio0 11 GPIO_ACTIVE_HIGH>
57 | , <&gpio1 4 GPIO_ACTIVE_HIGH>
58 | , <&gpio1 6 GPIO_ACTIVE_HIGH>
59 | , <&gpio0 9 GPIO_ACTIVE_HIGH>
60 | , <&gpio0 10 GPIO_ACTIVE_HIGH>
61 | , <&gpio1 13 GPIO_ACTIVE_HIGH>
62 | ;
63 |
64 | row-gpios
65 | = <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
66 | , <&gpio0 31 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
67 | , <&gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
68 | , <&gpio0 29 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
69 | , <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
70 | , <&gpio0 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
71 | , <&gpio0 24 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
72 | , <&gpio1 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
73 | ;
74 |
75 | // pro micro
76 | // col-gpios
77 | // = <&pro_micro 7 GPIO_ACTIVE_HIGH>
78 | // , <&pro_micro 8 GPIO_ACTIVE_HIGH>
79 | // , <&pro_micro 9 GPIO_ACTIVE_HIGH>
80 | // , <&pro_micro 10 GPIO_ACTIVE_HIGH>
81 | // , <&pro_micro 16 GPIO_ACTIVE_HIGH>
82 | // , <&pro_micro 15 GPIO_ACTIVE_HIGH>
83 | // ;
84 |
85 | // row-gpios
86 | // = <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
87 | // , <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
88 | // , <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
89 | // , <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
90 | // , <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
91 | // , <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
92 | // , <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
93 | // , <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
94 | // ;
95 | };
96 | };
97 |
--------------------------------------------------------------------------------
/zmk/boards/shields/framework_v1/framework_v1_keypos.h:
--------------------------------------------------------------------------------
1 | /*
2 | KEY MATRIX / LAYOUT MAPPING
3 | ╭────────────────────────────┬─────────────────────────────╮ ╭─────────────────────────┬──────────────────────────╮
4 | │ 0 1 2 3 4 │ 5 6 7 8 9 │ │ LN4 LN3 LN2 LN1 LN0 │ RN0 RN1 RN2 RN3 RN4 │
5 | │ 10 11 12 13 14 │ 15 16 17 18 19 │ │ LT4 LT3 LT2 LT1 LT0 │ RT0 RT1 RT2 RT3 RT4 │
6 | │ 20 21 22 23 24 │ 25 26 27 28 29 │ │ LM4 LM3 LM2 LM1 LM0 │ RM0 RM1 RM2 RM3 RM4 │
7 | │ 30 31 │ 32 33 │ │ LB1 LB0 │ RB0 RB1 │
8 | ╰───────────────┬────────────┼────────────┬────────────────╯ ╰──────────┬──────────────┼──────────────┬───────────╯
9 | │ 34 35 36 │ 37 38 39 │ │ LH2 LH1 LH0 │ RH0 RH1 RH3 │
10 | ╰────────────┴────────────╯ ╰──────────────┴──────────────╯
11 | */
12 |
13 | #pragma once
14 |
15 | // left-num row
16 | #define LN0 4
17 | #define LN1 3
18 | #define LN2 2
19 | #define LN3 1
20 | #define LN4 0
21 |
22 | // right-num row
23 | #define RN0 5
24 | #define RN1 6
25 | #define RN2 7
26 | #define RN3 8
27 | #define RN4 9
28 |
29 | // left-top row
30 | #define LT0 14
31 | #define LT1 13
32 | #define LT2 12
33 | #define LT3 11
34 | #define LT4 10
35 |
36 | // right-top row
37 | #define RT0 15
38 | #define RT1 16
39 | #define RT2 17
40 | #define RT3 18
41 | #define RT4 19
42 |
43 | // left-middle row
44 | #define LM0 24
45 | #define LM1 23
46 | #define LM2 22
47 | #define LM3 21
48 | #define LM4 20
49 |
50 | // right-middle row
51 | #define RM0 25
52 | #define RM1 26
53 | #define RM2 27
54 | #define RM3 28
55 | #define RM4 29
56 |
57 | // left-bottom row
58 | #define LB0 31
59 | #define LB1 30
60 |
61 | // right-bottom row
62 | #define RB0 32
63 | #define RB1 33
64 |
65 | // left thumb keys
66 | #define LH0 36
67 | #define LH1 35
68 | #define LH2 34
69 |
70 | // right thumb keys
71 | #define RH0 37
72 | #define RH1 38
73 | #define RH2 39
74 |
75 |
--------------------------------------------------------------------------------