aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/config/ConfigManager.hpp
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-02-18 15:00:34 +0000
committerGitHub <[email protected]>2024-02-18 15:00:34 +0000
commit13f6f0b923ff3ec94a3bec886c28b90402ceef91 (patch)
tree251f66bfb86416fad0fab18f3b2b2ce87847aa83 /src/config/ConfigManager.hpp
parent7e8bcd675de15ee2498f1aa15c5b335e9a9a55f0 (diff)
downloadHyprland-13f6f0b923ff3ec94a3bec886c28b90402ceef91.tar.gz
Hyprland-13f6f0b923ff3ec94a3bec886c28b90402ceef91.zip
Migrate the config to hyprlang (#4656)
* Migrate to hyprlang * pop up errors * fix swapped args * Meson & Nix: build with hyprlang * CI: add hyprlang to setup action * add infra for plugin stuff * fix hyprctl getoption * fix hyprctl getoption with json * format * fix post parse logic * fix autogen config * oops missed exec-once * fmt * fix ws rules * require 0.3.0 for hyprlang * nix: flaek * minor type fixes * fix cfg usages in swipe * use cvarlist for ws rules * fix throw in addPluginConfigVar * Nix: update hyprlang * minor fixes * fix disableLogs * mention hyprlang docs * bump hyprlang dep in cmake * Meson: bump min hyprlang version Nix: update hyprlang * minor fix * Nix: update meson patch --------- Co-authored-by: Mihai Fufezan <[email protected]>
Diffstat (limited to 'src/config/ConfigManager.hpp')
-rw-r--r--src/config/ConfigManager.hpp148
1 files changed, 63 insertions, 85 deletions
diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp
index ecd781b7..8bf2f7be 100644
--- a/src/config/ConfigManager.hpp
+++ b/src/config/ConfigManager.hpp
@@ -21,21 +21,13 @@
#include "defaultConfig.hpp"
#include "ConfigDataValues.hpp"
+#include <hyprlang.hpp>
+
#define INITANIMCFG(name) animationConfig[name] = {}
#define CREATEANIMCFG(name, parent) animationConfig[name] = {false, "", "", 0.f, -1, &animationConfig["global"], &animationConfig[parent]}
#define HANDLE void*
-struct SConfigValue {
- int64_t intValue = -INT64_MAX;
- float floatValue = -__FLT_MAX__;
- std::string strValue = "";
- Vector2D vecValue = Vector2D(-__FLT_MAX__, -__FLT_MAX__);
- std::shared_ptr<ICustomConfigValueData> data;
-
- bool set = false; // used for device configs
-};
-
struct SWorkspaceRule {
std::string monitor = "";
std::string workspaceString = "";
@@ -74,9 +66,14 @@ struct SAnimationPropertyConfig {
};
struct SPluginKeyword {
- HANDLE handle = 0;
- std::string name = "";
- std::function<void(const std::string&, const std::string&)> fn;
+ HANDLE handle = 0;
+ std::string name = "";
+ Hyprlang::PCONFIGHANDLERFUNC fn = nullptr;
+};
+
+struct SPluginVariable {
+ HANDLE handle = 0;
+ std::string name = "";
};
struct SExecRequestedRule {
@@ -91,24 +88,17 @@ class CConfigManager {
void tick();
void init();
- int getInt(const std::string&);
- float getFloat(const std::string&);
- Vector2D getVec(const std::string&);
- std::string getString(const std::string&);
- void setFloat(const std::string&, float);
- void setInt(const std::string&, int);
- void setVec(const std::string&, Vector2D);
- void setString(const std::string&, const std::string&);
-
int getDeviceInt(const std::string&, const std::string&, const std::string& fallback = "");
float getDeviceFloat(const std::string&, const std::string&, const std::string& fallback = "");
Vector2D getDeviceVec(const std::string&, const std::string&, const std::string& fallback = "");
std::string getDeviceString(const std::string&, const std::string&, const std::string& fallback = "");
bool deviceConfigExists(const std::string&);
+ Hyprlang::CConfigValue* getConfigValueSafeDevice(const std::string& dev, const std::string& val, const std::string& fallback);
bool shouldBlurLS(const std::string&);
- SConfigValue* getConfigValuePtr(const std::string&);
- SConfigValue* getConfigValuePtrSafe(const std::string&);
+ 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();
@@ -127,8 +117,8 @@ class CConfigManager {
std::unordered_map<std::string, SAnimationPropertyConfig> getAnimationConfig();
- void addPluginConfigVar(HANDLE handle, const std::string& name, const SConfigValue& value);
- void addPluginKeyword(HANDLE handle, const std::string& name, std::function<void(const std::string& cmd, const std::string& val)> fun);
+ void addPluginConfigVar(HANDLE handle, const std::string& name, const Hyprlang::CConfigValue& value);
+ void addPluginKeyword(HANDLE handle, const std::string& name, Hyprlang::PCONFIGHANDLERFUNC fun, Hyprlang::SHandlerOptions opts = {});
void removePluginConfig(HANDLE handle);
// no-op when done.
@@ -141,7 +131,7 @@ class CConfigManager {
void ensureMonitorStatus();
void ensureVRR(CMonitor* pMonitor = nullptr);
- std::string parseKeyword(const std::string&, const std::string&, bool dynamic = false);
+ std::string parseKeyword(const std::string&, const std::string&);
void addParseError(const std::string&);
@@ -151,77 +141,65 @@ class CConfigManager {
void handlePluginLoads();
- std::string configCurrentPath;
+ // keywords
+ std::optional<std::string> handleRawExec(const std::string&, const std::string&);
+ std::optional<std::string> handleExecOnce(const std::string&, const std::string&);
+ std::optional<std::string> handleMonitor(const std::string&, const std::string&);
+ std::optional<std::string> handleBind(const std::string&, const std::string&);
+ std::optional<std::string> handleUnbind(const std::string&, const std::string&);
+ std::optional<std::string> handleWindowRule(const std::string&, const std::string&);
+ std::optional<std::string> handleLayerRule(const std::string&, const std::string&);
+ std::optional<std::string> handleWindowRuleV2(const std::string&, const std::string&);
+ std::optional<std::string> handleWorkspaceRules(const std::string&, const std::string&);
+ std::optional<std::string> handleBezier(const std::string&, const std::string&);
+ std::optional<std::string> handleAnimation(const std::string&, const std::string&);
+ std::optional<std::string> handleSource(const std::string&, const std::string&);
+ std::optional<std::string> handleSubmap(const std::string&, const std::string&);
+ std::optional<std::string> handleBlurLS(const std::string&, const std::string&);
+ std::optional<std::string> handleBindWS(const std::string&, const std::string&);
+ std::optional<std::string> handleEnv(const std::string&, const std::string&);
+ std::optional<std::string> handlePlugin(const std::string&, const std::string&);
+
+ std::string configCurrentPath;
private:
- std::deque<std::string> configPaths; // stores all the config paths
- std::unordered_map<std::string, time_t> configModifyTimes; // stores modify times
- std::vector<std::pair<std::string, std::string>> configDynamicVars; // stores dynamic vars declared by the user
- std::unordered_map<std::string, SConfigValue> configValues;
- std::unordered_map<std::string, std::unordered_map<std::string, SConfigValue>> deviceConfigs; // stores device configs
-
- std::unordered_map<std::string, SAnimationPropertyConfig> animationConfig; // stores all the animations with their set values
-
- std::string currentCategory = ""; // For storing the category of the current item
+ std::unique_ptr<Hyprlang::CConfig> m_pConfig;
- std::string parseError = ""; // For storing a parse error to display later
+ std::deque<std::string> configPaths; // stores all the config paths
+ std::unordered_map<std::string, time_t> configModifyTimes; // stores modify times
- std::string m_szCurrentSubmap = ""; // For storing the current keybind submap
+ std::unordered_map<std::string, SAnimationPropertyConfig> animationConfig; // stores all the animations with their set values
- std::vector<SExecRequestedRule> execRequestedRules; // rules requested with exec, e.g. [workspace 2] kitty
+ std::string m_szCurrentSubmap = ""; // For storing the current keybind submap
- std::vector<std::string> m_vDeclaredPlugins;
- std::unordered_map<HANDLE, std::unique_ptr<std::unordered_map<std::string, SConfigValue>>> pluginConfigs; // stores plugin configs
- std::vector<SPluginKeyword> pluginKeywords;
+ std::vector<SExecRequestedRule> execRequestedRules; // rules requested with exec, e.g. [workspace 2] kitty
- bool isFirstLaunch = true; // For exec-once
+ std::vector<std::string> m_vDeclaredPlugins;
+ std::vector<SPluginKeyword> pluginKeywords;
+ std::vector<SPluginVariable> pluginVariables;
- std::deque<SMonitorRule> m_dMonitorRules;
- std::deque<SWorkspaceRule> m_dWorkspaceRules;
- std::deque<SWindowRule> m_dWindowRules;
- std::deque<SLayerRule> m_dLayerRules;
- std::deque<std::string> m_dBlurLSNamespaces;
+ bool isFirstLaunch = true; // For exec-once
- bool firstExecDispatched = false;
- bool m_bManualCrashInitiated = false;
- std::deque<std::string> firstExecRequests;
+ std::deque<SMonitorRule> m_dMonitorRules;
+ std::deque<SWorkspaceRule> m_dWorkspaceRules;
+ std::deque<SWindowRule> m_dWindowRules;
+ std::deque<SLayerRule> m_dLayerRules;
+ std::deque<std::string> m_dBlurLSNamespaces;
- std::vector<std::pair<std::string, std::string>> environmentVariables;
+ bool firstExecDispatched = false;
+ bool m_bManualCrashInitiated = false;
+ std::deque<std::string> firstExecRequests;
- std::vector<std::pair<std::string, std::string>> m_vFailedPluginConfigValues; // for plugin values of unloaded plugins
+ std::vector<std::pair<std::string, std::string>> m_vFailedPluginConfigValues; // for plugin values of unloaded plugins
// internal methods
- void setDefaultVars();
- void setDefaultAnimationVars();
- void setDeviceDefaultVars(const std::string&);
- void populateEnvironment();
-
- void setAnimForChildren(SAnimationPropertyConfig* const);
- void updateBlurredLS(const std::string&, const bool);
-
- void applyUserDefinedVars(std::string&, const size_t);
- void loadConfigLoadVars();
- SConfigValue getConfigValueSafe(const std::string&);
- SConfigValue getConfigValueSafeDevice(const std::string&, const std::string&, const std::string& fallback = "");
- void parseLine(std::string&);
- void configSetValueSafe(const std::string&, const std::string&);
- void handleDeviceConfig(const std::string&, const std::string&);
- void handleRawExec(const std::string&, const std::string&);
- void handleMonitor(const std::string&, const std::string&);
- void handleBind(const std::string&, const std::string&);
- void handleUnbind(const std::string&, const std::string&);
- void handleWindowRule(const std::string&, const std::string&);
- void handleLayerRule(const std::string&, const std::string&);
- void handleWindowRuleV2(const std::string&, const std::string&);
- void handleWorkspaceRules(const std::string&, const std::string&);
- void handleBezier(const std::string&, const std::string&);
- void handleAnimation(const std::string&, const std::string&);
- void handleSource(const std::string&, const std::string&);
- void handleSubmap(const std::string&, const std::string&);
- void handleBlurLS(const std::string&, const std::string&);
- void handleBindWS(const std::string&, const std::string&);
- void handleEnv(const std::string&, const std::string&);
- void handlePlugin(const std::string&, const std::string&);
+ 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();
};
inline std::unique_ptr<CConfigManager> g_pConfigManager;