diff --git a/dotfiles/config/xmonad/xmonad.hs b/dotfiles/config/xmonad/xmonad.hs index 1ee904f9..a01624e7 100644 --- a/dotfiles/config/xmonad/xmonad.hs +++ b/dotfiles/config/xmonad/xmonad.hs @@ -1059,7 +1059,7 @@ addKeys conf@XConfig { modMask = modm } = , ((hyper .|. shiftMask, xK_q), spawn "toggle_mute_current_window.sh") , ((hctrl, xK_q), spawn "toggle_mute_current_window.sh only") - , ((0, xF86XK_MonBrightnessUp), spawn "brightness.sh 5") + , ((0, xF86XK_MonBrightnessUp), spawn "brightness.sh +5") , ((0, xF86XK_MonBrightnessDown), spawn "brightness.sh -5") ] ++ diff --git a/dotfiles/lib/bin/brightness.sh b/dotfiles/lib/bin/brightness.sh index 2974f818..86865663 100755 --- a/dotfiles/lib/bin/brightness.sh +++ b/dotfiles/lib/bin/brightness.sh @@ -1,3 +1,84 @@ -#!/usr/bin/env sh +#!/usr/bin/env bash -volnoti-show $(sudo brightness_manager.py -c "$@" -p) +# Get the brightness argument (default to empty string to just show current) +ARG="${1:-}" + +# Function to get current brightness percentage +get_brightness_percentage() { + # Get list of devices + local devices=$(brightnessctl --list 2>/dev/null | cut -d' ' -f2 | cut -d"'" -f2) + local device_count=$(echo "$devices" | wc -w) + + if [ "$device_count" -eq 0 ]; then + echo "50" # Default fallback + return + fi + + if [ "$device_count" -eq 1 ]; then + # Single device - just output its percentage + local info=$(brightnessctl 2>/dev/null | grep -oP '\d+%' | head -1 | tr -d '%') + if [ -n "$info" ]; then + echo "$info" + else + echo "50" + fi + else + # Multiple devices - output each device's brightness + local output="" + for device in $devices; do + local info=$(brightnessctl -d "$device" 2>/dev/null | grep -oP '\d+%' | head -1 | tr -d '%') + if [ -n "$info" ]; then + if [ -z "$output" ]; then + output="${device}:${info}" + else + output="${output} ${device}:${info}" + fi + fi + done + + if [ -n "$output" ]; then + echo "$output" + else + echo "50" + fi + fi +} + +# Apply brightness change if argument provided +if [ -n "$ARG" ]; then + # Determine if it's absolute or relative + if [[ "$ARG" == +* ]]; then + # Relative increase (e.g., +5) + BRIGHTNESS_CMD="${ARG:1}%+" + elif [[ "$ARG" == -* ]]; then + # Relative decrease (e.g., -5) + BRIGHTNESS_CMD="${ARG:1}%-" + else + # Absolute value (e.g., 50) + BRIGHTNESS_CMD="${ARG}%" + fi + + # Try to apply to all devices + # First, try to get list of devices + DEVICES=$(brightnessctl --list 2>/dev/null | cut -d' ' -f2 | cut -d"'" -f2) + + if [ -n "$DEVICES" ]; then + # Apply to each device + for device in $DEVICES; do + brightnessctl -d "$device" set "$BRIGHTNESS_CMD" >/dev/null 2>&1 + done + else + # Fallback: just run brightnessctl without specifying device + brightnessctl set "$BRIGHTNESS_CMD" >/dev/null 2>&1 + fi +fi + +# Get current brightness percentage for display +BRIGHTNESS=$(get_brightness_percentage) + +# Show notification if volnoti-show is available +if command -v volnoti-show &> /dev/null; then + volnoti-show "$BRIGHTNESS" +else + echo "$BRIGHTNESS" +fi