51 lines
1.6 KiB
Nix
51 lines
1.6 KiB
Nix
{ pkgs }:
|
|
pkgs.writeShellApplication {
|
|
# Only for GIGABYTE G32QC monitor
|
|
name = "ddc-brightness";
|
|
runtimeInputs = with pkgs; [ ddcutil ];
|
|
text = ''
|
|
usage() {
|
|
echo "Usage: ddc-brightness VALUE"
|
|
echo "Possible values are +X, -X or X"
|
|
exit 1
|
|
}
|
|
BRIGHTNESS_REGEX="^(-|\+)*[0-9]+$"
|
|
test -n 1 || usage
|
|
CACHE_FILE="/run/user/$UID/current-brightness"
|
|
CURRENT_BRIGHTNESS=0
|
|
if [ -f "$CACHE_FILE" ]; then
|
|
CURRENT_BRIGHTNESS=$(cat "$CACHE_FILE")
|
|
else
|
|
CURRENT_BRIGHTNESS=$(ddcutil getvcp 10 | tr -s " " | cut -d " " -f 9 | tr -d ",")
|
|
echo "$CURRENT_BRIGHTNESS" > "$CACHE_FILE"
|
|
fi
|
|
echo "Current brightness level is $CURRENT_BRIGHTNESS"
|
|
if [[ ! "$1" =~ $BRIGHTNESS_REGEX ]]; then
|
|
echo "Invalid value: '$1'"
|
|
exit 1
|
|
fi
|
|
NEW_BRIGHTNESS_VALUE=0
|
|
if [ "''${1:0:1}" == "+" ]; then
|
|
NEW_BRIGHTNESS_VALUE=$(("$CURRENT_BRIGHTNESS" + "''${1:1}"))
|
|
elif [ "''${1:0:1}" == "-" ]; then
|
|
NEW_BRIGHTNESS_VALUE=$(("$CURRENT_BRIGHTNESS" - "''${1:1}"))
|
|
else
|
|
NEW_BRIGHTNESS_VALUE="$1"
|
|
fi
|
|
if [ "$NEW_BRIGHTNESS_VALUE" -lt 0 ]; then
|
|
NEW_BRIGHTNESS_VALUE=0
|
|
elif [ "$NEW_BRIGHTNESS_VALUE" -gt 100 ]; then
|
|
NEW_BRIGHTNESS_VALUE=100
|
|
fi
|
|
echo "$NEW_BRIGHTNESS_VALUE" > "$CACHE_FILE"
|
|
echo "Setting brightness level to $NEW_BRIGHTNESS_VALUE"
|
|
ddcutil setvcp 10 "$NEW_BRIGHTNESS_VALUE"
|
|
dunstify \
|
|
--appname "volumectl"\
|
|
--replace 9002\
|
|
--urgency low\
|
|
--timeout 1250\
|
|
--hints "int:value:$NEW_BRIGHTNESS_VALUE"\
|
|
" $NEW_BRIGHTNESS_VALUE%"
|
|
'';
|
|
}
|