From abc0aee028707ff881b04ff1a85eb0b655f15bfe Mon Sep 17 00:00:00 2001 From: sefidel Date: Wed, 4 Sep 2024 01:15:08 +0900 Subject: feat(home/gui): waybar: add scratchpad indicator --- home/profiles/gui/config/waybar/settings.nix | 14 ++++++++++++-- home/profiles/gui/config/waybar/style.nix | 4 ++++ home/profiles/gui/default.nix | 2 +- home/profiles/gui/scripts/scratchpad-indicator.nix | 18 ++++++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 home/profiles/gui/scripts/scratchpad-indicator.nix (limited to 'home/profiles') diff --git a/home/profiles/gui/config/waybar/settings.nix b/home/profiles/gui/config/waybar/settings.nix index 9470824..341a1b3 100644 --- a/home/profiles/gui/config/waybar/settings.nix +++ b/home/profiles/gui/config/waybar/settings.nix @@ -1,4 +1,4 @@ -{ config, lib, neotheme }: +{ config, lib, pkgs, neotheme }: with neotheme.colors; @@ -10,7 +10,7 @@ in position = "top"; height = 22; modules-left = [ "wireplumber" "custom/separator" "cpu" "custom/separator" "memory" "custom/separator" "idle_inhibitor" ]; - modules-center = [ "sway/workspaces" ]; + modules-center = [ "sway/workspaces" "custom/scratchpad-indicator" ]; modules-right = [ "group/tray" "custom/separator" "network" "custom/separator" ] ++ lib.optionals (guiCfg.laptop.enable) [ "battery" "custom/separator" ] ++ [ "clock" ]; @@ -96,6 +96,16 @@ in tooltip = false; }; + "custom/scratchpad-indicator" = { + format = "(+{})"; + interval = 3; + return-type = "json"; + hide-empty-text = true; + exec = "${pkgs.writeShellScript "scratchpad-indicator" (import ../../scripts/scratchpad-indicator.nix)}"; + on-click = "exec swaymsg scratchpad show"; + on-click-right = "exec swaymsg move scratchpad"; + }; + "custom/separator" = { format = "|"; interval = "once"; diff --git a/home/profiles/gui/config/waybar/style.nix b/home/profiles/gui/config/waybar/style.nix index ac6aad7..1f5327e 100644 --- a/home/profiles/gui/config/waybar/style.nix +++ b/home/profiles/gui/config/waybar/style.nix @@ -107,6 +107,10 @@ in padding-right: 0.2rem; } + #custom-scratchpad-indicator { + color: #f0a0c0; + } + #custom-separator { color: #${alt1}; background-color: #${background}; diff --git a/home/profiles/gui/default.nix b/home/profiles/gui/default.nix index d43e454..cba6747 100644 --- a/home/profiles/gui/default.nix +++ b/home/profiles/gui/default.nix @@ -166,7 +166,7 @@ in waybar = { enable = config.wayland.windowManager.sway.enable; - settings = [ (import ./config/waybar/settings.nix { inherit config lib neotheme; }) ]; + settings = [ (import ./config/waybar/settings.nix { inherit config lib pkgs neotheme; }) ]; style = import ./config/waybar/style.nix { inherit config neotheme; }; }; diff --git a/home/profiles/gui/scripts/scratchpad-indicator.nix b/home/profiles/gui/scripts/scratchpad-indicator.nix new file mode 100644 index 0000000..7ee66c3 --- /dev/null +++ b/home/profiles/gui/scripts/scratchpad-indicator.nix @@ -0,0 +1,18 @@ +'' +output="$(swaymsg -t get_tree | jq -r 'recurse(.nodes[]?)|recurse(.floating_nodes[]?)|select(.name == "__i3_scratch").floating_nodes[]|"`"+.name+"` - "+.app_id+" "+(.id|tostring)')" +number="$(swaymsg -r -t get_tree | jq -r 'recurse(.nodes[]) | first(select(.name=="__i3_scratch")) | .floating_nodes | length')" + +if [ "$number" -gt 0 ]; then + text="$number" +else + text="" +fi + +output="$(echo "$output" | sed -r 's/[&]+/and/g')" # Replace unprintable & character with the word 'and' +tooltip="Scratchpad\n\n" +tooltip+="$(echo "$output" | sed -z 's/\n/\\n/g')" +tooltip=''${tooltip::-2} + +echo "{\"text\":\"$text\", \"tooltip\":\"$tooltip\"}" +exit 0 +'' -- cgit 1.4.1