Skip to main content

i3 - razer

Visualize hotkeys on a Razer keyboard

A tool to show possible hotkeys or commands (e.g. i3 or vim commands) on a Razer keyboard with rgb lighting. It is highly customizable: select which key is lit in which color on which action. I encourage to write your own configuration to match your hotkeys.

Installation

Disclaimer This program only runs on Linux, depends on the linux openrazer client and X server

The openrazer driver can be installed from here, just select your OS and follow the instructions.

To install i3razer run:

$ pip install i3razer

If installed with privileged rights the executable i3razer will already be in the path. Otherwise it can be found in $HOME/.local/bin

Usage

$ i3razer --config CONFIG

This runs i3razer with the given config file. Look here for the configuration. If the config is not given the examle_config will be used.

exec --no-startup-id i3razer --config CONFIG

Add this line to your i3-config to start the visualization on i3 startup.

Contribute

Find and report bugs on github.

Map your Layout

Run i3razer --map to map your keyboard Layout. Consider opening a pull request with the new Layout.

Planned Features

  • modes can have a base mode to inherit from. Useful to combine modes, e.g. mode for num_lock on / off, but still same commands
  • switch mode stack: possibility to return to the previous mode and not to a defined mode (call stack instead of goto)
  • dbus interface to change layout, current_mode, reload config and a program to connect to this interface

Configuration

With the configuration file the user can set the colors of keys and add keybindings to change the colors. The file format is yaml. It consists of the sections colors, keys, color_schemes, modes

Semantic Overview:

  • Colors: define custom colors, e.g. my_red: '0xe01010'
  • Keys: define set of keys for short access, e.g. numbers: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
  • Color schemes: A color scheme specifies the look of the keyboard. Keys can be assigned to colors, or a color effect can be set
  • Modes: Modes define, when to show which color scheme. Color schemes can be shown, depending on which keys are pressed. Modes can switch to another mode to change keys and color schemes

Example Config

Colors

The colors sets values to their color name. The definition is just color_name: '0xrrggbb', where color_ name can be any value except starting with '0x'. Make sure yaml interprets 0xrrggbb as string.

Default colors example:

colors:
  black: '0x000000'
  red:   '0xff0000'
  green: '0x00ff00'
  blue:  '0x0000ff'

Keys

The keys section defines sets of keys. When you have multiple color scheme which wants to set e.g. all numbers to the same color, the number keys can be predefined here. The definition is keyset_name: key_array. For the name all values can be used except the reserved ones.

Reserved keyset names

all: Predefined keyset which contains all keys of the keyboard
type, name, default, inherit, switch_mode, scheme: These names have a predefined usage in the configuration.

Key array definition

A keyarray defines multiple keys. key_name or keyset_name can be included in an array: key1, keyset, key2 The names are separated by ','. In a keyset definition newlines can be included.

keys:
  prime_numbers: 2, 3, 5, 7
  numbers: 0, 1, 4, 6, 8, 9, prime_numbers # contains all numbers (0-9)
  arrows: up, left, down, right
  new_line: # newlines could improve readability
    shift_l,
    shift_r,
    control_l,
    control_r
  all: a # built in keyset, which has all keys of the keyboard

Color Scheme

A color scheme describes the look of the keyboard, which keys are lit in which color or what effect to play. Which color scheme is drawn on the keyboard is determined in the modes section. The default use case of a color scheme is to assign colors to keys: keys: color. Keys is a key array (no newlines allowed) and color is either direct an hexstring '0xrrggbb' of a color defined in the colors section.

color_schemes:
  my_scheme:
    all: green  # sets all keys to green
    numbers: '0xffffff' # the number keys are white
    w, a, s, d: red 

If a key is present in multiple key arrays, the assigned color will be the one defined latest in the file.

# this is directly the scheme definition
override_scheme:
  a: red
  all: black # overrides the previous definition for 'a' to be red and 'a' will be shown black

Advanced color scheme configuration

color scheme inheritance and effect definition

Inheritance

Maybe multiple color schemes wants to set the same colors to many keys, as the schemes are very similar. There is no need for a redundant color scheme definition, as it is possible to inherit from another color scheme:inherit: color_scheme. This adds the color information from the inherited scheme to this scheme.

default:
  all: green
  other_keys: yellow

gaming:
  inherit: default
  w, a, s, d: red
  
some_scheme:
  numbers: orange
  inherit: default # this overrides the numbers defined previously

Effect

To show an effect on the keyboard a color scheme type must be set: type: effect. Possible types are: static, breath, reactive, ripple, spectrum, starlight, wave right, wave left The static type is the default type and does not need to be specified. Each key can be assigned a static color. All other types are keyboard build in effects, they can take a color or time, dependant on the keyboard or effect. With these types (except static) inheritance is not possible, as the definitions are quite simple and one could only inherit from the same type. Colors of the effect are defined with color1: white, up to three colors can be specified. If only one color is needed for the effect color: white will suffice.

Colors per effect:
Effect Number of colors
breath up to three colors
reactive exactly one color
ripple up to one color
starlight up to two colors
spectrum, wave {right / left} no color

If no color is given the effect is always executed with a random color

Effect times

Some effects take a timing value: time: value. If no value is given, the default is used.

Effect Time values, (default) Description
reactive '500', ('1000'), '1500', '2000' milliseconds the pressed key is lit
starlight fast, (normal), slow speed of starlight blinking

All other effects have no time option.

Example

effect_scheme:
  type: reactive 
  color1: green # or just color: green
  time: '1000'

effect_stars:
  type: starlight
  color1: blue
  color2: green
  time: slow

Modes

A Mode defines which color scheme gets drawn on the keyboard. The scheme depends on the currently pressed keys. Possible hotkeys can be visualized on the keyboard, e.g. if the super key is pressed. However sometimes the available hotkeys change, depended on what you do on your computer. Many modes can be defined with different keys to show color schemes, but there needs to be the starting mode default. Switching from one mode to another is done with hotkeys, defined in the mode.

Each mode must have a default color scheme, which will be drawn if no key is pressed: scheme: default_scheme. Displaying other color schemes is done by assigning them to hotkeys: key_combinations: color_scheme.

Key Combinations

Key combinations are an array of combinations, delimited by ','. A combination can be a single key, or multiple keys delimited by '+': key1 + key2 Such a combination is pressed if all the keys in the combination are pressed. The combination with nothing: nothing + key1 + key2 holds only if exactly key1 and key2 are pressed, no other key is allowed to be pressed.

If one of the combinations of the array is pressed, the whole combination array is fulfilled and the corresponding action applied. If multiple combination arrays have a matching combination, the value of array defined first gets applied.

modes:
  default: # default mode must exist, this is the start mode
    scheme: default 
    super_l + shift_l: some_scheme
    super_l: mod_scheme # also holds if super+shift is pressed, but is defined later 
    nothing + control_r, numbers: scheme # more complicated combination

Switch modes

Switching the mode gives a new default color scheme and new hotkeys. It is defined in a mode as follows:

switch_mode:
  key_combinations: next_mode

Example

modes:
  default:
    scheme: color/default
    super_l: super_hotkeys # light key r
    # more hotkeys
    switch_mode:
      nothing + super_l + r: mode/resize

  mode/resize:
    scheme: color/resize
    # no hotkeys to display
    switch_mode:
      nothing + escape, nothing + return: default # switch back to default mode with escape or return

Example config

Here is the default config.yaml which hotkeys are based on the default i3 configuration.

Metadata

Release files for i3razer 0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for i3razer 0.2
File Size Uploaded
i3razer-0.2.tar.gz 25.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for i3razer 0.2
File Interpreter ABI Platform
i3razer-0.2-py3-none-any.whl Python 3 none any Details

Total release size: 48.6 kB

Release files / i3razer-0.2.tar.gz

Download URL i3razer-0.2.tar.gz
Size 25.1 kB
Tags Source
SHA-256 checksum
How to use checksums
378ad59d7091bce7d7d95c5b0557e15392031b99e9fec2ef000876e1f9bc9121
BLAKE2b-256 checksum
How to use checksums
f9dfb40fc4bc301fd86c880ab6e9624cb5d4ff3f48e52c5322702737e6d461cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

Release files / i3razer-0.2-py3-none-any.whl

Download URL i3razer-0.2-py3-none-any.whl
Size 23.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
effa3e18494e53d5918e9c420494bf0af6db9bc04fb3997dacdcc2521e51b37e
BLAKE2b-256 checksum
How to use checksums
83715788c5d6e1fc9e82052ae381b7f2556d589c4e315d2312decc3481f95845
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.10.4

Release history Release notifications | RSS feed

This release

0.2 This release

2 release files

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page