66 lines
1.6 KiB
Bash
Executable File
66 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
CONFIG="${BRIGHTNESS_AUTOMATION_CONFIG:-$HOME/.config/brightness-automation/env}"
|
|
if [[ -f "$CONFIG" ]]; then
|
|
# shellcheck disable=SC1090
|
|
source "$CONFIG"
|
|
fi
|
|
|
|
MODEL="${BRIGHTNESS_DDCUTIL_MODEL:-HG342PCB}"
|
|
DISPLAY_NUM="${BRIGHTNESS_DDCUTIL_DISPLAY:-1}"
|
|
BUS_NUM="${BRIGHTNESS_DDCUTIL_BUS:-16}"
|
|
BACKLIGHT_PATH="${BRIGHTNESS_SYNC_BACKLIGHT:-/sys/class/backlight/intel_backlight}"
|
|
INTERVAL="${BRIGHTNESS_SYNC_INTERVAL:-1}"
|
|
MIN_PERCENT="${BRIGHTNESS_SYNC_MIN_PERCENT:-1}"
|
|
|
|
brightness_percent() {
|
|
local current max percent
|
|
|
|
current="$(<"${BACKLIGHT_PATH}/brightness")"
|
|
max="$(<"${BACKLIGHT_PATH}/max_brightness")"
|
|
percent="$(( (current * 100 + max / 2) / max ))"
|
|
|
|
if (( percent < MIN_PERCENT )); then
|
|
percent="$MIN_PERCENT"
|
|
elif (( percent > 100 )); then
|
|
percent=100
|
|
fi
|
|
|
|
printf '%s\n' "$percent"
|
|
}
|
|
|
|
run_ddcutil() {
|
|
if sudo -n ddcutil --bus "$BUS_NUM" getvcp 10 >/dev/null 2>&1; then
|
|
sudo -n ddcutil --bus "$BUS_NUM" "$@"
|
|
return
|
|
fi
|
|
|
|
if sudo -n ddcutil --display "$DISPLAY_NUM" getvcp 10 >/dev/null 2>&1; then
|
|
sudo -n ddcutil --display "$DISPLAY_NUM" "$@"
|
|
return
|
|
fi
|
|
|
|
if sudo -n ddcutil --model "$MODEL" getvcp 10 >/dev/null 2>&1; then
|
|
sudo -n ddcutil --model "$MODEL" "$@"
|
|
return
|
|
fi
|
|
|
|
echo "External ${MODEL} was not reachable via sudo -n ddcutil." >&2
|
|
return 1
|
|
}
|
|
|
|
last_percent=""
|
|
|
|
while true; do
|
|
percent="$(brightness_percent)"
|
|
|
|
if [[ "$percent" != "$last_percent" ]]; then
|
|
if run_ddcutil setvcp 10 "$percent" >/dev/null; then
|
|
last_percent="$percent"
|
|
fi
|
|
fi
|
|
|
|
sleep "$INTERVAL"
|
|
done
|