Hello, all!
I have found mbsync to work well for me, but encountered minor frustration in
regards to the default
config file location. I like to keep my $HOME very clean (in stark contrast to
my home), and
therefore tend to keep all my configuration files in ~/.config. This was not a
huge issue
since the --config option exists, but I have wound up with 3 scripts on my
system that call mbsync,
and all of them need to be passed the --command option. If for some reason I
ever move the config
file, I will need to remember to update all 3 scripts, or else I will be left
with a broken system
(due to my own stupidity).
Considering this, I would like to submit the following patch which has mbsync
look for a config
file in 3 places in the following order:
1. $MBSYNC_CONFIG - a user-set environment variable
2. $XDG_CONFIG_HOME/mbsync
3. ~/.mbsync (the legacy location)
This patch still respects the --config option superseding these locations.
Please let me know your thoughts, and have a lovely day.
--Wyatt Sheffield
>From bf6f07f7cc4947e678ee965c959df289cc07c9db Mon Sep 17 00:00:00 2001
From: Wyatt Sheffield <[email protected]>
Date: Thu, 7 May 2020 17:29:18 -0500
Subject: [PATCH] Respect XDG Base Directory specification
---
src/config.c | 22 +++++++++++++++++++++-
src/mbsync.1 | 20 ++++++++++++++++++--
2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/src/config.c b/src/config.c
index 8ddfe26..cbf56ae 100644
--- a/src/config.c
+++ b/src/config.c
@@ -322,10 +322,30 @@ load_config( const char *where, int pseudo )
int len, cops, gcops, max_size, ms, i;
char path[_POSIX_PATH_MAX];
char buf[1024];
+ char* xdg;
+ char* config_env;
+ int found_config;
if (!where) {
assert( !pseudo );
- nfsnprintf( path, sizeof(path), "%s/." EXE "rc", Home );
+ // First, look to see if the user has set the MBSYNC_CONFIG
environment
+ // variable to point to the config file and check that the file
is
+ // readable
+ if ( (config_env = getenv("MBSYNC_CONFIG")) ) {
+ nfsnprintf( path, sizeof(path), "%s", config_env );
+ found_config = access(path, R_OK);
+ }
+ // If a readable file was not found, or the environment
variable was not
+ // set, look in XDG_CONFIG_HOME for a file called mbsyncrc
+ if ( found_config != 0 &&(xdg = getenv("XDG_CONFIG_HOME")) ) {
+ nfsnprintf( path, sizeof(path), "%s/" EXE "rc", xdg );
+ found_config = access(path, R_OK);
+ }
+ // Finally, the legacy behavior: look for a file called
.mbsyncrc in the
+ // user's home directory.
+ if ( found_config != 0 ) {
+ nfsnprintf( path, sizeof(path), "%s/." EXE "rc", Home );
+ }
cfile.file = path;
} else
cfile.file = where;
diff --git a/src/mbsync.1 b/src/mbsync.1
index 8f6c58b..e226472 100644
--- a/src/mbsync.1
+++ b/src/mbsync.1
@@ -48,7 +48,8 @@ Multiple replicas of each mailbox can be maintained.
.TP
\fB-c\fR, \fB--config\fR \fIfile\fR
Read configuration from \fIfile\fR.
-By default, the configuration is read from ~/.mbsyncrc.
+By default, the configuration is read from $MBSYNC_CONFIG first, then
+$XDG_CONFIG_HOME/mbsyncrc, and finally ~/.mbsyncrc.
.TP
\fB-a\fR, \fB--all\fR
Select all configured channels. Any channel/group specifications on the command
@@ -731,10 +732,25 @@ before the mailbox is expunged.
There is no risk as long as the IMAP mailbox is accessed by only one client
(including \fBmbsync\fR) at a time.
..
+.SH ENVIRONMENT
+.TP
+.B MBSYNC_CONFIG
+Mbsync will use this value as the location of the config file.
+..
.SH FILES
.TP
+.B $MBSYNC_CONFIG
+If this environment variable has been set, mbsync will attempt to read the file
+pointed to by MBSYNC_CONFIG
+.TP
+.B $XDG_CONFIG_HOME/mbsyncrc
+If there was nothing found at MBSYNC_CONFIG, and XDG_CONFIG_HOME is set
+(ususally to ~/.config), mbsync will look for its configuration file named
+mbsyncrc in that directory
+.TP
.B ~/.mbsyncrc
-Default configuration file
+Legacy configuration file location. Used if no configuration file was found at
+either $MBSYNC_CONFIG or $XDG_CONFIG_HOME/mbsyncrc.
.TP
.B ~/.mbsync/
Directory containing synchronization state files
--
2.26.2
_______________________________________________
isync-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/isync-devel