{"id":27619331,"url":"https://github.com/haunt98/qmk_keymaps","last_synced_at":"2025-10-13T00:43:13.039Z","repository":{"id":182638683,"uuid":"668837311","full_name":"haunt98/qmk_keymaps","owner":"haunt98","description":"Custom QMK keymaps","archived":false,"fork":false,"pushed_at":"2025-04-12T14:08:12.000Z","size":434,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-23T05:02:29.244Z","etag":null,"topics":["ascii","dz60","go","hhkb","kbdfans","keymap-drawer","qmk"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/haunt98.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null}},"created_at":"2023-07-20T17:47:46.000Z","updated_at":"2025-04-12T14:08:15.000Z","dependencies_parsed_at":"2023-12-15T18:24:55.291Z","dependency_job_id":"227966ba-0a53-4c55-b1a3-0c4b6e4da83a","html_url":"https://github.com/haunt98/qmk_keymaps","commit_stats":null,"previous_names":["haunt98/qmk_keymap_dz60rgb_wkl","haunt98/qmk_dz60rgb_wkl","haunt98/qmk_keymaps"],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haunt98%2Fqmk_keymaps","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haunt98%2Fqmk_keymaps/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haunt98%2Fqmk_keymaps/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/haunt98%2Fqmk_keymaps/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/haunt98","download_url":"https://codeload.github.com/haunt98/qmk_keymaps/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250372938,"owners_count":21419722,"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":["ascii","dz60","go","hhkb","kbdfans","keymap-drawer","qmk"],"created_at":"2025-04-23T05:02:07.876Z","updated_at":"2025-10-13T00:43:13.032Z","avatar_url":"https://github.com/haunt98.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QMK custom keymaps\n\n[![Go](https://github.com/haunt98/qmk_keymaps/actions/workflows/go.yml/badge.svg)](https://github.com/haunt98/qmk_keymaps/actions/workflows/go.yml)\n[![QMK](https://github.com/haunt98/qmk_keymaps/actions/workflows/qmk.yml/badge.svg)](https://github.com/haunt98/qmk_keymaps/actions/workflows/qmk.yml)\n[![gitleaks](https://github.com/haunt98/qmk_keymaps/actions/workflows/gitleaks.yml/badge.svg)](https://github.com/haunt98/qmk_keymaps/actions/workflows/gitleaks.yml)\n[![Latest Version](https://img.shields.io/github/v/tag/haunt98/qmk_keymaps)](https://github.com/haunt98/qmk_keymaps/tags)\n\n## [hineybush/h60](https://github.com/qmk/qmk_firmware/tree/master/keyboards/hineybush/h60)\n\nLinks:\n\n- [hineybush h60](https://hineybush.com/collections/pcbs/products/h60)\n\n![keymap_drawer](hineybush_h60/keymap_drawer/keymap.svg)\n\n## [sofle/rev1](https://github.com/qmk/qmk_firmware/tree/master/keyboards/sofle/rev1)\n\nSee [Official](https://josefadamcik.github.io/SofleKeyboard/)\n\n\u003e 128x32 OLED display module\n\n\u003e Don’t connect or disconnect the TRRS cable when the keyboard is powered. It may short out. Always disconnect the USB\n\u003e cable first.\n\nBought from [ergomech.store](https://ergomech.store/shop/sofle-v2-sandwich-style-12)\n\n\u003e Powered by the powerful RP2040 MCU, allowing users to use more macros and features from QMK.\n\u003e\n\u003e USB-C port - However, cannot be used with usb-c to usb-c cable\n\n[Flash notes](https://josefadamcik.github.io/SofleKeyboard/build_guide.html):\n\n\u003e - Make sure halves are not connected together with TRRS cable.\n\u003e - Connect one half to USB, flash the firmware. Use the reset button to reset the keyboard when you are asked to in\n\u003e   console.\n\u003e - Connect the second half and flash it in the same way as the previous one.\n\u003e - Disconnect the USB cable. Connect both halves together with TRRS cable.\n\u003e - Connect USB cable to the left side.\n\n![keymap_drawer](sofle_rev1/keymap_drawer/keymap.svg)\n\n## [crkbd/rev1](https://github.com/qmk/qmk_firmware/tree/master/keyboards/crkbd/rev1)\n\nSee [Official](https://github.com/foostan/crkbd)\n\nHold `Q` or `P` to enter bootloader not top corner-most position.\n\n![keymap_drawer](crkbd_rev1/keymap_drawer/keymap.svg)\n\n## [coban/pad9a](https://github.com/qmk/qmk_firmware/tree/master/keyboards/coban/pad9a)\n\nBought from [COBAN STATIONERY](https://cobanstationery.com/product/coban-pad-9a-banh-chung/)\n\n![keymap_drawer](coban_pad9a/keymap_drawer/keymap.svg)\n\n## Flash\n\nEnter bootloader in many ways:\n\n- Unplug cable, then hold key in top corner-most position (row 0, col 0) and plug cable. Can be different position for\n  different keyboard.\n- Keycode: Press `QK_BOOT`.\n- Physical reset button: Read manual of your PCB, likely will have a reset button\n\nIf use [QMK Toolbox](https://github.com/qmk/qmk_toolbox), locate firmware file after compile successfully or download\nfrom [QMK action workflow](https://github.com/haunt98/qmk_keymaps/actions/workflows/qmk.yml)\n\n## Maintain\n\nStep by step:\n\n- Make changes to keymaps: `*.c`, `*.h`, `*.mk`\n    - Format `keymap.c` with `column -t`\n- Apply changes to keymaps JSON: `just qmk`\n- Visualize keymap: `just draw`\n\n## Features\n\nBasic:\n\n- [Introduction](https://github.com/qmk/qmk_firmware/blob/master/docs/getting_started_introduction.md)\n- [Keymap FAQ](https://github.com/qmk/qmk_firmware/blob/master/docs/faq_keymap.md)\n- [Keymap Overview](https://github.com/qmk/qmk_firmware/blob/master/docs/keymap.md)\n- [Keycodes Overview](https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes.md)\n- [Modifier Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_advanced_keycodes.md)\n- [Quantum Keycodes](https://github.com/qmk/qmk_firmware/blob/master/docs/quantum_keycodes.md)\n- [Layers](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_layers.md)\n\nMore advance:\n\n- [Debugging FAQ](https://github.com/qmk/qmk_firmware/blob/master/docs/faq_debug.md)\n- [How to Customize Your Keyboard's Behavior](https://github.com/qmk/qmk_firmware/blob/master/docs/custom_quantum_functions.md)\n- [List of Useful Core Functions To Make Your Keyboard Better](https://github.com/qmk/qmk_firmware/blob/master/docs/ref_functions.md)\n- [Userspace: Sharing Code Between Keymaps](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_userspace.md)\n\nDo:\n\n- [Bootmagic](https://github.com/qmk/qmk_firmware/blob/master/docs/features/bootmagic.md): I use `QK_BOOT` with\n  `EE_CLR`.\n- [Contact bounce / contact chatter](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_debounce_type.md)\n    - [Measure and reduce keyboard input latency with QMK on the Kinesis Advantage (2021)](https://michael.stapelberg.ch/posts/2021-05-08-keyboard-input-latency-qmk-kinesis/)\n    - [QMK debounce masterclass](https://kbd.news/QMK-debounce-masterclass-1435.html)\n    - [Keyboard Matrix Scanning and Debouncing](https://summivox.wordpress.com/2016/06/03/keyboard-matrix-scanning-and-debouncing/)\n- [Grave Escape](https://github.com/qmk/qmk_firmware/blob/master/docs/features/grave_esc.md): Useful on layout \u003c= 60%,\n  because of missing `Fn` row.\n- [Mod-Tap](https://github.com/qmk/qmk_firmware/blob/master/docs/mod_tap.md): To replace `CAPSLOCK` with `CTRL` when\n  hold and `ESC` when tap.\n- [Tap-Hold Configuration Options](https://github.com/qmk/qmk_firmware/blob/master/docs/tap_hold.md)\n- [Tap Dance: A Single Key Can Do 3, 5, or 100 Different Things](https://github.com/qmk/qmk_firmware/blob/master/docs/features/tap_dance.md):\n  I use it for safely `QK_BOOT`.\n- [Space Cadet: The Future, Built In](https://github.com/qmk/qmk_firmware/blob/master/docs/features/space_cadet.md):\n  Quickly press `(`, `)`.\n    - [A Modern Space Cadet](https://stevelosh.com/blog/2012/10/a-modern-space-cadet/)\n- [Tri Layers](https://github.com/qmk/qmk_firmware/blob/master/docs/features/tri_layer.md)\n- [Encoders](https://github.com/qmk/qmk_firmware/blob/master/docs/features/encoders.md)\n    - [How can I use a rotary encoder?](https://docs.splitkb.com/hc/en-us/articles/360010513760-How-can-I-use-a-rotary-encoder)\n- [Mouse keys](https://github.com/qmk/qmk_firmware/blob/master/docs/features/mouse_keys.md)\n- [Combos](https://github.com/qmk/qmk_firmware/blob/master/docs/features/combo.md)\n- [Community Modules](https://github.com/qmk/qmk_firmware/blob/master/docs/features/community_modules.md)\n    - https://github.com/drashna/qmk_modules\n    - https://github.com/getreuer/qmk-modules\n    - https://github.com/tzarc/qmk_modules\n\nDon't:\n\n- [Magic Keycodes](https://github.com/qmk/qmk_firmware/blob/master/docs/keycodes_magic.md)\n- [Command](https://github.com/qmk/qmk_firmware/blob/master/docs/features/command.md)\n- [One Shot Keys](https://github.com/qmk/qmk_firmware/blob/master/docs/one_shot_keys.md)\n- [RGB Matrix Lighting](https://github.com/qmk/qmk_firmware/blob/master/docs/features/rgb_matrix.md)\n- [Auto Shift: Why Do We Need a Shift Key?](https://github.com/qmk/qmk_firmware/blob/master/docs/features/auto_shift.md):\n  Conflict with space cadet when using vim `:w` -\u003e `:)w`.\n- [Swap-Hands Action](https://github.com/qmk/qmk_firmware/blob/master/docs/features/swap_hands.md)\n- `qmk format-c`: I have custom `clang-format`.\n- [A guide to home row mods](https://precondition.github.io/home-row-mods): Hard to get it right, so ignore it for now.\n\nBuild/Optimize:\n\n- [Configuring QMK](https://github.com/qmk/qmk_firmware/blob/master/docs/config_options.md)\n- [Squeezing the most out of AVR](https://github.com/qmk/qmk_firmware/blob/master/docs/squeezing_avr.md)\n- [Reducing firmware size](https://get.vial.today/docs/firmware-size.html)\n- [Configuring QMK (VIA)](https://www.caniusevia.com/docs/configuring_qmk)\n\nMore:\n\n- [Programming On 34 Keys](https://oppi.li/posts/programming_on_34_keys/)\n- [Miryoku](https://github.com/manna-harbour/miryoku)\n- [Pascal Getreuer's QMK keymap](https://github.com/getreuer/qmk-keymap)\n    - [Designing a Symbol Layer](https://getreuer.info/posts/keyboards/symbol-layer/index.html)\n    - [QMK: SOCD Cleaner](https://getreuer.info/posts/keyboards/socd-cleaner/)\n- [filterpaper/qmk_userspace](https://github.com/filterpaper/qmk_userspace)\n- [The SpaceFN concept](https://kbd.news/The-SpaceFN-concept-2315.html)\n- [RP2040 Controller is now the default option](https://ergomech.store/blog/ergomech-blog-1/rp2040-controller-is-now-the-default-option-3):\n  Limit of ATmega32U4 aka Pro Micro:\n    - Limited storage\n    - Do not work well with USB-C to USB-C cable.\n- [I Bought the Stack Overflow Keyboard. I Instantly Became a 10x Developer and Ended Up Writing the Default Firmware for It](https://teknologiumum.com/posts/i-bought-the-stack-overflow-keyboard-i-instantly-became-a-10x-developer-and-ended-up-writing-the-default-firmware-for-it)\n- [Building a keyboard firmware](https://matt3o.com/building-a-keyboard-firmware/)\n- [Having fun with keyboard mappings under Linux](https://pulsar17.me/2023/09/keymapping)\n- [My personalised 55% split keyboard](https://leanrada.com/notes/my-personalised-keyboard/)\n    - [Bitwise keyboard input method](https://leanrada.com/notes/developing-bitwise-input-method/)\n- [Adding Apple’s Globe key to a QMK-powered keyboard](https://skip.house/blog/qmk-globe-key)\n- rust:\n    - [How to make your C codebase rusty: rewriting keyboard firmware keymap in Rust](https://about.houqp.me/posts/rusty-c/)\n    - [How to talk to your QMK-based keyboard using Rust](http://rantsideasstuff.com/posts/2021/01/26-how-to-talk-to-your-qmk-based-keyboard-using-rust/)\n    - [Oxidising my keyboard: how I wrote my QMK userland in Rust](https://nullp.tr/posts/oxidising-my-keyboard/)\n\n## qmkasciigen\n\nInstall:\n\n```sh\ngo install github.com/haunt98/qmk_keymaps/cmd/qmkasciigen@latest\n```\n\nUsage:\n\n```sh\n# Generate from QMK repo\n# Keymap must be JSON (exist keymap.json)\nqmkasciigen -qmk-keyboard ymdk/id75 -qmk-keymap via -out ascii.txt\n\n# Generate from local keymap.json\nqmkasciigen -qmk-keyboard dztech/dz60rgb_wkl/v2_1 -qmk-keymap-file dztech_dz60rgb_wkl/keymaps_json/haunt98/keymap.json -out ascii.txt\n```\n\nThanks:\n\n- [yskoht/keymapviz](https://github.com/yskoht/keymapviz)\n- [caksoylar/keymap-drawer](https://github.com/caksoylar/keymap-drawer)\n\n## [Karabiner-Elements](https://github.com/pqrs-org/Karabiner-Elements)\n\nCopycat QMK features with software.\n\n- [Modern Space Cadet (rev 3)](https://ke-complex-modifications.pqrs.org/json/space_cadet.json)\n\n## TODO\n\n- [x] How to flash\n- [x] Add stock firmware/docs\n- [x] Add qmk lint\n- [x] Visualize\n- [x] qmkasciigen\n    - [x] Use flag\n    - [x] Add docs\n    - [x] Get data directly from qmk\n    - [x] Split transform keycodes to raw binding/transform (same as keymap-drawer)\n    - [x] Support [Code page 437](https://en.wikipedia.org/wiki/Code_page_437)\n    - [x] Split draw func to multipls small func for easily maintenance\n    - [ ] Move scaleX, scaleY to config flag\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaunt98%2Fqmk_keymaps","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhaunt98%2Fqmk_keymaps","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhaunt98%2Fqmk_keymaps/lists"}