diff --git a/src/Hyprpaper.hpp b/src/Hyprpaper.hpp index 0dad476..c7bed0a 100644 --- a/src/Hyprpaper.hpp +++ b/src/Hyprpaper.hpp @@ -34,6 +34,7 @@ public: std::vector> m_vMonitors; bool m_bIPCEnabled = true; + std::string m_szExplicitConfigPath; void removeOldHyprpaperImages(); void preloadAllWallpapersFromConfig(); diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 357b625..c09cba9 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -4,11 +4,17 @@ CConfigManager::CConfigManager() { // init the entire thing - const char* const ENVHOME = getenv("HOME"); - const std::string CONFIGPATH = ENVHOME + (std::string) "/.config/hypr/hyprpaper.conf"; + std::string configPath; + if (g_pHyprpaper->m_szExplicitConfigPath == "") { + const char *const ENVHOME = getenv("HOME"); + configPath = ENVHOME + (std::string) "/.config/hypr/hyprpaper.conf"; + } + else { + configPath = g_pHyprpaper->m_szExplicitConfigPath; + } std::ifstream ifs; - ifs.open(CONFIGPATH); + ifs.open(configPath); if (!ifs.good()) { Debug::log(CRIT, "Hyprpaper was not provided a config!"); diff --git a/src/main.cpp b/src/main.cpp index 23b3aac..a360c4b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,8 +5,23 @@ int main(int argc, char** argv, char** envp) { Debug::log(LOG, "Welcome to hyprpaper!\nbuilt from commit %s (%s)", GIT_COMMIT_HASH, GIT_COMMIT_MESSAGE); + // parse some args + std::string configPath; + for (int i = 1; i < argc; ++i) { + if ((!strcmp(argv[i], "-c") || !strcmp(argv[i], "--config")) && argc >= i + 2) { + configPath = std::string(argv[++i]); + Debug::log(LOG, "Using config location %s.", configPath.c_str()); + } else { + std::cout << "Hyprpaper usage: hyprpaper [arg [...]].\n\nArguments:\n" << + "--help -h | Show this help message\n" << + "--config -c | Specify config file to use\n"; + return 1; + } + } + // starts g_pHyprpaper = std::make_unique(); + g_pHyprpaper->m_szExplicitConfigPath = configPath; g_pHyprpaper->init(); return 0;