From 01fc3d6068f80c60e4113f14e375070e38329641 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Thu, 14 Jul 2022 23:55:24 +0300 Subject: [PATCH 1/3] add config flag you can now specify a config with -c --- src/Compositor.hpp | 2 ++ src/config/ConfigManager.cpp | 46 ++++++++++++++++++++++++------------ src/main.cpp | 6 +++++ 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/Compositor.hpp b/src/Compositor.hpp index 3ea1711a..0500387c 100644 --- a/src/Compositor.hpp +++ b/src/Compositor.hpp @@ -147,6 +147,8 @@ public: CWindow* getX11Parent(CWindow*); void scheduleFrameForMonitor(SMonitor*); + std::string explicitConfigPath; + private: void initAllSignals(); void setRandomSplash(); diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index f01f9b40..ba73b777 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -12,8 +12,15 @@ CConfigManager::CConfigManager() { setDefaultVars(); - static const char* const ENVHOME = getenv("HOME"); - const std::string CONFIGPATH = ENVHOME + (ISDEBUG ? (std::string) "/.config/hypr/hyprlandd.conf" : (std::string) "/.config/hypr/hyprland.conf"); + + std::string CONFIGPATH; + if (g_pCompositor->explicitConfigPath == "") { + static const char* const ENVHOME = getenv("HOME"); + CONFIGPATH = ENVHOME + (ISDEBUG ? (std::string) "/.config/hypr/hyprlandd.conf" : (std::string) "/.config/hypr/hyprland.conf"); + } else { + CONFIGPATH = g_pCompositor->explicitConfigPath; + } + configPaths.emplace_back(CONFIGPATH); Debug::disableLogs = &configValues["debug:disable_logs"].intValue; @@ -801,28 +808,37 @@ void CConfigManager::loadConfigLoadVars() { // paths configPaths.clear(); + std::string CONFIGPATH; + static const char* const ENVHOME = getenv("HOME"); const std::string CONFIGPARENTPATH = ENVHOME + (std::string) "/.config/hypr/"; - const std::string CONFIGPATH = CONFIGPARENTPATH + (ISDEBUG ? "hyprlandd.conf" : "hyprland.conf"); + + if (g_pCompositor->explicitConfigPath == "") { + CONFIGPATH = CONFIGPARENTPATH + (ISDEBUG ? "hyprlandd.conf" : "hyprland.conf"); + } else { + CONFIGPATH = g_pCompositor->explicitConfigPath; + } configPaths.push_back(CONFIGPATH); - + std::ifstream ifs; ifs.open(CONFIGPATH); if (!ifs.good()) { - Debug::log(WARN, "Config reading error. (No file? Attempting to generate, backing up old one if exists)"); - try { - std::filesystem::rename(CONFIGPATH, CONFIGPATH + ".backup"); - } catch(...) { /* Probably doesn't exist */} + if(g_pCompositor->explicitConfigPath == "") { + Debug::log(WARN, "Config reading error. (No file? Attempting to generate, backing up old one if exists)"); + try { + std::filesystem::rename(CONFIGPATH, CONFIGPATH + ".backup"); + } catch(...) { /* Probably doesn't exist */} - try { - if (!std::filesystem::is_directory(CONFIGPARENTPATH)) - std::filesystem::create_directories(CONFIGPARENTPATH); - } - catch (...) { - parseError = "Broken config file! (Could not create directory)"; - return; + try { + if (!std::filesystem::is_directory(CONFIGPARENTPATH)) + std::filesystem::create_directories(CONFIGPARENTPATH); + } + catch (...) { + parseError = "Broken config file! (Could not create directory)"; + return; + } } std::ofstream ofs; diff --git a/src/main.cpp b/src/main.cpp index 3f68fa8f..753d406d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,9 +15,14 @@ int main(int argc, char** argv) { throw std::runtime_error("XDG_RUNTIME_DIR is not set!"); // parse some args + std::string configPath; for (int i = 1; i < argc; ++i) { if (!strcmp(argv[i], "--i-am-really-stupid")) ignoreSudo = true; + 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()); + } } system("mkdir -p /tmp/hypr"); @@ -37,6 +42,7 @@ int main(int argc, char** argv) { // let's init the compositor. // it initializes basic Wayland stuff in the constructor. g_pCompositor = std::make_unique(); + g_pCompositor->explicitConfigPath = configPath; Debug::log(LOG, "Hyprland init finished."); From d8fee02063343ecabe4853cb9738e1bd7ccb2a11 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Fri, 15 Jul 2022 00:09:31 +0300 Subject: [PATCH 2/3] add simple help message --- src/main.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 753d406d..9367d870 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,9 +19,14 @@ int main(int argc, char** argv) { for (int i = 1; i < argc; ++i) { if (!strcmp(argv[i], "--i-am-really-stupid")) ignoreSudo = true; - if ((!strcmp(argv[i], "-c") || !strcmp(argv[i], "--config")) && argc >= i + 2) { + else 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 << "Hyprland usage: Hyprland [arg [...]].\n\nArguments:\n" << + "--help -h | Show this help message\n" << + "--config -c | Specify config file to use\n"; + return 1; } } From 202fb4d8d45329477870874cec2fcb9c0b42a1eb Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Fri, 15 Jul 2022 00:10:00 +0300 Subject: [PATCH 3/3] add clangd cache in gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a43470cd..27b80f06 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ build/ result /.vscode/ .envrc +.cache *.o *-protocol.c