aboutsummaryrefslogtreecommitdiff
path: root/sway/sway.5.txt
blob: 93e942d46cc28824c4603a0f137580e5c6245bbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
/////
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.

Lines in the configuration file might be extended through multiple lines by
adding a '\' character at the end of line. e.g.:

	bindsym Shift+XF86AudioRaiseVolume exec pactl set-sink-volume \
		$(pactl list sinks | grep -B 1 RUNNING | sed '1q;d' | sed 's/[^0-9]\+//g') +5%

These commands can be executed in your config file, via **swaymsg**(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.

**default_orientation** <horizontal|vertical|auto>::
	Sets the default container layout for tiled containers.

**set** <name> <value>::
	Sets variable $name to _value_. You can use the new variable in the arguments
	of future 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 a border without title bar _n_ pixels thick.
	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_.

**clipboard** <content>::
	Store content in the system clipboard, with a MIME type of "text/plain"

**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.

**focus** <direction>::
	Direction may be one of _up_, _down_, _left_, _right_, _next_, _prev_,
	_parent_, or _child_. The directional focus commands will move the focus
	in that direction. The _next_ and _prev_ directions will focus the next,
	respectively previous, element in the current container. 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.

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

**layout** auto <mode>::
	Sets layout to one of the auto modes, i.e. one of _left_, _right_, _top_,
	or _bottom_.

**layout** auto <next|prev>::
	Cycles between available auto layouts.

**layout** auto [master|ncol] [inc|set] <n>::
	Modify the number of master elements, respectively slave columns, in the
	focused container. <n> can be a positive or negative integer. These commands
	only have an effect if the focused container uses one of the "auto" layouts.

**layout** toggle split::
	Cycles between available split layouts.

**move** <left|right|up|down> <[px]>::
	Moves the focused container _left_, _right_, _up_, or _down_. If the window
	is floating it moves it _px_ in that direction, defaulting to 10. Tiled
	containers are moved the same regardless of the _px_ argument.

**move** <next|prev|first>::
	Moving to _prev_ or _next_ swaps the container with its sibling in the same
	container. Move _first_ exchanges the focused element in an auto layout with
	the first element, i.e. promotes the focused element to master position.

**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_.

**move** [to] scratchpad::
	Moves the focused window to the scratchpad.

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

**resize** <shrink|grow> <width|height> [<amount>] [px|ppt]::
	Resizes the currently focused container or view by _amount_. _amount_ is
	optional: the default value is 10 (either px or ppt depending on the view
	type). The [px|ppt] parameter is optional. _px_ specifies that _amount_ refers
	to pixels; _ppt_ specifies that _amount_ refers to percentage points of the
	current dimension. Floating views use px dimensions by default (but can use
	ppt if specified); tiled views use ppt dimensions by default (but can use px
	if specified).

**resize set** <width> [px] <height> [px]::
	Sets the width and height of the currently focused container to _width_ pixels
	and _height_ pixels. The [px] parameters are optional and have no effect. This
	command only accepts pixel dimensions.

**resize set** <width|height> <amount> [px] [<width|height> <amount> [px]]::
	Sets the _width_ and/or _height_ of the currently focused container to
	_amount_. The [px] parameters are optional and have no effect. This command
	only accepts pixel dimensions.

**scratchpad show**::
	Shows a window from the scratchpad. Repeatedly using this command will cycle
	through the windows in the scratchpad.

**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>::
	"Sticks" a floating window to the current output so that it shows up on all
	workspaces.

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

**assign** <criteria> [→] <workspace>::
	Assigns views matching _criteria_ (see **Criteria** section below) to
	_workspace_. The → (U+2192) is optional and purely for aesthetics. This
	command is exactly equivalent to "for_window <criteria> move container to
	workspace <workspace>".

**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.

**client**.<color_class> <border> <background> <text> <indicator> <child_border>::
	The client commands control the colors of the view borders and title bars. All
	client commands _require_ five color values. (The one exception is
	**client.background** which _requires_ one color value.) If you only want to
	specify a subset, supply default colors for all the others. Colors must be
	defined in hex. i.e. _#rrggbb_ or _#rrggbbaa_, when including the alpha
	channel.
	+
	The command tokens are:
		**color_class**::: Specifies the view to which the colors apply.
			**client.background**:::: The color a view will be painted, underneath the
			client itself. This will only be visible if a client does not fully
			cover its allocated view space. This command only requires one color. _Note_:
			This is not currently implemented.
			**client.focused**:::: The view that has focus.
			**client.focused_inactive**:::: A view that has focus within its
			container, but the container is not focused.
			**client.placeholder**:::: Used when drawing placeholder view contents.
			Only background and text colors are used. _Note_: This is not
			currently implemented.
			**client.unfocused**:::: A view that does not have focus.
			**client.urgent**:::: A view with an urgency hint. _Note_: This is not
			currently implemented.
		**border**::: The border around the title bar.
		**background**::: The background of the title bar.
		**text**::: The text color of the title bar.
		**indicator**::: The color used to indicate where a new view will open. In a
		tiled container, this would paint the right border of the current view if
		a new view would be opened to the right.
		**child_border**::: The border around the view itself.

+
The default colors are:
+
--
[options="header"]
|===========================================================================
|color_class      |border    |background |text      |indicator |child_border
|background       |n/a       |#ffffff  |n/a       |n/a       |n/a
|focused          |#4c7899 |#285577  |#ffffff |#2e9ef4 |#285577
|focused_inactive |#333333 |#5f676a  |#ffffff |#484e50 |#5f676a
|unfocused        |#333333 |#222222  |#888888 |#292d2e |#222222
|urgent           |#2f343a |#900000  |#ffffff |#900000 |#900000
|placeholder      |#000000 |#0c0c0c  |#ffffff |#000000 |#0c0c0c
|===========================================================================
--

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

**default_border** <normal|none|pixel> [<n>]::
	Set default border style for new windows. This command was previously called
	**new_window**. While **new_window** still works, it is considered deprecated
	and support for it will be removed in the future.

**default_floating_border** <normal|none|pixel> [<n>]::
	Set default border style for new floating windows. This only applies to
	windows that are spawned in floating mode, not windows that become floating
	after the fact. This command was previously called **new_float**. While
	**new_float** still works, it is considered deprecated and support for it will
	be removed in the future.

**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_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 dimensions.
	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.

**floating_modifier** <modifier> [normal|inverse]::
	When the _modifier_ key is held down, you may hold left click to move 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 parameter is optional and defaults to _normal_ if it isn't defined.

**floating_scroll** <up|down|left|right> [command]::
	Sets a command to be executed when the mouse wheel is scrolled 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_, moving your mouse over a window will focus that window.

**font** <font>::
	Sets font for use in title bars. Generally the format is something like "Name
	Style Size" e.g. "Deja Vu Sans Book 12". You can also use Pango font
	descriptions with "pango:font".

**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 _off_, 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.

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

**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.
	+
	**input * <block of commands>** may be used to match all input devices.
	+
	See **sway-input**(5) for details.

**kill**::
	Kills (force-closes) the currently-focused container and all of its children.

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

**mark** \<--add|--replace> \<--toggle> <identifier>::
	Marks are arbitrary labels that can be used to identify certain windows and
	then jump to them at a later time. By default, the **mark** command sets
	_identifier_ as the only mark on a window. By specifying _--add_, mark will
	add _identifier_ to the list of current marks. If _--toggle_ is specified mark
	will remove _identifier_ if it is already a label. Marks may be found by using
	a criteria. See the **Criteria** section below.

**mode** <mode_name>::
	Switches to the given mode_name. The default mode is simply _default_. To
	create a new mode append _{_ to this command, the following lines
	will be keybindings 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.

**no_focus** <criteria>::
	Prevents windows matching <criteria> from being focused automatically when
	they're created. This does not apply to the first window in a workspace.

**output** <name> <resolution|res> <WIDTHxHEIGHT>::
	Configures the specified output to use the given resolution.
	+
	_Note_: sway does not currently support setting the output mode. Your output's native
	resolution will be used and the screen will be scaled from the resolution
	specified to your native resolution.

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

**output** <name> <scale> <I>::
	Configures the specified output to be scaled up by the specified integer
	scaling factor (usually 2 for HiDPI screens).

**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> <background|bg> <color> solid_color::
	Sets the background of the given output to the specified color. _color_ should
	be specified as an _#rrggbb_ (no alpha) color.

**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.

**show_marks** <on|off>::
	If **show_marks** is on then marks will be showed in the window decoration.
	However, any mark that starts with an underscore will not be drawn even if the
	option is on. The default option is _on_.

**unmark** <identifier>::
	**Unmark** will remove _identifier_ from the list of current marks on a window. If
	no _identifier_ is specified, then **unmark** will remove all marks.

**workspace** [number] <name>::
	Switches to the specified workspace. The string "number" is optional. The
	workspace _name_, if unquoted, may not contain the string "output", as sway
	will assume that the command is moving a workspace to an output, as described
	below.

**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_auto_back_and_forth** <yes|no>::
	When _yes_, repeating a workspace switch command will switch back to the
	prior workspace. For example, if you are currently on workspace 1,
	switch to workspace 2, then invoke the "workspace 2" command again, you
	will be returned to workspace 1. Defaults to _no_.

**workspace_layout** <default|stacking|tabbed|auto|auto left|auto right|auto
	top|auto bottom>:: 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. They
are used by some commands to choose which views to execute actions on. All attributes
must match for the criteria to match.

Criteria may be used with either the **for_window** or **assign** commands to
specify operations to perform on new views. A criteria may also be used to
perform specific commands (ones that normally act upon one window) on all views
that match that criteria. For example:

Focus on a window with the mark "IRC":
	[con_mark="IRC"] focus

Kill all windows with the title "Emacs":
	[class="Emacs"] kill

Mark all Firefox windows with "Browser":
	[class="Firefox"] mark Browser

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.

**con_id**::
	Compare against the internal container ID, which you can find via IPC.

**con_mark**::
	Compare against the window marks. Can be a regular expression.

**floating**::
	Matches against floating windows.

**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.

**tiling**::
	Matches against tiling windows.

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

See Also
--------

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