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. pic

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