{"id":22483948,"url":"https://github.com/OneDeadKey/arsenik","last_synced_at":"2025-08-02T17:31:30.586Z","repository":{"id":210988729,"uuid":"727194478","full_name":"OneDeadKey/arsenik","owner":"OneDeadKey","description":"A 33-key layout that works with all keyboards.","archived":false,"fork":false,"pushed_at":"2025-03-19T16:47:20.000Z","size":234,"stargazers_count":105,"open_issues_count":20,"forks_count":29,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-25T11:03:56.322Z","etag":null,"topics":["kanata","keyboards","qmk"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OneDeadKey.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,"zenodo":null}},"created_at":"2023-12-04T11:30:10.000Z","updated_at":"2025-05-20T06:52:06.000Z","dependencies_parsed_at":"2023-12-26T16:09:02.798Z","dependency_job_id":"6ca4ec28-64cd-4f6e-80d5-2e63ec7c44bd","html_url":"https://github.com/OneDeadKey/arsenik","commit_stats":{"total_commits":38,"total_committers":14,"mean_commits":"2.7142857142857144","dds":0.736842105263158,"last_synced_commit":"1dc2289abd27864bb928210d277ac85fad39a2c1"},"previous_names":["fabi1cazenave/selenium","fabi1cazenave/arsenik","onedeadkey/arsenik"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/OneDeadKey/arsenik","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneDeadKey%2Farsenik","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneDeadKey%2Farsenik/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneDeadKey%2Farsenik/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneDeadKey%2Farsenik/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OneDeadKey","download_url":"https://codeload.github.com/OneDeadKey/arsenik/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OneDeadKey%2Farsenik/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268424884,"owners_count":24248267,"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-02T02:00:12.353Z","response_time":74,"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":["kanata","keyboards","qmk"],"created_at":"2024-12-06T17:09:58.534Z","updated_at":"2025-08-02T17:31:30.551Z","avatar_url":"https://github.com/OneDeadKey.png","language":"C","readme":"\u003ch1 align=\"center\"\u003eArsenik\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n  ★ \u003cstrong\u003eErgonomics for any keyboard!\u003c/strong\u003e ★\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n  Configure your keyboard — even if it is not programmable — with a\n  beginner-friendly approach to minimize finger movements!\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n![base, navigation and sym layers on a 33-key keyboard](img/all.svg)\n\n*Note: The keyboard layout presented here in the illustration is Qwerty but it\nworks with other layouts as well — Azerty, Qwertz, Ergo‑L, Bépo…*\n\n--------------------------------------------------------------------------------\n\nTable of contents\n--------------------------------------------------------------------------------\n\n- [Philosophy](#philosophy)\n- [Features](#pick-your-poison)\n  1. [Angle mod](#1-angle-mod)\n  2. [Mod-taps](#2-supercharge-your-thumbs-with-mod-taps)\n  3. [Symbols layer](#3-symbols-layer)\n  4. [Navigation layer](#4-navigation-layer)\n  5. [Keyboard layout](#5-keyboard-layout)\n  6. [Extra customization](#bonus-spice-it-up)\n- [Installation](#installation)\n- [Troubleshooting](#troubleshooting)\n- [Why “Arsenik”?](#why-arsenik)\n- [Join the community](#join-the-community)\n\nPhilosophy\n--------------------------------------------------------------------------------\n\n**Bring the keys to your fingers, rather than moving your fingers to the keys.**\n\nNot sure if you should buy that expensive ergonomic keyboard?\n\nDownload a ready-to-use Arsenik configuration for [Kanata], and enjoy your\nregular features that were normally only accessible to a programmable\nkeyboard.\n\n*Note: You probably will benefit the most of Arsenik if you are [touch typing].*\n\nPick Your Poison!\n--------------------------------------------------------------------------------\n\nChoose which Arsenik features to use from the following options:\n\n### 1. Angle mod\n\nOn an ISO keyboard, it permutes the extra down-left key to ease the angle on\nyour left wrist when typing.\n\n![Angle mod](./img/angle_mod.svg)\n\n### 2. Supercharge your thumbs with mod-taps\n\n#### First: layer-taps\n\nIf you’re new to mod-taps, we suggest to start by adding the “layer-tap” option\nwhere only the thumbs are affected:\n\n- the left thumb key remains a \u003ckbd\u003eCmd\u003c/kbd\u003e or \u003ckbd\u003eAlt\u003c/kbd\u003e key when held,\nbut emits a \u003ckbd\u003eBackspace\u003c/kbd\u003e when tapped;\n- the right thumb key brings the \u003ckbd\u003eSymbols\u003c/kbd\u003e layer when held (in blue)\n— where all programming symbols are arranged for comfort and efficiency — and\nemits \u003ckbd\u003eReturn\u003c/kbd\u003e when tapped;\n- the spacebar brings the \u003ckbd\u003eNavigation\u003c/kbd\u003e layer when held (in orange).\n\n![alt, navigation and sym layers under the thumbs](./img/layer_taps.svg)\n\nHaving \u003ckbd\u003eBackspace\u003c/kbd\u003e and \u003ckbd\u003eEnter\u003c/kbd\u003e under the thumbs is enough to\nreduce pinky fatigue very significantly. And using the \u003ckbd\u003eSymbols\u003c/kbd\u003e\nand \u003ckbd\u003eNavigation\u003c/kbd\u003e layers further reduces hand and finger movements.\n\n#### Next level: enable the Home Row Mods\n\nWhen you are familiar with mod-taps, it’s time to enable them on the home row\nwith the “HRM” variants:\n\n- \u003ckbd\u003eFDS\u003c/kbd\u003e and \u003ckbd\u003eJKL\u003c/kbd\u003e become \u003ckbd\u003eAlt\u003c/kbd\u003e, \u003ckbd\u003eCtrl\u003c/kbd\u003e,\n\u003ckbd\u003eSuper\u003c/kbd\u003e when held long enough;\n- the left thumb key can now emit a \u003ckbd\u003eShift\u003c/kbd\u003e rather than \u003ckbd\u003eAlt\u003c/kbd\u003e\nwhen held.\n\n![home row mods on SDF keys](./img/hrm.svg)\n\nThis is a very basic variant of the [Miryoku] principle: one layer on each\nthumb key, and symmetrical modifiers on the home row.\n\n### 3. Symbols layer\n\nFor the \u003ckbd\u003eSymbols\u003c/kbd\u003e layer you can keep \u003ckbd\u003eAltGr\u003c/kbd\u003e as-is. It is\nuseful for keyboard layouts that rely heavily on the \u003ckbd\u003eAltGr\u003c/kbd\u003e key.\n\nBut the real fun (especially for programmers) happens when we enable the\n“Lafayette” programming layer!\n\n![Lafayette symbols layer on a 33-key keyboard](./img/symbols.svg)\n\n#### Num row \u003e\u003e Num pad\n\nIf enabled, in \u003ckbd\u003eSymbols\u003c/kbd\u003e mode, pressing the left thumb key brings up\nthe \u003ckbd\u003eNumRow\u003c/kbd\u003e layer:\n\n- all digits are on the home row, in the order you already know;\n- the upper row helps with \u003ckbd\u003eShift\u003c/kbd\u003e-digit shortcuts;\n- the lower row has dash, comma, dot and slash signs to help with number/date\ninputs\n- \u003ckbd\u003eSpace\u003c/kbd\u003e becomes a narrow no-break space for layouts that support it.\n\n![NumRow layer on a 33-key keyboard](./img/numrow.svg)\n\nEven on keyboards that *do* have a physical number row, this `NumRow` layer can\nbe interesting to use in order to further minimize finger movements.\n\n### 4. Navigation layer\n\nA basic \u003ckbd\u003eNavigation\u003c/kbd\u003e layer has an arrow cluster on the left hand to\nmove around and a num pad on the right hand.\n\n![navigation layer on a 33-key keyboard](./img/navigation.svg)\n\n#### A superpowered Vim-friendly mod\n\nFor those who like to move the cursor with \u003ckbd\u003eHJKL\u003c/kbd\u003e in all apps with any\nkeyboard layout, it is possible to enable a Vim-like \u003ckbd\u003eNavigation\u003c/kbd\u003e\nlayer.\n\nIt also has:\n\n- super-comfortable \u003ckbd\u003eTab\u003c/kbd\u003e and \u003ckbd\u003eShift\u003c/kbd\u003e-\u003ckbd\u003eTab\u003c/kbd\u003e\n- mouse emulation: previous/next and mouse scroll\n\n![Vim navigation layer on a 33-key keyboard](./img/vim_navigation.svg)\n\nThis \u003ckbd\u003eNavigation\u003c/kbd\u003e layer has a few empty slots on purpose, so you can\nadd your own keys or layers.\n\n\u003ckbd\u003eNumPad\u003c/kbd\u003e and \u003ckbd\u003eFn\u003c/kbd\u003e lock these layers: they remain active\nwithout holding the key until escaped with \u003ckbd\u003eAlt\u003c/kbd\u003e or \u003ckbd\u003eAltGr\u003c/kbd\u003e.\n\n![NumPad layer on a 33-key keyboard](./img/numpad.svg)\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eNumPad layer toggled\u003c/em\u003e\n\u003c/p\u003e\n\n![Fn layer on a 33-key keyboard](./img/fn.svg)\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eFn layer toggled\u003c/em\u003e\n\u003c/p\u003e\n\n### 5. Keyboard layout\n\nChoose your keyboard layout among the available ones for Arsenik to work\nproperly.\n\nIf your layout is not on this list, feel free to open an issue or upvote an\nexisting one.\n\nHere are some caveats for specific layouts:\n\n\u003cdetails\u003e\n\u003csummary\u003eErgo‑L/Qwerty‑Lafayette/other Lafayette layouts\u003c/summary\u003e\n\nArsenik works out-of-the-box with Lafayette layouts because their\n\u003ckbd\u003eAltGr\u003c/kbd\u003e layer already matches Arsenik’s \u003ckbd\u003eSymbols\u003c/kbd\u003e layer.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eQwerty/Colemak\u003c/summary\u003e\n\nQwerty and Colemak work out-of-the-box with the Lafayette \u003ckbd\u003eSymbols\u003c/kbd\u003e layer\nbecause there are no other characters typed with \u003ckbd\u003eAltGr\u003c/kbd\u003e.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eAzerty\u003c/summary\u003e\n\nBy using the Lafayette \u003ckbd\u003eSymbols\u003c/kbd\u003e layer, you won’t have access to the\n\u003ckbd\u003e€\u003c/kbd\u003e sign with \u003ckbd\u003eAltGr\u003c/kbd\u003e. You might want to remap it elsewhere, or\navoid using the Lafayette \u003ckbd\u003eSymbols\u003c/kbd\u003e layer.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eBépo\u003c/summary\u003e\n\nBy using the Lafayette \u003ckbd\u003eSymbols\u003c/kbd\u003e layer, you won’t have access to the\ncharacters typed with \u003ckbd\u003eAltGr\u003c/kbd\u003e. You might want to remap some of them elsewhere,\nor avoid using the Lafayette \u003ckbd\u003eSymbols\u003c/kbd\u003e layer.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eOptimot\u003c/summary\u003e\n\nDo not enable angle mod for Optimot as its driver already implements angle mod.\n\nBy using the Lafayette \u003ckbd\u003eSymbols\u003c/kbd\u003e layer, you won’t have access to the\ncharacters typed with \u003ckbd\u003eAltGr\u003c/kbd\u003e. You might want to remap some of them elsewhere,\nor avoid using the Lafayette \u003ckbd\u003eSymbols\u003c/kbd\u003e layer.\n\u003c/details\u003e\n\n### Bonus: Spice It Up\n\nFrom there, you can edit the configuration to your liking, and even contribute\nto Arsenik!\n\nThe 300 ms delay before a key becomes a modifier has been chosen to be easy for\nbeginners. Once used to mod-taps, you may want to reduce it so keyboard\nshortcuts can be done more quickly.\n\nIn the \u003ckbd\u003eNumRow\u003c/kbd\u003e layer, you can edit the \u003ckbd\u003edk1\u003c/kbd\u003e to\n\u003ckbd\u003edk5\u003c/kbd\u003e shortcuts to put whatever seems useful to you: the numerous available\nkeys are defined in the [Kanata source code][Kanata keys].\n\nIn the \u003ckbd\u003eNavigation\u003c/kbd\u003e layer, you can put a command on top of the (Qwerty)\n\u003ckbd\u003eP\u003c/kbd\u003e key, e.g. for an application launcher.\n\nNote that Kanata can also use the laptop’s trackpoint buttons (e.g. on a ThinkPad)\nas two additional thumb keys. :-)\n\nInstallation\n--------------------------------------------------------------------------------\n\nAdjusting to compact keyboard layouts isn’t easy, but Arsenik is designed for\na step-by-step approach:\n\n- load `kanata.kbd` with Kanata ([installation instructions](kanata));\n- enable each feature by un-commenting the related line (a commented line starts\nwith `;;`) – you must enable one and only one line per feature;\n- live-reload the configuration with \u003ckbd\u003eSpace\u003c/kbd\u003e+\u003ckbd\u003eBackspace\u003c/kbd\u003e\n(this requires the layer-taps feature enabled).\n\nIf you have a programmable keyboard you might want to take a look at the\n[QMK](qmk) version of Arsenik (work in progress).\n\nOther desktop implementations (KMonad, keyd, Karabiner…) would be nice to see as\nwell.\n\nTroubleshooting\n--------------------------------------------------------------------------------\n\nSome combinations of three keys might not work on a standard keyboard, due to\n[ghosting], which is a hardware problem that Kanata cannot fix. If you have this\nproblem, you have to release a key to be able to press another one.\n\nWhy “Arsenik”?\n--------------------------------------------------------------------------------\n\n33 keys layout: the 33rd element of the periodic table.\n\nUnlike Miryoku, which requires 6 thumb keys, Arsenik has been designed to work\nwith standard ANSI/ISO/laptop keyboards, leveraging the spacebar and the two\nAlt/Cmd keys.\n\n### Inspiration\n\n- [Miryoku] for the main idea of using modifiers on the home row and layer\nshifters under the thumbs\n- [Lafayette] and [Ergo-L] for the \u003ckbd\u003eSymbols\u003c/kbd\u003e layer, which has been\nshamelessly taken *as is*\n- [Extend], [Neo], [Shaka34] for the \u003ckbd\u003eNavigation\u003c/kbd\u003e layer\n\n### Alternative Symbols Layers\n\n- [Neo]\n- [Seniply]\n- [Pascal Getreuer’s]\n\n### Non-Goals\n\n- Being the most efficient 3×5 layout — [Miryoku] is probably the most\nadvanced approach for that, at least on custom 36-key keyboards\n- Suiting every user out-of-the-box — Arsenik is proposed as a reasonable\ndefault configuration, but users are encouraged to customize it to suit their\npersonal needs and preferences\n- Fitting any OS layout — Arsenik works best if your OS layout has either no\nAltGr layer at all (e.g. Qwerty, Colemak, Workman…) or an optimized AltGr layer\n([Lafayette], [Ergo-L]…)\n\n### Similar Projects\n\n- [Miryoku]: 36 keys, 6 layers\n- [Seniply]: 34 keys, 6 layers, no layer-taps (“Callum-style”)\n\nJoin the community\n--------------------------------------------------------------------------------\n\nFrench-speaking users may join the [Ergo-L Discord server], which hosts a\nchannel to talk about Arsenik, keyboards, layouts and much more.\n\nFeel free to open an issue and/or a pull request if you encounter a bug or want\nto enhance the Arsenik experience!\n\n[Kanata]: https://github.com/jtroo/kanata\n[Miryoku]: https://github.com/manna-harbour/miryoku\n[touch typing]: https://en.wikipedia.org/wiki/Touch_typing\n[ghosting]: https://en.wikipedia.org/wiki/Key_rollover#Ghosting\n[Lafayette]: https://qwerty-lafayette.org/42\n[Ergo-L]: https://ergol.org\n[Kanata keys]: https://github.com/jtroo/kanata/blob/main/parser/src/keys/mod.rs#L159\n[Extend]: https://dreymar.colemak.org/layers-extend.html\n[Neo]: https://neo-layout.org\n[Shaka34]: https://github.com/lobre/shaka34\n[Seniply]: https://stevep99.github.io/seniply/\n[Pascal Getreuer’s]: https://getreuer.info/posts/keyboards/symbol-layer/#my-symbol-layer\n[Ergo-L Discord server]: https://discord.gg/5xR5K3nAFX\n","funding_links":[],"categories":["C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOneDeadKey%2Farsenik","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOneDeadKey%2Farsenik","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOneDeadKey%2Farsenik/lists"}