fix(hyprland): mic mute via wpctl -- swayosd 0.2.1 input-mute is a no-op
swayosd-client --input-volume mute-toggle draws the OSD but never flips the default source's mute (its output-mute path works; input does not). Confirmed on hardware: wpctl set-mute @DEFAULT_SOURCE@ toggle flips the state, swayosd does not. Do the real toggle with wpctl and keep an OSD via swayosd's --custom-icon/--custom-message. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,13 +1,31 @@
|
|||||||
# Hyprland — fully driven by config.nomarchy.theme (theme-state.json).
|
# Hyprland — fully driven by config.nomarchy.theme (theme-state.json).
|
||||||
# Gaps, borders and colors are baked from the JSON at eval time; theme
|
# Gaps, borders and colors are baked from the JSON at eval time; theme
|
||||||
# changes arrive via `home-manager switch`.
|
# changes arrive via `home-manager switch`.
|
||||||
{ config, lib, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
t = config.nomarchy.theme;
|
t = config.nomarchy.theme;
|
||||||
c = t.colors;
|
c = t.colors;
|
||||||
inherit (config.nomarchy.lib) rgb rgba;
|
inherit (config.nomarchy.lib) rgb rgba;
|
||||||
|
|
||||||
|
# swayosd 0.2.1's `--input-volume mute-toggle` draws the OSD but never
|
||||||
|
# flips the source mute (verified on hardware: wpctl toggles the state,
|
||||||
|
# swayosd's input-mute path is a no-op — unlike its working output-mute
|
||||||
|
# path). Do the real toggle with wpctl, then show an OSD reflecting the
|
||||||
|
# resulting state via swayosd's --custom-icon/--custom-message.
|
||||||
|
micMute = pkgs.writeShellScript "nomarchy-mic-mute" ''
|
||||||
|
${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SOURCE@ toggle
|
||||||
|
if ${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SOURCE@ | grep -q MUTED; then
|
||||||
|
${pkgs.swayosd}/bin/swayosd-client \
|
||||||
|
--custom-icon microphone-sensitivity-muted-symbolic \
|
||||||
|
--custom-message "Microphone muted"
|
||||||
|
else
|
||||||
|
${pkgs.swayosd}/bin/swayosd-client \
|
||||||
|
--custom-icon microphone-sensitivity-high-symbolic \
|
||||||
|
--custom-message "Microphone unmuted"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
# SUPER+1..9 / SUPER+SHIFT+1..9 workspace binds, generated.
|
# SUPER+1..9 / SUPER+SHIFT+1..9 workspace binds, generated.
|
||||||
workspaceBinds = builtins.concatLists (builtins.genList
|
workspaceBinds = builtins.concatLists (builtins.genList
|
||||||
(i:
|
(i:
|
||||||
@@ -150,7 +168,8 @@ in
|
|||||||
|
|
||||||
bindl = [
|
bindl = [
|
||||||
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
||||||
", XF86AudioMicMute, exec, swayosd-client --input-volume mute-toggle"
|
# swayosd's input mute-toggle is broken on 0.2.1 (see micMute above).
|
||||||
|
", XF86AudioMicMute, exec, ${micMute}"
|
||||||
", XF86AudioPlay, exec, playerctl play-pause"
|
", XF86AudioPlay, exec, playerctl play-pause"
|
||||||
", XF86AudioPause, exec, playerctl play-pause"
|
", XF86AudioPause, exec, playerctl play-pause"
|
||||||
", XF86AudioNext, exec, playerctl next"
|
", XF86AudioNext, exec, playerctl next"
|
||||||
|
|||||||
Reference in New Issue
Block a user