hyprNStack
hyprNStack copied to clipboard
Hyprland plugin for N-stack tiling layout
hyprNStack
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.
Configuration
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
}
}
}
Configuration variable differences in comparison to Master Layout
-
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.
Workspace layout options
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
Dispatchers
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
Installing
Hyprpm, Hyprland's official plugin manager (recommended)
- 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
.
Manual
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
.
Plugin-Manager Hyprload
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
.
TODO
- [ ] Improve mouse resizing of stacks
- [X] Improve drag and drop rearranging of windows in and between stacks
- [X] Allow resizing of single master window