Nameraka is a QMK layout for 3x5 Corne (crkbd) split ergonomic keyboards, that is based on Miryoku.
The layout is optimized for both programming, writing and general keyboard centric computing.
Some features and macros are Emacs specific, although of course, using Emacs is not required to make good use of most of the layout.
- Clone and prepare qmk
git clone https://github.com/qmk/qmk_firmware.git cd qmk_firmware qmk setup
- Clone nameraka, and place it in the keymaps directory of the Corne keyboard (crkbd)
git clone https://github.com/andjo721/nameraka keyboards/crkbd/keymaps/nameraka
- Build and flash
qmk flash -c -kb crkbd -km nameraka -e NAMERAKA_ALPHAS=QWERTY -e NAMERAKA_EXTRA=COLEMAKDH -e NAMERAKA_TAP=QWERTY
Some environment variables that may be set at build time:
- NAMERAKA_ALPHAS
Chooses which layout is used for the default base layer. - NAMERAKA_EXTRA
Chooses what is used for the extra base layer. - NAMERAKA_TAP
Chooses the base layout of the TAP layer. The TAP layer is for tasks that demand alpha key taps only - keys have no special behaviours like Mod Tap and only the Navigation layer is available. - NAMERAKA_KEYMAP=MACOS
Makes a few adjustments of output character codes for MacOS. - NAMERAKA_TAPPING_TERM=<integer>
Changes the tapping term time, that is how long before a key press becomes a hold. Default is 175 (ms), which is a reasonable value.
- NAMERAKA_ALPHAS
- Layer layouts in this document are described as rows of characters corresponding to keys on the keyboard.
- The two halves of the keyboard are presented side by side.
- Lower case alpha characters, numerals and symbols are literal, i.e. they result in that character being output when the key is pressed.
- The character “□” denotes a blank key.
- Upper case alpha characters represent special keys or more complex functions not easily representable by a character. These are described in a list directly following the layer layout. The list contains the upper case characters together with a description of their function when pressed.
- X means the key does not have a function in the layer, and is unavailable for configuration.
It is used for activating the layer being described, so it is required to be already held down.
Nameraka uses home row mods.
Some keys have double functions:
- They have one function (usually output of a character) when tapped,and
- Become a modifier key when held for a time, using the Mod Tap (MT) functionality of QMK.
The modifier remains active for as long as the key is held.
For cases where there are several key codes for a modifier, the key code of the left modifier key on a regular PC keyboard is used.
Modifier keys are:
- Shift
- Control
- Meta (Alt)
- Super (GUI/Win)
- Meh (Shift + Ctrl + Meta)
- Alt-Gr
- Hyper (Shift + Ctrl + Meta + Super)
These are placed in most layers like this:
□ □ □ □ □ □ □ □ □ □ D C B A E E A B C D □ F □ G □ □ G □ F □ □ □ □ □ □ □
- A: Shift
- B: Control
- C: Meta
- D: Super
- E: Meh
- F: Alt-Gr
- G: Hyper
In the base layers, home row mods are used, and thus the keys have the modifier function when held for a time.
In other layers, the modifiers on one half of the keyboard are static, and the only function of that key.
The modifier keys are placed so that they can comfortably be reached from a normal resting hand position on the home row.
Resting position:
- Shift and control are given the prime real estate directly under the index and middle finger.
- Meta and super are allocated to the weaker ring and little fingers.
Stretches:
- Only the index finger stretches one position sideways and down for Meh and Hyper. The thinking here is that the index finger normally is the strongest and most agile finger.
When no special layer has been activated, the base layer is active. The base layer is selected at compile time, and may be set to QWERTY or COLEMAK_DH.
The thumb keys each activate a layer when held, using the mod-tap (MT) functionality of QMK. The layer remains active for as long as the key is held down.
□ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ □ A B C D E F
- A: Media and Misc layer
- B: Navigation layer
- C: Project and Programming layer
- D: Symbol layer
- E: Number layer
- F: Function layer
q w e r t y u i o p a s d f g h j k l ö z x c v b n m , . - A B C D E F
- A: ESCAPE
- B: SPACE BAR
- C: TAB
- D: ENTER
- E: BACKSPACE
- F: DELETE
- u + i Produces Swedish “å”.
- m + , Produces Swedish “ä”.
q w f p b j l u y + a r s t g m n e i o z x c d v k h , . ' A B C D E F
- A: ESCAPE
- B: SPACE BAR
- C: TAB
- D: ENTER
- E: BACKSPACE
- F: DELETE
< & { } @ / ` ^ ' ? > $ ( ) ; # = □ □ □ | ! [ ] : \ % ~ □ □ " / ' X E F
- E: NA
- F: NA
□ □ □ □ □ H I J K L A B C D E M ← ↓ ↑ → □ F □ G □ N I J K L □ X □ M N O
Modifiers
- A: Super
- B: Meta
- C: Control
- D: Shift
- E: Meh
- F: Alt Gr
- G: Hyper
- H: Macro WIND_MAX_TOGGLE (Ctrl-b z)
- I: Macro WIND_LEFT (Ctrl-b ←)
- J: Macro WIND_DOWN (Ctrl-b ↓)
- K: Macro WIND_UP (Ctrl-b ↑)
- L: Macro WIND_RIGHT (Ctrl-b →)
- M: Caps Word Toggle
Caps word makes subsequently entered characters upper case for the duration of a word. Non alphabethical or numerical characters ends the word, except for ‘-’ which becomes ‘_’. There also is a timeout. Whenever no key has been pressed for the duration of the timeout, Caps Word mode is terminated, and everything is back to normal. - N: INSERT
- I: END
- J: PAGE DOWN
- K: PAGE UP
- L: HOME
- M: ENTER
- N: BACKSPACE
- O: DELETE
F12 F7 F8 F9 A □ □ □ □ □ F11 F4 F5 F6 B G H I J K F10 F1 F2 F3 C □ L □ □ □ D E F □ □ X
- A: Print Screen
- B: Scroll Lock
- C: Pause/Break
- D: App key
(often performs the same function as the right mouse key in an UI) - E: SPACE BAR
- F: TAB
- G: Meh
- H: Shift
- I: Control
- J: Meta
- K: Super
- L: Hyper
/ 7 8 9 - A □ □ □ □ * 4 5 6 + B C D E F § 1 2 3 % □ G □ □ □ . 0 : □ X □
Only simple characters.
- A: Macro that yields the text
= () => ()
Modifiers
- B: Meh
- C: Shift
- D: Control
- E: Meta
- F: Super
- G: Hyper
This layer is completely Emacs centric, so if you do not use Emacs it probably won’t be useful to you. It contains macros that mostly concern project handling and programming, and is made for Emacs with the packages LSP, ccsl, Projectile, diff-hl, magit, helm, perspective, multiple-cursors, org-mode installed. If you have not got all these packages installed, the macros for the ones you have should still work.
Stock keybindings for the macros have been used when possible.
If you need to modify the behaviour, take a look at process_record_project() in manna-harbour_miryoku.c.
A □ □ B □ I J K L M C D □ E F N O P Q □ □ □ G □ H R S T □ □ □ □ X U □ □
- A: LSP Format Region
Macro (Ctrl-q l = r)- Emacs: lsp-find-references
Finds references of the symbol at point.
- Emacs: lsp-find-references
- B: VC_REVERT_HUNK
Macro (Ctrl-x v n)- Emacs: diff-hl-revert-hunk
Reverts any local changes in the marked region to the version currently checked out from Version Control (e.g. Subversion or Git).
- Emacs: diff-hl-revert-hunk
- C: PRJ_OTHER_FILE
Macro (Ctrl-c p a)- Emacs: helm-projectile-find-other-file
Finds files with the same name but different extension. May, for example, be used to switch between .c and .h files in a C code base.
- Emacs: helm-projectile-find-other-file
- D: PRJ_SEARCH
Macro (Ctrl-c p s s)- Emacs: helm-projectile-ag
Searches the contents of the files of the currently active Projectile Project, using The Silver Searcher (ag).
- Emacs: helm-projectile-ag
- E: PRJ_FILES
Macro (Ctrl-c p f)- Emacs: helm-projectile-find-file
Interactively find a file that is in the current Projectile project.
- Emacs: helm-projectile-find-file
- F: MAGIT_STATUS
Macro (Ctrl-x g)- Emacs: magit-status
Shows the current git status (uses the package Magit).
- Emacs: magit-status
- G: New task
Macro (Shift-F12)- Emacs: Personal binding for input of custom Org todo.
- H: PERSP_BUF
Macro (Ctrl-x Ctrl-b)- Emacs: helm-buffers-list
Shows a list of buffers that are open in the currently active perspective (package Perspective).
- Emacs: helm-buffers-list
- I: LSP_TYPE_DEFINITION
- Macro: (Ctrl-q l g t)
- Emacs: lsp-find-type-definition
Shows the definition of the symbol at point (package LSP).
- Emacs: lsp-find-type-definition
- Macro: (Ctrl-q l g t)
- J: LSP_REFERENCES
- Macro (Ctrl-q l g r)
- Emacs:
If modifier Ctrl is held:\ Macro (Ctrl-q l G r)
- Emacs:
- Macro (Ctrl-q l g r)
- K: CCLS_CALL_HIERARCHY
Macro: (Ctrl-q l c c)- Emacs: ccls-call-hierarchy
- L: CCLS_MEMBER_HIERARCHY
Macro: (Ctrl-q l c m)- Emacs: ccls-member-hierarchy
- M: PRJ_PROJS
Macro: (Ctrl-c p p)- Emacs: helm-projectile-switch-project
Find a projectile project.
- Emacs: helm-projectile-switch-project
- N: HELM_RESUME
Macro: (Ctrl-x c b)- Emacs: helm-resume
Recall the last helm session.
- Emacs: helm-resume
- O: GO_TO
Macro: (Meta-.)- Emacs:
Go to symbol. Uses xref bindings, and works with, for example, LSP.
- Emacs:
- P: GO_BACK
Macro: (Meta-,)- Emacs:
Go back up the chain of previous locations, after a series of GO_TO has been executed. Uses xref bindings, and works with, for example, LSP.
- Emacs:
- Q: LSP_LENS
Macro: (Ctrl-q l T l)- Emacs: lsp-lens-mode
Toggles LSP lens mode.
- Emacs: lsp-lens-mode
- R: LSP_RENAME
Macro: (Ctrl-q l r r)- Emacs: lsp-rename
Rename symbol at point. Good for refactoring.
- Emacs: lsp-rename
- S: FLYCHECK_NEXT_ERROR
Macro: (Ctrl-c ! n)- Emacs: flycheck-next-error
Go to the next Flycheck syntax error.
- Emacs: flycheck-next-error
- T: FLYCHECK_PREV_ERROR
Macro: (Ctrl-c ! p)- Emacs: flycheck-previous-error
Go to the previous Flycheck syntax error.
- Emacs: flycheck-previous-error
- U: MC mark next
Macro: (Ctrl-<)- Emacs: mc/mark-next-like-this
Custom binding for “mark next like this” as a multiple cursor.
- Emacs: mc/mark-next-like-this
A B C D E O □ □ □ □ F G H I J P Q R S T □ K L M N U □ □ □ □ □ □ X V W Y
- A: Quick Double tap enters Boot Mode
Entering boot mode is needed during (re-)programming of the firmware. - B: Quick Double tap enters Tap Layer
This disables double functions of almost all keys, only the Navigation layer remains. The only way to restore normal function is to unplug and reinsert the USB cable. - C: Quick Double tap enters Extra Layer
This is the other layer that can be used as base layer. If Base Layer has been given as QWERTY during qmk compilation, the Extra Layer is COLEMAC_DH, and vice versa. - D: Quick Double tap enters the compile time defined Base Layer
This may be QWERTY or COLEMAK_DH. - E: Prints the current value of TAPPING_TERM.
By default this value is defined in config.h, and it may be volatilely modified at runtime by [J] and [N] of this layer, in order to determine what TAPPING_TERM value fits your needs. That value can then be set in config.h, and qmk recompiled. - F: Super
- G: Meta
- H: Control
- I: Shift
- J: Increases the current value of TAPPING_TERM.
See [E] and [N]. - K: Alt Gr
- L: Quick Double tap enters Function Layer
- M: Quick Double tap enters Media Layer
- N: Decreases the current value of TAPPING_TERM.
See [E] and [J].
- O: GPT_QUERY
- No modifiers
Macro: (Ctrl-c g q) - If Control modifier is held
Macro: (Ctrl-c g t)
- No modifiers
- P: GPT_REPLY
Macro: (Ctrl-c g r) - Q: MEDIA Previous
- R: MEDIA Volume Down
- S: MEDIA Volume Up
- T: MEDIA Next
- U: OU_AUTO
Automatically changes between USB and BT. (Not tested) - V: MEDIA Stop
- W: MEDIA Play
Play/Pause - Y: MEDIA Mute