/////
vim:set ts=4 sw=4 tw=82 noet:
/////
sway (5)
========

Name
----
sway - configuration file and commands

Description
-----------

A sway configuration file is a list of sway commands that are executed by sway
on startup.  These commands usually consist of setting your preferences and
setting key bindings. An example config is likely present in /etc/sway/config
for you to check out.

These commands can be executed in your config file, via **sway-msg**(1), or via
the bindsym command.

Commands
--------

The following commands may only be used in the configuration file.

**bar** <block of commands>::
	Append _{_ to this command, the following lines will be commands that
	configure **swaybar**, and _}_ on its own line to close the block.
	+
	See **sway-bar**(5) for details.

**input** <input device> <block of commands>::
	Append _{_ to this command, the following lines will be commands to configure
	the named input device, and _}_ on its own line will close the block.
	+
	See **sway-input**(5) for details.

**set** <name> <value>::
	Creates a substitution for _value_ that can be used with $_name_ in other
	commands.

The following commands cannot be used directly in the configuration file.
They are expected to be used with **bindsym** or at runtime through **swaymsg**(1).

**border** <normal|pixel> [<n>]::
	Set border style for focused window. _normal_ includes a border of thickness
	_n_ and a title bar. _pixel_ is just the border without title bar. Default is
	_normal_ with border thickness 2.

**border** <none|toggle>::
	Set border style for focused window to _none_ or _toggle_ between the
	available border styles: _normal_, _pixel_, _none_.

**new_window** <normal|none|pixel> [<n>]::
	Set default border style for new windows.

**new_float** <normal|none|pixel> [<n>]::
	Set default border style for new floating windows. This does only apply to
	windows that are spawned in floating mode.

**exit**::
	Exit sway and end your Wayland session.

**floating** <enable|disable|toggle>::
	Make focused view floating, non-floating, or the opposite of what it is now.

**floating_maximum_size** <width> x <height>::
	Specifies the maximum dimensions of floating windows.
	Uses the container dimensions as default.
	-1 x -1 will remove any restriction on dimentions.
	0 x 0 has the same behavior as not setting any value.
	If in conflict this option has precedence over floating_minimum_size.

**floating_minimum_size** <width> x <height>::
	Specifies the minimum dimensions of floating windows.
	Default parameters are 75 x 50.
	-1 and 0 are invalid parameters, default will be used instead.

**focus** <direction>::
	Direction may be one of _up_, _down_, _left_, _right_, or _parent_. The
	directional focus commands will move the focus in that direction. The parent
	focus command will change the focus to the parent of the currently focused
	container, which is useful, for example, to open a sibling of the parent
	container, or to move the entire container around.

**focus** output <direction|name>::
	Direction may be one of _up_, _down_, _left_, _right_. The directional focus
	commands will move the focus to the output in that direction. When name is
	given the focus is changed to the output with that name.

**focus** mode_toggle::
	Toggles focus between floating view and tiled view.

**fullscreen**::
	Toggles fullscreen status for the focused view.

**hide_edge_borders** <none|vertical|horizontal|both>::
	Hide window borders adjacent to the screen edges. Default is _none_.

**layout** <mode>::
	Sets the layout mode of the focused container. _mode_ can be one of _splith_,
	_splitv_, _toggle split_, _stacking_ or _tabbed_.

**move** <left|right|up|down>::
	Moves the focused container _left_, _right_, _up_, or _down_.

**move** <container|window> to workspace <name>::
	Moves the focused container to the workspace identified by _name_.
	_name_ may be a special workspace name. See **workspace**.

**move** <container|window|workspace> to output <name|direction>::
	Moves the focused container or workspace to the output identified by _name_ or
	_direction_. _direction_ may be one of _up_, _down_, _left_, _right_.

**reload**::
	Reloads the sway config file without restarting sway.

**resize** <shrink|grow> <width|height> <amount>::
	Resizes the currently focused container or view by _amount_. _amount_ can be
	specified as "n px" or "n ppt" or "n px or n ppt".

**split** <vertical|v|horizontal|h|toggle|t>::
	Splits the current container, vertically or horizontally. If toggled then the
	current container is split opposite to the parent container.

**splith**::
	Equivalent to **split horizontal**.

**splitv**::
	Equivalent to **split vertical**.

**splitt**::
	Equivalent to **split toggle**.

**sticky** <enable|disable|toggle>::
	If enabled and the windows is floating it will always be present on the active
	workspace on that output.

The following commands may be used either in the configuration file
or triggered at runtime.

**bindsym** <key combo> <command>::
	Binds _key combo_ to execute _command_ when pressed. You may use XKB key
	names here (**xev**(1) is a good tool for discovering them). An example
	bindsym command would be _bindsym Mod1+Shift+f exec firefox_, which would
	execute Firefox if the alt, shift, and F keys are pressed together. Any
	valid sway command is eligible to be bound to a key combo.
	+
	**bindcode** <code> <command> is also available for binding with key codes
	instead of key names.

**debuglog** <on|off|toggle>::
	Enables, disables or toggles logging for debug. The toggle argument cannot
	be used in the configuration file.

**exec** <shell command>::
	Executes _shell command_ with sh.

**exec_always** <shell command>::
	Like exec, but the shell command will be executed _again_ after *reload* or
	*restart* is executed.

**floating_modifier** <modifier> [normal|inverse]::
	When the _modifier_ key is held down, you may use left click to drag floating
	windows, and right click to resize them. Unlike i3, this modifier may also be
	used to resize and move windows that are tiled. With the _inverse_ mode
	enabled, left click is used for resizing and right click for dragging. The
	mode paramenter is optional and defaults to _normal_ if it isn't defined.

**floating_scroll** <up|down|left|right> [command]::
	Sets the command to be executed on scrolling in the specified
	direction while holding the floating modifier. Resets the
	command, when given no arguments.

**focus_follows_mouse** <yes|no>::
	If set to _yes_, the currently focused view will change as you move your
	mouse around the screen to the view that ends up underneath your mouse.

**for_window** <criteria> <command>::
	Whenever a window that matches _criteria_ appears, run list of commands. See
	**Criteria** section below.

**gaps** edge_gaps <on|off|toggle>::
	Whether or not to add gaps between views and workspace edges if amount of
	inner gap is not zero. When _no_, no gap is added where the view is aligned to
	the workspace edge, effectively creating gaps only between views. The toggle
	argument cannot be used in the configuration file.

**gaps** <amount>::
	Sets default _amount_ pixels as the gap between each view, and around each
	workspace.

**gaps** <inner|outer> <amount>::
	Sets default _amount_ pixels as the _inner_ or _outer_ gap, where the former
	affects spacing between views and the latter affects the space around each
	workspace.

**gaps** <inner|outer> <all|workspace|current> <set|plus|minus> <amount>::
	Changes the gaps for the _inner_ or _outer_ gap. _all_ changes the gaps for
	all views or workspace, _workspace_ changes gaps for all views in current
	workspace (or current workspace), and _current_ changes gaps for the current
	view or workspace.

**smart_gaps** <on|off>::
	If smart_gaps are _on_ then gaps will only be enabled if a workspace has more
	than one child container.

**mode** <mode_name>::
	Switches to the given mode_name. the default mode is simply _default_. To
	create a new mode in config append _{_ to this command, the following lines
	will be keybinds for that mode, and _}_ on its own line to close the block.

**mouse_warping** <output|none>::
	When _output_: place mouse at center of newly focused window when changing
	output. When _none_: don't move mouse.

**output** <name> <resolution|res> <WIDTHxHEIGHT>::
	Configures the specified output to use the given resolution.

**output** <name> <position|pos> <X,Y>::
	Configures the specified output to be arranged at the given position.

**output** <name> <background|bg> <file> <mode>::
	Sets the wallpaper for the given output to the specified file, using the given
	scaling mode (one of "stretch", "fill", "fit", "center", "tile").

**output** <name> disable::
	Disables the specified output.

**NOTES FOR THE OUTPUT COMMAND**::
	You may combine output commands into one, like so:
	+
	output HDMI-A-1 res 1920x1080 pos 1920,0 bg ~/wallpaper.png stretch
	+
	You can get a list of output names like so:
	+
	swaymsg -t get_outputs
	+
	You may also match any output by using the output name "*". Be sure to add
	this output config after the others, or it will be matched instead of the
	others.

**seamless_mouse** <on|off>::
	Change output seamlessly when pointer touches edge of output. Outputs need to
	be configured with perfectly aligned adjacent positions for this option to
	have any effect.

**workspace** <name>::
	Switches to the specified workspace.

**workspace** <prev|next>::
	Switches to the next workspace on the current output or on the next output
	if currently on the last workspace.

**workspace** <prev_on_output|next_on_output>::
	Switches to the next workspace on the current output.

**workspace** <name> output <output>::
	Specifies that the workspace named _name_ should appear on the specified
	_output_.

**workspace_layout** <default|stacking|tabbed>::
	Specifies the start layout for new workspaces.

**include** <path>::
	Includes a sub config file by _path_. _path_ can be either a full path or a
	path relative to the parent config.

Criteria
--------

A criteria is a string in the form of e.g.:

	[class="[Rr]egex.*" title="some title"]

The string contains one or more (space separated) attribute/value pairs and they
are used by some commands filter which views to execute actions on. All attributes
must match for the criteria string to match.

Currently supported attributes:

**class**::
	Compare value against the window class. Can be a regular expression. If value
	is _focused_ then the window class must be the same as that of the currently
	focused window.

**id**::
	Compare value against the app id. Can be a regular expression.

**title**::
	Compare against the window title. Can be a regular expression. If value is
	_focused_ then the window title must be the same as that of the currently
	focused window.

**workspace**::
	Compare against the workspace name for this view. Can be a regular expression.
	If value is _focused_ then all the views on the currently focused workspace
	matches.

See Also
--------

**sway**(1) **sway-input**(5) **sway-bar**(5)
