Omahub
← All plugins
A

Hot Corners

by Abdul Qabiz

macOS-style hot corners: rest the pointer in a screen corner to run a command.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
4d599f3
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
4d599f3
Reviewed
1 month ago

The plugin is a well-structured hot corners utility that runs user-configured commands and manages its own keybinding block in Hyprland's config. It validates all inputs, uses defensive parsing, and only modifies its own marked sections. No malicious behavior or hidden risks were found.

  • Modifies ~/.config/hypr/bindings.lua, but only within clearly marked delimiters and with strict shortcut validation.
  • Executes user-defined commands via bash -lc, which is inherent to the plugin's purpose and fully under user control.
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/abdul/omarchy-hotcorners --enable
Desktop #Hyprland #quickshell #system

Hot Corners for Omarchy

macOS-style hot corners for Omarchy. Rest the pointer in a corner of the screen for a moment and a command runs — lock the screen, open the menu, start the screensaver, or anything else you can type into a shell.

Includes a settings GUI, themed like the rest of the Omarchy shell, an accent glow that grows while a corner arms, and two ways to keep corners from firing by accident.

The hot corners settings window

Requirements

Omarchy 4 (the Quickshell-based shell) and Hyprland. No other dependencies — the plugin is two QML files, a JS module, and two shell scripts, and every action it offers is a command Omarchy already ships.

Install

omarchy plugin add https://github.com/abdul/omarchy-hotcorners.git --enable --yes
omarchy restart shell

Plugins run as unsandboxed code inside omarchy-shell, so read the source before you enable it — it is two QML files and a JS module.

Use

Open the settings GUI:

omarchy-shell hotcorners-settings toggle

Pick a corner in the diagram, choose an action (or type your own command), and Save. Changes apply immediately — no restart.

Making it reachable

The GUI can set its own keyboard shortcut: click the shortcut button, press the combination you want, and Save. The plugin writes it into a clearly marked block in ~/.config/hypr/bindings.lua and reloads Hyprland:

-- >>> hotcorners (managed by the hotcorners plugin) >>>
o.bind("SUPER + SHIFT + H", "Hot corners", "omarchy-shell hotcorners-settings toggle")
-- <<< hotcorners <<<

Nothing outside those markers is touched, re-saving replaces the block rather than stacking up duplicates, and clearing the shortcut removes it. You can also set it without opening the GUI:

omarchy-shell hotcorners-settings shortcut "SUPER + SHIFT + H"
omarchy-shell hotcorners-settings shortcut ""     # remove it

A menu entry is still yours to add — installing a plugin never edits your config, and the Omarchy menu only reads its own default file plus your extension file. To get one under Setup, add this to ~/.config/omarchy/extensions/omarchy-menu.jsonc (it hot-reloads on save):

"setup.hotcorners": {"icon":"⬚","label":"Hot corners","when":"[[ -e ~/.config/omarchy/plugins/abdul.hotcorners ]]","action":"omarchy-shell hotcorners-settings toggle"}

The when clause hides the row if the plugin is ever removed.

Actions

The dropdown offers the macOS hot corner actions, mapped to their Omarchy equivalents:

macOS Here
Lock Screen omarchy system lock
Start Screen Saver omarchy launch screensaver
Put Display to Sleep hyprctl dispatch 'hl.dsp.dpms("off")'
Notification Center omarchy-shell notifications showHistory
Launchpad omarchy menu toggle apps
Mission Control —
Application Windows Cycle windows, roughly
Desktop —
Quick Note —

Plus what Omarchy and Hyprland offer that macOS does not have a corner for: next / previous / last-used workspace, toggle the scratchpad, cycle windows, the Omarchy and system menus, clipboard history, the emoji picker, a region screenshot, and night light. Anything else goes in the free-text field.

Mission Control has no equivalent. Hyprland ships no window overview; hyprexpo and hyprtasking are out-of-tree plugins it does not load by default. If you install one, add its dispatcher as a custom command — the field takes any shell command. Cycle windows is the nearest built-in, and it steps through windows one at a time rather than showing them all at once.

Note on Put display to sleep: this is real DPMS, so any mouse movement or keypress wakes it — including the movement that carries the pointer out of the corner. It is included for parity, but Lock screen already turns the display off and is usually what you want.

Hyprland dispatchers

Hyprland 0.56 configures in Lua, so hyprctl dispatch takes a Lua expression rather than the older dispatcher argument form. A custom command that needs a dispatcher looks like this:

hyprctl dispatch 'hl.dsp.focus({ workspace = "e+1" })'
hyprctl dispatch 'hl.dsp.workspace.toggle_special("scratchpad")'

hyprctl dispatch dpms off — the pre-Lua form — silently fails with a Lua syntax error, so check anything you copy from an older guide.

Configuration

The GUI writes ~/.config/omarchy/hotcorners.json, which is equally fine to hand-edit — the plugin watches it and reloads on save. It is created with every corner disabled the first time the plugin runs.

{
  "version": 1,
  "triggerSize": 4,
  "dwellMs": 400,
  "cooldownMs": 1500,
  "shortcut": "SUPER + SHIFT + H",
  "requireSuper": false,
  "suppressFullscreen": true,
  "glow": true,
  "corners": {
    "top-left":     { "action": "omarchy system lock" },
    "top-right":    { "action": "" },
    "bottom-left":  { "action": "" },
    "bottom-right": { "action": "omarchy menu" }
  }
}
Key Meaning
triggerSize Size of the corner trigger square, in pixels (1–40).
dwellMs How long the pointer must rest in the corner before firing (0–3000).
cooldownMs Ignore re-entry for this long after a corner fires (0–10000).
shortcut Keybinding that opens the GUI, e.g. SUPER + SHIFT + H. Empty means none.
requireSuper Corners only fire while Super is held. Off by default.
suppressFullscreen Do not fire while a window is fullscreen. On by default.
glow Show the accent bloom that grows while a corner arms. On by default.
corners.<corner>.action Command to run, via bash -lc. Empty disables the corner.

An empty action collapses that corner to nothing: it takes no pointer input at all, so it cannot fire and cannot get in the way.

A malformed config falls back to the defaults rather than taking the shell down with it.

Commands

omarchy-shell hotcorners status              # actions, timings, live trigger rects
omarchy-shell hotcorners trigger top-left    # run a corner's action now
omarchy-shell hotcorners configPath          # where the config lives
omarchy-shell hotcorners-settings toggle     # open/close the settings GUI
omarchy-shell hotcorners-settings shortcut "SUPER + SHIFT + H"

How it works

One transparent layer-shell surface per screen, with its input region masked down to just the enabled corner squares. Everything outside those squares is click-through, so the surface is invisible to the rest of your session. A MouseArea starts the dwell timer on enter and cancels it on exit; the pointer must leave the corner before it can fire again.

Not firing by accident

Two ways to stop a corner going off when you did not mean it, both in the GUI's Behaviour section:

Ignore fullscreen windows (on by default) — a corner will not fire while a window is fullscreen, so parking the pointer during a video is safe. State comes from Hyprland's event stream, not a polling loop.

Hold Super to arm (off by default) — corners fire only while Super is held, which also means dragging a window into an edge cannot trip one. Turning it on adds two binds to the managed block in bindings.lua:

o.bind("Super_L", "Arm hot corners", "omarchy-shell -q hotcorners arm 1", { non_consuming = true })
o.bind("Super_L", "Disarm hot corners", "omarchy-shell -q hotcorners arm 0", { release = true, non_consuming = true })

non_consuming is what keeps SUPER + <key> working — without it these binds swallow the Super press and every Super shortcut on the system stops firing.

The cost is honest: each Super press and release spawns a short-lived process. That is why it is opt-in rather than the default. If you use Super constantly and would rather not pay for it, leave it off — the dwell delay alone already stops most accidental triggers, since throwing the pointer at a corner and clicking is faster than the dwell.

Notes and limitations

  • The top corners sit over the bar. Whatever lands in the trigger square stops reaching the bar, so a top-left corner costs the Omarchy menu button its outermost few pixels. Keep triggerSize small, prefer the bottom corners, or turn on Hold Super to arm.
  • Every screen gets its own corners, at that screen's own edges.
  • Editing the QML needs omarchy restart shell. The QML engine caches plugin components by path, so a plain reload keeps the old version. Config changes need no restart — only code changes do.

Removing it

omarchy plugin remove deletes the plugin folder but runs no hooks, so undo the things this plugin wrote outside its own directory first:

~/.config/omarchy/plugins/abdul.hotcorners/bin/uninstall.sh
omarchy plugin remove abdul.hotcorners

uninstall.sh removes the managed keybinding block from your Hyprland config, reloads Hyprland, and deletes ~/.config/omarchy/hotcorners.json. Pass --keep-config to keep your settings. A menu entry, if you added one, is yours to delete.

What it writes

Only these, and nothing else:

Path When
~/.config/omarchy/hotcorners.json Created with every corner disabled on first run; rewritten when you Save.
~/.config/hypr/bindings.lua Only when you set or clear the shortcut, and only inside its own marked block.

The Hyprland config is never touched unless you deliberately change the shortcut — an ordinary Save that leaves it alone does not rewrite it. The edit is confined to the block between the plugin's own markers; everything else in the file is left byte-for-byte intact, which you can check with git diff if you keep your dotfiles in git.

License

MIT. See LICENSE.