diff --git a/README.md b/README.md index 3d793e9..6c233b0 100644 --- a/README.md +++ b/README.md @@ -14,3 +14,7 @@ Custom ergonomic mechanical keyboard with low-profile (Choc) switches. - [KiCad](https://www.kicad.org/) - [FreeCAD](https://www.freecad.org/) - [UltiMaker Cura](https://ultimaker.com/software/ultimaker-cura/) + +## Resources + +- [FlatFootFox's Ergogen tutorial](https://flatfootfox.com/ergogen-introduction/) diff --git a/ergogen/config.yaml b/ergogen/config.yaml new file mode 100644 index 0000000..a9ffd11 --- /dev/null +++ b/ergogen/config.yaml @@ -0,0 +1,217 @@ +# Ergogen config for the eepyBoard +# +# Reference information: +# - Keycap size (FK MBK keycaps): 17.5mm x 16.5mm + +# Metadata +meta: + # Required version of Ergogen + engine: "4.1.0" + # Version of the board + version: "1.0" + author: binaryDiv + +# Define units and default values used throughout this file +units: + # Redefine choc units (keycap size + 1.5mm clearance) + cx: 19 + cy: 18 + + # Size of keycaps + kcx: 17.5 + kcy: 16.5 + + # Size of key rectangle in demo view (keycap size) + $default_width: 17.5 + $default_height: 16.5 + + # Actual spacing of keys + $default_spread: cx + $default_padding: cy + +# Define the points (i.e. keys) +points: + key: + # Tag all points as "is_key" unless overwritten + tags: [ is_key ] + + zones: + # Primary keyboard zone + primary: + # Set anchor to fix placement on KiCad sheet + anchor: + shift: [ 100, -150 ] + + # Key rows (from bottom to top) + rows: + # Modifier row (Ctrl, ..., but excluding the thumb keys) + mods: + # Bottom letter row (Shift, ZXCV...) + bottom: + # Middle/home letter row (Caps Lock, ASDFG...) + home: + # Top letter row (Tab, QWERT...) + top: + # Number row (`, 12345...) + numbers: + + # Key columns (from left to right) + columns: + # Left-most column (`, Tab, Caps Lock, Shift, Ctrl) + zero: + # First letter column (1, Q) + one: + # Second letter column (2, W) + two: + rows.mods.skip: true + # Third letter column (3, E) + three: + rows.mods.skip: true + # Fourth letter column (4, R) + four: + rows.mods.skip: true + # Fifth letter column (5, T) + five: + rows.mods.skip: true + # Sixth letter column (6, Y) + six: + rows.mods.skip: true + # Seventh letter column (7, U) + seven: + rows.mods.skip: true + # Eighth letter column (8, I) + eight: + rows.mods.skip: true + # Nineth letter column (9, O) + nine: + rows.mods.skip: true + # Tenth letter column (0, P) + ten: + rows.mods.skip: true + # Eleventh letter column (-, [) + eleven: + # Twelfth letter column (=, ]) + twelve: + + # Thumb fan + thumb: + # Position thumb keys based on the (non-existant) third key in the modifier row + anchor: + ref: primary_two_mods + shift: [ 2, 0 ] + + # Rotate the thumb keys around the bottom-left corner of the key + key: + origin: [ -0.5cx, -0.5cy ] + splay: -4 + + # Define thumb keys + columns: + one: + two: + three: + four: + + # Mirror the board with a distance of 1 key between the upper corners + mirror: + ref: primary_five_numbers + shift: [ 0.5cx, 0.5cx ] + distance: 1cx + + # Extra row above the primary zone (including rotary encoder) + extra: + # Position extra row above primary zone with 3mm of vertical offset + anchor: + ref: primary_zero_numbers + shift: [ 0, cy + 3 ] + + # Define extra keys + # (The "F" keys will likely be used for macros and other special functions, but can be mapped to specific F keys + # when needed.) + columns: + # Escape key + esc: + + # Block of 4 extra keys with 6mm offset + f1: + key.spread: cx + 6 + f2: + f3: + f4: + + # Block of 4 extra keys with 6mm offset + f5: + key.spread: cx + 6 + f6: + f7: + f8: + + # Rotary encoder in the upper right corner, with offset to be centered between columns eleven/twelve + rotary: + key: + spread: 2.5cx + 7 + width: 20.5 + height: 20.5 + tags: [ is_rotary_encoder ] + +# Generate outlines that can be used in the PCB and for 3D models +outlines: + # Outline of the key caps + keys: + - what: rectangle + where: is_key + size: [ kcx, kcy ] + + # Rotary encoder with knob (2cm) + rotary_encoder: + - what: rectangle + operation: stack + size: [ 14, 14 ] + - what: circle + operation: stack + radius: 10 + + # Outline for the PCB + board: + - what: polygon + points: + - ref: primary_zero_numbers + shift: [ -0.5cx, 1.5cy + 3 ] + - ref: primary_twelve_numbers + shift: [ 0.5cx, 1.5cy + 3 ] + - ref: primary_twelve_mods + shift: [ 0.5cx, -0.5cy ] + - ref: mirror_thumb_four + shift: [ 0.5cx, -0.5cy ] + - ref: thumb_four + shift: [ 0.5cx, -0.5cy ] + - ref: primary_zero_mods + shift: [ -0.5cx, -0.5cy ] + expand: 4 + + # Preview version of board with key caps and components for visualization + board_preview: + - board + - ^keys + # RP2040 controller board + - what: rectangle + operation: stack + where: primary_eleven_numbers + size: [ 54, 20 ] + adjust.shift: [ 0, cy + 3 ] + # Rotary encoder (component) + - what: outline + name: rotary_encoder + operation: stack + where: is_rotary_encoder + + # Cutouts for the switches + switch_cutouts: + - what: rectangle + where: true + size: 14 + + # Board outline with switch cutouts + switch_plate: + - board + - -switch_cutouts diff --git a/ergogen/eepyboard.yml b/ergogen/eepyboard.yml deleted file mode 100644 index b65a9d8..0000000 --- a/ergogen/eepyboard.yml +++ /dev/null @@ -1,142 +0,0 @@ -# Ergogen config for the eepyBoard -# -# Reference information: -# - Keycap size (FK MBK keycaps): 17.5mm x 16.5mm - -# Define units and default values used throughout this file -units: - # Redefine choc units (keycap size + 1mm clearance) - cx: 18.5 - cy: 17.5 - - # Size of key rectangle in demo view (keycap size) - $default_width: cx-1 - $default_height: cy-1 - - # Actual spacing of keys - $default_spread: cx - $default_padding: cy - -# Define the points (i.e. keys) -points: - zones: - # Primary keyboard zone - primary: - # Key rows (from bottom to top) - rows: - # Modifier row (Ctrl, ..., but excluding the thumb keys) - mod: - # Bottom letter row (Shift, Backspace, ZXCV...) - bottom: - # Middle letter row (Esc, ASDFG...) - home: - # Top letter row (Tab, QWERT...) - top: - # Number row (`, 12345...) - num: - - # Key columns (from left to right) - columns: - # Left-most column (`, Tab, Esc, Shift, Ctrl) - outer: - key.stagger: 0.25cy - - # First letter column (1, QA, ...) - one: - key.stagger: 0.25cy - - # Second letter column (2, WSZ) - two: - rows.mod.skip: true - - # Third letter column (3, EDX) - three: - rows.mod.skip: true - - # Fourth letter column (4, RFC) - four: - rows.mod.skip: true - key.stagger: -0.25cy - - # Fifth letter column (5, TGV) - five: - rows.mod.skip: true - key.stagger: -0.25cy - - # Thumb fan - thumb: - # Position thumb keys based on the (non-existant) third key in the modifier row - anchor: - ref: primary_three_mod - shift: [ -0.5cx, -0.25cy ] - - # Rotate the thumb keys around the bottom-left corner of the key - key: - origin: [ -0.5cx, -0.5cy ] - splay: -8 - - # Define thumb keys - columns: - one: - two: - three: - four: - - # Mirror the board with a distance of 1 key between the upper corners - mirror: - ref: primary_five_num - shift: [ 0.5cx, 0.5cx ] - distance: 1cx - - # Slightly rotate each half of the keyboard - rotate: -8 - -# Generate outlines that can be used in the PCB and for 3D models -outlines: - # Outline of the key caps (like the demo preview; used for debugging) - _keys: - - what: rectangle - where: true - size: [ cx-1, cy-1 ] - - # Outline for the PCB - board: - - what: polygon - points: - - ref: primary_outer_num - shift: [ -0.5cx, 0.75cy ] - - ref: primary_five_num - shift: [ 0.5cx, 1.0cy ] - - ref: mirror_primary_five_num - shift: [ 0.5cx, 1.0cy ] - - ref: mirror_primary_outer_num - shift: [ -0.5cx, 0.75cy ] - - ref: mirror_primary_outer_mod - shift: [ -0.5cx, -0.5cy ] - - ref: mirror_thumb_one - shift: [ -0.5cx, -0.5cy ] - - ref: mirror_thumb_four - shift: [ 0.5cx, -0.5cy ] - - ref: thumb_four - shift: [ 0.5cx, -0.5cy ] - - ref: thumb_one - shift: [ -0.5cx, -0.5cy ] - - ref: primary_outer_mod - shift: [ -0.5cx, -0.5cy ] - expand: 2 - - # Debug version of board with key caps for visualization - board_debug: - - board - - ^_keys - - # Cutouts for the switches - switch_cutouts: - - what: rectangle - where: true - size: 14 - - # Board outline with switch cutouts - switch_plate: - - board - - -switch_cutouts diff --git a/package-lock.json b/package-lock.json index b4d4132..a33af04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "": { "name": "eepyboard", "dependencies": { - "ergogen": "4.0.5" + "ergogen": "4.1.0" } }, "node_modules/@babel/runtime": { @@ -148,9 +148,10 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/ergogen": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/ergogen/-/ergogen-4.0.5.tgz", - "integrity": "sha512-vrIrMSNEWRpD6N0JpoJzNkZ4agXN+mbAQZ//G+1UdC8thGewlJxhJp2Oxs+pVXHULoVWWi/popPvgRmy8Jq/Zg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ergogen/-/ergogen-4.1.0.tgz", + "integrity": "sha512-m5mfbF87tdiBjEE/WsBrNKPm+4ZoYOA+ubPTyy5JVj8+DpDUh4lf/bhxkC/gXXcgJB7SLUmNeCtS9C2ttyzAFg==", + "license": "MIT", "dependencies": { "fs-extra": "^11.1.0", "js-yaml": "^3.14.1", diff --git a/package.json b/package.json index fac97a7..895e6d8 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "eepyboard", - "author": "binaryDiv ", + "author": "binaryDiv ", "description": "Dependencies to generate files for the eepyBoard (not an actual node project).", "private": true, "scripts": { - "ergogen": "ergogen -o ergogen/output ergogen/eepyboard.yml" + "ergogen": "ergogen -o ergogen/output ergogen" }, "dependencies": { - "ergogen": "4.0.5" + "ergogen": "4.1.0" } }