A plugin for Hyprland that implements a workspace overview feature similar to that of KDE Plasma, GNOME and macOS, aimed to provide a efficient way of workspace and window management.
- Supports Hyprland release
>= 0.39. All supported release versions will be pinned. New features and fixes will NOT be backported. Please report build issues on any supported release version.
Also checkout hyprexpo from the official plugin repo that provides a grid style overview!
demo.mp4
- hyprsplit (tested, explicit support)
- split-monitor-workspaces (tested, explicit support)
- hyprexpo (tested, minor bugs)
- Any layout plugin (except ones that override Hyprland's workspace management)
- Overview interface
- Workspace minimap
- Workspace display
- Mouse controls
- Moving window between workspaces
- Creating new workspaces
- Dragging windows between workspace views
- Configurability
- Styling
- Panel background
- Workspace background & border
- Panel on Bottom
- Vertical layout (on left / right)
- Panel top padding (reserved for bar / notch)
- Panel border (color / thickness)
- Unique styling for special workspaces
- Behavior
- Autodrag windows
- Autoscroll workspaces
- Responsive workspace switching
- Responsive exiting
- Exit on click / switch
- Exit with escape key
- Blacklisting workspaces
- Show / hide new workspace and empty workspaces
- Show / hide special workspace (#11)
- Styling
- Animation support
- Multi-monitor support (tested)
- Monitor scaling support (tested)
- aarch64 support (No function hook used)
- Touchpad & gesture support
- Workspace swipe (#9)
- Scrolling through workspace panel
- Swipe to open
To build, have hyprland headers installed and under the repo directory do:
make all
Then use hyprctl plugin load followed by the absolute path to the .so file to load, you could add this to your exec-once to load the plugin on startup
hyprpm add https://github.com/KZDKM/Hyprspace
hyprpm enable Hyprspace
Refer to the Hyprland wiki on plugins, but your flake might look like this:
{
inputs = {
# Hyprland is **such** eye candy
hyprland = {
type = "git";
url = "https://github.com/hyprwm/Hyprland";
submodules = true;
inputs.nixpkgs.follows = "nixpkgs";
};
Hyprspace = {
url = "github:KZDKM/Hyprspace";
# Hyprspace uses latest Hyprland. We declare this to keep them in sync.
inputs.hyprland.follows = "hyprland";
};
};
... # your normal setup with hyprland
wayland.windowManager.hyprland.plugins = [
# ... whatever
inputs.Hyprspace.packages.${pkgs.system}.Hyprspace
];
}- Bind the
overview:toggleor perform a workspace swipe vertically would open / close the panel.
- Window management:
- Click on workspace to change to it
- Click on a window to drag it
- Drag a window into a workspace would move the window to the workspace
- Exiting
- Click without dragging the window exits the overview
- Pressing ESC exits the overview
- Navigating
- When there are many workspaces open, scroll / swipe on the panel to pan through opened workspaces
- Use
overview:toggledispatcher to toggle workspace overview on current monitor - Use
overview:closeto close the overview on current monitor if opened - Use
overview:opento open the overview on current monitor if closed - Adding the
allargument to these dispatchers would toggle / open / close overview on all monitors
plugin:overview:panelColorplugin:overview:panelBorderColorplugin:overview:workspaceActiveBackgroundplugin:overview:workspaceInactiveBackgroundplugin:overview:workspaceActiveBorderplugin:overview:workspaceInactiveBorderplugin:overview:dragAlphaoverrides the alpha of window when dragged in overview (0 - 1, 0 = transparent, 1 = opaque)plugin:overview:disableBlur
plugin:overview:panelHeightplugin:overview:panelBorderWidthplugin:overview:onBottomwhether if panel should be on bottom instead of topplugin:overview:workspaceMarginspacing of workspaces with eachother and the edge of the panelplugin:overview:reservedAreapadding on top of the panel, for Macbook camera notchplugin:overview:workspaceBorderSizeplugin:overview:centerAlignedwhether if workspaces should be aligned at the center (KDE / macOS style) or at the left (Windows style)plugin:overview:hideBackgroundLayersdo not draw background and bottom layers in overviewplugin:overview:hideTopLayersdo not draw top layers in overviewplugin:overview:hideOverlayLayersdo not draw overlay layers in overviewplugin:overview:hideRealLayerswhether to hide layers in actual workspaceplugin:overview:drawActiveWorkspacedraw the active workspace in overview as-isplugin:overview:overrideGapswhether if overview should override the layout gaps in the current workspace using the following valuesplugin:overview:gapsInplugin:overview:gapsOutplugin:overview:affectStrutwhether the panel should push window aside, disabling this option also disablesoverrideGaps
- The panel uses the
windowscurve for a slide-in animation - Use
plugin:overview:overrideAnimSpeedto override the animation speed
plugin:overview:autoDragmouse click always drags window when overview is openplugin:overview:autoScrollmouse scroll on active workspace area always switch workspaceplugin:overview:exitOnClickmouse click without dragging exits overviewplugin:overview:switchOnDropswitch to the workspace when a window is droppped into itplugin:overview:exitOnSwitchoverview exits when overview is switched by clicking on workspace view or byswitchOnDropplugin:overview:showNewWorkspaceadd a new empty workspace at the end of workspaces viewplugin:overview:showEmptyWorkspaceshow empty workspaces that are inbetween non-empty workspacesplugin:overview:showSpecialWorkspacedefaults to falseplugin:overview:disableGesturesplugin:overview:reverseSwipereverses the direction of swipe gesture, for macOS peeps?plugin:overview:exitKeykey used to exit overview mode (default: Escape). Leave empty to disable keyboard exit.- Touchpad gesture behavior follows Hyprland workspace swipe behavior
gestures:workspace_swipe_fingersgestures:workspace_swipe_cancel_ratiogestures:workspace_swipe_min_speed_to_force