id = "offlineimap" name = "OfflineIMAP" homepage = "https://www.offlineimap.org" description = "Read/sync your IMAP mailboxes." # The project repository's own description, trimmed of its "(python3)" suffix. # The project's own scalable logo from offlineimap.org. icon = "https://www.offlineimap.org/assets/logo/offlineimap-scalable.svg" executables = ["offlineimap"] platforms = ["macos", "linux"] [dotfiles] # offlineimap/init.py picks the config file when -c is not given: it first # tries `os.path.join(xdg_home, "offlineimap", "config")` and falls back with # `if not os.path.exists(options.configfile): options.configfile = # os.path.expanduser('~/.offlineimaprc')`. The XDG half reads the variable, so # it is written [configHome] rather than as the ~/.config default; on macOS # offlineimap uses the same dotted path, since it is the XDG variable it # consults and not a platform API. paths = [ "~/.offlineimaprc", "[configHome]/offlineimap/config", ] # The project's own offlineimap.conf documents the [general] `metadata` option # and its default: "metadata = ~/.offlineimap". That directory is the per-folder # UID maps and sync status database — state that describes one machine's last # run, not configuration. exclude = ["~/.offlineimap/"] # The config file is accounts, folder filters and sync settings; only the # password lines below are credentials. secret = [] # The repository configuration keys in the project's own offlineimap.conf: # `remotepass` is the IMAP password written straight into the file # ("remotepass = myp%%ssword"), `remotepassfile` names a file holding it, and # `remotepasseval` is Python that returns it. The prefix `remotepass` covers # all three spellings, which is deliberate: a line that names where the # password is kept is worth holding back with the one that contains it. [[dotfiles.secret_paths]] file = ["~/.offlineimaprc", "[configHome]/offlineimap/config"] match = { prefix = ["remotepass", "remotepasseval"] } # No machine_lines. `localfolders` and `pythonfile` do name filesystem paths, # but offlineimap's own examples keep both under the home directory # ("localfolders = ~/Test"), so they travel as well as the rest of the file # does; calling them machine-local would be a guess rather than a fact. [commands] format = 1 label = "Sync mailboxes" description = "Run OfflineIMAP for all or selected accounts and folders. Debug, profiling and delete-folder options are left out." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = true } [[commands.source]] id = "man" kind = "manual" url = "https://github.com/OfflineIMAP/offlineimap/blob/master/docs/offlineimap.txt" revision = "master" evidence = ''' --dry-run:: Run in dry run mode. --info:: Output information on the configured email repositories. -1:: Limit multithreading operations and run solely a single-thread sync. -a :: Overrides the accounts section in the config file. -c :: Specifies a configuration file to use. -l :: Send logs to . -f :: Only sync the specified folders. -o:: Run only once. -q:: Run only quick synchronizations. -u :: Specifies an alternative user interface to use. Possible interface choices are: quiet, basic, syslog, ttyui, blinkenlights, machineui. ''' [[commands.field]] id = "accounts" label = "Accounts" description = "Comma-separated account names; overrides the config file." type = "string" option = ["-a"] sources = ["man"] [[commands.field]] id = "folders" label = "Only these folders" description = "Comma-separated remote folder names." type = "string" option = ["-f"] sources = ["man"] [[commands.field]] id = "config" label = "Configuration file" type = "path" option = ["-c"] path = { kind = "file", role = "input", must_exist = true } sources = ["man"] [[commands.field]] id = "once" label = "Run only once" description = "Ignore autorefresh in the config." type = "boolean" option = ["-o"] sources = ["man"] [[commands.field]] id = "quick" label = "Quick sync" description = "Skips flag updates on the IMAP server." type = "boolean" option = ["-q"] sources = ["man"] [[commands.field]] id = "dry_run" label = "Dry run" type = "boolean" option = ["--dry-run"] sources = ["man"] [[commands.field]] id = "single_thread" label = "Single thread" type = "boolean" option = ["-1"] sources = ["man"] [[commands.field]] id = "ui" label = "User interface" type = "enum" option = ["-u"] choices = [ { value = "quiet", label = "quiet" }, { value = "basic", label = "basic" }, { value = "syslog", label = "syslog" }, { value = "ttyui", label = "ttyui" }, { value = "blinkenlights", label = "blinkenlights" }, { value = "machineui", label = "machineui" }, ] sources = ["man"] [[commands.field]] id = "logfile" label = "Log file" type = "path" option = ["-l"] path = { kind = "file", role = "output", must_exist = false } effect = "overwrite" sources = ["man"] [[commands.field]] id = "info" label = "Show repository info only" type = "boolean" option = ["--info"] sources = ["man"] [[commands.task]] id = "sync_once" label = "Sync once" fields = ["accounts", "once", "quick", "config"] required = [] set = { once = [true] } [[commands.task]] id = "preview" label = "Preview (dry run)" fields = ["accounts", "dry_run", "once", "config"] required = ["dry_run"] set = { dry_run = [true], once = [true] } [[commands.group]] id = "basic" label = "Basic" fields = ["accounts", "folders", "config", "once", "quick", "dry_run"] [[commands.group]] id = "advanced" label = "Advanced" fields = ["single_thread", "ui", "logfile", "info"]