# -*- mode: conf -*-
# ====================[ .offlineimaprc                     ]====================
#                     [ Time-stamp: "2008-09-05 16:36:39 leycec" ]             
#
# --------------------( MIGRATION                          )--------------------
# OfflineIMAP is quite good at IMAP-to-[IMAP|Maildir] synchronization; but
# quite bad at IMAP-IMAP migration; for that, see "imapsync".

# ....................{ GENERAL                            }....................
[general]

# This specifies where offlineimap is to store its metadata.
# This directory will be created if it does not already exist.
metadata = ~/.offlineimap

# This variable specifies which accounts are defined.  Separate them
# with commas.  Account names should be alphanumeric only.
# You will need to specify one section per account below.  You may
# not use "general" for an account name.
accounts = gmail

# Offlineimap can synchronize more the one account at a time.  If you
# want to enable this feature, set the below value to something
# greater than 1.  To force it to synchronize only one account at a
# time, set it to 1.
maxsyncaccounts = 1

# You can specify one or more user interface modules for OfflineIMAP
# to use.  OfflineIMAP will try the first in the list, and if it
# fails, the second, and so forth.
#
# The pre-defined options are:
# Tk.Blinkenlights -- A graphical interface, shows LEDs and a single log
# Tk.VerboseUI -- A graphical interface, shows logs per thread
# Curses.Blinkenlights -- A text-based (terminal) interface similar to
# Tk.Blinkenlights
# TTY.TTYUI -- a text-based (terminal) interface
# Noninteractive.Basic -- Noninteractive interface suitable for cronning
# Noninteractive.Quiet -- Noninteractive interface, generates no output
#                         except for errors.
#
# You can override this with a command-line option -u.
ui = Curses.BlinkenLights, Tk.Blinkenlights, Tk.VerboseUI, TTY.TTYUI, Noninteractive.Basic, Noninteractive.Quiet

# If you try to synchronize messages to a read-only folder,
# OfflineIMAP will generate a warning.  If you want to suppress these
# warnings, set ignore-readonly to yes.  Read-only IMAP folders allow
# reading but not modification, so if you try to change messages in
# the local copy of such a folder, the IMAP server will prevent
# OfflineIMAP from propogating those changes to the IMAP server.
ignore-readonly = no

# ....................{ PYTHON                             }....................
# You can give a Python source filename here and all config file
# python snippets will be evaluated in the context of that file.
# This allows you to e.g. define helper functions in the Python
# source file and call them from this config file.  You can find
# an example of this in the manual.
#
pythonfile = ~/.offlineimap/offlineimap.py

# ....................{ GMAIL                              }....................
[Account gmail]
# These settings specify the two folders that you will be syncing.
# You'll need to have a "Repository ..." section for each one.
# localrepository =  gmail_local_imap
localrepository =  gmail_local
remoterepository = gmail_remote

# You can have offlineimap continue running indefinately, automatically
# syncing your mail periodically.  If you want that, specify how
# frequently to do that (in minutes) here.  You can also specify
# fractional minutes (ie, 3.25).
#autorefresh = 16

#           ..........{ GMAIL =local                       }..........
[Repository gmail_local]
# This is one of the two repositories that you'll work with given the
# above example.  Each repository requires a "type" declaration.
#
# The types supported are Maildir and IMAP.
type = Maildir

# Specify local repository.  Your IMAP folders will be synchronized
# to maildirs created under this path.  OfflineIMAP will create the
# maildirs for you as needed.
localfolders = ~/var/mail/gmail

# You can specify the "path separator character" used for your Maildir
# folders.  This is inserted in-between the components of the tree.
# It defaults to ".".  If you want your Maildir folders to be nested,
# set it to "/".
sep = .

# Do not maintain "atime" file statistics, for efficiency.
restoreatime = no

#           ..........{ GMAIL =local_imap                  }..........
[Repository gmail_local_imap]
# This is one of the two repositories that you'll work with given the
# above example.  Each repository requires a "type" declaration.
#
# The types supported are Maildir and IMAP.
type = IMAP

# Specify the local hostname.
remotehost = localhost

# Whether or not to use SSL.
ssl = no

# Specify the port.  If not specified, use a default port.
# remoteport = 993

# Specify the local user name.
remoteuser = leycec

# There are three ways to specify the password for the remote IMAP
# server:
#
# 1. No password at all specified in the config file.  You will
#    be prompted for the password when OfflineIMAP starts.
#
# 2. The remote password stored in this file with the remotepass
#    option. Example:
#
remotepass = cecley
#
# 3. The remote password stored as a single line in an external
#    file, which is referenced by the remotefile option.  Example:
#
# remotepassfile = ~/Password.IMAP.Account1
#
# 4. With a preauth tunnel.  With this method, you invoke an external
# program that is guaranteed *NOT* to ask for a password, but rather
# to read from stdin and write to stdout an IMAP procotol stream
# that begins life in the PREAUTH state.  When you use a tunnel,
# you do NOT specify a user or password (if you do, they'll be
# ignored.)  Instead, you specify a preauthtunnel, as this
# example illustrates for Courier IMAP on Debian:
#
# preauthtunnel = ssh -q imaphost '/usr/bin/imapd ./Maildir'

#           ..........{ GMAIL =remote                        }..........
# The remote IMAP repository on GMAIL cannot be accessed over the IMAP or
# IMAP-SSL protocols, since I store it in Maildir-specific format,
# elsewhere. As such, I use a preauthentication tunnel, instead.
[Repository gmail_remote]
# And this is the remote repository.  For now, we only support IMAP here.
type = Gmail
# type = IMAP

# Specify the remote hostname.
# remotehost = imap.gmail.com

# Whether or not to use SSL.
# ssl = yes

# Specify the port.  If not specified, use a default port.
# remoteport = 993

# Specify the remote user name.
remoteuser = leycec

# There are three ways to specify the password for the remote IMAP
# server:
#
# 1. No password at all specified in the config file.  You will
#    be prompted for the password when OfflineIMAP starts.
#
# 2. The remote password stored in this file with the remotepass
#    option. Example:
#
#remotepass = mypassword
#
# 3. The remote password stored as a single line in an external
#    file, which is referenced by the remotefile option.  Example:
#
remotepassfile = ~/.offlineimap/Password.gmail_remote
#
# 4. With a preauth tunnel.  With this method, you invoke an external
# program that is guaranteed *NOT* to ask for a password, but rather
# to read from stdin and write to stdout an IMAP procotol stream
# that begins life in the PREAUTH state.  When you use a tunnel,
# you do NOT specify a user or password (if you do, they'll be
# ignored.)  Instead, you specify a preauthtunnel, as this
# example illustrates for Courier IMAP on Debian:
#
#preauthtunnel = ssh -v bcurry@faeroes.freeshell.org '/usr/pkg/libexec/imapd mail'

# Do not use the IMAP protocol to delete files; rather, rely on Google's label
# implementation.
realdelete = no

# Do not retrieve the following remote IMAP folders.
folderfilter = gmail_folderfilter

# Retrieve the following remote IMAP folders into these translated folders.
# 
# Destroy the Courier IMAP-specific "INBOX" prefix from mailbox names, while
# maintaining the Maildir path-specific "." prefix. This ensures consistent
# naming for Courier IMAP-served Maildir paths. As example, this translates a
# Courier IMAP-served, remote Maildir path named ".work.joyously" into a non-
# Courier IMAP-served, local Maildir path--named ".work.joyously".
nametrans = gmail_nametrans

# ....................{ SDF                                }....................
[Account sdf]
# These settings specify the two folders that you will be syncing.
# You'll need to have a "Repository ..." section for each one.
localrepository =  sdf_local
remoterepository = sdf_remote

# You can have offlineimap continue running indefinately, automatically
# syncing your mail periodically.  If you want that, specify how
# frequently to do that (in minutes) here.  You can also specify
# fractional minutes (ie, 3.25).
#autorefresh = 16

#           ..........{ SDF =local                         }..........
[Repository sdf_local]
# This is one of the two repositories that you'll work with given the
# above example.  Each repository requires a "type" declaration.
#
# The types supported are Maildir and IMAP.
type = Maildir

# Specify local repository.  Your IMAP folders will be synchronized
# to maildirs created under this path.  OfflineIMAP will create the
# maildirs for you as needed.
localfolders = ~/var/mail/sdf

# You can specify the "path separator character" used for your Maildir
# folders.  This is inserted in-between the components of the tree.
# It defaults to ".".  If you want your Maildir folders to be nested,
# set it to "/".
sep = .

#           ..........{ SDF =remote                        }..........
# The remote IMAP repository on SDF cannot be accessed over the IMAP or
# IMAP-SSL protocols, since I store it in Maildir-specific format,
# elsewhere. As such, I use a preauthentication tunnel, instead.
[Repository sdf_remote]
# And this is the remote repository.  For now, we only support IMAP here.
type = IMAP

# Specify the remote hostname.
remotehost = mail.freeshell.org

# Whether or not to use SSL.
ssl = yes

# Specify the port.  If not specified, use a default port.
remoteport = 993

# Specify the remote user name.
remoteuser = bcurry

# There are three ways to specify the password for the remote IMAP
# server:
#
# 1. No password at all specified in the config file.  You will
#    be prompted for the password when OfflineIMAP starts.
#
# 2. The remote password stored in this file with the remotepass
#    option. Example:
#
#remotepass = mypassword
#
# 3. The remote password stored as a single line in an external
#    file, which is referenced by the remotefile option.  Example:
#
remotepassfile = ~/.offlineimap/Password.sdf_remote
#
# 4. With a preauth tunnel.  With this method, you invoke an external
# program that is guaranteed *NOT* to ask for a password, but rather
# to read from stdin and write to stdout an IMAP procotol stream
# that begins life in the PREAUTH state.  When you use a tunnel,
# you do NOT specify a user or password (if you do, they'll be
# ignored.)  Instead, you specify a preauthtunnel, as this
# example illustrates for Courier IMAP on Debian:
#
#preauthtunnel = ssh -v bcurry@faeroes.freeshell.org '/usr/pkg/libexec/imapd mail'

# Do not retrieve the following remote IMAP folders.
folderfilter = lambda foldername: not re.search('^(INBOX\.Trash)$', foldername)
# folderfilter = lambda foldername: not re.search('^(|INBOX\.Trash)$', foldername)

# Retrieve the following remote IMAP folders into these translated folders.
# 
# Destroy the Courier IMAP-specific "INBOX" prefix from mailbox names, while
# maintaining the Maildir path-specific "." prefix. This ensures consistent
# naming for Courier IMAP-served Maildir paths. As example, this translates a
# Courier IMAP-served, remote Maildir path named ".work.joyously" into a non-
# Courier IMAP-served, local Maildir path--named ".work.joyously".
nametrans = lambda foldername: re.sub('^INBOX\.', '.', foldername)
  re.sub('^INBOX$',  '.read.not', foldername)
  re.sub('^INBOX\.', '.', foldername)
  re.sub('^.Drafts',  '.sent.not', foldername)
  re.sub('^.Sent',    '.sent', foldername)

# ....................{ MAILBOX NAME RECORDER              }....................
[mbnames]

# offlineimap can record your mailbox names in a format you specify.
# You can define the header, each mailbox item, the separator,
# and the footer.  Here is an example for Mutt.
# If enabled is yes, all six setting must be specified, even if they
# are just the empty string "".
#
# The header, peritem, sep, and footer are all Python expressions passed
# through eval, so you can (and must) use Python quoting.
enabled = yes
header = "mailboxes "
peritem = "+%(foldername)s"
#peritem = "+%(accountname)s/%(foldername)s"
sep = " "
footer = "\n"

# Emit a Mutt-specific mailbox list here.
filename = ~/.mutt/muttrc.localhost.gmail.mailboxes

# You can also specify a folderfilter.  It will apply to the
# *translated* folder name here, and it takes TWO arguments:
# accountname and foldername.  In all other ways, it will
# behave identically to the folderfilter for accounts.  Please see
# that section for more information and examples.
#
# Note that this filter can be used only to further restrict mbnames
# to a subset of folders that pass the account's folderfilter.

# ....................{ BLINKENLIGHTS                      }....................
[ui.Tk.Blinkenlights]

# Specifies the default number of lines in the log.
loglines = 5

# Specifies how many lines are in the scrollback log buffer.
bufferlines = 512

# If true, says that the log should be enabled by default.
# Otherwise, you have to click "Show Log" to enable the log.
showlog = false

# Sets the font information.
fontfamily = Helvetica
fontsize = 8

# ....................{ ADVANCED                           }....................
# Some IMAP servers need a "reference" which often refers to the
# "folder root".  This is most commonly needed with UW IMAP, where
# you might need to specify the directory in which your mail is
# stored.  Most users will not need this.
#
# reference = Mail

# OfflineIMAP can use multiple connections to the server in order
# to perform multiple synchronization actions simultaneously.
# This may place a higher burden on the server.  In most cases,
# setting this value to 2 or 3 will speed up the sync, but in some
# cases, it may slow things down.  The safe answer is 1.  You should
# probably never set it to a value more than 5.
maxconnections = 1

# OfflineIMAP normally closes IMAP server connections between refreshes if
# the global option autorefresh is specified.  If you wish it to keep the
# connection open, set this to true.  If not specified, the default is
# false.  Keeping the connection open means a faster sync start the
# next time and may use fewer server resources on connection, but uses
# more server memory.  This setting has no effect if autorefresh is not set.
holdconnectionopen = no

# If you want to have "keepalives" sent while waiting between syncs,
# specify the amount of time IN SECONDS between keepalives here.  Note that
# sometimes more than this amount of time might pass, so don't make it
# tight.  This setting has no effect if autorefresh and holdconnectionopen
# are not both set.
# keepalive = 60

# Normally, OfflineIMAP will expunge deleted messages from the server.
# You can disable that if you wish.  This means that OfflineIMAP will
# mark them deleted on the server, but not actually delete them.
# You must use some other IMAP client to delete them if you use this
# setting; otherwise, the messages will just pile up there forever.
# Therefore, this setting is definately NOT recommended.
# expunge = no

# You can specify a folder translator.  This must be a eval-able
# Python expression that takes a foldername arg and returns the new
# value.  I suggest a lambda.  This example below will remove "INBOX." from
# the leading edge of folders (great for Courier IMAP users)
#
# WARNING: you MUST construct this such that it NEVER returns
# the same value for two folders, UNLESS the second values are
# filtered out by folderfilter below.  Failure to follow this rule
# will result in undefined behavior
#
# nametrans = lambda foldername: re.sub('^INBOX\.', '', foldername)

# Using Courier remotely and want to duplicate its mailbox naming
# locally?  Try this:
#
# nametrans = lambda foldername: re.sub('^INBOX\.*', '.', foldername)

# You can specify which folders to sync.  You can do it several ways.
# I'll provide some examples.  The folderfilter operates on the
# *UNTRANSLATED* name, if you specify nametrans.  It should return
# true if the folder is to be included; false otherwise.
#
# Example 1: synchronizing only INBOX and Sent.
#
# folderfilter = lambda foldername: foldername in ['INBOX', 'Sent']
#
# Example 2: synchronizing everything except Trash.
#
# folderfilter = lambda foldername: foldername not in ['Trash']
#
# Example 3: Using a regular expression to exclude Trash and all folders
# containing the characters "Del".
#
# folderfilter = lambda foldername: not re.search('(^Trash$|Del)', foldername)
#
# If folderfilter is not specified, ALL remote folders will be
# synchronized.
#
# You can span multiple lines by indenting the others.  (Use backslashes
# at the end when required by Python syntax)  For instance:
#
# folderfilter = lambda foldername: foldername in
#        ['INBOX', 'Sent Mail', 'Deleted Items',
#         'Received']
#
# FYI, you could also include every folder with:
#
# folderfilter = lambda foldername: 1
#
# And exclude every folder with:
#
# folderfilter = lambda foldername: 0

# You can specify folderincludes to include additional folders.
# It should return a Python list.  This might be used to include a
# folder that was excluded by your folderfilter rule, to include a
# folder that your server does not specify with its LIST option, or
# to include a folder that is outside your basic reference.  Some examples:
#
# To include debian.user and debian.personal:
#
# folderincludes = ['debian.user', 'debian.personal']
#
# To include your INBOX (UW IMAPd users will find this useful if they
# specify a reference):
#
# folderincludes = ['INBOX']
#
# To specify a long list:
#
# folderincludes = ['box1', 'box2', 'box3', 'box4',
#                   'box5', 'box6']

# You can specify foldersort to determine how folders are sorted.
# This affects order of synchronization and mbnames. The expression
# should return -1, 0, or 1, as the default Python cmp() does.  The
# two arguments, x and y, are strings representing the names of the folders
# to be sorted.  The sorting is applied *AFTER* nametrans, if any.
#
# To reverse the sort:
#
# foldersort = lambda x, y: -cmp(x, y)

