summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMihai Fufezan <fufexan@protonmail.com>2024-07-16 22:23:37 +0300
committerGitHub <noreply@github.com>2024-07-16 21:23:37 +0200
commitda956c8a979471282db6790f5fa5dcec320ec226 (patch)
tree36fcb6c4b7bcc4be68e69bf609ca86a8b51f6dd6
parentbd526822deb9ed47c0b51b534817aa8541fff07b (diff)
config: use hyprutils helper (#6891)
* flake.lock: update nix/overlays: remove xwayland overlay (merged upstream) * config: use hyprutils helper * flake.lock: update * CMake & Meson: update required versions
-rw-r--r--CMakeLists.txt2
-rw-r--r--flake.lock12
-rw-r--r--nix/overlays.nix11
-rw-r--r--src/config/ConfigManager.cpp69
-rw-r--r--src/config/ConfigManager.hpp18
-rw-r--r--src/meson.build4
-rw-r--r--src/render/OpenGL.cpp2
7 files changed, 53 insertions, 65 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index d41dd6e5..07fa8cf6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -113,7 +113,7 @@ pkg_check_modules(deps REQUIRED IMPORTED_TARGET
wayland-server wayland-client wayland-cursor wayland-protocols
cairo pango pangocairo pixman-1
libdrm libinput hwdata libseat libdisplay-info libliftoff libudev gbm
- hyprlang>=0.3.2 hyprcursor>=0.1.7 hyprutils>=0.1.5
+ hyprlang>=0.3.2 hyprcursor>=0.1.7 hyprutils>=0.2.0
)
find_package(hyprwayland-scanner 0.3.10 REQUIRED)
diff --git a/flake.lock b/flake.lock
index 1066e37b..b5f5738a 100644
--- a/flake.lock
+++ b/flake.lock
@@ -87,11 +87,11 @@
]
},
"locked": {
- "lastModified": 1720545076,
- "narHash": "sha256-Pxacc2uoxI00koXp5+CyNqHOTQlqNlK0rlRHDBHX4+g=",
+ "lastModified": 1721071737,
+ "narHash": "sha256-qmC9jGfbE4+EIBbbSAkrfR/p49wShjpv4/KztgE/P54=",
"owner": "hyprwm",
"repo": "hyprutils",
- "rev": "6174a2a25f4e216c0f1d0c4278adc23c476b1d09",
+ "rev": "eb1ceff2b87f6820789249f63faa8e9dcb54d05f",
"type": "github"
},
"original": {
@@ -125,11 +125,11 @@
},
"nixpkgs": {
"locked": {
- "lastModified": 1720542800,
- "narHash": "sha256-ZgnNHuKV6h2+fQ5LuqnUaqZey1Lqqt5dTUAiAnqH0QQ=",
+ "lastModified": 1720957393,
+ "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "feb2849fdeb70028c70d73b848214b00d324a497",
+ "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb",
"type": "github"
},
"original": {
diff --git a/nix/overlays.nix b/nix/overlays.nix
index cc66e1b5..a4e1df37 100644
--- a/nix/overlays.nix
+++ b/nix/overlays.nix
@@ -25,7 +25,6 @@ in {
inputs.hyprlang.overlays.default
inputs.hyprutils.overlays.default
inputs.hyprwayland-scanner.overlays.default
- self.overlays.xwayland
# Hyprland packages themselves
(final: prev: let
@@ -63,14 +62,4 @@ in {
hyprland-extras = lib.composeManyExtensions [
inputs.xdph.overlays.xdg-desktop-portal-hyprland
];
-
- # Patches XWayland's pkgconfig file to not include Cflags or includedir
- # The above two variables trip up CMake and the build fails
- xwayland = final: prev: {
- xwayland = prev.xwayland.overrideAttrs (old: {
- postInstall = ''
- sed -i '/includedir/d' $out/lib/pkgconfig/xwayland.pc
- '';
- });
- };
}
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 04d29f3a..944aa0b2 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -8,6 +8,7 @@
#include <cstddef>
#include <cstdint>
+#include <hyprutils/path/Path.hpp>
#include <string.h>
#include <string>
#include <sys/stat.h>
@@ -628,25 +629,49 @@ CConfigManager::CConfigManager() {
g_pHyprError->queueCreate(ERR.value(), CColor{1.0, 0.1, 0.1, 1.0});
}
-std::string CConfigManager::getConfigDir() {
- static const char* xdgConfigHome = getenv("XDG_CONFIG_HOME");
+std::optional<std::string> CConfigManager::generateConfig(std::string configPath) {
+ std::string parentPath = std::filesystem::path(configPath).parent_path();
- if (xdgConfigHome && std::filesystem::path(xdgConfigHome).is_absolute())
- return xdgConfigHome;
+ if (!std::filesystem::is_directory(parentPath)) {
+ Debug::log(WARN, "Creating config home directory");
+ try {
+ std::filesystem::create_directories(parentPath);
+ } catch (std::exception e) { throw e; }
+ }
- static const char* home = getenv("HOME");
+ Debug::log(WARN, "No config file found; attempting to generate.");
+ std::ofstream ofs;
+ ofs.open(configPath, std::ios::trunc);
+ ofs << AUTOCONFIG;
+ ofs.close();
- if (!home)
- throw std::runtime_error("Neither HOME nor XDG_CONFIG_HOME is set in the environment. Cannot determine config directory.");
+ if (!std::filesystem::exists(configPath))
+ return "Config could not be generated.";
- return home + std::string("/.config");
+ return configPath;
}
std::string CConfigManager::getMainConfigPath() {
if (!g_pCompositor->explicitConfigPath.empty())
return g_pCompositor->explicitConfigPath;
- return getConfigDir() + "/hypr/" + (ISDEBUG ? "hyprlandd.conf" : "hyprland.conf");
+ static const auto paths = Hyprutils::Path::findConfig(ISDEBUG ? "hyprlandd" : "hyprland");
+ if (paths.first.has_value()) {
+ return paths.first.value();
+ } else if (paths.second.has_value()) {
+ auto configPath = Hyprutils::Path::fullConfigPath(paths.second.value(), ISDEBUG ? "hyprlandd" : "hyprland");
+ return generateConfig(configPath).value();
+ } else
+ throw std::runtime_error("Neither HOME nor XDG_CONFIG_HOME are set in the environment. Could not find config in XDG_CONFIG_DIRS or /etc/xdg.");
+}
+
+std::optional<std::string> CConfigManager::verifyConfigExists() {
+ std::string mainConfigPath = getMainConfigPath();
+
+ if (!std::filesystem::exists(mainConfigPath))
+ return "broken config dir?";
+
+ return {};
}
const std::string CConfigManager::getConfigString() {
@@ -742,32 +767,6 @@ void CConfigManager::setDefaultAnimationVars() {
CREATEANIMCFG("specialWorkspace", "workspaces");
}
-std::optional<std::string> CConfigManager::verifyConfigExists() {
- std::string mainConfigPath = getMainConfigPath();
-
- if (g_pCompositor->explicitConfigPath.empty() && !std::filesystem::exists(mainConfigPath)) {
- std::string configPath = std::filesystem::path(mainConfigPath).parent_path();
-
- if (!std::filesystem::is_directory(configPath)) {
- Debug::log(WARN, "Creating config home directory");
- try {
- std::filesystem::create_directories(configPath);
- } catch (...) { return "Broken config file! (Could not create config directory)"; }
- }
-
- Debug::log(WARN, "No config file found; attempting to generate.");
- std::ofstream ofs;
- ofs.open(mainConfigPath, std::ios::trunc);
- ofs << AUTOCONFIG;
- ofs.close();
- }
-
- if (!std::filesystem::exists(mainConfigPath))
- return "broken config dir?";
-
- return {};
-}
-
std::optional<std::string> CConfigManager::resetHLConfig() {
m_dMonitorRules.clear();
m_dWindowRules.clear();
diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp
index 10021187..df7c202b 100644
--- a/src/config/ConfigManager.hpp
+++ b/src/config/ConfigManager.hpp
@@ -101,7 +101,6 @@ class CConfigManager {
void* const* getConfigValuePtr(const std::string&);
Hyprlang::CConfigValue* getHyprlangConfigValuePtr(const std::string& name, const std::string& specialCat = "");
void onPluginLoadUnload(const std::string& name, bool load);
- static std::string getConfigDir();
static std::string getMainConfigPath();
const std::string getConfigString();
@@ -224,14 +223,15 @@ class CConfigManager {
std::string m_szConfigErrors = "";
// internal methods
- void setAnimForChildren(SAnimationPropertyConfig* const);
- void updateBlurredLS(const std::string&, const bool);
- void setDefaultAnimationVars();
- std::optional<std::string> resetHLConfig();
- std::optional<std::string> verifyConfigExists();
- void postConfigReload(const Hyprlang::CParseResult& result);
- void reload();
- SWorkspaceRule mergeWorkspaceRules(const SWorkspaceRule&, const SWorkspaceRule&);
+ void setAnimForChildren(SAnimationPropertyConfig* const);
+ void updateBlurredLS(const std::string&, const bool);
+ void setDefaultAnimationVars();
+ std::optional<std::string> resetHLConfig();
+ static std::optional<std::string> generateConfig(std::string configPath);
+ static std::optional<std::string> verifyConfigExists();
+ void postConfigReload(const Hyprlang::CParseResult& result);
+ void reload();
+ SWorkspaceRule mergeWorkspaceRules(const SWorkspaceRule&, const SWorkspaceRule&);
};
inline std::unique_ptr<CConfigManager> g_pConfigManager;
diff --git a/src/meson.build b/src/meson.build
index ccb1922a..f6ae043d 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -11,9 +11,9 @@ executable('Hyprland', src,
dependency('wayland-client'),
wlroots.get_variable('wlroots'),
dependency('cairo'),
- dependency('hyprcursor'),
+ dependency('hyprcursor', version: '>=0.1.7'),
dependency('hyprlang', version: '>= 0.3.2'),
- dependency('hyprutils', version: '>= 0.1.1'),
+ dependency('hyprutils', version: '>= 0.2.0'),
dependency('libdrm'),
dependency('egl'),
dependency('xkbcommon'),
diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp
index cb3d2e71..8229e210 100644
--- a/src/render/OpenGL.cpp
+++ b/src/render/OpenGL.cpp
@@ -842,7 +842,7 @@ void CHyprOpenGLImpl::applyScreenShader(const std::string& path) {
if (path == "" || path == STRVAL_EMPTY)
return;
- std::ifstream infile(absolutePath(path, g_pConfigManager->getConfigDir()));
+ std::ifstream infile(absolutePath(path, g_pConfigManager->getMainConfigPath()));
if (!infile.good()) {
g_pConfigManager->addParseError("Screen shader parser: Screen shader path not found");