Wayland · Hyprland · GTK4 v0.6.0 日本語

hyprPanopticon

A Hyprland workspace overview — your workspaces laid out on a circle, each a live thumbnail of what's actually running.

What it does

A radial overlay that covers the focused monitor when you summon it.

01

Ring layout

Workspaces arranged around a circle. The focused one shows at full size; the rest scale down so the whole layout always fits.

02

Live thumbnails

Every window is captured via hyprland-toplevel-export-v1 — even windows on non-visible workspaces — and composed at real geometry.

03

Live refresh

The focused preview is re-captured continuously, and Hyprland events (open/close/move) refresh the overview as it happens.

04

Special workspaces

Scratchpads appear as a numbered column on the left edge. Click one or press its number to toggle.

05

Tunable

Scale falloff, focus width, ring spread, center pull and margins are all configurable via a small TOML file.

06

Nix-first

Run it with a single nix run, or wire it in as a flake input for NixOS / home-manager.

Install

Try it without installing anything:

nix run github:Uliboooo/hyprPanopticon

Then bind it in your Hyprland config:

bind = SUPER, Tab, exec, hyprpanopticon

# optional: blur the overlay backdrop
layerrule = blur, hyprPanopticon
layerrule = ignorealpha 0.2, hyprPanopticon

Supported systems: x86_64-linux, aarch64-linux. Developed against Hyprland 0.55.

Usage

Launch the overlay, then:

InputAction
← ↑ / h krotate focus counter-clockwise
→ ↓ / l jrotate focus clockwise
mouse wheelrotate focus
Enter / Spaceswitch to the focused workspace and close
click a previewswitch to that workspace and close
1–9toggle the numbered special workspace
Esc / qclose without switching

Configuration

Optional, at ~/.config/hyprpanopticon/config.toml. All keys optional; out-of-range values are clamped.

min_scale   = 0.6    # scale of the preview opposite the focus (0.05..1.0)
falloff     = 1.2    # how fast previews shrink away from focus (0.1..10)
focus_width = 0.32   # focused preview width as a fraction of screen (0.1..0.8)
margin      = 24     # screen-edge margin in px (0..200)
spread      = 0.25   # angular density (0..1)
center_pull = 0.0    # pull small side previews toward center (0..1)
per_monitor_workspaces = false   # only the focused monitor's workspaces
show_workspace_index   = false   # badge each preview with its index