diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp index 4e591fa81..73579af09 100644 --- a/src/config/ConfigDescriptions.hpp +++ b/src/config/ConfigDescriptions.hpp @@ -253,98 +253,98 @@ inline static const std::vector CONFIG_OPTIONS = { */ SConfigOptionDescription{ - .value = "blur:enabled", + .value = "decoration:blur:enabled", .description = "enable kawase window background blur", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, SConfigOptionDescription{ - .value = "blur:size", + .value = "decoration:blur:size", .description = "blur size (distance)", .type = CONFIG_OPTION_INT, .data = SConfigOptionDescription::SRangeData{8, 0, 100}, }, SConfigOptionDescription{ - .value = "blur:passes", + .value = "decoration:blur:passes", .description = "the amount of passes to perform", .type = CONFIG_OPTION_INT, .data = SConfigOptionDescription::SRangeData{1, 0, 10}, }, SConfigOptionDescription{ - .value = "blur:ignore_opacity", + .value = "decoration:blur:ignore_opacity", .description = "make the blur layer ignore the opacity of the window", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, SConfigOptionDescription{ - .value = "blur:new_optimizations", + .value = "decoration:blur:new_optimizations", .description = "whether to enable further optimizations to the blur. Recommended to leave on, as it will massively improve performance.", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, SConfigOptionDescription{ - .value = "blur:xray", + .value = "decoration:blur:xray", .description = "if enabled, floating windows will ignore tiled windows in their blur. Only available if blur_new_optimizations is true. Will reduce overhead on floating " "blur significantly.", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, SConfigOptionDescription{ - .value = "blur:noise", + .value = "decoration:blur:noise", .description = "how much noise to apply. [0.0 - 1.0]", .type = CONFIG_OPTION_FLOAT, .data = SConfigOptionDescription::SFloatData{0.0117, 0, 1}, }, SConfigOptionDescription{ - .value = "blur:contrast", + .value = "decoration:blur:contrast", .description = "contrast modulation for blur. [0.0 - 2.0]", .type = CONFIG_OPTION_FLOAT, .data = SConfigOptionDescription::SFloatData{0.8916, 0, 2}, }, SConfigOptionDescription{ - .value = "blur:brightness", + .value = "decoration:blur:brightness", .description = "brightness modulation for blur. [0.0 - 2.0]", .type = CONFIG_OPTION_FLOAT, .data = SConfigOptionDescription::SFloatData{0.8172, 0, 2}, }, SConfigOptionDescription{ - .value = "blur:vibrancy", + .value = "decoration:blur:vibrancy", .description = "Increase saturation of blurred colors. [0.0 - 1.0]", .type = CONFIG_OPTION_FLOAT, .data = SConfigOptionDescription::SFloatData{0.1696, 0, 1}, }, SConfigOptionDescription{ - .value = "blur:vibrancy_darkness", + .value = "decoration:blur:vibrancy_darkness", .description = "How strong the effect of vibrancy is on dark areas . [0.0 - 1.0]", .type = CONFIG_OPTION_FLOAT, .data = SConfigOptionDescription::SFloatData{0, 0, 1}, }, SConfigOptionDescription{ - .value = "blur:special", + .value = "decoration:blur:special", .description = "whether to blur behind the special workspace (note: expensive)", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, SConfigOptionDescription{ - .value = "blur:popups", + .value = "decoration:blur:popups", .description = "whether to blur popups (e.g. right-click menus)", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, SConfigOptionDescription{ - .value = "blur:popups_ignorealpha", + .value = "decoration:blur:popups_ignorealpha", .description = "works like ignorealpha in layer rules. If pixel opacity is below set value, will not blur. [0.0 - 1.0]", .type = CONFIG_OPTION_FLOAT, .data = SConfigOptionDescription::SFloatData{0.2, 0, 1}, }, SConfigOptionDescription{ - .value = "blur:input_methods", + .value = "decoration:blur:input_methods", .description = "whether to blur input methods (e.g. fcitx5)", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, SConfigOptionDescription{ - .value = "blur:input_methods_ignorealpha", + .value = "decoration:blur:input_methods_ignorealpha", .description = "works like ignorealpha in layer rules. If pixel opacity is below set value, will not blur. [0.0 - 1.0]", .type = CONFIG_OPTION_FLOAT, .data = SConfigOptionDescription::SFloatData{0.2, 0, 1}, @@ -815,25 +815,25 @@ inline static const std::vector CONFIG_OPTIONS = { .data = SConfigOptionDescription::SBoolData{true}, }, SConfigOptionDescription{ - .value = "general:col.border_active", + .value = "group:col.border_active", .description = "border color for inactive windows", .type = CONFIG_OPTION_GRADIENT, .data = SConfigOptionDescription::SGradientData{"0x66ffff00"}, }, SConfigOptionDescription{ - .value = "general:col.border_inactive", + .value = "group:col.border_inactive", .description = "border color for the active window", .type = CONFIG_OPTION_GRADIENT, .data = SConfigOptionDescription::SGradientData{"0x66777700"}, }, SConfigOptionDescription{ - .value = "general:col.border_locked_active", + .value = "group:col.border_locked_inactive", .description = "inactive border color for window that cannot be added to a group (see denywindowfromgroup dispatcher)", .type = CONFIG_OPTION_GRADIENT, .data = SConfigOptionDescription::SGradientData{"0x66ff5500"}, }, SConfigOptionDescription{ - .value = "general:col.border_locked_inactive", + .value = "group:col.border_locked_active", .description = "active border color for window that cannot be added to a group", .type = CONFIG_OPTION_GRADIENT, .data = SConfigOptionDescription::SGradientData{"0x66775500"}, @@ -946,7 +946,7 @@ inline static const std::vector CONFIG_OPTIONS = { .data = SConfigOptionDescription::SBoolData{true}, }, SConfigOptionDescription{ - .value = "group:groupbar:groupbar_round_only_edges", + .value = "group:groupbar:gradient_round_only_edges", .description = "if yes, will only round at the groupbar gradient edges", .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, @@ -1359,13 +1359,6 @@ inline static const std::vector CONFIG_OPTIONS = { * cursor: */ - SConfigOptionDescription{ - .value = "cursor:use_nearest_neighbor", - .description = "sync xcursor theme with gsettings, it applies cursor-theme and cursor-size on theme load to gsettings making most CSD gtk based clients use same xcursor " - "theme and size.", - .type = CONFIG_OPTION_BOOL, - .data = SConfigOptionDescription::SBoolData{true}, - }, SConfigOptionDescription{ .value = "cursor:no_hardware_cursors", .description = "disables hardware cursors. Auto = disable when tearing", @@ -1457,6 +1450,35 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{false}, }, + SConfigOptionDescription{ + .value = "cursor:sync_gsettings_theme", + .description = "sync xcursor theme with gsettings, it applies cursor-theme and cursor-size on theme load to gsettings making most CSD gtk based clients use same xcursor " + "theme and size.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{true}, + }, + SConfigOptionDescription{ + .value = "cursor:warp_back_after_non_mouse_input", + .description = "warp the cursor back to where it was after using a non-mouse input to move it, and then returning back to mouse.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, + + /* + * ecosystem: + */ + SConfigOptionDescription{ + .value = "ecosystem:no_update_news", + .description = "disable the popup that shows up when you update hyprland to a new version.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, + SConfigOptionDescription{ + .value = "ecosystem:no_donation_nag", + .description = "disable the popup that shows up twice a year encouraging to donate.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, /* * debug: @@ -1540,6 +1562,18 @@ inline static const std::vector CONFIG_OPTIONS = { .type = CONFIG_OPTION_BOOL, .data = SConfigOptionDescription::SBoolData{true}, }, + SConfigOptionDescription{ + .value = "debug:log_damage", + .description = "enables logging the damage.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, + SConfigOptionDescription{ + .value = "debug:pass", + .description = "enables render pass debugging.", + .type = CONFIG_OPTION_BOOL, + .data = SConfigOptionDescription::SBoolData{false}, + }, /* * dwindle: diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index caa82871a..2f57a37f1 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -373,305 +373,326 @@ static Hyprlang::CParseResult handlePlugin(const char* c, const char* v) { return result; } +void CConfigManager::registerConfigVar(const char* name, const Hyprlang::INT& val) { + m_configValueNumber++; + m_pConfig->addConfigValue(name, val); +} + +void CConfigManager::registerConfigVar(const char* name, const Hyprlang::FLOAT& val) { + m_configValueNumber++; + m_pConfig->addConfigValue(name, val); +} + +void CConfigManager::registerConfigVar(const char* name, const Hyprlang::VEC2& val) { + m_configValueNumber++; + m_pConfig->addConfigValue(name, val); +} + +void CConfigManager::registerConfigVar(const char* name, const Hyprlang::STRING& val) { + m_configValueNumber++; + m_pConfig->addConfigValue(name, val); +} + +void CConfigManager::registerConfigVar(const char* name, Hyprlang::CUSTOMTYPE&& val) { + m_configValueNumber++; + m_pConfig->addConfigValue(name, std::move(val)); +} + CConfigManager::CConfigManager() { const auto ERR = verifyConfigExists(); m_configPaths.emplace_back(getMainConfigPath()); m_pConfig = makeUnique(m_configPaths.begin()->c_str(), Hyprlang::SConfigOptions{.throwAllErrors = true, .allowMissingConfig = true}); - 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}); - m_pConfig->addConfigValue("general:gaps_in", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "5"}); - m_pConfig->addConfigValue("general:gaps_out", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "20"}); - m_pConfig->addConfigValue("general:gaps_workspaces", Hyprlang::INT{0}); - m_pConfig->addConfigValue("general:no_focus_fallback", Hyprlang::INT{0}); - m_pConfig->addConfigValue("general:resize_on_border", Hyprlang::INT{0}); - m_pConfig->addConfigValue("general:extend_border_grab_area", Hyprlang::INT{15}); - m_pConfig->addConfigValue("general:hover_icon_on_border", Hyprlang::INT{1}); - m_pConfig->addConfigValue("general:layout", {"dwindle"}); - m_pConfig->addConfigValue("general:allow_tearing", Hyprlang::INT{0}); - m_pConfig->addConfigValue("general:resize_corner", Hyprlang::INT{0}); - m_pConfig->addConfigValue("general:snap:enabled", Hyprlang::INT{0}); - m_pConfig->addConfigValue("general:snap:window_gap", Hyprlang::INT{10}); - m_pConfig->addConfigValue("general:snap:monitor_gap", Hyprlang::INT{10}); - m_pConfig->addConfigValue("general:snap:border_overlap", Hyprlang::INT{0}); + registerConfigVar("general:border_size", Hyprlang::INT{1}); + registerConfigVar("general:no_border_on_floating", Hyprlang::INT{0}); + registerConfigVar("general:gaps_in", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "5"}); + registerConfigVar("general:gaps_out", Hyprlang::CConfigCustomValueType{configHandleGapSet, configHandleGapDestroy, "20"}); + registerConfigVar("general:gaps_workspaces", Hyprlang::INT{0}); + registerConfigVar("general:no_focus_fallback", Hyprlang::INT{0}); + registerConfigVar("general:resize_on_border", Hyprlang::INT{0}); + registerConfigVar("general:extend_border_grab_area", Hyprlang::INT{15}); + registerConfigVar("general:hover_icon_on_border", Hyprlang::INT{1}); + registerConfigVar("general:layout", {"dwindle"}); + registerConfigVar("general:allow_tearing", Hyprlang::INT{0}); + registerConfigVar("general:resize_corner", Hyprlang::INT{0}); + registerConfigVar("general:snap:enabled", Hyprlang::INT{0}); + registerConfigVar("general:snap:window_gap", Hyprlang::INT{10}); + registerConfigVar("general:snap:monitor_gap", Hyprlang::INT{10}); + registerConfigVar("general:snap:border_overlap", Hyprlang::INT{0}); + registerConfigVar("general:col.active_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffffffff"}); + registerConfigVar("general:col.inactive_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xff444444"}); + registerConfigVar("general:col.nogroup_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffffaaff"}); + registerConfigVar("general:col.nogroup_border_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffff00ff"}); - m_pConfig->addConfigValue("misc:disable_hyprland_logo", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:disable_splash_rendering", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:col.splash", Hyprlang::INT{0x55ffffff}); - m_pConfig->addConfigValue("misc:splash_font_family", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("misc:font_family", {"Sans"}); - m_pConfig->addConfigValue("misc:force_default_wallpaper", Hyprlang::INT{-1}); - m_pConfig->addConfigValue("misc:vfr", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:vrr", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:mouse_move_enables_dpms", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:key_press_enables_dpms", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:always_follow_on_dnd", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:layers_hog_keyboard_focus", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:animate_manual_resizes", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:animate_mouse_windowdragging", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:disable_autoreload", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:enable_swallow", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:swallow_regex", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("misc:swallow_exception_regex", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("misc:focus_on_activate", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:mouse_move_focuses_monitor", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:render_ahead_of_time", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:render_ahead_safezone", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:allow_session_lock_restore", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:close_special_on_empty", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:background_color", Hyprlang::INT{0xff111111}); - m_pConfig->addConfigValue("misc:new_window_takes_over_fullscreen", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:exit_window_retains_fullscreen", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:initial_workspace_tracking", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:middle_click_paste", Hyprlang::INT{1}); - m_pConfig->addConfigValue("misc:render_unfocused_fps", Hyprlang::INT{15}); - m_pConfig->addConfigValue("misc:disable_xdg_env_checks", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:disable_hyprland_qtutils_check", Hyprlang::INT{0}); - m_pConfig->addConfigValue("misc:lockdead_screen_delay", Hyprlang::INT{1000}); - m_pConfig->addConfigValue("misc:enable_anr_dialog", Hyprlang::INT{1}); + registerConfigVar("misc:disable_hyprland_logo", Hyprlang::INT{0}); + registerConfigVar("misc:disable_splash_rendering", Hyprlang::INT{0}); + registerConfigVar("misc:col.splash", Hyprlang::INT{0x55ffffff}); + registerConfigVar("misc:splash_font_family", {STRVAL_EMPTY}); + registerConfigVar("misc:font_family", {"Sans"}); + registerConfigVar("misc:force_default_wallpaper", Hyprlang::INT{-1}); + registerConfigVar("misc:vfr", Hyprlang::INT{1}); + registerConfigVar("misc:vrr", Hyprlang::INT{0}); + registerConfigVar("misc:mouse_move_enables_dpms", Hyprlang::INT{0}); + registerConfigVar("misc:key_press_enables_dpms", Hyprlang::INT{0}); + registerConfigVar("misc:always_follow_on_dnd", Hyprlang::INT{1}); + registerConfigVar("misc:layers_hog_keyboard_focus", Hyprlang::INT{1}); + registerConfigVar("misc:animate_manual_resizes", Hyprlang::INT{0}); + registerConfigVar("misc:animate_mouse_windowdragging", Hyprlang::INT{0}); + registerConfigVar("misc:disable_autoreload", Hyprlang::INT{0}); + registerConfigVar("misc:enable_swallow", Hyprlang::INT{0}); + registerConfigVar("misc:swallow_regex", {STRVAL_EMPTY}); + registerConfigVar("misc:swallow_exception_regex", {STRVAL_EMPTY}); + registerConfigVar("misc:focus_on_activate", Hyprlang::INT{0}); + registerConfigVar("misc:mouse_move_focuses_monitor", Hyprlang::INT{1}); + registerConfigVar("misc:render_ahead_of_time", Hyprlang::INT{0}); + registerConfigVar("misc:render_ahead_safezone", Hyprlang::INT{1}); + registerConfigVar("misc:allow_session_lock_restore", Hyprlang::INT{0}); + registerConfigVar("misc:close_special_on_empty", Hyprlang::INT{1}); + registerConfigVar("misc:background_color", Hyprlang::INT{0xff111111}); + registerConfigVar("misc:new_window_takes_over_fullscreen", Hyprlang::INT{0}); + registerConfigVar("misc:exit_window_retains_fullscreen", Hyprlang::INT{0}); + registerConfigVar("misc:initial_workspace_tracking", Hyprlang::INT{1}); + registerConfigVar("misc:middle_click_paste", Hyprlang::INT{1}); + registerConfigVar("misc:render_unfocused_fps", Hyprlang::INT{15}); + registerConfigVar("misc:disable_xdg_env_checks", Hyprlang::INT{0}); + registerConfigVar("misc:disable_hyprland_qtutils_check", Hyprlang::INT{0}); + registerConfigVar("misc:lockdead_screen_delay", Hyprlang::INT{1000}); + registerConfigVar("misc:enable_anr_dialog", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:insert_after_current", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:focus_removed_window", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:merge_groups_on_drag", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:merge_groups_on_groupbar", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:merge_floated_into_tiled_on_groupbar", Hyprlang::INT{0}); - m_pConfig->addConfigValue("group:auto_group", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:drag_into_group", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:group_on_movetoworkspace", Hyprlang::INT{0}); - m_pConfig->addConfigValue("group:groupbar:enabled", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:groupbar:font_family", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("group:groupbar:font_size", Hyprlang::INT{8}); - m_pConfig->addConfigValue("group:groupbar:gradients", Hyprlang::INT{0}); - m_pConfig->addConfigValue("group:groupbar:height", Hyprlang::INT{14}); - m_pConfig->addConfigValue("group:groupbar:indicator_height", Hyprlang::INT{3}); - m_pConfig->addConfigValue("group:groupbar:priority", Hyprlang::INT{3}); - m_pConfig->addConfigValue("group:groupbar:render_titles", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:groupbar:scrolling", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:groupbar:text_color", Hyprlang::INT{0xffffffff}); - m_pConfig->addConfigValue("group:groupbar:stacked", Hyprlang::INT{0}); - m_pConfig->addConfigValue("group:groupbar:rounding", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:groupbar:gradient_rounding", Hyprlang::INT{2}); - m_pConfig->addConfigValue("group:groupbar:round_only_edges", Hyprlang::INT{1}); - m_pConfig->addConfigValue("group:groupbar:gradient_round_only_edges", Hyprlang::INT{1}); + registerConfigVar("group:insert_after_current", Hyprlang::INT{1}); + registerConfigVar("group:focus_removed_window", Hyprlang::INT{1}); + registerConfigVar("group:merge_groups_on_drag", Hyprlang::INT{1}); + registerConfigVar("group:merge_groups_on_groupbar", Hyprlang::INT{1}); + registerConfigVar("group:merge_floated_into_tiled_on_groupbar", Hyprlang::INT{0}); + registerConfigVar("group:auto_group", Hyprlang::INT{1}); + registerConfigVar("group:drag_into_group", Hyprlang::INT{1}); + registerConfigVar("group:group_on_movetoworkspace", Hyprlang::INT{0}); + registerConfigVar("group:groupbar:enabled", Hyprlang::INT{1}); + registerConfigVar("group:groupbar:font_family", {STRVAL_EMPTY}); + registerConfigVar("group:groupbar:font_size", Hyprlang::INT{8}); + registerConfigVar("group:groupbar:gradients", Hyprlang::INT{0}); + registerConfigVar("group:groupbar:height", Hyprlang::INT{14}); + registerConfigVar("group:groupbar:indicator_height", Hyprlang::INT{3}); + registerConfigVar("group:groupbar:priority", Hyprlang::INT{3}); + registerConfigVar("group:groupbar:render_titles", Hyprlang::INT{1}); + registerConfigVar("group:groupbar:scrolling", Hyprlang::INT{1}); + registerConfigVar("group:groupbar:text_color", Hyprlang::INT{0xffffffff}); + registerConfigVar("group:groupbar:stacked", Hyprlang::INT{0}); + registerConfigVar("group:groupbar:rounding", Hyprlang::INT{1}); + registerConfigVar("group:groupbar:gradient_rounding", Hyprlang::INT{2}); + registerConfigVar("group:groupbar:round_only_edges", Hyprlang::INT{1}); + registerConfigVar("group:groupbar:gradient_round_only_edges", Hyprlang::INT{1}); - m_pConfig->addConfigValue("debug:int", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:log_damage", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:overlay", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:damage_blink", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:pass", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:disable_logs", Hyprlang::INT{1}); - m_pConfig->addConfigValue("debug:disable_time", Hyprlang::INT{1}); - m_pConfig->addConfigValue("debug:enable_stdout_logs", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:damage_tracking", {(Hyprlang::INT)DAMAGE_TRACKING_FULL}); - m_pConfig->addConfigValue("debug:manual_crash", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:suppress_errors", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:error_limit", Hyprlang::INT{5}); - m_pConfig->addConfigValue("debug:error_position", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:watchdog_timeout", Hyprlang::INT{5}); - m_pConfig->addConfigValue("debug:disable_scale_checks", Hyprlang::INT{0}); - m_pConfig->addConfigValue("debug:colored_stdout_logs", Hyprlang::INT{1}); + registerConfigVar("debug:log_damage", Hyprlang::INT{0}); + registerConfigVar("debug:overlay", Hyprlang::INT{0}); + registerConfigVar("debug:damage_blink", Hyprlang::INT{0}); + registerConfigVar("debug:pass", Hyprlang::INT{0}); + registerConfigVar("debug:disable_logs", Hyprlang::INT{1}); + registerConfigVar("debug:disable_time", Hyprlang::INT{1}); + registerConfigVar("debug:enable_stdout_logs", Hyprlang::INT{0}); + registerConfigVar("debug:damage_tracking", {(Hyprlang::INT)DAMAGE_TRACKING_FULL}); + registerConfigVar("debug:manual_crash", Hyprlang::INT{0}); + registerConfigVar("debug:suppress_errors", Hyprlang::INT{0}); + registerConfigVar("debug:error_limit", Hyprlang::INT{5}); + registerConfigVar("debug:error_position", Hyprlang::INT{0}); + registerConfigVar("debug:watchdog_timeout", Hyprlang::INT{5}); + registerConfigVar("debug:disable_scale_checks", Hyprlang::INT{0}); + registerConfigVar("debug:colored_stdout_logs", Hyprlang::INT{1}); - m_pConfig->addConfigValue("decoration:rounding", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:rounding_power", {2.F}); - m_pConfig->addConfigValue("decoration:blur:enabled", Hyprlang::INT{1}); - m_pConfig->addConfigValue("decoration:blur:size", Hyprlang::INT{8}); - m_pConfig->addConfigValue("decoration:blur:passes", Hyprlang::INT{1}); - m_pConfig->addConfigValue("decoration:blur:ignore_opacity", Hyprlang::INT{1}); - m_pConfig->addConfigValue("decoration:blur:new_optimizations", Hyprlang::INT{1}); - m_pConfig->addConfigValue("decoration:blur:xray", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:blur:contrast", {0.8916F}); - m_pConfig->addConfigValue("decoration:blur:brightness", {1.0F}); - m_pConfig->addConfigValue("decoration:blur:vibrancy", {0.1696F}); - m_pConfig->addConfigValue("decoration:blur:vibrancy_darkness", {0.0F}); - m_pConfig->addConfigValue("decoration:blur:noise", {0.0117F}); - m_pConfig->addConfigValue("decoration:blur:special", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:blur:popups", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:blur:popups_ignorealpha", {0.2F}); - m_pConfig->addConfigValue("decoration:blur:input_methods", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:blur:input_methods_ignorealpha", {0.2F}); - m_pConfig->addConfigValue("decoration:active_opacity", {1.F}); - m_pConfig->addConfigValue("decoration:inactive_opacity", {1.F}); - m_pConfig->addConfigValue("decoration:fullscreen_opacity", {1.F}); - m_pConfig->addConfigValue("decoration:no_blur_on_oversized", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:shadow:enabled", Hyprlang::INT{1}); - m_pConfig->addConfigValue("decoration:shadow:range", Hyprlang::INT{4}); - m_pConfig->addConfigValue("decoration:shadow:render_power", Hyprlang::INT{3}); - m_pConfig->addConfigValue("decoration:shadow:ignore_window", Hyprlang::INT{1}); - m_pConfig->addConfigValue("decoration:shadow:offset", Hyprlang::VEC2{0, 0}); - m_pConfig->addConfigValue("decoration:shadow:scale", {1.f}); - m_pConfig->addConfigValue("decoration:shadow:sharp", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:shadow:color", Hyprlang::INT{0xee1a1a1a}); - m_pConfig->addConfigValue("decoration:shadow:color_inactive", {(Hyprlang::INT)INT64_MAX}); - m_pConfig->addConfigValue("decoration:dim_inactive", Hyprlang::INT{0}); - m_pConfig->addConfigValue("decoration:dim_strength", {0.5f}); - m_pConfig->addConfigValue("decoration:dim_special", {0.2f}); - m_pConfig->addConfigValue("decoration:dim_around", {0.4f}); - m_pConfig->addConfigValue("decoration:screen_shader", {STRVAL_EMPTY}); + registerConfigVar("decoration:rounding", Hyprlang::INT{0}); + registerConfigVar("decoration:rounding_power", {2.F}); + registerConfigVar("decoration:blur:enabled", Hyprlang::INT{1}); + registerConfigVar("decoration:blur:size", Hyprlang::INT{8}); + registerConfigVar("decoration:blur:passes", Hyprlang::INT{1}); + registerConfigVar("decoration:blur:ignore_opacity", Hyprlang::INT{1}); + registerConfigVar("decoration:blur:new_optimizations", Hyprlang::INT{1}); + registerConfigVar("decoration:blur:xray", Hyprlang::INT{0}); + registerConfigVar("decoration:blur:contrast", {0.8916F}); + registerConfigVar("decoration:blur:brightness", {1.0F}); + registerConfigVar("decoration:blur:vibrancy", {0.1696F}); + registerConfigVar("decoration:blur:vibrancy_darkness", {0.0F}); + registerConfigVar("decoration:blur:noise", {0.0117F}); + registerConfigVar("decoration:blur:special", Hyprlang::INT{0}); + registerConfigVar("decoration:blur:popups", Hyprlang::INT{0}); + registerConfigVar("decoration:blur:popups_ignorealpha", {0.2F}); + registerConfigVar("decoration:blur:input_methods", Hyprlang::INT{0}); + registerConfigVar("decoration:blur:input_methods_ignorealpha", {0.2F}); + registerConfigVar("decoration:active_opacity", {1.F}); + registerConfigVar("decoration:inactive_opacity", {1.F}); + registerConfigVar("decoration:fullscreen_opacity", {1.F}); + registerConfigVar("decoration:shadow:enabled", Hyprlang::INT{1}); + registerConfigVar("decoration:shadow:range", Hyprlang::INT{4}); + registerConfigVar("decoration:shadow:render_power", Hyprlang::INT{3}); + registerConfigVar("decoration:shadow:ignore_window", Hyprlang::INT{1}); + registerConfigVar("decoration:shadow:offset", Hyprlang::VEC2{0, 0}); + registerConfigVar("decoration:shadow:scale", {1.f}); + registerConfigVar("decoration:shadow:sharp", Hyprlang::INT{0}); + registerConfigVar("decoration:shadow:color", Hyprlang::INT{0xee1a1a1a}); + registerConfigVar("decoration:shadow:color_inactive", {(Hyprlang::INT)INT64_MAX}); + registerConfigVar("decoration:dim_inactive", Hyprlang::INT{0}); + registerConfigVar("decoration:dim_strength", {0.5f}); + registerConfigVar("decoration:dim_special", {0.2f}); + registerConfigVar("decoration:dim_around", {0.4f}); + registerConfigVar("decoration:screen_shader", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("dwindle:pseudotile", Hyprlang::INT{0}); - m_pConfig->addConfigValue("dwindle:force_split", Hyprlang::INT{0}); - m_pConfig->addConfigValue("dwindle:permanent_direction_override", Hyprlang::INT{0}); - m_pConfig->addConfigValue("dwindle:preserve_split", Hyprlang::INT{0}); - m_pConfig->addConfigValue("dwindle:special_scale_factor", {1.f}); - m_pConfig->addConfigValue("dwindle:split_width_multiplier", {1.0f}); - m_pConfig->addConfigValue("dwindle:use_active_for_splits", Hyprlang::INT{1}); - m_pConfig->addConfigValue("dwindle:default_split_ratio", {1.f}); - m_pConfig->addConfigValue("dwindle:split_bias", Hyprlang::INT{0}); - m_pConfig->addConfigValue("dwindle:smart_split", Hyprlang::INT{0}); - m_pConfig->addConfigValue("dwindle:smart_resizing", Hyprlang::INT{1}); + registerConfigVar("dwindle:pseudotile", Hyprlang::INT{0}); + registerConfigVar("dwindle:force_split", Hyprlang::INT{0}); + registerConfigVar("dwindle:permanent_direction_override", Hyprlang::INT{0}); + registerConfigVar("dwindle:preserve_split", Hyprlang::INT{0}); + registerConfigVar("dwindle:special_scale_factor", {1.f}); + registerConfigVar("dwindle:split_width_multiplier", {1.0f}); + registerConfigVar("dwindle:use_active_for_splits", Hyprlang::INT{1}); + registerConfigVar("dwindle:default_split_ratio", {1.f}); + registerConfigVar("dwindle:split_bias", Hyprlang::INT{0}); + registerConfigVar("dwindle:smart_split", Hyprlang::INT{0}); + registerConfigVar("dwindle:smart_resizing", Hyprlang::INT{1}); - m_pConfig->addConfigValue("master:special_scale_factor", {1.f}); - m_pConfig->addConfigValue("master:mfact", {0.55f}); - m_pConfig->addConfigValue("master:new_status", {"slave"}); - m_pConfig->addConfigValue("master:slave_count_for_center_master", Hyprlang::INT{2}); - m_pConfig->addConfigValue("master:center_master_slaves_on_right", Hyprlang::INT{1}); - m_pConfig->addConfigValue("master:center_ignores_reserved", Hyprlang::INT{0}); - m_pConfig->addConfigValue("master:new_on_active", {"none"}); - m_pConfig->addConfigValue("master:new_on_top", Hyprlang::INT{0}); - m_pConfig->addConfigValue("master:orientation", {"left"}); - m_pConfig->addConfigValue("master:inherit_fullscreen", Hyprlang::INT{1}); - m_pConfig->addConfigValue("master:allow_small_split", Hyprlang::INT{0}); - m_pConfig->addConfigValue("master:smart_resizing", Hyprlang::INT{1}); - m_pConfig->addConfigValue("master:drop_at_cursor", Hyprlang::INT{1}); + registerConfigVar("master:special_scale_factor", {1.f}); + registerConfigVar("master:mfact", {0.55f}); + registerConfigVar("master:new_status", {"slave"}); + registerConfigVar("master:slave_count_for_center_master", Hyprlang::INT{2}); + registerConfigVar("master:center_master_slaves_on_right", Hyprlang::INT{1}); + registerConfigVar("master:center_ignores_reserved", Hyprlang::INT{0}); + registerConfigVar("master:new_on_active", {"none"}); + registerConfigVar("master:new_on_top", Hyprlang::INT{0}); + registerConfigVar("master:orientation", {"left"}); + registerConfigVar("master:inherit_fullscreen", Hyprlang::INT{1}); + registerConfigVar("master:allow_small_split", Hyprlang::INT{0}); + registerConfigVar("master:smart_resizing", Hyprlang::INT{1}); + registerConfigVar("master:drop_at_cursor", Hyprlang::INT{1}); - m_pConfig->addConfigValue("animations:enabled", Hyprlang::INT{1}); - m_pConfig->addConfigValue("animations:first_launch_animation", Hyprlang::INT{1}); + registerConfigVar("animations:enabled", Hyprlang::INT{1}); + registerConfigVar("animations:first_launch_animation", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:follow_mouse", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:follow_mouse_threshold", Hyprlang::FLOAT{0}); - m_pConfig->addConfigValue("input:focus_on_close", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:mouse_refocus", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:special_fallthrough", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:off_window_axis_events", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:sensitivity", {0.f}); - m_pConfig->addConfigValue("input:accel_profile", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:kb_file", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:kb_layout", {"us"}); - m_pConfig->addConfigValue("input:kb_variant", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:kb_options", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:kb_rules", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:kb_model", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:repeat_rate", Hyprlang::INT{25}); - m_pConfig->addConfigValue("input:repeat_delay", Hyprlang::INT{600}); - m_pConfig->addConfigValue("input:natural_scroll", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:numlock_by_default", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:resolve_binds_by_sym", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:force_no_accel", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:float_switch_override_focus", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:left_handed", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:scroll_method", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:scroll_button", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:scroll_button_lock", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:scroll_factor", {1.f}); - m_pConfig->addConfigValue("input:scroll_points", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:emulate_discrete_scroll", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:touchpad:natural_scroll", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:touchpad:disable_while_typing", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:touchpad:clickfinger_behavior", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:touchpad:tap_button_map", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:touchpad:middle_button_emulation", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:touchpad:tap-to-click", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:touchpad:tap-and-drag", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:touchpad:drag_lock", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:touchpad:scroll_factor", {1.f}); - m_pConfig->addConfigValue("input:touchdevice:transform", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:touchdevice:output", {"[[Auto]]"}); - m_pConfig->addConfigValue("input:touchdevice:enabled", Hyprlang::INT{1}); - m_pConfig->addConfigValue("input:tablet:transform", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:tablet:output", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("input:tablet:region_position", Hyprlang::VEC2{0, 0}); - m_pConfig->addConfigValue("input:tablet:absolute_region_position", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:tablet:region_size", Hyprlang::VEC2{0, 0}); - m_pConfig->addConfigValue("input:tablet:relative_input", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:tablet:left_handed", Hyprlang::INT{0}); - m_pConfig->addConfigValue("input:tablet:active_area_position", Hyprlang::VEC2{0, 0}); - m_pConfig->addConfigValue("input:tablet:active_area_size", Hyprlang::VEC2{0, 0}); + registerConfigVar("input:follow_mouse", Hyprlang::INT{1}); + registerConfigVar("input:follow_mouse_threshold", Hyprlang::FLOAT{0}); + registerConfigVar("input:focus_on_close", Hyprlang::INT{0}); + registerConfigVar("input:mouse_refocus", Hyprlang::INT{1}); + registerConfigVar("input:special_fallthrough", Hyprlang::INT{0}); + registerConfigVar("input:off_window_axis_events", Hyprlang::INT{1}); + registerConfigVar("input:sensitivity", {0.f}); + registerConfigVar("input:accel_profile", {STRVAL_EMPTY}); + registerConfigVar("input:kb_file", {STRVAL_EMPTY}); + registerConfigVar("input:kb_layout", {"us"}); + registerConfigVar("input:kb_variant", {STRVAL_EMPTY}); + registerConfigVar("input:kb_options", {STRVAL_EMPTY}); + registerConfigVar("input:kb_rules", {STRVAL_EMPTY}); + registerConfigVar("input:kb_model", {STRVAL_EMPTY}); + registerConfigVar("input:repeat_rate", Hyprlang::INT{25}); + registerConfigVar("input:repeat_delay", Hyprlang::INT{600}); + registerConfigVar("input:natural_scroll", Hyprlang::INT{0}); + registerConfigVar("input:numlock_by_default", Hyprlang::INT{0}); + registerConfigVar("input:resolve_binds_by_sym", Hyprlang::INT{0}); + registerConfigVar("input:force_no_accel", Hyprlang::INT{0}); + registerConfigVar("input:float_switch_override_focus", Hyprlang::INT{1}); + registerConfigVar("input:left_handed", Hyprlang::INT{0}); + registerConfigVar("input:scroll_method", {STRVAL_EMPTY}); + registerConfigVar("input:scroll_button", Hyprlang::INT{0}); + registerConfigVar("input:scroll_button_lock", Hyprlang::INT{0}); + registerConfigVar("input:scroll_factor", {1.f}); + registerConfigVar("input:scroll_points", {STRVAL_EMPTY}); + registerConfigVar("input:emulate_discrete_scroll", Hyprlang::INT{1}); + registerConfigVar("input:touchpad:natural_scroll", Hyprlang::INT{0}); + registerConfigVar("input:touchpad:disable_while_typing", Hyprlang::INT{1}); + registerConfigVar("input:touchpad:clickfinger_behavior", Hyprlang::INT{0}); + registerConfigVar("input:touchpad:tap_button_map", {STRVAL_EMPTY}); + registerConfigVar("input:touchpad:middle_button_emulation", Hyprlang::INT{0}); + registerConfigVar("input:touchpad:tap-to-click", Hyprlang::INT{1}); + registerConfigVar("input:touchpad:tap-and-drag", Hyprlang::INT{1}); + registerConfigVar("input:touchpad:drag_lock", Hyprlang::INT{0}); + registerConfigVar("input:touchpad:scroll_factor", {1.f}); + registerConfigVar("input:touchdevice:transform", Hyprlang::INT{0}); + registerConfigVar("input:touchdevice:output", {"[[Auto]]"}); + registerConfigVar("input:touchdevice:enabled", Hyprlang::INT{1}); + registerConfigVar("input:tablet:transform", Hyprlang::INT{0}); + registerConfigVar("input:tablet:output", {STRVAL_EMPTY}); + registerConfigVar("input:tablet:region_position", Hyprlang::VEC2{0, 0}); + registerConfigVar("input:tablet:absolute_region_position", Hyprlang::INT{0}); + registerConfigVar("input:tablet:region_size", Hyprlang::VEC2{0, 0}); + registerConfigVar("input:tablet:relative_input", Hyprlang::INT{0}); + registerConfigVar("input:tablet:left_handed", Hyprlang::INT{0}); + registerConfigVar("input:tablet:active_area_position", Hyprlang::VEC2{0, 0}); + registerConfigVar("input:tablet:active_area_size", Hyprlang::VEC2{0, 0}); - m_pConfig->addConfigValue("binds:pass_mouse_when_bound", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:scroll_event_delay", Hyprlang::INT{300}); - m_pConfig->addConfigValue("binds:workspace_back_and_forth", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:allow_workspace_cycles", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:workspace_center_on", Hyprlang::INT{1}); - m_pConfig->addConfigValue("binds:focus_preferred_method", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:ignore_group_lock", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:movefocus_cycles_fullscreen", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:movefocus_cycles_groupfirst", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:disable_keybind_grabbing", Hyprlang::INT{0}); - m_pConfig->addConfigValue("binds:window_direction_monitor_fallback", Hyprlang::INT{1}); - m_pConfig->addConfigValue("binds:allow_pin_fullscreen", Hyprlang::INT{0}); + registerConfigVar("binds:pass_mouse_when_bound", Hyprlang::INT{0}); + registerConfigVar("binds:scroll_event_delay", Hyprlang::INT{300}); + registerConfigVar("binds:workspace_back_and_forth", Hyprlang::INT{0}); + registerConfigVar("binds:allow_workspace_cycles", Hyprlang::INT{0}); + registerConfigVar("binds:workspace_center_on", Hyprlang::INT{1}); + registerConfigVar("binds:focus_preferred_method", Hyprlang::INT{0}); + registerConfigVar("binds:ignore_group_lock", Hyprlang::INT{0}); + registerConfigVar("binds:movefocus_cycles_fullscreen", Hyprlang::INT{0}); + registerConfigVar("binds:movefocus_cycles_groupfirst", Hyprlang::INT{0}); + registerConfigVar("binds:disable_keybind_grabbing", Hyprlang::INT{0}); + registerConfigVar("binds:window_direction_monitor_fallback", Hyprlang::INT{1}); + registerConfigVar("binds:allow_pin_fullscreen", Hyprlang::INT{0}); - m_pConfig->addConfigValue("gestures:workspace_swipe", Hyprlang::INT{0}); - m_pConfig->addConfigValue("gestures:workspace_swipe_fingers", Hyprlang::INT{3}); - m_pConfig->addConfigValue("gestures:workspace_swipe_min_fingers", Hyprlang::INT{0}); - m_pConfig->addConfigValue("gestures:workspace_swipe_distance", Hyprlang::INT{300}); - m_pConfig->addConfigValue("gestures:workspace_swipe_invert", Hyprlang::INT{1}); - m_pConfig->addConfigValue("gestures:workspace_swipe_min_speed_to_force", Hyprlang::INT{30}); - m_pConfig->addConfigValue("gestures:workspace_swipe_cancel_ratio", {0.5f}); - m_pConfig->addConfigValue("gestures:workspace_swipe_create_new", Hyprlang::INT{1}); - m_pConfig->addConfigValue("gestures:workspace_swipe_direction_lock", Hyprlang::INT{1}); - m_pConfig->addConfigValue("gestures:workspace_swipe_direction_lock_threshold", Hyprlang::INT{10}); - m_pConfig->addConfigValue("gestures:workspace_swipe_forever", Hyprlang::INT{0}); - m_pConfig->addConfigValue("gestures:workspace_swipe_use_r", Hyprlang::INT{0}); - m_pConfig->addConfigValue("gestures:workspace_swipe_touch", Hyprlang::INT{0}); - m_pConfig->addConfigValue("gestures:workspace_swipe_touch_invert", Hyprlang::INT{0}); + registerConfigVar("gestures:workspace_swipe", Hyprlang::INT{0}); + registerConfigVar("gestures:workspace_swipe_fingers", Hyprlang::INT{3}); + registerConfigVar("gestures:workspace_swipe_min_fingers", Hyprlang::INT{0}); + registerConfigVar("gestures:workspace_swipe_distance", Hyprlang::INT{300}); + registerConfigVar("gestures:workspace_swipe_invert", Hyprlang::INT{1}); + registerConfigVar("gestures:workspace_swipe_min_speed_to_force", Hyprlang::INT{30}); + registerConfigVar("gestures:workspace_swipe_cancel_ratio", {0.5f}); + registerConfigVar("gestures:workspace_swipe_create_new", Hyprlang::INT{1}); + registerConfigVar("gestures:workspace_swipe_direction_lock", Hyprlang::INT{1}); + registerConfigVar("gestures:workspace_swipe_direction_lock_threshold", Hyprlang::INT{10}); + registerConfigVar("gestures:workspace_swipe_forever", Hyprlang::INT{0}); + registerConfigVar("gestures:workspace_swipe_use_r", Hyprlang::INT{0}); + registerConfigVar("gestures:workspace_swipe_touch", Hyprlang::INT{0}); + registerConfigVar("gestures:workspace_swipe_touch_invert", Hyprlang::INT{0}); - m_pConfig->addConfigValue("xwayland:enabled", Hyprlang::INT{1}); - m_pConfig->addConfigValue("xwayland:use_nearest_neighbor", Hyprlang::INT{1}); - m_pConfig->addConfigValue("xwayland:force_zero_scaling", Hyprlang::INT{0}); + registerConfigVar("xwayland:enabled", Hyprlang::INT{1}); + registerConfigVar("xwayland:use_nearest_neighbor", Hyprlang::INT{1}); + registerConfigVar("xwayland:force_zero_scaling", Hyprlang::INT{0}); - m_pConfig->addConfigValue("opengl:nvidia_anti_flicker", Hyprlang::INT{1}); + registerConfigVar("opengl:nvidia_anti_flicker", Hyprlang::INT{1}); - m_pConfig->addConfigValue("cursor:no_hardware_cursors", Hyprlang::INT{2}); - m_pConfig->addConfigValue("cursor:no_break_fs_vrr", Hyprlang::INT{2}); - m_pConfig->addConfigValue("cursor:min_refresh_rate", Hyprlang::INT{24}); - m_pConfig->addConfigValue("cursor:hotspot_padding", Hyprlang::INT{0}); - m_pConfig->addConfigValue("cursor:inactive_timeout", {0.f}); - m_pConfig->addConfigValue("cursor:no_warps", Hyprlang::INT{0}); - m_pConfig->addConfigValue("cursor:persistent_warps", Hyprlang::INT{0}); - m_pConfig->addConfigValue("cursor:warp_on_change_workspace", Hyprlang::INT{0}); - m_pConfig->addConfigValue("cursor:default_monitor", {STRVAL_EMPTY}); - m_pConfig->addConfigValue("cursor:zoom_factor", {1.f}); - m_pConfig->addConfigValue("cursor:zoom_rigid", Hyprlang::INT{0}); - m_pConfig->addConfigValue("cursor:enable_hyprcursor", Hyprlang::INT{1}); - m_pConfig->addConfigValue("cursor:sync_gsettings_theme", Hyprlang::INT{1}); - m_pConfig->addConfigValue("cursor:hide_on_key_press", Hyprlang::INT{0}); - m_pConfig->addConfigValue("cursor:hide_on_touch", Hyprlang::INT{1}); - m_pConfig->addConfigValue("cursor:use_cpu_buffer", Hyprlang::INT{2}); - m_pConfig->addConfigValue("cursor:warp_back_after_non_mouse_input", Hyprlang::INT{0}); + registerConfigVar("cursor:no_hardware_cursors", Hyprlang::INT{2}); + registerConfigVar("cursor:no_break_fs_vrr", Hyprlang::INT{2}); + registerConfigVar("cursor:min_refresh_rate", Hyprlang::INT{24}); + registerConfigVar("cursor:hotspot_padding", Hyprlang::INT{0}); + registerConfigVar("cursor:inactive_timeout", {0.f}); + registerConfigVar("cursor:no_warps", Hyprlang::INT{0}); + registerConfigVar("cursor:persistent_warps", Hyprlang::INT{0}); + registerConfigVar("cursor:warp_on_change_workspace", Hyprlang::INT{0}); + registerConfigVar("cursor:default_monitor", {STRVAL_EMPTY}); + registerConfigVar("cursor:zoom_factor", {1.f}); + registerConfigVar("cursor:zoom_rigid", Hyprlang::INT{0}); + registerConfigVar("cursor:enable_hyprcursor", Hyprlang::INT{1}); + registerConfigVar("cursor:sync_gsettings_theme", Hyprlang::INT{1}); + registerConfigVar("cursor:hide_on_key_press", Hyprlang::INT{0}); + registerConfigVar("cursor:hide_on_touch", Hyprlang::INT{1}); + registerConfigVar("cursor:use_cpu_buffer", Hyprlang::INT{2}); + registerConfigVar("cursor:warp_back_after_non_mouse_input", Hyprlang::INT{0}); - m_pConfig->addConfigValue("autogenerated", Hyprlang::INT{0}); + registerConfigVar("autogenerated", Hyprlang::INT{0}); - m_pConfig->addConfigValue("general:col.active_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffffffff"}); - m_pConfig->addConfigValue("general:col.inactive_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xff444444"}); - m_pConfig->addConfigValue("general:col.nogroup_border", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffffaaff"}); - m_pConfig->addConfigValue("general:col.nogroup_border_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0xffff00ff"}); + registerConfigVar("group:col.border_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ffff00"}); + registerConfigVar("group:col.border_inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66777700"}); + registerConfigVar("group:col.border_locked_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ff5500"}); + registerConfigVar("group:col.border_locked_inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66775500"}); - m_pConfig->addConfigValue("group:col.border_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ffff00"}); - m_pConfig->addConfigValue("group:col.border_inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66777700"}); - m_pConfig->addConfigValue("group:col.border_locked_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ff5500"}); - m_pConfig->addConfigValue("group:col.border_locked_inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66775500"}); + registerConfigVar("group:groupbar:col.active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ffff00"}); + registerConfigVar("group:groupbar:col.inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66777700"}); + registerConfigVar("group:groupbar:col.locked_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ff5500"}); + registerConfigVar("group:groupbar:col.locked_inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66775500"}); - m_pConfig->addConfigValue("group:groupbar:col.active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ffff00"}); - m_pConfig->addConfigValue("group:groupbar:col.inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66777700"}); - m_pConfig->addConfigValue("group:groupbar:col.locked_active", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66ff5500"}); - m_pConfig->addConfigValue("group:groupbar:col.locked_inactive", Hyprlang::CConfigCustomValueType{&configHandleGradientSet, configHandleGradientDestroy, "0x66775500"}); + registerConfigVar("render:explicit_sync", Hyprlang::INT{2}); + registerConfigVar("render:explicit_sync_kms", Hyprlang::INT{2}); + registerConfigVar("render:direct_scanout", Hyprlang::INT{0}); + registerConfigVar("render:expand_undersized_textures", Hyprlang::INT{1}); + registerConfigVar("render:xp_mode", Hyprlang::INT{0}); + registerConfigVar("render:ctm_animation", Hyprlang::INT{2}); + registerConfigVar("render:allow_early_buffer_release", Hyprlang::INT{1}); - m_pConfig->addConfigValue("render:explicit_sync", Hyprlang::INT{2}); - m_pConfig->addConfigValue("render:explicit_sync_kms", Hyprlang::INT{2}); - m_pConfig->addConfigValue("render:direct_scanout", Hyprlang::INT{0}); - m_pConfig->addConfigValue("render:expand_undersized_textures", Hyprlang::INT{1}); - m_pConfig->addConfigValue("render:xp_mode", Hyprlang::INT{0}); - m_pConfig->addConfigValue("render:ctm_animation", Hyprlang::INT{2}); - m_pConfig->addConfigValue("render:allow_early_buffer_release", Hyprlang::INT{1}); + registerConfigVar("ecosystem:no_update_news", Hyprlang::INT{0}); + registerConfigVar("ecosystem:no_donation_nag", Hyprlang::INT{0}); - m_pConfig->addConfigValue("ecosystem:no_update_news", Hyprlang::INT{0}); - m_pConfig->addConfigValue("ecosystem:no_donation_nag", Hyprlang::INT{0}); - - m_pConfig->addConfigValue("experimental:wide_color_gamut", Hyprlang::INT{0}); - m_pConfig->addConfigValue("experimental:hdr", Hyprlang::INT{0}); - m_pConfig->addConfigValue("experimental:xx_color_management_v4", Hyprlang::INT{0}); + registerConfigVar("experimental:wide_color_gamut", Hyprlang::INT{0}); + registerConfigVar("experimental:hdr", Hyprlang::INT{0}); + registerConfigVar("experimental:xx_color_management_v4", Hyprlang::INT{0}); // devices m_pConfig->addSpecialCategory("device", {"name"}); @@ -738,6 +759,9 @@ CConfigManager::CConfigManager() { resetHLConfig(); + if (CONFIG_OPTIONS.size() != m_configValueNumber - 1 /* autogenerated is special */) + Debug::log(LOG, "Warning: config descriptions have {} entries, but there are {} config values. This should fail tests!!", CONFIG_OPTIONS.size(), m_configValueNumber); + if (!g_pCompositor->m_bOnlyConfigVerification) { Debug::log( INFO, @@ -2821,37 +2845,87 @@ bool CConfigManager::shouldUseSoftwareCursors(PHLMONITOR pMonitor) { std::string SConfigOptionDescription::jsonify() const { auto parseData = [this]() -> std::string { return std::visit( - [](auto&& val) { - using T = std::decay_t; - if constexpr (std::is_same_v) { - return std::format(R"#( "value": "{}")#", val.value); - } else if constexpr (std::is_same_v) { - return std::format(R"#( "value": {}, + [this](auto&& val) { + const auto PTR = g_pConfigManager->m_pConfig->getConfigValuePtr(value.c_str()); + if (!PTR) { + Debug::log(ERR, "invalid SConfigOptionDescription: no config option {} exists", value); + return std::string{""}; + } + const char* const EXPLICIT = PTR->m_bSetByUser ? "true" : "false"; + + std::string currentValue = "undefined"; + + const auto CONFIGVALUE = PTR->getValue(); + + if (typeid(Hyprlang::INT) == std::type_index(CONFIGVALUE.type())) + currentValue = std::format("{}", std::any_cast(CONFIGVALUE)); + else if (typeid(Hyprlang::FLOAT) == std::type_index(CONFIGVALUE.type())) + currentValue = std::format("{:.2f}", std::any_cast(CONFIGVALUE)); + else if (typeid(Hyprlang::STRING) == std::type_index(CONFIGVALUE.type())) + currentValue = std::any_cast(CONFIGVALUE); + else if (typeid(Hyprlang::VEC2) == std::type_index(CONFIGVALUE.type())) { + const auto V = std::any_cast(CONFIGVALUE); + currentValue = std::format("{}, {}", V.x, V.y); + } else if (typeid(void*) == std::type_index(CONFIGVALUE.type())) { + const auto DATA = (ICustomConfigValueData*)std::any_cast(CONFIGVALUE); + currentValue = DATA->toString(); + } + + try { + using T = std::decay_t; + if constexpr (std::is_same_v) { + return std::format(R"#( "value": "{}", + "current": "{}", + "explicit": {})#", + val.value, currentValue, EXPLICIT); + } else if constexpr (std::is_same_v) { + return std::format(R"#( "value": {}, "min": {}, - "max": {})#", - val.value, val.min, val.max); - } else if constexpr (std::is_same_v) { - return std::format(R"#( "value": {}, + "max": {}, + "current": {}, + "explicit": {})#", + val.value, val.min, val.max, currentValue, EXPLICIT); + } else if constexpr (std::is_same_v) { + return std::format(R"#( "value": {}, "min": {}, - "max": {})#", - val.value, val.min, val.max); - } else if constexpr (std::is_same_v) { - return std::format(R"#( "value": {})#", val.color.getAsHex()); - } else if constexpr (std::is_same_v) { - return std::format(R"#( "value": {})#", val.value); - } else if constexpr (std::is_same_v) { - return std::format(R"#( "value": {})#", val.choices); - } else if constexpr (std::is_same_v) { - return std::format(R"#( "x": {}, + "max": {}, + "current": {}, + "explicit": {})#", + val.value, val.min, val.max, currentValue, EXPLICIT); + } else if constexpr (std::is_same_v) { + return std::format(R"#( "value": {}, + "current": {}, + "explicit": {})#", + val.color.getAsHex(), currentValue, EXPLICIT); + } else if constexpr (std::is_same_v) { + return std::format(R"#( "value": {}, + "current": {}, + "explicit": {})#", + val.value, currentValue, EXPLICIT); + } else if constexpr (std::is_same_v) { + return std::format(R"#( "value": {}, + "firstIndex": {}, + "current": {}, + "explicit": {})#", + val.choices, val.firstIndex, currentValue, EXPLICIT); + } else if constexpr (std::is_same_v) { + 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) { - return std::format(R"#( "value": "{}")#", val.gradient); - } + "max_y": {}, + "current": "{}", + "explicit": {})#", + val.vec.x, val.vec.y, val.min.x, val.min.y, val.max.x, val.max.y, currentValue, EXPLICIT); + } else if constexpr (std::is_same_v) { + return std::format(R"#( "value": "{}", + "current": "{}", + "explicit": {})#", + val.gradient, currentValue, EXPLICIT); + } + + } catch (std::bad_any_cast& e) { Debug::log(ERR, "Bad any_cast on value {} in descriptions", value); } return std::string{""}; }, data); diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp index b914a3a35..440b6602e 100644 --- a/src/config/ConfigManager.hpp +++ b/src/config/ConfigManager.hpp @@ -297,6 +297,8 @@ class CConfigManager { std::vector> m_vFailedPluginConfigValues; // for plugin values of unloaded plugins std::string m_szConfigErrors = ""; + uint32_t m_configValueNumber = 0; + // internal methods void updateBlurredLS(const std::string&, const bool); void setDefaultAnimationVars(); @@ -305,6 +307,14 @@ class CConfigManager { std::optional verifyConfigExists(); void postConfigReload(const Hyprlang::CParseResult& result); SWorkspaceRule mergeWorkspaceRules(const SWorkspaceRule&, const SWorkspaceRule&); + + void registerConfigVar(const char* name, const Hyprlang::INT& val); + void registerConfigVar(const char* name, const Hyprlang::FLOAT& val); + void registerConfigVar(const char* name, const Hyprlang::VEC2& val); + void registerConfigVar(const char* name, const Hyprlang::STRING& val); + void registerConfigVar(const char* name, Hyprlang::CUSTOMTYPE&& val); + + friend struct SConfigOptionDescription; }; inline UP g_pConfigManager; diff --git a/src/render/OpenGL.cpp b/src/render/OpenGL.cpp index 1a296b65f..17224523b 100644 --- a/src/render/OpenGL.cpp +++ b/src/render/OpenGL.cpp @@ -1948,8 +1948,6 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f float blurA, float overallA) { RASSERT(m_RenderData.pMonitor, "Tried to render texture with blur without begin()!"); - static auto PNOBLUROVERSIZED = CConfigValue("decoration:no_blur_on_oversized"); - TRACY_GPU_ZONE("RenderTextureWithBlur"); // make a damage region for this window @@ -1966,11 +1964,6 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f m_RenderData.renderModif.applyToRegion(texDamage); - if (*PNOBLUROVERSIZED && m_RenderData.primarySurfaceUVTopLeft != Vector2D(-1, -1)) { - renderTexture(tex, box, a, round, roundingPower, false, true); - return; - } - // amazing hack: the surface has an opaque region! CRegion inverseOpaque; if (a >= 1.f && std::round(pSurface->current.size.x * m_RenderData.pMonitor->scale) == box.w && std::round(pSurface->current.size.y * m_RenderData.pMonitor->scale) == box.h) { @@ -1982,9 +1975,8 @@ void CHyprOpenGLImpl::renderTextureWithBlur(SP tex, const CBox& box, f renderTexture(tex, box, a, round, roundingPower, false, true); return; } - } else { + } else inverseOpaque = {0, 0, box.width, box.height}; - } inverseOpaque.scale(m_RenderData.pMonitor->scale); diff --git a/src/render/decorations/CHyprBorderDecoration.cpp b/src/render/decorations/CHyprBorderDecoration.cpp index 0df3acde4..0d07c2ea3 100644 --- a/src/render/decorations/CHyprBorderDecoration.cpp +++ b/src/render/decorations/CHyprBorderDecoration.cpp @@ -147,9 +147,7 @@ eDecorationLayer CHyprBorderDecoration::getDecorationLayer() { } uint64_t CHyprBorderDecoration::getDecorationFlags() { - static auto PPARTOFWINDOW = CConfigValue("general:border_part_of_window"); - - return *PPARTOFWINDOW && !doesntWantBorders() ? DECORATION_PART_OF_MAIN_WINDOW : 0; + return !doesntWantBorders() ? DECORATION_PART_OF_MAIN_WINDOW : 0; } std::string CHyprBorderDecoration::getDisplayName() {