Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
e91f5fdd5This file is pinned to the selected release. Download the original to open it in your design tool.
meta:
keyboard: &keyboard_name Charlieflex
author: chad@transtrum.net
version: &version v1.3
repository: &repo https://github.com/ctranstrum/chuck
license: &license Licensed under CERN-OHL-P v2
# Depending on where you are ordering from, uncomment or edit one of these:
# order_num_template: &order_text JLCJLCJLCJLC # for ordering from JLCpcb.com
# order_num_template: &order_text WayWayWay # for ordering from PCBway.com
order_num_template: &order_text "" # remove the order number text completely
units:
dx: u
dy: u
hdx: dx / 2
hdy: dy / 2
knob_diameter: 25
# how far to drop the outside edge of the knob, knob diameter must be larger than 21
knob_skirt: 2
# EC11 knob height must be at least 16
ec11_knob_height: 17
ec11_shaft_height: 7
# EC12 knob height must be at least 8.5
ec12_knob_height: 16
ec12_shaft_height: 2.65
# easily change the thicknesses of different parts of the case
bottom_case_height: 3
top_case_height: 2.2
attic_case_height: 7
mirrored_distance: 1.75 dx
points:
zones:
matrix:
# Shift the PCB down and to the right to get it on the sheet in kicad
anchor.shift: [50, -100]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
key:
autobind: .5
tags: [switch]
columns:
pinky:
key:
cpdst: CP0
splay: -10
mirror.cpdst: CP5
rows:
bottom:
cpsrc: CP1
bind: [0, 45, 0, 0]
tags: [switch, low_bumper]
home:
cpsrc: CP2
tags: [switch]
shared: pinky_bottom
mirror.shared: mirror_pinky_bottom
top:
orient: -5
shift: [3, 3]
cpsrc: CP3
tags: [switch, high_bumper]
bind: [0, 4]
ring:
key:
stagger: 2/3 dx
spread: 1.05 dx
splay: -5
cpdst: CP0
mirror.cpdst: CP5
rows:
bottom:
cpsrc: CP4
tags: [switch, return]
home:
cpsrc: CP5
tags: [switch]
shared: ring_bottom
mirror:
cpsrc: CP0
shared: mirror_ring_bottom
top:
cpdst: CP1
cpsrc: CP0
mirror.cpdst: CP4
tags: [switch]
middle:
key:
stagger: hdx
spread: 1.04 dx
splay: -5
cpdst: CP1
mirror.cpdst: CP4
rows:
bottom:
cpsrc: CP2
tags: [switch, return]
shared: index_bottom
mirror.shared: mirror_index_bottom
home:
cpsrc: CP3
top:
cpsrc: CP4
tags: [switch, mid_bumper]
bind: [0, 1]
shared: middle_home
mirror:
cpsrc: CP1
shared: mirror_middle_home
index:
key:
stagger: -hdx
splay: -2.5
cpdst: CP2
mirror.cpdst: CP3
rows:
bottom:
cpdst: CP1
cpsrc: CP5
mirror.cpdst: CP4
home:
cpsrc: CP0
top:
cpsrc: CP1
tags: [switch]
shared: index_home
mirror.shared: mirror_index_home
inner:
key:
stagger: 2/3 hdx
cpdst: CP2
mirror.cpdst: CP3
rows:
bottom:
cpsrc: CP3
mirror.cpsrc: CP2
tags: [switch, return]
home:
cpsrc: CP4
tags: [switch]
shared: inner_bottom
mirror.shared: mirror_inner_bottom
thumbs:
mirror:
ref: matrix_inner_home
distance: mirrored_distance
anchor:
ref: matrix_inner_bottom
shift: [0, -dy - 3]
key:
cpsrc: CP5
mirror.cpsrc: CP6
bind: [15, 0, 0, 15]
columns:
inner.rows.spot:
splay: -15
cpdst: CP2
tags: [opt_switch]
outer.rows.spot:
cpdst: CP3
tags: [switch]
encoder:
anchor:
aggregate.parts: [thumbs_outer_spot, mirror_thumbs_outer_spot]
shift: [0, 1.05 dy]
key:
tags: [encoder]
cpsrc: CP6
cpdst: CP1
bind: [25, 4.3, 23.75, 4.3]
mcu:
key.tags: [mcu]
anchor:
# top middle left
aggregate.parts: [matrix_middle_top, mirror_matrix_middle_top]
shift: [-6, 2.65]
power:
key.tags: [power]
anchor:
aggregate.parts: [matrix_middle_top, mirror_matrix_middle_top]
shift: [20, 13]
reset:
key:
tags: [reset]
anchor:
ref: power
shift: [0, -hdy]
battery:
anchor:
aggregate.parts: [matrix_middle_top, mirror_matrix_middle_top]
shift: [0, -7.5]
key.tags: [battery]
palm_bumper:
key.tags: [bumper]
anchor:
ref: matrix_index_bottom
shift: [0, -17]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
thumb_bumper:
key.tags: [bumper, rect_bumper]
anchor:
ref: encoder
shift: [0, -1.6 dy]
center_bumper:
key.tags: [bumper, rect_bumper]
anchor:
ref: encoder
shift: [0, 1.3 dy]
rectangle_top_bumper:
key.tags: [rect_bumper]
anchor:
ref: matrix_pinky_top
shift: [-2.3 hdx, 1.4 hdy]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
rectangle_bottom_bumper:
key.tags: [rect_bumper]
anchor:
ref: matrix_pinky_bottom
shift: [-0.25 hdx, -3 hdy]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
pinky_home_screw:
key.tags: [screw]
anchor:
ref: matrix_pinky_home
shift: [-hdx / 2, hdy + 1.6]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
pinky_low_screw:
key.tags: [screw]
anchor:
ref: matrix_pinky_bottom
shift: [hdy + 2, -hdy + 2]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
pinky_high_screw:
key.tags: [screw]
anchor:
ref: matrix_ring_top
shift: [-hdx - 1.5, 0]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
middle_top_screw:
key.tags: [top_screw]
anchor:
ref: matrix_middle_top
shift: [4, hdy + 4]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
thumb_screw:
key.tags: [screw]
anchor:
ref: thumbs_inner_spot
shift: [-hdx - 2, -hdy + 3]
mirror:
ref: matrix_inner_home
distance: mirrored_distance
center_screw:
key.tags: [top_screw]
anchor:
ref: encoder
shift: [0, 2 dy]
center_bottom_screw:
key.tags: [screw, rect_screw]
anchor:
ref: encoder
shift: [0, -1.25 dy]
pad_xiao_pos:
key.tags: [pad_circle, xiao_pos_pad]
anchor:
ref: mcu
shift: [-4, -15]
pad_reset:
key.tags: [pad_circle, reset_pad]
anchor:
ref: mcu
shift: [4, -15]
jst:
key.tags: [jst]
anchor:
ref: mirror_matrix_index_top
shift: [-0.75 hdx, dy]
rotate: 315
outlines:
_top_bridge:
- what: rectangle
where:
aggregate.parts: [matrix_middle_top, mirror_matrix_middle_top]
shift: [0, -7]
size: [101.6, 44.25]
_keys_surround:
- what: rectangle
where: [opt_switch, switch, encoder]
bound: true
size: [dx + 4, dy + 4]
corner: 2
fillet: 2
outline_shapes_builder:
- _top_bridge
- ^_keys_surround
_basic_outline_shape:
- _top_bridge
- _keys_surround
board_outline:
- what: outline
name: _basic_outline_shape
fillet: 2
_board_outline_padding:
- what: outline
name: board_outline
expand: 0.25
_rectangle_outline:
- what: rectangle
where:
aggregate.parts: [matrix_index_home, mirror_matrix_index_home]
size: [230, 97.4]
corner: 5
rectangle_case_outline:
- board_outline
- what: outline
name: _rectangle_outline
fillet: 10
_rectangle_snap1:
- what: outline
name: _rectangle_outline
expand: -1
- what: outline
name: board_outline
fillet: 10
_rectangle_snap2:
- what: outline
name: _rectangle_outline
expand: -1.05
- what: outline
name: board_outline
fillet: 10
_rectangle_snap3:
- what: outline
name: _rectangle_outline
expand: -1.1
- what: outline
name: board_outline
fillet: 10
_rectangle_snap4:
- what: outline
name: _rectangle_outline
expand: -1.15
- what: outline
name: board_outline
fillet: 10
_rectangle_snap5:
- what: outline
name: _rectangle_outline
expand: -1.2
- what: outline
name: board_outline
fillet: 10
_rectangle_snap6:
- what: outline
name: _rectangle_outline
expand: -1.25
- what: outline
name: board_outline
fillet: 10
_rectangle_snap7:
- what: outline
name: _rectangle_outline
expand: -1.3
- what: outline
name: board_outline
fillet: 10
_rectangle_snap8:
- what: outline
name: _rectangle_outline
expand: -1.35
- what: outline
name: board_outline
fillet: 10
_rectangle_clip1:
- rectangle_case_outline
- -_board_outline_padding
- -_rectangle_snap1
_rectangle_clip2:
- rectangle_case_outline
- -_board_outline_padding
- -_rectangle_snap2
_rectangle_clip3:
- rectangle_case_outline
- -_board_outline_padding
- -_rectangle_snap3
_rectangle_clip4:
- rectangle_case_outline
- -_board_outline_padding
- -_rectangle_snap4
_rectangle_clip5:
- rectangle_case_outline
- -_board_outline_padding
- -_rectangle_snap5
_rectangle_case_fill:
- rectangle_case_outline
- -_board_outline_padding
_xiao_visualizer:
- what: rectangle
where: mcu
size: [17.8, 21]
corner: 2
- what: rectangle
where: mcu
size: [8, 2]
adjust.shift: [0, 11.5]
_xiao_usb_cutout:
- what: rectangle
where: mcu
size: [9.5, 8.5]
adjust.shift: [0, 8.25]
_xiao_light_guide:
# in theory this should be 1.75mm diameter
# but for FDM prints, I find I need more room
- what: circle
where: mcu
radius: 1.05
adjust.shift: [6, 7.5]
_xiao_cutout:
- what: rectangle
where: mcu
size: [14, 21]
corner: 1
- _xiao_usb_cutout
_xiao_bottom_cutout:
- what: rectangle
where: mcu
size: [14, 25]
adjust.shift: [0, -4]
_xiao_cutout_wall:
- what: rectangle
where: mcu
size: [19, 21.5]
corner: 1
# Make some room for the solder
_xiao_cutout_solder:
- what: rectangle
where: mcu
size: [19, 18]
corner: 1
_xiao_chip:
- what: rectangle
where: mcu
size: [13, 12]
adjust.shift: [0, -2]
_power_pcb_holes:
- what: circle
where: power
radius: 0.45
adjust.shift: [-1.5, 0]
- what: circle
where: power
radius: 0.45
adjust.shift: [1.5, 0]
_power_visualizer:
- what: rectangle
where: power
size: [8, 3.9]
- what: rectangle
where: power
size: 1.3
adjust.shift: [1.5, 2.6]
- -_power_pcb_holes
_power_cutout:
- what: rectangle
where: power
size: [9, 4.7]
adjust.shift: [0, -0.2]
_reset_outline:
- what: polygon
points:
- ref: reset
shift: [2.6, 1.5]
- ref: reset
shift: [1.5, 2.6]
- ref: reset
shift: [-1.5, 2.6]
- ref: reset
shift: [-2.6, 1.5]
- ref: reset
shift: [-2.6, -1.5]
- ref: reset
shift: [-1.5, -2.6]
- ref: reset
shift: [1.5, -2.6]
- ref: reset
shift: [2.6, -1.5]
- what: rectangle
size: [6.4, 0.5]
where: reset
adjust.shift: [0, -1.85]
- what: rectangle
where: reset
size: [6.4, 0.5]
adjust.shift: [0, 1.85]
_reset_button:
- what: circle
where: reset
radius: 1
_reset_button_cutout_smallest:
- what: circle
where: reset
radius: 1.3
_reset_button_cutout_small:
- what: circle
where: reset
radius: 1.6
_reset_button_cutout_medium:
- what: circle
where: reset
radius: 1.9
_reset_button_cutout_large:
- what: circle
where: reset
radius: 2.1
_reset_visualizer:
- _reset_outline
- ^_reset_button
_reset_cutout:
- what: rectangle
where: reset
size: [9, 6]
corner: 1
_reset_post:
- what: circle
where: reset
radius: 1.1
_battery_cutout:
- what: rectangle
where: battery
size: [28, 33]
corner: 1
_jst_cutout:
- what: rectangle
where: jst
size: 8
adjust.shift: [0, -2]
corner: 1
- what: rectangle
where: jst
size: [12, 16]
adjust.shift: [0, -12]
corner: 3
- what: rectangle
where: jst
size: [6, 30]
adjust.shift: [0, -13]
corner: 2
_jst_pcb_holes:
- what: circle
where: jst
radius: 0.4
adjust.shift: [1, 0]
- what: circle
where: jst
radius: 0.4
adjust.shift: [-1, 0]
_jst_tht_cutout:
- what: outline
name: _jst_pcb_holes
expand: 1
_encoder_knob_1:
- what: circle
where: encoder
radius: knob_diameter / 2 - 1
_encoder_knob_2:
- what: circle
where: encoder
radius: knob_diameter / 2 - 0.8
_encoder_knob_3:
- what: circle
where: encoder
radius: knob_diameter / 2 - 0.6
_encoder_knob_4:
- what: circle
where: encoder
radius: knob_diameter / 2 - 0.4
_encoder_knob_5:
- what: circle
where: encoder
radius: knob_diameter / 2 - 0.2
_encoder_knob:
- what: circle
where: encoder
radius: knob_diameter / 2
_encoder_knob_skirt:
- what: circle
where: encoder
radius: 10.5
_encoder_stem:
- what: circle
where: encoder
radius: 3
- what: rectangle
where: encoder
size: 3.1
adjust.shift: [0, 3.1]
operation: subtract
_encoder_stem_opening_1:
- what: outline
name: _encoder_stem
expand: 0.1
_encoder_stem_opening_2:
- what: outline
name: _encoder_stem
expand: 0.2
_encoder_screw_shaft:
- what: circle
where: encoder
radius: 3.6
_keycap:
- what: rectangle
size: 18
corner: 1
_keycaps:
- what: outline
name: _keycap
where: [opt_switch, switch]
top_down_view:
- board_outline
- _xiao_visualizer
- _power_visualizer
- _reset_visualizer
- -_keycaps
- -_encoder_knob
- -_xiao_light_guide
_encoder_plate_cutout:
- what: rectangle
where: encoder
size: [12.4, 13.2]
- what: rectangle
where: encoder
size: [6.1, 1.2]
adjust.shift: [0, -7.2]
_encoder_plate_cutout_expanded:
- what: outline
name: _encoder_plate_cutout
expand: 1
_diode:
- what: rectangle
size: [2.7, 1.65]
- what: rectangle
size: [3.9, 0.6]
_diodes:
- what: outline
name: _diode
where: [opt_switch, switch]
adjust:
shift: [5, -4]
resist: true
- what: outline
name: _diode
where: encoder
adjust.shift: [0, 14]
_diodes_cutout:
- what: rectangle
where: [opt_switch, switch]
size: [5.2, 2.2]
adjust:
shift: [5, -4]
resist: true
- what: rectangle
where: encoder
size: [5.2, 2.2]
adjust.shift: [0, 14]
_return_diodes:
- what: outline
name: _diode
where: return
adjust.shift: [0, -0.4 dy]
- what: outline
name: _diode
where: return
adjust.shift: [0, -0.55 dy]
_return_diodes_cutout:
- what: rectangle
where: return
size: 5.2
adjust.shift: [0, -0.475 dy]
_switch_cutout:
- what: rectangle
size: 14
corner: 1
_switch_clip:
- what: rectangle
size: [15, 14]
corner: 1
_switches_plate_cutout:
- what: outline
name: _switch_cutout
where: switch
- _encoder_plate_cutout
_optional_left_switch_cutout:
- what: outline
name: _switch_cutout
where: [[opt_switch, /^thumb/]]
_optional_right_switch_cutout:
- what: outline
name: _switch_cutout
where: [[opt_switch, /^mirror/]]
_switches_clip_cutout:
- what: outline
name: _switch_clip
where: switch
_optional_left_clip_cutout:
- what: outline
name: _switch_clip
where: [[opt_switch, /^thumb/]]
_optional_right_clip_cutout:
- what: outline
name: _switch_clip
where: [[opt_switch, /^mirror/]]
_switches_swap_tool:
- what: rectangle
where: switch
size: [3.5, 18.7]
corner: 1
_optional_left_swap_tool:
- what: rectangle
where: [[opt_switch, /^thumb/]]
size: [3.5, 18.7]
corner: 1
_optional_right_swap_tool:
- what: rectangle
where: [[opt_switch, /^mirror/]]
size: [3.5, 18.7]
corner: 1
_switch_holes:
# these are created in the pcb software ...
# but we need to create them manually for our mock pcb
# ... also the radius has been rounded up for fdm printing ...
- what: circle # center post
radius: 2.5
- what: circle # v1 left stabililzer
radius: 0.9
adjust.shift: [-5.5, 0]
- what: circle # v1 right stabilizer
radius: 0.9
adjust.shift: [5.5, 0]
- what: circle # v2 stabilizer
radius: 0.8
adjust.shift: [-5, -5.15]
_switch_holes_placed:
- what: outline
name: _switch_holes
where: [opt_switch, switch]
adjust.resist: true
_socket_post_holes:
# center
- what: circle
radius: 1.6
adjust.shift: [0, -5.95]
# left (or rather, right on the opposite side of the board)
- what: circle
radius: 1.6
adjust.shift: [-5, -3.75]
_socket_pcb_holes:
- what: outline
name: _socket_post_holes
where: [opt_switch, switch]
adjust:
rotate: 180
resist: true
# make a fairly accurate socket model
_socket_outline:
- what: rectangle
adjust.shift: [0, -5.95]
size: [4.75, 4.65]
bevel: 1
- what: rectangle
adjust.shift: [-4.85, -3.8]
size: [4.85, 4.65]
fillet: 1
- what: rectangle
size: 2.6
adjust.shift: [-2.4, -4.8]
- what: rectangle
adjust.shift: [-1.4, -2.5]
size: 2.3
- what: circle
radius: 2.3
adjust.shift: [-0.4, -1.35]
operation: subtract
- what: rectangle
size: 2
adjust.shift: [-2.375, -6.125]
- what: circle
radius: 1
adjust.shift: [-3.375, -7.125]
operation: subtract
- what: rectangle
size: [3.6, 1.7]
adjust.shift: [2.375, -5.95]
- what: rectangle
size: [3.6, 1.7]
adjust.shift: [-7.325, -3.8]
- what: rectangle
size: [2, 0.6]
adjust.shift: [-6.5, -1.775]
_socket_outlines:
- what: outline
name: _socket_outline
where: [opt_switch, switch]
adjust:
rotate: 180
resist: true
# enlarge it a bit for wiggle room
_socket_expanded:
- what: outline
name: _socket_outline
expand: 0.75
# then drop it under every key
_socket_cutout:
- what: outline
name: _socket_expanded
where: [opt_switch, switch]
adjust:
rotate: 180
resist: true
_socket_visualizer:
- _switch_holes_placed
- _socket_outlines
_encoder_pcb_holes:
# This is just an approximation of the encoder mounting holes
- what: circle
where: encoder
radius: 1.15
adjust.shift: [-5.6, 0]
- what: circle
where: encoder
radius: 1.15
adjust.shift: [5.6, 0]
- what: circle
where: encoder
radius: 0.8
adjust.shift: [-2.5, -7.5]
- what: circle
where: encoder
radius: 0.8
adjust.shift: [0, -7.5]
- what: circle
where: encoder
radius: 0.8
adjust.shift: [2.5, -7.5]
_encoder_bottom_cutout:
- what: circle
where: encoder
radius: 1.5
adjust.shift: [-5.6, 0]
- what: circle
where: encoder
radius: 1.5
adjust.shift: [5.6, 0]
- what: rectangle
where: encoder
size: [9, 2]
adjust.shift: [0, -7.2]
- what: circle
where: encoder
radius: 1
adjust.shift: [2.5, 7]
- what: circle
where: encoder
radius: 1
adjust.shift: [-2.5, 7]
_pad_cutout:
- what: circle
where: pad_circle
radius: 1.5
_screw_shaft:
- what: circle
where: [screw, top_screw]
radius: 1.2
_countersink1:
- what: outline
name: _screw_shaft
expand: 1
_countersink2:
- what: outline
name: _screw_shaft
expand: 0.8
_countersink3:
- what: outline
name: _screw_shaft
expand: 0.6
_countersink4:
- what: outline
name: _screw_shaft
expand: 0.4
_countersink5:
- what: outline
name: _screw_shaft
expand: 0.2
_rect_screw_shaft:
- what: circle
where: [rect_screw, top_screw]
radius: 1.2
_rect_countersink1:
- what: outline
name: _rect_screw_shaft
expand: 1
_rect_countersink2:
- what: outline
name: _rect_screw_shaft
expand: 0.8
_rect_countersink3:
- what: outline
name: _rect_screw_shaft
expand: 0.6
_rect_countersink4:
- what: outline
name: _rect_screw_shaft
expand: 0.4
_rect_countersink5:
- what: outline
name: _rect_screw_shaft
expand: 0.2
pcb_outline:
- board_outline
- -_xiao_cutout
# - -_battery_cutout
_hex_nut_angle:
- what: rectangle
size: [2.45, 4.25]
_hex_nut:
- _hex_nut_angle
- what: outline
name: _hex_nut_angle
adjust.rotate: 60
- what: outline
name: _hex_nut_angle
adjust.rotate: -60
_hex_nuts:
- what: outline
name: _hex_nut
where: screw
_hex_nuts_wired:
- _hex_nuts
- what: outline
name: _hex_nut
where: top_screw
_rect_hex_nuts:
- what: outline
name: _hex_nut
where: rect_screw
_top_heat_set:
- what: circle
radius: 1.45
where: top_screw
_top_heat_set_passage:
- what: circle
radius: 1.2
where: top_screw
_bumper:
- what: circle
radius: 3.1
_low_bumper:
- what: outline
name: _bumper
where: low_bumper
adjust.shift: [-7, -7]
_mid_bumper:
- what: outline
name: _bumper
where: mid_bumper
adjust.shift: [11, 15]
_high_bumper:
- what: outline
name: _bumper
where: high_bumper
adjust.shift: [-7, 11]
_bumpers:
- what: outline
name: _bumper
where: bumper
_all_bumpers:
- _low_bumper
- _mid_bumper
- _high_bumper
- _bumpers
_rect_bumpers:
- _mid_bumper
- what: outline
name: _bumper
where: rect_bumper
top_plate:
- board_outline
- -_switches_plate_cutout
- -_switches_swap_tool
- -_xiao_light_guide
- ^_switches_clip_cutout
- ^_encoder_plate_cutout_expanded
- ^_battery_cutout
- ^_jst_cutout
- ^_xiao_usb_cutout
- ^_xiao_chip
- ^_hex_nuts
rectangle_visualizer:
- rectangle_case_outline
- ^_rectangle_snap1
- ^_rectangle_snap8
- ^_rect_bumpers
- ^_rect_countersink1
component_visualization:
- board_outline
- ^_xiao_cutout
- ^_switches_plate_cutout
- ^_switches_clip_cutout
- ^_socket_visualizer
- ^_socket_pcb_holes
- ^_keycaps
- ^_encoder_knob
- ^_encoder_pcb_holes
- ^_encoder_bottom_cutout
- ^_xiao_visualizer
- ^_xiao_light_guide
- ^_power_visualizer
- ^_power_cutout
- ^_reset_visualizer
- ^_reset_cutout
- ^_jst_pcb_holes
- ^_battery_cutout
- ^_jst_cutout
- ^_pad_cutout
- ^_hex_nuts
- ^_screw_shaft
- ^_all_bumpers
- ^_diodes
- ^_diodes_cutout
- ^_return_diodes
- ^_return_diodes_cutout
_attic_outline_poly:
- what: polygon
points:
- ref: matrix_middle_top
shift: [-dx, dy]
- ref: matrix_middle_top
shift: [-dx, hdy]
- ref: matrix_middle_top
shift: [hdx, hdy]
- ref: matrix_middle_top
shift: [hdx, 0]
- ref: matrix_index_top
shift: [hdx, hdy]
- ref: matrix_inner_home
shift: [-hdx, hdy]
- ref: matrix_inner_home
shift: [hdx, hdy]
- ref: mirror_matrix_inner_home
shift: [hdx, hdy]
- ref: mirror_matrix_inner_home
shift: [-hdx, hdy]
- ref: mirror_matrix_index_top
shift: [hdx, hdy]
- ref: mirror_matrix_middle_top
shift: [hdx, 0]
- ref: mirror_matrix_middle_top
shift: [hdx, hdy]
- ref: mirror_matrix_middle_top
shift: [-dx, hdy]
- ref: mirror_matrix_middle_top
shift: [-dx, dy]
_attic_outline:
- board_outline
- what: outline
name: _attic_outline_poly
operation: intersect
fillet: 2
attic_outline:
- what: outline
name: _attic_outline
fillet: 1
_attic_outline_1:
- what: outline
name: attic_outline
expand: -0.1
_attic_outline_2:
- what: outline
name: attic_outline
expand: -0.2
_attic_outline_3:
- what: outline
name: attic_outline
expand: -0.3
_attic_outline_4:
- what: outline
name: attic_outline
expand: -0.4
_attic_outline_5:
- what: outline
name: attic_outline
expand: -0.5
_attic_outline_6:
- what: outline
name: attic_outline
expand: -0.6
_attic_outline_7:
- what: outline
name: attic_outline
expand: -0.7
_attic_outline_8:
- what: outline
name: attic_outline
expand: -0.8
_attic_outline_9:
- what: outline
name: attic_outline
expand: -0.9
_dovetail_outline_poly:
- what: polygon
points:
- ref: matrix_middle_top
shift: [hdx, 2dy]
- ref: matrix_middle_top
shift: [hdx, 0]
- ref: matrix_index_top
shift: [hdx, hdy]
- ref: matrix_inner_home
shift: [-hdx, hdy]
- ref: matrix_inner_home
shift: [hdx, hdy]
- ref: matrix_inner_bottom
shift: [hdx, -hdy]
- ref: thumbs_outer_spot
shift: [-hdx, hdy]
- ref: thumbs_outer_spot
shift: [hdx, hdy]
- ref: thumbs_outer_spot
shift: [hdx, -2dy]
- ref: mirror_thumbs_outer_spot
shift: [hdx, -2dy]
- ref: mirror_thumbs_outer_spot
shift: [hdx, hdy]
- ref: mirror_thumbs_outer_spot
shift: [-hdx, hdy]
- ref: mirror_matrix_inner_bottom
shift: [hdx, -hdy]
- ref: mirror_matrix_inner_home
shift: [hdx, hdy]
- ref: mirror_matrix_inner_home
shift: [-hdx, hdy]
- ref: mirror_matrix_index_top
shift: [hdx, hdy]
- ref: mirror_matrix_middle_top
shift: [hdx, 0]
- ref: mirror_matrix_middle_top
shift: [hdx, 2dy]
dovetail:
- board_outline
- ~_dovetail_outline_poly
_dovetail_1:
- what: outline
name: dovetail
expand: 0.2
- ~board_outline
_dovetail_2:
- what: outline
name: dovetail
expand: 0.4
- ~board_outline
_dovetail_3:
- what: outline
name: dovetail
expand: 0.6
- ~board_outline
_dovetail_4:
- what: outline
name: dovetail
expand: 0.8
- ~board_outline
_left_half:
- what: rectangle
where: matrix_middle_bottom
size: [115, 150]
adjust.rotate: 20
_right_half:
- what: rectangle
where: mirror_matrix_middle_bottom
size: [115, 150]
adjust.rotate: 20
dovetail_visualizer:
- board_outline
- -dovetail
- ^_left_half
- ^_right_half
cases:
_countersunk_screw:
- what: outline
name: _countersink1
extrude: 0.2
- what: outline
name: _countersink2
extrude: 0.2
shift: [0, 0, 0.2]
- what: outline
name: _countersink3
extrude: 0.2
shift: [0, 0, 0.4]
- what: outline
name: _countersink4
extrude: 0.2
shift: [0, 0, 0.6]
- what: outline
name: _countersink5
extrude: 0.2
shift: [0, 0, 0.8]
- what: outline
name: _screw_shaft
extrude: bottom_case_height - 1
shift: [0, 0, 1]
_rect_countersunk_screw:
- what: outline
name: _rect_countersink1
extrude: 0.2
- what: outline
name: _rect_countersink2
extrude: 0.2
shift: [0, 0, 0.2]
- what: outline
name: _rect_countersink3
extrude: 0.2
shift: [0, 0, 0.4]
- what: outline
name: _rect_countersink4
extrude: 0.2
shift: [0, 0, 0.6]
- what: outline
name: _rect_countersink5
extrude: 0.2
shift: [0, 0, 0.8]
- what: outline
name: _rect_screw_shaft
extrude: bottom_case_height - 1
shift: [0, 0, 1]
_reset_bottom_cutout:
- what: outline
name: _reset_cutout
extrude: 1.2
shift: [0, 0, bottom_case_height - 1.2]
- what: outline
name: _reset_button_cutout_large
extrude: 0.2
- what: outline
name: _reset_button_cutout_medium
extrude: 0.2
shift: [0, 0, 0.2]
- what: outline
name: _reset_button_cutout_small
extrude: 0.2
shift: [0, 0, 0.4]
- what: outline
name: _reset_button_cutout_smallest
extrude: bottom_case_height - 1.8
shift: [0, 0, 0.6]
_encoder_knob_bevel:
- what: outline
name: _encoder_knob_1
extrude: 0.2
- what: outline
name: _encoder_knob_2
extrude: 0.2
shift: [0, 0, 0.2]
- what: outline
name: _encoder_knob_3
extrude: 0.2
shift: [0, 0, 0.4]
- what: outline
name: _encoder_knob_4
extrude: 0.2
shift: [0, 0, 0.6]
- what: outline
name: _encoder_knob_5
extrude: 0.2
shift: [0, 0, 0.8]
ec11_encoder_knob:
- _encoder_knob_bevel
- what: outline
name: _encoder_knob
extrude: ec11_knob_height - 2
shift: [0, 0, 1]
- what: outline
name: _encoder_knob_5
extrude: 0.2
shift: [0, 0, ec11_knob_height - 1]
- what: outline
name: _encoder_knob_4
extrude: 0.2
shift: [0, 0, ec11_knob_height - 0.8]
- what: outline
name: _encoder_knob_3
extrude: 0.2
shift: [0, 0, ec11_knob_height - 0.6]
- what: outline
name: _encoder_knob_2
extrude: 0.2
shift: [0, 0, ec11_knob_height - 0.4]
- what: outline
name: _encoder_knob_1
extrude: 0.2
shift: [0, 0, ec11_knob_height - 0.2]
- what: outline
name: _encoder_stem
extrude: ec11_shaft_height - 0.4
shift: [0, 0, 1]
operation: subtract
- what: outline
name: _encoder_stem_opening_1
extrude: 0.2
shift: [0, 0, ec11_shaft_height + 0.6]
operation: subtract
- what: outline
name: _encoder_stem_opening_2
extrude: 0.2
shift: [0, 0, ec11_shaft_height + 0.8]
operation: subtract
- what: outline
name: _encoder_screw_shaft
extrude: ec11_knob_height - ec11_shaft_height - 2
shift: [0, 0, ec11_shaft_height + 1]
operation: subtract
- what: outline
name: _encoder_knob_skirt
extrude: knob_skirt
shift: [0, 0, ec11_knob_height - knob_skirt]
operation: subtract
ec12_encoder_knob:
- _encoder_knob_bevel
- what: outline
name: _encoder_knob
extrude: ec12_knob_height - 2
shift: [0, 0, 1]
- what: outline
name: _encoder_knob_5
extrude: 0.2
shift: [0, 0, ec12_knob_height - 1]
- what: outline
name: _encoder_knob_4
extrude: 0.2
shift: [0, 0, ec12_knob_height - 0.8]
- what: outline
name: _encoder_knob_3
extrude: 0.2
shift: [0, 0, ec12_knob_height - 0.6]
- what: outline
name: _encoder_knob_2
extrude: 0.2
shift: [0, 0, ec12_knob_height - 0.4]
- what: outline
name: _encoder_knob_1
extrude: 0.2
shift: [0, 0, ec12_knob_height - 0.2]
- what: outline
name: _encoder_stem
extrude: ec12_shaft_height - 0.4 + knob_skirt
shift: [0, 0, ec12_knob_height - ec12_shaft_height - knob_skirt]
operation: subtract
- what: outline
name: _encoder_stem_opening_1
extrude: 0.2
shift: [0, 0, ec12_knob_height - 0.4 - knob_skirt]
operation: subtract
- what: outline
name: _encoder_stem_opening_2
extrude: 0.2
shift: [0, 0, ec12_knob_height - 0.2 - knob_skirt]
operation: subtract
- what: outline
name: _encoder_knob_skirt
extrude: knob_skirt
shift: [0, 0, ec12_knob_height - knob_skirt]
operation: subtract
_bottom_cutouts:
- what: outline
name: _socket_cutout
extrude: 2
shift: [0, 0, bottom_case_height - 2]
- what: outline
name: _switch_holes_placed
extrude: 1.8
shift: [0, 0, bottom_case_height - 1.8]
- what: outline
name: _encoder_bottom_cutout
extrude: 2
shift: [0, 0, bottom_case_height - 2]
- what: outline
name: _diodes_cutout
extrude: 1.4
shift: [0, 0, bottom_case_height - 1.4]
- what: outline
name: _return_diodes_cutout
extrude: 1.2
shift: [0, 0, bottom_case_height - 1.2]
- what: outline
name: _xiao_bottom_cutout
extrude: 2.5
shift: [0, 0, bottom_case_height - 2.5]
- what: outline
name: _xiao_cutout_wall
extrude: 1.2
shift: [0, 0, bottom_case_height - 1.2]
- what: outline
name: _xiao_cutout_solder
extrude: 0.5
shift: [0, 0, 1.5]
- _reset_bottom_cutout
_wireless_bottom_cutouts:
- what: outline
name: _power_cutout
extrude: 1.6
shift: [0, 0, bottom_case_height - 1.6]
- what: outline
name: _jst_tht_cutout
extrude: 1.6
shift: [0, 0, bottom_case_height - 1.6]
rectangle_bottom_case:
- what: outline
name: _rectangle_snap8
extrude: 0.1
- what: outline
name: _rectangle_snap7
extrude: 0.1
shift: [0, 0, 0.1]
- what: outline
name: _rectangle_snap6
extrude: 0.1
shift: [0, 0, 0.2]
- what: outline
name: _rectangle_snap5
extrude: 0.1
shift: [0, 0, 0.3]
- what: outline
name: _rectangle_snap4
extrude: bottom_case_height - 0.4
shift: [0, 0, 0.4]
- what: outline
name: _rect_bumpers
extrude: 1
operation: subtract
- -_bottom_cutouts
- -_rect_countersunk_screw
- -_wireless_bottom_cutouts
wired_bottom_case:
- what: outline
name: board_outline
extrude: bottom_case_height
- what: outline
name: _all_bumpers
extrude: 1
operation: subtract
- -_bottom_cutouts
- -_countersunk_screw
bottom_case:
- wired_bottom_case
- -_wireless_bottom_cutouts
_top_cutouts:
- what: outline
name: _xiao_light_guide
extrude: top_case_height
- what: outline
name: _switches_plate_cutout
extrude: top_case_height
- what: outline
name: _encoder_plate_cutout_expanded
extrude: 1.2
- what: outline
name: _switches_clip_cutout
extrude: top_case_height - 1.3
- what: outline
name: _switches_swap_tool
extrude: 1
shift: [0, 0, top_case_height - 1]
- what: outline
name: _xiao_usb_cutout
extrude: 1.7
- what: outline
name: _xiao_chip
extrude: 0.2
- what: outline
name: _pad_cutout
extrude: 1
_wired_top_cutouts:
- _top_cutouts
- what: outline
name: _hex_nuts_wired
extrude: 1.8
_wireless_top_cutouts:
- _top_cutouts
- what: outline
name: _hex_nuts
extrude: 1.8
- what: outline
name: _top_heat_set_passage
extrude: top_case_height
- what: outline
name: _jst_cutout
extrude: top_case_height
_rect_top_cutouts:
- _top_cutouts
- what: outline
name: _rect_hex_nuts
extrude: 1.8
- what: outline
name: _top_heat_set_passage
extrude: top_case_height
- what: outline
name: _jst_cutout
extrude: top_case_height
_top_left_cutouts:
- what: outline
name: _optional_left_switch_cutout
extrude: top_case_height
- what: outline
name: _optional_left_clip_cutout
extrude: top_case_height - 1.3
- what: outline
name: _optional_left_swap_tool
extrude: 1
shift: [0, 0, top_case_height - 1]
_top_right_cutouts:
- what: outline
name: _optional_right_switch_cutout
extrude: top_case_height
- what: outline
name: _optional_right_clip_cutout
extrude: top_case_height - 1.3
- what: outline
name: _optional_right_swap_tool
extrude: 1
shift: [0, 0, top_case_height - 1]
top_case_one_up_chuck:
- what: outline
name: board_outline
extrude: top_case_height
- -_wireless_top_cutouts
top_case_chucker_by_the_dozen:
- top_case_one_up_chuck
- -_top_right_cutouts
top_case_twentyone_chuck_street:
- top_case_one_up_chuck
- -_top_left_cutouts
top_case:
- top_case_one_up_chuck
- -_top_left_cutouts
- -_top_right_cutouts
wired_top_case_one_up_chuck:
- what: outline
name: board_outline
extrude: top_case_height
- -_wired_top_cutouts
wired_top_case_chucker_by_the_dozen:
- wired_top_case_one_up_chuck
- -_top_right_cutouts
wired_top_case_twentyone_chuck_street:
- wired_top_case_one_up_chuck
- -_top_left_cutouts
wired_top_case:
- wired_top_case_one_up_chuck
- -_top_left_cutouts
- -_top_right_cutouts
_rectangle_top_case_one_up_chuck:
- what: outline
name: rectangle_case_outline
extrude: top_case_height
- -_rect_top_cutouts
_rectangle_top_case_chucker_by_the_dozen:
- _rectangle_top_case_one_up_chuck
- -_top_right_cutouts
_rectangle_top_case_twentyone_chuck_street:
- _rectangle_top_case_one_up_chuck
- -_top_left_cutouts
_rectangle_top_case:
- _rectangle_top_case_one_up_chuck
- -_top_left_cutouts
- -_top_right_cutouts
_rectangle_top_common:
- what: outline
name: _rectangle_case_fill
extrude: 1.6
shift: [0, 0, bottom_case_height]
- what: outline
name: _rectangle_clip1
extrude: bottom_case_height - 0.4
shift: [0, 0, 0.4]
- what: outline
name: _rectangle_clip2
extrude: 0.1
shift: [0, 0, 0.3]
- what: outline
name: _rectangle_clip3
extrude: 0.1
shift: [0, 0, 0.2]
- what: outline
name: _rectangle_clip4
extrude: 0.1
shift: [0, 0, 0.1]
- what: outline
name: _rectangle_clip5
extrude: 0.1
rectangle_top_case_one_up_chuck:
- _rectangle_top_common
- what: case
name: _rectangle_top_case_one_up_chuck
shift: [0, 0, 1.6 + bottom_case_height]
rectangle_top_case_chucker_by_the_dozen:
- _rectangle_top_common
- what: case
name: _rectangle_top_case_chucker_by_the_dozen
shift: [0, 0, 1.6 + bottom_case_height]
rectangle_top_case_twentyone_chuck_street:
- _rectangle_top_common
- what: case
name: _rectangle_top_case_twentyone_chuck_street
shift: [0, 0, 1.6 + bottom_case_height]
rectangle_top_case:
- _rectangle_top_common
- what: case
name: _rectangle_top_case
shift: [0, 0, 1.6 + bottom_case_height]
_top_dovetail:
- what: outline
name: dovetail
extrude: top_case_height / 5
shift: [0, 0, 4 * top_case_height / 5]
- what: outline
name: _dovetail_1
extrude: top_case_height / 5
shift: [0, 0, 3 * top_case_height / 5]
- what: outline
name: _dovetail_2
extrude: top_case_height / 5
shift: [0, 0, 2 * top_case_height / 5]
- what: outline
name: _dovetail_3
extrude: top_case_height / 5
shift: [0, 0, top_case_height / 5]
- what: outline
name: _dovetail_4
extrude: top_case_height / 5
top_dovetail:
- _top_dovetail
- -_wireless_top_cutouts
_top_dovetail_sides_1:
- top_case_one_up_chuck
- -_top_dovetail
_top_dovetail_sides_2:
- top_case
- -_top_dovetail
_dovetail_right:
- what: outline
name: _right_half
extrude: top_case_height
_dovetail_left:
- what: outline
name: _left_half
extrude: top_case_height
top_dovetail_left_1:
- _top_dovetail_sides_1
- -_dovetail_right
top_dovetail_right_1:
- _top_dovetail_sides_1
- -_dovetail_left
top_dovetail_left_2:
- _top_dovetail_sides_2
- -_dovetail_right
top_dovetail_right_2:
- _top_dovetail_sides_2
- -_dovetail_left
wired_top_dovetail:
- _top_dovetail
- -_wired_top_cutouts
_wired_top_dovetail_sides_1:
- wired_top_case_one_up_chuck
- -_top_dovetail
_wired_top_dovetail_sides_2:
- wired_top_case
- -_top_dovetail
wired_top_dovetail_left_1:
- _wired_top_dovetail_sides_1
- -_dovetail_right
wired_top_dovetail_right_1:
- _wired_top_dovetail_sides_1
- -_dovetail_left
wired_top_dovetail_left_2:
- _wired_top_dovetail_sides_2
- -_dovetail_right
wired_top_dovetail_right_2:
- _wired_top_dovetail_sides_2
- -_dovetail_left
attic:
- what: outline
name: attic_outline
extrude: attic_case_height / 10
- what: outline
name: _attic_outline_1
extrude: 2 * attic_case_height / 10
- what: outline
name: _attic_outline_2
extrude: 3 * attic_case_height / 10
- what: outline
name: _attic_outline_3
extrude: 4 * attic_case_height / 10
- what: outline
name: _attic_outline_4
extrude: 5 * attic_case_height / 10
- what: outline
name: _attic_outline_5
extrude: 6 * attic_case_height / 10
- what: outline
name: _attic_outline_6
extrude: 7 * attic_case_height / 10
- what: outline
name: _attic_outline_7
extrude: 8 * attic_case_height / 10
- what: outline
name: _attic_outline_8
extrude: 9 * attic_case_height / 10
- what: outline
name: _attic_outline_9
extrude: 10 * attic_case_height / 10
- what: outline
name: _xiao_light_guide
extrude: attic_case_height
operation: subtract
- what: outline
name: _battery_cutout
extrude: attic_case_height - 1
operation: subtract
- what: outline
name: _jst_cutout
extrude: 3
operation: subtract
- what: outline
name: _top_heat_set
extrude: 3
operation: subtract
- what: outline
name: _top_heat_set_passage
extrude: 1.5
shift: [0, 0, 3]
operation: subtract
# Remove the underscore to print out the mock PCB if you want to check for fit
_mock_pcb:
- what: outline
name: pcb_outline
extrude: 1.6
- what: outline
name: _socket_pcb_holes
extrude: 1.6
operation: subtract
- what: outline
name: _screw_shaft
extrude: 1.6
operation: subtract
- what: outline
name: _power_pcb_holes
extrude: 1.6
operation: subtract
- what: outline
name: _encoder_pcb_holes
extrude: 1.6
operation: subtract
- what: outline
name: _jst_pcb_holes
extrude: 1.6
operation: subtract
pcbs:
chuck:
template: kicad8
outlines:
main:
outline: pcb_outline
params:
name: *keyboard_name
paper: A4
footprints:
hotswap_sockets:
what: choc-v1-v2
where: [opt_switch, switch]
params:
from: "{{cpsrc}}"
to: "{{colrow}}"
include_keycap: true
include_corner_marks: true
charlieplex_map:
what: text
where: [opt_switch, switch]
adjust:
shift: [-3/5 hdx, hdy / 3]
resist: true
params:
side: B
text: "{{cpsrc}}-{{cpdst}}"
diodes:
what: sod123
where: [opt_switch, switch]
adjust:
shift: [5, -4]
resist: true
params:
side: B
designator: SW
from: "{{colrow}}"
to: "D_{{cpdst}}"
smd: true
via: pad
labels: true
encoder_charlieplex:
what: text
where: encoder
adjust.shift: [0, hdy]
params:
side: B
text: "{{cpsrc}}-{{cpdst}}"
encoder_diode:
what: sod123
where: encoder
adjust:
shift: [0, 14]
params:
side: B
designator: SW
from: encdiode
to: "D_{{cpdst}}"
smd: true
via: pad
labels: true
return_diodes:
what: sod123
where: return
adjust.shift: [0, -0.4 dy]
params:
side: B
designator: D
from: "D_{{cpdst}}"
to: "{{cpdst}}"
smd: true
via: pad
labels: true
interrupt_diodes:
what: sod123
where: return
adjust.shift: [0, -0.55 dy]
params:
side: B
designator: I
from: "D_{{cpdst}}"
to: CP_INT
smd: true
via: pad
labels: true
encoder:
what: encoder
where: encoder
params:
include_momentary_switch_pads: true
include_plate_hole_marking: true
include_silkscreen: true
S1: "{{cpsrc}}"
S2: encdiode
xiao_mcu:
what: xiao
where: mcu
params:
side: B
orientation: down
VUSB: none
VCC: none
P0: CP0
P1: CP1
P2: CP2
P3: CP3
P4: CP4
P5: CP5
P6: CP6
P7: CP_INT
P8: ENC_B
P9: ENC_A
P10: none
xiao_note:
what: text
where: mcu
adjust.shift: [0, -12]
params:
side: B
text: XIAO BLE FACE DOWN
xiao_bat_pos:
what: pad
where: xiao_pos_pad
params:
text_side: B
net: BAT+
text: BAT+
shape: circle
align: right
width: 2
height: 2
xiao_reset:
what: pad
where: reset_pad
params:
text_side: B
net: RST
text: RST
shape: circle
align: right
width: 2
height: 2
battery_jst:
what: jst-ph-2
where: jst
params:
BAT_P: RAW
BAT_N: GND
reset_button:
# what: evqpuc
what: reset-smd-top
where: reset
params:
side: B
from: GND
to: RST
reset_note:
what: text
where: reset
adjust:
shift: [-9, 0]
params:
side: B
text: RESET
justify: left
power_slider:
what: trislider
where: power
params:
side: B
posts: true
vias: true
COM: RAW
A: BAT+
power_label:
what: text
where: power
adjust.shift: [-4.5, 0.6]
params:
side: B
text: POWER
justify: right
power_on:
what: text
where: power
adjust.shift: [-4.5, -0.8]
params:
side: B
text: ON
justify: right
power_off:
what: text
where: power
adjust.shift: [4.5, 0.6]
params:
side: B
text: OFF
justify: left
mounting_holes:
what: mountinghole
where: screw
board_logo:
what: mushroom
where: encoder
adjust.shift: [1, 6]
params:
side: F
keyboard_name:
what: text
where: matrix_pinky_bottom
adjust.shift: [dx - 4.5, -0.85 hdy]
params:
side: F
text: *keyboard_name
layer: Cu
size: 3
thickness: 0.5
justify: left
board_version:
what: text
where.aggregate.parts: [thumbs_outer_spot, mirror_thumbs_outer_spot]
adjust.shift: [0, -hdy]
params:
text: *version
side: F
board_repo:
what: text
where.aggregate.parts: [thumbs_outer_spot, mirror_thumbs_outer_spot]
adjust.shift: [0, -0.65 dy]
params:
side: F
text: *repo
license_note:
what: text
where: mirror_matrix_pinky_bottom
adjust.shift: [dx, -hdy]
params:
side: F
text: *license
justify: right
license_logo:
what: oshw
where: mirror_matrix_pinky_bottom
adjust.shift: [1.65 dx, -0.1 dy]
params:
side: F
order_number:
what: text
where: encoder
adjust.shift: [0, hdy - 2.75]
params:
side: F
text: *order_text