{"id":17224589,"url":"https://github.com/tartanllama/etkf","last_synced_at":"2025-08-22T02:07:46.708Z","repository":{"id":146923775,"uuid":"86560018","full_name":"TartanLlama/etkf","owner":"TartanLlama","description":"Embarrassingly templated keyboard framework","archived":false,"fork":false,"pushed_at":"2018-03-10T14:29:41.000Z","size":43,"stargazers_count":34,"open_issues_count":0,"forks_count":4,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-08-15T19:16:20.554Z","etag":null,"topics":["firmware","keyboard","template-metaprogramming"],"latest_commit_sha":null,"homepage":null,"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/TartanLlama.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}},"created_at":"2017-03-29T08:56:03.000Z","updated_at":"2024-09-17T12:49:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"800fcfff-1c08-4b39-b97d-4e52e72fbb23","html_url":"https://github.com/TartanLlama/etkf","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TartanLlama/etkf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TartanLlama%2Fetkf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TartanLlama%2Fetkf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TartanLlama%2Fetkf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TartanLlama%2Fetkf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TartanLlama","download_url":"https://codeload.github.com/TartanLlama/etkf/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TartanLlama%2Fetkf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271574431,"owners_count":24783319,"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-08-22T02:00:08.480Z","response_time":65,"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":["firmware","keyboard","template-metaprogramming"],"created_at":"2024-10-15T04:11:28.453Z","updated_at":"2025-08-22T02:07:46.679Z","avatar_url":"https://github.com/TartanLlama.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# etkf\nEmbarrassingly templated keyboard framework\n\nThe aim of this is to have very terse descriptions of keyboards and give good compile-time diagnostics when mistaeks are made. Here's the entire configuration file for a simple 40% Dvorak keyboard:\n\n```\n\n#include \"keys.hpp\"\n#include \"type.hpp\"\n\nusing namespace etkf;\nusing namespace etkf::pins;\n\nstruct test_keyboard {\n    using rows = pin_set\u003cb4, b6, f1, f0\u003e;\n    using columns = pin_set\u003cf6, f7, c7, c6, d3, d2, d1, d0, b7, b3, b2, b1, b0\u003e;\n\n    static auto layouts();\n\n    using key_positions = typelist\u003c\n        row\u003c1,1,1,1,1,1,1,1,1,1,1,1,1\u003e,\n        row\u003c1,1,1,1,1,1,1,1,1,1,1,0,1\u003e,\n        row\u003c1,0,1,1,1,1,1,1,1,1,1,1,1\u003e,\n        row\u003c1,1,1,0,1,1,0,1,1,1,1,1,1\u003e\n    \u003e;\n\n};\n\nusing keyboard_to_run = test_keyboard;\n\nauto test_keyboard::layouts() {\n    using namespace etkf::keys;\n\n    return typelist\u003c\n        typelist\u003c\n            row\u003ctab, quot,comm,dot, p,   y,   f,   g,   c,   r,   l,   bspc, null\u003e,\n            row\u003clctl,a,   o,   e,   u,   i,   d,   h,   t,   n,   s,   ent\u003e,\n            row\u003clsft,scln,q,   j,   k,   x,   b,   m,   w,   v,   z,   del\u003e,\n            row\u003ccaps,lgui,esc,lalt, spc,      null,null,left,down,up,  righ\u003e\n            \u003e\n    \u003e{};\n}\n```\n\nCurrently it has only been tested on Linux, but I guess it could work elsewhere if you can get the toolchain set up.\n\n### How to build:\n\n    mkdir build\n    cd build\n    cmake -DKEYBOARD_TO_BUILD=\u003ckeyboard name\u003e ..\n    make\n\n### How to add a new keyboard:\n\nThere is a Python script which will do all of the legwork for you:\n\n    tools/add_new_keyboard.py \u003ckeyboard name\u003e\n\n### Current state:\n\n- A configuration like the above will allow you to type things!\n- Supports Teensy 2 (ATMEGA32U4)\n- 6 key rollover\n- Modifier keys\n- Basic layer support\n- Change default layer (e.g. QWERTY to Dvorak)\n\n### To do:\n\n- Debouncing\n- NKRO\n- Better compile-time diagnostics\n- Debugging support\n- Rewrite of the USB code\n- Support more chips\n- Port some keyboards\n- Profile-driven optimisations\n\n### Dependencies:\n\n- C++17 AVR compiler (you can build one by following [these instructions](https://www.microchip.com/webdoc/AVRLibcReferenceManual/install_tools.html))\n- CMake\n- Hardware to run it on\n- Nachos (optional)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftartanllama%2Fetkf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftartanllama%2Fetkf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftartanllama%2Fetkf/lists"}