Files
i3-dot/i3/scripts/power-profiles
T
2026-06-15 02:07:53 +07:00

65 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Simple power-profiles-daemon switcher using rofi and static theme, with notification
#
# Copyright (C) 2025 Johannes Kamprad
#
# SPDX-License-Identifier: GPL-3.0-or-later
# needs rofi config:
# $HOME/.config/rofi/powermenu.rasi
ROFI_THEME="${HOME}/.config/rofi/power-profiles.rasi"
# Dependency checks
command -v powerprofilesctl >/dev/null 2>&1 || { echo "powerprofilesctl not found"; exit 1; }
command -v rofi >/dev/null 2>&1 || { echo "rofi not found"; exit 1; }
if ! command -v notify-send >/dev/null 2>&1; then
notify_send_missing=true
fi
current_profile="$(powerprofilesctl get 2>/dev/null)"
ROFI_ARGS=(-dmenu -i -theme "$ROFI_THEME" -p "Change Profile" -mesg "<b>Current used:</b> $current_profile" -markup-rows)
# Menu entries
cancel=" Cancel"
perf=" Performance"
balanced=" Balanced"
powersave=" Power Saver"
# sets chancel to be on top
options="$cancel"
if powerprofilesctl list | grep -q "performance"; then
options="$options\n$perf"
fi
if powerprofilesctl list | grep -q "balanced"; then
options="$options\n$balanced"
fi
if powerprofilesctl list | grep -q "power-saver"; then
options="$options\n$powersave"
fi
# Show menu
chosen="$(echo -e "$options" | rofi "${ROFI_ARGS[@]}")"
# Run selection
case $chosen in
"$perf")
powerprofilesctl set performance
;;
"$balanced")
powerprofilesctl set balanced
;;
"$powersave")
powerprofilesctl set power-saver
;;
"$cancel"|"")
exit 0
;;
esac
# Send notification if available
if [[ "$chosen" != "$cancel" && -z "${notify_send_missing}" ]]; then
notify-send -i dialog-information "Power Profile Changed" "New profile: ${chosen}"
fi