diff --git a/pkgs/misc/drivers/spacenavd/configure-cfgfile-path.patch b/pkgs/misc/drivers/spacenavd/configure-cfgfile-path.patch
new file mode 100644
index 00000000000..268282e96ea
--- /dev/null
+++ b/pkgs/misc/drivers/spacenavd/configure-cfgfile-path.patch
@@ -0,0 +1,63 @@
+diff --git a/src/spnavd.c b/src/spnavd.c
+index 2d4eca6..a5227ed 100644
+--- a/src/spnavd.c
++++ b/src/spnavd.c
+@@ -27,6 +27,8 @@ along with this program. If not, see .
+ #include
+ #include
+ #include
++#include
++#include
+ #include "spnavd.h"
+ #include "logger.h"
+ #include "dev.h"
+@@ -47,13 +49,39 @@ static void handle_events(fd_set *rset);
+ static void sig_handler(int s);
+ static char *fix_path(char *str);
+
+-static char *cfgfile = DEF_CFGFILE;
++static char* config_path;
++char* cfg_path()
++{
++ char* buf;
++ if((buf = getenv("XDG_CONFIG_HOME"))) {
++ if(config_path == NULL) {
++ config_path = malloc(strlen(buf) + strlen("/spnavrc") + 1);
++ if ( config_path != NULL) {
++ sprintf(config_path, "%s/spnavrc", buf);
++ }
++ };
++ return config_path;
++ } else {
++ if (!(buf = getenv("HOME"))) {
++ struct passwd *pw = getpwuid(getuid());
++ buf = pw->pw_dir;
++ }
++ config_path = malloc(strlen(buf) + strlen("/.config/spnavrc") + 1);
++ if ( config_path != NULL) {
++ sprintf(config_path, "%s/.config/spnavrc", buf);
++ }
++ return config_path;
++ }
++}
++
++static char *cfgfile = NULL;
+ static char *logfile = DEF_LOGFILE;
+ static char *pidpath = NULL;
+
+ int main(int argc, char **argv)
+ {
+ int i, pid, ret, become_daemon = 1;
++ cfgfile = cfg_path();
+
+ for(i=1; i: config file path (default: " DEF_CFGFILE ")\n");
++ printf(" -c : config file path (default: %s)\n", cfg_path());
+ printf(" -l |syslog: log file path or log to syslog (default: " DEF_LOGFILE ")\n");
+ printf(" -v: verbose output\n");
+ printf(" -V,-version: print version number and exit\n");
diff --git a/pkgs/misc/drivers/spacenavd/default.nix b/pkgs/misc/drivers/spacenavd/default.nix
index feb00c8b399..5cc1b460133 100644
--- a/pkgs/misc/drivers/spacenavd/default.nix
+++ b/pkgs/misc/drivers/spacenavd/default.nix
@@ -23,6 +23,9 @@ stdenv.mkDerivation rec {
# Changes the pidfile path from /run/spnavd.pid to $XDG_RUNTIME_DIR/spnavd.pid
# to allow for a user service
./configure-pidfile-path.patch
+ # Changes the config file path from /etc/spnavrc to $XDG_CONFIG_HOME/spnavrc or $HOME/.config/spnavrc
+ # to allow for a user service
+ ./configure-cfgfile-path.patch
];
buildInputs = [ libX11 ]