Dynamics layouts for i3wm
i3-layouts is a small program that enforces dynamic layout on i3 workspace.
i3-layouts comes with 6 configurable layouts:
vstack: one main windows with a vertical stack of windows.
hstack: one main windows with an horizontal stack of windows.
spiral: each new windows split the previous one, split direction alternates between horizontal and vertical.
2columns: two vertical stacks of equally sized windows.
3columns: one main windows with two vertical stacks of windows.
companion: each columns is made of one main window and one smaller window.
autosplit: automatically choose between vsplit/hsplit depending on the focused windows (inspired by autotiling).
Parameters for each one of these layouts is detailed in the Layout section.
i3-layouts be sure to have the following installed on your system:
Installation with pip
To install, simply use
$ pip install --user i3-layouts
Update with pip
To update, again use
$ pip install --user i3-layouts -U
i3-layouts can be started from a terminal
or better yet, launched from the i3 config file:
Configuration is done directly in the i3 config file (usually
i3-layouts reads the entire config file, filter all
$i3l variables and
keeps the associated values as configuration. Note that user defined variables can be used
$i3l variables, as they will be replaced by their own value.
Assigning a layout to a workspace
To assign a layout to a workspace, use the name of the layout as value for the
followed by its parameters and then the targeted workspace name.
Note that parameters are optional. However, if given, they must respect the order described in the Layouts section.
set $i3l [vstack|hstack|spiral|3columns|2columns|companion|autosplit] <param> ... to workspace [workspace name]
Standard layouts from i3 can also be used:
set $i3l [tabbed|splitv|splith|stacking] to workspace [workspace name]
set $ws1 1 ... set $i3l vstack to workspace $ws1 set $i3l hstack 0.6 up to workspace $ws2 set $i3l spiral 0.6 to workspace $ws3 set $i3l 3columns 0.66 0.5 2 left to workspace $ws4 set $i3l 2columns right to workspace $ws5 set $i3l companion 0.3 0.4 up to workspace $ws6 set $i3l autosplit to workspace $ws7
It's also possible to dynamically switch the current workspace layout
via the provided
i3l command with the layout name and its parameters as argument.
- If a layout name is given, and windows are already present, they will be rearranged to match the selected layout.
i3-layoutswill stop managing the current workspace layout.
i3l [vstack|hstack|spiral|3columns|2columns|companion|autosplit|none] <param> ...
i3l vstack 0.6 i3l none
Layout can also be switched with a key binding via
i3l, for example:
bindsym $mod+s exec i3l vstack 0.6
notify-send after the previous command to receive a quick notification of the current layout:
bindsym $mod+s exec i3l vstack 0.6 && notify-send 'Layout vstack'
Moving windows inside the layout
By default, when moving windows, chances are their position will not match the selected layout.
To keep windows within the layout possible positions,
i3-layouts must manage all
So instead of configuring i3 with something like:
bindsym $mod+j move left bindsym $mod+k move down bindsym $mod+l move up bindsym $mod+semicolon move right
move commands can be forwarded to
bindsym $mod+j exec i3l move left bindsym $mod+k exec i3l move down bindsym $mod+l exec i3l move up bindsym $mod+semicolon exec i3l move right
With this configuration, if a
move command is executed on a workspace managed by
the moved window will stay within the layout. If the workspace is not managed by
i3-layout will forward the
move command to
i3-layout uses marks to keep track of container position, it must know about all
swap commands occurring within a layout.
swap commands can be forwarded to
bindsym $mod+s exec i3l swap container with mark <arg>
Note that currently, only the swap command
with mark is implemented
swap container with id <arg> or
swap container with con_id <arg> will not work).
To swap the focused container with the previously focused one, a custom command is also provided:
bindsym $mod+p exec i3l swap container with previous
Each layout accept some specific parameters. These parameters must be given is the order described below.
One main windows with a vertical stack of windows.
- main window ratio (float between
0.5): ratio of screen width used by the main window
- secondary stack position (
right): vertical stack position relative to the main window
One main windows with an horizontal stack of windows.
- main window ratio (float between
0.5): ratio of screen height used by the window stack
- secondary stack position (
down): horizontal stack position relative to the main window
Each new windows split the previous one, split direction alternates between horizontal and vertical.
- split ratio (float between
0.5): ratio of width or height used by the previous container at each split, the remaining is used by the new container.
- screen direction (
inside): whether new container should be added towards the inside of the screen or the outside.
Two vertical stacks of equally sized windows. New window position alternates between the first and second stack.
- first stack position (
left): first stack position relative to the second stack.
One main windows with two vertical stacks of windows.
- main window ratio [two columns] (float between
0.5): ratio of screen width used by the main window when only two columns are present
- main window ratio [three columns] (float between
0.5): ratio of screen width used by the main window when three columns are present. Width left is distributed equally between the second and third columns
- max number of row in the second columns (int, default
0): the third columns is created only when the second column reach this number of container. If
0is given new container position alternate between the second and third columns.
- second column position (
right): second column position relative to the main window. Note that the third column will have the opposite position (if the second columns is on the left of the main window, the third one will be on the right of the main window)
Each columns is made of one main window and one smaller window (called companion container below).
- odd companion ratio (float between
0.3): ratio of screen height used by the companion container for odd column index
- even companion ratio (float between
0.3): ratio of screen height used by the companion container for even column index
- companion position (
up): position of the companion container relative to the main window.
alt-downalternate this position for each column, starting respectively at
downfor the first column.
Windows are automatically split either vertically or horizontally depending on the focused window dimension.
This layout has no parameters.
- Redraw: when container are closed or moved between workspace,
i3-layoutsneeds to reposition some if not all containers of a given workspace.
xdotoolto simulate the recreation of these containers.
- Marks: to keep track of container position,
i3-layoutsuse i3wm marks. More precisely,
i3-layoutsmarks the first and last container of each workspace.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size i3_layouts-0.13.2-py3-none-any.whl (23.6 kB)||File type Wheel||Python version py3||Upload date||Hashes View|
|Filename, size i3-layouts-0.13.2.tar.gz (19.0 kB)||File type Source||Python version None||Upload date||Hashes View|
Hashes for i3_layouts-0.13.2-py3-none-any.whl