# <filetitle>Recoll main configuration file, recoll.conf</filetitle>

# The XML tags in the comments are used to help produce the documentation
# from the sample/reference file, and not at all at run time, where
# comments are just comments. Edit at will.

# This typically lives in $prefix/share/recoll/examples and provides
# default values. You can override selected parameters by adding assigments
# to ~/.recoll/recoll.conf (or $RECOLL_CONFDIR/recoll.conf)
#
# Most of the important values in this file can be set from the GUI
# configuration menus, which may be an easier approach than direct editing.
#
# Note about quoting: values which are parts of list parameters and contain white space can be
# quoted with "double quotes". Double quotes processing is NOT applied to single value parameter,
# and using quotes there will result in bad values.

# <grouptitle id="WHATDOCS">Parameters affecting what documents we index</grouptitle> 

# <var name="topdirs" type="string">
# <brief>Space-separated list of files or directories to recursively index.</brief>
# <descr>You can use symbolic links in the list, they will be followed, independently of the value
# of the followLinks variable. The default value is ~ : recursively index the user home folder.
# </descr></var>
topdirs = ~

# <var name="monitordirs" type="string">
# <brief>Space-separated list of files or directories to monitor for
# updates.</brief> 
# <descr>When running the real-time indexer, this allows monitoring only a
# subset of the whole indexed area. The elements must be included in the
# tree defined by the 'topdirs' members.</descr></var>
#monitordirs=

# <var name="skippedNames" type="string">
#
# <brief>File and directory names which should be ignored.</brief>
# 
# <descr> White space separated list of wildcard patterns (simple ones, not paths, must contain no
# '/' characters), which will be tested against file and directory names.
#
# Have a look at the default configuration for the initial value, some entries may not suit your
# situation. The easiest way to see it is through the GUI Index configuration "local parameters"
# panel.
#
# The list in the default configuration does not exclude hidden directories (names beginning with a
# dot), which means that it may index quite a few things that you do not want. On the other hand,
# email user agents like Thunderbird usually store messages in hidden directories, and you probably
# want this indexed. One possible solution is to have ".*" in "skippedNames", and add things like
# "~/.thunderbird" "~/.evolution" to "topdirs".
#
# Not even the file names are indexed for patterns in this list, see the "noContentSuffixes"
# variable for an alternative approach which indexes the file names. Can be redefined for any
# subtree.</descr>
#
#</var>
skippedNames = #* *~ caughtspam tmp loop.ps \
    Cache cache* .cache .ccls-cache .thumbnails \
    .beagle CVS .svn .git .hg .bzr .xsession-errors \
    *.pyc __pycache__ .pytest_cache .tox .direnv \
    .recoll* xapiandb recollrc recoll.conf recoll.ini *.rclwe

# <var name="skippedNames-" type="string">
#
# <brief>List of name patterns to remove from the default skippedNames list.</brief>
# <descr>Allows modifying the list in the local configuration without copying it.</descr></var>
skippedNames- =

# <var name="skippedNames+" type="string">
#
# <brief>List of name patterns to add to the default skippedNames list.</brief>
# <descr>Allows modifying the list in the local configuration without copying it.</descr></var>
skippedNames+ =

# <var name="onlyNames" type="string">
#
# <brief>Regular file name filter patterns.</brief>
# <descr>This is normally empty. If set, only the file names not in skippedNames and matching one of
# the patterns will be considered for indexing. Can be redefined per subtree. Does not apply to
# directories.</descr></var>
onlyNames =

# <var name="noContentSuffixes" type="string">
#
# <brief>List of name endings (not necessarily dot-separated suffixes) for
# which we don't try MIME type identification, and don't uncompress or
# index content.</brief><descr>Only the names will be indexed. This
# complements the now obsoleted recoll_noindex list from the mimemap file,
# which will go away in a future release (the move from mimemap to
# recoll.conf allows editing the list through the GUI). This is different
# from skippedNames because these are name ending matches only (not
# wildcard patterns), and the file name itself gets indexed normally. This
# can be redefined for subdirectories.</descr></var>
noContentSuffixes = .md5 .map \
       .o .lib .dll .a .sys .exe .com \
       .mpp .mpt .vsd .sqlite \
       .img .img.gz .img.bz2 .img.xz .image .image.gz .image.bz2 .image.xz .ttf \
       .dat .bak .rdf .log.gz .log .db .msf .pid \
       ,v ~ #

# <var name="noContentSuffixes-" type="string">
#
# <brief>List of name endings to remove from the default noContentSuffixes
# list.</brief><descr></descr></var>
noContentSuffixes- =

# <var name="noContentSuffixes+" type="string">
#
# <brief>List of name endings to add to the default noContentSuffixes
# list.</brief><descr></descr></var>
noContentSuffixes+ =


# <var name="skippedPaths" type="string">
#
# <brief>Absolute paths we should not go into.</brief>
#
# <descr>Space-separated list of wildcard expressions for absolute filesystem paths (for files or
# directories). The variable must be defined at the top level of the configuration file, not in a
# subsection.
#
# Any value in the list must be textually consistent with the values in topdirs, no attempts are
# made to resolve symbolic links. In practise, if, as is frequently the case, /home is a link to
# /usr/home, your default topdirs will have a single entry "~" which will be translated to
# "/home/yourlogin". In this case, any skippedPaths entry should start with "/home/yourlogin" *not*
# with "/usr/home/yourlogin".
#
# The index and configuration directories will automatically be added to the list.
#
# The expressions are matched using "fnmatch(3)" with the FNM_PATHNAME flag set by default. This
# means that "/" characters must be matched explicitly. You can set "skippedPathsFnmPathname" to 0
# to disable the use of FNM_PATHNAME (meaning that "/*/dir3" will match "/dir1/dir2/dir3").
#
# The default value contains the usual mount point for removable media to remind you that it is in
# most cases a bad idea to have Recoll work on these. Explicitly adding "/media/xxx" to the "topdirs"
# variable will override this.</descr></var>
skippedPaths = /media

# <var name="skippedPathsFnmPathname" type="bool"><brief>Set to 0 to
# override use of FNM_PATHNAME for matching skipped
# paths.</brief><descr></descr></var> 
#skippedPathsFnmPathname = 1

# <var name="nowalkfn" type="string">
#
# <brief>File name which will cause its parent directory to be skipped.</brief>
# <descr>Any directory containing a file with this name will be skipped as
# if it was part of the skippedPaths list. Ex: .recoll-noindex</descr></var>
#nowalkfn = .recoll-noindex

# <var name="daemSkippedPaths" type="string">
#
# <brief>skippedPaths equivalent specific to
# real time indexing.</brief><descr>This enables having parts of the tree
# which are initially indexed but not monitored. If daemSkippedPaths is
# not set, the daemon uses skippedPaths.</descr></var>
#daemSkippedPaths = 

# <var name="followLinks" type="bool"><brief>Follow symbolic links during
# indexing.</brief><descr>The default is to ignore symbolic links to avoid
# multiple indexing of linked files. No effort is made to avoid duplication
# when this option is set to true. This option can be set individually for
# each of the "topdirs" members by using sections. It can not be changed
# below the "topdirs" level. Links in the "topdirs" list itself are always
# followed.</descr></var>
#followLinks = 0

# <var name="indexedmimetypes" type="string">
#
# <brief>Restrictive list of indexed MIME types.</brief>
#
# <descr>Normally not set (in which case all supported types are indexed). If it is set, only the
# types from the list will have their contents indexed. The names will be indexed anyway if
# indexallfilenames is set (default). MIME type names should be taken from the mimemap file (the
# values may be different from xdg-mime or file -i output in some cases). Can be redefined for
# subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values.</descr></var>
#indexedmimetypes = 

# <var name="excludedmimetypes" type="string">
#
# <brief>List of excluded MIME types.</brief>
#
# <descr>Lets you exclude some types from indexing. MIME type names should be taken from the mimemap
# file (the values may be different from xdg-mime or file -i output in some cases) Can be redefined
# for subtrees. Recoll versions after 1.43.7 (excluded) support wildcards in the values.</descr>
# </var>
#excludedmimetypes = 

# <var name="nomd5types" type="string">
#
# <brief>MIME types for which we don't compute a md5 hash.</brief>
# 
#  <descr>md5 checksums are used only for deduplicating results, and can be very expensive to
#  compute on multimedia or other big files. This list lets you turn off md5 computation for
#  selected types. It is global (no redefinition for subtrees). At the moment, it only has an effect
#  for external handlers (exec and execm). The file types can be specified by listing either MIME
#  types (e.g. audio/mpeg) or handler names (e.g. rclaudio.py).</descr>
# </var>
nomd5types = rclaudio.py video/*

# <var name="compressedfilemaxkbs" type="int">
#
# <brief>Size limit for compressed files.</brief>
#
# <descr>We need to decompress these in a temporary directory for identification, which can be
# wasteful in some cases. Limit the waste. Negative means no limit. 0 results in no processing of
# any compressed file. Default 100 MB. This does *not* concern archives like zip or rar files, but
# only single, e.g. gzipped, files.</descr></var>
compressedfilemaxkbs = 100000

# <var name="textfilemaxmbs" type="int">
#
# <brief>Size limit for text files.</brief>
#
# <descr>Mostly for skipping monster logs. Also used for max mail msg body size. Default 20 MB. Use
# a value of -1 to disable.</descr></var>
textfilemaxmbs = 20

# <var name="textfilepagekbs" type="int">
# <brief>Page size for text files.</brief>
#
# <descr>If this is set, text/plain files will be divided into documents of approximately this
# size. This will reduce memory usage at index time and help with loading data in the preview window
# at query time. Particularly useful with very big files, such as application or system logs. Also
# see textfilemaxmbs and compressedfilemaxkbs.</descr></var>
textfilepagekbs = 1000

# <var name="textunknownasplain" type="bool">
#
# <brief>Process unknown text/xxx files as text/plain</brief>
#
# <descr>Allows indexing misc. text files identified as text/whatever by "file" or "xdg-mime"
# without having to explicitly set config entries for them. This works fine for indexing (also will
# cause processing of a lot of useless files), but the documents indexed this way will be opened by
# the desktop viewer, even if text/plain has a specific editor.</descr> </var>
#textunknownasplain=0

# <var name="indexallfilenames" type="bool">
#
# <brief>Index the file names of unprocessed files.</brief>
#
# <descr>Index the names of files the contents of which we don't index because of an excluded or
# unsupported MIME type.</descr></var>
indexallfilenames = 1

# <var name="usesystemfilecommand" type="bool">
#
# <brief>Try to guess MIME type from data.</brief>
#
# <descr>The name is historical and kept for compatibility, old versions used to execute 'file'
# or 'xdg-mime' to determine a MIME type when not using the extension. Current Recoll versions
# use libmagic for this. (A compile-time configuration can still restore the old behaviour,
# disabling libmagic and using a command).
# This identification method can be more accurate in some cases than the suffix-based one, but it's
# slower and will cause the indexing of many bogus extension-less "text" files. In addition it will
# identify all zip-based formats (e.g. libreoffice) as application/zip, which is of course wrong, so
# it can only be a secondary step.
# Also see "systemfilecommand". </descr></var>
usesystemfilecommand = 1

# <var name="systemfilecommand" type="string">
# <brief>Command to use for guessing the MIME type (if not compiled to use libmagic).</brief>
# <descr>The default is now to use libmagic instead. If in use, this should be a "file --mime-type"
# workalike. The file path will be added as a last parameter to the command line. "xdg-mime" works
# better than the traditional "file" command, and is now the configured default (with a hard-coded
# fallback to "file")</descr></var>
systemfilecommand = xdg-mime query filetype

# <var name="processwebqueue" type="bool"><brief>Decide if we process the
# Web queue.</brief><descr>The queue is a directory where the Recoll Web
# browser plugins create the copies of visited pages.</descr></var>
processwebqueue = 0

# <var name="membermaxkbs" type="int">
#
# <brief>Size limit for archive members.</brief>
# <descr>This is passed to the MIME handlers in the environment as
# RECOLL_FILTER_MAXMEMBERKB.</descr></var>
membermaxkbs = 50000



# <grouptitle id="TERMS">Parameters affecting how we generate terms and organize the index
# </grouptitle> 

# Changing some of these parameters will imply a full
# reindex. Also, when using multiple indexes, it may not make sense
# to search indexes that don't share the values for these parameters,
# because they usually affect both search and index operations.


# <var name="indexStripChars" type="bool"><brief>Decide if we store
# character case and diacritics in the index.</brief><descr>If we do,
# searches sensitive to case and diacritics can be performed, but the index
# will be bigger, and some marginal weirdness may sometimes occur. The
# default is a stripped index. When using multiple indexes for a search,
# this parameter must be defined identically for all. Changing the value
# implies an index reset.</descr></var>
indexStripChars = 1

# <var name="indexStoreDocText" type="bool">
# <brief>Decide if we store the documents' text content in the index.</brief>
#
# <descr>Storing the text allows extracting snippets from it at query time, instead of building them
# from index position data.
#
# Newer Xapian index formats have rendered our use of positions list unacceptably slow in some
# cases. The last Xapian index format with good performance for the old method is Chert, which is
# default for 1.2, still supported but not default in 1.4 and will be dropped in 1.6.
#
# The stored document text is translated from its original format to UTF-8 plain text, but not
# stripped of upper-case, diacritics, or punctuation signs. Storing it increases the index size by
# 10-20% typically, but also allows for nicer snippets, so it may be worth enabling it even if not
# strictly needed for performance if you can afford the space.
#
# The variable only has an effect when creating an index, meaning that the xapiandb directory must
# not exist yet. Its exact effect depends on the Xapian version.
#
# For Xapian 1.4, if the variable is set to 0, we used to use the Chert format and not store the
# text. If the variable was 1, Glass was used, and the text stored. We don't do this any more:
# storing the text has proved to be the much better option, and dropping this possibility simplifies
# the code.
#
# So now, the index format for a new index is always the default, but the variable still controls if
# the text is stored or not, and the abstract generation method. With Xapian 1.4 and later, and the
# variable set to 0, abstract generation may be very slow, but this setting may still be useful to
# save space if you do not use abstract generation at all, by using the appropriate setting in the
# GUI, and/or avoiding the Python API or recollq options which would trigger it.
# </descr></var>
indexStoreDocText = 1


# <var name="nonumbers" type="bool"><brief>Decides if terms will be
# generated for numbers.</brief><descr>For example "123", "1.5e6",
# 192.168.1.4, would not be indexed if nonumbers is set ("value123" would
# still be). Numbers are often quite interesting to search for, and this
# should probably not be set except for special situations, ie, scientific
# documents with huge amounts of numbers in them, where setting nonumbers
# will reduce the index size. This can only be set for a whole index, not
# for a subtree.</descr></var>
#nonumbers = 0

# <var name="notermpositions" type="bool">
#   <brief>Do not store term positions.</brief>
#   <descr>Term positions allow for phrase and proximity searches, but make the index much bigger.
#    In some special circumstances, you may want to dispense with them.</descr></var>
#notermpositions = 0

# <var name="dehyphenate" type="bool">
# <brief>Determines if we index "coworker" also when the input is "co-worker".</brief>
# <descr>This is new in version 1.22, and on by default. Setting the variable to off allows
# restoring the previous behaviour.</descr></var>
#dehyphenate = 1

# <var name="indexedpunctuation" type="string">
#
# <brief>String of UTF-8 punctuation characters to be indexed as words.</brief>
#
# <descr>The resulting terms will then be searchable and, for example, by setting the parameter to
# "%€" (without the double quotes), you would be able to search separately for "100%" or "100€" Note
# that "100%" or "100 %" would be indexed in the same way, the characters are their own word
# separators.</descr></var>
#indexedpunctuation = 

# <var name="backslashasletter" type="bool">
# 
# <brief>Process backslash as a normal letter.</brief>
#
# <descr>This may make sense for people wanting to index TeX commands as such but is not of much
# general use.</descr></var>
#backslashasletter = 0

# <var name="underscoreasletter" type="bool">
#  <brief>Process underscore as normal letter.</brief>
#  <descr>This makes sense in so many cases that one wonders if it should
#  not be the default.</descr>
# </var>
#underscoreasletter = 0

# <var name="maxtermlength" type="int" values="10 200 40">
#  <brief>Maximum term length in Unicode characters.</brief>
#  <descr>Words longer than this will be discarded.
#  The default is 40 and used to be hard-coded, but it can now be
#  adjusted. You may need an index reset if you change the value.</descr>
# </var>
#maxtermlength = 40

# <var name="maxdbdatarecordkbs" type="int" values="10 20000 1000">
#  <brief>Maximum binary size of a Xapian document data record.</brief>
#  <descr>The data record holds "stored" document metadata fields. A very big size
# usually indicates a document parse error. Xapian has a hard limit of around 100MB
# for this.</descr>
# </var>
#maxdbdatarecordkbs = 1000

# <var name="maxdbstoredtextmbs" type="int" values="1 80 80">
#  <brief>Maximum binary size of a document stored text.</brief>
#  <descr>Xapian has a hard limit of around 100MB for the compressed value, but our
#  limit is before compression, so there may be some wiggle room.</descr>
# </var>
#maxdbstoredtextmbs = 80


# <var name="nocjk" type="bool"><brief>Decides if specific East Asian
# (Chinese Korean Japanese) characters/word splitting is turned
# off.</brief><descr>This will save a small amount of CPU if you have no CJK
# documents. If your document base does include such text but you are not
# interested in searching it, setting nocjk may be a
# significant time and space saver.</descr></var>
#nocjk = 0

# <var name="cjkngramlen" type="int"><brief>This lets you adjust the size of
# n-grams used for indexing CJK text.</brief><descr>The default value of 2 is
# probably appropriate in most cases. A value of 3 would allow more precision
# and efficiency on longer words, but the index will be approximately twice
# as large.</descr></var>
#cjkngramlen = 2

# <var name="hangultagger" type="string">
# <brief>External tokenizer for Korean Hangul.</brief>
# <descr>This allows using an language specific processor for extracting terms from Korean text,
# instead of the generic n-gram term generator.
# See https://www.recoll.org/pages/recoll-korean.html for instructions.</descr>/</var>
#hangultagger = Mecab

# <var name="chinesetagger" type="string">
# <brief>External tokenizer for Chinese.</brief>
# <descr>This allows using the language specific Jieba tokenizer for extracting
# meaningful terms from Chinese text, instead of the generic n-gram term generator.
# See https://www.recoll.org/pages/recoll-chinese.html for instructions.
# </descr>/</var>
#chinesetagger = Jieba


# <var name="indexstemminglanguages" type="string">
#
# <brief>Languages for which to create stemming expansion
# data.</brief><descr>Stemmer names can be found by executing "recollindex
# -l", or this can also be set from a list in the GUI. The values are full
# language names, e.g. english, french...</descr></var>
indexstemminglanguages = english 

# <var name="defaultcharset" type="string"><brief>Default character
# set.</brief><descr>This is used for files which do not contain a
# character set definition (e.g.: text/plain). Values found inside files,
# e.g. a "charset" tag in HTML documents, will override it. If this is not
# set, the default character set is the one defined by the NLS environment
# ($LC_ALL, $LC_CTYPE, $LANG), or ultimately iso-8859-1 (cp-1252 in fact).
# If for some reason you want a general default which does not match your
# LANG and is not 8859-1, use this variable. This can be redefined for any
# sub-directory.</descr></var>
#defaultcharset = iso-8859-1

# <var name="unac_except_trans" type="string">
#
# <brief>A list of characters, encoded in UTF-8, which should be handled specially when converting
# text to unaccented lowercase.</brief>

# <descr>For example, in Swedish, the letter a with diaeresis has full alphabet citizenship and
# should not be turned into an a.  Each element in the space-separated list has the special
# character as first element and the translation following. The handling of both the lowercase and
# upper-case versions of a character should be specified, as appartenance to the list will turn-off
# both standard accent and case processing. The value is global and affects both indexing and
# querying.  We also convert a few confusing Unicode characters (quotes, hyphen) to their ASCII
# equivalent to avoid "invisible" search failures.
#
# Examples: 
# Swedish:
# unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ﬀff ﬁfi ﬂfl åå Åå ’' ❜' ʼ' ‐- 
# - German:
# unac_except_trans = ää Ää öö Öö üü Üü ßss œoe Œoe æae Æae ﬀff ﬁfi ﬂfl ’' ❜' ʼ' ‐- 
# - French: you probably want to decompose oe and ae and nobody would type
# a German ß
# unac_except_trans = ßss œoe Œoe æae Æae ﬀff ﬁfi ﬂfl ’' ❜' ʼ' ‐- 
# - The default for all until someone protests follows. These decompositions
# are not performed by unac, but it is unlikely that someone would type the
# composed forms in a search.
# unac_except_trans = ßss œoe Œoe æae Æae ﬀff ﬁfi ﬂfl ’' ❜' ʼ' ‐-
</descr></var>
unac_except_trans = ßss œoe Œoe æae Æae ﬀff ﬁfi ﬂfl ’' ❜' ʼ' ‐- 

# <var name="maildefcharset" type="string"><brief>Overrides the default
# character set for email messages which don't specify
# one.</brief><descr>This is mainly useful for readpst (libpst) dumps,
# which are utf-8 but do not say so.</descr></var>
#maildefcharset=

# <var name="localfields" type="string"><brief>Set fields on all files
# (usually of a specific fs area).</brief><descr>Syntax is the usual:
# name = value ; attr1 = val1 ; [...]
# value is empty so this needs an initial semi-colon. This is useful, e.g.,
# for setting the rclaptg field for application selection inside
# mimeview.</descr></var>
#[/some/app/directory]
#localfields = ; rclaptg = someapp; otherfield = somevalue

# <var name="testmodifusemtime" type="bool"><brief>Use mtime instead of
# ctime to test if a file has been modified.</brief><descr>The time is used
# in addition to the size, which is always used.
# Setting this can reduce re-indexing on systems where extended attributes
# are used (by some other application), but not indexed, because changing
# extended attributes only affects ctime.
# Notes:
# - This may prevent detection of change in some marginal file rename cases
#   (the target would need to have the same size and mtime).
# - You should probably also set noxattrfields to 1 in this case, except if
#   you still prefer to perform xattr indexing, for example if the local
#   file update pattern makes it of value (as in general, there is a risk
#   for pure extended attributes updates without file modification to go
#   undetected). Perform a full index reset after changing this.
# </descr></var>
testmodifusemtime = 0

# <var name="noxattrfields" type="bool"><brief>Disable extended attributes
# conversion to metadata fields.</brief><descr>This probably needs to be
# set if testmodifusemtime is set.</descr></var>
noxattrfields = 0

# <var name="metadatacmds" type="string"><brief>Define commands to
# gather external metadata, e.g. tmsu tags.</brief><descr>
# There can be several entries, separated by semi-colons, each defining
# which field name the data goes into and the command to use. Don't forget the
# initial semi-colon. All the field names must be different. You can use
# aliases in the "field" file if necessary. 
# As a not too pretty hack conceded to convenience, any field name
# beginning with "rclmulti" will be taken as an indication that the command
# returns multiple field values inside a text blob formatted as a recoll
# configuration file ("fieldname = fieldvalue" lines). The rclmultixx name
# will be ignored, and field names and values will be parsed from the data.
# Example: metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f
# </descr></var>
#[/some/area/of/the/fs]
#metadatacmds = ; tags = tmsu tags %f; rclmulti1 = cmdOutputsConf %f




# <grouptitle id="STORE">Parameters affecting where and how we store things</grouptitle> 

# <var name="cachedir" type="dfn">
#
# <brief>Top directory for Recoll data.</brief><descr>Recoll data
# directories are normally located relative to the configuration directory
# (e.g. ~/.recoll/xapiandb, ~/.recoll/mboxcache). If "cachedir" is set, the
# directories are stored under the specified value instead (e.g. if
# cachedir is ~/.cache/recoll, the default dbdir would be
# ~/.cache/recoll/xapiandb).  This affects dbdir, webcachedir,
# mboxcachedir, aspellDicDir, which can still be individually specified to
# override cachedir.  Note that if you have multiple configurations, each
# must have a different cachedir, there is no automatic computation of a
# subpath under cachedir.</descr></var>
#cachedir = ~/.cache/recoll

# <var name="maxfsoccuppc" type="int"><brief>Maximum file system occupation
# over which we stop indexing.</brief><descr>The value is a percentage,
# corresponding to what the "Capacity" df output column shows. The default
# value is 0, meaning no checking. This parameter is only checked when the indexer starts,
# it will not change the behaviour or a running process.</descr></var>
maxfsoccuppc = 0

# <var name="dbdir" type="dfn"><brief>Xapian database directory
# location.</brief><descr>This will be created on first indexing. If the
# value is not an absolute path, it will be interpreted as relative to
# cachedir if set, or the configuration directory (-c argument or
# $RECOLL_CONFDIR).  If nothing is specified, the default is then
# ~/.recoll/xapiandb/</descr></var>
dbdir = xapiandb

# <var name="idxstatusfile" type="fn">
#
# <brief>Name of the scratch file where the indexer process updates its
# status.</brief><descr>Default: idxstatus.txt inside the configuration
# directory.</descr></var>
#idxstatusfile = idxstatus.txt

# <var name="mboxcachedir" type="dfn">
#
# <brief>Directory location for storing mbox message offsets cache
# files.</brief><descr>This is normally "mboxcache" under cachedir if set,
# or else under the configuration directory, but it may be useful to share
# a directory between different configurations.</descr></var>
#mboxcachedir = mboxcache

# <var name="mboxcacheminmbs" type="int">
#
# <brief>Minimum mbox file size over which we cache the offsets.</brief>
# <descr>There is really no sense in caching offsets for small files. The
# default is 5 MB.</descr></var>
#mboxcacheminmbs = 5

# <var name="mboxmaxmsgmbs" type="int">
#
# <brief>Maximum mbox member message size in megabytes.</brief>
# <descr>Size over which we assume that the mbox format is bad or we
# misinterpreted it, at which point we just stop processing the file.</descr>
# </var>
#mboxmaxmsgmbs = 100

# <var name="webcachedir" type="dfn">
#
# <brief>Directory where we store the archived web pages after they are processed.</brief>
# <descr>This is only used by the Web history indexing code. Note that this is different from
# webdownloadsdir which tells the indexer where the web pages are stored by the browser, before they
# are indexed and stored into webcachedir.
# Default: cachedir/webcache if cachedir is set, else $RECOLL_CONFDIR/webcache</descr></var>
webcachedir = webcache

# <var name="webcachemaxmbs" type="int">
# <brief>Maximum size in MB of the Web archive.</brief>
# <descr>This is only used by the web history indexing code.
# Default: 40 MB.
# Reducing the size will not physically truncate the file.</descr></var>
webcachemaxmbs = 200

# <var name="webqueuedir" type="fn">
#
# <brief>The path to the Web indexing queue.</brief><descr>This used to be
# hard-coded in the old plugin as ~/.recollweb/ToIndex so there would be no
# need or possibility to change it, but the WebExtensions plugin now downloads
# the files to the user Downloads directory, and a script moves them to
# webqueuedir. The script reads this value from the config so it has become
# possible to change it.</descr></var>
#webqueuedir = ~/.recollweb/ToIndex

# <var name="webdownloadsdir" type="fn">
#
# <brief>The path to the browser add-on download directory.</brief>
#
# <descr>This tells the indexer where the Web browser add-on stores the web page data. The data is
# then moved by a script to webqueuedir, then processed, and finally stored in webcachedir for
# future previews.</descr></var>
#webdownloadsdir = ~/Downloads

# <var name="webcachekeepinterval" type="string">
#
# <brief>Page recycle interval</brief>
# <descr>By default, only one instance of an URL is kept in the cache. This
# can be changed by setting this to a value determining at what frequency
# we keep multiple instances ("day", "week", "month",
# "year"). Note that increasing the interval will not erase existing
# entries.</descr></var>
#webcachekeepinterval=

# <var name="aspellDicDir" type="dfn">
#
# <brief>Aspell dictionary storage directory location.</brief> <descr>The
# aspell dictionary (aspdict.(lang).rws) is normally stored in the
# directory specified by cachedir if set, or under the configuration
# directory.</descr></var>
#aspellDicDir = 

# <var name="filtersdir" type="dfn">
#
# <brief>Directory location for executable input handlers.</brief><descr>If
# RECOLL_FILTERSDIR is set in the environment, we use it instead. Defaults
# to $prefix/share/recoll/filters. Can be redefined for
# subdirectories.</descr></var>
#filtersdir = /path/to/my/filters

# <var name="iconsdir" type="dfn">
#
# <brief>Directory location for icons.</brief><descr>The only reason to
# change this would be if you want to change the icons displayed in the
# result list. Defaults to $prefix/share/recoll/images</descr></var>
#iconsdir = /path/to/my/icons



# <grouptitle id="PERFS">Parameters affecting indexing performance and resource usage</grouptitle> 

# <var name="idxflushmb" type="int">
#
# <brief>Threshold (megabytes of new data) where we flush from memory to disk index.</brief>
# 
# <descr>Setting this allows some control over memory usage by the indexer process. A value of 0
# means no explicit flushing, which lets Xapian perform its own thing, meaning flushing every
# $XAPIAN_FLUSH_THRESHOLD documents created, modified or deleted: as memory usage depends on average
# document size, not only document count, the Xapian approach is is not very useful, and you should
# let Recoll manage the flushes, however the program compiled value is 0.
# The configured default value (from this file) is now 100 MB, and should be ok in many cases.  You
# can set it as low as 10 to conserve memory, but if you are looking for maximum speed, you may want
# to experiment with values between 20 and 300. In my experience, values beyond this tend to be
# counterproductive. If you find otherwise, please drop me a note.</descr></var>
idxflushmb = 100

# <var name="filtermaxseconds" type="int">
# 
# <brief>Linux: maximum external filter execution time in seconds.</brief><descr>Default 1200
# (20mn). Set to 0 for no limit. This is mainly to avoid infinite loops in postscript files
# (loop.ps)</descr></var>
filtermaxseconds = 1200

# <var name="filtermaxmbytes" type="int">
# 
# <brief>Linux: maximum virtual memory space for filter processes (setrlimit(RLIMIT_AS)), in
# megabytes.</brief>
#
# <descr>Note that this includes any mapped libs (there is no reliable Linux way to limit the data
# space only), so we need to be a bit generous here. Anything over 2000 will be ignored on 32 bits
# machines.  The high default value is needed because of java-based handlers (pdftk) which need a
# lot of VM (most of it text), esp. pdftk when executed from Python rclpdf.py. You can use a much
# lower value if you don't need Java.</descr></var>
filtermaxmbytes = 5000

# <var name="oomadj" type="int">
# 
# <brief>Linux: Out-Of-Memory killer adjust score value for the indexer process.</brief>
#
# <descr>See choom(1). During the indexer startup, this value is passed as the adjust parameter to
# the choom command with the indexer process as target.</descr></var>
#oomadj = 300


# <var name="thrQSizes" type="string">
# 
# <brief>Task queue depths for each stage and threading configuration control.</brief>
#
# <descr>There are three internal queues in the indexing pipeline stages (file data extraction,
# terms generation, index update). This parameter defines the queue depths for each stage (three
# integer values). In practise, deep queues have not been shown to increase performance. The first
# value is also used to control threading autoconfiguration or disabling multithreading.  If the
# first queue depth is set to 0 Recoll will set the queue depths and thread counts based on the
# detected number of CPUs. The arbitrarily chosen values are as follows (depth,nthread). 1 CPU -> no
# threading. Less than 4 CPUs: (2, 2) (2, 2) (2, 1). Less than 6: (2, 4), (2, 2), (2, 1). Else (2,
# 5), (2, 3), (2, 1).  If the first queue depth is set to -1, multithreading will be disabled
# entirely. The second and third values are ignored in both these cases.</descr></var>
thrQSizes = 0

# <var name="thrTCounts" type="string">
#
# <brief>Number of threads used for each indexing stage.</brief>
#
# <descr>If the first entry in thrQSizes is not 0 or -1, these three values define the number of
# threads used for each stage (file data extraction, term generation, index update).  It makes no
# sense to use a value other than 1 for the last stage because updating the Xapian index is
# necessarily single-threaded (and protected by a mutex).</descr></var>
#thrTCounts = 4 2 1


# <var name="thrTmpDbCnt" type="int">
#
# <brief>Number of temporary indexes used during incremental or full indexing.</brief>
#
# <descr>If not set to zero, this defines how many temporary indexes we use during indexing.
# These temporary indexes are merged into the main one at the end of the operation.
# Using multiple indexes and a final merge can significantly improve indexing performance when
# the single-threaded Xapian index updates become a bottleneck. How useful this is depends
# on the type of input and CPU. See the manual for more details.</descr></var>
#thrTmpDbCnt = 0


# <var name="suspendonbattery" type="bool">
# 
# <brief>Suspend the real time indexing when the system runs on battery.</brief>
#
# <descr>The indexer will wait for a return on AC and reexec itself when it happens.</descr></var>
#suspendonbattery = 0

# <grouptitle id="MISC">Miscellaneous parameters</grouptitle>

# <var name="loglevel" type="int">
#
# <brief>Log file verbosity 1-6.</brief> <descr>A value of 2 will print
# only errors and warnings. 3 will print information like document updates,
# 4 is quite verbose and 6 very verbose.</descr></var>
loglevel = 3

# <var name="logfilename" type="fn">
#
# <brief>Log file destination. Use "stderr" (default) to write to the
# console.</brief><descr></descr></var>
logfilename = stderr

# <var name="logthedate" type="bool">
#
# <brief>Have each log line begin with the date and time.</brief>
# <descr>e.g.: 2025-08-21T18:58:24+0200 :3:...</descr></var>
#logthedate = 0

# <var name="idxloglevel" type="int">
#
# <brief>Override loglevel for the indexer.</brief><descr></descr></var>
#idxloglevel = 3

# <var name="idxlogfilename" type="fn">
#
# <brief>Override logfilename for the indexer.</brief><descr></descr></var>
#idxlogfilename = stderr

# <var name="idxlogthedate" type="bool">
# <brief>override logthedate for the indexer.</brief><descr></descr></var>
#idxlogthedate = 0

# <var name="helperlogfilename" type="fn">
#
# <brief>Destination file for external helpers standard error output.</brief>
#
# <descr>The external program error output is left alone by default,
# e.g. going to the terminal when the recoll[index] program is executed
# from the command line. Use /dev/null or a file inside a non-existent
# directory to completely suppress the output.</descr>
#
# </var>
#helperlogfilename=

# <var name="daemloglevel" type="int">
#
# <brief>Override loglevel for the real time indexer.</brief>
# <descr>The default is to use the idx... values if set, else the log... values.</descr></var>
#daemloglevel = 3

# <var name="daemlogfilename" type="fn">
#
# <brief>Override logfilename for the real time indexer.</brief>
# <descr>The default is to use the idx... values if set, else the log... values.</descr></var>
#daemlogfilename = /dev/null

# <var name="daemlogthedate" type="bool">
#
# <brief>override logthedate for the real time indexer.</brief><descr></descr></var>
#daemlogthedate = 0

# <var name="pyloglevel" type="int">
#
# <brief>Override loglevel for the Python extension.</brief><descr></descr></var>
#pyloglevel = 3

# <var name="pylogfilename" type="fn">
#
# <brief>Override logfilename for the Python extension.</brief><descr></descr></var>
#pylogfilename = stderr

# <var name="pylogthedate" type="bool">
# <brief>override logthedate for the Python extension.</brief><descr></descr></var>
#pylogthedate = 0

# <var name="idxnoautopurge" type="bool">
# <brief>Do not purge data for deleted or inaccessible files</brief>
# <descr>This can be overridden by recollindex command line options and may be useful if some parts
# of the document set may predictably be inaccessible at times, so that you would only run the purge
# after making sure that everything is there.</descr></var>
#idxnoautopurge = 0

# <var name="orgidxconfdir" type="dfn">
#
# <brief>Original location of the configuration directory.</brief>
# <descr>This is used exclusively for movable datasets. Locating the
# configuration directory inside the directory tree makes it possible to
# provide automatic query time path translations once the data set has
# moved (for example, because it has been mounted on another
# location).</descr></var>
#orgidxconfdir = 

# <var name="curidxconfdir" type="dfn">
#
# <brief>Current location of the configuration directory.</brief>
# <descr>Complement orgidxconfdir for movable datasets. This should be used
# if the configuration directory has been copied from the dataset to
# another location, either because the dataset is readonly and an r/w copy
# is desired, or for performance reasons. This records the original moved
# location before copy, to allow path translation computations.  For
# example if a dataset originally indexed as "/home/me/mydata/config" has
# been mounted to "/media/me/mydata", and the GUI is running from a copied
# configuration, orgidxconfdir would be "/home/me/mydata/config", and
# curidxconfdir (as set in the copied configuration) would be
# "/media/me/mydata/config".</descr></var>
#curidxconfdir = 

# <var name="idxrundir" type="dfn">
#
# <brief>Indexing process current directory.</brief> <descr>The input
# handlers sometimes leave temporary files in the current directory, so it
# makes sense to have recollindex chdir to some temporary directory. If the
# value is empty, the current directory is not changed. If the
# value is (literal) tmp, we use the temporary directory as set by the
# environment (RECOLL_TMPDIR else TMPDIR else /tmp). If the value is an
# absolute path to a directory, we go there.</descr></var>
idxrundir = tmp

# <var name="checkneedretryindexscript" type="fn">
#
# <brief>Script used to heuristically check if we need to retry indexing
# files which previously failed. </brief> <descr>The default script checks
# the modified dates on /usr/bin and /usr/local/bin. A relative path will
# be looked up in the filters dirs, then in the path. Use an absolute path
# to do otherwise.</descr></var>
checkneedretryindexscript = rclcheckneedretry.sh

# <var name="recollhelperpath" type="string">
#
# <brief>Additional places to search for helper executables.</brief>
#
# <descr>This is used, e.g., on Windows by the Python code, and on Mac OS by the bundled recoll.app
# (because I could find no reliable way to tell launchd to set the PATH). The example below is for
# Windows. Use ":" as entry separator for Mac and Ux-like systems, ";" is for Windows only.</descr>
# </var>
#recollhelperpath = c:/someprog/bin;c:/someotherprog/bin

# <var name="idxabsmlen" type="int">
#
# <brief>Length of abstracts we store while indexing.</brief>
# <descr>Recoll stores an abstract for each indexed file.
# The text can come from an actual "abstract" section in the
# document or will just be the beginning of the document. It is stored in
# the index so that it can be displayed inside the result lists without
# decoding the original file. The idxabsmlen parameter
# defines the size of the stored abstract. The default value is 250
# bytes. The search interface gives you the choice to display this stored
# text or a synthetic abstract built by extracting text around the search
# terms. If you always prefer the synthetic abstract, you can reduce this
# value and save a little space.</descr></var>
#idxabsmlen = 250

# <var name="idxmetastoredlen" type="int">
#
# <brief>Truncation length of stored metadata fields.</brief><descr>This
# does not affect indexing (the whole field is processed anyway), just the
# amount of data stored in the index for the purpose of displaying fields
# inside result lists or previews. The default value is 150 bytes which
# may be too low if you have custom fields.</descr></var> 
#idxmetastoredlen = 150

# <var name="idxtexttruncatelen" type="int">
#
# <brief>Truncation length for all document texts.</brief><descr>Only index
# the beginning of documents. This is not recommended except if you are
# sure that the interesting keywords are at the top and have severe disk
# space issues.</descr></var> 
#idxtexttruncatelen = 0

# <var name="idxsynonyms" type="fn">
#
# <brief>Name of the index-time synonyms file.</brief>
# <descr>This is only used to issue multi-word single terms for multi-word synonyms so that phrase
# and proximity searches work for them (ex: applejack "apple jack"). The feature will only have an
# effect for querying if the query-time and index-time synonym files are the same.</descr>
</var>
#idxsynonyms = thereisnodefaultidxsynonyms

# <var name="idxniceprio" type="int">
# <brief>"nice" process priority for the indexing processes. Default: 19 (lowest)</brief>
# <descr>Appeared with 1.26.5. Prior versions were fixed at 19.</descr>
# </var> 
#idxniceprio = 19

# <var name="noaspell" type="bool">
#
# <brief>Disable aspell use.</brief>
# <descr>The aspell dictionary generation takes time, and some combinations of aspell version,
# language, and local terms, result in aspell crashing, so it sometimes makes sense to just disable
# the thing.</descr></var>
#noaspell = 1

# <var name="aspellLanguage" type="string">
#
# <brief>Language definitions to use when creating the aspell dictionary.</brief>
# <descr>The value must match a set of aspell language definition files. You can type "aspell dicts"
# to see a list The default if this is not set is to use the NLS environment to guess the value. The
# values are the 2-letter language codes (e.g. "en", "fr"...)</descr></var>
#aspellLanguage = en

# <var name="aspellAddCreateParam" type="string">
#
# <brief>Additional option and parameter to aspell dictionary creation command.</brief>
# <descr>Some aspell packages may need an additional option (e.g. on Debian Jessie:
# --local-data-dir=/usr/lib/aspell). See Debian bug 772415.</descr></var>
#aspellAddCreateParam = --local-data-dir=/usr/lib/aspell

# <var name="aspellKeepStderr" type="bool">
#
# <brief>Set this to have a look at aspell dictionary creation errors.</brief>
# <descr>There are always many, so this is mostly for debugging.</descr></var>
#aspellKeepStderr = 1

# <var name="monauxinterval" type="int">
#
# <brief>Auxiliary database update interval.</brief><descr>The real time
# indexer only updates the auxiliary databases (stemdb, aspell)
# periodically, because it would be too costly to do it for every document
# change. The default period is one hour.</descr></var>
#monauxinterval = 3600

# <var name="monixinterval" type="int">
# 
# <brief>Minimum interval (seconds) between processings of the indexing
# queue.</brief><descr>The real time indexer does not process each event
# when it comes in, but lets the queue accumulate, to diminish overhead and
# to aggregate multiple events affecting the same file. Default 30
# S.</descr></var>
#monixinterval = 30

# <var name="mondelaypatterns" type="string">
#
# <brief>Timing parameters for the real time indexing.</brief>
# <descr>Definitions for files which get a longer delay before reindexing
# is allowed. This is for fast-changing files, that should only be
# reindexed once in a while. A list of wildcardPattern:seconds pairs. The
# patterns are matched with fnmatch(pattern, path, 0) You can quote entries
# containing white space with double quotes (quote the whole entry, not the
# pattern). The default is empty.
# Example: mondelaypatterns = *.log:20 "*with spaces.*:30"</descr></var>
#mondelaypatterns = *.log:20  "*with spaces.*:30"

# <var name="monioniceclass" type="int">
#
# <brief>ionice class for the indexing process.</brief>
#
# <descr>Despite the misleading name, and on platforms where this is
# supported, this affects all indexing processes,
# not only the real time/monitoring ones. The default value is 3 (use
# lowest "Idle" priority).</descr>
#
# </var> 
#monioniceclass = 3

# <var name="monioniceclassdata" type="string">
#
# <brief>ionice class level parameter if the class supports it.</brief>
#
# <descr>The default is empty, as the default "Idle" class has no
# levels.</descr> 
#
# </var>
#
#monioniceclassdata = 

# <var name="sofficecmd" type="string">
# <brief>Path to the soffice command (e.g. from libreoffice)</brief>
# <descr>This is used for Apple pages documents and big openoffice spreadsheets.
#  Use double-quoting if there are spaces in the path (e.g. C:/Program Files/) *and* you want
#  to add parameters to the default command (uncommon). If not set, recoll will try to find it in
#  the PATH.</descr>
# </var>
#sofficecmd=


# <grouptitle id="QUERY">Query-time parameters (no impact on the index)</grouptitle> 

# <var name="idxlocalguisettings" type="bool">
#
# <brief>Store some GUI parameters locally to the index.</brief>
# <descr>GUI settings are normally stored in a global file, valid for all
# indexes. Setting this parameter will make some settings, such as the result
# table setup, specific to the index.</descr></var>
#idxlocalguisettings = 0

# <var name="autodiacsens" type="bool">
#
# <brief>auto-trigger diacritics sensitivity (raw index only).</brief>
# <descr>IF the index is not stripped, decide if we automatically trigger
# diacritics sensitivity if the search term has accented characters (not in
# unac_except_trans). Else you need to use the query language and the "D"
# modifier to specify diacritics sensitivity. Default is no.</descr></var>
autodiacsens = 0

# <var name="autocasesens" type="bool">
#
# <brief>auto-trigger case sensitivity (raw index only).</brief><descr>IF
# the index is not stripped (see indexStripChars), decide if we
# automatically trigger character case sensitivity if the search term has
# upper-case characters in any but the first position. Else you need to use
# the query language and the "C" modifier to specify character-case
# sensitivity. Default is yes.</descr></var>
autocasesens = 1

# <var name="maxTermExpand" type="int"><brief>Maximum query expansion count
# for a single term (e.g.: when using wildcards).</brief><descr>This only
# affects queries, not indexing. We used to not limit this at all (except
# for filenames where the limit was too low at 1000), but it is
# unreasonable with a big index. Default 10000.</descr></var>
maxTermExpand = 10000

# <var name="maxXapianClauses" type="int"><brief>Maximum number of clauses
# we add to a single Xapian query.</brief><descr>This only affects queries,
# not indexing. In some cases, the result of term expansion can be
# multiplicative, and we want to avoid eating all the memory. Default
# 50000.</descr></var>
maxXapianClauses = 50000

# <var name="snippetMaxPosWalk" type="int">
#
# <brief>Maximum number of positions we walk while populating a snippet for
# the result list.</brief><descr>The default of 1,000,000 may be
# insufficient for very big documents, the consequence would be snippets
# with possibly meaning-altering missing words.</descr></var>
snippetMaxPosWalk = 1000000

# <var name="thumbnailercmd" type="string">
#
# <brief>Command to use for generating thumbnails. </brief>
# <descr>If set, this should be a path to a command or script followed by its constant
# arguments. Four arguments will be appended before execution: the document URL, MIME type, target
# icon SIZE (e.g. 128), and output file PATH. The command should generate a thumbnail from these
# values. E.g. if the MIME is video, a script could use: ffmpegthumbnailer -iURL -oPATH
# -sSIZE.</descr></var>
#thumbnailercmd =

# <var name="stemexpandphrases" type="bool">
#
# <brief>Default to applying stem expansion to phrase terms.</brief>
# <descr>Recoll normally does not apply stem expansion to terms inside phrase searches.
# Setting this parameter will change the default behaviour to expanding terms inside
# phrases. If set, you can use a "l" modifier to disable expansion for a specific
# instance.</descr></var> 
#stemexpandphrases = 0

# <var name="autoSpellRarityThreshold" type="int">
#
# <brief>Inverse of the ratio of term occurrence to total db terms over which we look for spell
# neighbours for automatic query expansion</brief>
# <descr>When a term is very uncommon, we may (depending on user choice) look for spelling
# variations which would be more common and possibly add them to the query.</descr></var>
#autoSpellRarityThreshold = 200000

# <var name="autoSpellSelectionThreshold" type="int">
# <brief>Ratio of spell neighbour frequency over user input term frequency beyond which we include
# the neighbour in the query.</brief>
# <descr>When a term has been selected for spelling expansion because of its rarity, we only include
# spelling neighbours which are more common by this ratio.</descr></var>
#autoSpellSelectionThreshold=20

# <var name="kioshowsubdocs" type="bool">
# <brief>Show embedded document results in KDE dolphin/kio and krunner</brief>
# <descr>Embedded documents may clutter the results and are not always easily usable from the kio or
# krunner environment. Setting this variable will restrict the results to standalone
# documents.</descr> </var>
#kioshowsubdocs = 1



# <grouptitle id="PDF">Parameters for the PDF handler</grouptitle>

# <var name="pdfocr" type="bool">
#
# <brief>Attempt OCR of PDF files with no text content.</brief>
# <descr>This can be defined in subdirectories. The default is off because OCR is so very slow.
# </descr></var>
#pdfocr = 0

# <var name="pdfforceocr" type="bool">
#
# <brief>Run OCR even if the PDF document has text content.</brief>
# <descr>This can be defined in subdirectories. The OCR output will be concatenated to the PDF text.
# </descr></var>
#pdfforceocr = 0

# <var name="pdfoutline" type="bool">
#
# <brief>Extract outlines and bookmarks from PDF documents (needs pdftohtml).</brief>
# <descr>This is not enabled by default because it is rarely needed, and the extra command takes a
# little time.</descr></var>
#pdfoutline = 0

# <var name="pdfattach" type="bool">
#
# <brief>Enable PDF attachment extraction by executing pdfdetach (if available).</brief>
# <descr>This used to be disabled by default because it used pdftk. We now use pdfdetach, which
# is part of poppler-utils and fast.</descr></var>
#pdfattach = 1

# <var name="pdfextrameta" type="string">
#
# <brief>Extract text from selected XMP metadata tags.</brief><descr>This
# is a space-separated list of qualified XMP tag names. Each element can also
# include a translation to a Recoll field name, separated by a "|"
# character. If the second element is absent, the tag name is used as the
# Recoll field names. You will also need to add specifications to the
# "fields" file to direct processing of the extracted data.</descr></var>
#pdfextrameta =  bibtex:location|location bibtex:booktitle bibtex:pages

# <var name="pdfextrametafix" type="fn">
#
# <brief>Define name of XMP field editing script.</brief><descr>This
# defines the name of a script to be loaded for editing XMP field
# values. The script should define a "MetaFixer" class with a metafix()
# method which will be called with the qualified tag name and value of each
# selected field, for editing or erasing. A new instance is created for
# each document, so that the object can keep state for, e.g. eliminating
# duplicate values.</descr></var>
#pdfextrametafix =  /path/to/fixerscript.py

# <grouptitle id="ZP">Parameters for the ZIP file handler</grouptitle>
# Note: using ZP because .zip.html is application/x-sfz...

# <var name="zipUseSkippedNames" type="bool">
#
# <brief>Use skippedNames inside Zip archives.</brief><descr>Fetched
# directly by the rclzip.py handler. Skip the patterns defined by skippedNames
# inside Zip archives. Can be redefined for subdirectories. 
# See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html
# </descr></var>
#zipUseSkippedNames = 0

# <var name="zipSkippedNames" type="string">
#
# <brief>Space-separated list of wildcard expressions for names that should
# be ignored inside zip archives.</brief><descr>This is used directly by
# the zip handler. If zipUseSkippedNames is not set, zipSkippedNames
# defines the patterns to be skipped inside archives. If zipUseSkippedNames
# is set, the two lists are concatenated and used. Can be redefined for
# subdirectories. 
# See https://www.recoll.org/faqsandhowtos/FilteringOutZipArchiveMembers.html
# </descr></var>
#zipSkippedNames =

# <var name="zipMetaEncoding" type="string">
#
# <brief>File path encoding. Needs Python 3.11+. Set to "detect" for using chardet.</brief>
# <descr>This is useful for non-standard zip files where the metadata is neither UTF-8 (indicated by
# a file flag), nor CP437 (default). The parameter can be set for specific subtrees. You need to
# install the Python3 "chardet" package if the value is set to "detect".</descr></var>
#zipMetaEncoding =

# <grouptitle id="ORGHANDLERPARAMS">Parameters for the Org mode handler</grouptitle>

# <var name="orgmodesubdocs" type="bool">
# <brief>Index org-mode level 1 sections as separate sub-documents</brief>
# <descr>This is the default. If set to false, org-mode files will be indexed as plain text</descr>
# </var>
orgmodesubdocs=1

# <grouptitle id="MOZMAILHANDLERPARAMS">Parameters for the Thunderbird mbox handler</grouptitle>
# <var name="mhmboxquirks" type="string">
#
# <brief>Enable thunderbird/mozilla-seamonkey mbox format quirks</brief>
# <descr>Set this for the directory(ies) where the email mbox files are stored.</descr></var>
#mhmboxquirks = tbird


# <grouptitle id="OCR">Parameters for OCR processing</grouptitle>

# <var name="imgocr" type="bool">
#
# <brief>Tell the non-default Python image handler to run OCR.</brief>
# <descr>See the PDF section for PDF OCR. The image OCR also needs mimeconf changes. See the
# manual. imgocr can be defined for subdirectories. 
# </descr></var>
#imgocr = 0

# <var name="ocrprogs" type="string">
# <brief>OCR modules to try.</brief>

# <descr>The top OCR script will try to load the corresponding modules in order and use the first
# which reports being capable of performing OCR on the input file. Modules for tesseract (tesseract)
# and ABBYY FineReader (abbyy) are present in the standard distribution. For compatibility with the
# previous version, if this is not defined at all, the default value is "tesseract". Use an explicit
# empty value if needed. The value can be redefined in subtrees.</descr></var>
#ocrprogs = tesseract

# <var name="ocrcachedir" type="dfn">
# <brief>Location for caching OCR data.</brief>
# <descr>The default if this is empty or undefined is to store the cached
# OCR data under $RECOLL_CONFDIR/ocrcache.</descr>
# </var>
#ocrcachedir=

# <var name="tesseractlang" type="string">
# <brief>Language to assume for tesseract OCR.</brief>
# <descr>Important for improving the OCR accuracy. This can also be set through the contents of a
# file in the currently processed directory. See the rclocrtesseract.py script. Example values: eng,
# fra... See the tesseract Web sitedocumentation for language codes and how to download additional
# language packs. When specifying multiple languages, use a '+' separator and no spaces, e.g.
# eng+fra. The value can be redefined in subtrees.</descr>
# </var>
#tesseractlang = eng

# <var name="tesseractcmd" type="fn">
# <brief>Path for the tesseract command. Do not quote.</brief>
# <descr>This is mostly useful on Windows, or for specifying a non-default
# tesseract command. E.g. on Windows. 
# tesseractcmd = C:/Program&nbsp;Files/Tesseract-OCR/tesseract.exe
# </descr>
# </var>
#tesseractcmd = c:/Program Files/Tesseract-OCR/tesseract.exe

# <var name="abbyylang" type="string">
# <brief>Language to assume for abbyy OCR.</brief>
# <descr>Important for improving the OCR accuracy. This can also be set
# through the contents of a file in
# the currently processed directory. See the rclocrabbyy.py
# script. Typical values: English, French... See the ABBYY documentation.
# </descr>
# </var>
#abbyylang = English

# <var name="abbyyocrcmd" type="fn">
# <brief>Path for the abbyy command</brief>
# <descr>The ABBY directory is usually not in the path, so you should set this.</descr>
# </var>
abbyyocrcmd = /opt/ABBYYOCR11/abbyyocr11


# <grouptitle id="SPEECHTOTEXTPARAMS">Parameters for running speech to text conversion</grouptitle>

# <var name="speechtotext" type="string">
# <brief>Activate speech to text conversion</brief>
# <descr>The only possible value at the moment is "whisper" for using the OpenAI whisper program.
# </descr></var>
#speechtotext=whisper

# <var name="sttmodel" type="string">
# <brief>Name of the whisper model</brief>
# <descr></descr></var>
#sttmodel=small

# <var name="sttdevice" type="string">
# <brief>Name of the device to be used by for whisper</brief>
# <descr></descr></var>
#sttdevice=

# Examples of variables set for specific locations (including actual useful defaults)

# Example: You could specify different parameters for a subdirectory like this:
# [~/hungariandocs/plain]
# defaultcharset = iso-8859-2

[/usr/share/man]
followLinks = 1

[~/.thunderbird]
mhmboxquirks = tbird
[~/.mozilla]
mhmboxquirks = tbird

# pidgin / purple directories for irc chats have names beginning with #
[~/.purple]
skippedNames = 

[~/AppData/Local/Microsoft/Outlook]
onlyNames = *.ost *.pst
