.. _configuration:

Configuration
=============

.. only:: man

   Synopsis
   --------

   urlwatch --edit-config

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


The global configuration for urlwatch contains basic settings for the generic
behavior of urlwatch as well as the :ref:`reporters`.

.. only:: html or pdf

    You can edit it with:

    .. code:: bash

       urlwatch --edit-config

.. _configuration_display:

Display
-------

In addition to always reporting changes (which is the whole point of urlwatch),
urlwatch by default reports newly-added (``new``) pages and errors (``error``).
You can change this behavior in the ``display`` section of the configuration:

.. code:: yaml

   display:
     new: true
     error: true
     unchanged: false
     empty-diff: true

If you set ``unchanged`` to ``true``, urlwatch will always report all pages
that are checked but have not changed.

The ``empty-diff`` settings control what happens if a page is ``changed``, but
due to e.g. a ``diff_filter`` the diff is reduced to the empty string. If set
to ``true``, urlwatch will report an (empty) change. If set to ``false``, the
change will not be included in the report.


Filter changes are not applied for ``unchanged``
************************************************

Due to the way the filtered output is stored, ``unchanged`` will always report
the old contents with the filters at the time of retrieval, meaning that any
changes you do to the ``filter`` of a job will not be visible in the
``unchanged`` report. When the page changes, the new filter will be applied.

For this reason, ``unchanged`` cannot be used to test filters, you should use
the ``--test-filter`` command line option to apply your current filter to the
current page contents.


Reporters
---------

"Reporters" are the modules that deliver notifications through their
respective medium when they are enabled through the configuration file.

.. only:: html or pdf

    Reporter-specific options are described in :ref:`reporters`.

.. only:: man

    See :manpage:`urlwatch-reporters(5)` for reporter-specific options.

In addition to the reporter-specific options, all reporters support these
options:

* ``enabled``: *[bool]* Activate the reporter. (default: False)
* ``separate``: *[bool]* Send a report for each job rather than a combined
  report for all jobs. (default: False)

Reporters are implemented in a hierarchy, such that these common configuration
settings will apply to all descendent reporters:

.. inheritance-ascii-tree:: urlwatch.reporters.ReporterBase

.. note::
   Setting the `email` reporter's `html` option to `true` will cause it to
   inherit from the `html` configuration.

Here is an example configuration that reports on standard
output in color, as well as HTML e-mail using ``sendmail``:

.. code:: yaml

   report:
     text:
       details: true
       footer: true
       line_length: 75
     html:
       diff: unified
       separate: true
     email:
       enabled: true
       method: sendmail
       sendmail:
           path: /usr/sbin/sendmail
       from: 'urlwatch@example.org'
       to: 'you@example.org'
       html: true
       subject: '{count} changes: {jobs}'
     stdout:
       color: true
       enabled: true

Any reporter-specific configuration must be below the ``report`` key
in the configuration.

.. _job_defaults:

Job Defaults
------------

If you want to change some settings for all your jobs, edit the
``job_defaults`` section in your config file:

.. code-block:: yaml

   job_defaults:
     all:
       diff_tool: wdiff
     url:
       ignore_connection_errors: true

The above config file sets all jobs to use ``wdiff`` as diff tool, and all
``url`` jobs to ignore connection errors.

The possible sub-keys to ``job_defaults`` are:

* ``all``: Applies to all your jobs, independent of its kind
* ``shell``: Applies only to ``shell`` jobs (with key ``command``)
* ``url``: Applies only to ``url`` jobs (with key ``url``)
* ``browser``: Applies only to ``browser`` jobs (with key ``navigate``)

See :ref:`jobs` about the different job kinds and what the possible keys are.

.. only:: man

    Files
    -----

    ``$XDG_CONFIG_HOME/urlwatch/urlwatch.yaml``

    See also
    --------

    :manpage:`urlwatch(1)`,
    :manpage:`urlwatch-reporters(5)`,
    :manpage:`urlwatch-intro(7)`,
    :manpage:`urlwatch-cookbook(7)`

