[NixOS] Modify brightness.sh to use brightnessctl

This commit is contained in:
2025-08-13 21:36:34 -06:00
parent 8a972a72f3
commit 05ab80c13f
2 changed files with 84 additions and 3 deletions

View File

@@ -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")
] ++

View File

@@ -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