diff --git a/profiles/work/home.nix b/profiles/work/home.nix index 271e111..031cc3c 100644 --- a/profiles/work/home.nix +++ b/profiles/work/home.nix @@ -231,6 +231,4 @@ name = if (config.stylix.polarity == "dark") then "Papirus-Dark" else "Papirus-Light"; }; - services.pasystray.enable = true; - } diff --git a/system/hardware/power.nix b/system/hardware/power.nix index d07772f..209436f 100644 --- a/system/hardware/power.nix +++ b/system/hardware/power.nix @@ -5,15 +5,15 @@ enable = true; settings = { CPU_SCALING_GOVERNOR_ON_AC = "performance"; - CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + CPU_SCALING_GOVERNOR_ON_BAT = "performance"; - CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power"; + CPU_ENERGY_PERF_POLICY_ON_BAT = "performance"; CPU_ENERGY_PERF_POLICY_ON_AC = "performance"; CPU_MIN_PERF_ON_AC = 0; CPU_MAX_PERF_ON_AC = 100; CPU_MIN_PERF_ON_BAT = 0; - CPU_MAX_PERF_ON_BAT = 50; + CPU_MAX_PERF_ON_BAT = 100; CPU_BOOST_ON_AC = 1; CPU_BOOST_ON_BAT = 0; diff --git a/user/wm/hyprland/hyprland.nix b/user/wm/hyprland/hyprland.nix index e896110..c7817f1 100644 --- a/user/wm/hyprland/hyprland.nix +++ b/user/wm/hyprland/hyprland.nix @@ -45,7 +45,6 @@ in env = QT_AUTO_SCREEN_SCALE_FACTOR,1 env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 env = CLUTTER_BACKEND,wayland - env = GDK_PIXBUF_MODULE_FILE,${pkgs.librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache exec-once = hyprprofile Default @@ -460,6 +459,7 @@ in hypridle hyprpaper fnott + fuzzel keepmenu pinentry-gnome3 wev @@ -759,7 +759,6 @@ in sed -i 's/zext_workspace_handle_v1_activate(workspace_handle_);/const std::string command = "hyprctl dispatch focusworkspaceoncurrentmonitor " + std::to_string(id());\n\tsystem(command.c_str());/g' src/modules/wlr/workspace_manager.cpp sed -i 's/gIPC->getSocket1Reply("dispatch workspace " + std::to_string(id()));/gIPC->getSocket1Reply("dispatch focusworkspaceoncurrentmonitor " + std::to_string(id()));/g' src/modules/hyprland/workspaces.cpp ''; - patches = [./patches/waybarpaupdate.patch ./patches/waybarbatupdate.patch]; }); settings = { mainBar = { @@ -769,70 +768,28 @@ in margin = "7 7 3 7"; spacing = 2; - modules-left = [ "group/power" "group/battery" "group/backlight" "group/cpu" "group/memory" "group/pulseaudio" "keyboard-state" ]; - modules-center = [ "custom/hyprprofile" "hyprland/workspaces" ]; - modules-right = [ "group/time" "idle_inhibitor" "tray" ]; + modules-left = [ "custom/os" "custom/hyprprofile" "battery" "backlight" "keyboard-state" "pulseaudio" "cpu" "memory" ]; + modules-center = [ "hyprland/workspaces" ]; + modules-right = [ "idle_inhibitor" "tray" "clock" ]; "custom/os" = { "format" = " {} "; "exec" = ''echo "" ''; "interval" = "once"; "on-click" = "nwggrid-wrapper"; - "tooltip" = false; - }; - "group/power" = { - "orientation" = "horizontal"; - "drawer" = { - "transition-duration" = 500; - "children-class" = "not-power"; - "transition-left-to-right" = true; - }; - "modules" = [ - "custom/os" - "custom/hyprprofileicon" - "custom/lock" - "custom/quit" - "custom/power" - "custom/reboot" - ]; - }; - "custom/quit" = { - "format" = "󰍃"; - "tooltip" = false; - "on-click" = "hyprctl dispatch exit"; - }; - "custom/lock" = { - "format" = "󰍁"; - "tooltip" = false; - "on-click" = "hyprlock"; - }; - "custom/reboot" = { - "format" = "󰜉"; - "tooltip" = false; - "on-click" = "reboot now"; - }; - "custom/power" = { - "format" = "󰐥"; - "tooltip" = false; - "on-click" = "shutdown now"; - }; - "custom/hyprprofileicon" = { - "format" = "󱙋"; - "on-click" = "hyprprofile-dmenu"; - "tooltip" = false; }; "custom/hyprprofile" = { - "format" = " {}"; + "format" = "  {}"; "exec" = ''cat ~/.hyprprofile''; "interval" = 3; "on-click" = "hyprprofile-dmenu"; }; "keyboard-state" = { "numlock" = true; - "format" = "{icon}"; + "format" = " {icon} "; "format-icons" = { - "locked" = "󰎠 "; - "unlocked" = "󱧓 "; + "locked" = "󰎠"; + "unlocked" = "󱧓"; }; }; "hyprland/workspaces" = { @@ -856,10 +813,25 @@ in "on-click" = "activate"; "on-scroll-up" = "hyprctl dispatch workspace e+1"; "on-scroll-down" = "hyprctl dispatch workspace e-1"; - "all-outputs" = false; - "active-only" = false; + #"all-outputs" = true; + #"active-only" = true; "ignore-workspaces" = ["scratch" "-"]; - "show-special" = false; + #"show-special" = false; + #"persistent-workspaces" = { + # # this block doesn't seem to work for whatever reason + # "eDP-1" = [1 2 3 4 5 6 7 8 9]; + # "DP-1" = [1 2 3 4 5 6 7 8 9]; + # "HDMI-A-1" = [1 2 3 4 5 6 7 8 9]; + # "1" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "2" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "3" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "4" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "5" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "6" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "7" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "8" = ["eDP-1" "DP-1" "HDMI-A-1"]; + # "9" = ["eDP-1" "DP-1" "HDMI-A-1"]; + #}; }; "idle_inhibitor" = { @@ -873,106 +845,43 @@ in #"icon-size" = 21; "spacing" = 10; }; - "clock#time" = { + clock = { "interval" = 1; - "format" = "{:%I:%M:%S %p}"; + "format" = "{:%a %Y-%m-%d %I:%M:%S %p}"; "timezone" = "America/Chicago"; "tooltip-format" = '' {:%Y %B} {calendar}''; }; - "clock#date" = { - "interval" = 1; - "format" = "{:%a %Y-%m-%d}"; - "timezone" = "America/Chicago"; - "tooltip-format" = '' - {:%Y %B} - {calendar}''; + cpu = { + "format" = "{usage}% "; }; - "group/time" = { - "orientation" = "horizontal"; - "drawer" = { - "transition-duration" = 500; - "transition-left-to-right" = false; - }; - "modules" = [ "clock#time" "clock#date" ]; - }; - - cpu = { "format" = "󰍛"; }; - "cpu#text" = { "format" = "{usage}%"; }; - "group/cpu" = { - "orientation" = "horizontal"; - "drawer" = { - "transition-duration" = 500; - "transition-left-to-right" = true; - }; - "modules" = [ "cpu" "cpu#text" ]; - }; - - memory = { "format" = ""; }; - "memory#text" = { "format" = "{}%"; }; - "group/memory" = { - "orientation" = "horizontal"; - "drawer" = { - "transition-duration" = 500; - "transition-left-to-right" = true; - }; - "modules" = [ "memory" "memory#text" ]; - }; - + memory = { "format" = "{}% "; }; backlight = { - "format" = "{icon}"; + "format" = "{percent}% {icon}"; "format-icons" = [ "" "" "" "" "" "" "" "" "" ]; }; - "backlight#text" = { "format" = "{percent}%"; }; - "group/backlight" = { - "orientation" = "horizontal"; - "drawer" = { - "transition-duration" = 500; - "transition-left-to-right" = true; - }; - "modules" = [ "backlight" "backlight#text" ]; - }; - battery = { "states" = { - "good" = 75; + "good" = 95; "warning" = 30; "critical" = 15; }; - "fullat" = 80; - "format" = "{icon}"; - "format-charging" = "󰂄"; - "format-plugged" = "󰂄"; - "format-full" = "󰁹"; - "format-icons" = [ "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ]; - "interval" = 10; - }; - "battery#text" = { - "states" = { - "good" = 75; - "warning" = 30; - "critical" = 15; - }; - "fullat" = 80; - "format" = "{capacity}%"; - }; - "group/battery" = { - "orientation" = "horizontal"; - "drawer" = { - "transition-duration" = 500; - "transition-left-to-right" = true; - }; - "modules" = [ "battery" "battery#text" ]; + "format" = "{capacity}% {icon}"; + "format-charging" = "{capacity}% "; + "format-plugged" = "{capacity}% "; + #"format-good" = ""; # An empty format will hide the module + #"format-full" = ""; + "format-icons" = [ "" "" "" "" "" ]; }; pulseaudio = { "scroll-step" = 1; - "format" = "{icon}"; - "format-bluetooth" = "{icon}"; - "format-bluetooth-muted" = "󰸈"; - "format-muted" = "󰸈"; - "format-source" = ""; - "format-source-muted" = ""; + "format" = "{volume}% {icon} {format_source}"; + "format-bluetooth" = "{volume}% {icon}  {format_source}"; + "format-bluetooth-muted" = "󰸈 {icon}  {format_source}"; + "format-muted" = "󰸈 {format_source}"; + "format-source" = "{volume}% "; + "format-source-muted" = " "; "format-icons" = { "headphone" = ""; "hands-free" = ""; @@ -984,24 +893,6 @@ in }; "on-click" = "pypr toggle pavucontrol && hyprctl dispatch bringactivetotop"; }; - "pulseaudio#text" = { - "scroll-step" = 1; - "format" = "{volume}%"; - "format-bluetooth" = "{volume}%"; - "format-bluetooth-muted" = ""; - "format-muted" = ""; - "format-source" = "{volume}%"; - "format-source-muted" = ""; - "on-click" = "pypr toggle pavucontrol && hyprctl dispatch bringactivetotop"; - }; - "group/pulseaudio" = { - "orientation" = "horizontal"; - "drawer" = { - "transition-duration" = 500; - "transition-left-to-right" = true; - }; - "modules" = [ "pulseaudio" "pulseaudio#text" ]; - }; }; }; style = '' @@ -1057,7 +948,7 @@ in } #workspaces button { - padding: 0px 6px; + padding: 0 7px; background-color: transparent; color: #'' + config.lib.stylix.colors.base04 + ''; } @@ -1082,6 +973,7 @@ in color: #'' + config.lib.stylix.colors.base09 + ''; } + #clock, #battery, #cpu, #memory, @@ -1096,44 +988,16 @@ in #mode, #idle_inhibitor, #scratchpad, - #custom-hyprprofileicon, - #custom-quit, - #custom-lock, - #custom-reboot, - #custom-power, #mpd { - padding: 0 3px; + padding: 0 10px; color: #'' + config.lib.stylix.colors.base07 + ''; border: none; border-radius: 8px; } - #custom-hyprprofileicon, - #custom-quit, - #custom-lock, - #custom-reboot, - #custom-power, - #idle_inhibitor { - background-color: transparent; - color: #'' + config.lib.stylix.colors.base04 + ''; - } - - #custom-hyprprofileicon:hover, - #custom-quit:hover, - #custom-lock:hover, - #custom-reboot:hover, - #custom-power:hover, - #idle_inhibitor:hover { - color: #'' + config.lib.stylix.colors.base07 + ''; - } - - #clock, #tray, #idle_inhibitor { - padding: 0 5px; - } - #window, #workspaces { - margin: 0 6px; + margin: 0 4px; } /* If workspaces is the leftmost module, omit left margin */ @@ -1344,9 +1208,6 @@ in services.udiskie.enable = true; services.udiskie.tray = "always"; programs.fuzzel.enable = true; - programs.fuzzel.package = pkgs.fuzzel.overrideAttrs (oldAttrs: { - patches = ./patches/fuzzelmouseinput.patch; - }); programs.fuzzel.settings = { main = { font = userSettings.font + ":size=20"; diff --git a/user/wm/hyprland/patches/fuzzelmouseinput.patch b/user/wm/hyprland/patches/fuzzelmouseinput.patch deleted file mode 100644 index 0264ac1..0000000 --- a/user/wm/hyprland/patches/fuzzelmouseinput.patch +++ /dev/null @@ -1,1053 +0,0 @@ -From 7cc9f3147438fe7dd0062172f46aed415f024464 Mon Sep 17 00:00:00 2001 -From: alz -Date: Mon, 22 Jul 2024 00:43:56 -0400 -Subject: [PATCH 1/7] implemented left click, right click and scroll wheel - listeners - ---- - match.c | 24 ++++++++++++++++++++++++ - match.h | 1 + - render.c | 19 +++++++++++++++++++ - render.h | 2 ++ - wayland.c | 38 ++++++++++++++++++++++++++++++++++++++ - 5 files changed, 84 insertions(+) - -diff --git a/match.c b/match.c -index 5a26000..7d5efaf 100644 ---- a/match.c -+++ b/match.c -@@ -359,6 +359,30 @@ matches_selected_select(struct matches *matches, const char *_string) - return false; - } - -+bool -+matches_selected_select_idx(struct matches *matches, size_t idx) -+{ -+ const size_t page_no = matches_get_page(matches); -+ const size_t items_on_page __attribute__((unused)) = matches_get_count(matches); -+ -+ LOG_DBG( -+ "page-count: %zu, page-no: %zu, items-on-page: %zu, idx: %zu, max: %zu, " -+ "match-count: %zu", -+ matches->page_count, page_no, items_on_page, idx, -+ matches->max_matches_per_page, matches->match_count); -+ -+ if (idx >= items_on_page) -+ return false; -+ -+ idx += page_no * matches->max_matches_per_page; -+ -+ if (idx >= matches->match_count) -+ return false; -+ -+ matches->selected = idx; -+ return true; -+} -+ - bool - matches_selected_first(struct matches *matches) - { -diff --git a/match.h b/match.h -index 4100881..871635b 100644 ---- a/match.h -+++ b/match.h -@@ -53,6 +53,7 @@ size_t matches_get_total_count(const struct matches *matches); - size_t matches_get_match_index(const struct matches *matches); - - bool matches_selected_select(struct matches *matches, const char *string); -+bool matches_selected_select_idx(struct matches *matches, size_t idx); - - bool matches_selected_first(struct matches *matches); - bool matches_selected_last(struct matches *matches); -diff --git a/render.c b/render.c -index 403d7c9..3bc507c 100644 ---- a/render.c -+++ b/render.c -@@ -873,3 +873,22 @@ render_destroy(struct render *render) - fcft_destroy(render->font); - free(render); - } -+ -+int render_get_row_num(const struct render *render, int y) -+{ -+ const float scale = render->scale; -+ const int y_margin = render->y_margin; -+ const int inner_pad = render->inner_pad; -+ const int border_size = render->border_size; -+ const int row_height = render->row_height; -+ const int first_row = 1 * border_size + y_margin + row_height + inner_pad; -+ -+ y = floor(scale * y); -+ -+ if (y <= first_row) { -+ return -1; -+ } else { -+ y -= first_row; -+ return y / row_height; -+ } -+} -diff --git a/render.h b/render.h -index c097882..1f934f5 100644 ---- a/render.h -+++ b/render.h -@@ -30,3 +30,5 @@ void render_match_list( - const struct prompt *prompt, const struct matches *matches); - - int render_icon_size(const struct render *render); -+ -+int render_get_row_num(const struct render *render, int y); -diff --git a/wayland.c b/wayland.c -index 15f9e05..c2cf6a6 100644 ---- a/wayland.c -+++ b/wayland.c -@@ -1062,18 +1062,56 @@ static void - wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - uint32_t time, wl_fixed_t surface_x, wl_fixed_t surface_y) - { -+ struct seat *seat = data; -+ struct wayland *wayl = seat->wayl; -+ bool refresh = false; -+ -+ refresh = matches_selected_select_idx(wayl->matches, -+ render_get_row_num(wayl->render, wl_fixed_to_int(surface_y))); -+ -+ if (refresh) { -+ wayl_refresh(wayl); -+ } - } - - static void - wl_pointer_button(void *data, struct wl_pointer *wl_pointer, - uint32_t serial, uint32_t time, uint32_t button, uint32_t state) - { -+ struct seat *seat = data; -+ struct wayland *wayl = seat->wayl; -+ -+ // Button release -+ if (state == 0) { -+ // Left click -+ if (button == 272) { -+ execute_selected(seat, false, -1); -+ // Right click -+ } else if (button == 273) { -+ wayl->status = EXIT; -+ if (wayl->conf->dmenu.enabled) -+ wayl->exit_code = 2; -+ } -+ } - } - - static void - wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, - uint32_t time, uint32_t axis, wl_fixed_t value) - { -+ struct seat *seat = data; -+ struct wayland *wayl = seat->wayl; -+ -+ bool refresh = false; -+ if (value < 0) { -+ refresh = matches_selected_prev_page(wayl->matches); -+ } else if (value > 0) { -+ refresh = matches_selected_next_page(wayl->matches); -+ } -+ -+ if (refresh) { -+ wayl_refresh(wayl); -+ } - } - - static void --- -2.39.2 - - -From e023c4f6ceb8bd0fa9b5b1ed2b23af123c2811ed Mon Sep 17 00:00:00 2001 -From: alz -Date: Mon, 22 Jul 2024 01:07:56 -0400 -Subject: [PATCH 2/7] put the mouse stuff behind a config - ---- - config.c | 4 ++++ - config.h | 2 ++ - doc/fuzzel.1.scd | 4 ++++ - doc/fuzzel.ini.5.scd | 3 +++ - main.c | 10 ++++++++ - match.c | 4 ++++ - wayland.c | 54 +++++++++++++++++++++++++------------------- - 7 files changed, 58 insertions(+), 23 deletions(-) - -diff --git a/config.c b/config.c -index e236142..21aab3a 100644 ---- a/config.c -+++ b/config.c -@@ -778,6 +778,9 @@ parse_section_main(struct context *ctx) - else if (strcmp(key, "list-executables-in-path") == 0) - return value_to_bool(ctx, &conf->list_executables_in_path); - -+ else if (strcmp(key, "mouse-listener") == 0) -+ return value_to_bool(ctx, &conf->mouse_listener); -+ - else if (strcmp(key, "fields") == 0) { - _Static_assert(sizeof(conf->match_fields) == sizeof(int), - "enum is not 32-bit"); -@@ -1572,6 +1575,7 @@ config_load(struct config *conf, const char *conf_path, - .layer = ZWLR_LAYER_SHELL_V1_LAYER_TOP, - .exit_on_kb_focus_loss = true, - .list_executables_in_path = false, -+ .mouse_listener = false, - }; - - add_default_key_bindings(conf); -diff --git a/config.h b/config.h -index a52976c..99d3a52 100644 ---- a/config.h -+++ b/config.h -@@ -170,6 +170,8 @@ struct config { - bool exit_on_kb_focus_loss; - - bool list_executables_in_path; -+ -+ bool mouse_listener; - }; - - typedef tll(char *) config_override_t; -diff --git a/doc/fuzzel.1.scd b/doc/fuzzel.1.scd -index c46d9af..791a5e6 100644 ---- a/doc/fuzzel.1.scd -+++ b/doc/fuzzel.1.scd -@@ -302,6 +302,10 @@ or command line options: - *--log-no-syslog* - Disables syslog logging. Logging is only done on stderr. - -+*--mouse* -+ Allows choosing items with mouse left click, and cancelling fuzzel with -+ right click. -+ - *-v*,*--version* - Show the version number and quit - -diff --git a/doc/fuzzel.ini.5.scd b/doc/fuzzel.ini.5.scd -index e3dfc05..ee6a2c5 100644 ---- a/doc/fuzzel.ini.5.scd -+++ b/doc/fuzzel.ini.5.scd -@@ -411,6 +411,9 @@ done by setting _action=none_; e.g. *delete-line-forward=none*. - *last* - Select the last entry, on the last page. Default: _Control+End_. - -+*mouse-listener* -+ Allows selecting elements with the mouse -+ - *custom-1*, *custom-2*, ..., *custom-19* - Execute the currently selected entry, then exit with a non-zero - exit code. *custom-1* exits with exit code 10, *custom-2* with 11, -diff --git a/match.c b/match.c -index 7d5efaf..fe3903a 100644 ---- a/match.c -+++ b/match.c -@@ -362,6 +362,9 @@ matches_selected_select(struct matches *matches, const char *_string) - bool - matches_selected_select_idx(struct matches *matches, size_t idx) - { -+ if (idx < 0) -+ return false; -+ - const size_t page_no = matches_get_page(matches); - const size_t items_on_page __attribute__((unused)) = matches_get_count(matches); - -@@ -371,6 +374,7 @@ matches_selected_select_idx(struct matches *matches, size_t idx) - matches->page_count, page_no, items_on_page, idx, - matches->max_matches_per_page, matches->match_count); - -+ - if (idx >= items_on_page) - return false; - -diff --git a/wayland.c b/wayland.c -index c2cf6a6..8fff785 100644 ---- a/wayland.c -+++ b/wayland.c -@@ -1064,13 +1064,16 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - { - struct seat *seat = data; - struct wayland *wayl = seat->wayl; -- bool refresh = false; - -- refresh = matches_selected_select_idx(wayl->matches, -- render_get_row_num(wayl->render, wl_fixed_to_int(surface_y))); -+ if (wayl->conf->mouse_listener) { -+ bool refresh = false; - -- if (refresh) { -- wayl_refresh(wayl); -+ refresh = matches_selected_select_idx(wayl->matches, -+ render_get_row_num(wayl->render, wl_fixed_to_int(surface_y))); -+ -+ if (refresh) { -+ wayl_refresh(wayl); -+ } - } - } - -@@ -1081,16 +1084,18 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer, - struct seat *seat = data; - struct wayland *wayl = seat->wayl; - -- // Button release -- if (state == 0) { -- // Left click -- if (button == 272) { -- execute_selected(seat, false, -1); -- // Right click -- } else if (button == 273) { -- wayl->status = EXIT; -- if (wayl->conf->dmenu.enabled) -- wayl->exit_code = 2; -+ if (wayl->conf->mouse_listener) { -+ // Button release -+ if (state == 0) { -+ // Left click -+ if (button == 0x110) { -+ execute_selected(seat, false, -1); -+ // Right click -+ } else if (button == 0x111) { -+ wayl->status = EXIT; -+ if (wayl->conf->dmenu.enabled) -+ wayl->exit_code = 2; -+ } - } - } - } -@@ -1102,15 +1107,18 @@ wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, - struct seat *seat = data; - struct wayland *wayl = seat->wayl; - -- bool refresh = false; -- if (value < 0) { -- refresh = matches_selected_prev_page(wayl->matches); -- } else if (value > 0) { -- refresh = matches_selected_next_page(wayl->matches); -- } -+ if (wayl->conf->mouse_listener) { -+ bool refresh = false; - -- if (refresh) { -- wayl_refresh(wayl); -+ if (value < 0) { -+ refresh = matches_selected_prev_page(wayl->matches); -+ } else if (value > 0) { -+ refresh = matches_selected_next_page(wayl->matches); -+ } -+ -+ if (refresh) { -+ wayl_refresh(wayl); -+ } - } - } - --- -2.39.2 - - -From 9e04a13fa2a6b442faaa1451700e04000f24734b Mon Sep 17 00:00:00 2001 -From: alz -Date: Mon, 22 Jul 2024 12:00:43 -0400 -Subject: [PATCH 3/7] Ignoring left clicks if they're in the prompt row - ---- - wayland.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/wayland.c b/wayland.c -index 8fff785..e7c0c2c 100644 ---- a/wayland.c -+++ b/wayland.c -@@ -1068,6 +1068,8 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - if (wayl->conf->mouse_listener) { - bool refresh = false; - -+ seat->pointer.y = wl_fixed_to_int(surface_y); -+ - refresh = matches_selected_select_idx(wayl->matches, - render_get_row_num(wayl->render, wl_fixed_to_int(surface_y))); - -@@ -1088,7 +1090,7 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer, - // Button release - if (state == 0) { - // Left click -- if (button == 0x110) { -+ if (button == 0x110 && render_get_row_num(wayl->render, seat->pointer.y) >= 0) { - execute_selected(seat, false, -1); - // Right click - } else if (button == 0x111) { --- -2.39.2 - - -From 607edc371b7ee48ec194ec2ce561d8e10d49923a Mon Sep 17 00:00:00 2001 -From: alz -Date: Mon, 22 Jul 2024 13:18:43 -0400 -Subject: [PATCH 4/7] Refactored so the data types are correct - ---- - match.c | 36 ++++++++++++------------------------ - render.c | 14 +++++++++----- - render.h | 2 +- - wayland.c | 28 +++++++++++++++++----------- - 4 files changed, 39 insertions(+), 41 deletions(-) - -diff --git a/match.c b/match.c -index fe3903a..a16f903 100644 ---- a/match.c -+++ b/match.c -@@ -278,8 +278,8 @@ matches_get_page(const struct matches *matches) - : matches->selected; - } - --const struct match * --matches_get(const struct matches *matches, size_t idx) -+size_t -+match_get_idx(const struct matches *matches, size_t idx) - { - const size_t page_no = matches_get_page(matches); - const size_t items_on_page __attribute__((unused)) = matches_get_count(matches); -@@ -290,11 +290,17 @@ matches_get(const struct matches *matches, size_t idx) - matches->page_count, page_no, items_on_page, idx, - matches->max_matches_per_page, matches->match_count); - -- assert(idx < items_on_page); -+ assert(idx >= 0 && idx < items_on_page); - idx += page_no * matches->max_matches_per_page; - - assert(idx < matches->match_count); -- return &matches->matches[idx]; -+ return idx; -+} -+ -+const struct match * -+matches_get(const struct matches *matches, size_t idx) -+{ -+ return &matches->matches[match_get_idx(matches, idx)]; - } - - const struct match * -@@ -362,28 +368,10 @@ matches_selected_select(struct matches *matches, const char *_string) - bool - matches_selected_select_idx(struct matches *matches, size_t idx) - { -- if (idx < 0) -+ if (idx == -1) - return false; - -- const size_t page_no = matches_get_page(matches); -- const size_t items_on_page __attribute__((unused)) = matches_get_count(matches); -- -- LOG_DBG( -- "page-count: %zu, page-no: %zu, items-on-page: %zu, idx: %zu, max: %zu, " -- "match-count: %zu", -- matches->page_count, page_no, items_on_page, idx, -- matches->max_matches_per_page, matches->match_count); -- -- -- if (idx >= items_on_page) -- return false; -- -- idx += page_no * matches->max_matches_per_page; -- -- if (idx >= matches->match_count) -- return false; -- -- matches->selected = idx; -+ matches->selected = match_get_idx(matches, idx); - return true; - } - -diff --git a/render.c b/render.c -index 3bc507c..1dcefc9 100644 ---- a/render.c -+++ b/render.c -@@ -874,7 +874,8 @@ render_destroy(struct render *render) - free(render); - } - --int render_get_row_num(const struct render *render, int y) -+size_t -+render_get_row_num(const struct render *render, int y, size_t match_count) - { - const float scale = render->scale; - const int y_margin = render->y_margin; -@@ -882,13 +883,16 @@ int render_get_row_num(const struct render *render, int y) - const int border_size = render->border_size; - const int row_height = render->row_height; - const int first_row = 1 * border_size + y_margin + row_height + inner_pad; -+ const int last_row = first_row + match_count*row_height; - - y = floor(scale * y); - -- if (y <= first_row) { -- return -1; -- } else { -+ size_t row = -1; -+ -+ if (y >= first_row && y < last_row) { - y -= first_row; -- return y / row_height; -+ row = y / row_height; - } -+ -+ return row; - } -diff --git a/render.h b/render.h -index 1f934f5..c257004 100644 ---- a/render.h -+++ b/render.h -@@ -31,4 +31,4 @@ void render_match_list( - - int render_icon_size(const struct render *render); - --int render_get_row_num(const struct render *render, int y); -+size_t render_get_row_num(const struct render *render, int y, size_t match_count); -diff --git a/wayland.c b/wayland.c -index e7c0c2c..56ff829 100644 ---- a/wayland.c -+++ b/wayland.c -@@ -1058,6 +1058,19 @@ wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, - seat->pointer.serial = serial; - } - -+static void -+select_hovered_match(struct wayland *wayl, int y) -+{ -+ bool refresh = false; -+ -+ refresh = matches_selected_select_idx(wayl->matches, -+ render_get_row_num(wayl->render, y, matches_get_count(wayl->matches))); -+ -+ if (refresh) { -+ wayl_refresh(wayl); -+ } -+} -+ - static void - wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - uint32_t time, wl_fixed_t surface_x, wl_fixed_t surface_y) -@@ -1066,16 +1079,8 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - struct wayland *wayl = seat->wayl; - - if (wayl->conf->mouse_listener) { -- bool refresh = false; -- - seat->pointer.y = wl_fixed_to_int(surface_y); -- -- refresh = matches_selected_select_idx(wayl->matches, -- render_get_row_num(wayl->render, wl_fixed_to_int(surface_y))); -- -- if (refresh) { -- wayl_refresh(wayl); -- } -+ select_hovered_match(wayl, seat->pointer.y); - } - } - -@@ -1090,7 +1095,8 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer, - // Button release - if (state == 0) { - // Left click -- if (button == 0x110 && render_get_row_num(wayl->render, seat->pointer.y) >= 0) { -+ if (button == 0x110 && -+ render_get_row_num(wayl->render, seat->pointer.y, matches_get_count(wayl->matches)) != -1) { - execute_selected(seat, false, -1); - // Right click - } else if (button == 0x111) { -@@ -1119,7 +1125,7 @@ wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, - } - - if (refresh) { -- wayl_refresh(wayl); -+ select_hovered_match(wayl, seat->pointer.y); - } - } - } --- -2.39.2 - - -From f4d4918ebd6b996deff617c2750000904d1f2d29 Mon Sep 17 00:00:00 2001 -From: alz -Date: Mon, 22 Jul 2024 13:37:03 -0400 -Subject: [PATCH 5/7] made the hovered row index an attribute of the seat - pointer - ---- - wayland.c | 20 +++++++++++--------- - 1 file changed, 11 insertions(+), 9 deletions(-) - -diff --git a/wayland.c b/wayland.c -index 56ff829..ab88598 100644 ---- a/wayland.c -+++ b/wayland.c -@@ -148,6 +148,8 @@ struct seat { - struct wl_cursor_theme *theme; - struct wl_cursor *cursor; - float scale; -+ -+ size_t hovered_row_idx; - } pointer; - }; - -@@ -1059,12 +1061,10 @@ wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, - } - - static void --select_hovered_match(struct wayland *wayl, int y) -+select_hovered_match(struct wayland *wayl, size_t idx) - { - bool refresh = false; -- -- refresh = matches_selected_select_idx(wayl->matches, -- render_get_row_num(wayl->render, y, matches_get_count(wayl->matches))); -+ refresh = matches_selected_select_idx(wayl->matches,idx); - - if (refresh) { - wayl_refresh(wayl); -@@ -1079,8 +1079,11 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - struct wayland *wayl = seat->wayl; - - if (wayl->conf->mouse_listener) { -- seat->pointer.y = wl_fixed_to_int(surface_y); -- select_hovered_match(wayl, seat->pointer.y); -+ seat->pointer.hovered_row_idx = -+ render_get_row_num(wayl->render, -+ wl_fixed_to_int(surface_y), -+ matches_get_count(wayl->matches)); -+ select_hovered_match(wayl, seat->pointer.hovered_row_idx); - } - } - -@@ -1095,8 +1098,7 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer, - // Button release - if (state == 0) { - // Left click -- if (button == 0x110 && -- render_get_row_num(wayl->render, seat->pointer.y, matches_get_count(wayl->matches)) != -1) { -+ if (button == 0x110 && seat->pointer.hovered_row_idx != -1) { - execute_selected(seat, false, -1); - // Right click - } else if (button == 0x111) { -@@ -1125,7 +1127,7 @@ wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, - } - - if (refresh) { -- select_hovered_match(wayl, seat->pointer.y); -+ select_hovered_match(wayl, seat->pointer.hovered_row_idx); - } - } - } --- -2.39.2 - - -From ef4b0160b3c6e04da7b4bf6a0e6b7d0ac06b54ef Mon Sep 17 00:00:00 2001 -From: alz -Date: Tue, 23 Jul 2024 16:35:44 -0400 -Subject: [PATCH 6/7] Refreshing display less often - ---- - render.c | 2 +- - wayland.c | 7 +++++-- - 2 files changed, 6 insertions(+), 3 deletions(-) - -diff --git a/render.c b/render.c -index 1dcefc9..505f570 100644 ---- a/render.c -+++ b/render.c -@@ -839,7 +839,7 @@ render_set_font(struct render *render, struct fcft_font *font, - border_size; - - LOG_DBG("x-margin: %d, y-margin: %d, border: %d, row-height: %d, " -- "icon-height: %d, height: %d, width: %d, scale: %d", -+ "icon-height: %d, height: %d, width: %d, scale: %f", - x_margin, y_margin, border_size, row_height, icon_height, - height, width, scale); - -diff --git a/wayland.c b/wayland.c -index ab88598..19e902a 100644 ---- a/wayland.c -+++ b/wayland.c -@@ -1079,11 +1079,14 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - struct wayland *wayl = seat->wayl; - - if (wayl->conf->mouse_listener) { -- seat->pointer.hovered_row_idx = -+ size_t hovered_row = - render_get_row_num(wayl->render, - wl_fixed_to_int(surface_y), - matches_get_count(wayl->matches)); -- select_hovered_match(wayl, seat->pointer.hovered_row_idx); -+ if (hovered_row != seat->pointer.hovered_row_idx) { -+ seat->pointer.hovered_row_idx = hovered_row; -+ select_hovered_match(wayl, seat->pointer.hovered_row_idx); -+ } - } - } - --- -2.39.2 - - -From 761aabf6b7fc55203e23be76a044bbea3e8d99be Mon Sep 17 00:00:00 2001 -From: alz -Date: Mon, 29 Jul 2024 13:01:12 -0400 -Subject: [PATCH 7/7] Removed config, refactored hovered row selection - ---- - config.c | 4 --- - config.h | 2 -- - doc/fuzzel.1.scd | 4 --- - doc/fuzzel.ini.5.scd | 3 -- - main.c | 10 ------ - match.c | 12 +++---- - match.h | 6 ++-- - render.c | 9 ++--- - render.h | 4 ++- - wayland.c | 78 +++++++++++++++++++++----------------------- - 10 files changed, 54 insertions(+), 78 deletions(-) - -diff --git a/config.c b/config.c -index 21aab3a..e236142 100644 ---- a/config.c -+++ b/config.c -@@ -778,9 +778,6 @@ parse_section_main(struct context *ctx) - else if (strcmp(key, "list-executables-in-path") == 0) - return value_to_bool(ctx, &conf->list_executables_in_path); - -- else if (strcmp(key, "mouse-listener") == 0) -- return value_to_bool(ctx, &conf->mouse_listener); -- - else if (strcmp(key, "fields") == 0) { - _Static_assert(sizeof(conf->match_fields) == sizeof(int), - "enum is not 32-bit"); -@@ -1575,7 +1572,6 @@ config_load(struct config *conf, const char *conf_path, - .layer = ZWLR_LAYER_SHELL_V1_LAYER_TOP, - .exit_on_kb_focus_loss = true, - .list_executables_in_path = false, -- .mouse_listener = false, - }; - - add_default_key_bindings(conf); -diff --git a/config.h b/config.h -index 99d3a52..a52976c 100644 ---- a/config.h -+++ b/config.h -@@ -170,8 +170,6 @@ struct config { - bool exit_on_kb_focus_loss; - - bool list_executables_in_path; -- -- bool mouse_listener; - }; - - typedef tll(char *) config_override_t; -diff --git a/doc/fuzzel.1.scd b/doc/fuzzel.1.scd -index 791a5e6..c46d9af 100644 ---- a/doc/fuzzel.1.scd -+++ b/doc/fuzzel.1.scd -@@ -302,10 +302,6 @@ or command line options: - *--log-no-syslog* - Disables syslog logging. Logging is only done on stderr. - --*--mouse* -- Allows choosing items with mouse left click, and cancelling fuzzel with -- right click. -- - *-v*,*--version* - Show the version number and quit - -diff --git a/doc/fuzzel.ini.5.scd b/doc/fuzzel.ini.5.scd -index ee6a2c5..e3dfc05 100644 ---- a/doc/fuzzel.ini.5.scd -+++ b/doc/fuzzel.ini.5.scd -@@ -411,9 +411,6 @@ done by setting _action=none_; e.g. *delete-line-forward=none*. - *last* - Select the last entry, on the last page. Default: _Control+End_. - --*mouse-listener* -- Allows selecting elements with the mouse -- - *custom-1*, *custom-2*, ..., *custom-19* - Execute the currently selected entry, then exit with a non-zero - exit code. *custom-1* exits with exit code 10, *custom-2* with 11, -diff --git a/match.c b/match.c -index a16f903..48c6e4f 100644 ---- a/match.c -+++ b/match.c -@@ -290,7 +290,7 @@ match_get_idx(const struct matches *matches, size_t idx) - matches->page_count, page_no, items_on_page, idx, - matches->max_matches_per_page, matches->match_count); - -- assert(idx >= 0 && idx < items_on_page); -+ assert(idx < items_on_page); - idx += page_no * matches->max_matches_per_page; - - assert(idx < matches->match_count); -@@ -366,7 +366,7 @@ matches_selected_select(struct matches *matches, const char *_string) - } - - bool --matches_selected_select_idx(struct matches *matches, size_t idx) -+matches_idx_select(struct matches *matches, size_t idx) - { - if (idx == -1) - return false; -@@ -427,14 +427,14 @@ matches_selected_next(struct matches *matches, bool wrap) - } - - bool --matches_selected_prev_page(struct matches *matches) -+matches_selected_prev_page(struct matches *matches, bool scrolling) - { - const size_t page_no = matches_get_page(matches); - if (page_no > 0) { - assert(matches->selected >= matches->max_matches_per_page); - matches->selected -= matches->max_matches_per_page; - return true; -- } else if (matches->selected > 0) { -+ } else if (!scrolling && matches->selected > 0) { - matches->selected = 0; - return true; - } -@@ -443,7 +443,7 @@ matches_selected_prev_page(struct matches *matches) - } - - bool --matches_selected_next_page(struct matches *matches) -+matches_selected_next_page(struct matches *matches, bool scrolling) - { - const size_t page_no = matches_get_page(matches); - if (page_no + 1 < matches->page_count) { -@@ -451,7 +451,7 @@ matches_selected_next_page(struct matches *matches) - matches->selected + matches->max_matches_per_page, - matches->match_count - 1); - return true; -- } else if (matches->selected < matches->match_count - 1) { -+ } else if (!scrolling && matches->selected < matches->match_count - 1) { - matches->selected = matches->match_count - 1; - return true; - } -diff --git a/match.h b/match.h -index 871635b..35c5d5e 100644 ---- a/match.h -+++ b/match.h -@@ -53,7 +53,7 @@ size_t matches_get_total_count(const struct matches *matches); - size_t matches_get_match_index(const struct matches *matches); - - bool matches_selected_select(struct matches *matches, const char *string); --bool matches_selected_select_idx(struct matches *matches, size_t idx); -+bool matches_idx_select(struct matches *matches, size_t idx); - - bool matches_selected_first(struct matches *matches); - bool matches_selected_last(struct matches *matches); -@@ -61,5 +61,5 @@ bool matches_selected_last(struct matches *matches); - bool matches_selected_prev(struct matches *matches, bool wrap); - bool matches_selected_next(struct matches *matches, bool wrap); - --bool matches_selected_prev_page(struct matches *matches); --bool matches_selected_next_page(struct matches *matches); -+bool matches_selected_prev_page(struct matches *matches, bool scrolling); -+bool matches_selected_next_page(struct matches *matches, bool scrolling); -diff --git a/render.c b/render.c -index 505f570..ef9aaad 100644 ---- a/render.c -+++ b/render.c -@@ -875,7 +875,8 @@ render_destroy(struct render *render) - } - - size_t --render_get_row_num(const struct render *render, int y, size_t match_count) -+render_get_row_num(const struct render *render, int y, -+ const struct matches *matches) - { - const float scale = render->scale; - const int y_margin = render->y_margin; -@@ -883,15 +884,15 @@ render_get_row_num(const struct render *render, int y, size_t match_count) - const int border_size = render->border_size; - const int row_height = render->row_height; - const int first_row = 1 * border_size + y_margin + row_height + inner_pad; -- const int last_row = first_row + match_count*row_height; -+ const size_t match_count = matches_get_count(matches); -+ const size_t last_row = first_row + match_count*row_height; - - y = floor(scale * y); - - size_t row = -1; - - if (y >= first_row && y < last_row) { -- y -= first_row; -- row = y / row_height; -+ row = (y - first_row) / row_height; - } - - return row; -diff --git a/render.h b/render.h -index c257004..16887f3 100644 ---- a/render.h -+++ b/render.h -@@ -31,4 +31,6 @@ void render_match_list( - - int render_icon_size(const struct render *render); - --size_t render_get_row_num(const struct render *render, int y, size_t match_count); -+size_t render_get_row_num( -+ const struct render *render, int y, -+ const struct matches *matches); -diff --git a/wayland.c b/wayland.c -index 19e902a..541496d 100644 ---- a/wayland.c -+++ b/wayland.c -@@ -16,6 +16,7 @@ - #include - #include - -+#include - #include - #include - #include -@@ -142,14 +143,13 @@ struct seat { - - int x; - int y; -+ size_t hovered_row_idx; - - struct wl_surface *surface; - struct wp_viewport *viewport; - struct wl_cursor_theme *theme; - struct wl_cursor *cursor; - float scale; -- -- size_t hovered_row_idx; - } pointer; - }; - -@@ -706,7 +706,7 @@ execute_binding(struct seat *seat, const struct key_binding *binding, bool *refr - return true; - - case BIND_ACTION_MATCHES_PREV_PAGE: -- *refresh = matches_selected_prev_page(wayl->matches); -+ *refresh = matches_selected_prev_page(wayl->matches, false); - return true; - - case BIND_ACTION_MATCHES_NEXT: -@@ -718,7 +718,7 @@ execute_binding(struct seat *seat, const struct key_binding *binding, bool *refr - return true; - - case BIND_ACTION_MATCHES_NEXT_PAGE: -- *refresh = matches_selected_next_page(wayl->matches); -+ *refresh = matches_selected_next_page(wayl->matches, false); - return true; - - case BIND_ACTION_MATCHES_FIRST: -@@ -1061,12 +1061,22 @@ wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, - } - - static void --select_hovered_match(struct wayland *wayl, size_t idx) -+select_hovered_match(struct seat *seat, bool refresh_always) - { -+ struct wayland *wayl = seat->wayl; - bool refresh = false; -- refresh = matches_selected_select_idx(wayl->matches,idx); - -- if (refresh) { -+ size_t hovered_row = -+ render_get_row_num(wayl->render, -+ seat->pointer.y, -+ wayl->matches); -+ -+ if (hovered_row != seat->pointer.hovered_row_idx) { -+ seat->pointer.hovered_row_idx = hovered_row; -+ refresh = matches_idx_select(wayl->matches,hovered_row); -+ } -+ -+ if (refresh_always || refresh) { - wayl_refresh(wayl); - } - } -@@ -1076,18 +1086,11 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, - uint32_t time, wl_fixed_t surface_x, wl_fixed_t surface_y) - { - struct seat *seat = data; -- struct wayland *wayl = seat->wayl; - -- if (wayl->conf->mouse_listener) { -- size_t hovered_row = -- render_get_row_num(wayl->render, -- wl_fixed_to_int(surface_y), -- matches_get_count(wayl->matches)); -- if (hovered_row != seat->pointer.hovered_row_idx) { -- seat->pointer.hovered_row_idx = hovered_row; -- select_hovered_match(wayl, seat->pointer.hovered_row_idx); -- } -- } -+ seat->pointer.x = wl_fixed_to_int(surface_x); -+ seat->pointer.y = wl_fixed_to_int(surface_y); -+ -+ select_hovered_match(seat, false); - } - - static void -@@ -1097,18 +1100,14 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer, - struct seat *seat = data; - struct wayland *wayl = seat->wayl; - -- if (wayl->conf->mouse_listener) { -- // Button release -- if (state == 0) { -- // Left click -- if (button == 0x110 && seat->pointer.hovered_row_idx != -1) { -- execute_selected(seat, false, -1); -- // Right click -- } else if (button == 0x111) { -- wayl->status = EXIT; -- if (wayl->conf->dmenu.enabled) -- wayl->exit_code = 2; -- } -+ if (state == WL_POINTER_BUTTON_STATE_RELEASED) { -+ if (button == BTN_LEFT && seat->pointer.hovered_row_idx != -1) { -+ execute_selected(seat, false, -1); -+ } else if (button == BTN_RIGHT) { -+ // Same as pressing ESC -+ wayl->status = EXIT; -+ if (wayl->conf->dmenu.enabled) -+ wayl->exit_code = 2; - } - } - } -@@ -1119,19 +1118,16 @@ wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, - { - struct seat *seat = data; - struct wayland *wayl = seat->wayl; -+ bool refresh = false; - -- if (wayl->conf->mouse_listener) { -- bool refresh = false; -+ if (value < 0) { -+ refresh = matches_selected_prev_page(wayl->matches, true); -+ } else if (value > 0) { -+ refresh = matches_selected_next_page(wayl->matches, true); -+ } - -- if (value < 0) { -- refresh = matches_selected_prev_page(wayl->matches); -- } else if (value > 0) { -- refresh = matches_selected_next_page(wayl->matches); -- } -- -- if (refresh) { -- select_hovered_match(wayl, seat->pointer.hovered_row_idx); -- } -+ if (refresh) { -+ select_hovered_match(seat, true); - } - } - --- -2.39.2 diff --git a/user/wm/hyprland/patches/waybarbatupdate.patch b/user/wm/hyprland/patches/waybarbatupdate.patch deleted file mode 100644 index 364c92e..0000000 --- a/user/wm/hyprland/patches/waybarbatupdate.patch +++ /dev/null @@ -1,192 +0,0 @@ -From f4608b3e312448b37a8f9d6351154026e67c680a Mon Sep 17 00:00:00 2001 -From: schmop -Date: Thu, 25 Jul 2024 01:40:49 +0200 -Subject: [PATCH] Fix battery status changes not being detected - -Historically we listened to /sys/class/poewr_supply inotify events, -which does not seem to work anymore. -We switched now to udev netlink kernel events. ---- - include/modules/battery.hpp | 8 +++++-- - include/util/udev_deleter.hpp | 21 ++++++++++++++++++ - src/modules/battery.cpp | 40 +++++++++++++++++++--------------- - src/util/backlight_backend.cpp | 17 +-------------- - 4 files changed, 51 insertions(+), 35 deletions(-) - create mode 100644 include/util/udev_deleter.hpp - -diff --git a/include/modules/battery.hpp b/include/modules/battery.hpp -index 8e1a2ad2b..fc403be05 100644 ---- a/include/modules/battery.hpp -+++ b/include/modules/battery.hpp -@@ -5,8 +5,11 @@ - #include - #if defined(__linux__) - #include -+#include "util/udev_deleter.hpp" - #endif - -+#include -+ - #include - #include - #include -@@ -36,11 +39,12 @@ class Battery : public ALabel { - const std::string formatTimeRemaining(float hoursRemaining); - void setBarClass(std::string&); - -- int global_watch; - std::map batteries_; -+ std::unique_ptr udev_; -+ std::array poll_fds_; -+ std::unique_ptr mon_; - fs::path adapter_; - int battery_watch_fd_; -- int global_watch_fd_; - std::mutex battery_list_mutex_; - std::string old_status_; - bool warnFirstTime_{true}; -diff --git a/include/util/udev_deleter.hpp b/include/util/udev_deleter.hpp -new file mode 100644 -index 000000000..b2f1e538b ---- /dev/null -+++ b/include/util/udev_deleter.hpp -@@ -0,0 +1,21 @@ -+#pragma once -+ -+#include -+ -+namespace waybar::util { -+struct UdevDeleter { -+ void operator()(udev *ptr) const { udev_unref(ptr); } -+}; -+ -+struct UdevDeviceDeleter { -+ void operator()(udev_device *ptr) const { udev_device_unref(ptr); } -+}; -+ -+struct UdevEnumerateDeleter { -+ void operator()(udev_enumerate *ptr) const { udev_enumerate_unref(ptr); } -+}; -+ -+struct UdevMonitorDeleter { -+ void operator()(udev_monitor *ptr) const { udev_monitor_unref(ptr); } -+}; -+} // namespace waybar::util -\ No newline at end of file -diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp -index d87cc6129..bad72e6b0 100644 ---- a/src/modules/battery.cpp -+++ b/src/modules/battery.cpp -@@ -5,6 +5,9 @@ - #include - #endif - #include -+#include -+#include -+#include - - #include - waybar::modules::Battery::Battery(const std::string& id, const Bar& bar, const Json::Value& config) -@@ -14,17 +17,18 @@ waybar::modules::Battery::Battery(const std::string& id, const Bar& bar, const J - if (battery_watch_fd_ == -1) { - throw std::runtime_error("Unable to listen batteries."); - } -- -- global_watch_fd_ = inotify_init1(IN_CLOEXEC); -- if (global_watch_fd_ == -1) { -- throw std::runtime_error("Unable to listen batteries."); -+ udev_ = std::unique_ptr(udev_new()); -+ if (udev_ == nullptr) { -+ throw std::runtime_error("udev_new failed"); - } -- -- // Watch the directory for any added or removed batteries -- global_watch = inotify_add_watch(global_watch_fd_, data_dir_.c_str(), IN_CREATE | IN_DELETE); -- if (global_watch < 0) { -- throw std::runtime_error("Could not watch for battery plug/unplug"); -+ mon_ = std::unique_ptr(udev_monitor_new_from_netlink(udev_.get(), "kernel")); -+ if (mon_ == nullptr) { -+ throw std::runtime_error("udev monitor new failed"); - } -+ if (udev_monitor_filter_add_match_subsystem_devtype(mon_.get(), "power_supply", nullptr) < 0) { -+ throw std::runtime_error("udev failed to add monitor filter"); -+ } -+ udev_monitor_enable_receiving(mon_.get()); - #endif - worker(); - } -@@ -33,11 +37,6 @@ waybar::modules::Battery::~Battery() { - #if defined(__linux__) - std::lock_guard guard(battery_list_mutex_); - -- if (global_watch >= 0) { -- inotify_rm_watch(global_watch_fd_, global_watch); -- } -- close(global_watch_fd_); -- - for (auto it = batteries_.cbegin(), next_it = it; it != batteries_.cend(); it = next_it) { - ++next_it; - auto watch_id = (*it).second; -@@ -74,12 +73,18 @@ void waybar::modules::Battery::worker() { - dp.emit(); - }; - thread_battery_update_ = [this] { -- struct inotify_event event = {0}; -- int nbytes = read(global_watch_fd_, &event, sizeof(event)); -- if (nbytes != sizeof(event) || event.mask & IN_IGNORED) { -+ poll_fds_[0].revents = 0; -+ poll_fds_[0].events = POLLIN; -+ poll_fds_[0].fd = udev_monitor_get_fd(mon_.get()); -+ int ret = poll(poll_fds_.data(), poll_fds_.size(), -1); -+ if (ret < 0) { - thread_.stop(); - return; - } -+ if ((poll_fds_[0].revents & POLLIN) != 0) { -+ signalfd_siginfo signal_info; -+ read(poll_fds_[0].fd, &signal_info, sizeof(signal_info)); -+ } - refreshBatteries(); - dp.emit(); - }; -@@ -668,6 +673,7 @@ auto waybar::modules::Battery::update() -> void { - status = getAdapterStatus(capacity); - } - auto status_pretty = status; -+ puts(status.c_str()); - // Transform to lowercase and replace space with dash - std::transform(status.begin(), status.end(), status.begin(), - [](char ch) { return ch == ' ' ? '-' : std::tolower(ch); }); -diff --git a/src/util/backlight_backend.cpp b/src/util/backlight_backend.cpp -index bb102cd93..df6afd564 100644 ---- a/src/util/backlight_backend.cpp -+++ b/src/util/backlight_backend.cpp -@@ -1,4 +1,5 @@ - #include "util/backlight_backend.hpp" -+#include "util/udev_deleter.hpp" - - #include - #include -@@ -29,22 +30,6 @@ class FileDescriptor { - int fd_; - }; - --struct UdevDeleter { -- void operator()(udev *ptr) { udev_unref(ptr); } --}; -- --struct UdevDeviceDeleter { -- void operator()(udev_device *ptr) { udev_device_unref(ptr); } --}; -- --struct UdevEnumerateDeleter { -- void operator()(udev_enumerate *ptr) { udev_enumerate_unref(ptr); } --}; -- --struct UdevMonitorDeleter { -- void operator()(udev_monitor *ptr) { udev_monitor_unref(ptr); } --}; -- - void check_eq(int rc, int expected, const char *message = "eq, rc was: ") { - if (rc != expected) { - throw std::runtime_error(fmt::format(fmt::runtime(message), rc)); diff --git a/user/wm/hyprland/patches/waybarpaupdate.patch b/user/wm/hyprland/patches/waybarpaupdate.patch deleted file mode 100644 index f1c22cd..0000000 --- a/user/wm/hyprland/patches/waybarpaupdate.patch +++ /dev/null @@ -1,71 +0,0 @@ -diff --git a/include/util/audio_backend.hpp b/include/util/audio_backend.hpp -index 2f53103e5..3737ae264 100644 ---- a/include/util/audio_backend.hpp -+++ b/include/util/audio_backend.hpp -@@ -38,6 +38,8 @@ class AudioBackend { - std::string desc_; - std::string monitor_; - std::string current_sink_name_; -+ std::string default_sink_name; -+ bool default_sink_running_; - bool current_sink_running_; - // SOURCE - uint32_t source_idx_{0}; -diff --git a/src/util/audio_backend.cpp b/src/util/audio_backend.cpp -index 3d90b6d5a..73aac148b 100644 ---- a/src/util/audio_backend.cpp -+++ b/src/util/audio_backend.cpp -@@ -1,9 +1,12 @@ - #include "util/audio_backend.hpp" - - #include -+#include - #include -+#include - #include - #include -+#include - - #include - #include -@@ -139,6 +142,10 @@ void AudioBackend::sinkInfoCb(pa_context * /*context*/, const pa_sink_info *i, i - void *data) { - if (i == nullptr) return; - -+ auto running = i->state == PA_SINK_RUNNING; -+ auto idle = i->state == PA_SINK_IDLE; -+ spdlog::trace("Sink name {} Running:[{}] Idle:[{}]", i->name, running, idle); -+ - auto *backend = static_cast(data); - - if (!backend->ignored_sinks_.empty()) { -@@ -155,11 +162,19 @@ void AudioBackend::sinkInfoCb(pa_context * /*context*/, const pa_sink_info *i, i - } - } - -+ backend->default_sink_running_ = backend->default_sink_name == i->name && -+ (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE); -+ -+ if (i->name != backend->default_sink_name && !backend->default_sink_running_) { -+ return; -+ } -+ - if (backend->current_sink_name_ == i->name) { -- backend->current_sink_running_ = i->state == PA_SINK_RUNNING; -+ backend->current_sink_running_ = (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE); - } - -- if (!backend->current_sink_running_ && i->state == PA_SINK_RUNNING) { -+ if (!backend->current_sink_running_ && -+ (i->state == PA_SINK_RUNNING || i->state == PA_SINK_IDLE)) { - backend->current_sink_name_ = i->name; - backend->current_sink_running_ = true; - } -@@ -207,5 +222,6 @@ void AudioBackend::sourceInfoCb(pa_context * /*context*/, const pa_source_info * - void AudioBackend::serverInfoCb(pa_context *context, const pa_server_info *i, void *data) { - auto *backend = static_cast(data); - backend->current_sink_name_ = i->default_sink_name; -+ backend->default_sink_name = i->default_sink_name; - backend->default_source_name_ = i->default_source_name; - - pa_context_get_sink_info_list(context, sinkInfoCb, data);