Skip to content

Configuration Options

This is the complete runtime option reference for plugin:hyprexpo:* settings. Use the short key names inside a plugin { hyprexpo { ... } } block, or use the fully qualified names when setting options elsewhere in Hyprland config.

Hyprland 0.55 deprecated the custom keyword API that older HyprExpo configs used. HyprExpo no longer registers hyprexpo_gesture or hyprexpo_workspace_method. Use plugin:hyprexpo:workspace_method for workspace placement and the Lua API for gestures.

Example Shape

ini
plugin {
    hyprexpo {
        columns = 3
        gaps_in = 5
        gaps_out = 0
        bg_col = rgb(111111)
        workspace_method = center current
        keynav_enable = 1
        label_enable = 1
        border_width = 2
    }
}

In hyprland.lua, use hl.config() with a nested plugin.hyprexpo table:

lua
hl.config({
    plugin = {
        hyprexpo = {
            columns = 3,
            gaps_in = 5,
            gaps_out = 0,
            bg_col = "rgb(111111)",
            workspace_method = "center current",
            keynav_enable = 1,
            label_enable = 1,
            border_width = 2,
        },
    },
})

hl.plugin.hyprexpo is the Lua helper namespace for dispatchers and gestures; it is not the configuration block.

Layout and Behavior

keytypedescriptiondefault
plugin:hyprexpo:columnsintdesktops per row, clamped to 1..73
plugin:hyprexpo:gaps_inintspacing between tiles in pixels5
plugin:hyprexpo:gaps_outintouter margin around the grid in pixels0
plugin:hyprexpo:bg_colcolorgrid background color0xFF111111
plugin:hyprexpo:workspace_methodstringplacement: center current or first <workspace>center current
plugin:hyprexpo:skip_emptybool intskip empty workspaces using selector m when enabled0
plugin:hyprexpo:max_workspaceintwhen skip_empty = 0, cap sequential overview tiles at this workspace ID; 0 keeps Hyprland selector behavior0
plugin:hyprexpo:gesture_distanceintswipe distance considered complete200
plugin:hyprexpo:cancel_keystringcomma-separated key names that close overview without selecting; none or off disablesescape
plugin:hyprexpo:show_cursorbool intkeep the cursor visible while overview is open; set 0 for old hidden-cursor behavior1
plugin:hyprexpo:show_pinned_windowsbool intrender pinned/PiP windows in workspace preview thumbnails; default 0 hides them from previews only0

Pinned windows, including browser Picture-in-Picture windows, stay pinned and visible in normal Hyprland. By default HyprExpo hides them only while capturing workspace preview thumbnails so they do not appear on every tile. Set show_pinned_windows = 1 to opt in to the old preview behavior.

Tile Appearance

keytypedescriptiondefault
plugin:hyprexpo:tile_roundingintcorner radius in pixels for workspace previews0
plugin:hyprexpo:tile_rounding_powerfloatrounding curve exponent2.0
plugin:hyprexpo:tile_rounding_focusintfocused tile radius; -1 inherits tile_rounding-1
plugin:hyprexpo:tile_rounding_currentintcurrent tile radius; -1 inherits tile_rounding-1
plugin:hyprexpo:tile_rounding_hoverinthovered tile radius; -1 inherits tile_rounding-1
plugin:hyprexpo:border_widthintborder thickness in pixels2
plugin:hyprexpo:border_colorstringdefault border for non-highlighted tiles; solid color or gradientempty
plugin:hyprexpo:border_color_currentstringcurrent workspace tile border; solid color or gradientrgb(66ccff)
plugin:hyprexpo:border_color_focusstringkeyboard-focused tile border; solid color or gradientrgb(ffcc66)
plugin:hyprexpo:border_color_hoverstringpointer-hovered tile border; solid color or gradientrgb(aabbcc)
plugin:hyprexpo:border_grad_currentstringdeprecated current-tile gradient fallback; use border_color_currentempty
plugin:hyprexpo:border_grad_focusstringdeprecated focused-tile gradient fallback; use border_color_focusempty
plugin:hyprexpo:border_grad_hoverstringdeprecated hovered-tile gradient fallback; use border_color_hoverempty
plugin:hyprexpo:border_stylestringdeprecated compatibility key; border style is detected from the color formatsimple

Drag-Drop Window Styling

These options style the visual feedback shown while dragging a window between workspace previews. HyprExpo renders the under-pointer drag proxy and, while the pointer is over a valid target workspace, a positional landing proxy inside that target tile. Empty border color values inherit the focused tile border, so the default look stays unchanged until you opt into drag/drop-specific styling.

The landing proxy is visual-only in this milestone. It previews drop intent; the actual release still uses the existing safe workspace move behavior.

keytypedescriptiondefault
plugin:hyprexpo:drag_drop_proxy_colorcolortranslucent dragged-window proxy before the move threshold is crossed0x24EDB342
plugin:hyprexpo:drag_drop_proxy_active_colorcolordragged-window proxy after movement is active0x3DEDB342
plugin:hyprexpo:drag_drop_proxy_border_colorstringproxy border; accepts solid colors or gradients, empty inherits border_color_focus / border_grad_focusempty
plugin:hyprexpo:drag_drop_proxy_border_widthintproxy border width; -1 inherits max(2, border_width + 1), 0 disables-1
plugin:hyprexpo:drag_drop_proxy_roundingintproxy corner radius in pixels; -1 inherits the automatic focused-tile rounding-1
plugin:hyprexpo:drag_drop_source_border_colorstringsource workspace border while a drag/drop move is active; accepts solid colors or gradients, empty inherits focus borderempty
plugin:hyprexpo:drag_drop_source_border_widthintsource workspace border width while dragging; -1 inherits border_width, 0 disables-1

Color Values

Color-backed settings such as bg_col, label_color*, label_bg_color, and selection_label_color use Hyprland color parsing. Solid border colors are strings because border settings also accept gradient specs.

Solid values:

ini
bg_col = rgb(111111)
border_color_current = rgb(66ccff)

Gradient values:

ini
border_color_current = rgba(33ccffee) rgba(00ff99ee) 45deg

Drag/drop styling values:

ini
drag_drop_proxy_color = rgba(66ccff22)
drag_drop_proxy_active_color = rgba(66ccff44)
drag_drop_proxy_border_color = rgba(66ccffee) rgba(ffcc66ee) 45deg
drag_drop_source_border_color = rgb(ffcc66)
drag_drop_proxy_border_width = 3
drag_drop_proxy_rounding = 10

Workspace Labels

keytypedescriptiondefault
plugin:hyprexpo:label_enablebool intenable workspace labels1
plugin:hyprexpo:label_colorcolorlegacy accepted label color; state-specific colors below control rendering0xFFFFFFFF
plugin:hyprexpo:label_text_modestringlabel text source: token, index, or idtoken
plugin:hyprexpo:label_token_mapstringcomma-separated tokens by visible tile order; empty entries skipempty
plugin:hyprexpo:label_positionstringlabel anchor: top-left, top-right, bottom-left, bottom-right, or centercenter
plugin:hyprexpo:label_offset_xinthorizontal offset from the label anchor in pixels0
plugin:hyprexpo:label_offset_yintvertical offset from the label anchor in pixels0
plugin:hyprexpo:label_showstringvisibility rule: always, hover, focus, hover+focus, current+focus, or neveralways
plugin:hyprexpo:label_color_defaultcolordefault label text colorrgb(ffffff)
plugin:hyprexpo:label_color_hovercolorhovered label text colorrgb(eeeeee)
plugin:hyprexpo:label_color_focuscolorkeyboard-focused label text colorrgb(ffcc66)
plugin:hyprexpo:label_color_currentcolorcurrent workspace label text colorrgb(66ccff)
plugin:hyprexpo:show_workspace_numbersbool intforce labels to show workspace IDs regardless of label_text_mode0
plugin:hyprexpo:workspace_number_colorcolorforced workspace ID label colorrgb(ffffff)
plugin:hyprexpo:label_scale_hoverfloathover scale multiplier for labels1.0
plugin:hyprexpo:label_scale_focusfloatkeyboard-focus scale multiplier for labels1.0
plugin:hyprexpo:label_font_sizeintbase label font size in pixels16
plugin:hyprexpo:label_font_familystringPango font familysans
plugin:hyprexpo:label_font_boldbool intrender label text in bold0
plugin:hyprexpo:label_font_italicbool intrender label text in italic0
plugin:hyprexpo:label_text_underlinebool intunderline label text0
plugin:hyprexpo:label_text_strikethroughbool intstrikethrough label text0
plugin:hyprexpo:label_pixel_snapbool intsnap label positions to whole pixels1
plugin:hyprexpo:label_center_adjust_xintmanual center nudge in pixels for centered labels0
plugin:hyprexpo:label_center_adjust_yintmanual center nudge in pixels for centered labels0
plugin:hyprexpo:label_bg_enablebool intdraw a background bubble behind labels1
plugin:hyprexpo:label_bg_colorcolorlabel background colorrgba(00000088)
plugin:hyprexpo:label_bg_shapestringlabel background shape: circle, square, or roundedcircle
plugin:hyprexpo:label_bg_roundingintradius for rounded label backgrounds8
plugin:hyprexpo:label_paddingintbackground padding around label text in pixels8

Label token maps are comma-separated and follow visible tile order:

ini
label_text_mode = token
label_token_map = 1,2,3,4,5,6,7,8,9,0

Selection Labels

Selection labels are optional overlays used by hyprexpo:kb_select. They let normal workspace labels stay stable while selection tokens use a separate map.

keytypedescriptiondefault
plugin:hyprexpo:selection_label_enablebool intenable the separate selection-token overlay0
plugin:hyprexpo:selection_label_token_mapstringcomma-separated tokens by visible tile order; empty entries skipa,s,d,f,g,q,w,e,r,t,z,x,c,v,b
plugin:hyprexpo:selection_label_positionstringselection label anchor: top-left, top-right, bottom-left, bottom-right, or centertop-right
plugin:hyprexpo:selection_label_offset_xinthorizontal offset from the selection-label anchor in pixels6
plugin:hyprexpo:selection_label_offset_yintvertical offset from the selection-label anchor in pixels6
plugin:hyprexpo:selection_label_colorcolorselection-token text colorrgb(ffcc66)

Example token-based selection:

ini
selection_label_enable = 1
selection_label_token_map = a,s,d,f,g,q,w,e,r,t

Then bind hyprexpo:kb_select to those tokens in the overview submap.

Keyboard Navigation

keytypedescriptiondefault
plugin:hyprexpo:keynav_enablebool intenable keyboard navigation and the overview submap behavior1
plugin:hyprexpo:keynav_wrap_hbool intwrap horizontally at row edges1
plugin:hyprexpo:keynav_wrap_vbool intwrap vertically at column edges1
plugin:hyprexpo:keynav_reading_orderbool intuse row-major horizontal movement instead of spatial movement0

Safe Failure Behavior

Invalid columns, workspace methods, label tokens, border colors, drag/drop border colors, gradient values, and bool-int options are expected to fail safely. The plugin should log invalid values or use a fallback instead of crashing Hyprland during render.

HyprExpo is a maintained Hyprland plugin fork.