Jafner.net/projects/razer-bat/razer-bat.sh
Joey Hafner fd20f1a9c2
Update razer-bat; now working!
- Update README.md to document installation and usage
- Implement razer-bat as simply as possible.
- Most parameters can be adjusted, but only mouse and dock names are required. Further implementation of customizability should be pretty easy.
2024-09-03 16:20:54 -07:00

97 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
WIRELESS_DEVICE_NAME=''
WIRED_DEVICE_NAME=''
# Init
WIRELESS_DEVICE_NAME=${WIRELESS_DEVICE_NAME:-'Razer Viper Ultimate'} # required, non-sane default
WIRED_DEVICE_NAME=${WIRED_DEVICE_NAME:-'Razer Mouse Dock'} # required, sane default
SYNC_ALL_DEVICES=${SYNC_ALL_DEVICES:-'false'} # optional; default false; applies color to all found devices
START_COLOR=${START_COLOR:-'255 0 0'} # optional; TODO
END_COLOR=${END_COLOR:-'0 255 0'} # optional; TODO
STEPS=${STEPS:-'20'} # optional; can be any factor of 100
# echo "WIRELESS_DEVICE_NAME: $WIRELESS_DEVICE_NAME"
# echo "WIRED_DEVICE_NAME: $WIRED_DEVICE_NAME"
# echo "SYNC_ALL_DEVICES: $SYNC_ALL_DEVICES"
# echo "START_COLOR: $START_COLOR"
# echo "END_COLOR: $END_COLOR"
# echo "STEPS: $STEPS"
# Function to calculate color between two colors by percentage
# Takes
# COLOR_PERCENTAGE=$1 # required
# START_COLOR_RANGE=$2 # default '255 0 0' (pure red)
# END_COLOR_RANGE=$3 # default '0 255 0' (pure green)
# STEPS=$4 # default 20
# Returns
# Space-separated RGB value like: 123 134 0
function get_intermediate_color() {
local COLOR_PERCENTAGE=$1
local START_COLOR_RANGE=${2:-255,0,0}
local END_COLOR_RANGE=${3:-0,255,0}
local STEPS=${4:-20}
IFS=',' read -r -a start_color <<< "$START_COLOR_RANGE"
IFS=',' read -r -a end_color <<< "$END_COLOR_RANGE"
local steps=$STEPS
local charge=$COLOR_PERCENTAGE
local step_r=$(( (end_color[0] - start_color[0]) / (steps + 1) ))
local step_g=$(( (end_color[1] - start_color[1]) / (steps + 1) ))
local step_b=$(( (end_color[2] - start_color[2]) / (steps + 1) ))
local intermediate_colors=()
for ((i = 1; i <= steps; i++)); do
local r=$(( start_color[0] + step_r * i ))
local g=$(( start_color[1] + step_g * i ))
local b=$(( start_color[2] + step_b * i ))
intermediate_colors+=("$r $g $b")
done
local index=$(( ( $charge / (100 / $steps ) ) ))
if [[ $index -gt ${#intermediate_colors[@]} ]]; then
index=${#intermediate_colors[@]}
fi
echo ${intermediate_colors[$index]}
}
# Function to read mouse charge level and return it as percentage
# Takes
# WIRELESS_DEVICE_NAME=$1
# Returns
# Percentage value between 0 and 100
function get_charge_percentage() {
local WIRELESS_DEVICE_NAME=$1
local CHARGE=$(\
razer-cli -d "$(\
echo "$(\
razer-cli -ls
)" |\
grep "$WIRELESS_DEVICE_NAME" |\
sed 's/://'
)" --battery print |\
grep charge |\
tr -s ' ' |\
cut -d' ' -f3
)
echo "$CHARGE"
}
# Our function for setting the new RGB color
# Takes
# WIRED_DEVICE_NAME=$1
# COLOR=$2 # space-separated
function set_dock_color () {
local WIRED_DEVICE_NAME=\"$1\"
local COLOR="$2"
echo razer-cli -d $WIRED_DEVICE_NAME -c $COLOR
razer-cli -d $WIRED_DEVICE_NAME -c $COLOR
}
# Main
set_dock_color "$WIRED_DEVICE_NAME" "$(get_intermediate_color "$(get_charge_percentage "$WIRELESS_DEVICE_NAME")")" &&\
echo "Updated \"$WIRED_DEVICE_NAME\" \($(get_charge_percentage "$WIRELESS_DEVICE_NAME")% battery)"