Created
December 4, 2025 00:53
-
-
Save justinmklam/9228b794ec988bee8873a235a4a56f49 to your computer and use it in GitHub Desktop.
Ergogen config for a unibody ortho keyboard.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| meta: | |
| engine: 4.1.0 | |
| version: 1.1 | |
| author: justinmklam | |
| units: | |
| # Proxy Spacing Variables | |
| kx: u | |
| ky: U | |
| # Padding Variables | |
| px: kx + 2 | |
| py: ky + 2 | |
| split_angle: 0 | |
| # vertical offset of mcu area items | |
| voff: 11 | |
| # pinky splay angles | |
| # spang: 8 | |
| spang: 0 | |
| pinksprd: 0.5 | |
| standoff_size: 5 #size for standoff holes on pcb | |
| hole1_x: -0.5 kx - 1 | |
| hole1_y: -0.5 ky + 0.5 | |
| hole2_x: -0.52 kx | |
| hole2_y: -0.35 ky | |
| hole3_x: 0.5 kx + 1 | |
| hole3_y: 0. ky - 1.5 | |
| hole4_x: 0.5 kx - 5 | |
| hole4_y: -0.5 ky - 2.1 | |
| hole5_x: -0.5 kx - 0.4 | |
| hole5_y: -0.2 ky + 1.1 | |
| wall_thickness: 1.2 # account for the thickness in 3D printed case/plate | |
| print_fit_tolerance: 0.2 # give the case some overlap beyond pcb | |
| # display correct choc sizing | |
| $default_width: 18 | |
| $default_height: 17 | |
| points: | |
| zones: | |
| matrix: | |
| anchor.shift: [130, -100] # Fix KiCad placement | |
| key: | |
| padding: 1ky # is this extra spacing necessary or will 1 allow spacing for keycaps? | |
| spread: 1kx | |
| columns: | |
| # extra: # additional outer key, inspired by TOTEM | |
| # rows.bottom.skip: true | |
| # rows.top.skip: true | |
| # key.splay: spang | |
| # key.column_net: col_extra | |
| pinky: | |
| key.stagger: 0.33ky | |
| key.splay: spang # comment this line out if using the 'extra' key above | |
| key.column_net: col_pinky | |
| ring: | |
| key.stagger: 1ky | |
| key.splay: -spang/2 | |
| key.spread: 1kx + pinksprd # avoid collision on splayed col? | |
| key.column_net: col_ring | |
| rows.extra.skip: true | |
| middle: | |
| # key.stagger: 0.1ky | |
| key.splay: -spang/2 | |
| key.spread: 1kx + pinksprd # avoid collision on splayed col? | |
| key.column_net: col_middle | |
| rows.extra.skip: true | |
| index: | |
| # key.stagger: -0.1ky | |
| key.column_net: col_index | |
| rows.extra.skip: true | |
| inner: | |
| # key.stagger: -0.1ky | |
| key.column_net: col_inner | |
| rows.extra.skip: true | |
| rows: | |
| bottom: | |
| row_net: row_bottom | |
| home: | |
| row_net: row_home | |
| top: | |
| row_net: row_top | |
| extra: | |
| row_net: row_extra | |
| thumb: | |
| key: | |
| padding: 1ky | |
| spread: 1kx | |
| anchor: | |
| ref: matrix_index_bottom | |
| shift: [0kx, -1ky] | |
| # rotate: -10 | |
| columns: | |
| near: | |
| key.name: thumb_near | |
| key.column_net: col_middle | |
| mid: | |
| # key.splay: -15 | |
| key.origin: [-0.5kx, -0.5ky] | |
| key.name: thumb_mid | |
| key.column_net: col_index | |
| far: | |
| # key.splay: -15 | |
| key.origin: [-0.5kx, -0.5ky] #-0.5kx | |
| key.name: thumb_far | |
| key.column_net: col_inner | |
| ## for 1.5 thumb key | |
| # key.width: 1.5kx | |
| # key.rotate: 90 | |
| rows: | |
| thumb-cluster: | |
| row_net: row_thumb | |
| rotate: -split_angle | |
| mirror: &mirror | |
| ref: thumb_far | |
| distance: 1.5kx | |
| outlines: | |
| board_outline: | |
| - what: polygon | |
| operation: stack | |
| points: | |
| # LEFT SIDE - walk top row (extra column is now the outermost key) | |
| # - ref: matrix_extra_home | |
| # shift: [-0.5px, -0.5py] | |
| # - ref: matrix_extra_home | |
| # shift: [-0.5px, 0.5py] | |
| - ref: matrix_pinky_top | |
| shift: [-0.5px, 0.5py] | |
| - ref: matrix_ring_top | |
| shift: [-0.5px, 0.5py] | |
| - ref: matrix_middle_top | |
| shift: [-0.5px, 0.5py] | |
| - ref: matrix_middle_top | |
| shift: [0.5px, 0.5py] | |
| - ref: matrix_inner_top | |
| shift: [0.5px, 0.5py] | |
| # ACROSS TO RIGHT SIDE | |
| - ref: mirror_matrix_inner_top | |
| shift: [0.5px, 0.5py] | |
| - ref: mirror_matrix_middle_top | |
| shift: [0.5px, 0.5py] | |
| - ref: mirror_matrix_middle_top | |
| shift: [-0.5px, 0.5py] | |
| - ref: mirror_matrix_ring_top | |
| shift: [-0.5px, 0.5py] | |
| - ref: mirror_matrix_pinky_top | |
| shift: [-0.5px, 0.5py] | |
| # - ref: mirror_matrix_extra_home | |
| # shift: [-0.5px, 0.5py] | |
| # - ref: mirror_matrix_extra_home | |
| # shift: [-0.5px, -0.5py] | |
| # DOWN OUTER EDGE (right half, now extra is outermost) | |
| - ref: mirror_matrix_pinky_bottom | |
| shift: [-0.5px, -0.6py] | |
| # RIGHT THUMB CLUSTER | |
| - ref: mirror_thumb_near | |
| shift: [0.5px, -0.5py] | |
| - ref: mirror_thumb_mid | |
| shift: [0.5px, -0.5py] | |
| - ref: mirror_thumb_far | |
| shift: [0.5px, -0.5py] | |
| # CROSS UNDER | |
| - ref: thumb_far | |
| shift: [0.5px, -0.5py] | |
| - ref: thumb_mid | |
| shift: [0.5px, -0.5py] | |
| - ref: thumb_near | |
| shift: [-0.5px, -0.5py] | |
| # LEFT EDGE | |
| - ref: matrix_pinky_bottom | |
| shift: [-0.5px, -0.6py] | |
| fillet: 10 | |
| # just the keys | |
| raw: | |
| - what: rectangle | |
| where: true | |
| size: [px, py] | |
| # keys without padding | |
| keys: | |
| - what: rectangle | |
| where: true | |
| size: [kx-0.5, ky-0.5] | |
| # keys without padding | |
| key-plug: | |
| - what: rectangle | |
| where: true | |
| size: [14, 14] | |
| all_key_outline: | |
| - name: board_outline | |
| - operation: subtract | |
| name: keys | |
| all_plug_outline: | |
| - name: board_outline | |
| - operation: subtract | |
| name: key-plug | |
| pcbs: | |
| pcb: | |
| template: kicad8 | |
| outlines: | |
| main: | |
| outline: board_outline | |
| footprints: | |
| choc_hotswap: | |
| what: ceoloide/switch_choc_v1_v2 | |
| where: true | |
| params: | |
| from: "{{colrow}}" | |
| to: "{{column_net}}" | |
| include_corner_marks: true | |
| include_keycap: true | |
| keycap_height: 16.5 | |
| keycap_width: 17.5 | |
| reversible: false | |
| hotswap: true | |
| choc_v2_support: false | |
| diode: | |
| what: ceoloide/diode_tht_sod123 | |
| where: true | |
| params: | |
| from: "{{colrow}}" | |
| to: "{{row_net}}" | |
| include_tht: false | |
| reversible: false | |
| adjust: | |
| # rotate: -90 | |
| # shift: [8.25,4.2] | |
| shift: [0, -5] | |
| # resist: true | |
| mcu: | |
| what: ceoloide/mcu_nice_nano | |
| where: | |
| - ref: matrix_inner_top | |
| # TODO #5 Move MCU right to create space between Key cols. 1mm should do it to start with... | |
| shift: [25, 6.8 - voff] | |
| rotate: split_angle | |
| params: | |
| reversible: false | |
| reverse_mount: false | |
| show_silk_labels: false | |
| P4: row_top | |
| P5: row_home | |
| P6: row_bottom | |
| P7: row_thumb | |
| P14: col_inner | |
| P15: col_index | |
| P18: col_middle | |
| P19: col_ring | |
| P20: col_pinky | |
| # battery: | |
| # what: ceoloide/battery_connector_jst_ph_2 | |
| # params: | |
| # reversible: true | |
| # where: | |
| # - ref: matrix_inner_top | |
| # shift: [22, -14.2 - voff] | |
| # #rotate: -90 | |
| # power: | |
| # what: ceoloide/power_switch_smd_side | |
| # params: | |
| # reversible: true | |
| # where: | |
| # - ref: matrix_inner_top | |
| # shift: [27.2, -18.2 - voff] | |
| # rotate: 0 | |
| # reset: | |
| # what: ceoloide/reset_switch_smd_side | |
| # params: | |
| # reversible: true | |
| # where: | |
| # - ref: matrix_inner_top | |
| # shift: [27.3, -9.5 - voff] | |
| # rotate: -90 | |
| hole_1: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: matrix_middle_top | |
| shift: [hole1_x, hole1_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_2: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: matrix_inner_top | |
| shift: [hole2_x, hole2_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_3: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: thumb_mid | |
| shift: [hole3_x, hole3_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_4: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: matrix_index_bottom | |
| shift: [hole4_x, hole4_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_5: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: matrix_ring_bottom | |
| shift: [hole5_x, hole5_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_6: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: mirror_matrix_middle_top | |
| shift: [hole1_x, hole1_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_7: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: mirror_matrix_inner_top | |
| shift: [hole2_x, hole2_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_8: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: mirror_thumb_mid | |
| shift: [hole3_x, hole3_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_9: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: mirror_matrix_index_bottom | |
| shift: [hole4_x, hole4_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size | |
| hole_10: | |
| what: ceoloide/mounting_hole_npth | |
| where: | |
| - ref: mirror_matrix_ring_bottom | |
| shift: [hole5_x, hole5_y] | |
| params: | |
| hole_size: standoff_size | |
| hole_drill: standoff_size |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment