nedm-config(5) "Version 3.0.1" "NEDM Manual"

# NAME

*nedm-config* NEDM configuration file

# SYNOPSIS

*\$XDG_CONFIG_PATH/nedm/config*

# DESCRIPTION

The nedm configuration is a plain text file.

Each line consists of a comment or a command and its arguments which
are parsed sequentially but independently from the rest of the file.

Each line starting with a "#" is a comment.

Note that nesting of commands is limited to 50 times.
Lines are arbitrarily long in practice, though a reasonable limit of 4Mb has been set.

See *KEY DEFINITIONS* for details on modifier keys and *MODES* for details
on modes.

## COMMANDS

*abort*
	Return to default mode

*background <r\> <g\> <b\>*
	Set RGB of background - <[r|g|b]\> are floating point numbers
	between 0 and 1.
	There is no support for background images.

```
# Set background to red
background 1.0 0.0 0.0
```

*bind <key\> <command\>*
	Bind <key\> to execute <command\> if pressed in root mode

```
bind <key> <command>
# is equivalent to
definekey root <key> <command>
```

*close*
	Close current window - This may be useful for windows of
	applications which do not offer any method of closing them.

*configure_message [font <font description\>|[f|b]g_color <r\> <g\> <b\> <a\>|display_time <n\>|anchor <position\>|[enable|disable]]*
	Configure message characteristics -
	- font <font description\> sets the font of the message.
	  Here, <font description\> is either
	    - an X core font description or
	    - a FreeType font description via pango
	- fg_color <r\> <g\> <b\> <a\> sets the RGBA of the foreground
	- bg_color <r\> <g\> <b\> <a\> sets the RGBA of the background
	- display_time <n\> sets the display time in seconds
	- anchor <position\> sets the position of the message.
      <position\> may be one of {top,bottom}\_{left,center,right} or center.
	- [enable|disable] Enable or disable messages

```
# Set font
## Set example X code font
configure_message font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
## Set example FreeType font description
configure_message font pango:monospace 10

# Set foreground RGBA to red
configure_message fg_color 1.0 0.0 0.0 1.0

# Set background RGBA to red
configure_message bg_color 1.0 0.0 0.0 1.0

# Set duration for message display to four seconds
configure_message display_time 4
```

*cursor [enable|disable]*
	Enable or disable cursor

	This simply hides the cursor. Pointing and clicking is
	still possible.

*custom_event <message\>*
	Send a custom event to the IPC socket

	This sends an event of type "custom_event" to all programs
	listening to the IPC socket along with the string <message\>.
	See *nedm-socket(7)* for more details.

*definekey <mode\> <key\> <command\>*
	Bind <key\> to execute <command\> if pressed in <mode\> -
	*definekey* is a more general version of *bind*.

*definemode <mode\>*
	Define new mode <mode\> - After a call to *definemode*,
	<mode\> can be used with *definekey* to create a custom key mapping.

```
# define new mode and create a mapping for it
definemode foo
definekey foo A-space abort
```

*dump*
	Triggers the *dump* event, see *nedm-socket(7)* for details

*escape <key\>*
	Set <key\> to switch to root mode to execute one command

```
escape <key>
# is equivalent to
definekey top <key> mode root
```

*exchange <tile_id 1\> <tile_id 2\> [<follow_focus\>]*
	Exchange tile ids <tile_id 1\> and <tile_id 2\>, optionally set
	follow_focus to 0 to disable to focus following.

*exchangedown*
	Exchange current window with window in the tile to the bottom

*exchangeleft*
	Exchange current window with window in the tile to the left

*exchangeright*
	Exchange current window with window in the tile to the right

*exchangeup*
	Exchange current window with window in the tile to the top

*exec <command\>*
	Execute <command\> using *sh -c*

*focus [<tile_id\>]*
	If <tile_id\> is provided, focus it, else focus next tile

*focusdown*
	Focus tile to the bottom

*focusleft*
	Focus tile to the left

*focusprev*
	Focus previous tile

*focusright*
	Focus tile to the right

*focusup*
	Focus tile to the top

*hsplit [<percentage\>]*
	Split current tile horizontally, optionally give a float between 0.0
	and 1.0 as a percentage of the screen size to split

*input <identifier\> <setting\> <value\>*
	Set <setting\> to <value\> for device <identifier\> -
	<identifier\> can be "\*" (wildcard), of the form
	"type:<device_type\>" or the identifier of the device as printed
	for example by *nedm -s*. The supported input types are
	- touchpad
	- pointer
	- keyboard
	- touch
	- tablet_tool
	- tablet_pad
	- switch

	Configurations are applied sequentially. Currently, only libinput
	devices may be configured. The available settings and their
	corresponding values are as follows:

	*accel_profile adaptive|flat*
		Set pointer acceleration profile for specified input device

	*calibration_matrix <6 space-separated floating point values\>*
		Set calibration matrix

	*click_method none|button_areas|clickfinger*
		Change click method for the specified device

	*drag enabled|disabled*
		Enable or disable tap-and-drag for specified input device

	*drag_lock enabled|disabled*
		Enable or disable drag lock for specified input device

	*dwt enabled|disabled*
		Enable or disable disable-while-typing for specified input
		device

	*events enabled|disabled|disabled_on_external_mouse*
		Enable or disable send_events for specified input device -
		Disabling send_events disables the input device.

	*keybindings [enabled|disabled]*
		Enable or disable keybinding interpretation for a specific keyboard.

	*left_handed enabled|disabled*
		Enable or disable left handed mode for specified input device

	*middle_emulation enabled|disabled*
		Enable or disable middle click emulation

	*natural_scroll enabled|disabled*
		Enable or disable natural (inverted) scrolling for specified
		input device

	*pointer_accel [<-1|1\>]*
		Change the pointer acceleration for specified input device

	*scroll_button disable|<event-code-or-name\>*
		Set button used for scroll_method on_button_down - The button
		can be given as an event name or code, which can be obtained from
		*libinput debug-events*. If set to _disable_, it disables the
		scroll_method on_button_down.

	*scroll_factor <floating point value\>*
		Change the scroll factor for the specified input device - Scroll
		speed will be scaled by the given value, which must be non-negative.

	*scroll_method none|two_finger|edge|on_button_down*
		Change scroll method for specified input device

	*repeat_delay <n\>*
		Repeat delay in ms for keyboards only

	*repeat_rate <n\>*
		Repeat rate in 1/s for keyboards only

	*tap enabled|disabled*
		Enable or disable tap for specified input device

	*tap_button_map lrm|lmr*
		Specify which button mapping to use for tapping - _lrm_ treats 1
		finger as left click, 2 fingers as right click, and 3 fingers as
		middle click. _lmr_ treats 1 finger as left click, 2 fingers as
		middle click, and 3 fingers as right click.

message <text\>
	Display a line of arbitrary text.

*mode <mode\>*
	Enter mode "<mode\>" - Returns to default mode, after a command is
	executed.

*movetonextscreen*
	Move currently focused window to next screen
	See *output* for differences between screen and output.

*movetoprevscreen*
	Move currently focused window to previous screen
	See *output* for differences between screen and output.

*movetoscreen <n\>*
	Move currently focused window to <n\>-th screen
	See *output* for differences between screen and output.

*movetoworkspace <n\>*
	Move currently focused window to <n\>-th workspace
	See *output* for differences between screen and output.

*moveviewtotile <view_id\> <tile_id\> [<follow_focus\>]*
	Move view with <view_id\> to tile with <tile_id\>, optionally set
	<follow_focus\> to 0 to disable following the view with the focus.

*moveviewtoworkspace <view_id\> <workspace\> [<follow_focus\>]*
	Move view with <view_id\> to workspace number <workspace\>,
	optionally set <follow_focus\> to 0 to disable following the view
	with the focus.

*moveviewtoscreen <view_id\> <screen\> [<follow_focus\>]*
	Move view with <view_id\> to screen number <screen\>, optionally
	set <follow_focus\> to 0 to disable following the view with the
	focus.

*mergeleft [<tile_id\>]*
	Merge tile to the left, relative to the focussed tile by default,
	the specified <tile_id\> otherwise.

*mergeright [<tile_id\>]*
	Merge tile to the right, relative to the focussed tile by default,
	the specified <tile_id\> otherwise.

*mergeup [<tile_id\>*
	Merge tile to the top, relative to the focussed tile by default,
	the specified <tile_id\> otherwise.

*mergedown [<tile_id\>*
	Merge tile to the bottom, relative to the focussed tile by default,
	the specified <tile_id\> otherwise.

*next [<view_id\>]*
	If given a <view_id\>, focus it else focus next

*nextscreen*
	Focus next screen
	See *output* for differences between screen and output.

*only [<screen\> <workspace\>]*
	Remove all splits and make current view fill the entire screen
	on current screen and workspace by default or <screen\> and <workspace\>
	if given.

*output <name\> [[pos <xpos\> <ypos\> res <width\>x<height\> rate <rate\> [scale <scale\>]] | enable | disable | [permanent|peripheral] | prio <n\> | rotate <n\>]*
	Configure output "<name\>" -
	- <xpos\> and <ypos\> are the position of the
	  monitor in pixels. The top-left monitor should have the coordinates 0 0.
	- <width\> and <height\> specify the resolution in pixels.
	- <rate\> sets the refresh rate of the monitor (often this is 50 or 60).
	- <scale\> sets the output scale (default is 1.0)
	- enable and disable enable or disable <name\>. Note that if
	  <output\> is the only enabled output, *output <output\> disable* has
	  no effect.
	- permanent sets <name\> to persist even on disconnect. When
	  the physical monitor is disconnected, the output is
	  maintained and operates identically to the attached monitor. On reconnect,
	  the monitor operates as though it was never disconnected. Setting the
	  output role to peripheral when the monitor is disconnected,
	  destroys the output, as if the monitor were disconnected.
	- peripheral sets the role of <name\> to peripheral, meaning that on
	  disconnecting the respective monitor, all views will be moved to another
	  available output. The default role is peripheral.
	- prio <n\> is used to set the priority of an output. If
	  nothing else is set, outputs are added as they request to be added
	  and have a numerical priority of -1. Using prio <n\> it is possible
	  to set priorities for outputs, where <n\> >= 1. The larger <n\> is,
	  the higher the priority is, that is to say, the earlier the output
	  will appear in the list of outputs.
	- rotate <n\> is used to rotate the output by `<n> mod 4 x 90` degrees
	  counter-clockwise.

```
# Don't rotate
output DP-1 rotate 0

# rotate 90 degrees counter-clockwise
output DP-1 rotate 1

# rotate 180 degrees counter-clockwise
output DP-1 rotate 2

# rotate 270 degrees counter-clockwise
output DP-1 rotate 3
```

	*output* and the *screen* family of commands are similar in that they
	both deal with monitors on some level.
	- *output* addresses outputs by their name and is vaguely symmetric
	  to *input*.
	- Any *screen* command deals with the number identifying a
	  monitor within a NEDM session either explicitly or
	  implicitly (i.e. the commands containing next and prev).

*prev*
	Focus previous window in current tile

*prevscreen*
	Focus previous screen

*quit*
	Exit nedm

*resizedown [<pixels\> [<tile_id\>]]*
	Resize towards the bottom, by 10 pixels by default and <pixels\> if given, on
	the focussed tile by default and <tile_id\> if given.

*resizeleft [<pixels\> [<tile_id\>]]*
	Resize towards the left, by 10 pixels by default and <pixels\> if given, on
	the focussed tile by default and <tile_id\> if given.

*resizeright [<pixels\> [<tile_id\>]]*
	Resize towards the right, by 10 pixels by default and <pixels\> if given, on
	the focussed tile by default and <tile_id\> if given.

*resizeup [<pixels\> [<tile_id\>]]*
	Resize towards the top, by 10 pixels by default and <pixels\> if given, on
	the focussed tile by default and <tile_id\> if given.

*screen <n\>*
	Change to <n\>-th screen
	See *output* for differences between screen and output.

*show_info*
	Display information about the current setup - In particular, print the identifiers
	of the available inputs and outputs.

*setmode <mode\>*
	Set default mode to <mode\>

*setmodecursor <mode\> <cursor\>*
	Set cursor to be <cursor\> when in mode <mode\>

*switchvt <n\>*
	Switch to tty <n\>

*time*
	Display time

*vsplit [<percentage\>]*
	Split current tile vertically, optionally give a float between 0.0
	and 1.0 as a percentage of the screen size to split

*workspace <n\>*
	Change to <n\>-th workspace

*workspaces <n\>*
	Set number of workspaces to <n\> - <n\> is a single integer larger than 1
	and less than 30.

# MODES

By default, three modes are defined:

*top*
	Default mode - Keybindings defined in this mode can be accessed
	directly.
	- *definekey* can be used to set keybindings for top mode.
	- *setmode* can be used to set a different default mode.

*root*
	Command mode - Keybindings defined in this mode can be accessed
	after pressing the key defined by *escape*.
	- *bind* can be used to set keybindings for root mode.

*resize*
	Resize mode - Used to resize tiles.

*definemode* can be used to create additional modes.

# KEY DEFINITIONS

Keys are specified by their names as displayed for example by *xev*.

Modifiers can be specified using the following syntax:

	<mod\>-<key\>

The supported modifiers are:

*A - Alt*

*C - Control*

*L - Logo*

*S - Shift*

*2 - Mod 2*

*3 - Mod 3*

*5 - Mod 5*

For example to specify the keybinding Alt+space, the expression

```
A-space
```

is used.

# SEE ALSO

*nedm(1)*
*nedm-socket(7)*

# BUGS

See GitHub Issues: <https://github.com/project-repo/nedm/issues>

Mail contact: `nedm @ project-repo . co`

GPG Fingerprints:

- 0A268C188D7949FEB39FD1462F2AD980247E4918
- 283D10F54201B0C6CCEE2C561DE04E4B056C749D

# LICENSE

Copyright (c) 2020-2024 The NEDM authors

Copyright (c) 2018-2020 Jente Hidskes

Copyright (c) 2019 The Sway authors

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
