Designing a Symbol Layer

firephox1 pts0 comments

Designing a Symbol Layer

Skip to content

brightness_6

Designing a Symbol Layer

Pascal Getreuer, 2021-10-30 (updated 2025-11-02)

Overview

Design<br>principles

Automatic optimization?

Some<br>existing designs

reasonable default

Extend2

Seniply

ShelZuuz’s symbol layer

Sunaku’s symbol layer

Layer optimized for Elixir<br>code

BEAKL 15

Multi-layer designs

My symbol<br>layer

My symbol layer v1<br>(historical)

Learning your symbol layer

Symbol character<br>frequencies

Conclusion

Overview

It’s pretty common in a QMK layout to have a “symbol” layer, for all<br>those symbols that didn’t fit on the base layer, especially with smaller<br>boards.

An optimized symbol layer.

A lot of effort has gone into optimizing the layout of the alpha<br>keys—Dvorak, Colemak, MTGAP, BEAKL, RSTHD, to name a few (see A guide to alt keyboard layouts).<br>Yet I found relatively little written about how to design a symbol<br>layer. To do something about that, this page discusses some design<br>principles and observations about symbol layers.

Design principles

Symbols are not like alpha characters: they occur less often, and<br>they tend to occur in isolation or in short bigrams (in C code, things<br>like # and !=). We can learn nevertheless from<br>work on optimizing alpha key layouts and apply some of those findings to<br>symbol layouts:

It’s a good idea to…

put the most used keys on home row and rare keys toward the<br>corners.

avoid the pinkies for keys that are often double tapped<br>(==, ++, //, …). Or you might<br>like a repeat key to circumvent double tapping (QMK repeat key, ZMK repeat<br>key).

make common bigrams (!=, ,<br>+=, ->, …) comfortable to type. Ideally<br>they are inward rolls. An<br>inward roll is a pattern typed on one hand with successive keys moving<br>toward the center of the keyboard (“inward”), like drumming your fingers<br>from pinky to index finger.

And a practicality:

It’s a good idea to make your layout easy to learn. You won’t use<br>what you forgot!

While each principle above is reasonable for an isolated key, they<br>will easily conflict when getting into the design. Obviously, not all<br>keys can be on the home row and not all bigrams can be inward rolls. We<br>need to make compromises.

Automatic optimization?

There are keyboard layout optimizer tools (like xsznix/keygen, semilin/genkey, and O-X-E-Y/oxeylyzer) that<br>automatically search for a layout that balances many above such<br>considerations, and these could be applied to design a symbol layer.<br>However, automatically designed layouts are notorious for having<br>random-looking hard-to-learn arrangements. It’s also hard with these<br>tools to make a minor adjustment to one key without reshuffling<br>everything else. I think it’s better for these reasons to arrange the<br>symbol keys manually.

Some existing designs

Looking at keymaps in the QMK repo, it is easy to find many existing<br>designs for symbol layers. Here are a few for inspiration:

A reasonable default

This is the symbol layer in the default keymap for the ZSA<br>Moonlander, the Dactyl boards, and probably many others:

A reasonable default symbol<br>layer.

(index fingers rest on ) and 4)

The layer is easily learnable. Brackets are neatly organized on the<br>left hand, and the leftmost two columns are simply the first six number<br>row symbols in usual order (! @ # $ % ^). The layer manages<br>to squeeze a numpad onto the right hand. While it’s a well-designed<br>layer, there is room for improvement, especially for typing common<br>bigrams.

Extend2

Another good general-purpose symbol layer design is Extend2 of<br>DreymaR’s Extend Layer, containing some useful symbols, numpad,<br>navigation keys, and hotkeys.

Extend2 layer.

Seniply

SteveP’s Seniply is<br>a 34-key keymap that packs a lot of symbols in one layer, in addition to<br>mods on the left-hand home row:

Seniply symbol layer.

(index fingers rest on Ctrl and ()

ShelZuuz’s symbol layer

ShelZuuz described<br>this symbol layer, optimized for C++ coding on a 3x5 keyboard:

ShelZuuz’s symbol layer.

(index finger rests on = and ()

The symbol layer is entered using layer-tap keys on the base layer,<br>placed symmetrically on the home row ring finger keys (S and<br>L on QWERTY). This is why _ appears twice in the symbol<br>layer, so that _ may be typed by pressing both ring fingers in either<br>order.

Features:

The very common code trigram (); is an outward roll on<br>the right hand home row. If you prefer inward rolls, ShelZuuz suggests<br>to consider swapping the (); {}<br>[] keys to the left hand so that their natural order is the<br>roll order.

The right hand bottom row facilitates arrow bigrams<br>-> and .

!= is an inward roll.

For easier learning: Keys {} are stacked directly above<br>(). Keys <> and ; are in<br>their usual QWERTY positions. Keys + and \ are<br>mirrored by / and -.

Sunaku’s symbol layer

Sunaku described this as “the crown jewel of my keyboard’s<br>configuration,” resulting from “several hundreds of layout iterations<br>over the last 9 years.” The layer is optimized for programming in<br>Vim.

Sunaku’s symbol layer.

(index finger rests on $)

Many...

layer symbol keys design hand layout

Related Articles