Yet another one productivity-oriented keyboard keys remapper for macOS.
It is largely based on Vonng's CapsLock Enhancement, but with a twist:
WASD-style navigation instead of Vim-style.
For those who are more accustomed to arrow keys or FPS controls ᗜωᗜ
This set up is tailored specifically to my workflow and has no aim to cover all possible use cases, though it is easily customizable to your preferences if you like the general idea.
Turn Capslock
into a new modifier – Hyper *
.
Do stuff without moving your hands away from the keyboard's home row:
-
Navigate and edit text quickly
-
Delete words and lines with a single key press
-
Navigate macOS: desktops, apps and tabs
-
Start and switch active apps
-
Control the mouse pointer, buttons and wheels with a keyboard
-
... and other workflow enhancements
Expand
-
macOS
-
Install Karabiner-Elements:
brew install --cask karabiner-elements
-
Download the configuration and allow Karabiner to load it;
-
Enable HyperIJKL in Karabiner-Elements:
Karabiner-Elements → Complex Modifications → Add rule → Enable all
-
Enjoy!
Several non-essential HyperIJKL features (marked in Description section) require additional installation steps. See Advanced Installation for instructions.
Hold Capslock
to activate Hyper *
mode.
Press Capslock
once to send esc
.
Capslock + esc
to toggle Capslock mode.
* |
⌥ |
⇧ |
⌘ |
␣ |
---|---|---|---|---|
Hyper | option | shift | command | space |
button / layer | * |
* ⌘ |
* ⌥ |
* ⌥ ⌘ |
---|---|---|---|---|
i |
up | select line up | paragraph up* | select paragraph up* |
j |
left | select character left | word left | select word left |
k |
down | select line down | paragraph down* | select paragraph down* |
l |
right | select character right | word right | select word right |
u |
home | home with selection | line start | select line, cursor home |
o |
end | end with selection | line end | select line, cursor end |
y |
page up | select previous page | document start* | select up to document start* |
h |
page down | select next page | document end* | select up to document end* |
n |
delete left (backspace) | delete line left | delete word left | - |
m |
delete current line | select current line | move line down | - |
, |
delete current word* | select current word* | move line up | - |
. |
delete right (delete) | delete line right | delete word right | - |
[ |
( | undo | - | - |
] |
) | redo | - | - |
esc |
capslock | - | - | - |
* additional set up required. See Advanced Installation.
Navigate macOS: desktops, windows, tabs, Mission Control and Launchpad.
button / layer | * ⇧ |
---|---|
i |
Mission Control |
j |
Launchpad |
k |
previous tab |
l |
next tab |
u |
previous desktop |
o |
next desktop |
y |
fullscreen |
h |
hide current window |
Use keyboard keys to control the mouse pointer, buttons and wheels.
button / layer | * ⇧ |
* ⌥ ⇧ |
---|---|---|
i |
pointer up | wheel up |
j |
pointer left | wheel left |
k |
pointer down | wheel down |
l |
pointer right | wheel right |
u |
left mouse button | left mouse button |
o |
right mouse button | right mouse button |
h |
middle mouse button | middle mouse button |
These shortcuts duplicate some shortcuts from OS Navigation. Their aim is to grant the ability to navigate windows and desktops while using a mouse with your right hand at the same time.
button / layer | * |
* ⌘ |
---|---|---|
w |
next tab | previous tab |
s |
next desktop | previous desktop |
x |
forward | - |
z |
back | - |
These shortcuts launch applications or switch to a desktop with the said application if it is already running.
* §
starts multiple apps that are configured in hyperijkl.yml
.
§
is placed on top of a tab
on ISO (EU) keyboards,
replace it with `
to get similar results on ANSI (US) keyboards (see Modifying HyperIJKL).
button / layer | * |
* ⌘ |
* ⌥ |
---|---|---|---|
e |
Outlook | Notes | Thunderbird |
r |
IDEA | VSCode | DBeaver |
t |
iTerm | Activity Monitor | Settings |
d |
Postman | Docker | Lens |
f |
Finder | Forklift | Preview |
g |
KeepassXC | Spotify | IINA |
c |
Telegram | Rocket.Chat | Signal |
v |
Zoom | Microsoft Teams | Skype |
b |
Chrome | Firefox | Safari |
§ |
start work env | - | - |
Press * 1
to center the mouse pointer on Display 1. Works with digits from 1 to 4.
button / layer | * |
---|---|
1 |
display 1 |
2 |
display 2 |
3 |
display 3 |
4 |
display 4 |
button / layer | * |
* ⌘ |
---|---|---|
; |
EN | - |
p |
input source (language) 2 | - |
/ |
input source (language) 3 | - |
␣ |
previous input source (language) | next input source (language) in menu |
Press * ;
to select EN input source.
* p
to select the second input source.
* /
to select the third input source.
* ␣
to select the previous input source (like the default ⌥ ␣
in macOS).
* ⌘ ␣
to select the next source in the input menu
(iterates through the full list of input sources like the default ⌥ ⌘ ␣
).
Requires manual set up of additional input sources to work.
You will have to edit hyperijkl.yml
by replacing predefined input language codes to desired ones.
Those input languages should also be configured in macOS.
Reinstall the script (see Modifying HyperIJKL)
after those steps and check if LANG2 and LANG3 shortcuts work.
* additional set up required. See Advanced Installation.
You can make HyperIJKL work on Login Screen.
-
Go to:
Karabiner-Elements → Misc
-
Press
Copy the current configuration to the system default configuration
. You will be prompted for admin password.
You can edit HyperIJKL's shortcuts with the following steps:
-
Open HyperIJKL/mac/hyperijkl.yml;
-
Edit shortcuts (see Karabiner docs for reference);
-
Run in
mac
directory:make all
-
Go to:
Karabiner-Elements → Complex Modifications
-
Delete all the old HyperIJKL's modifications;
-
Press:
Add rule → Enable all
on newly edited modifications.
Advanced Installation of HyperIJKL allows you to use several additional shortcuts, but requires more complex configuration that involves modifying key bindings in macOS and in IntelliJ IDEA.
-
Install Karabiner-Elements:
brew install --cask karabiner-elements
-
Clone HyperIJKL:
git clone https://github.com/RomanYuldashev/HyperIJKL.git
-
Run installation script in HyperIJKL's
mac
directory:make all
This step automatically sets up
DefaultKeyBindings.dict
in macOS. See Setting Up DefaultKeyBindings.dict for details. -
Enable HyperIJKL in Karabiner-Elements:
Karabiner-Elements → Complex Modifications → Add rule → Enable all
-
Set up additional IDEA shortcuts (see Setting Up Additional IDEA Shortcuts).
HyperIJKL requires modification of DefaultKeyBindings.dict for advanced shortcuts to work. If you have no custom key bindings in your macOS — you are good! Otherwise, you will have to manually merge HyperIJKL's key bindings into existing ones. In this case HyperIJKL's advanced installation script will notify you about key bindings conflict.
HyperIJKL utilizes a couple of text navigation actions that are supported by macOS but are rarely recognized by apps. To enable these actions in IntelliJ IDEA you will have to add shortcuts for them either through in-app Settings or by directly modifying configuration files.
-
Perform previous steps of HyperIJKL's Advanced Installation;
-
Go to IDEA configuration directory (directory name may vary between app versions):
cd ~/Library/Application\ Support/JetBrains/[IntelliJIdea]
-
If directory
[IdeaConfigBasePath]/keymaps
doesn't exist, copy it from HyperIJKL'smac/idea
directory and paste here;Else go to
keymaps
, openmacOS.xml
with a text editor and paste all the<action>
blocks from HyperIJKL'smac/idea/keymaps/macOS.xml
into it; -
Go to
[IdeaConfigBasePath]/options/mac
and openkeymap.xml
. Make sure thatactive_keymap
name is aligned with an .xml fromkeymaps
directory:<active_keymap name="macOS" />
-
Restart IDEA;
-
Check if these shortcuts work in IDEA:
* ⌥ i
→ move to beginning of paragraph* ⌥ ⌘ i
→ select previous paragraph* ⌥ k
→ move to end of paragraph* ⌥ ⌘ k
→ select next paragraph
-
Perform previous steps of HyperIJKL's Advanced Installation;
-
Open IntelliJ IDEA;
-
Go to:
Settings → Keymap → Find
-
Add these shortcuts:
Move Caret Backward a Paragraph →
* ⌥ i
Move Caret Backward a Paragraph with Selection →
* ⌥ ⌘ i
Move Caret Forward a Paragraph →
* ⌥ k
Move Caret Forward a Paragraph with Selection →
* ⌥ ⌘ k
Author: Roman Yuldashev (RomanYuldashev@proton.me)
License: Apache 2.0 License
ᗜˬᗜ