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%"
 | |
|   '';
 | |
| }
 |