Interception Vimproved
Setting up Interception Vimproved on Debian Bookworm
I started learning vim few months ago and wanted to try vim key bindings like shortcuts on my laptop after trying a mechanical hackable keyboard.
Interception Vimproved is a plugin for interception-tools which combines both caps2esc and space on hold work as special fn
key.
This blog post shows how to setup interception-vimproved using interception-tools on Debian Bookworm.
Step 1: Dependencies
Installing Dependencies to build interception-vimproved on Debian Bookworm GNU/Linux
sudo apt install interception-tools meson libyaml-cpp-dev cmake
interception-tools is a small set of tools for input events of devices,that can be used to customize the behaviour of input keyboard mappings.
The advantage of interception-tools operates at lower level compared to xmodmap by using libevdev and libudev.
Step 2: Clone & Build
Clone interception-vimproved repository and build
$ git clone "https://github.com/maricn/interception-vimproved"
$ cd interception-vimproved
$ sudo make install
Clone the git repository and change the directory, and then launch a make install
command to build.
Step 3: Configuration
Create a new file called udevmon.yaml in /etc/interception and paste the following contents into the file /etc/interception/udevmon.yaml
- JOB: "interception -g $DEVNODE | interception-vimproved /etc/interception-vimproved/config.yaml | uinput -d $DEVNODE"
DEVICE:
NAME: ".*((k|K)(eyboard|EYBOARD)).*"
udevmon.yaml
is like a job specification for udevmon
,specifying that it matches with (k|K)(eyboard|EYBOARD))
input device.
Step 4: Reload udevmon
Reload udevmon using systemctl
$ sudo systemctl restart udevmon
Hack around the config
To change any keybindings or to add new mappings the config file is present in config.yaml located in /etc/interception-vimproved/ when a sudo make install
is launched the config file is
copied to /etc/interception-vimproved/config.yaml
.
my config.yaml has the below shortcuts
- intercept: KEY_CAPSLOCK
ontap: KEY_ESC
onhold: KEY_LEFTCTRL
- intercept: KEY_ENTER
# not necessary: ontap: KEY_ENTER is inferred if left empty
onhold: KEY_RIGHTCTRL
# this is a layer. hold space (onhold) contains several remappings
- intercept: KEY_SPACE
onhold:
# special chars
- from: KEY_E
to: KEY_ESC
# alternative syntax
- {from: KEY_D, to: KEY_DELETE}
- {from: KEY_B, to: KEY_BACKSPACE}
# vim home row
- {from: KEY_H, to: KEY_LEFT}
- {from: KEY_J, to: KEY_DOWN}
- {from: KEY_K, to: KEY_UP}
- {from: KEY_L, to: KEY_RIGHT}
# vim above home row
- {from: KEY_Y, to: KEY_HOME}
- {from: KEY_U, to: KEY_PAGEDOWN}
- {from: KEY_I, to: KEY_PAGEUP}
- {from: KEY_O, to: KEY_END}
# number row, to F keys
- {from: KEY_1, to: KEY_F1}
- {from: KEY_2, to: KEY_F2}
- {from: KEY_3, to: KEY_F3}
- {from: KEY_4, to: KEY_F4}
- {from: KEY_5, to: KEY_F5}
- {from: KEY_6, to: KEY_F6}
- {from: KEY_7, to: KEY_F7}
- {from: KEY_8, to: KEY_F8}
- {from: KEY_9, to: KEY_F9}
- {from: KEY_0, to: KEY_F10}
- {from: KEY_MINUS, to: KEY_F11}
- {from: KEY_EQUAL, to: KEY_F12}
# xf86 audio
- {from: KEY_M, to: KEY_MUTE}
- {from: KEY_COMMA, to: KEY_VOLUMEDOWN}
- {from: KEY_DOT, to: KEY_VOLUMEUP}
# mouse navigation
- {from: BTN_LEFT, to: BTN_BACK}
- {from: BTN_RIGHT, to: BTN_FORWARD}
Interception-tools is packaged on debian,interception-vimproved is not, that is the reason we are building the source of interception-vimproved,hopefully i’ll try packaging it !.
Arch has interception-tools already packaged here is the link
:wq #until next time