Ir al contenido

Hyprland Multi-Monitor Workspaces

Bash Hyprland v0.41.2 C++ plugin 0 failures @ 10k ops 0 failures @ 1400 edge cases

GitHub: stevenvo780/hyprland-multi-monitor-workspaces


A production-ready Hyprland configuration snapshot for multi-monitor multitasking. The core problem it solves: by default, Hyprland workspace numbers are global — switching workspace 3 on monitor A can yank the view on monitor B. This config, built around the split-monitor-workspaces plugin, makes each monitor manage its own independent workspace set.

It also adds a strict per-monitor workspace limit layer via split-dispatch-strict.sh, enforcing a 2/3/4 cap even in plugin versions that lack native per-monitor limits (v1.1.0).

Published stress-test results: zero failures across 10 000 sequential operations and 2 600 parallel operations.


hypr/
hyprland.conf main config entry point
conf.d/
99-split-monitor-workspaces.conf plugin load + keybinds
scripts/
load-split-plugin.sh loads the compiled .so at Hyprland startup
split-dispatch-strict.sh enforces per-monitor workspace caps
split-limit-adjust.sh adjust caps dynamically at runtime
split-ws-setup.sh initial workspace assignment on login
scripts/
build-plugin.sh compiles the plugin pinned to a specific commit
deploy-config.sh installs config to ~/.config/hypr/
stress-headless.sh automated stress test harness (headless Hyprland)
edgecases-headless.sh edge-case battery (invalid inputs, corrupt state)

split-dispatch-strict.sh intercepts workspace switch requests and clamps them to these limits regardless of what the plugin exposes natively:

MonitorMax local workspaces
Monitor 12
Monitor 23
Monitor 3+4

Caps are adjustable at runtime with split-limit-adjust.sh — no restart needed.


After loading the plugin:

DispatcherEffect
split-workspaceSwitch to a workspace on the current monitor
split-movetoworkspaceMove focused window to a workspace (follow it)
split-movetoworkspacesilentMove focused window without following
split-changemonitorMove focus to another monitor
split-changemonitorsilentMove focus to another monitor silently

ComponentPinned version
Hyprlandv0.41.2
split-monitor-workspacescommit a03a32c6e0f64c05c093ced864a326b4ab58eabf

Ventana de terminal
git clone https://github.com/stevenvo780/hyprland-multi-monitor-workspaces.git
cd hyprland-multi-monitor-workspaces
./scripts/build-plugin.sh

Compiles the plugin .so pinned to the specific commit above against your installed Hyprland headers.


SuiteParametersFailures
Stress ARESTART_CYCLES=30, SEQ_OPS=6000, PAR_WORKERS=12, PAR_OPS=18000
Stress BRESTART_CYCLES=50, SEQ_OPS=10000, PAR_WORKERS=16, PAR_OPS=26000
Edge AOUTPUT_MATRIX='1 2 3 5', RAPID_ITERS=5000
Edge BOUTPUT_MATRIX='3 5', RAPID_ITERS=14000

Edge cases covered by the test battery:

  • Default clamp (2/3/4) with 1, 2, 3, and 5 monitors
  • Invalid inputs: 0, negative numbers, text, empty string, 999999
  • Dynamic limit adjustments at boundary values (1 and 10)
  • Corrupt split-limits.json with automatic recovery
  • Missing plugin .so (graceful degradation — no crash)
  • Stale monitor keys in the limits file

This config is designed for submission to:

Issues and PRs welcome — every desktop setup is a little different.


ComponentTechnology
CompositorHyprland v0.41.2
Pluginsplit-monitor-workspaces (C++), pinned commit
Config languageHyprland config (TOML-like)
ScriptsBash
Test harnessHeadless Hyprland + Bash (stress-headless.sh, edgecases-headless.sh)