Skip to main content

Wayland keyboard shortcuts overlay — parses your compositor config and displays a styled cheatsheet

Project description

cheatbind

A Wayland overlay that parses your compositor config and displays a styled keyboard shortcuts cheatsheet.

Instead of maintaining a separate shortcuts list, cheatbind reads your actual config file and renders an overlay with categorized keybindings, 3D keyboard-style key pills, and a multi-column layout.

cheatbind screenshot

Features

  • Auto-parses compositor config — no manual keybinding list to maintain
  • Auto-categorizes binds by action type (Applications, Navigation, Workspaces, etc.)
  • 3D keyboard-style key pills with multi-column layout
  • Live search — type to filter keybindings in real-time
  • Merges duplicate keybindings (same action, different keys)
  • Toggle behavior — run again to dismiss
  • Custom CSS themes via ~/.config/cheatbind/style.css
  • Fade-in animation
  • --dry-run mode to preview parsed keybindings in terminal

Supported compositors

  • niri — parses ~/.config/niri/config.kdl
  • More compositors planned (Hyprland, Sway)

Install

Arch Linux (AUR)

yay -S cheatbind

This installs cheatbind and all dependencies (GTK4, gtk4-layer-shell, PyGObject).

PyPI

pipx install cheatbind

System dependencies must be installed separately:

# Arch Linux
sudo pacman -S python-gobject gtk4 gtk4-layer-shell

# Fedora
sudo dnf install python3-gobject gtk4 gtk4-layer-shell

# Ubuntu/Debian (24.04+)
sudo apt install python3-gi gir1.2-gtk-4.0 libgtk4-layer-shell-dev

From source

git clone https://github.com/Xhelliom/cheatbind.git
cd cheatbind
python3 -m venv .venv && .venv/bin/pip install -e .
.venv/bin/cheatbind

Usage

# Auto-detect compositor and show overlay
cheatbind

# Force a specific compositor
cheatbind --compositor niri

# Use a custom config path
cheatbind --config ~/my-niri-config.kdl

# Preview parsed keybindings in terminal
cheatbind --dry-run

Running cheatbind while it's already showing will close the overlay (toggle behavior via PID file).

Press Escape or click anywhere to dismiss. Type to search/filter keybindings live.

niri keybinding example

Mod+Slash hotkey-overlay-title="Aide raccourcis" { spawn "cheatbind"; }

Config annotations (optional)

You can add markers in your niri config for custom sections and column breaks:

binds {
    //##! Applications
    Mod+T hotkey-overlay-title="Terminal" { spawn "alacritty"; }
    Mod+D hotkey-overlay-title="App launcher" { spawn "fuzzel"; }

    //#!
    //##! Navigation
    Mod+Left hotkey-overlay-title="Focus left" { focus-column-left; }

    // [hidden]
    Mod+Secret hotkey-overlay-title="Hidden bind" { do-something; }
}
  • //##! Title — section header
  • //#! — column break
  • // [hidden] — exclude a bind from the overlay
  • hotkey-overlay-title=null — also excludes a bind
  • Without markers, cheatbind auto-categorizes binds by action type

Custom theme

Override the default style by creating ~/.config/cheatbind/style.css. It is loaded on top of the built-in CSS, so you only need to override what you want to change:

/* Example: different background and accent color */
.overlay { background-color: rgba(20, 20, 40, 0.9); }
.section-title { color: #ff9f43; }

NixOS

nix run github:Xhelliom/cheatbind

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cheatbind-0.2.0.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cheatbind-0.2.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file cheatbind-0.2.0.tar.gz.

File metadata

  • Download URL: cheatbind-0.2.0.tar.gz
  • Upload date:
  • Size: 15.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cheatbind-0.2.0.tar.gz
Algorithm Hash digest
SHA256 accce14202bf38de4ad38217e975b773d178d311759ea49db17d04ebc5f39c40
MD5 467b37771c85b44c598392ceae585a12
BLAKE2b-256 71fd3fcf24caee1c183b08b0f656f8f3e8b657a117e77524052be7d870f0558f

See more details on using hashes here.

Provenance

The following attestation bundles were made for cheatbind-0.2.0.tar.gz:

Publisher: release.yml on Xhelliom/cheatbind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cheatbind-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: cheatbind-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for cheatbind-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3483fb1b4f3b1060d7c78071a45a879ee9ab365e5b91781ab9d4c10dc5bff713
MD5 9e03a5cbfc2d7eb5eb70ddfac0d25d9b
BLAKE2b-256 28cdeccf221e8efb14d61c185172d060fa805c6e483f303425224864c106da15

See more details on using hashes here.

Provenance

The following attestation bundles were made for cheatbind-0.2.0-py3-none-any.whl:

Publisher: release.yml on Xhelliom/cheatbind

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page