@node Configuration Handbook
@chapter Configuration Handbook

This chapter has yet to be fully written.  It is intended to be about in-depth
configuration of GNUnet.


@menu
* Config file format::
@end menu


@node Config file format
@section Config file format

In GNUnet realm, all components obey the same pattern to get configuration
values.  According to this pattern, once the component has been installed, the
installation deploys default values in @file{$prefix/share/gnunet/config.d/},
in @file{.conf} files.  In order to override these defaults, the user can
write a custom @file{.conf} file and either pass it to the component at
execution time, or name it @file{gnunet.conf} and place it under
@file{$HOME/.config/}.

A config file is a text file containing sections, and each section
contains its values.  The right format follows:

@example
[section1]
value1 = string
value2 = 23

[section2]
value21 = string
value22 = /path22
@end example

Throughout any configuration file, it is possible to use @code{$}-prefixed
variables, like @code{$VAR}, especially when they represent filenames in in
the filesystem.  It is also possible to provide defaults values for those
variables that are unset, by using the following syntax:

@example
$@{VAR:-default@}
@end example

@noindent
However, there are two ways a user can set @code{$}-prefixable variables:
(a) by defining them under a @code{[paths]} section

@example
[paths]
GNUNET_DEPLOYMENT_SHARED = $@{HOME@}/shared-data
..
[section-x]
path-x = $@{GNUNET_DEPLOYMENT_SHARED@}/x
@end example

@noindent
or (b) by setting them in the environment

@example
$ export VAR=/x
@end example

@noindent
The configuration loader will give precedence to variables set under
@code{[path]}, though.

The utility @samp{gnunet-config}, which gets installed along with GNUnet,
serves to get and set configuration values without directly editing the
@file{.conf} file.  The option @samp{-f} is particularly useful to resolve
filenames, when they use several levels of @code{$}-expanded variables.
See @samp{gnunet-config --help}.

Note that, in this stage of development, the file
@file{$HOME/.config/gnunet.conf} can contain sections for @strong{all} the
components.
