{"id":22820083,"url":"https://github.com/timjp87/dactyl-manuform","last_synced_at":"2025-03-30T23:16:13.788Z","repository":{"id":88044356,"uuid":"256765167","full_name":"timjp87/dactyl-manuform","owner":"timjp87","description":null,"archived":false,"fork":false,"pushed_at":"2020-04-20T18:24:24.000Z","size":77484,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"hotswap","last_synced_at":"2025-02-06T04:44:11.663Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timjp87.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-18T13:49:38.000Z","updated_at":"2022-11-05T21:50:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"988cdf99-9aac-4756-b5e2-ce88d0a672bc","html_url":"https://github.com/timjp87/dactyl-manuform","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timjp87%2Fdactyl-manuform","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timjp87%2Fdactyl-manuform/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timjp87%2Fdactyl-manuform/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timjp87%2Fdactyl-manuform/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timjp87","download_url":"https://codeload.github.com/timjp87/dactyl-manuform/tar.gz/refs/heads/hotswap","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246390858,"owners_count":20769478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-12T15:16:15.954Z","updated_at":"2025-03-30T23:16:13.764Z","avatar_url":"https://github.com/timjp87.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Dactyl-ManuForm Keyboard\nThis is a fork of the [Dactyl](https://github.com/adereth/dactyl-keyboard), a parameterized, split-hand, concave, columnar, ergonomic keyboard.\n\n![Imgur](http://i.imgur.com/LdjEhrR.jpg)\n\nThe main change is that the thumb cluster was adapted from the [ManuForm keyboard](https://github.com/jeffgran/ManuForm) ([geekhack](https://geekhack.org/index.php?topic=46015.0)). The walls were changed to just drop to the floor. The keyboard is paramaterized to allow adjusting the following: \n\n* Rows: 4 - 6 \n* Columns: 5 and up\n* Row curvature\n* Column curvature\n* Row tilt (tenting)\n* Column tilt\n* Column offsets\n* Height\n\nI built a 4x5 version (40% size) for myself. The default has a bit more tenting than the Dactyl. See the following model files for configurations that may be most common:\n\n* [40% size, (4x5)](https://github.com/tshort/dactyl-keyboard/blob/master/things/right-4x5.stl)\n* [60% size, (5x6)](https://github.com/tshort/dactyl-keyboard/blob/master/things/right-5x6.stl)\n\n\n## Assembly\n\n### Generating a Design\n\n**Setting up the Clojure environment**\n* [Install the Clojure runtime](https://clojure.org)\n* [Install the Leiningen project manager](http://leiningen.org/)\n* [Install OpenSCAD](http://www.openscad.org/)\n\n**Generating the design**\n* Run `lein repl`\n* Load the file `(load-file \"src/dactyl_keyboard/dactyl.clj\")`\n* This will regenerate the `things/*.scad` files\n* Use OpenSCAD to open a `.scad` file.\n* Make changes to design, repeat `load-file`, OpenSCAD will watch for changes and rerender.\n* When done, use OpenSCAD to export STL files\n\n**Tips**\n* [Some other ways to evaluate the clojure design file](http://stackoverflow.com/a/28213489)\n* [Example designing with clojure](http://adereth.github.io/blog/2014/04/09/3d-printing-with-clojure/)\n\n\n### Printing\nPregenerated STL files are available in the [things/](things/) directory. \nWhen a model is generated, it also generates a `.scad` model for a bottom plate. \nThis can be exported to a DXF file in OpenSCAD.\nThe [things/](things/) directory also has DXF files for the bottom plate.\nWhen laser cut, some of the inside cuts will need to be removed. \n\nThis model can be tricky to print. \nIt's wide, so I've had problems with PLA on a Makerbot with edges warping. \nThis can cause the printer to think its head is jammed. \nEven if it successfully prints, warping can cause problems. \nOn one print, the RJ-9 holder was squished, so I had to cut down my connector to fit.\n\nIf printed at Shapeways or other professional shops, I would not expect such problems. \n\n### Thingiverse\n\n[The 4x5 STL left/right pair](https://www.thingiverse.com/thing:2349390) from the [things/](things/) directory is in the thingiverse for public printing\n\n### Wiring\n\nHere are materials I used for wiring.\n\n* Two Arduino Pro Micros\n* [Heat-set inserts](https://www.mcmaster.com/#94180a331/=16yfrx1)\n* [M3 wafer-head screws, 5mm](http://www.metricscrews.us/index.php?main_page=product_info\u0026cPath=155_185\u0026products_id=455)\n* [Copper tape](https://www.amazon.com/gp/product/B009KB86BU)\n* [#32 magnet wire](https://www.amazon.com/gp/product/B00LV909HI)\n* [#30 wire](https://www.amazon.com/gp/product/B00GWFECWO)\n* [3-mm cast acrylic](http://www.mcmaster.com/#acrylic/=144mfom)\n* [Veroboard stripboard](https://www.amazon.com/gp/product/B008CPVMMU)\n* [1N4148 diodes](https://www.amazon.com/gp/product/B00LQPY0Y0)\n* [Female RJ-9 connectors](https://www.amazon.com/gp/product/B01HU7BVDU/)\n\nI wired one half using the traditional approach of using the legs of a diode to form the row connections. \n(I'm not great at soldering, so this was challenging for me.)\nFor this side, I used magnet wire to wire columns. That worked okay. \nThe magnet wire is small enough, it wants to move around, and it's hard to tell if you have a good connection.\n\n![Imgur](http://i.imgur.com/7kPvSgg.jpg)\n\nFor another half, I used stripboard for the row connections. \nThis allowed me to presolder all of the diodes. \nThen, I hot-glued this in place and finished the soldering of the other diode ends. \nI like this approach quite a lot. \nConnections for the diodes were much easier with one end fixed down. \nOn this half, I also used copper tape to connect columns. \nThis worked a bit better than the magnet wire for me. \nFor a future version, I may try just bare tinned copper wire for columns (something like #20). \nWith the stripboard, it's pretty easy keeping row and column connections separate.\n\n![Imgur](http://i.imgur.com/JOm5ElP.jpg)\n\nNote that a telephone handset cable has leads that are reversed, so take this into account when connecting these leads to the controller.\n\nThe 3D printed part is the main keyboard. \nYou can attach a bottom plate with screws. \nThe case has holes for heat-set inserts designed to hold 3- to 6-mm long M3 screws. \nThen, I used wafer-head screws to connect a bottom plate. \nIf wires aren't dangling, a bottom plate may not be needed. \nYou need something on the bottom to keep the keyboard from sliding around. \nWithout a plate, you could use a rubber pad, or you could dip the bottom of the keyboard in PlastiDip.\n\nFor more photos of the first complete wiring of v0.4, see [Imgur](http://imgur.com/a/v9eIO).\n\nThis is how the rows/columns wire to the keys and the ProMicro\n![Wire Diagram](https://docs.google.com/drawings/d/1s9aAg5bXBrhtb6Xw-sGOQQEndRNOqpBRyUyHkgpnSps/pub?w=1176\u0026h=621)\n\n\n#### Alternative row-driven wiring diagram for ProMicro:\n\nNOTE: you also make sure the firmware is set up correctly (ex: change row pins with col pins)\n\n![Left Wire Diagram](/resources/dactyl_manuform_left_wire_diagram.png)\n\n![Left Wire Diagram](/resources/dactyl_manuform_right_wire_diagram.png)\n\n\n### Firmware\n\nFirmware goes hand in hand with how you wire the circuit. \nI adapted the QMK firmware [here](https://github.com/tshort/qmk_firmware/tree/master/keyboards/dactyl-manuform). \nThis allows each side to work separately or together. \nThis site also shows connections for the Arduino Pro Micro controllers.\n\n## License\n\nCopyright © 2015-2017 Matthew Adereth and Tom Short\n\nThe source code for generating the models (everything excluding the [things/](things/) and [resources/](resources/) directories is distributed under the [GNU AFFERO GENERAL PUBLIC LICENSE Version 3](LICENSE).  The generated models and PCB designs are distributed under the [Creative Commons Attribution-NonCommercial-ShareAlike License Version 3.0](LICENSE-models).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimjp87%2Fdactyl-manuform","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimjp87%2Fdactyl-manuform","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimjp87%2Fdactyl-manuform/lists"}