Omahub
← All plugins
A

Panorama

by Anders Åstrand

An Exposé-style, theme-aware window overview for the current workspace or all workspaces.

Security review

No obvious issues detected

Deterministic scan — not a security guarantee

None
Risk level
None
Analyzed commit
a6c2343
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

None
AI risk level
None
Recommendation
install
Model
~deepseek/deepseek-v4-flash-latest
Analyzed commit
a6c2343
Reviewed
1 month ago

The plugin is a straightforward QML overlay that displays live window previews via Hyprland's toplevel-export protocol. It performs no network requests, installs no binaries, and only persists user preferences through the standard Omarchy shell configuration mechanism. No obfuscation, destructive commands, or hidden behavior were found.

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/aastrand/omarchy-panorama --enable
Desktop #Hyprland #quickshell #workspaces

Panorama for Omarchy

Panorama showing every open window laid out as live previews

Panorama is a native Omarchy window overview for Hyprland. It presents live, aspect-correct previews from the current workspace or from every workspace in a compact, keyboard-friendly layout.

If you have used macOS Exposé or Mission Control, GNOME's Activities Overview, or Windows Task View, Panorama provides the same kind of at-a-glance window switching for Omarchy. It is an independent project and is not affiliated with Apple, GNOME, or Microsoft.

It follows the active Omarchy theme, highlights the selected window with the theme accent colour, dims every monitor while it is open, and switches workspaces when you select a window elsewhere.

Features

  • Current-workspace and all-workspaces views
  • Live window previews that preserve their real proportions
  • Hidden application helper and tray windows are excluded
  • Size-aware layout that gives larger windows more room
  • Mouse and spatial keyboard navigation
  • Application icons and workspace-aware labels
  • Configurable overview display, dimming, and window labels
  • Theme-derived colours, typography, spacing, and selection outline
  • Dimming across every monitor, with optional background blur
  • Direct activation of windows on other workspaces

Requirements

  • Omarchy 4 with the omarchy-shell plugin system
  • Quickshell 0.3 or newer
  • Hyprland with toplevel-export support

Current Omarchy installations provide these components. Panorama has no other dependencies: it ships two QML files, bundles no third-party code, installs no binaries, and makes no network requests.

Installation

Install and enable Panorama with Omarchy's plugin manager:

omarchy plugin add https://github.com/aastrand/omarchy-panorama.git --enable

Omarchy displays its unsandboxed-plugin warning, clones the repository, validates the manifest, and enables the overlay. Panorama does not modify your Hyprland configuration or any other file on your system; the keybindings and blur rule below are optional steps you apply yourself.

Keybindings

Add the following to ~/.config/hypr/bindings.lua:

o.bind("CTRL + UP", "Panorama all workspaces", "omarchy-shell shell summon io.github.aastrand.panorama all")
o.bind("CTRL + DOWN", "Panorama current workspace", "omarchy-shell shell summon io.github.aastrand.panorama current")
  • Ctrl+Up shows windows from every workspace.
  • Ctrl+Down shows windows from the current workspace.

You can also open or switch either view directly:

omarchy-shell shell summon io.github.aastrand.panorama all
omarchy-shell shell summon io.github.aastrand.panorama current

summon opens Panorama or switches its scope immediately; use Esc to close. If you prefer a second key press to close the overview, replace summon with toggle, but changing scope then requires closing it first. The final argument is the scope, and anything other than all is treated as the current workspace.

Settings

Panorama settings

Panorama keeps configuration out of the window overview itself. Open its dedicated settings view from a terminal:

omarchy-shell shell summon io.github.aastrand.panorama '{"view":"settings"}'

You can bind that command in ~/.config/hypr/bindings.lua if you expect to change settings frequently:

o.bind("CTRL + SHIFT + DOWN", "Panorama settings", "omarchy-shell shell summon io.github.aastrand.panorama '{\"view\":\"settings\"}'")

The settings view provides:

  • Overview display: follow the focused display or use a specific connected output such as DP-1. If the selected output is disconnected, Panorama falls back to the display where it was invoked.
  • Background dimming: light, normal, or dark. This controls Panorama's translucent scrim; compositor blur remains the separate, optional Hyprland integration described below.
  • Window labels: icon and title, title only, or hidden. The application and “Preview unavailable” fallback inside an uncapturable window remains visible even when the label beneath previews is hidden.

Changes are applied and saved immediately as inline fields on Panorama's entry in ~/.config/omarchy/shell.json, which is Omarchy's standard storage model for non-bar plugins. Panorama creates no separate settings or state file. The current-workspace view always uses the workspace where Panorama was invoked, even if the overview is configured to appear on another display.

Background blur

Add this layer rule to ~/.config/hypr/hyprland.lua. Panorama dims every monitor on its own; this rule is what adds blur behind the dimming, and the active Omarchy theme continues to control the blur strength:

hl.layer_rule({
  name = "panorama-background-blur",
  match = { namespace = "^io[.]github[.]aastrand[.]panorama([.]backdrop)?$" },
  blur = true,
  ignore_alpha = 0.1,
})

Reload Hyprland after changing the configuration:

hyprctl reload
hyprctl configerrors

Controls

  • Click a preview to activate that window.
  • Hover a preview to move the selection to it.
  • Use the arrow keys or h, j, k, and l to move the selection.
  • Press Enter to activate the selected window.
  • Press Esc or click the background to close Panorama.

How it works

Panorama runs inside the existing omarchy-shell process. It uses Quickshell's Hyprland model to enumerate windows and ScreencopyView to request live per-window previews through Hyprland's toplevel-export protocol.

Capture is best-effort. If a client does not provide a capture handle, Panorama keeps the window selectable using its application ID and title. It does not write screenshots or preview caches to disk, and it reads no data beyond what the compositor already reports about your own windows.

Thumbnails are drawn on the configured overview display. Other monitors receive a dimming layer so the overview reads as a desktop-wide mode.

Source overview

File Purpose
manifest.json Plugin metadata and the overlay entry point
Overlay.qml Entry point: shell contract, window model, layout, keyboard handling, panel surfaces
SettingsCard.qml Dedicated settings UI for display, dimming, and window labels
WindowTile.qml One thumbnail: live capture, fallback text, icon and title label, hit testing
preview.png Screenshot used in this README
settings.png Settings-view screenshot used in this README

The QML files carry inline documentation covering the omarchy-shell plugin contract, settings persistence, the layout algorithm, and the theme tokens they read.

Development

Validate the manifest after making changes:

omarchy plugin validate .

An installed plugin normally reloads automatically. To force rediscovery, run:

omarchy-shell shell rescanPlugins

Panorama logs a line to the shell journal each time it opens, which is the quickest way to confirm the scope and window count it received.

Removal

Remove the plugin through Omarchy:

omarchy plugin remove io.github.aastrand.panorama

If you added the optional integration, also remove the two Panorama entries from ~/.config/hypr/bindings.lua and the panorama-background-blur layer rule from ~/.config/hypr/hyprland.lua. Then reload Hyprland:

hyprctl reload
hyprctl configerrors

Panorama leaves nothing else behind: no state files, caches, or configuration of its own.

References

License

Panorama is available under the MIT License. preview.png is an original screenshot of Panorama and is covered by the same licence.

Exposé and Mission Control are trademarks of Apple Inc. Windows is a trademark of Microsoft Corporation. Other names may be trademarks of their respective owners.