diff --git a/README.md b/README.md index 95eba79..b4f590d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,9 @@ For info that with "EVIOCGRAB" the keyboard events can be consumed exclusively b ## Configuration -The configuration can be +The configuration can be provided by either specifying a config file path via the `-c` parameter. If no parameter is provided, the default config path under `$HOME/.config/UsbMakroBoard.yaml` is used. + +Find the config schema in [schemas/config.schema.json](./schemas/config.schema.json) as well as a default config in [config.yaml](./config.yaml). ## Allowing non-root access to the device diff --git a/src/main.cpp b/src/main.cpp index e6dcf92..4b1a618 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -57,7 +58,7 @@ std::pair mapKeyEventToRowColumn(int keyEventNumber, const std::unorde std::string getConfigPathFromCliArguments(int argc, char *argv[]) { - std::string configPath = "config.yaml"; + std::string configPath; int opt; while ((opt = getopt(argc, argv, "c:")) != -1) { @@ -71,6 +72,18 @@ std::string getConfigPathFromCliArguments(int argc, char *argv[]) exit(EXIT_FAILURE); } } + + if (configPath.empty()) { + const char *home = std::getenv("HOME"); + if (home != nullptr) { + configPath = std::string(home) + "/.config/usbMakroBoard.yaml"; + } + else { + std::cerr << "HOME environment variable is not set. Exiting.\n"; + exit(EXIT_FAILURE); + } + } + return configPath; }