Add power profile and fan strategy waybar modules - scripts/power-profile.sh: waybar module + wofi menu for powerprofilesctl - scripts/fan-profile.sh: waybar module + wofi menu for fw-fanctrl - waybar/config.jsonc: add custom/power-profile and custom/fan-profile modules - waybar/style.css: add padding and class colors for new modules - packages.txt: add power-profiles-daemon and fw-fanctrl - install.sh: symlink new scripts to ~/.local/bin

This commit is contained in:
funman300
2026-04-22 17:27:29 -07:00
parent 0cd43b9e54
commit 54689f9781
6 changed files with 90 additions and 2 deletions
+2
View File
@@ -30,6 +30,8 @@ echo "==> Installing scripts"
mkdir -p ~/.local/bin mkdir -p ~/.local/bin
ln -sf "$(pwd)/scripts/powermenu.sh" ~/.local/bin/powermenu ln -sf "$(pwd)/scripts/powermenu.sh" ~/.local/bin/powermenu
ln -sf "$(pwd)/scripts/clipboard.sh" ~/.local/bin/clipboard-picker ln -sf "$(pwd)/scripts/clipboard.sh" ~/.local/bin/clipboard-picker
ln -sf "$(pwd)/scripts/power-profile.sh" ~/.local/bin/power-profile
ln -sf "$(pwd)/scripts/fan-profile.sh" ~/.local/bin/fan-profile
echo "==> Enabling systemd user services" echo "==> Enabling systemd user services"
mkdir -p ~/.config/systemd/user mkdir -p ~/.config/systemd/user
+2
View File
@@ -33,4 +33,6 @@ zathura-pdf-mupdf
thunar-archive-plugin thunar-archive-plugin
file-roller file-roller
xwayland-satellite xwayland-satellite
power-profiles-daemon
fw-fanctrl
+33
View File
@@ -0,0 +1,33 @@
#!/bin/bash
if [ "$1" = "--menu" ]; then
CHOICE=$(fw-fanctrl print list 2>/dev/null \
| grep "^-" \
| sed 's/^- //' \
| wofi --dmenu \
--prompt "Fan Strategy:" \
--width 260 \
--height 300 \
--hide-scroll \
--no-actions \
--insensitive)
[ -n "$CHOICE" ] && fw-fanctrl use "$CHOICE" && pkill -RTMIN+9 waybar
exit
fi
OUTPUT=$(fw-fanctrl print 2>/dev/null)
CURRENT=$(echo "$OUTPUT" | awk -F"'" '/^Strategy:/{print $2}')
SPEED=$(echo "$OUTPUT" | awk '/^Speed:/{print $2}')
case "$CURRENT" in
laziest|deaf) ICON="󰈐"; LEVEL="silent" ;;
lazy) ICON="󰈐"; LEVEL="quiet" ;;
medium) ICON="󰈐"; LEVEL="medium" ;;
agile) ICON="󰈐"; LEVEL="agile" ;;
very-agile) ICON="󰈐"; LEVEL="fast" ;;
aeolus) ICON="󰈐"; LEVEL="max" ;;
*) ICON="󰈐"; LEVEL="$CURRENT" ;;
esac
printf '{"text": "%s %s", "tooltip": "Fan strategy: %s\\nSpeed: %s\\nClick to change", "class": "%s"}\n' \
"$ICON" "$CURRENT" "$CURRENT" "$SPEED" "$LEVEL"
+26
View File
@@ -0,0 +1,26 @@
#!/bin/bash
if [ "$1" = "--menu" ]; then
CHOICE=$(printf "󰓅 performance\n󰕲 balanced\n󰌪 power-saver" \
| wofi --dmenu \
--prompt "Power Profile:" \
--width 260 \
--height 160 \
--hide-scroll \
--no-actions \
--insensitive \
| awk '{print $NF}')
[ -n "$CHOICE" ] && powerprofilesctl set "$CHOICE" && pkill -RTMIN+8 waybar
exit
fi
CURRENT=$(powerprofilesctl get)
case "$CURRENT" in
performance) ICON="󰓅" ;;
balanced) ICON="󰕲" ;;
power-saver) ICON="󰌪" ;;
*) ICON="" ;;
esac
printf '{"text": "%s %s", "tooltip": "Power profile: %s\\nClick to change", "class": "%s"}\n' \
"$ICON" "$CURRENT" "$CURRENT" "$CURRENT"
+17 -1
View File
@@ -5,7 +5,23 @@
"modules-left": ["niri/workspaces"], "modules-left": ["niri/workspaces"],
"modules-center": ["clock"], "modules-center": ["clock"],
"modules-right": ["pulseaudio", "network", "battery", "tray"], "modules-right": ["custom/power-profile", "custom/fan-profile", "pulseaudio", "network", "battery", "tray"],
"custom/power-profile": {
"exec": "~/.local/bin/power-profile",
"return-type": "json",
"interval": 30,
"signal": 8,
"on-click": "~/.local/bin/power-profile --menu"
},
"custom/fan-profile": {
"exec": "~/.local/bin/fan-profile",
"return-type": "json",
"interval": 5,
"signal": 9,
"on-click": "~/.local/bin/fan-profile --menu"
},
"clock": { "clock": {
"format": "{:%a %b %d %H:%M}" "format": "{:%a %b %d %H:%M}"
+10 -1
View File
@@ -17,10 +17,19 @@ window#waybar {
color: #81a2be; color: #81a2be;
} }
#clock, #battery, #network, #pulseaudio { #clock, #battery, #network, #pulseaudio,
#custom-power-profile, #custom-fan-profile {
padding: 0 12px; padding: 0 12px;
} }
#custom-power-profile.performance {
color: #f0c674;
}
#custom-power-profile.power-saver {
color: #b5bd68;
}
#battery.warning { #battery.warning {
color: #f0c674; color: #f0c674;
} }