Skip to content

loiccoyle/hag

Repository files navigation

hag

A Hotkey AGgregator.

hag is a hotkey aggregator, it tries its best to extract the hotkeys of your software and display them.

It does so by parsing the config files, man pages, command outputs, ... depending on the software.

⌨️ Hotkey parsers

Bellow is a list of implemented hotkey parsers:

  • Alacritty
  • Bash
  • Gimp
  • Inkscape
  • Lf
  • Mpv
  • Neovim
  • Qutebrowser
  • Rofi
  • Sioyek
  • Sxhkd
  • Sxiv
  • Termite
  • Vim
  • Vimiv
  • Zathura
  • Zsh

📦 Installation

hag is meant to be minimal, however some parsers require optional dependencies, which can be individually installed:

  • Mpv: python-mpv -> pip install 'hag[mpv]'
  • Neovim: pynvim -> pip install 'hag[neovim]'
  • Alacritty: pyyaml -> pip install 'hag[alacritty]'

To install hag with all the parser dependencies:

pip install 'hag[all]'

If you just want to use the CLI interface, consider using pipx.

pipx install 'hag[all]'

📖 Usage

$ hag -h
usage: hag [-h] [-lp | -ld] [-d {json,roff,text}] [-m MODE] [-v]
           [{alacritty,bash,gimp,inkscape,lf,mpv,neovim,qutebrowser,rofi,sioyek,sxhkd,sxiv,termite,vim,vimiv,zathura,zsh}]

Hotkey aggregator. All your hotkeys in one place.

positional arguments:
  {alacritty,bash,gimp,inkscape,lf,mpv,neovim,qutebrowser,rofi,sioyek,sxhkd,sxiv,termite,vim,vimiv,zathura,zsh}
                        Extract hotkeys using parser.

optional arguments:
  -h, --help            show this help message and exit
  -lp, --list-parsers   List available hotkey parsers.
  -ld, --list-displays  List available display methods.
  -d {json,roff,text}, --display {json,roff,text}
                        Display method.
  -m MODE, --modes MODE
                        Filter by mode, if supported by parser.
  -v, --version         Show hag version and exit.

🔎 Examples

A few example uses:

  • List sxhkd hotkeys:
    hag sxhkd
  • Display sxhkd hotkeys in json format and format with jq:
    hag sxhkd -d json | jq
  • Show vim Normal and Visual mode hotkeys in rofi:
    hag vim -m Normal -m Visual | rofi -dmenu
  • Use rofi to select hotkey parser and show hotkeys:
    parser="$(hag -le | rofi -dmenu)" && hag "$parser" | rofi -dmenu
  • List your normal and visual mode neovim hotkeys in a man page:
    hag neovim -m Normal -m Visual -d roff | man -l -
  • Create a pdf of your sxhkd hotkeys:
    hag sxhkd -d roff | groff -T ps -m mandoc - | ps2pdf - hotkeys.pdf

🥳 Contributing

If you want to add support for your favourite software, feel free to open issues/PRs!