06 minute read

An update on Unlocking more than 10 workspaces in Hyprland

A small tweak replaced a workaround I used daily. Same goal, fewer moving parts, and a setup that finally feels like it belongs.

Back in March, I wrote about unlocking more than 10 workspaces in Hyprland. The solution I landed on used scratchpad as a staging area. It worked, but it always felt like a workaround.

That was then. This is now.

A cleaner solution

I’ve since replaced the scratchpad flow with something that fits much better into how Omarchy already works. The new approach uses Hyprland’s submap feature—a built-in way to create temporary keybinding modes.

Instead of routing everything through scratchpad, I enter a short-lived mode, type the workspace number, and confirm. That’s it.

The bindings are simple:

You press the shortcut, type “88”, hit Enter, and you’re in workspace 88. No scratchpad. No extra terminal windows. No dancing around.

The actual setup is as follows:

YAML
1234567891011121314151617181920212223242526272829303132
bindd = SUPER ALT, EQUAL, Go to workpsace, exec, notify-send -t 0 " Go to workspace" "Type number + Enter\n(Esc to cancel)" && hyprctl dispatch submap workspace-go-to
bindd = SUPER ALT SHIFT, EQUAL, Move active window to workspace, exec, notify-send -t 0 " Move window to workspace" "Type number + Enter\n(Esc to cancel)" && hyprctl dispatch submap workspace-move-to

submap = workspace-go-to
bind = , 0, exec, system-workspaces-10-plus go-to 0
bind = , 1, exec, system-workspaces-10-plus go-to 1
bind = , 2, exec, system-workspaces-10-plus go-to 2
bind = , 3, exec, system-workspaces-10-plus go-to 3
bind = , 4, exec, system-workspaces-10-plus go-to 4
bind = , 5, exec, system-workspaces-10-plus go-to 5
bind = , 6, exec, system-workspaces-10-plus go-to 6
bind = , 7, exec, system-workspaces-10-plus go-to 7
bind = , 8, exec, system-workspaces-10-plus go-to 8
bind = , 9, exec, system-workspaces-10-plus go-to 9
bind = , Return, exec, system-workspaces-10-plus go-to enter
bind = , Escape, exec, system-workspaces-10-plus go-to escape
submap = reset

submap = workspace-move-to
bind = , 0, exec, system-workspaces-10-plus move-to 0
bind = , 1, exec, system-workspaces-10-plus move-to 1
bind = , 2, exec, system-workspaces-10-plus move-to 2
bind = , 3, exec, system-workspaces-10-plus move-to 3
bind = , 4, exec, system-workspaces-10-plus move-to 4
bind = , 5, exec, system-workspaces-10-plus move-to 5
bind = , 6, exec, system-workspaces-10-plus move-to 6
bind = , 7, exec, system-workspaces-10-plus move-to 7
bind = , 8, exec, system-workspaces-10-plus move-to 8
bind = , 9, exec, system-workspaces-10-plus move-to 9
bind = , Return, exec, system-workspaces-10-plus move-to enter
bind = , Escape, exec, system-workspaces-10-plus move-to escape
submap = reset

I’m also emitting a small notification when entering the submap. It does two things: it reminds me that I’m in a different mode—where my usual keybinds won’t work—and it tells me exactly what to do next.

There is a repo for this

I ended up extracting this into a small open source repo, including the helper scripts that handle the number input and dispatching.

If you want to use this setup or tweak it to your liking, you can grab it here: pmpinto/hyprland-workspaces-above-10

It should be straightforward to drop into an existing Hyprland config, especially if you’re already using submaps.

Why this is better

The biggest difference is that this feels native. Submaps are already part of Omarchy, so this isn’t introducing a new pattern. It just extends one that’s already there. No custom prompts, no floating windows, no extra rules.

It also frees up scratchpad. Before, it doubled as a routing mechanism, which meant I had to be careful with anything I actually wanted to keep there. That friction is gone.

Now scratchpad goes back to what it’s good at: holding things I want nearby but out of the way. I keep a permanent dotfiles session there, for example. If something feels off, I hit SUPER + S and I’m straight into Neovim with the repo open.

The interaction itself is smoother too. Trigger, type, confirm. It’s quick, predictable, and doesn’t pull me out of what I’m doing.

Takeaways

The original approach worked, but it competed with scratchpad and relied on extra moving parts.

This one leans on built-in Hyprland features and fits naturally into the rest of the setup.

Sometimes the improvement isn’t in refining the workaround—it’s in noticing the feature that was already there.

Photo of Pedro