← Back to team overview

kicad-developers team mailing list archive

XDG_CONFIG_HOME on all platforms

 

Attached is a patch that allows users to have multiple configuration
paths using the XDG_CONFIG_HOME environment variable on all platforms.
I tested it on windows and it seems to work just fine.  I can test it on
linux tonight when I get home but if someone can get to it before then I
would appreciate the help.  Would one of our macos devs please test it
as well before I merge it.

Thanks,

Wayne
From 9aa94dd0880adc5a61ffb8426ab84255411249e4 Mon Sep 17 00:00:00 2001
From: Wayne Stambaugh <stambaughw@xxxxxxxxx>
Date: Mon, 23 Apr 2018 10:29:03 -0400
Subject: [PATCH] Allow for multiple user configurations.

Use XDG_CONFIG_HOME environment variable on all platforms so users can
maintain multiple configurations of KiCad.
---
 common/common.cpp | 23 ++++++++++-------------
 1 file changed, 10 insertions(+), 13 deletions(-)

diff --git a/common/common.cpp b/common/common.cpp
index f5b8abce4..947e3f8be 100644
--- a/common/common.cpp
+++ b/common/common.cpp
@@ -219,28 +219,25 @@ wxString GetKicadConfigPath()
 {
     wxFileName cfgpath;
 
-    // From the wxWidgets wxStandardPaths::GetUserConfigDir() help:
-    //      Unix: ~ (the home directory)
-    //      Windows: "C:\Documents and Settings\username\Application Data"
-    //      Mac: ~/Library/Preferences
+    // http://docs.wxwidgets.org/3.0/classwx_standard_paths.html#a7c7cf595d94d29147360d031647476b0
     cfgpath.AssignDir( wxStandardPaths::Get().GetUserConfigDir() );
 
+    // wxStandardPaths does not default to ~/.config which is the current standard config
+    // location on Linux.
 #if !defined( __WINDOWS__ ) && !defined( __WXMAC__ )
+    cfgpath.AppendDir( wxT( ".config" ) );
+#endif
+
+    cfgpath.AppendDir( wxT( "kicad" ) );
+
     wxString envstr;
 
-    if( !wxGetEnv( wxT( "XDG_CONFIG_HOME" ), &envstr ) || envstr.IsEmpty() )
-    {
-        // XDG_CONFIG_HOME is not set, so use the fallback
-        cfgpath.AppendDir( wxT( ".config" ) );
-    }
-    else
+    // Use XDG_CONFIG_HOME on all platforms to allow for multiple configurations.
+    if( wxGetEnv( wxT( "XDG_CONFIG_HOME" ), &envstr ) && !envstr.IsEmpty() )
     {
         // Override the assignment above with XDG_CONFIG_HOME
         cfgpath.AssignDir( envstr );
     }
-#endif
-
-    cfgpath.AppendDir( wxT( "kicad" ) );
 
     if( !cfgpath.DirExists() )
     {
-- 
2.17.0


Follow ups