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...