Mercurial > irccd
diff doc/src/irccd.conf.md @ 607:bb9771fb5f44
Docs: rework documentation
- Change directories,
- Remove handwritten manual pages.
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 08 Dec 2017 20:11:22 +0100 |
parents | |
children | 168ea30142d9 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/src/irccd.conf.md Fri Dec 08 20:11:22 2017 +0100 @@ -0,0 +1,434 @@ +% irccd.conf +% David Demelier +% 2017-12-08 + +Both `irccd` and `irccdctl` use configuration file in a extended [INI][ini] +format. + +# General syntax + +The file syntax has following rules: + + 1. Each option is stored in a section, + 2. Some sections may be redefined multiple times, + 3. Empty option must have quotes (e.g. `option = ""`). + +# The @include statement + +Irccd adds an extension to this format by adding an `@include` keyword which +let you splitting your configuration file. + +Note: this `@include` statement must be at the beginning of the file and must be + surrounded by quotes if the file name has spaces. + +You can use both relative or absolute paths. If relative paths are used, they +are relative to the current file being parsed. + +## Example + +```ini +@include "rules.conf" +@include "servers.conf" + +[mysection] +myoption = "1" +``` + +# The list construct + +When requested, an option can have multiples values in a list. The syntax uses +parentheses and values are separated by commas. + +If the list have only one value, you can just use a simple string. + +## Examples + +```ini +[rule] +servers = ( "server1", "server2" ) +``` + +```ini +[rule] +servers = "only-one-server" +``` + +Note: spaces are completely optional. + +Options that have a default value are optional and can be omitted. + +# Identifiers + +Some sections require an identifier (specified as id) as parameter. They must be +unique, not empty and can only contain characters, numbers, '-' and '_'. + +Example: + + - abc + - server-tz2 + +# The general section + +This section contains global options that are used in the whole irccd +application. + +The available options: + + - **uid**: (string or number) the user id to use (Optional, default: none), + - **gid**: (string or number) the group id to use (Optional, default: none), + - **foreground**: (bool) set to true to not daemonize + (Optional, default: false) + - **pidfile**: (string) path to a file where to store the irccd pid + (Optional, default: none). + +**Warning:** these options are available only if the system supports them. + +## Example + +```ini +[general] +pidfile = "/var/run/irccd/pid" +uid = "nobody" +gid = 1002 +``` + +# The logs section + +This section can let you configure how irccd should log the messages. + +The available options: + + - **verbose**: (bool) be verbose (Optional, default: false), + - **type**: (string) which kind of logging, console, file or syslog + (Optional, default: console). + +The options for **file** type: + + - **path-logs**: (string) path to the normal messages, + - **path-errors**: (string) path to the error messages. + +**Note:** syslog is not available on all platforms. + +## Example + +```ini +[logs] +type = file +verbose = true +path-logs = "/var/log/irccd/log.txt" +path-errors = "/var/log/irccd/errors.txt" +``` + +# The format section + +The format section let you change the irccd's output. It uses the templates +system. + +Only one keyword is defined, `message` which contains the message that irccd +wants to output. + +**Note:** colors and attributes are not supported. + +The available options: + + - **debug**: (string) template to use to format debug messages + (Optional, default: none), + - **info**: (string) template to use to format information messages + (Optional, default: none), + - **warning**: (string) template to use to format warnings + (Optional, default: none). + +## Example + +```ini +[format] +debug = "%H:%M debug: #{message}" +info = "%H:%M info: #{message}" +warning = "%H:%M warning: #{message}" +``` + +# The identity section + +This section is completely optional, if you don't provide one, irccd will use a +default identity with your system account name as nickname and username. If +irccd was unable to get your account name, it uses **irccd** as a fallback. + +This section is redefinable, you can create one or more. + +The available options: + + - **name**: (id) the identity unique id, + - **nickname**: (string) the nickname + (Optional, default: system username if available or irccd), + - **realname**: (string) the realname + (Optional, default: IRC Client Daemon), + - **username**: (string) the username name + (Optional, default: system username if available or irccd), + - **ctcp-version**: (string) what version to respond to CTCP VERSION + (Optional, default: IRC Client Daemon). + +## Example + +```ini +[identity] +name = "default" +nickname = "jean" + +[identity] +name = "development" +nickname = "unstable" +username = "un" +``` + +# The server section + +This section is used to connect to one or more server. + +This section is redefinable, you can create one or more. + +The available options: + + - **name**: (id) the unique id, + - **host**: (string) the server address, + - **port**: (int) the server port (Optional, default: 6667), + - **identity**: (string) an identity to use + (Optional, default: irccd's default), + - **password**: (string) an optional password + (Optional, default: none), + - **join-invite**: (bool) join channels upon invitation + (Optional, default: false), + - **channels**: (list) list of channels to auto join + (Optional, default: empty), + - **command-char**: (string) the prefix for invoking special commands + (Optional, default: !), + - **ssl**: (bool) enable or disable SSL (Optional, default: false), + - **ssl-verify**: (bool) verify the SSL certificates + (Optional, default: true), + - **reconnect**: (bool) enable reconnection after failure + (Optional, default: true), + - **reconnect-tries**: (int) number of tries before giving up. A value of + -1 means indefinitely (Optional, default: -1), + - **reconnect-timeout**: (int) number of seconds to wait before retrying + (Optional, default: 30), + - **ping-timeout** (int) number of seconds before ping timeout + (Optional, default: 300). + +**Note:** if a channel requires a password, add it after a colon + (e.g. "#channel:password"). + +## Example + +```ini +[server] +name = "local" +host = "localhost" +port = 6667 +channels = ( "#staff", "#club:secret" ) +``` + +# The paths section + +The paths section defines common paths used as defaults for all plugins. + +Any option in this section can be defined altough the following are used as +common convention used in all plugins: + + - **cache**: (string) path for data files written by the plugin, + - **data**: (string) path for data files provided by the user, + - **config**: (string) path for additional configuration from the user. + +For each of these paths, **plugin/name** is appended with the appropriate +plugin name when loaded. + +The section is redefinable per plugin basis using the `[paths.<plugin>]` syntax. + +## Example + +```ini +# +# Common for all plugins. +# +# Example with ask plugin: +# +# cache -> /var/cache/irccd/plugin/ask +# config -> /usr/local/etc/irccd/plugin/ask +# data -> /var/data/irccd/plugin/ask +# +[paths] +cache = "/var/cache/irccd" +config = "/usr/local/etc/irccd" +data = "/var/data/irccd" + +# +# Explicit override for plugin hangman. +# +[paths.hangman] +config = "/etc/hangman" +``` + +# The plugins section + +This section is used to load plugins. + +Just add any key you like to load a plugin. If the value is not specified, the +plugin is searched through the standard directories, otherwise, provide the full +path (including the .js extension). + +**Warning:** remember to add an empty string for searching plugins. + +## Example + +```ini +[plugins] +history = "" +myplugin = /tmp/myplugin.js +``` + +The `history` plugin will be searched while `myplugin` will be load from +**/tmp/myplugin.js**. + +# The transport section + +This section defines transports, you may use sockets to do a basic IPC system +within irccd. + +With transports, you can may ask `irccd` to send a message, a notice or even +kicking someone from a channel. Irccd will also notify all clients connected to +this transport on IRC events. + +There are two type of listeners availables: + + 1. Internet sockets, IPv4 and IPv6, + 2. Unix sockets, based on files (not available on Windows). + +The available options: + + - **type**: (string) type of listener "ip" or "unix". + - **password**: (string) an authentication password (Optional, default: none). + +The options for **ip** type: + + - **port**: (int) port number, + - **address**: (string) address to bind or "\*" for any + (Optional, default: \*), + - **family**: (list) ipv6, ipv4. Both are accepted (Optional, default: ipv4), + - **ssl**: (bool) enable SSL (Optional, default: false), + - **key**: (string) path to private key file (Optional, default: none), + - **certificate**: (string) path to certificate (Optional, default: none). + +The options for **unix** type: + + - **path**: (string) the file path to the socket. + +## Example of internet transports + +```ini +[transport] +type = "ip" +address = "*" +family = ( "ipv4", "ipv6" ) +port = 9999 +``` + +This will let you controlling irccd on port 9999 with both IPv4 and IPv6 +families. + +**Warning**: consider using internet sockets with care, especially if you are + running your bot on a server with multiple users. If your bot has + operator rights and you bind on any address, almost every users + can do a kick or a ban. + +## Example of unix transports + +```ini +[transport] +type = "unix" +path = "/tmp/irccd.sock" +``` + +This will let you controlling irccd on path **/tmp/irccd.sock**, the file is +automatically deleted when irccd starts, but not when it stops. + +# The rule section + +The rule section is one of the most powerful within irccd configuration. It let +you enable or disable plugins and IRC events for specific criterias. For +instance, you may want to disable a plugin only for a specific channel on a +specific server. And because rules are evaluated in the order they are defined, +you can override rules. + +The available options: + + - **servers**, (list) a list of servers that will match the rule + (Optional, default: empty), + - **channels**, (list) a list of channel (Optional, default: empty), + - **plugins**, (list) which plugins (Optional, default: empty), + - **events**, (list) which events (e.g onCommand, onMessage, ...) + (Optional, default: empty), + - **action**, (string) set to **accept** or **drop**. + +## Basic rules example + +This first rule disable the plugin reboot on **all** servers and channels. + +```ini +[rule] +plugins = "reboot" +action = drop +``` + +This rule enable the reboot plugin again on the server **localhost**, +channel **#staff**. + +```ini +[rule] +servers = "localhost" +channels = "#staff" +plugins = "reboot" +action = accept +``` + +# Full example of configuration file + +```ini +# Add a transport that bind only to IPv6. +[transport] +type = ip +family = ipv6 +port = 12000 + +# A transport that binds to both IPv4 and IPv6. +[transport] +type = ip +family = ( ipv4, ipv6 ) +port = 15000 + +# Identity reused by many servers. +[identity] +name = "myIdentity" +nickname = "superbot" +realname = "SuperBot v1.0" +username = "sp" + +# A server. +[server] +name = "foo" +host = "irc.foo.org" +port = "6667" +identity = myIdentity + +# An other server. +[server] +name = "wanadoo" +host = "chat.wanadoo.fr" +port = "6667" +identity = myIdentity + +# Load some plugins. +[plugins] +ask = "" # Search ask +myplugin = /path/to/myplugin.js # Use absolute path +``` + +[ini]: https://en.wikipedia.org/wiki/INI_file +