summaryrefslogtreecommitdiff
path: root/.local/bin/waybar-brightness
diff options
context:
space:
mode:
Diffstat (limited to '.local/bin/waybar-brightness')
-rwxr-xr-x.local/bin/waybar-brightness69
1 files changed, 69 insertions, 0 deletions
diff --git a/.local/bin/waybar-brightness b/.local/bin/waybar-brightness
new file mode 100755
index 0000000..138f5ee
--- /dev/null
+++ b/.local/bin/waybar-brightness
@@ -0,0 +1,69 @@
+#!/usr/bin/env bash
+
+# --- CONFIGURATION ---
+DISPLAY_NUM=1
+STEP=5
+STATE_FILE="/tmp/waybar_brightness.tmp"
+# ---------------------
+
+# Function to send the actual DDC/CI command in the background
+set_brightness_in_background() {
+ pkill -f "ddcutil.*setvcp 10"
+ (ddcutil --display $DISPLAY_NUM setvcp 10 $1) &
+}
+
+# Ensure state file exists, or create it by querying the monitor
+if [ ! -f "$STATE_FILE" ]; then
+ # ddcutil terse output format: "VCP 10 C <current> <max>"
+ initial_brightness=$(ddcutil --display $DISPLAY_NUM getvcp 10 -t 2>/dev/null | awk '{print $4}')
+ # Fallback to 50 if ddcutil fails or returns non-numeric
+ if ! [[ "$initial_brightness" =~ ^[0-9]+$ ]]; then
+ initial_brightness=50
+ fi
+ echo "$initial_brightness" >"$STATE_FILE"
+fi
+
+current=$(cat "$STATE_FILE")
+# Validate current is a number, fallback to 50 if corrupted
+if ! [[ "$current" =~ ^[0-9]+$ ]]; then
+ current=50
+ echo "$current" >"$STATE_FILE"
+fi
+
+case "$1" in
+"get")
+ echo "$current"
+ ;;
+"up")
+ new_brightness=$((current + STEP > 100 ? 100 : current + STEP))
+ if [ "$current" -ne "$new_brightness" ]; then
+ echo "$new_brightness" >"$STATE_FILE"
+ set_brightness_in_background "$new_brightness"
+ fi
+ pkill -RTMIN+9 waybar # Can add whatever RTMIN+n you please, as long as it's an integer. Make sure the signals match between the config and script.
+ ;;
+"down")
+ new_brightness=$((current - STEP < 0 ? 0 : current - STEP))
+ if [ "$current" -ne "$new_brightness" ]; then
+ echo "$new_brightness" >"$STATE_FILE"
+ set_brightness_in_background "$new_brightness"
+ fi
+ pkill -RTMIN+9 waybar
+ ;;
+"right_click")
+ new_brightness=0
+ if [ "$current" -ne "$new_brightness" ]; then
+ echo "$new_brightness" >"$STATE_FILE"
+ set_brightness_in_background "$new_brightness"
+ fi
+ pkill -RTMIN+9 waybar
+ ;;
+"left_click")
+ new_brightness=100
+ if [ "$current" -ne "$new_brightness" ]; then
+ echo "$new_brightness" >"$STATE_FILE"
+ set_brightness_in_background "$new_brightness"
+ fi
+ pkill -RTMIN+9 waybar
+ ;;
+esac