An auto-tiler for sway that implements Xmonad-like layouts.
It may be compatible with i3 once i3/i3#3808 is closed, but this is not tested.
Inspired by Bruno Garcia's blog posts 1, 2 and Swaysome.
- Python >= 3.9
- typing_extensions if Python < 3.10
- i3ipc-python
-
NCol
Maintains n columns, with one column being the master column. When n=2, this is equivalent to Xmonad's Tall layout. When n=3, this is equivalent to Xmonad's ThreeColumn layout. Higher ns are supported, but don't currently have bindings.
Supports incrementing and decrementing the number of master windows.
-
Nop
Disables auto-tiling for the workspace, allowing managing containers in normal Sway fashion.
-
Transformations
These transformations can be applied to layouts and can be combined:
- ReflectX - reflect the workspace horizontally.
- ReflectY - reflect the workspace vertically.
- Transpose - convert each column into a row. Equivalent to XMonad's Mirror.
Add something like the following to your sway config file:
exec_always "pkill -f 'python3? .+/swaymonad.py'; ~/.config/sway/swaymonad/swaymonad.py"
bindsym $mod+Return nop promote_window
bindsym $mod+j nop focus_next_window
bindsym $mod+k nop focus_prev_window
bindsym $mod+Shift+Left nop move left
bindsym $mod+Shift+Down nop move down
bindsym $mod+Shift+Up nop move up
bindsym $mod+Shift+Right nop move right
bindsym $mod+Shift+j nop swap_with_next_window
bindsym $mod+Shift+k nop swap_with_prev_window
bindsym $mod+x nop reflectx
bindsym $mod+y nop reflecty
bindsym $mod+t nop transpose
bindsym $mod+f nop fullscreen
bindsym $mod+Comma nop increment_masters
bindsym $mod+Period nop decrement_masters
mode "resize" {
bindsym Left resize shrink width 10px
bindsym Down resize grow height 10px
bindsym Up resize shrink height 10px
bindsym Right resize grow width 10px
bindsym Shift+Left nop resize_master shrink width 10px
bindsym Shift+Down nop resize_master grow height 10px
bindsym Shift+Up nop resize_master shrink height 10px
bindsym Shift+Right nop resize_master grow width 10px
# bindsym n resize set width (n-1/n)
bindsym 2 resize set width 50ppt # 1/2, 1/2
bindsym 3 resize set width 66ppt # 2/3, 1/3
bindsym 4 resize set width 75ppt # 3/4, 1/4
bindsym Shift+2 nop resize_master set width 50ppt
bindsym Shift+3 nop resize_master set width 66ppt
bindsym Shift+4 nop resize_master set width 75ppt
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
mode "layout" {
bindsym t nop set_layout tall
bindsym 3 nop set_layout 3_col
bindsym n nop set_layout nop
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+l mode "layout"
mouse_warping container
focus_wrapping no
Just import flake and use defaultPackage. swaymonad
binary will be available in PATH
{
# ........
inputs.swaymonad = {
url = "github:nicolasavru/swaymonad";
inputs.nixpkgs.follows = "nixpkgs"; # not mandatory but recommended
};
# ........
outputs = { self, nixpkgs, swaymonad }: {
# ........
modules = [
({ self, ... }: {
environment.systemPackages = with pkgs; [
# ........
swaymonad.defaultPackage.x86_64-linux
# ........
];
})
];
};
};
}