This plugin is a modified version of Hyprland's Master layout.
The primary change is that it allows an arbitrary number of non-master 'stacks'. This can be changed dynamically per-workspace.
The layout is sort of a combination of XMonad's 'MultiColumns' and Hyprland's Master layout.
Default values are meant to produce a similar experience to the existing Master layout.
plugin {
nstack {
layout {
orientation=left
new_on_top=0
new_is_master=1
no_gaps_when_only=0
special_scale_factor=0.8
inherit_fullscreen=1
stacks=2
center_single_master=0
mfact=0.5
single_mfact=0.5
}
}
}
stacks
The number of total stacks, including the master.mfact
If this is set to 0 the master is the same size as the stacks. So if there is one master and 2 stacks they are all 1/3rd of the screen width(or height). Master and 3 stacks they are all 1/4th etc.single_mfact
The size of a single centered master window, when center_single_master is set.center_single_master
When there is a single window on the screen it is centered instead of taking up the entire monitor. This replaces the existingalways_center_master
and has slightly different behavior.
All configuration variables are also usable as workspace rule layout options. Just prefix the setting name with 'nstack-'
workspace=2,layoutopt:nstack-stacks:2,layoutopt:nstack-single_mfact:0.85
Two new dispatchers
resetsplits
Reset all the window splits to default sizes.setstackcount
Change the number of stacks for the current workspace. Windows will be re-tiled to fit the new stack count.
Two new-ish orientations
orientationhcenter
Master is horizontally centered with stacks to the left and right.orientationvcenter
Master is vertically centered with stacks on the top and bottom.orientationcenter
An alias fororientationhcenter
- Run
hyprpm add https://github.com/zakk4223/hyprNStack
and wait for hyprpm to build the plugin. - Run
hyprpm enable hyprNStack
- Set your hyprland layout to
nstack
.
Hyprland plugins basically have to be user-compiled and loaded. You probably need to compile and install hyprland yourself (if not using a package that exports the headers, e.g. the one on Arch's official repos).
If your package does not export headers, see the this part of the hyprland wiki
Then:
- Build hyprNStack
make
- Copy the resulting nstackLayoutPlugin.so to some place
cp nstackLayoutPlugin.so ~/.config/hypr/plugins
- Modify your hyprland.conf to load the plugin
exec-once=hyprctl plugin load $HOME/.config/hypr/plugins/nstackLayoutPlugin.so
- Set your hyprland layout to
nstack
.
Installing via hyprload is supported.
- Add the following to your
hyprload.toml
oncehyprload
is running:
plugins = [
"zakk4223/hyprNStack",
{ local = "https://github.com/zakk4223/hyprNStack", branch = "main", name = "hyprNStack" },
]
- Reload/Update your plugins and set your hyprland layout to
nstack
.
- Improve mouse resizing of stacks
- Improve drag and drop rearranging of windows in and between stacks
- Allow resizing of single master window