New config for bionic
[sysconfig/ejabberd.git] / ejabberd.yml
1 ###
2 ###'              ejabberd configuration file
3 ###
4 ###
5
6 ### The parameters used in this configuration file are explained in more detail
7 ### in the ejabberd Installation and Operation Guide.
8 ### Please consult the Guide in case of doubts, it is included with
9 ### your copy of ejabberd, and is also available online at
10 ### http://www.process-one.net/en/ejabberd/docs/
11
12 ### The configuration file is written in YAML.
13 ### Refer to http://en.wikipedia.org/wiki/YAML for the brief description.
14 ### However, ejabberd treats different literals as different types:
15 ###
16 ### - unquoted or single-quoted strings. They are called "atoms".
17 ###   Example: dog, 'Jupiter', '3.14159', YELLOW
18 ###
19 ### - numeric literals. Example: 3, -45.0, .0
20 ###
21 ### - quoted or folded strings.
22 ###   Examples of quoted string: "Lizzard", "orange".
23 ###   Example of folded string:
24 ###   > Art thou not Romeo,
25 ###     and a Montague?
26 ---
27 ###.  =======
28 ###'  LOGGING
29
30 ##
31 ## loglevel: Verbosity of log files generated by ejabberd.
32 ## 0: No ejabberd log at all (not recommended)
33 ## 1: Critical
34 ## 2: Error
35 ## 3: Warning
36 ## 4: Info
37 ## 5: Debug
38 ##
39 loglevel: 4
40
41 ##
42 ## rotation: Disable ejabberd's internal log rotation, as the Debian package
43 ## uses logrotate(8).
44 log_rotate_size: 0
45 log_rotate_date: ""
46
47 ##
48 ## overload protection: If you want to limit the number of messages per second
49 ## allowed from error_logger, which is a good idea if you want to avoid a flood
50 ## of messages when system is overloaded, you can set a limit.
51 ## 100 is ejabberd's default.
52 log_rate_limit: 100
53
54 ##
55 ## watchdog_admins: Only useful for developers: if an ejabberd process
56 ## consumes a lot of memory, send live notifications to these XMPP
57 ## accounts.
58 ##
59 ## watchdog_admins:
60 ##   - "bob@example.com"
61
62 ###.  ===============
63 ###'  NODE PARAMETERS
64
65 ##
66 ## net_ticktime: Specifies net_kernel tick time in seconds. This options must have
67 ## identical value on all nodes, and in most cases shouldn't be changed at all from
68 ## default value.
69 ##
70 ## net_ticktime: 60
71
72 ###.  ================
73 ###'  SERVED HOSTNAMES
74
75 ##
76 ## hosts: Domains served by ejabberd.
77 ## You can define one or several, for example:
78 ## hosts:
79 ##   - "example.net"
80 ##   - "example.com"
81 ##   - "example.org"
82 ##
83 hosts:
84   - "localhost"
85
86 ##
87 ## route_subdomains: Delegate subdomains to other XMPP servers.
88 ## For example, if this ejabberd serves example.org and you want
89 ## to allow communication with an XMPP server called im.example.org.
90 ##
91 ## route_subdomains: s2s
92
93 ###.  ============
94 ###'  Certificates
95
96 ## List all available PEM files containing certificates for your domains,
97 ## chains of certificates or certificate keys. Full chains will be built
98 ## automatically by ejabberd.
99 ##
100 certfiles:
101   - "/etc/ejabberd/ejabberd.pem"
102
103 ## If your system provides only a single CA file (CentOS/FreeBSD):
104 ## ca_file: "/etc/ssl/certs/ca-bundle.pem"
105
106 ###.  =================
107 ###'  TLS configuration
108
109 ## Note that the following configuration is the default
110 ## configuration of the TLS driver, so you don't need to
111 ## uncomment it.
112 ##
113 define_macro:
114   'TLS_CIPHERS': "HIGH:!aNULL:!eNULL:!3DES:@STRENGTH"
115   'TLS_OPTIONS':
116     - "no_sslv3"
117     - "no_tlsv1"
118     - "cipher_server_preference"
119     - "no_compression"
120   ## 'DH_FILE': "/path/to/dhparams.pem" # generated with: openssl dhparam -out dhparams.pem 2048
121
122 ## c2s_dhfile: 'DH_FILE'
123 ## s2s_dhfile: 'DH_FILE'
124 c2s_ciphers: 'TLS_CIPHERS'
125 s2s_ciphers: 'TLS_CIPHERS'
126 c2s_protocol_options: 'TLS_OPTIONS'
127 s2s_protocol_options: 'TLS_OPTIONS'
128
129 ###.  ===============
130 ###'  LISTENING PORTS
131
132 ##
133 ## listen: The ports ejabberd will listen on, which service each is handled
134 ## by and what options to start it with.
135 ##
136 listen:
137   -
138     port: 5222
139     ip: "::"
140     module: ejabberd_c2s
141     starttls_required: true
142     protocol_options: 'TLS_OPTIONS'
143     max_stanza_size: 65536
144     shaper: c2s_shaper
145     access: c2s
146   -
147     port: 5269
148     ip: "::"
149     module: ejabberd_s2s_in
150   -
151     port: 5280
152     ip: "::"
153     module: ejabberd_http
154     request_handlers:
155       "/ws": ejabberd_http_ws
156       "/bosh": mod_bosh
157       "/api": mod_http_api
158     ##  "/pub/archive": mod_http_fileserver
159     web_admin: true
160     ## register: true
161     ## captcha: true
162     tls: true
163     protocol_options: 'TLS_OPTIONS'
164
165   ##
166   ## ejabberd_service: Interact with external components (transports, ...)
167   ##
168   ## -
169   ##   port: 8888
170   ##   ip: "::"
171   ##   module: ejabberd_service
172   ##   access: all
173   ##   shaper_rule: fast
174   ##   ip: "127.0.0.1"
175   ##   privilege_access:
176   ##      roster: "both"
177   ##      message: "outgoing"
178   ##      presence: "roster"
179   ##   delegations:
180   ##      "urn:xmpp:mam:1":
181   ##        filtering: ["node"]
182   ##      "http://jabber.org/protocol/pubsub":
183   ##        filtering: []
184   ##   hosts:
185   ##     "icq.example.org":
186   ##       password: "secret"
187   ##     "sms.example.org":
188   ##       password: "secret"
189
190   ##
191   ## ejabberd_stun: Handles STUN Binding requests
192   ##
193   ## -
194   ##   port: 3478
195   ##   transport: udp
196   ##   module: ejabberd_stun
197
198   ##
199   ## To handle XML-RPC requests that provide admin credentials:
200   ##
201   ## -
202   ##   port: 4560
203   ##   ip: "::"
204   ##   module: ejabberd_xmlrpc
205   ##   maxsessions: 10
206   ##   timeout: 5000
207   ##   access_commands:
208   ##     admin:
209   ##       commands: all
210   ##       options: []
211
212   ##
213   ## To enable secure http upload
214   ##
215   ## -
216   ##   port: 5444
217   ##   ip: "::"
218   ##   module: ejabberd_http
219   ##   request_handlers:
220   ##     "": mod_http_upload
221   ##   tls: true
222   ##   protocol_options: 'TLS_OPTIONS'
223   ##   dhfile: 'DH_FILE'
224   ##   ciphers: 'TLS_CIPHERS'
225
226 ## Disabling digest-md5 SASL authentication. digest-md5 requires plain-text
227 ## password storage (see auth_password_format option).
228 disable_sasl_mechanisms: "digest-md5"
229
230 ###.  ==================
231 ###'  S2S GLOBAL OPTIONS
232
233 ##
234 ## s2s_use_starttls: Enable STARTTLS for S2S connections.
235 ## Allowed values are: false, optional or required
236 ## You must specify 'certfiles' option
237 ##
238 s2s_use_starttls: required
239
240 ##
241 ## S2S whitelist or blacklist
242 ##
243 ## Default s2s policy for undefined hosts.
244 ##
245 ## s2s_access: s2s
246
247 ##
248 ## Outgoing S2S options
249 ##
250 ## Preferred address families (which to try first) and connect timeout
251 ## in seconds.
252 ##
253 ## outgoing_s2s_families:
254 ##   - ipv4
255 ##   - ipv6
256 ## outgoing_s2s_timeout: 190
257
258 ###.  ==============
259 ###'  AUTHENTICATION
260
261 ##
262 ## auth_method: Method used to authenticate the users.
263 ## The default method is the internal.
264 ## If you want to use a different method,
265 ## comment this line and enable the correct ones.
266 ##
267 auth_method: internal
268
269 ##
270 ## Store the plain passwords or hashed for SCRAM:
271 ## auth_password_format: plain
272 auth_password_format: scram
273 ##
274 ## Define the FQDN if ejabberd doesn't detect it:
275 ## fqdn: "server3.example.com"
276
277 ##
278 ## Authentication using external script
279 ## Make sure the script is executable by ejabberd.
280 ##
281 ## auth_method: external
282 ## extauth_program: "/path/to/authentication/script"
283
284 ##
285 ## Authentication using SQL
286 ## Remember to setup a database in the next section.
287 ##
288 ## auth_method: sql
289
290 ##
291 ## Authentication using PAM
292 ##
293 ## auth_method: pam
294 ## pam_service: "pamservicename"
295
296 ##
297 ## Authentication using LDAP
298 ##
299 ## auth_method: ldap
300 ##
301 ## List of LDAP servers:
302 ## ldap_servers:
303 ##   - "localhost"
304 ##
305 ## Encryption of connection to LDAP servers:
306 ## ldap_encrypt: none
307 ## ldap_encrypt: tls
308 ##
309 ## Port to connect to on LDAP servers:
310 ## ldap_port: 389
311 ## ldap_port: 636
312 ##
313 ## LDAP manager:
314 ## ldap_rootdn: "dc=example,dc=com"
315 ##
316 ## Password of LDAP manager:
317 ## ldap_password: "******"
318 ##
319 ## Search base of LDAP directory:
320 ## ldap_base: "dc=example,dc=com"
321 ##
322 ## LDAP attribute that holds user ID:
323 ## ldap_uids:
324 ##   - "mail": "%u@mail.example.org"
325 ##
326 ## LDAP filter:
327 ## ldap_filter: "(objectClass=shadowAccount)"
328
329 ##
330 ## Anonymous login support:
331 ##   auth_method: anonymous
332 ##   anonymous_protocol: sasl_anon | login_anon | both
333 ##   allow_multiple_connections: true | false
334 ##
335 ## host_config:
336 ##   "public.example.org":
337 ##     auth_method: anonymous
338 ##     allow_multiple_connections: false
339 ##     anonymous_protocol: sasl_anon
340 ##
341 ## To use both anonymous and internal authentication:
342 ##
343 ## host_config:
344 ##   "public.example.org":
345 ##     auth_method:
346 ##       - internal
347 ##       - anonymous
348
349 ###.  ==============
350 ###'  DATABASE SETUP
351
352 ## ejabberd by default uses the internal Mnesia database,
353 ## so you do not necessarily need this section.
354 ## This section provides configuration examples in case
355 ## you want to use other database backends.
356 ## Please consult the ejabberd Guide for details on database creation.
357
358 ##
359 ## MySQL server:
360 ##
361 ## sql_type: mysql
362 ## sql_server: "server"
363 ## sql_database: "database"
364 ## sql_username: "username"
365 ## sql_password: "password"
366 ##
367 ## If you want to specify the port:
368 ## sql_port: 1234
369
370 ##
371 ## PostgreSQL server:
372 ##
373 ## sql_type: pgsql
374 ## sql_server: "server"
375 ## sql_database: "database"
376 ## sql_username: "username"
377 ## sql_password: "password"
378 ##
379 ## If you want to specify the port:
380 ## sql_port: 1234
381 ##
382 ## If you use PostgreSQL, have a large database, and need a
383 ## faster but inexact replacement for "select count(*) from users"
384 ##
385 ## pgsql_users_number_estimate: true
386
387 ##
388 ## SQLite:
389 ##
390 ## sql_type: sqlite
391 ## sql_database: "/path/to/database.db"
392
393 ##
394 ## ODBC compatible or MSSQL server:
395 ##
396 ## sql_type: odbc
397 ## sql_server: "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"
398
399 ##
400 ## Number of connections to open to the database for each virtual host
401 ##
402 ## sql_pool_size: 10
403
404 ##
405 ## Interval to make a dummy SQL request to keep the connections to the
406 ## database alive. Specify in seconds: for example 28800 means 8 hours
407 ##
408 ## sql_keepalive_interval: undefined
409
410 ###.  ===============
411 ###'  TRAFFIC SHAPERS
412
413 shaper:
414   ##
415   ## The "normal" shaper limits traffic speed to 1000 B/s
416   ##
417   normal: 1000
418
419   ##
420   ## The "fast" shaper limits traffic speed to 50000 B/s
421   ##
422   fast: 50000
423
424 ##
425 ## This option specifies the maximum number of elements in the queue
426 ## of the FSM. Refer to the documentation for details.
427 ##
428 max_fsm_queue: 10000
429
430 ###.   ====================
431 ###'   ACCESS CONTROL LISTS
432 acl:
433   ##
434   ## The 'admin' ACL grants administrative privileges to XMPP accounts.
435   ## You can put here as many accounts as you want.
436   ##
437   admin:
438      user:
439        - ""
440
441   ##
442   ## Blocked users
443   ##
444   ## blocked:
445   ##   user:
446   ##     - "baduser@example.org"
447   ##     - "test"
448
449   ## Local users: don't modify this.
450   ##
451   local:
452     user_regexp: ""
453
454   ##
455   ## More examples of ACLs
456   ##
457   ## jabberorg:
458   ##   server:
459   ##     - "jabber.org"
460   ## aleksey:
461   ##   user:
462   ##     - "aleksey@jabber.ru"
463   ## test:
464   ##   user_regexp: "^test"
465   ##   user_glob: "test*"
466
467   ##
468   ## Loopback network
469   ##
470   loopback:
471     ip:
472       - "127.0.0.0/8"
473       - "::1/128"
474       - "::FFFF:127.0.0.1/128"
475
476   ##
477   ## Bad XMPP servers
478   ##
479   ## bad_servers:
480   ##   server:
481   ##     - "xmpp.zombie.org"
482   ##     - "xmpp.spam.com"
483
484 ##
485 ## Define specific ACLs in a virtual host.
486 ##
487 ## host_config:
488 ##   "localhost":
489 ##     acl:
490 ##       admin:
491 ##         user:
492 ##           - "bob-local@localhost"
493
494 ###.  ============
495 ###'  SHAPER RULES
496
497 shaper_rules:
498   ## Maximum number of simultaneous sessions allowed for a single user:
499   max_user_sessions: 10
500   ## Maximum number of offline messages that users can have:
501   max_user_offline_messages:
502     - 5000: admin
503     - 100
504   ## For C2S connections, all users except admins use the "normal" shaper
505   c2s_shaper:
506     - none: admin
507     - normal
508   ## All S2S connections use the "fast" shaper
509   s2s_shaper: fast
510
511 ###.  ============
512 ###'  ACCESS RULES
513 access_rules:
514   ## This rule allows access only for local users:
515   local:
516     - allow: local
517   ## Only non-blocked users can use c2s connections:
518   c2s:
519     - deny: blocked
520     - allow
521   ## Only admins can send announcement messages:
522   announce:
523     - allow: admin
524   ## Only admins can use the configuration interface:
525   configure:
526     - allow: admin
527   ## Only accounts of the local ejabberd server can create rooms:
528   muc_create:
529     - allow: local
530   ## Only accounts on the local ejabberd server can create Pubsub nodes:
531   pubsub_createnode:
532     - allow: local
533   ## In-band registration allows registration of any possible username.
534   ## To disable in-band registration, replace 'allow' with 'deny'.
535   register:
536     - allow
537   ## Only allow to register from localhost
538   trusted_network:
539     - allow: loopback
540     ## Do not establish S2S connections with bad servers
541     ## If you enable this you also have to uncomment "s2s_access: s2s"
542     ## s2s:
543     ##   - deny:
544     ##     - ip: "XXX.XXX.XXX.XXX/32"
545     ##   - deny:
546     ##     - ip: "XXX.XXX.XXX.XXX/32"
547     ##   - allow
548
549 ## ===============
550 ## API PERMISSIONS
551 ## ===============
552 ##
553 ## This section allows you to define who and using what method
554 ## can execute commands offered by ejabberd.
555 ##
556 ## By default "console commands" section allow executing all commands
557 ## issued using ejabberdctl command, and "admin access" section allows
558 ## users in admin acl that connect from 127.0.0.1 to  execute all
559 ## commands except start and stop with any available access method
560 ## (ejabberdctl, http-api, xmlrpc depending what is enabled on server).
561 ##
562 ## If you remove "console commands" there will be one added by
563 ## default allowing executing all commands, but if you just change
564 ## permissions in it, version from config file will be used instead
565 ## of default one.
566 ##
567 api_permissions:
568   "console commands":
569     from:
570       - ejabberd_ctl
571     who: all
572     what: "*"
573   "admin access":
574     who:
575       - access:
576         - allow:
577           - acl: loopback
578           - acl: admin
579       - oauth:
580         - scope: "ejabberd:admin"
581         - access:
582           - allow:
583             - acl: loopback
584             - acl: admin
585     what:
586       - "*"
587       - "!stop"
588       - "!start"
589   "public commands":
590     who:
591       - ip: "127.0.0.1/8"
592     what:
593       - "status"
594       - "connected_users_number"
595
596 ## By default the frequency of account registrations from the same IP
597 ## is limited to 1 account every 10 minutes. To disable, specify: infinity
598 ## registration_timeout: 600
599
600 ##
601 ## Define specific Access Rules in a virtual host.
602 ##
603 ## host_config:
604 ##   "localhost":
605 ##     access:
606 ##       c2s:
607 ##         - allow: admin
608 ##         - deny
609 ##       register:
610 ##         - deny
611
612 ###.  ================
613 ###'  DEFAULT LANGUAGE
614
615 ##
616 ## language: Default language used for server messages.
617 ##
618 language: "en"
619
620 ##
621 ## Set a different default language in a virtual host.
622 ##
623 ## host_config:
624 ##   "localhost":
625 ##     language: "ru"
626
627 ###.  =======
628 ###'  CAPTCHA
629
630 ##
631 ## Full path to a script that generates the image.
632 ##
633 ## captcha_cmd: "/usr/share/ejabberd/captcha.sh"
634
635 ##
636 ## Host for the URL and port where ejabberd listens for CAPTCHA requests.
637 ##
638 ## captcha_host: "example.org:5280"
639
640 ##
641 ## Limit CAPTCHA calls per minute for JID/IP to avoid DoS.
642 ##
643 ## captcha_limit: 5
644
645 ###.  ====
646 ###'  ACME
647 ##
648 ## In order to use the acme certificate acquiring through "Let's Encrypt"
649 ## an http listener has to be configured to listen to port 80 so that
650 ## the authorization challenges posed by "Let's Encrypt" can be solved.
651 ##
652 ## A simple way of doing this would be to add the following in the listening
653 ## section and to configure port forwarding from 80 to 5281 either via NAT
654 ## (for ipv4 only) or using frontends such as haproxy/nginx/sslh/etc.
655 ##   -
656 ##    port: 5281
657 ##    ip: "::"
658 ##    module: ejabberd_http
659
660 acme:
661
662   ## A contact mail that the ACME Certificate Authority can contact in case of
663   ## an authorization issue, such as a server-initiated certificate revocation.
664   ## It is not mandatory to provide an email address but it is highly suggested.
665   contact: "mailto:example-admin@example.com"
666
667
668   ## The ACME Certificate Authority URL.
669   ## This could either be:
670   ##   - https://acme-v01.api.letsencrypt.org - (Default) for the production CA
671   ##   - https://acme-staging.api.letsencrypt.org - for the staging CA
672   ##   - http://localhost:4000 - for a local version of the CA
673   ca_url: "https://acme-v01.api.letsencrypt.org"
674
675 ###.  =======
676 ###'  MODULES
677
678 ##
679 ## Modules enabled in all ejabberd virtual hosts.
680 ##
681 modules:
682   mod_adhoc: {}
683   mod_admin_extra: {}
684   mod_announce:   # recommends mod_adhoc
685     access: announce
686   mod_blocking: {}   # requires mod_privacy
687   mod_caps: {}
688   mod_carboncopy: {}
689   mod_client_state: {}
690   mod_configure: {}   # requires mod_adhoc
691   ## mod_delegation: {}   # for xep0356
692   mod_disco: {}
693   mod_echo: {}
694   mod_irc: {}
695   mod_bosh: {}
696   ## mod_http_fileserver:
697   ##   docroot: "/var/www"
698   ##   accesslog: "/var/log/ejabberd/access.log"
699   ## mod_http_upload:
700   ##   # docroot: "@HOME@/upload"
701   ##   put_url: "https://@HOST@:5444"
702   ##   thumbnail: false # otherwise needs the identify command from ImageMagick installed
703   ## mod_http_upload_quota:
704   ##   max_days: 30
705   mod_last: {}
706   ## XEP-0313: Message Archive Management
707   ## You might want to setup a SQL backend for MAM because the mnesia database is
708   ## limited to 2GB which might be exceeded on large servers
709   ## mod_mam: {} # for xep0313, mnesia is limited to 2GB, better use an SQL backend
710   mod_muc:
711     ## host: "conference.@HOST@"
712     access:
713       - allow
714     access_admin:
715       - allow: admin
716     access_create: muc_create
717     access_persistent: muc_create
718   mod_muc_admin: {}
719   ## mod_muc_log: {}
720   ## mod_multicast: {}
721   mod_offline:
722     access_max_user_messages: max_user_offline_messages
723   mod_ping: {}
724   ## mod_pres_counter:
725   ##   count: 5
726   ##   interval: 60
727   mod_privacy: {}
728   mod_private: {}
729   ## mod_proxy65: {}
730   mod_pubsub:
731     access_createnode: pubsub_createnode
732     ## reduces resource comsumption, but XEP incompliant
733     ignore_pep_from_offline: true
734     ## XEP compliant, but increases resource comsumption
735     ## ignore_pep_from_offline: false
736     last_item_cache: false
737     plugins:
738       - "flat"
739       - "hometree"
740       - "pep"   # pep requires mod_caps
741   mod_push: {}
742   mod_push_keepalive: {}
743   ## mod_register:
744   ##
745   ## Protect In-Band account registrations with CAPTCHA.
746   ##
747   ##   captcha_protected: true
748   ##
749   ## Set the minimum informational entropy for passwords.
750   ##
751   ##   password_strength: 32
752   ##
753   ## After successful registration, the user receives
754   ## a message with this subject and body.
755   ##
756   ##   welcome_message:
757   ##     subject: "Welcome!"
758   ##     body: |-
759   ##       Hi.
760   ##       Welcome to this XMPP server.
761   ##
762   ## When a user registers, send a notification to
763   ## these XMPP accounts.
764   ##
765   ##   registration_watchers:
766   ##     - "admin1@example.org"
767   ##
768   ## Only clients in the server machine can register accounts
769   ##
770   ##   ip_access: trusted_network
771   ##
772   ## Local c2s or remote s2s users cannot register accounts
773   ##
774   ##   access_from: deny
775   ##   access: register
776   mod_roster:
777     versioning: true
778   mod_shared_roster: {}
779   mod_stats: {}
780   mod_time: {}
781   mod_vcard:
782     search: false
783   mod_vcard_xupdate: {}
784   ## Convert all avatars posted by Android clients from WebP to JPEG
785   ## mod_avatar:  # this module needs compile option --enable-graphics
786   ##   convert:
787   ##     webp: jpeg
788   mod_version: {}
789   mod_stream_mgmt:
790     resend_on_timeout: if_offline
791   ##   Non-SASL Authentication (XEP-0078) is now disabled by default
792   ##   because it's obsoleted and is used mostly by abandoned
793   ##   client software
794   ## mod_legacy_auth: {}
795   ##   The module for S2S dialback (XEP-0220). Please note that you cannot
796   ##   rely solely on dialback if you want to federate with other servers,
797   ##   because a lot of servers have dialback disabled and instead rely on
798   ##   PKIX authentication. Make sure you have proper certificates installed
799   ##   and check your accessibility at https://check.messaging.one/
800   mod_s2s_dialback: {}
801   mod_http_api: {}
802
803 ##
804 ## Enable modules with custom options in a specific virtual host
805 ##
806 ## host_config:
807 ##   "localhost":
808 ##     modules:
809 ##       mod_echo:
810 ##         host: "mirror.localhost"
811
812 ##
813 ## Enable modules management via ejabberdctl for installation and
814 ## uninstallation of public/private contributed modules
815 ## (enabled by default)
816 ##
817
818 allow_contrib_modules: true
819
820 ###.
821 ###'
822 ### Local Variables:
823 ### mode: yaml
824 ### End:
825 ### vim: set filetype=yaml tabstop=8 foldmarker=###',###. foldmethod=marker: