Scroll to navigation

STACKTILE(1) General Commands Manual STACKTILE(1)

NAME

stacktile - layout generator for river

SYNOPSIS

stacktile [-h] [--help]
stacktile [-v] [--version]

DESCRIPTION

stacktile is a layout generator for the river Wayland compositor.

stacktile divides the window list into sublayouts. Each sublayout holds at most a pre-configured amount of windows. Sublayouts are themselves arranged in a metalayout.

OPTIONS

-h, --help

Print help text and exit.

-v, --version

Print version and exit.

CONFIGURATION

stacktile uses the INI file format for configuation, meaning variable-value-assignments sorted into sections.

[section]
# This is a comment
variable = value;

On startup stacktile will look for a file in the following locations, in this order:

  • $XDG_CONFIG_HOME/stacktile/config.ini (or $HOME/.config/stacktile/config.ini should $XDG_CONFIG_HOME be unset)
  • /etc/stacktile/config.ini

If no configuration file has been found, stacktile will exit.

SECTION: [config]

This section holds global configuration settings for stacktile, that influence all layouts on all outputs.

runtime-changes = per-output|per-tag|per-dominant-tag;

When changing layout values at runtime, whether to store those changes per output, per focused tag or per dominant focused tag. Defaults to per-dominant-tag.

Dominant means the first active bit from right to left in the tag bitfield. As an example, if tags 1, 2 and 3 are focused, tag 1 will be the dominant one and all runtime changes are stored for tag 1.

SECTION: [output:<identifier>]

This section holds output specific configuration. <identifier> is either the output name (for example "Goldstar Company Ltd LG ULTRAWIDE"), the adaptor name (for example "HDMI-A-1") or the output description. These are compositor specific, use a tool like wlr-randr(1) to see the correcct values for your setup.

layouts = <layouts>;

The list of layouts this output should use, separated by whitespace. The active layout is chosen based on rules explained in the layout section. If the configured rules do not allow any layout to be active, the last layout of this list is used regardless of its rules. Layouts can be used by multiple outputs

SECTION: [layout:<name>]

This section is used to define a layout. The <name> is an arbitrary string without whitespace that is used to identify the layout in the output configuration.

display-name = <name>;

The string stacktile will submit as the name of this layout. This is commonly displayed in status bars. If no display name is onfigured, the name of the layout is used.

metalayout = linear|orthogonal|linear-center|orthogonal-center;

The metalayout controls the arrangement of the sublayouts. The linear metalayout will arrange all sublayouts in a linear stack in the direction of the configured gravity. The orthogonal metalayout will place the first metalayout at the gravity edge while arranging the rest of the sublayouts in a stack orthogonal to the gravity direction behind it. The *-center variants act like the regular variants, however the primary sublayout is placed in the center of the screen.

gravity = left|right|top|bottom;

The direction of the gravity. The primary sublayout will always be placed against this edge. The other sublayouts are arranged in descending fashion away from this edge, according to the configured metalayout.

The gravity can be changed at runtime with user commands.

sublayouts = <sublayouts>;

The sublayouts of the layout, separated by whitespace. Available sublayouts are full, which makes all windows take up all available space in the sublayout; stack, which arranges windows similar to a stack of cards; columns and rows, which arrange windows in a stack of columns or rows (independant of gravity); And orthogonal and parallel, which arrange windows in a stack orthogonal or parallel to the direction of the gravity.

All but the last sublayout must have a maximum amount of windows. This is an integer separated by the sublayout name with a single colon (for example "full:2"). A sublayout will only be activated when all prior sublayouts have already reached their maximum amount of windows. The last sublayout may not not have such a limit, to prevent the layout from breaking if too many windows are present.

The limit of the primary sublayout can be changed at runtime with user commands.

main-ratio = <float>;

The amount of the total usable space to be used for the primary sublayout. The float value must be between 0.05 and 0.95.

This value can be changed at runtime with user commands.

outer-padding = <integer>;

Padding of the metalayout inside the total usable space.

This value can be changed at runtime with user commands.

main-padding = <integer>;

Padding between the primary sublayout and the rest of the sublayouts.

This value can be changed at runtime with user commands.

metalayout-padding = <integer>;

Padding between the sublayouts inside the metalayout, whith the exception of the primary sublayout.

This value can be changed at runtime with user commands.

sublayout-padding = <integer>;

Padding between individual windows inside sublayouts, where applicable.

This value can be changed at runtime with user commands.

all-padding = <integer>;

Alias to set all padding at once.

This value can be changed at runtime with user commands.

tags = <integer>;

The tag this layout should be active on.

If set, the layout will only be used when this tag is active on an output.

USER COMMANDS

stacktile can be controlled at runtime via user commands, which are send via the layout protovol. A tool like riverctl(1) can be used to send these.

stacktile accepts multiple commads at once, separated by a semicolon.

set <variable> =|+=|-= <value>;

Set a runtime configurable variable to a new value. Suppoerted values are gravity, main-limit, main-ratio, outer-padding, main-padding, metalayout-padding, sublayout-padding and all-padding.

See the matching variables in the layout configuration section for a description and for value limitations.

If directly setting integer variables, multiple possible values can be provided, seprated by colon (for example like this: 20:40:70) and stacktile will cycle through them.

resize-main left|right|top|bottom <value>;

Change the main ratio by the specified amount, so that the divide moves in the specified direction, independant of the gravity.

exit;

Exit stacktile.

AUTHOR

Leon Henrik Plickat

SEE ALSO

river(1), riverctl(1), rivertile(1)

2022-02-23 git.sr.ht/~leon_plickat/stacktile