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.
Note
This plugin is still maintained, by combined efforts of me and all the awesome contributors. However, I do not have as much time that I could spend on this plugin as before, and Hyprland is a rapidly changing codebase. Therefore, at this time, I could not guarantee that new issues could be resolved promptly. I appreciate your acknowledgement and support for this project!
P.S.: I could recommend giving niri a try for anyone who is considering an alternative to Hyprland. It is a scrolling window manager that offers a great built-in overview feature that allows dragging windows in-between workspaces just like this plugin does. It also has better workspace management as it cleans up empty workspaces like GNOME does.
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