My last try designing a unibody keyboard based on the Ferris layout were not that good. It was called unibodysweep. Now I’ll be using ergogen to generate my keyboard. I got inspired by this: GitHub - Riccardo-merli94/Unicorny: Unibody ergonomic keyboard inspired by ferris-sweep. This keyboard has the same layout as the GitHub - smores56/osprette: 34-key keyboard. My Ergogen Code This is the code I tailored in order to generate my keyboard. units: kx: cx ky: cy px: kx + 2 py: ky + 2 points: zones: matrix: anchor: shift: [100, -100] key: padding: 1ky spread: 1kx columns: pinky: key: column_net: P19 ring: key: stagger: 0.66ky column_net: P20 middle: key: stagger: 0.25ky column_net: P21 index: key: stagger: -0.25ky column_net: P0 inner: key: stagger: -0.15ky column_net: P1 rows: bottom: padding: ky row_net: P14 mirror.row_net: P8 home: padding: ky row_net: P15 mirror.row_net: P7 top: padding: ky row_net: P18 mirror.row_net: P6 thumb: anchor: ref: matrix_index_bottom shift: [0.66U, -1.25U] rotate: -10 columns: tucky: key: name: thumb_tucky column_net: P0 reachy: key: spread: U splay: -15 origin: [-0.5U, -0.5U] name: thumb_reachy column_net: P1 rows: fan: row_net: P16 rotate: -30 mirror: &mirror ref: matrix_inner_top distance: 2kx outlines: raw: - what: rectangle where: true size: [px+2, py+2] keys: - what: rectangle where: true size: [kx-0.5,ky-0.5] circle_left_main: - what: circle operation: stack where: - ref: matrix_middle_bottom shift: [ -1.1px,-6.53py] radius: 5.15py circle_left_sub: - what: circle operation: stack where: - ref: matrix_middle_bottom shift: [ 8,-7py] radius: 5.15py circle_left: - name: circle_left_main - operation: name: circle_left_sub circle_right_main: - what: circle operation: stack where: - ref: mirror_matrix_middle_bottom shift: [ -1.1px,-6.53py] radius: 5.15py circle_right_sub: - what: circle operation: stack where: - ref: mirror_matrix_middle_bottom shift: [ 8,-7py] radius: 5.15py circle_right: - name: circle_right_main - operation: name: circle_right_sub circle_complete: - name: circle_left - operation: name: circle_right curve_left: - what: polygon operation: stack points: - ref: matrix_pinky_bottom shift: [-0.4px,0.5py] - ref: thumb_tucky shift: [-0.4px,0.8py] - ref: thumb_tucky shift: [-0.4px,-0.55py] - ref: matrix_pinky_bottom shift: [-0.4px,-0.4py] curve_right: - what: polygon operation: stack points: - ref: mirror_matrix_pinky_bottom shift: [-0.4px,0.5py] - ref: mirror_thumb_tucky shift: [-0.4px,0.8py] - ref: mirror_thumb_tucky shift: [-0.4px,-0.55py] - ref: mirror_matrix_pinky_bottom shift: [-0.4px,-0.4py] curve: - name: curve_left - operation: name: curve_right board: - what: polygon operation: stack points: - ref: matrix_middle_top shift: [-1.8px,-0.6py] - ref: mirror_matrix_middle_top shift: [-1.8px,-0.6py] - ref: mirror_thumb_reachy shift: [-0.04px,-0.5py] - ref: thumb_reachy shift: [-0.04px,-0.5py] edges: - what: polygon operation: stack points: - ref: matrix_pinky_top shift: [-0.4px,0.6py] - ref: matrix_inner_top shift: [0.6px,0.6py] - ref: mirror_matrix_inner_top shift: [0.6px,0.6py] - ref: mirror_matrix_inner_top shift: [-0.4px,0.6py] - ref: mirror_thumb_reachy shift: [-0.04px,-0.5py] - ref: thumb_reachy shift: [-0.04px,-0.5py] step1: - name: raw - operation: name: curve cut_circle: - name: step1 - operation: subtract name: circle_complete step2: - name: cut_circle - operation: name: board fillet: 1 combo: - name: step2 - operation: subtract name: keys pcbs: oled_unisweep: outlines: main: outline: step2 footprints: choc_hotswap: what: choc where: true params: keycaps: true reverse: false hotswap: false from: "{{column_net}}" to: "{{colrow}}" diode: what: diode where: true params: from: "{{colrow}}" to: "{{row_net}}" adjust: shift: [0, -5] slider_back: what: slider where: ref.aggregate.parts: [thumb_reachy, mirror_thumb_reachy] shift: [0,8.5] rotate: 180 params: side: B from: RAW to: B+ pad_vcc: what: pad where: ref.aggregate.parts: [thumb_reachy, mirror_thumb_reachy] shift: [-2.5,52] rotate: 0 params: width: 2 height: 2 net: B+ text: B+ front: true pad_gnd: what: pad where: ref.aggregate.parts: [thumb_reachy, mirror_thumb_reachy] shift: [2.5,52] rotate: 0 params: width: 2 height: 2 net: GND text: GND front: true align: right oled: what: oled params: side: "F" SDA: P2 SCL: P3 where: ref.aggregate.parts: [matrix_inner_bottom, mirror_matrix_inner_bottom] shift: [-6,-13] rotate: 90 promicro: what: promicro params: orientation: "down" where: ref.aggregate.parts: [matrix_inner_home, mirror_matrix_inner_home] shift: [0,-10] rotate: 90