mirror of
				https://github.com/ItsDrike/nixdots
				synced 2025-10-31 14:56:36 +00:00 
			
		
		
		
	Use brightnessctl
This commit is contained in:
		
							parent
							
								
									0f4d3f1e05
								
							
						
					
					
						commit
						bb39670cd1
					
				
					 6 changed files with 38 additions and 165 deletions
				
			
		|  | @ -1,5 +1,6 @@ | ||||||
| _: { | _: { | ||||||
|   imports = [ |   imports = [ | ||||||
|     ./shared.nix |     ./shared.nix | ||||||
|  |     ./desktop.nix | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								home/packages/cli/desktop.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								home/packages/cli/desktop.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | ||||||
|  | { | ||||||
|  |   osConfig, | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   inherit (lib) mkIf; | ||||||
|  | 
 | ||||||
|  |   devType = osConfig.myOptions.device.roles.type; | ||||||
|  |   acceptedTypes = [ "laptop" "desktop" ]; | ||||||
|  | in { | ||||||
|  |   config = mkIf (builtins.elem devType acceptedTypes) { | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       trash-cli | ||||||
|  |       bitwarden-cli | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -38,11 +38,10 @@ | ||||||
|       # |       # | ||||||
|       # Brightness control |       # Brightness control | ||||||
|       # |       # | ||||||
|       "SUPER, Right, exec, brightness -i 5% -n" |       "SUPER, Right, exec, brightness 5%+" | ||||||
|       "SUPER, Left, exec, brightness -d 5% -n" |       "SUPER, Left, exec, brightness 5%-" | ||||||
|       ", XF86MonBrightnessUp, exec, brightness -i 5% -n" |       ", XF86MonBrightnessUp, exec, brightness 5%+" | ||||||
|       ", XF86MonBrightnessDown, exec, brightness -d 5% -n" |       ", XF86MonBrightnessDown, exec, brightness 5%-" | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
|       # |       # | ||||||
|       # Audio/Volume control |       # Audio/Volume control | ||||||
|  |  | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| }: let | }: let | ||||||
|   inherit (lib) mkIf; |   inherit (lib) mkIf; | ||||||
| 
 | 
 | ||||||
|   inherit (import ./packages {inherit pkgs;}) hyprland-swap-workspace hyprland-move-window; |   hyprPkgs = (import ./packages {inherit pkgs;}); | ||||||
| 
 | 
 | ||||||
|   cfg = osConfig.myOptions.home-manager.wms.hyprland; |   cfg = osConfig.myOptions.home-manager.wms.hyprland; | ||||||
| in { | in { | ||||||
|  | @ -15,10 +15,11 @@ in { | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   config = mkIf cfg.enable { |   config = mkIf cfg.enable { | ||||||
|     home.packages = with pkgs; [ |     home.packages = [ | ||||||
|       hyprland-swap-workspace |       hyprPkgs.hyprland-swap-workspace | ||||||
|       hyprland-move-window |       hyprPkgs.hyprland-move-window | ||||||
|       brightness |       pkgs.brightnessctl | ||||||
|  |       hyprPkgs.brightness | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|     wayland.windowManager.hyprland = { |     wayland.windowManager.hyprland = { | ||||||
|  |  | ||||||
|  | @ -1,166 +1,22 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| 
 | # This is mainly a wrapper, acting as just: `brightnessctl s $1` | ||||||
| # Parse arguments | # However, in addition, this will also produce a notification with | ||||||
| # ------------------------------------------------------------------------------------ | # the brightness level shown as a progress bar. | ||||||
| BRIGHTNESS_DIR="/sys/class/backlight/*" |  | ||||||
| SEND_NOTIFICATION=0 |  | ||||||
| URGENCY="normal" |  | ||||||
| INCREASE=0 |  | ||||||
| DECREASE=0 |  | ||||||
| SET=0 |  | ||||||
| BRIGHTNESS=0 |  | ||||||
| 
 |  | ||||||
| PARSED=$(getopt \ |  | ||||||
| 	--options=hnu:i:d:s:p:N \ |  | ||||||
| 	--longoptions=help,notification,urgency:,increase:,decrease:,set:,path:,no-notification \ |  | ||||||
| 	--name "$0" \ |  | ||||||
| 	-- \ |  | ||||||
| 	"$@") |  | ||||||
| 
 |  | ||||||
| if [ $? != 0 ]; then |  | ||||||
| 	exit 2 |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| eval set -- "$PARSED" |  | ||||||
| 
 |  | ||||||
| while [ "$1" ]; do |  | ||||||
| 	case "$1" in |  | ||||||
| 	-h | --help) |  | ||||||
| 		cat <<EOF |  | ||||||
| brightness is a cli tool that for displaying or modifying screen brightness. |  | ||||||
| 
 |  | ||||||
| Options: |  | ||||||
| -h | --help: Display this message |  | ||||||
| -n | --notification: Produce a desktop notification with brightness info |  | ||||||
| -N | --no-notification: Don't produce a desktop notification with brightness info |  | ||||||
| -u | --urgency [URGENCY]: Pass over notify-send urgency attribute (default: normal) |  | ||||||
| -i | --increase [BRIGHTNESS]: Increase the brightness by given amount |  | ||||||
| -d | --decrease [BRIGHTNESS]: Decrease the brightness by given amount |  | ||||||
| -s | --set [BRIGHTNESS]: Set new brightness level |  | ||||||
| -p | --path [DIR_PATH]: Path to brightness directory (default: /sys/class/backlight/*) |  | ||||||
| 
 |  | ||||||
| Valid values: |  | ||||||
|     URGENCY: low, normal, critical |  | ||||||
|     DIR_PATH: Valid path to a directory |  | ||||||
|     BRIGHTNESS: |  | ||||||
|         specific value - Example: 10 |  | ||||||
|         percentage value - Example: 10% |  | ||||||
| EOF |  | ||||||
| 		exit 0 |  | ||||||
| 		;; |  | ||||||
| 	-n | --notification) |  | ||||||
| 		SEND_NOTIFICATION=1 |  | ||||||
| 		;; |  | ||||||
| 	-N | --no-notification) |  | ||||||
| 		SEND_NOTIFICATION=0 |  | ||||||
| 		;; |  | ||||||
| 	-u | --urgency) |  | ||||||
| 		URGENCY="$2" |  | ||||||
| 		shift |  | ||||||
| 		;; |  | ||||||
| 	-i | --increase) |  | ||||||
| 		INCREASE=1 |  | ||||||
| 		BRIGHTNESS="$2" |  | ||||||
| 		shift |  | ||||||
| 		;; |  | ||||||
| 	-d | --decrease) |  | ||||||
| 		DECREASE=1 |  | ||||||
| 		BRIGHTNESS="$2" |  | ||||||
| 		shift |  | ||||||
| 		;; |  | ||||||
| 	-s | --set) |  | ||||||
| 		SET=1 |  | ||||||
| 		BRIGHTNESS="$2" |  | ||||||
| 		shift |  | ||||||
| 		;; |  | ||||||
| 	-p | --path) |  | ||||||
| 		BRIGHTNESS_DIR="$2" |  | ||||||
| 		shift |  | ||||||
| 		;; |  | ||||||
| 	--) |  | ||||||
| 		shift |  | ||||||
| 		break |  | ||||||
| 		;; |  | ||||||
| 	*) |  | ||||||
| 		echo "Unknown argument '$1', use -h or --help for help" |  | ||||||
| 		exit 1 |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| 	shift |  | ||||||
| done |  | ||||||
| 
 |  | ||||||
| # Define constants based on parsed arguments |  | ||||||
| # ------------------------------------------------------------------------------------ |  | ||||||
| BRIGHTNESS_FILE="$BRIGHTNESS_DIR/brightness" |  | ||||||
| BRIGHTNESS_MAX="$(cat $BRIGHTNESS_DIR/max_brightness)" |  | ||||||
| 
 |  | ||||||
| # Helper functins |  | ||||||
| # ------------------------------------------------------------------------------------ |  | ||||||
| 
 | 
 | ||||||
| # Send brightness level desktop notification, showing the given brightness level | # Send brightness level desktop notification, showing the given brightness level | ||||||
| # as progress bar, along with given message. | # as progress bar, along with given message. | ||||||
| # $1 - brightness level (number 0-100) | # $1 - brightness level (number 0-100) | ||||||
| # $2 - message (notification body) |  | ||||||
| send_brightness_notify() { | send_brightness_notify() { | ||||||
| 	percent_brightness="$1" | 	percent_brightness="$1" | ||||||
| 	msg="$2" |  | ||||||
| 
 | 
 | ||||||
| 	notify-send \ | 	notify-send \ | ||||||
| 		--app-name=brightness \ | 		--app-name="brightness" \ | ||||||
| 		--urgency="$URGENCY" \ | 		--urgency="normal" \ | ||||||
| 		-h int:value:$percent_brightness \ | 		-h int:value:$percent_brightness \ | ||||||
| 		-h string:synchronous:brightness \ | 		-h string:synchronous:brightness \ | ||||||
| 		"brightness" "$msg" | 		"brightness" "Level: $percent_brightness" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| # Set brightness to given absolute value | out="$(brightnessctl s "$1")" | ||||||
| # $1 - brightness absolute value | cur_percent="$(echo "$out" | grep "Current" | grep -oP '\(\d+%' | tr -d '()%')" | ||||||
| set_brightness() { | send_brightness_notify "$cur_percent" | ||||||
| 	# there should be sudo config allowing this command without password |  | ||||||
| 	echo "$1" | sudo tee $BRIGHTNESS_FILE >/dev/null |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # Main Logic |  | ||||||
| # ------------------------------------------------------------------------------------ |  | ||||||
| 
 |  | ||||||
| # Determine the absolute new brightness level |  | ||||||
| if [ $INCREASE -eq 1 ] || [ $DECREASE -eq 1 ] || [ $SET -eq 1 ]; then |  | ||||||
| 	# If we're dealing with percentages, change to absolutes |  | ||||||
| 	if echo "$BRIGHTNESS" | grep -qE '%$'; then |  | ||||||
| 		numeric=$(echo "$BRIGHTNESS" | sed 's/.$//') |  | ||||||
| 		absolute=$(echo "($BRIGHTNESS_MAX / 100) * $numeric" | bc -l) |  | ||||||
| 		BRIGHTNESS=$(printf "%.0f" $absolute) |  | ||||||
| 	fi |  | ||||||
| 
 |  | ||||||
| 	# Get the new requested absolute brightness |  | ||||||
| 	if [ $SET -eq 1 ]; then |  | ||||||
| 		new_brightness=$BRIGHTNESS |  | ||||||
| 	elif [ $DECREASE -eq 1 ]; then |  | ||||||
| 		cur_brightness=$(cat $BRIGHTNESS_FILE) |  | ||||||
| 		new_brightness=$(($cur_brightness - $BRIGHTNESS)) |  | ||||||
| 	else |  | ||||||
| 		cur_brightness=$(cat $BRIGHTNESS_FILE) |  | ||||||
| 		new_brightness=$(($cur_brightness + $BRIGHTNESS)) |  | ||||||
| 	fi |  | ||||||
| 
 |  | ||||||
| 	# Ensure we respect max/min boundaries |  | ||||||
| 	if [ $new_brightness -lt 0 ]; then |  | ||||||
| 		new_brightness=0 |  | ||||||
| 	elif [ $new_brightness -gt $BRIGHTNESS_MAX ]; then |  | ||||||
| 		new_brightness=$BRIGHTNESS_MAX |  | ||||||
| 	fi |  | ||||||
| 
 |  | ||||||
| 	# Update the brightness |  | ||||||
| 	set_brightness $new_brightness |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| cur_brightness=$(cat $BRIGHTNESS_FILE) |  | ||||||
| percent_brightness=$(echo "($cur_brightness / $BRIGHTNESS_MAX) * 100" | bc -l) |  | ||||||
| percent_brightness_2f=$(printf "%.2f" $percent_brightness) |  | ||||||
| percent_brightness_rounded=$(printf "%.0f" $percent_brightness) |  | ||||||
| 
 |  | ||||||
| if [ $SEND_NOTIFICATION -eq 1 ]; then |  | ||||||
| 	send_brightness_notify "$percent_brightness_rounded" "Level: $percent_brightness_rounded" |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| echo "Brightness: ${percent_brightness_2f}% (absolute: $cur_brightness)" |  | ||||||
|  |  | ||||||
|  | @ -2,5 +2,3 @@ | ||||||
|   pkgs.writeShellScriptBin "brightness" '' |   pkgs.writeShellScriptBin "brightness" '' | ||||||
|     ${builtins.readFile ./brightness.sh} |     ${builtins.readFile ./brightness.sh} | ||||||
|   '' |   '' | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue