Omahub
← All plugins
A

Astro Keybind Editor

by astrofoundry

Keybindings viewer with interactive rebinding

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
01e1752
Scanned
1 month ago

No potentially dangerous behavior detected in the analyzed commit.

Automated analysis only — not a security guarantee.

AI advisory review

No obvious issues detected

Language-model assessment · ~deepseek/deepseek-v4-flash-latest — advisory only

Low
AI risk level
Low
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
01e1752
Reviewed
1 month ago

The plugin is a keybinding editor that modifies Hyprland configuration files and reloads the compositor, which is expected functionality. The code is transparent, well-documented, and includes safety measures like backups and rollback on config errors. The deterministic scan found no issues, and my review confirms no malicious or hidden behavior.

  • The install.sh script modifies hyprland.lua and reloads Hyprland, which could disrupt the user's session, but this is clearly documented and part of the plugin's purpose.
  • The plugin writes to configuration files and executes hyprctl reload, which could potentially cause config errors, but the scripts validate and roll back on failure.
  • The plugin fires a hook (keybind-remap) that could be used for automation, but this is opt-in and documented.
How this check works

This review combines the deterministic scan (the rule-based results above) with an independent look at the plugin's code by a language model. The model reads a trimmed sample of the repository's files, the manifest, and the README, then gives a plain-language risk level and a recommendation: install (no notable danger), review (look closer first), or avoid (clearly dangerous).

It runs on the same analyzed commit as the deterministic scan and is strictly advisory — it is not a security guarantee and never blocks a plugin by itself. A human moderator still reviews plugins before they are listed.

AI advisory only — automated analysis, not a security guarantee.

Install
$ omarchy plugin add https://github.com/astrofoundry/omarchy-keybind-editor --enable
System #Hyprland #system

Astro Keybind Editor

A shell plugin for Omarchy Quattro that turns the keybindings viewer into an editor. It lists every effective Hyprland binding with a Change button. Press the new combination in a capture dialog and the rebind applies immediately. No config editing, no reload.

Demo: search, the capture dialog, renaming a default, deleting it to the Removed section, and restoring it

Features

  • Rebinds any binding, including the Omarchy defaults.
  • Conflicts show in orange. If you apply anyway, the combo is removed from the other action.
  • Reset a changed binding to its default: hover its marker and click "reset".
  • Add custom keybindings: press a combo, type a description and a command.
  • Delete a binding: the small × button on its row, or Del, then Enter to confirm. A custom binding loses its o.bind line; anything else moves to a Removed section at the bottom of the list, where Restore brings it back.
  • Rename any binding, defaults included: F2 or "Rename…" in the capture dialog. Renamed defaults show a marker; hover it and click "reset name".
  • All rebinds live in one file: ~/.config/hypr/keybind-remaps.lua, all renames in ~/.config/hypr/keybind-renames.lua. Review them, version them, or copy them to another machine. A keybind-remap hook fires on every change, for backups or auto-commits (see Backup).
  • The stock read-only menu stays available: omarchy menu keybindings.

Install

omarchy plugin add https://github.com/astrofoundry/omarchy-keybind-editor.git --enable
bash ~/.config/omarchy/plugins/astrofoundry.keybind-editor/install.sh

The second command installs the config-side hook (see How it works). It is safe to run again. Also on the Omarchy plugin marketplace.

Then bind a key to the editor in ~/.config/hypr/bindings.lua:

hl.unbind("SUPER + K") -- Previously: the read-only keybindings menu.
o.bind("SUPER + K", "Keybindings", "omarchy-shell shell toggle astrofoundry.keybind-editor")

Update

omarchy plugin update astrofoundry.keybind-editor --yes
# Optional: only needed when the release notes say the config-side hook
# changed. Safe to run every time, so run it when in doubt.
bash ~/.config/omarchy/plugins/astrofoundry.keybind-editor/install.sh

Without --yes the first command shows the incoming changes in a pager (q to close) and asks for confirmation. The second one refreshes the hook in ~/.config/hypr/; it is idempotent and leaves your remaps and renames untouched.

Screenshots

<table> <tr> <td align="center"> <a href="screenshots/list.png"><img src="screenshots/list.png" width="230" alt="Keybindings list: every binding gets a delete button and a Change button; rebound entries are marked changed"></a> <br><sub>List</sub> </td> <td align="center"> <a href="screenshots/capture.png"><img src="screenshots/capture.png" width="230" alt="Capture dialog: press the new combination, Enter applies; Rename and Delete links below"></a> <br><sub>Capture</sub> </td> <td align="center"> <a href="screenshots/conflict.png"><img src="screenshots/conflict.png" width="230" alt="Conflict: the combo is taken; Enter overrides and unbinds it from the other action"></a> <br><sub>Conflict</sub> </td> <td align="center"> <a href="screenshots/reset.png"><img src="screenshots/reset.png" width="230" alt="Reset: hovering a changed marker turns it into reset; clicking asks for confirmation"></a> <br><sub>Reset</sub> </td> <td align="center"> <a href="screenshots/add.png"><img src="screenshots/add.png" width="230" alt="Add custom keybinding: combo, description, and command in one dialog"></a> <br><sub>Add custom</sub> </td> </tr> <tr> <td align="center"> <a href="screenshots/rename.png"><img src="screenshots/rename.png" width="230" alt="Rename: F2 or the Rename link turns the capture dialog into a name field, prefilled with the current name"></a> <br><sub>Rename</sub> </td> <td align="center"> <a href="screenshots/removed.png"><img src="screenshots/removed.png" width="230" alt="Removed section: deleted defaults are listed struck through with a Restore button; Enter asks for confirmation"></a> <br><sub>Removed and restore</sub> </td> </tr> </table>

Usage

  • Type to search. Arrows to navigate.
  • Enter or the Change button opens the capture dialog for a row. Del or the × button opens it straight at the delete confirmation, F2 straight at the rename field.
  • In the dialog: press the new combination, then Enter to apply. Backspace clears. Esc cancels. Del deletes the binding after an Enter confirmation, F2 renames it (bare Del and F2 are therefore not capturable as combos; modified combos like Super+Del still are).
  • Capturing a binding's original combination also restores its default. Typing a default's stock name back removes its rename.
  • Removed bindings are listed in a Removed section at the bottom of the list (they match the search like any row). Enter or Restore brings one back; the dialog warns when another binding now holds that combo.
  • Custom bindings land as o.bind(...) lines in ~/.config/hypr/bindings.lua. Changing, renaming, or deleting one edits that line in place, so custom rows never show the changed or renamed marker. A failed reload rolls the file back.
  • Renamed defaults keep their stock position in the list, so the order stays familiar.

Backup

All rebinds live in ~/.config/hypr/keybind-remaps.lua and all renames of default bindings in ~/.config/hypr/keybind-renames.lua. Three options, from manual to automatic:

Copy the files. Copy them anywhere to back up. Copy them back and run hyprctl reload to restore.

Version them in a dotfiles repo. Move the files into your repo and leave symlinks. The editor writes through the symlinks:

mv ~/.config/hypr/keybind-remaps.lua ~/dotfiles/keybind-remaps.lua
ln -s ~/dotfiles/keybind-remaps.lua ~/.config/hypr/keybind-remaps.lua
mv ~/.config/hypr/keybind-renames.lua ~/dotfiles/keybind-renames.lua
ln -s ~/dotfiles/keybind-renames.lua ~/.config/hypr/keybind-renames.lua

Run a script on every change. After each change the editor fires the keybind-remap hook with the applied operations as arguments (set <original> <replacement>, delete <original>, disable <original>, rename <original> <description>, unrename <original>, add <combo> <description> <command>, remove <combo> <description> <command>, update <old-combo> <new-combo>, rename <combo> <description> for a custom binding). Install a script:

omarchy hook install keybind-remap my-script.sh

Combined with the symlink above, this script commits every rebind:

#!/bin/bash
git -C ~/dotfiles add keybind-remaps.lua keybind-renames.lua
git -C ~/dotfiles commit -m "keybind remap: $*" --quiet

How it works

Hyprland reports Lua-registered binds without a recoverable action, so editing binds by rewriting actions is a dead end. Instead the plugin uses the fact that every binding, default or personal, passes through hl.bind when the config loads. install.sh adds a small hook, loaded before the Omarchy defaults, that wraps hl.bind/hl.unbind and rewrites combos according to ~/.config/hypr/keybind-remaps.lua. A remap moves a binding without touching its action. An empty remap removes it. The same hook swaps descriptions according to ~/.config/hypr/keybind-renames.lua, so a renamed default shows its new name everywhere, hyprctl binds included.

The overlay lists binds by re-executing the Hyprland Lua config with a stubbed API, the same technique the stock menu uses. The list always matches what Hyprland registered, remaps included. During that replay the hook also reports the binds it dropped (the Removed section) and each renamed bind's stock description (used for ordering).

Files

File Role
KeybindEditor.qml Overlay UI and capture dialog
KeybindModel.js Parsing, normalization, ordering, conflict logic
extract-binds.lua Lists effective binds from the Lua config
apply-remap.sh Rewrites the remap and rename tables, reloads Hyprland, fires the keybind-remap hook
add-bind.sh Appends a custom o.bind to bindings.lua, validates, rolls back on error
remove-bind.sh Deletes an editor-added o.bind line from bindings.lua, validates, rolls back on error
update-bind.sh Rewrites the combo or description of an editor-added o.bind line in place, validates, rolls back on error
xkb-symbols.sh Keycode/name maps for display and comparison
hypr/keybind-remap-hook.lua The remap layer, installed by install.sh

Uninstall

omarchy plugin remove astrofoundry.keybind-editor

Then remove the require("hypr.keybind-remap-hook") line from ~/.config/hypr/hyprland.lua and delete ~/.config/hypr/keybind-remap-hook.lua. Keep or delete ~/.config/hypr/keybind-remaps.lua and ~/.config/hypr/keybind-renames.lua; without the hook they have no effect.

Requirements

Stock Omarchy (Hyprland Lua config, omarchy-shell, lua, jq, gawk, xkbcli).