Skip to content

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 07 Jun 02:27
· 127 commits to main since this release

[1.2.0] - 2026-06-06

Added

  • System tray / minimize to tray. keyd-viz now lives in the system tray
    (StatusNotifierItem over D-Bus, so it works on KDE and any desktop with a
    StatusNotifier host — X11 or Wayland). When a tray is present, closing the window
    hides it to the tray
    instead of quitting — the app keeps running in the background.
    Left-click the icon (or its Show / hide menu item) to summon or dismiss the window;
    Quit fully exits. The tooltip shows the active keyd layer. Where no tray host exists
    (e.g. vanilla GNOME without an AppIndicator extension) the icon is absent and closing
    the window quits as before. Window show/hide is reliable everywhere; raise-to-front on
    Wayland is best-effort (it needs a compositor activation token).
  • Pin (always-on-top). A pin toggle in the view controls keeps the window above other
    windows; compact mode pins automatically. Honored on X11/XWayland. On native Wayland a
    client can't keep itself on top (no such protocol — it's the compositor's job), so the
    in-app pin is a no-op there; use the compositor's keep-above instead (KDE: right-click
    titlebar → More Actions → Keep Above Window, or a KWin rule for class keydviz).

Changed

  • The pin and compact controls are now icon buttons, each with two states (pin /
    pin-off; compact / expand), tinting green when active.

Fixed

  • Modifier/composite layer headers now parse. [layer:mods] (e.g. [nav:C]) and
    composite [a+b] sections were rejected by the config parser, so their bindings were
    silently attributed to the previous section (or dropped). [layer:mods] now merges into
    its base layer and [a+b] is its own layer, matching keyd's grammar.
  • # inside a value is no longer treated as a comment. keyd only treats # as a comment
    at the start of a line; the parser was stripping from the first # anywhere, truncating any
    binding whose value contained one.
  • [global] and [aliases] sections no longer render as bogus layers. keyd special-cases
    these (daemon options / key aliases); the parser was treating every non-[ids] section as a
    layer, so a common [global] block (e.g. overload_tap_timeout) drew a junk board.