{"id":44862909,"url":"https://github.com/jackrosenthal/threelayout","last_synced_at":"2026-02-17T10:41:38.561Z","repository":{"id":39988178,"uuid":"43240284","full_name":"jackrosenthal/threelayout","owner":"jackrosenthal","description":"A better modifier based keyboard layout","archived":false,"fork":false,"pushed_at":"2026-02-11T23:31:04.000Z","size":399,"stargazers_count":147,"open_issues_count":12,"forks_count":28,"subscribers_count":10,"default_branch":"master","last_synced_at":"2026-02-12T09:17:17.116Z","etag":null,"topics":["autohotkey","karabiner-elements","keyboard-layout","xkb"],"latest_commit_sha":null,"homepage":"","language":"AutoHotkey","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/jackrosenthal.png","metadata":{"files":{"readme":"README.rst","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-09-27T08:58:23.000Z","updated_at":"2026-02-11T23:31:09.000Z","dependencies_parsed_at":"2024-03-28T03:33:19.320Z","dependency_job_id":"5efedecd-1a87-4f1b-90eb-199900bedec9","html_url":"https://github.com/jackrosenthal/threelayout","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jackrosenthal/threelayout","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackrosenthal%2Fthreelayout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackrosenthal%2Fthreelayout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackrosenthal%2Fthreelayout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackrosenthal%2Fthreelayout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jackrosenthal","download_url":"https://codeload.github.com/jackrosenthal/threelayout/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackrosenthal%2Fthreelayout/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29540292,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T08:11:05.436Z","status":"ssl_error","status_checked_at":"2026-02-17T08:09:38.860Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["autohotkey","karabiner-elements","keyboard-layout","xkb"],"created_at":"2026-02-17T10:41:37.872Z","updated_at":"2026-02-17T10:41:38.540Z","avatar_url":"https://github.com/jackrosenthal.png","language":"AutoHotkey","funding_links":[],"categories":[],"sub_categories":[],"readme":"``3l`` - A better modifier based keyboard layout\n================================================\n\n**Three Layout**, more commonly called ``3l``, is an `alternative\nkeyboard layout`_ designed for efficiently typing both English text\nand computer programs. ``3l`` is modifier based, so many of the keys\nwhich would normally be accessed on the top row (with numbers on\nQWERTY) can be accessed on the main part of the keyboard.\n\n.. _`alternative keyboard layout`: https://en.wikipedia.org/wiki/Keyboard_layout#Non-QWERTY-based_Latin-script_keyboard_layouts\n\nTo give you an idea on how much this layout can improve your typing efficiency,\ncompare typing distance of George Orwell's *Nineteen Eighty-Four* to other\ncommon layouts:\n\n===================================================== =============\nQWERTY                                                 10.4 miles\nNeo 2.0                                                 6.3 miles\nAntibracket (which this keyboard layout was based on)   6.3 miles\nDvorak                                                  6.2 miles\nColemak                                                 5.9 miles\nWorkman                                                 5.8 miles\nWULY (my old layout)                                    5.6 miles\nARENSITO                                                5.3 miles\n``3l``                                                **4.9 miles**\n===================================================== =============\n\nTyping distance is not the only factor that ``3l`` optimizes for. ``3l`` helps\n**increase hand alternation**, **reduce bottom-to-top row jumps**, **decrease\nlateral motion**, and also strives to be **easy to learn**.\n\n.. image:: docs/standard_three.png\n\nSee the ``docs`` directory for more images of the layout.\n\nTesting the layout without installation\n---------------------------------------\n\n.. _applying the layout temporarily:\n\nOn Linux (using X or Wayland):\n\n* **If you have xkeyboard-config 2.27 or later:** ``3l`` is already\n  installed on your system. Just type ``setxkbmap us 3l`` or use your\n  window manager's settings to adjust your layout.\n\n* **If you have xkeyboard-config 2.26 or earlier:** clone this\n  repository and run this command::\n\n    setxkbmap 3l -print | xkbcomp -Ilinux/xkb - $DISPLAY\n\nTo return to QWERTY keyboard layout, type ``setxkbmap us``.\n\nOn Windows, compile and run the provided AHK script. Your keyboard layout will\nreturn to normal when the script exits (in system tray). You may also\nbe interested in `toggling the layout`_.\n\nOn 9front, copy the file ``9front/3l`` to ``/sys/lib/kbmap/3l``. You can use ``kbmap(1)`` to switch between layouts.\n\nInstallation\n------------\n\nLinux\n~~~~~\n\nTo set ``3l`` as the *default keyboard layout* for your system, add a\nsection to your X11 configuration::\n\n    $ cat /etc/X11/xorg.conf.d/99-keyboard.conf\n    Section \"InputClass\"\n            Identifier \"system-keyboard\"\n            MatchIsKeyboard \"on\"\n            Option \"XkbLayout\" \"us\"\n            Option \"XkbVariant\" \"3l\"\n    EndSection\n\n``systemd`` has the ``localectl`` utility that you may optionally use\nto maintain this configuration file.\n\n.. admonition:: If you don't have xkeyboard-config 2.27 or later\n\n   Place the ``linux/xkb/symbols/3l`` file in your system's\n   ``symbols`` directory. This is typically something like\n   ``/usr/share/X11/xkb/symbols``. You'll need the configuration to\n   look a little different::\n\n        $ cat /etc/X11/xorg.conf.d/99-keyboard.conf\n        Section \"InputClass\"\n                Identifier \"system-keyboard\"\n                MatchIsKeyboard \"on\"\n                Option \"XkbLayout\" \"3l\"\n        EndSection\n\nMac OS X [2]_\n~~~~~~~~~~~~~\n\n1. Install `Karabiner Elements`_\n2. Copy the ``macosx/karabiner.json`` file to the ``~/.config/karabiner/``\n   directory.\n3. Select the ``3l`` profile from Karabiner Elements.\n\n.. [2] Get off your hipster butt. This can be used to refer to \"OS X\" and\n       \"macOS\" as well.\n.. _`Karabiner Elements`: https://github.com/tekezo/Karabiner-Elements\n\nWindows\n~~~~~~~\n\nThere are two implementations of ``3l`` for Windows, a simple\nAutoHotkey_ script located in this repository, and the more advanced\nReNeo_ also offers a configuration for ``3l``.  Depending on your\nneeds, you may want to check out the ReNeo driver for advanced\ncustomization options.\n\nAutoHotkey\n^^^^^^^^^^\n\nPlace the AHK script in your \"Startup\" folder.\n\n.. _toggling the layout:\n\nTo toggle between ``3l`` and your system layout (e.g., QWERTY), press\nboth ``Alt`` keys at the same time.\n\nReNeo\n^^^^^\n\nSee the ReNeo_ repository for install instructions.\n\n.. _AutoHotkey: https://www.autohotkey.com/\n.. _ReNeo: https://github.com/Rojetto/ReNeo\n\n9front\n~~~~~~\n\nCopy the file ``9front/3l`` to ``/sys/lib/kbmap/3l``. You can toggle the layout with ``kbmap(1)``.\n\nTo set the layout on boot, add it to your ``plan9.ini(8)``::\n\n        % 9fs 9fat\n        % cat /n/9fat/plan9.ini\n          ...\n          kbmap=3l\n          ...\n        % unmount /n/9fat\n\nEnsure that the file ends in a newline. You will also need to rebuild your kernel, following the instructions under `FQA 5`_.\n\n.. _FQA 5: http://fqa.9front.org/fqa5.html\n\nFrequently Asked Questions\n--------------------------\n\n**What happens if I have to use someone else's computer and all\nthey've got is QWERTY?**\n\nShort-term use of someone's computer with QWERTY is usually a\nnon-concern. Since most keyboards have the layout printed on the\nkey caps, most users of ``3l`` don't have any issues surviving.\n\nFor long-term use (such as on a shared machine, or a school lab\ncomputer), `applying the layout temporarily`_ usually only takes a few\nminutes to setup and can help relieve some pains.\n\n**What happens if someone has to temporarily use my computer?**\n\nFor Windows, see `toggling the layout`_.\n\nFor Linux, most window managers provide a convenient way to toggle\nbetween layouts. If your window manager does not have that, just bind\na key to run ``setxkbmap``.\n\nIf anyone has some Mac OS X tips, please submit a PR. (I presume\nKarabiner makes this pretty easy.)\n\nFor 9front, use ``kbmap(1)`` to switch layouts.\n\n**How should I start learning?**\n\nThe `Klavaro Typing Tutor`_ is configurable to multiple layouts (you\ncan put in ``3l`` as a custom layout) and is an excellent option for\nlearning. You should start with the basic skills courses before the\nspeed-typing courses.\n\n.. _Klavaro Typing Tutor: http://klavaro.sourceforge.net/\n\nMost users will recommend going `cold turkey`_ from your old layout\nwhen just starting to learn. This will help you focus on your\nlearning, and `learning survival QWERTY`_ later is always an option.\n\n.. _cold turkey: https://en.wikipedia.org/wiki/Cold_turkey\n\n**How long does it take to learn?**\n\nMost users are able to accomplish survival typing skills (\u003e20 WPM)\nwithin one week of starting to learn. Focusing on accuracy over speed\nduring your first few weeks of learning will help you be successful,\nand you'll pick up the speed in the long run.\n\n**Will I forget QWERTY?**\n\n.. _learning survival QWERTY:\n\nMost users seem to indicate that they lost some QWERTY skills while\nre-training their brain to ``3l``, but were eventually able to recover\nenough skills to survive in the long term.\n\n**Will I type faster than on my old layout?**\n\nMaybe. While most users report they are able to type faster than they\ncould on QWERTY, the primary benefit of trying an alternative layout\nis in typing comfort and health. Many users enjoy reduced repetitive\nmotions, and find typing longer hours less difficult.\n\n**Will I have to re-configure my text editor for the new layout?**\n\n``3l`` was designed partly with keeping vanilla Vi-style keybindings\nsomewhat sane in mind. If you find yourself using many systems and\ndon't want to have to keep configuration in sync, you'll appreciate\nhow easy it is to use Vi or Vim style editors with the default\nconfiguration. I personally use Emacs with `Evil mode`_, and haven't\nhad any issues keeping most of the Vi-style bindings in their standard\nconfiguration. That being said, if you find that some sort of\nrebinding with respect to ``3l`` helps you, I'm curious to see what\nyou've done. Maybe we can drop this in some sort of ``contrib/``\ndirectory.\n\n.. _Evil mode: https://www.emacswiki.org/emacs/Evil\n\nI'm curious to hear if and what people do to work with ``3l`` and\nnon-Vi editors. Drop me an email or a PR :)\n\n**Is the symbols layer designed for a specific programming language?**\n\nThe symbols layer is mostly derived from the Neo 2.0 keyboard layout,\nand to the best of my knowledge, was not designed with any specific\nprogramming language in mind. I've used it with everything from\nC-style languages, to HTML, to Haskell, to Python, and Lisp and have\nfound that most every language benefits from the symbols layer.\n\n**What about using the layout on mobile?**\n\nModern mobile keyboards (such as Gboard_) tend to use machine learning\nalgorithms for predictive input and autocorrect, and these algorithms\nwere trained on QWERTY users. In addition, QWERTY's design of common\nbigraphs spaced far apart is incidentally a helpful design when using\nswipe typing. For these reasons, nobody has bothered with making a\nmoblie version.\n\n.. _Gboard: https://en.wikipedia.org/wiki/Gboard\n\nHowever, an Android or iOS version of the layout could potentially be\nuseful for tablet typing. If someone with expertise in this domain\nwanted to implement this and submit a PR, that would be very much\nappreciated.\n\n**Help, I'm using Gnome on Wayland and can't configure it to use 3l!**\n\nSome rarely used keyboard layout variants are not available by default when you\nuse gnome, ``3l`` is one of them. To enable Gnome's visibility of the ``3l``\nvariant run the following in your terminal.::\n\n    $ gsettings set org.gnome.desktop.input-sources show-all-sources true\n\nNow ``3l`` will be available through the keyboard configuration UI\n\n`Gnome Documentation \u003chttps://help.gnome.org/users/gnome-help/stable/keyboard-layouts.html.en\u003e`_\n\nCommunity\n---------\n\nMatrix Room\n~~~~~~~~~~~\n\nJoin our Matrix chat room at `#threelayout:ohea.xyz`_.\n\n.. _#threelayout:ohea.xyz: https://matrix.to/#/#threelayout:ohea.xyz\n\nMailing List\n~~~~~~~~~~~~\n\nThere is an email list for general chat about the layout. Please\n`subscribe`__ to the list. You can send mail to the list using the\naddress::\n\n  3l-users@googlegroups.com\n\nYou do not have to be a member to post, so feel free to reach out on\nthis list with questions about the layout, even if you're not a user\nyet.\n\n__ https://groups.google.com/forum/#!forum/3l-users\n\nUsers' Registry\n~~~~~~~~~~~~~~~\n\nThis section lists people who have learned to type on ``3l``. Users who learn\nto type at least 15 WPM (that's what it takes to get past the initial learning\nthreshold) on ``3l`` can be added to this list. This list is included here so\nyou can query typists to see what they like and dislike about the layout before\nyou dedicate time to learning, or so you can reach out for learning tips.\n\n* `Jack Rosenthal`__ (Me, who created ``3l`` in the Fall of 2015)\n* `Josh Hoffer`__ (who learned ``3l`` in the Spring of 2017)\n* `Sumner Evans`__ (who learned ``3l`` in the Spring of 2017)\n* `Robert Zampino`__ (who learned ``3l`` in the Spring of 2018)\n* `Patrick Nichols`__ (who learned ``3l`` in the Fall of 2018)\n* `David Florness`__ (who learned ``3l`` in the Fall of 2018)\n* `Daichi Jameson`__ (who learned ``3l`` in the Fall of 2018)\n* `Jesus Nunez`__ (who learned ``3l`` in the Fall of 2018)\n* `Liam Warfield`__ (who learned ``3l`` in the Spring of 2019)\n* `Sam Warfield`__ (who learned ``3l`` in the Summer of 2019)\n* `Sam Sartor`__ (who learned ``3l`` in the Summer of 2019)\n* `Peter Rosenthal`__ (who learned ``3l`` in the Spring of 2020)\n* `Sean Gillespie`__ (who learned ``3l`` in the Spring of 2020)\n* `Uladzislau Khamkou`__ (who learned ``3l`` in the Fall of 2021)\n* `Samuel Clay`__ (who learned ``3l`` in the Spring of 2022)\n* `Liam Abell`__ (who learned ``3l`` in the Fall of 2022)\n* `Byron Sharman`__ (who learned ``3l`` in the Spring of 2024)\n* `Ivan Abramov`__ (who learned ``3l`` in the Spring of 2024)\n* `Jason Robinson`__ (who learned ``3l`` in the Spring of 2024)\n* `Logan Gartner`__ (who learned ``3l`` in the Spring of 2025)\n* `Jaron O'Grady`__ (who learned ``3l`` in the Spring of 2025)\n\n__ http://inside.mines.edu/~jrosenth\n__ https://github.com/JoshH100\n__ https://github.com/sumnerevans\n__ https://github.com/robozman\n__ https://github.com/panichol\n__ https://github.com/edwargix\n__ https://github.com/daichij\n__ https://github.com/jnunez101\n__ https://github.com/liamwarfield\n__ https://github.com/Warfields\n__ https://samsartor.com/\n__ https://github.com/peterrosenthal\n__ https://github.com/sgillespie\n__ https://github.com/hvod2000\n__ https://github.com/olivethepuffin\n__ https://github.com/labell36\n__ https://github.com/b-sharman\n__ https://github.com/satur4te\n__ https://github.com/Jaso-N7\n__ https://github.com/logan2611\n__ https://github.com/BobtheElf\n\nIf you learn the layout, feel free to submit a PR with your name added.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackrosenthal%2Fthreelayout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjackrosenthal%2Fthreelayout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackrosenthal%2Fthreelayout/lists"}