From 980f480919ee5d1345577700c4e0746aae6cb5d8 Mon Sep 17 00:00:00 2001 From: ryukamish Date: Fri, 10 Apr 2026 19:29:04 +0530 Subject: add: external monitor brightness module --- waybar/brightness | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100755 waybar/brightness (limited to 'waybar/brightness') diff --git a/waybar/brightness b/waybar/brightness new file mode 100755 index 0000000..138f5ee --- /dev/null +++ b/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 " + 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 -- cgit v1.3