#!/bin/sh

# scaling
# Copyright (c)2021-2025 Microworks Limited
# All Rights Reserved

BRIGHT_RED='\033[1;31m'
BRIGHT_GREEN='\033[1;32m'
NC='\033[0m' # No Color

command="$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_governors)"
governors=(${command// / })

# Build governor list with correct colors
governorList=""
for gov in "${governors[@]}"; do
	if [ -n "$governorList" ]; then
		governorList="${governorList}|"
	fi
	governorList="${governorList}${BRIGHT_GREEN}${gov}${NC}"
done

if [ -z "$1" ]; then
	echo -e "scaling <$governorList> [--persist]"
	exit 0
fi

scaling=$(cat /sys/devices/system/cpu/cpufreq/policy0/scaling_governor)

if [[ ! " ${governors[@]} " =~ " $1 " ]]; then
	echo -e "Invalid governor: ${BRIGHT_RED}$1${NC}"
	exit 1
fi

if [ "$2" == "--persist" ]; then
	cat <<EOF > /lib/systemd/system/scaling.service
[Unit]
Description=Select Scaling Governor

[Service]
Type=oneshot
ExecStart=/bin/sh -c "/bin/echo \"$1\" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor"

[Install]
WantedBy=multi-user.target
EOF
	echo -e "Governor: ${BRIGHT_GREEN}$1${NC} (default)"
else
	echo $1 > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
	echo -e "Governor: ${BRIGHT_GREEN}$1${NC}"
fi
