Dactyl Lynx

The Dactyl Lynx is a parameterized, split-hand, concave, columnar, ergonomic keyboard - a fork/rewrite of the original Dactyl keyboard.

Similar projects worth following
This is my fork/rewrite of the original Dactyl.

The Dactyl Lynx is a parameterized, split-hand, concave, columnar, ergonomic keyboard.

This is my fork/rewrite of the original Dactyl. I've changed a few things:

  • Rewrote the generating code in Python instead of Clojure, using SolidPython2 and spkb.
  • Rotated thumb clusters to be close to vertical (inspired by the Dactyl-ManuForm and the way my thumbs move; see also Viktor Eikman's DMOTE and Concertina keyboards)
  • Steeper tenting angle
  • 1U or 2U keycaps - easy to source
  • A new adjustable skeletal design (which will probably change once I solidify the physical placement of the wells, but I'll likely keep around as an option)
  • Modified keyswitch holes to support Kailh hot-swap sockets

Future plans:

  • Adding a TrackPoint module between the DHB, and M keys (HJN, and M on QWERTY) - I already implemented this in the Clojure version, but I haven't yet ported it to the Python version
  • Adding mouse buttons and a scroll ball from an Apple Mighty Mouse next to the right-hand thumb cluster
  • Adding a thumbstick to the left side?
  • Multiple user-defined key maps that can be uploaded via USB and easily toggled between on the fly (I want this to replace my Orbweaver) - Use QMK's Raw HID support or maybe Vial. (though Vial has a limitation of 4 layers)
  • Adding support for ALPS or Choc switches instead of MX-style switches, along with appropriate hot-swap sockets (this will be mostly implemented in spkb first)
See the corresponding firmware in my whitelynx/dactyl_lynx QMK branch for instructions on building and flashing the firmware.

  • 2 × WeAct BlackPill STM32F411
  • 2 × 4-pin mini-DIN jacks
  • 70 × Keyswitches I'm using Kailh speed pink switches
  • 70 × Individual key PCBs with diodes and LEDs Optional
  • 70 × Kailh hot-swap keyswitch sockets

View all 6 components

  • Fully functioning prototype!

    David H. Bronke02/27/2024 at 10:36 0 comments

    I finally got the whole keyboard wired up, and have been using it for the past few days. I've made a few modifications along the way to make things work better.

    I finally got my favorite switches: Kailh Speed Pink! Unfortunately, despite them being by far the best feeling switch for me, I'm noticing some things I'd rather change.

    First, like most clicky switches, they're really loud, and they're bothering my wife somewhat. I like clicky switches entirely for the feel, and I'd actually prefer if they were much quieter.

    Second, I've noticed that these switches don't actually actuate at the right point - they actuate a bit before the actual click is felt, which leads to a weirdly disconnected feeling while typing.

    Does anyone know where I can find a switch that feels like a Kailh Speed Pink, but is quieter and more consistent between actuation and click? (No, a tactile is not an option - they feel nothing like a good click bar, and if I wanted that, I'd just put my wife's old Gateron Browns back in)

    The next thing I needed to do was add more stability. The tripod configuration I had before was fine, as long as I didn't need to press 5 or 6, and as long as I didn't use the thumb clusters. I found that just putting a long bolt in the second part of the connector between the thumb cluster and finger well lent enough stability to make it possible for me to type comfortably. While doing this, I also adjusted the tilt and tenting of the finger wells to make it easier for me to hit the keys.

    Finally, I swapped the 2U keys on the thumb clusters so they're easier to hit, and to reduce accidentally hitting the 1U keys in the same row. (since the 1U key next to Backspace switches the default layer between Dvorak and QWERTY)

    Read more »

  • Right side finished!

    David H. Bronke02/04/2024 at 20:06 0 comments

    I finally finished wiring up as much of the right side as I could, though I'm still waiting for some more hotswap sockets and a new set of switches to come in. That's not a problem yet, though, because my keymap doesn't even have a use for those key positions yet.

    After a quick test, all of the keys on the right side work! This is a huge relief, but it made me realize something: I need to get a wire stripper. I've been doing all of this by stripping wires with a side cutter, and it's very slow going if I don't want to ruin the strands in my wire.

    I also took this opportunity to take a photo to help with wiring, though with this many things across the board, I'm not sure it's as helpful as I hoped. At least it does a good job of showing my work so far.

    I think I'm going to take a small break to make a mount for the S-Video (4-pin mini DIN) socket that I'll be using for the cable between the two sides.

    Hopefully my new wire stripper, hotswap sockets, and switches will come in soon so I can get the other half of the board finished.

  • First full test fit!

    David H. Bronke01/29/2024 at 13:04 0 comments

    I'm suddenly much closer to having a finished keyboard!

    I finally got my thumb cluster printed and went through an iteration of adjustment to make sure that it's comfortable to type on. That ended up with a structure solid enough that I didn't even need the two feet I originally planned to add to the thumb cluster.

    I'm pretty happy with this overall, and it gives me a point to attach accessories...

    I then figured it was time to print the other side, but I've always wanted to add a small LCD to the left side to display the current layer's layout as a quick reference. (otherwise I always forget half of my more interesting mappings)

    Read more »

  • Porting to Python

    David H. Bronke01/04/2024 at 23:36 0 comments

    So, I realized I actually left out a big chunk of the work I've done recently when I wrote my last project log... I started porting the 3D model generation to Python instead of Clojure!

    Since I still wasn't happy with the position of the thumb cluster and the tenting angle on my last print, I decided to make everything adjustable using M6 bolts. I also decided to go for a "skeletal" design, leaving off any skirt or bottom case until I am happier with the core physical design. I actually rather like the effect.

    I used my new spkb library for this, which I forked from my old Parameterized key tester frame project. It includes a bunch of utilities to make building an ergonomic keyboard easier, like switch sockets (with or without hot-swap socket compatibility), board mount helpers, and keycap approximations. (mostly used to visualize the finished board)

    It's been refreshing moving this to Python - I'm much more comfortable with the language than with Clojure, and it's easier for me to build abstractions and organize the code in a way that makes it simpler for me to hack on. Hopefully this will help me solidify the design faster, and make it easier for others to come up with their own designs!

    At some point I want to order some tool dip so I can coat the heads of the bolts, and keep it from sliding around as much while typing. Right now that's lower priority than getting the thumb cluster built and connected, and making the other half of the board.

  • RP2040, and success finally!

    David H. Bronke01/03/2024 at 23:31 0 comments

    After my issues getting the two sides of the keyboard to communicate using the STMS32, I shelved this project for several months. Recently, though, I finally got a couple of RP2040 boards, so I figured I'd try to port the keyboard to that and try it again.

    After a couple of days struggling with the QMK build process, and even going back to single-duplex serial communication, I was finally able to get it building by restructuring the keyboard's directory so the RP2040 version was at the top level. I tried it out, and... it works!

    I decided to try switching back to full-duplex serial communication, but I couldn't get it to work. I had noticed while testing half-duplex that sometimes it would lose the other half until I jiggled the cable some, but doing that did nothing to help with full-duplex communication. However, since the cable seemed flaky, I decided to swap the part of the cable on the serial data pins out for another one, and... it worked!

    So, the only thing stopping full-duplex serial from working may have been the cable all along. Maybe I didn't even need to switch from STM32 to RP2040 in order to get it working after all... 🤷

    Next, I'm going to try to get a thumb cluster printed and attached, once I figure out how to actually physically attach it to the finger well. It's going to involve attaching to the tallest bolt leg, but I'm still not sure what the mechanism will look like, since I still need it to be adjustable. Once I figure that out and get it printed and wired up, I can duplicate that all for the other side, and then I have a full keyboard that I can adjust until I'm happy with the ergonomics!

    Sadly, I don't know how soon that's going to happen. The need to search for both a new job and a new place to live are putting too many demands on my time and mental energy at the moment, so it's likely this won't happen for several months. But here's hoping that by summer I'll be able to finally daily drive my own keyboard!

  • Nope.

    David H. Bronke09/06/2023 at 11:36 0 comments

    My hopes of having a completed left-hand side for this project log have not been realized. It has been an interesting couple of weeks since then.

    First, when I started printing that grey left-hand side in the last log, I forgot to un-mirror the switch backplates, so the hotswap sockets wouldn't fit.

    Also, the microcontroller mount went... a bit wrong.

    Read more »

  • Back at it!

    David H. Bronke08/21/2023 at 16:30 0 comments

    I'm finally revisiting this project!

    I've been without an ergonomic keyboard for about 2 years now, and it's driving me nuts. I've pretty much only been typing on laptop keyboards since then. I've at least had a vertical mouse, but it's not even the kind I like. (I prefer the Zalman FG-1000 FPSgun, but that's out of production and rather expensive these days)

    Since I've finally decided to build my keyboard, I ordered the bare minimum parts in order to make it happen: diodes, hot-swap keyswitch sockets, and a couple of STM32F411 Blackpill boards. I'm reusing extra keycaps and keyswitches from my wife's keyboard, so I'll be using Gateron browns instead of my preferred Kailh speed pink switches, but at least I don't have to spend the 15€ on keyswitches. (yes, money has been that tight since our move to Europe)

    I started out by printing a simple numpad and wiring it up as a proof of concept for using the Blackpill as the brain of the keyboard.

    Starting on wiring the key matrix for my testing numpad:

    You may notice that there's nothing supporting the hotswap sockets; they're just sitting attached to the bottom of the keyswitches. This will still allow me to hot-swap keyswitches, but it does mean I have to be careful about pulling the old switches out and make sure that I'm not yanking on the hotswap sockets and their wiring.

    The finished numpad! The print quality is kinda terrible, but I think I've fixed that since printing this. If not, the first print of my new keyboard will be kinda terrible too, but as long as the hotswap sockets and keyswitches fit, I'll be happy.

    ...and the completed wiring.

    A keyswitch socket with holes for the hotswap sockets. I'll be using this exact design for the switch positions in the final keyboard.

    I also made some final tweaks to the actual Dactyl Lynx case design so that the new Blackpill boards will fit correctly with their ISP headers, and finally got started printing the new case for the left side. I decided to print the left side first because it's simpler, and because then I can use it in place of the Razer Orbweaver that I left in the US.

    The work-in-progress case for the left side of the keyboard:

    This print was estimating 1 day 7 hours and change, though it's taking longer because the filament runout sensor that came with my printer is terrible and keeps triggering, even though there's plenty of filament left on the spool. Not sure why it thinks that the filament is running out, but that's a problem for future me.

    Hopefully my next project log will include a completed left-hand side!

View all 7 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates