=head1 NAME

lei-config - git-config wrapper for lei configuration file

=head1 SYNOPSIS

lei config <name> [[<value>] [<value-pattern>]]

lei config -l | --list

lei config -e | --edit

=head1 DESCRIPTION

Call L<git-config(1)> with C<$XDG_CONFIG_HOME/lei/config> as the
configuration file.  All C<OPTIONS> are passed through, but those that
override the configuration file are not permitted.

All C<imap> and C<nntp> options may be specified per-host or
(if using git 2.26+) with wildcards:

	[imap "imap://*.onion"]
		proxy = socks5h://127.0.0.1:9050

	[nntp "nntp://example.com"]
		proxy = socks5h://127.0.0.1:1080

=head2 VARIABLES

=over 8

=item external.*

Managed by L<lei-add-external(1)> and L<lei-forget-external(1)>

=item imap.proxy

=item nntp.proxy

The C<socks5h://> proxy address.  Older versions of SOCKS may
be supported if there is user demand.

=item imap.starttls

=item nntp.starttls

Enable or disable STARTTLS on non-imaps:// and non-nntps://
hosts.  By default, STARTTLS is enabled if available unless
connecting to a Tor .onion or localhost.

=item imap.compress

=item nntp.compress

Enable protocol-level compression.  This may be incompatible
or broken with some servers.

Note: L<Net::NNTP> compression support is pending:
L<https://rt.cpan.org/Ticket/Display.html?id=129967>

=item imap.debug

=item nntp.debug

Enable debugging output of underlying IMAP and NNTP libraries,
currently L<Mail::IMAPClient> and L<Net::NNTP>, respectively.
If L<imap.proxy> or L<nntp.proxy> points to a SOCKS proxy,
debugging output for L<IO::Socket::Socks> will be enabled as
well.

Disabling L<imap.compress> may be required for readability.

=item imap.timeout

=item nntp.timeout

The read timeout for responses.

Default: 600 seconds (IMAP); 120 seconds (NNTP)

=item imap.fetchBatchSize

Number of full messages to fetch at once.  Larger values reduce
network round trips at the cost of higher memory use, especially
when retrieving large messages.

Small responses for IMAP flags are fetched at 10000 times this value.

Default: 1

=item color.SLOT

C<quoted>, C<hdrdefault>, C<status>, C<attachment> color slots
are supported for the C<-f text> and C<-f reply> output formats
of L<lei-lcat(1)> and L<lei-q(1)>.

Any per-project .git/config, and global ~/.gitconfig files
will also be parsed for diff coloring.  git diff color slots
(C<color.diff.SLOT>) supported are C<new>, C<old>, C<meta>,
C<frag>, C<func>, and C<context>.

=back

=head1 OPTIONS

Most L<git-config(1)> command-line switches are accepted by C<lei config>
as is.  The most frequently used options are expected to be:

=over 4

=item -e

=item --edit

Open an editor to edit the lei config file.

=item -l

=item --list

List all variables set in config file, along with their values.

=back

=head1 CONTACT

Feedback welcome via plain-text mail to L<mailto:meta@public-inbox.org>

The mail archives are hosted at L<https://public-inbox.org/meta/> and
L<http://4uok3hntl7oi7b4uf4rtfwefqeexfzil2w6kgk2jn5z2f764irre7byd.onion/meta/>

=head1 COPYRIGHT

Copyright all contributors L<mailto:meta@public-inbox.org>

License: AGPL-3.0+ L<https://www.gnu.org/licenses/agpl-3.0.txt>
