Skip to content

Lua events

Events

With hl.on, you can define callbacks on events. You can register as many as you want.

hl.on("window.active", function(w)
  hl.notification.create({ text = "Window focused: " .. w.title, timeout = 5000, icon = "ok" })
end)

Or, if you’re working with events that have multiple parameters:

hl.on("workspace.move_to_monitor", function(ws, m)
  hl.notification.create({
    text = "Workspace: " .. ws.name .. " moved to a monitor at x: " .. m.position.x,
    timeout = 4000,
    icon = "ok"
  })
end)

Event list:

EventDescriptionParameters
hyprland.startEmitted once on startNone
hyprland.shutdownEmitted once before Hyprland exitsNone
window.bellEmitted when a window rings the system bell, even if it’s muted.Window
window.openEmitted when a window is fully initialized with window rules applied.Window
window.open_earlyEmitted when a window is created and mapped, but before window rules are applied.Window
window.closeEmitted when a window is closed. It may still be visible during its closing animation.Window
window.destroyEmitted when a window is removed from the compositor. For windows with a close animation, fires after the animation completes.Window
window.killEmitted when a window is forcefully killed via hyprctl kill.Window
window.activeEmitted when the active window changes.Window, int (focus reason)
window.urgentEmitted when a window requests an urgent state.Window
window.titleEmitted when a window title changes.Window
window.classEmitted when a window class changes.Window
window.pinEmitted when a window is pinned or unpinned.Window
window.fullscreenEmitted when the fullscreen status of a window changes.Window
window.update_rulesEmitted when a window’s rules are re-evaluated, e.g. when its title or class changes.Window
window.move_to_workspaceEmitted when a window is moved to a different workspace.Window, Workspace
layer.openedEmitted when a layer surface is opened.LayerSurface
layer.closedEmitted when a layer surface is closed.LayerSurface
monitor.addedEmitted when a monitor is connected and ready.Monitor
monitor.removedEmitted when a monitor is disconnected and removed.Monitor
monitor.focusedEmitted when the active monitor changes.Monitor
monitor.layout_changedEmitted when the monitor arrangement changes. This occurs when a monitor is added or removed, a monitor’s resolution or refresh rate is changed, or the config is reloaded with different rules.None
workspace.activeEmitted when the active workspace on a monitor changes.Workspace
workspace.special_activeEmitted when the opened special workspace on a monitor changes. Workspace of nil means no special workspace is open.Workspace, Monitor
workspace.createdEmitted when a workspace is created.Workspace
workspace.removedEmitted when a workspace is removed.Workspace
workspace.move_to_monitorEmitted when a workspace is moved to a different monitor.Workspace, Monitor
config.reloadedEmitted when the config has been reloaded and applied.None
config.props_refreshedEmitted when a prop refresh event is executed.Bool: true if the prop refresh event is being executed as scheduled, false if executed prematurely with the Lua function
keybinds.submapEmitted when the active submap changes. An empty string means the default submap was restored.String: Submap Name
screenshare.stateEmitted when a screenshare session starts or stops.Bool: Active, Integer: Type, String: Name
input.keyboard.keyEmitted when a key is pressed or released.Integer: XKB keycode, Integer: Unix timestamp that the event occurred, Integer: Can be released (0), pressed (1), or repeated (2)
Last updated on