summaryrefslogtreecommitdiff
path: root/src/config/ConfigManager.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2024-08-17 17:33:16 +0100
committerGitHub <noreply@github.com>2024-08-17 17:33:16 +0100
commit92744b5b9aa386257bf243c957ab64f7f4171a19 (patch)
tree0caa6fdf3ca91c81e89ef21ddac3c6ecf6794b1b /src/config/ConfigManager.cpp
parentc5feee1e357f3c3c59ebe406630601c627807963 (diff)
IPC: Add config descriptions (#7377)
Thanks @gulafaran for the work --- Co-authored-by: @gulafaran
Diffstat (limited to 'src/config/ConfigManager.cpp')
-rw-r--r--src/config/ConfigManager.cpp63
1 files changed, 60 insertions, 3 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 41d3871c..1856bd49 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -28,7 +28,9 @@
#include <filesystem>
using namespace Hyprutils::String;
-extern "C" char** environ;
+extern "C" char** environ;
+
+#include "ConfigDescriptions.hpp"
static Hyprlang::CParseResult configHandleGradientSet(const char* VALUE, void** data) {
std::string V = VALUE;
@@ -312,8 +314,6 @@ CConfigManager::CConfigManager() {
configPaths.emplace_back(getMainConfigPath());
m_pConfig = std::make_unique<Hyprlang::CConfig>(configPaths.begin()->c_str(), Hyprlang::SConfigOptions{.throwAllErrors = true, .allowMissingConfig = true});
- m_pConfig->addConfigValue("general:sensitivity", {1.0f});
- m_pConfig->addConfigValue("general:apply_sens_to_raw", Hyprlang::INT{0});
m_pConfig->addConfigValue("general:border_size", Hyprlang::INT{1});
m_pConfig->addConfigValue("general:no_border_on_floating", Hyprlang::INT{0});
m_pConfig->addConfigValue("general:border_part_of_window", Hyprlang::INT{1});
@@ -2607,3 +2607,60 @@ std::optional<std::string> CConfigManager::handlePlugin(const std::string& comma
return {};
}
+
+const std::vector<SConfigOptionDescription>& CConfigManager::getAllDescriptions() {
+ return CONFIG_OPTIONS;
+}
+
+std::string SConfigOptionDescription::jsonify() const {
+ auto parseData = [this]() -> std::string {
+ return std::visit(
+ [](auto&& val) {
+ using T = std::decay_t<decltype(val)>;
+ if constexpr (std::is_same_v<T, SStringData>) {
+ return std::format(R"#( "value": "{}")#", val.value);
+ } else if constexpr (std::is_same_v<T, SRangeData>) {
+ return std::format(R"#( "value": {},
+ "min": {},
+ "max": {})#",
+ val.value, val.min, val.max);
+ } else if constexpr (std::is_same_v<T, SFloatData>) {
+ return std::format(R"#( "value": {},
+ "min": {},
+ "max": {})#",
+ val.value, val.min, val.max);
+ } else if constexpr (std::is_same_v<T, SColorData>) {
+ return std::format(R"#( "value": {})#", val.color.getAsHex());
+ } else if constexpr (std::is_same_v<T, SBoolData>) {
+ return std::format(R"#( "value": {})#", val.value);
+ } else if constexpr (std::is_same_v<T, SChoiceData>) {
+ return std::format(R"#( "value": {})#", val.choices);
+ } else if constexpr (std::is_same_v<T, SVectorData>) {
+ return std::format(R"#( "x": {},
+ "y": {},
+ "min_x": {},
+ "min_y": {},
+ "max_x": {},
+ "max_y": {})#",
+ val.vec.x, val.vec.y, val.min.x, val.min.y, val.max.x, val.max.y);
+ } else if constexpr (std::is_same_v<T, SGradientData>) {
+ return std::format(R"#( "value": "{}")#", val.gradient);
+ }
+ return std::string{""};
+ },
+ data);
+ };
+
+ std::string json = std::format(R"#({{
+ "value": "{}",
+ "description": "{}",
+ "type": {},
+ "flags": {},
+ "data": {{
+ {}
+ }}
+}})#",
+ value, description, (uint16_t)type, (uint32_t)flags, parseData());
+
+ return json;
+}