Dusty

Dusty

An Elixir-optimized keyboard layout

Roughly a year ago, I found myself inwardly complaining about the fact that my 60% keyboard only had the Control key on one side. This minor inconvenience led me down a rabbit hole of keyboard optimization that is so deep I may never emerge :slight_smile: In any event, I have settled on a 36-key split as my daily driver—and in the course of optimizing the layout, it became clear to me that I could do very specific things to make the layout better for Elixir, which is a favorite of mine. After 8 years using Dvorak, followed by a few years back on QWERTY, I had settled into using Colemak DHm as my primary layout for the alpha keys. I wanted to apply the pleasant inward rolls that Colemak was giving me to the symbol layer as well, with some special attention to Elixir. For programming in general, I grouped inward-rolling pairs like +=, (), [], and {}, but I also discovered that by using the grouping: < | - >, I could make comfortable rolls for a number of Elixir conventions all at once (<>, <-, ->, |>). I could also put other commonly used symbols, like " or :, in positions that better reflect their Elixir-specific importance, and still have room for rolled pairings that serve other purposes (like ~/ for Unix file paths). Coupling these improvements with the power of QMK firmware (oneshot layers/modifiers, dual-function keys) has made for a really comfortable and enjoyable experience. I don’t have any idea how much overlap there might be between the various communities (Elixir, alt layout, mechanical keyboard), but I thought I would share it here since a lot of my thinking was inspired by Elixir syntax.

If this type of thing interests you, you can see the layout itself in the QMK repo (the symbol layer is towards the end).

If you’re wondering about my choice of alpha layout, I’ve written about that elsewhere.

There is always room for improvement—you’d be correct to point out that EEx openers (<%=) aren’t that smooth—but I’m relatively satisfied for now.

Anyway, thanks to the community for this awesome language. I’ve only just started my journey but it’s really a joy to use.

Most Liked

Dusty

Dusty

An inward roll would be the equivalent of typing SDF rapidly on QWERTY. This mimics the way we would normally tap our fingers on a table, rolling from 5th finger to 2nd finger. Try rolling the other direction (index to pinkie). It’s not so easy or comfortable. If you look at my 2nd link (the writeup on alternative keyboard layouts), I show the Colemak layout and give the examples of typing SENTENCE, FRIEND, or FIRST. This is why I paired the braces in the right half of the symbol layer in the opposite manner to the parentheses in the left hand. That way both sides roll inward.

sanswork

sanswork

I’ve been playing with my layouts again lately after a long break.

Is my current. I did try having an elixir specific layer but I have too much muscle memory for layer 2 already so I never used it. I ran a few of my codebases through a character counting script and put the most used near my index fingers(I’m also a vim user hence the qwerty hjkl on layer two and the ctrl-[.

I’m still not super happy with it but its a work in progress. Biggest problem is I became so accustomed to my last layout I’m struggling remapping my mental model of my secondary layer. But I have a print out of that layer I put on my laptop which is helping.

adkron

adkron

I use a keyboardio and love it. The thumb keys in one arc allows them all to be reached and usable. I created an Elixir pipe key, but I need to spend more time with my layout. The numbers I moved to the home row on another layer. The original number keys are shortcuts for switch tmux windows. My wrist pain went away completely. I love the keyboard. If you want to know more let me know. I also have a discount code for it. I get no kickbacks.

Where Next?

Popular in Discussions Top

Donovan
Hello everyone, I’m so glad to have discovered this awesome community. Thanks for creating it! This is my second post, and apologies for...
New
laiboonh
Hi all, I am trying to convince my team to use liveview over the current react. What are some of the points where one should consider us...
New
lucaong
Hello Elixir and Nerves community, I have been working for a while on an open-source embedded key-value database for Elixir, that I call...
230 14049 124
New
rower687
Hi all, I’ve been reading a lot about the “let it crash” term and how supervising processes and the whole messaging passing make an elixi...
New
shishini
I think this twitter post and youtube video didn’t get as much attention as I hoped I am still new to Elixir, so can’t really judge ...
New
hazardfn
I suppose this question is effectively hackney vs. ibrowse but we are at a point in our project where we have to make a choice between th...
New
RudManusachi
What configs will make sense to put to runtime.exs? – A bit of how I configure apps: I have generic configs in config/config.exs, dev...
New
pdgonzalez872
If this has been asked here before, please point me to where it was asked as I didn’t find it when I searched the forum. Maybe a mailing ...
New
griffinbyatt
Sobelow Sobelow is a security-focused static analysis tool for the Phoenix framework. For security researchers, it is a useful tool for g...
New
New

Other popular topics Top

electic
Hi, I am new to Elixir. I am trying to use the DateTime component to insert a date into MySQL however the there seems to be no way to fo...
New
malloryerik
Hi, this is for people who, like me, have had some friction using .html.heex templates in VSCode. The solution seems to be, in a hyphena...
New
chrismccord
As promised, the first release candidate of Phoenix 1.3.0 is out! This release focuses on code generators with improved project structure...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
baxterw3b
Hi guys, i’m new in the Elixir world, and i have to say, that i love it! i’m having some problem to understand anonymous functions with ...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID&lt;0.412.0&gt; terminating ** (Postgrex.Error) FATAL...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
aesmail
Hello guys, I have finally made it. I created an admin interface for a framework. It’s been on my todo list for years and with the curre...
New
RisingFromAshes
I’ve read in another post that it may be possible with a router helper - but I couldn’t find an appropriate one, and tbh, I’m still just ...
New
bsollish-terakeet
Credo is smart enough to check for (something like) this: assert length(the_list) == 0 with this response: Checking if an enum is empt...
New

We're in Beta

About us Mission Statement