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
stacksThe number of total stacks, including the master.mfactIf 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_mfactThe size of a single centered master window, when center_single_master is set.center_single_masterWhen there is a single window on the screen it is centered instead of taking up the entire monitor. This replaces the existingalways_center_masterand 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
resetsplitsReset all the window splits to default sizes.setstackcountChange the number of stacks for the current workspace. Windows will be re-tiled to fit the new stack count.
Two new-ish orientations
orientationhcenterMaster is horizontally centered with stacks to the left and right.orientationvcenterMaster is vertically centered with stacks on the top and bottom.orientationcenterAn alias fororientationhcenter
Installing
Hyprpm, Hyprland's official plugin manager (recommended)
- Run
hyprpm add https://github.com/zakk4223/hyprNStackand 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.tomloncehyprloadis 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