Enable Dell XPS Mute Mic Key (#5252)

* If on XPS, enable XPS mute mic key with LED and fallback to original mic mute flow

* fix hardcode of alsa card 0 to resolved id

* Extract omarchy-hyprland-monitor-focused

* Extract dedicated xps mute script

---------

Co-authored-by: David Heinemeier Hansson <david@hey.com>
This commit is contained in:
Spencer Bull
2026-04-10 06:35:41 -04:00
committed by GitHub
co-authored by David Heinemeier Hansson
parent 5ca74821d4
commit 1746a86a7b
8 changed files with 64 additions and 7 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
# Switch between audio outputs while preserving the mute status. By default mapped to Super + Mute.
focused_monitor="$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
focused_monitor=$(omarchy-hyprland-monitor-focused)
sinks=$(pactl -f json list sinks | jq '[.[] | select((.ports | length == 0) or ([.ports[]? | .availability != "not available"] | any))]')
sinks_count=$(echo "$sinks" | jq '. | length')
+9
View File
@@ -0,0 +1,9 @@
#!/bin/bash
# Toggle microphone mute. Dell XPS systems get special handling for the hardware LED.
if omarchy-hw-match "XPS"; then
omarchy-cmd-mic-mute-xps
else
swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)" --input-volume mute-toggle
fi
+44
View File
@@ -0,0 +1,44 @@
#!/bin/bash
# Toggle microphone mute on Dell XPS systems. Uses wpctl for reliable toggling
# and syncs the ALSA capture switch so the hardware mic mute LED follows state.
wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle >/dev/null
if pactl get-source-mute @DEFAULT_SOURCE@ | rg -q 'yes'; then
alsa_value='off,off'
osd_message='Microphone muted'
osd_icon='microphone-sensitivity-muted-symbolic'
else
alsa_value='on,on'
osd_message='Microphone on'
osd_icon='audio-input-microphone-symbolic'
fi
if [[ -e /sys/class/leds/platform::micmute/brightness ]]; then
default_source=$(pactl get-default-source)
alsa_card=$(pactl -f json list sources | jq -r --arg source "$default_source" '
.[] | select(.name == $source) |
.properties["alsa.card"] // .properties["api.alsa.card"] // .properties["api.alsa.pcm.card"] // empty
' | head -1)
if [[ -n $alsa_card ]]; then
cards=("$alsa_card")
else
mapfile -t cards < <(compgen -G '/proc/asound/card*' | rg -o 'card[0-9]+' | sed 's/card//' | sort -u)
fi
for card in "${cards[@]}"; do
while IFS= read -r control; do
if [[ $control != *"Jack Microphone"* ]]; then
amixer -c "$card" cset "$control" "$alsa_value" >/dev/null 2>&1 || true
break 2
fi
done < <(amixer -c "$card" controls 2>/dev/null | rg -o "name='[^']*Microphone Capture Switch'")
done
fi
swayosd-client \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-message "$osd_message" \
--custom-icon "$osd_icon"
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
# Print the name of the currently focused Hyprland monitor.
hyprctl monitors -j | jq -r '.[] | select(.focused == true).name'
+1 -2
View File
@@ -18,7 +18,6 @@ fi
# Silently quit Walker on overlay
walker -q
focused=$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')
terminal=$(xdg-terminal-exec --print-id)
for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
@@ -51,4 +50,4 @@ for m in $(hyprctl monitors -j | jq -r '.[] | .name'); do
esac
done
hyprctl dispatch focusmonitor $focused
hyprctl dispatch focusmonitor $(omarchy-hyprland-monitor-focused)
+1 -1
View File
@@ -9,7 +9,7 @@ progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
[[ $progress == "0.00" ]] && progress="0.01"
swayosd-client \
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-icon display-brightness \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"
+1 -1
View File
@@ -9,7 +9,7 @@ progress="$(awk -v p="$percent" 'BEGIN{printf "%.2f", p/100}')"
[[ $progress == "0.00" ]] && progress="0.01"
swayosd-client \
--monitor "$(hyprctl monitors -j | jq -r '.[]|select(.focused==true).name')" \
--monitor "$(omarchy-hyprland-monitor-focused)" \
--custom-icon keyboard-brightness \
--custom-progress "$progress" \
--custom-progress-text "${percent}%"
+2 -2
View File
@@ -1,11 +1,11 @@
# Only display the OSD on the currently focused monitor
$osdclient = swayosd-client --monitor "$(hyprctl monitors -j | jq -r '.[] | select(.focused == true).name')"
$osdclient = swayosd-client --monitor "$(omarchy-hyprland-monitor-focused)"
# Laptop multimedia keys for volume and LCD brightness (with OSD)
bindeld = ,XF86AudioRaiseVolume, Volume up, exec, $osdclient --output-volume raise
bindeld = ,XF86AudioLowerVolume, Volume down, exec, $osdclient --output-volume lower
bindeld = ,XF86AudioMute, Mute, exec, $osdclient --output-volume mute-toggle
bindeld = ,XF86AudioMicMute, Mute microphone, exec, $osdclient --input-volume mute-toggle
bindeld = ,XF86AudioMicMute, Mute microphone, exec, omarchy-cmd-mic-mute
bindeld = ,XF86MonBrightnessUp, Brightness up, exec, omarchy-brightness-display +5%
bindeld = ,XF86MonBrightnessDown, Brightness down, exec, omarchy-brightness-display 5%-
bindeld = ,XF86KbdBrightnessUp, Keyboard brightness up, exec, omarchy-brightness-keyboard up