From 7f4bbdf8a173b6b1d3e48bab1d97c899625bf1cd Mon Sep 17 00:00:00 2001 From: Kate Adkins Date: Fri, 15 Nov 2024 13:21:59 -0700 Subject: [PATCH] gui: fix an issue with waybar~ --- nixos/configs/gui/default.nix | 2 +- .../01-fix-privacy-null-pointer-deref.patch | 30 +++++++++++++ .../gui/{waybar.nix => waybar/default.nix} | 42 ++++--------------- .../gui/{ => waybar}/waybar-yubikey.sh | 0 nixos/packages/default.pkgs.nix | 1 + 5 files changed, 40 insertions(+), 35 deletions(-) create mode 100644 nixos/configs/gui/waybar/01-fix-privacy-null-pointer-deref.patch rename nixos/configs/gui/{waybar.nix => waybar/default.nix} (89%) rename nixos/configs/gui/{ => waybar}/waybar-yubikey.sh (100%) diff --git a/nixos/configs/gui/default.nix b/nixos/configs/gui/default.nix index fc9b744..5dd8a3d 100644 --- a/nixos/configs/gui/default.nix +++ b/nixos/configs/gui/default.nix @@ -11,9 +11,9 @@ imports = [ # Imports that add additional functionality + ./waybar ./niri.nix ./mako.nix - ./waybar.nix ./nirilock-fancy.nix # Core niri import. diff --git a/nixos/configs/gui/waybar/01-fix-privacy-null-pointer-deref.patch b/nixos/configs/gui/waybar/01-fix-privacy-null-pointer-deref.patch new file mode 100644 index 0000000..40e4374 --- /dev/null +++ b/nixos/configs/gui/waybar/01-fix-privacy-null-pointer-deref.patch @@ -0,0 +1,30 @@ +commit 86ce9f7278edd5a27467caf3749e8a07e4588260 +Author: Kate Adkins +Date: Fri Nov 15 12:04:56 2024 -0700 + + fix null-deref due to unconstructed PrivacyNodeInfo + + This would cause Waybar to crash if the privacy module ever got + e.g. a empty (but properly null-terminated) string for the + application_name. + +diff --git a/src/util/pipewire/pipewire_backend.cpp b/src/util/pipewire/pipewire_backend.cpp +index 5bb7c19a..3b897178 100644 +--- a/src/util/pipewire/pipewire_backend.cpp ++++ b/src/util/pipewire/pipewire_backend.cpp +@@ -126,6 +126,7 @@ void PipewireBackend::handleRegistryEventGlobal(uint32_t id, uint32_t permission + if (proxy == nullptr) return; + + auto *pNodeInfo = (PrivacyNodeInfo *)pw_proxy_get_user_data(proxy); ++ new(pNodeInfo) PrivacyNodeInfo{}; + pNodeInfo->id = id; + pNodeInfo->data = this; + pNodeInfo->type = mediaType; +@@ -142,6 +143,7 @@ void PipewireBackend::handleRegistryEventGlobalRemove(uint32_t id) { + mutex_.lock(); + auto iter = privacy_nodes.find(id); + if (iter != privacy_nodes.end()) { ++ privacy_nodes[id]->~PrivacyNodeInfo(); + privacy_nodes.erase(id); + } + mutex_.unlock(); diff --git a/nixos/configs/gui/waybar.nix b/nixos/configs/gui/waybar/default.nix similarity index 89% rename from nixos/configs/gui/waybar.nix rename to nixos/configs/gui/waybar/default.nix index 404c15e..5a8c6be 100644 --- a/nixos/configs/gui/waybar.nix +++ b/nixos/configs/gui/waybar/default.nix @@ -5,7 +5,6 @@ { lib, pkgs, - deprekages, config, ... }: @@ -93,37 +92,6 @@ in }; colors = config.lib.stylix.colors; - # Create a TODO-list handler. - waybar-todos = pkgs.writeScriptBin "waybar-todos" '' - #!${pkgs.python3}/bin/python3 - - import subprocess - import json - - def get_count(*filter): - return int(subprocess.run(['${pkgs.taskwarrior3}/bin/task', 'count', *filter], capture_output=True, text=True).stdout) - - def get_tasks(*filter): - return subprocess.run(['${pkgs.taskwarrior3}/bin/task', 'ls', *filter], capture_output=True, text=True).stdout - - priority = get_count("(+TODAY or +OVERDUE)", "priority:H") - due_today = get_count("+TODAY") - overdue = get_count("+OVERDUE") - - overdue_color = ' color="#dc322f" ' if overdue else ' color="#93a1a1" ' - overdue_text = " {overdue} ".format(overdue=overdue, overdue_color=overdue_color) if overdue else "" - - priority_text = ' 󱕈 {priority} '.format(priority=priority) if priority else "" - - today_color = "" if due_today else ' color="#93a1a1" ' - - data = {} - data['text'] = "{overdue_text}{priority_text}󰃶 {due_today} ".format(overdue_text=overdue_text, due_today=due_today, today_color=today_color, priority_text=priority_text) - data['tooltip'] = get_tasks("(+TODAY or +OVERDUE)") - - print(json.dumps(data)) - ''; - # From the Waybar wiki. waybar-events = pkgs.writeScriptBin "waybar-events" '' #!${pkgs.python3}/bin/python3 @@ -226,7 +194,13 @@ in programs.waybar = { enable = true; systemd.enable = true; + + # Replace the package with a patched one. + package = pkgs.waybar.overrideAttrs (prev: { + patches = prev.patches ++ [ ./01-fix-privacy-null-pointer-deref.patch ]; + }); }; + programs.waybar.settings.mainBar = { layer = "top"; #mode = "overlay"; @@ -245,7 +219,7 @@ in "custom/events" "privacy" "custom/yubikey" - #"wireplumber" + "wireplumber" "custom/puckdown" "battery" ]; @@ -323,7 +297,7 @@ in wireplumber = { on-click = "${pkgs.pavucontrol}/bin/pavucontrol -t 1"; format = "{icon} {volume}%"; - tooltip-format = "${icons.volume.source} {node_name}"; + tooltip-format = "${icons.volume.source}"; format-muted = "${icons.volume.muted}"; format-icons = icons.volume.levels; reverse-scrolling = 1; diff --git a/nixos/configs/gui/waybar-yubikey.sh b/nixos/configs/gui/waybar/waybar-yubikey.sh similarity index 100% rename from nixos/configs/gui/waybar-yubikey.sh rename to nixos/configs/gui/waybar/waybar-yubikey.sh diff --git a/nixos/packages/default.pkgs.nix b/nixos/packages/default.pkgs.nix index 09095f0..9bd1c85 100644 --- a/nixos/packages/default.pkgs.nix +++ b/nixos/packages/default.pkgs.nix @@ -116,6 +116,7 @@ with pkgs; qpdf rclone ripgrep + rr unzip unar unrar