Skip to content

HyprVim v2.0.0

Choose a tag to compare

@uhs-robert uhs-robert released this 13 Jun 16:40
· 7 commits to main since this release

Now Supporting Lua

HyprVim has been completely rewritten from the ground up in Lua for Hyprland's new Lua config format (0.55+). This is a major release: a modular plugin architecture, a built-in auto-updater, user-defined commands, and a faster in-process engine that no longer shells out on every keystroke.

HyprVim.Demo.mp4

Warning

This is a breaking release. Your config must be migrated to Lua.

If you are not ready to migrate, stay on the legacy-conf branch.

📋 Requirements

  • Hyprland 0.55+ with Lua plugin/config support
  • eww, jq, socat (optional): required for the which-key HUD
  • git, curl, jq (optional): required by the built-in updater for manual git-checkout installs

🚀 Upgrading from v1.x

This release changes the config format and install/config locations. To migrate:

  1. Move your config to Lua. The old Hyprland .conf keymap is replaced by a Lua setup call. See Configuration.
  2. Reinstall to the new path. HyprVim now lives under $XDG_DATA_HOME (~/.local/share/...) with a shim in your Hyprland Lua plugins dir, see Installation.
  3. Relocate custom themes/overrides to $XDG_CONFIG_HOME.

Not ready to migrate? The legacy-conf branch keeps the old .conf flow (no new features or fixes).

Full guides: docs/guide.

⚠️ Breaking Changes

  • Lua rewrite for Hyprland 0.55+: HyprVim is now a modular Lua plugin for Hyprland's new Lua config format. Requires your config to be migrated to Lua.
  • Install path moved to XDG data dir: HyprVim now installs to $XDG_DATA_HOME instead of the hypr config dir.
  • User theme/config moved to $XDG_CONFIG_HOME: Custom themes and overrides now live under the XDG config directory.

✨ New Features

  • Auto-updater: New update checker with stable, nightly, and pinned channels, plus handling for package-managed and detached nightly installs.
  • User-defined commands: Define your own : commands via config. Adds 10+ built-in commands (opacity/dim via set_prop, resize, size, gaps, tab, move-pixel, and more) with string workspace selectors. In NORMAL mode, type :help to see them all.
  • Command completion cycling: Repeated Tab cycles through completions in the command/prompt bar.
  • User keybind overrides: New keymaps config lets you override submap binds.
  • Public API from setup(): setup() now exposes a public API for programmatic use.
  • * register and live previews: Adds the * selection register, live register-content previews in the which-key HUD, fallback register labels, numbered-register cycling on yank, and count multipliers for paste.
  • Clipboard persistence: The system clipboard is now preserved across vim-mode sessions.
  • Configurable replace input: Non-blocking replace prompts with a configurable input method.
  • Editor returns to submap: vim-open-editor returns to the originating submap on exit.
  • Per-submap which-key timing: Per-submap delay_ms and a global vim_delay_ms, with instant HUD display and a slide animation for the which-key layer.
  • New extras: Tridactyl config and docs; Thunderbird tbkeys gains count and visual-mode support. The wl-kbptr extra has been removed.

🔧 Improvements

  • Bash scripts replaced by Lua modules throughout (window rules, terminal-class detection, theme apply, editor I/O, updater).
  • Terminal-based prompt bar replaces the external menu tool; prompts and clipboard I/O migrated to async APIs supporting concurrent prompts.
  • Declarative Submap.define API with a submap registry and aliases; submap transitions routed through a central Submap API.
  • Custom terminal flags and user tables are deep-merged.
  • Documentation moved from the GitHub wiki into the repo under docs/guide (allowing guides to be version controlled).

⚡ Performance

  • In-process dispatch: Logic runs natively in Hyprland's Lua runtime instead of spawning a shell (and often jq/hyprctl) per keystroke, cutting latency across motions, operators, and submap transitions.
  • Leaner which-key HUD: Register items are built without jq, monitor geometry is passed straight to the renderer, redundant shell cleanup calls are removed, and hidden-HUD closes are skipped.
  • Fewer shell round-trips: Find batches state-file access and the visual-line setup shell call is dropped.

Full changelog: v1.2.3...v2.0.0