{"id":27139503,"url":"https://github.com/ddrcode/qmk_userspace","last_synced_at":"2025-10-08T13:05:57.361Z","repository":{"id":149680834,"uuid":"554450105","full_name":"ddrcode/qmk_userspace","owner":"ddrcode","description":"QMK Userspace","archived":false,"fork":false,"pushed_at":"2025-08-09T23:31:03.000Z","size":121,"stargazers_count":1,"open_issues_count":9,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-08-10T01:12:48.894Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ddrcode.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2022-10-19T20:47:45.000Z","updated_at":"2024-12-18T19:29:37.000Z","dependencies_parsed_at":null,"dependency_job_id":"11c11149-c2e8-44bc-aa04-9054fdb18d75","html_url":"https://github.com/ddrcode/qmk_userspace","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ddrcode/qmk_userspace","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrcode%2Fqmk_userspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrcode%2Fqmk_userspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrcode%2Fqmk_userspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrcode%2Fqmk_userspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ddrcode","download_url":"https://codeload.github.com/ddrcode/qmk_userspace/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ddrcode%2Fqmk_userspace/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274532109,"owners_count":25303255,"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","status":"online","status_checked_at":"2025-09-10T02:00:12.551Z","response_time":83,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":"2025-04-08T04:58:24.931Z","updated_at":"2025-10-08T13:05:52.322Z","avatar_url":"https://github.com/ddrcode.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DDRCode QMK Userspace\n\n## Keyboards\n\nThis userspace supports the following keyboards:\n\n- [Keychron Q3](https://www.keychron.com/products/keychron-q3-qmk-custom-mechanical-keyboard) (Standard ANSI, tenkeyless)\n- [Keychron Q10](https://www.keychron.com/products/keychron-q10-alice-layout-qmk-custom-mechanical-keyboard) (Alice layout)\n- [Hasu USB-USB Converterr](https://geekhack.org/index.php?topic=109514.0)\n- [Idobao ID75](https://idobao.net/products/idobao-id75-crystal-hot-swap-keyboard-kit) (5x15 ortholinear, 75 keys / 65%)\n\n### Planned\n- [Ergodox EZ](https://ergodox-ez.com/) (ortholinear, split layout with thumb cluster)\n- [Planck EZ](https://www.zsa.io/planck/) (4x12 ortholinear)\n\n## Main features / ideas\nI frequently switch between Colemak (typing) and Qwerty (regular computer use, non text-editing apps).\nI prefer to tap rather than hold keys so I intesively use one-shot modifiers and one-shot layers (with custom modifications).\nIf keyboard layout allows I prefer to use thumbs for modifiers and layer switching, so my layouts are \noptimized for that. Besides that my configuration is rather conservative: I don't use tap dance, chords, magic keys, etc).\n\n- Support for Qwerty and Colemak layouts (with some [unified keyboard shortcuts](https://github.com/ddrcode/qmk_userspace/blob/main/features/key_overrides.c))\n- Unified symbols layer across all boards\n- Unified navigation layer across all boards\n- RGB matrix with no animations - used for [layers/modifiers indications](https://github.com/ddrcode/qmk_userspace/blob/main/features/rgb_matrix.c) only\n- One-shot modifiers, One-shot layers (with [customizations](https://github.com/ddrcode/qmk_userspace/blob/main/features/osm.c))\n\n### Future/planned work\n- Navigation layer to mimick VIM (see [#1])\n- WPM stats (per layout) \n- Host OS recognition\n\n## Installation and usage\n1. clone official QMK repository: `git clone https://github.com/qmk/qmk_firmware.git` \n1. Configure QMK according to [official documentation](https://docs.qmk.fm/#/newbs_getting_started) or (my preferred way, Nix users only) by runnix `nix-shell` from `qmk_firmware` folder.\n1. `cd qmk_firmware/users`\n1. clone this repo to `ddrcode` folder: `git clone git@github.com:ddrcode/qmk_userspace.git ddrcode`\n1. You are ready to go, i.e.: `qmk compile users/ddrcode/idobao-id75.json`\n\n### Steps for **Keychron** keyboards:\n\nOfficial QMK repo at this stage doesn't contain configs for  Keychron Q3 and Q10 keyboards. You must use [Keychron's fork](https://github.com/Keychron/qmk_firmware) instead ([keychron-q3](https://github.com/Keychron/qmk_firmware/tree/keychron-q3) and [playground](https://github.com/Keychron/qmk_firmware/tree/playground) branches respestively).\nI'd still recommend to setup QMK with the official repo and then use Keychron fork for sources only. Step-by-step instruction:\n1. Follow steps 1 and 2 from the installation guide above\n1. Clone Keychron's fork to a folder parallel to `qmk_firmware`, i.e.: `git clone https://github.com/Keychron/qmk_firmware.git qmk_keychron`\n1. `cd qmk_keychron/users`\n1. clone this repo to `ddrcode` folder: `git clone git@github.com:ddrcode/qmk_userspace.git ddrcode`\n1. Switch Keychron fork to a keyboard-specific branch, i.e. for Q3: `git checkout keychron-q3`\n1. Compile: `qmk compile users/ddrcode/keychron_q3.json`\n\n## Credits \n- [Filterpaper Notes on Userspaces](https://filterpaper.github.io/qmk/userspace.html)\n- [Userspace (QMK documentation)](https://docs.qmk.fm/#/feature_userspace)\n- [tominabox1 userspace](https://github.com/qmk/qmk_firmware/tree/master/users/tominabox1)\n- [drashna userspace](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)\n\n## Interesting reads and links\n### Firmware size optimization\nTwo of my boards: Hasu USB_USB converter and Idobao ID75 are equipped with 32kB RAM only. By following\n[these steps](https://docs.qmk.fm/#/squeezing_avr?id=squeezing-the-most-out-of-avr)\nI was able to reduce the file size by up to 7kB. \n\n## Copyrights\n\nCopyright 2022 @ddrcode\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n\n\n\n\n[#1]: https://github.com/ddrcode/qmk_userspace/issues/1","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddrcode%2Fqmk_userspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fddrcode%2Fqmk_userspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fddrcode%2Fqmk_userspace/lists"}