From fa6c592faf1482b12bb6234e9544cd843a16173c Mon Sep 17 00:00:00 2001 From: "Reid \"reidlab" Date: Thu, 25 Jul 2024 17:31:54 -0700 Subject: [PATCH] wob for vol/brightness --- hosts/goopnet-interface/default.nix | 1 + modules/desktop/hyprland.nix | 27 +++++++++++----- modules/desktop/wob.nix | 49 +++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 8 deletions(-) create mode 100644 modules/desktop/wob.nix diff --git a/hosts/goopnet-interface/default.nix b/hosts/goopnet-interface/default.nix index b43c260..9eea03d 100755 --- a/hosts/goopnet-interface/default.nix +++ b/hosts/goopnet-interface/default.nix @@ -56,6 +56,7 @@ waybar.enable = true; batsignal.enable = true; clipse.enable = true; + wob.enable = true; # display manager sddm.enable = true; diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix index 46b68c1..d60d5a0 100644 --- a/modules/desktop/hyprland.nix +++ b/modules/desktop/hyprland.nix @@ -47,7 +47,9 @@ in { systemd.variables = [ "--all" ]; - settings = { + settings = let + wobSock = config.modules.desktop.wob.sockPath; + in { source = []; "$mod" = "SUPER"; @@ -56,22 +58,31 @@ in { "$mod, mouse:272, movewindow" "$mod, mouse:273, resizewindow" ]; - bindel = [ # "bind held & locked" + bindel = (if config.modules.desktop.wob.enable then [ # "bind held & locked" + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ | sed 's/[^0-9]//g' > ${wobSock}" + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- | sed 's/[^0-9]//g' > ${wobSock}" + ", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} -c backlight s +5% | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > ${wobSock}" + ", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} -c backlight s 5%- | sed -En 's/.*\(([0-9]+)%\).*/\1/p' > ${wobSock}" + ] else [ ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+" ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" - ", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} -c backlight s +5%" ", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} -c backlight s 5%-" - ]; - bindl = [ # "bind locked" - ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ]); + bindl = ([ # "bind locked" + ",switch:Lid Switch,exec,${lib.getExe config.modules.desktop.hyprlock.package}" ", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause" ", XF86AudioStop, exec, ${lib.getExe pkgs.playerctl} stop" ", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous" ", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next" - ]; + + ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ] ++ (if config.modules.desktop.wob.enable then [ + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && (wpctl get-volume @DEFAULT_AUDIO_SINK@ | grep -q MUTED && echo 0 > ${wobSock}) || wpctl get-volume @DEFAULT_AUDIO_SINK@ | sed 's/[^0-9]//g' > ${wobSock}" + ] else [ + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + ])); bindr = [ # "bind released" "SUPER, Super_L, exec, ${lib.getExe pkgs.nwg-drawer}" ]; diff --git a/modules/desktop/wob.nix b/modules/desktop/wob.nix new file mode 100644 index 0000000..5c0cb30 --- /dev/null +++ b/modules/desktop/wob.nix @@ -0,0 +1,49 @@ +{ lib, config, pkgs, ... }: + +with lib; +let + cfg = config.modules.desktop.wob; +in { + options.modules.desktop.wob = { + enable = mkEnableOption "Enable wob, a Wayland overlay bar"; + sockPath = mkOption { + description = "Wob sock location"; + type = types.str; + default = "$XDG_RUNTIME_DIR/wob.sock"; + }; + }; + + config = mkIf cfg.enable { + hm.wayland.windowManager.hyprland.settings.exec-once = let + path = cfg.sockPath; + script = pkgs.writeScript "launch-wob" '' + rm -f ${path} && mkfifo ${path} && tail -f ${path} | ${lib.getExe pkgs.wob} + ''; + in [ script ]; + hm.services.wob = { + enable = true; + settings = with config.colorScheme.palette; { + "" = { + timeout = 1000; + + border_offset = 2; + border_size = 2; + bar_padding = 2; + + anchor = "top"; + width = 300; + height = 30; + + margin = 12; + + border_color = "${base04}FF"; + background_color = "${base01}66"; + bar_color = "${base05}FF"; + + overflow_mode = "nowrap"; + output_mode = "focused"; + }; + }; + }; + }; +} \ No newline at end of file