added waybar config
This commit is contained in:
@@ -0,0 +1,333 @@
|
|||||||
|
{
|
||||||
|
"height": 38,
|
||||||
|
"layer": "top",
|
||||||
|
"spacing": 4,
|
||||||
|
"modules-left": [
|
||||||
|
"custom/start_button",
|
||||||
|
"custom/hyprexpo_toggle",
|
||||||
|
"tray",
|
||||||
|
"custom/separator",
|
||||||
|
"hyprland/workspaces",
|
||||||
|
"custom/separator",
|
||||||
|
"wlr/taskbar",
|
||||||
|
],
|
||||||
|
// "modules-center": [ "custom/waybar-mpris"],
|
||||||
|
"modules-center": ["mpris"],
|
||||||
|
"modules-right": [
|
||||||
|
"custom/cpu-info",
|
||||||
|
"custom/kraken",
|
||||||
|
"custom/memory-info",
|
||||||
|
"custom/gpu-info",
|
||||||
|
"custom/battery_g502",
|
||||||
|
//"custom/wlsunset", "idle_inhibitor", "custom/brightness",
|
||||||
|
"wireplumber",
|
||||||
|
"custom/mount",
|
||||||
|
"custom/kde-connect",
|
||||||
|
// "network",
|
||||||
|
"custom/bluetooth",
|
||||||
|
"custom/cast",
|
||||||
|
"custom/server",
|
||||||
|
"custom/sync",
|
||||||
|
"custom/dunst",
|
||||||
|
"clock#date",
|
||||||
|
"clock#clock",
|
||||||
|
],
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"on-click": "activate",
|
||||||
|
"on-scroll-up": "hyprctl dispatch workspace e+1",
|
||||||
|
"on-scroll-down": "hyprctl dispatch workspace e-1",
|
||||||
|
"format": "{name}",
|
||||||
|
"all-outputs": true,
|
||||||
|
// "move-to-monitor": true,
|
||||||
|
},
|
||||||
|
"custom/start_button": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip-format": "",
|
||||||
|
"interval": 3600,
|
||||||
|
"on-click": "hyprctl dispatch exec ~/.config/rofi/bin/menu_powermenu",
|
||||||
|
},
|
||||||
|
"custom/hyprexpo_toggle": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip-format": "",
|
||||||
|
"interval": 3600,
|
||||||
|
"on-click": "hyprctl dispatch exec ~/.config/rofi/bin/menu_powermenu",
|
||||||
|
},
|
||||||
|
"custom/separator": {
|
||||||
|
"format": "|",
|
||||||
|
"interval": 9600,
|
||||||
|
},
|
||||||
|
"custom/usage-toggle": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='12' rise='200' weight='normal' > </span>{}",
|
||||||
|
"tooltip-format": "mehr System-Infos anzeigen",
|
||||||
|
"interval": 6600,
|
||||||
|
"on-click": "dunstify 'Umschalten der Telemetrie Info'",
|
||||||
|
},
|
||||||
|
"custom/battery-g502": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='500' weight='normal' > </span>{}",
|
||||||
|
"tooltip-format": "mehr System-Infos anzeigen",
|
||||||
|
"interval": 600,
|
||||||
|
"on-click": "solaar",
|
||||||
|
"exec": "$HOME/.config/waybar/scripts/battery-g502x.sh",
|
||||||
|
},
|
||||||
|
"custom/server": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' ></span>{}",
|
||||||
|
"tooltip-format": "dunstify 'Server Control",
|
||||||
|
"interval": 6600,
|
||||||
|
"on-click": "dunstify 'Server Control'",
|
||||||
|
},
|
||||||
|
"custom/tray": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='12' rise='200' weight='normal' > </span>{}",
|
||||||
|
"tooltip-format": "Tray anzeigen",
|
||||||
|
"interval": 6600,
|
||||||
|
"on-click": "dunstify 'Tray anzeigen'",
|
||||||
|
},
|
||||||
|
"custom/cast": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' ></span>{}",
|
||||||
|
"tooltip-format": "Remote",
|
||||||
|
"interval": 6600,
|
||||||
|
"on-click": "dunstify 'Remote'",
|
||||||
|
},
|
||||||
|
"hyprland/window": {
|
||||||
|
"max-length": 54, // char count, doesn't seem to work - https://github.com/Alexays/Waybar/issues/2898
|
||||||
|
"on-click": "dunstify \"$(hyprctl activewindow -j | jq -r .title)\"",
|
||||||
|
"on-click-middle": "hyprctl dispatch killactive",
|
||||||
|
},
|
||||||
|
"keyboard-state": {
|
||||||
|
"numlock": true,
|
||||||
|
"capslock": true,
|
||||||
|
"format": "{name} {icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"locked": "",
|
||||||
|
"unlocked": "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"wlr/taskbar": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"icon-size": 24,
|
||||||
|
"tooltip-format": "{title}",
|
||||||
|
"on-click": "activate",
|
||||||
|
"on-click-middle": "close",
|
||||||
|
"active-first": "true",
|
||||||
|
// "sort-by-app-id": true
|
||||||
|
// "ignore-list": [ "Alacritty" //],
|
||||||
|
// "app_ids-mapping": {
|
||||||
|
// // "firefoxdeveloperedition": "firefox-developer-edition"
|
||||||
|
// }
|
||||||
|
// "icon-theme": "Numix-Circle",
|
||||||
|
},
|
||||||
|
"sway/mode": {
|
||||||
|
"format": "<span style=\"italic\">{}</span>",
|
||||||
|
},
|
||||||
|
"sway/scratchpad": {
|
||||||
|
"format": "{icon} {count}",
|
||||||
|
"show-empty": false,
|
||||||
|
"format-icons": ["", ""],
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "{app}: {title}",
|
||||||
|
},
|
||||||
|
"custom/cpu-info": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='200' weight='normal' > </span>{}",
|
||||||
|
// "format": "<span style='font-weight:normal;' > </span>{}",
|
||||||
|
"interval": 5,
|
||||||
|
"exec": "$HOME/.config/waybar/scripts/cpu.sh",
|
||||||
|
"on-click": "alacritty --class floating -e btop",
|
||||||
|
// "on-click-middle": "corectrl"
|
||||||
|
"on-click-middle": "~/.local/bin/poweroptions_rofi",
|
||||||
|
},
|
||||||
|
"custom/kraken": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='16' rise='500' weight='normal' > </span>{}",
|
||||||
|
// "format": "<span font_family='Symbols Nerd Font' font='12' rise='500' weight='normal' ># </span>{}",
|
||||||
|
"interval": 5,
|
||||||
|
"exec": "$HOME/.config/waybar/scripts/kraken.sh",
|
||||||
|
},
|
||||||
|
"custom/memory-info": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='200' weight='normal' > </span>{}",
|
||||||
|
"on-click": "flatpak run io.missioncenter.MissionCenter",
|
||||||
|
"interval": 5,
|
||||||
|
"exec": "$HOME/.config/waybar/scripts/memory.sh",
|
||||||
|
},
|
||||||
|
"custom/gpu-info": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='500' weight='normal' > </span>{}",
|
||||||
|
"interval": 5,
|
||||||
|
"exec": "$HOME/.config/waybar/scripts/gpu.sh",
|
||||||
|
"on-click-middle": "corectrl",
|
||||||
|
},
|
||||||
|
"custom/bluetooth": {
|
||||||
|
// "icon-size": 21,
|
||||||
|
"spacing": 10,
|
||||||
|
"format": " ",
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' ></span>",
|
||||||
|
"on-click": "blueman-manager",
|
||||||
|
"tooltip-format": "hier könnte ihre Werbung stehen.",
|
||||||
|
},
|
||||||
|
"custom/kde-connect": {
|
||||||
|
// "icon-size": 21,
|
||||||
|
"spacing": 10,
|
||||||
|
"format": " ",
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' ></span>",
|
||||||
|
"on-click": "dunstify 'für nur 420,69€ im Monat!'",
|
||||||
|
"tooltip-format": "hier könnte ihre Werbung stehen.",
|
||||||
|
},
|
||||||
|
"custom/mount": {
|
||||||
|
// "icon-size": 21,
|
||||||
|
"spacing": 10,
|
||||||
|
"format": " ",
|
||||||
|
"format": " <span font_family='Symbols Nerd Font' font='9' rise='2000' weight='normal' > </span> <span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' > </span>",
|
||||||
|
"on-click": "dunstify 'für nur 420,69€ im Monat!'",
|
||||||
|
"tooltip-format": "hier könnte ihre Werbung stehen.",
|
||||||
|
},
|
||||||
|
"custom/sync": {
|
||||||
|
"spacing": 10,
|
||||||
|
"format": " ",
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='13' rise='1000' weight='normal' ></span>",
|
||||||
|
"on-click": "dunstify 'für nur 420,69€ im Monat!'",
|
||||||
|
"tooltip-format": "hier könnte ihre Werbung stehen.",
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
// "icon-size": 21,
|
||||||
|
"spacing": 10,
|
||||||
|
},
|
||||||
|
"clock#date": {
|
||||||
|
"timezone": "Europe/Berlin",
|
||||||
|
"locale": "en_GB.UTF-8",
|
||||||
|
// "locale": "de_DE.UTF-8",
|
||||||
|
"tooltip-format": "<big>{:L%A %d.%m.%Y\nKW %V}\n</big><tt><small>{calendar}</small></tt>",
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='' weight='normal' > </span> KW {:L%V %a %d.%m.%y}",
|
||||||
|
"on-click": "flatpak run org.gnome.Calendar",
|
||||||
|
},
|
||||||
|
"clock#clock": {
|
||||||
|
"timezone": "Europe/Berlin",
|
||||||
|
"locale": "de_DE.UTF-8",
|
||||||
|
"tooltip-format": "<big>{:L%A %d.%m.%Y\nKW %V}\n</big><tt><small>{calendar}</small></tt>",
|
||||||
|
"format": " {:L%H:%M}",
|
||||||
|
"on-click": "flatpak run org.gnome.clocks",
|
||||||
|
},
|
||||||
|
"backlight": {
|
||||||
|
// "device": "acpi_video1",
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' >{icon}</span> {percent}%",
|
||||||
|
"format-icons": ["", "", "", "", "", "", "", "", ""],
|
||||||
|
},
|
||||||
|
"battery": {
|
||||||
|
"states": {
|
||||||
|
// "good": 95,
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15,
|
||||||
|
},
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='12' rise='500' weight='normal' >{icon}</span> {capacity}%",
|
||||||
|
"format-charging": " {capacity}%",
|
||||||
|
// "format-plugged": " {capacity}%",
|
||||||
|
"format-plugged": "<span font_family='Symbols Nerd Font' font='10' rise='1000' weight='normal' ></span> {capacity}%",
|
||||||
|
"format-alt": "{time} {icon}",
|
||||||
|
// "format-good": "", // An empty format will hide the module
|
||||||
|
// "format-full": "",
|
||||||
|
"format-icons": ["", "", "", "", ""],
|
||||||
|
},
|
||||||
|
"battery#bat2": {
|
||||||
|
"bat": "BAT2",
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
// "interface": "wlp2*", // (Optional) To force the use of this interface
|
||||||
|
"format-wifi": "{essid} ({signalStrength}%) ",
|
||||||
|
// "format-linked": "<span font_family='Symbols Nerd Font' font='11' rise='1000' weight='normal' > </span>",
|
||||||
|
// "format-ethernet": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' > </span>",
|
||||||
|
// "format-ethernet": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' > </span>",
|
||||||
|
"format-ethernet": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal' ></span>",
|
||||||
|
// https://github.com/Alexays/Waybar/wiki/Module:-Custom
|
||||||
|
// "format-ethernet": "{ipaddr}/{cidr} ",
|
||||||
|
// "format-ethernet": "{ifname} ",
|
||||||
|
// "tooltip-format": "{ifname} via {gwaddr} ",
|
||||||
|
"tooltip-format": "{ifname} via {gwaddr} ",
|
||||||
|
// "format": " ",
|
||||||
|
// "format": " ",
|
||||||
|
// "format-linked": "<span font_family='Symbols Nerd Font' font='10' rise='1000' weight='normal' ></span>{ifname}: {ipaddr}/{cidr}%",
|
||||||
|
// "format": " ",
|
||||||
|
// "format-linked": "{ifname} (No IP) ",
|
||||||
|
// "format-linked": "<span font_family='Symbols Nerd Font' font='11' rise='1000' weight='normal' >{ifname} (No IP) </span>",
|
||||||
|
"format-disconnected": "Disconnected ⚠",
|
||||||
|
"format-alt": "{ifname}: {ipaddr}/{cidr}",
|
||||||
|
},
|
||||||
|
"wireplumber": {
|
||||||
|
"scroll-step": 1, // %, can be a float
|
||||||
|
// "format": "<span font_family='Symbols Nerd Font' font='11' rise='1000' weight='normal' >{icon}</span> {volume}% {format_source}",
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='12' weight='normal' >{icon}</span> {volume}% {format_source}",
|
||||||
|
"format-bluetooth": "{volume}% {icon} {format_source}",
|
||||||
|
"format-bluetooth-muted": " {icon} {format_source}",
|
||||||
|
"format-muted": " {format_source}",
|
||||||
|
"format-muted": " stumm",
|
||||||
|
"format-source": " ",
|
||||||
|
// "format-source-muted": "",
|
||||||
|
"format-source-muted": "<span font_family='Symbols Nerd Font' font='11' rise='1000' weight='normal' > </span>",
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": "",
|
||||||
|
"hands-free": "",
|
||||||
|
"headset": "",
|
||||||
|
"phone": "",
|
||||||
|
"portable": "",
|
||||||
|
"car": "",
|
||||||
|
"default": ["", "", ""],
|
||||||
|
},
|
||||||
|
"on-click": "pavucontrol",
|
||||||
|
},
|
||||||
|
"custom/brightness": {
|
||||||
|
"exec": "$HOME/.local/bin/monitor --get_brightness_with_icon",
|
||||||
|
// "exec-if": "sleep 1", // Give enough time for `sway output` command changes to propagate so we can read them in the next `exec`
|
||||||
|
"format": "{}%",
|
||||||
|
"interval": "once",
|
||||||
|
"signal": 1,
|
||||||
|
"on-click": "dunstify 'hier könnte mal was sein...'",
|
||||||
|
// "on-scroll-up": "$HOME/.local/bin/monitor --brighter",
|
||||||
|
// "on-scroll-down": "$HOME/.local/bin/monitor --dimmer"
|
||||||
|
},
|
||||||
|
"custom/dunst": {
|
||||||
|
"format": "<span font_family='Symbols Nerd Font' font='14' rise='1000' weight='normal'>{}</span>",
|
||||||
|
"exec": "~/.config/waybar/scripts/dunst.sh",
|
||||||
|
"on-click": "dunstctl set-paused toggle",
|
||||||
|
"on-click-middle": "dunstctl history-pop",
|
||||||
|
// "restart-interval": 1
|
||||||
|
"interval": 1,
|
||||||
|
"signal": 2,
|
||||||
|
},
|
||||||
|
"custom/wlsunset": {
|
||||||
|
"exec": "~/.config/waybar/scripts/wlsunset.sh",
|
||||||
|
"on-click": "~/.local/bin/blue_light_filter --toggle",
|
||||||
|
"restart-interval": 3,
|
||||||
|
"interval": 300,
|
||||||
|
"signal": 3,
|
||||||
|
},
|
||||||
|
"custom/waybar-mpris": {
|
||||||
|
"return-type": "json",
|
||||||
|
"exec": "waybar-mpris --position --autofocus",
|
||||||
|
"on-click": "waybar-mpris --send toggle",
|
||||||
|
"on-click-right": "waybar-mpris --send player-next", // switch between players on right click
|
||||||
|
"on-click-middle": "waybar-mpris --send prev",
|
||||||
|
"on-scroll-up": "waybar-mpris --send player-next", // switch the selected player on scroll
|
||||||
|
"on-scroll-down": "waybar-mpris --send player-prev", // switch the selected player on scroll
|
||||||
|
// "on-scroll-up": "waybar-mpris --send next", // go to next/previous track on scroll
|
||||||
|
// "on-scroll-down": "waybar-mpris --send prev", // go to next/previous track on scrol
|
||||||
|
"escape": true,
|
||||||
|
},
|
||||||
|
"mpris": {
|
||||||
|
"format": "{player_icon} {dynamic}",
|
||||||
|
"format-paused": "{status_icon} <i>{dynamic}</i>",
|
||||||
|
"interval": 1,
|
||||||
|
"dynmic-importance-order": [
|
||||||
|
"title",
|
||||||
|
"artist",
|
||||||
|
"position",
|
||||||
|
"length",
|
||||||
|
"album",
|
||||||
|
],
|
||||||
|
"max-length": 128,
|
||||||
|
"title-len": 42,
|
||||||
|
"album-len": 32,
|
||||||
|
"artist-len": 36,
|
||||||
|
"player-icons": {
|
||||||
|
"default": "▶",
|
||||||
|
"mpv": "🎵",
|
||||||
|
},
|
||||||
|
"status-icons": {
|
||||||
|
"paused": "⏸",
|
||||||
|
},
|
||||||
|
// "ignored-players": ["firefox"]
|
||||||
|
},
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.4 KiB |
Executable
+48
@@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
## TODO: proper clean up, get or info?
|
||||||
|
|
||||||
|
|
||||||
|
battery_level=$(solaar show | grep "Battery: " | awk '{print $2}' | head -n1 | tr -d -c 0-9)
|
||||||
|
[[ "$battery_level" -gt 50 ]] && exit
|
||||||
|
echo "$battery_level"%
|
||||||
|
|
||||||
|
|
||||||
|
#round() {
|
||||||
|
# printf "%.${2:-0}f" "$1"
|
||||||
|
#}
|
||||||
|
|
||||||
|
#temp_cpu=$(echo "$(sensors | grep Tctl | awk '{print $2}' | cut -c 2-3)")
|
||||||
|
## temp_liquid=$(echo "$(liquidctl status | grep 'Liquid' | awk '{print $4}')°C")
|
||||||
|
## rpm_fan=$(echo "$(liquidctl status | grep 'Fan' | awk '{print $4}')RPM")
|
||||||
|
## rpm_pump=$(echo "$(liquidctl status | grep 'Pump' | awk '{print $4}')RPM")
|
||||||
|
#power_core=$(echo "$(sensors | grep SVI2_P_Core | awk '{print $2}')")
|
||||||
|
#power_soc=$(echo "$(sensors | grep SVI2_P_SoC | awk '{print $2}')")
|
||||||
|
#power_package=$(echo "$power_core + $power_soc" | bc)
|
||||||
|
#power_package="$(round $power_package 0) W"
|
||||||
|
##usage=$(echo "$(grep 'cpu ' /proc/stat | awk '{cpu_usage=($2+$4)*100/($2+$4+$5)} END {printf "%0.2f%", cpu_usage}')")
|
||||||
|
|
||||||
|
##deprecated:
|
||||||
|
##clock=$(lscpu | grep 'CPU MHz' | awk '{ print $3 }' | head -c4)
|
||||||
|
|
||||||
|
## clock=$(echo "$(cat /proc/cpuinfo | grep MHz | sort -r | head -n1 | awk '{ print $4 }' | cut -c-4)"Mhz)
|
||||||
|
#clock=$(cat /proc/cpuinfo | grep MHz | sort -r | head -n1 | awk '{ print $4 }' | cut -c-4)
|
||||||
|
|
||||||
|
##divide clock in Mhz by 1000 for Ghz
|
||||||
|
## clock_ghz=$( echo "scale=1; $clock/1000" | bc -l )
|
||||||
|
#clock_ghz="$( echo "scale=1; $clock/1000" | bc -l | sed 's/\./,/g' )G"
|
||||||
|
|
||||||
|
## Get number of cores
|
||||||
|
#CORECOUNT=$(grep -c ^processor /proc/cpuinfo)
|
||||||
|
## Use top, skip the first 7 rows, count the sum of the values
|
||||||
|
## in column 9 - the CPU column, do some simple rounding at the end
|
||||||
|
#usage=$(top -bn 1 | awk -v n=$CORECOUNT 'NR > 7 { s += $9 } END { print int(s / n + .5); }')
|
||||||
|
|
||||||
|
|
||||||
|
## echo "CPU $usage% CORE $temp_cpu LIQUID $temp_liquid FAN $rpm_fan PUMP $rpm_pump $clock Mhz $power_package"
|
||||||
|
## echo "CPU $usage% $temp_cpu $clock $power_package"
|
||||||
|
#[[ "$temp_cpu" -gt 50 || %usage -gt 33 ]] && echo "$usage% $power_package" || && exit
|
||||||
|
|
||||||
|
#echo "$usage% $temp_cpu°C $clock_ghz $power_package"
|
||||||
|
|
||||||
|
##
|
||||||
Executable
+51
@@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
round() {
|
||||||
|
printf "%.${2:-0}f" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
temp_cpu=$(echo "$(sensors | grep Tctl | awk '{print $2}' | cut -c 2-3)")
|
||||||
|
# temp_liquid=$(echo "$(liquidctl status | grep 'Liquid' | awk '{print $4}')°C")
|
||||||
|
# rpm_fan=$(echo "$(liquidctl status | grep 'Fan' | awk '{print $4}')RPM")
|
||||||
|
# rpm_pump=$(echo "$(liquidctl status | grep 'Pump' | awk '{print $4}')RPM")
|
||||||
|
power_core=$(echo "$(sensors | grep SVI2_P_Core | awk '{print $2}')")
|
||||||
|
power_soc=$(echo "$(sensors | grep SVI2_P_SoC | awk '{print $2}')")
|
||||||
|
power_package=$(echo "$power_core + $power_soc" | bc)
|
||||||
|
power_package="$(round $power_package 0)W"
|
||||||
|
#usage=$(echo "$(grep 'cpu ' /proc/stat | awk '{cpu_usage=($2+$4)*100/($2+$4+$5)} END {printf "%0.2f%", cpu_usage}')")
|
||||||
|
|
||||||
|
temp_liquid=$(echo "$(sensors | grep 'Coolant' | awk '{print $2}' | cut -c 2-)")
|
||||||
|
temp_liquid=$(round $temp_liquid 0)
|
||||||
|
|
||||||
|
rpm_fan=$(echo "$(sensors | grep 'Fan' | awk '{print $2}')RPM")
|
||||||
|
# rpm_fan=$(echo "$(liquidctl status | grep 'Fan' | awk '{print $4}')RPM")
|
||||||
|
rpm_pump=$(echo "$(sensors | grep 'Pump' | awk '{print $2}')RPM")
|
||||||
|
|
||||||
|
#deprecated:
|
||||||
|
#clock=$(lscpu | grep 'CPU MHz' | awk '{ print $3 }' | head -c4)
|
||||||
|
|
||||||
|
# clock=$(echo "$(cat /proc/cpuinfo | grep MHz | sort -r | head -n1 | awk '{ print $4 }' | cut -c-4)"Mhz)
|
||||||
|
clock=$(cat /proc/cpuinfo | grep MHz | sort -r | head -n1 | awk '{ print $4 }' | cut -c-4)
|
||||||
|
|
||||||
|
#divide clock in Mhz by 1000 for Ghz
|
||||||
|
# clock_ghz=$( echo "scale=1; $clock/1000" | bc -l )
|
||||||
|
clock_ghz="$( echo "scale=1; $clock/1000" | bc -l | sed 's/\./,/g' )GHz"
|
||||||
|
|
||||||
|
# Get number of cores
|
||||||
|
CORECOUNT=$(grep -c ^processor /proc/cpuinfo)
|
||||||
|
# Use top, skip the first 7 rows, count the sum of the values
|
||||||
|
# in column 9 - the CPU column, do some simple rounding at the end
|
||||||
|
usage=$(top -bn 1 | awk -v n=$CORECOUNT 'NR > 7 { s += $9 } END { print int(s / n + .5); }')
|
||||||
|
|
||||||
|
|
||||||
|
# echo "CPU $usage% CORE $temp_cpu LIQUID $temp_liquid FAN $rpm_fan PUMP $rpm_pump $clock Mhz $power_package"
|
||||||
|
# echo "CPU $usage% $temp_cpu $clock $power_package"
|
||||||
|
# [[ "$temp_cpu" -gt 50 || %usage -gt 33 ]] && echo "$usage% $power_package" && exit
|
||||||
|
# [[ "$temp_cpu" -gt 50 || %usage -gt 33 ]] && echo "$usage% $power_package" || && exit
|
||||||
|
|
||||||
|
# [[ "$temp_liquid" -gt 35 ]] && echo "$usage% $temp_cpu°C $temp_liquid°C $power_package" && exit || echo "$usage% $temp_cpu°C $power_package"
|
||||||
|
|
||||||
|
[[ "$temp_liquid" -gt 38 ]] && echo "$usage% $temp_cpu°C $temp_liquid°C $power_package" && exit || echo "$usage% $power_package"
|
||||||
|
echo "$usage% $temp_cpu°C $temp_liquid°C $rpm_fan $clock_ghz $power_package"
|
||||||
|
|
||||||
|
#
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# curtesy of:
|
||||||
|
#https://github.com/Alexays/Waybar/wiki/Module:-Custom
|
||||||
|
|
||||||
|
COUNT=$(dunstctl count waiting)
|
||||||
|
ENABLED=""
|
||||||
|
DISABLED=""
|
||||||
|
if [ $COUNT != 0 ]; then DISABLED=" $COUNT"; fi
|
||||||
|
if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED"; else echo "$DISABLED"; fi
|
||||||
|
# if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED "; else echo "$DISABLED "; fi
|
||||||
|
# if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED "; else echo "$DISABLED "; fi
|
||||||
|
# if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED | "; else echo "$DISABLED "; fi
|
||||||
|
# if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED | "; else echo "$DISABLED "; fi
|
||||||
|
# if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED X "; else echo "$DISABLED "; fi
|
||||||
|
# if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED "; else echo "$DISABLED "; fi
|
||||||
|
# if dunstctl is-paused | grep -q "false" ; then echo "$ENABLED "; else echo "$DISABLED "; fi
|
||||||
Executable
+79
@@ -0,0 +1,79 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# version 2
|
||||||
|
# written by fennek182
|
||||||
|
# for personal use
|
||||||
|
# waybar module to display gpu usage - for all gpus using mesa (intel)
|
||||||
|
|
||||||
|
|
||||||
|
round() {
|
||||||
|
number="$(echo $1 | sed 's/\./,/')"
|
||||||
|
printf "%.${2:-0}f" "$number"
|
||||||
|
}
|
||||||
|
|
||||||
|
gpu_usage=$(cat /sys/class/drm/card1/device/gpu_busy_percent)
|
||||||
|
gpu_temp_core=$(sensors | grep "edge" | awk '{ print $2 }' | cut -c 2-3) #edge temp, there's also junction and mem
|
||||||
|
gpu_temp_hotspot=$(sensors | grep "junction" | awk '{ print $2 }' | cut -c 2-3) #edge temp, there's also junction and mem
|
||||||
|
gpu_temp_mem=$(sensors | grep "mem" | awk '{ print $2 }' | cut -c 2-3) #edge temp, there's also junction and mem
|
||||||
|
gpu_clock=$(cat /sys/class/drm/card1/device/pp_dpm_sclk | grep "*" | awk '{ print $2 }')
|
||||||
|
gpu_power=$(sensors | grep "PPT" | awk '{ print $2 }')
|
||||||
|
gpu_power=$(echo "${gpu_power%%.*}")
|
||||||
|
# gpu_power=$(sensors | grep "PPT" | awk '{ print $2 }' | head -c2)
|
||||||
|
fan_current_rpm=$(sensors | grep "fan1" | awk '{ print $2 }')
|
||||||
|
fan_max_rpm=$(sensors | grep "fan1" | awk '{ print $10 }')
|
||||||
|
fan_duty=$(echo "$(awk "BEGIN { print "$fan_current_rpm/$fan_max_rpm*100" }" | head -c2 )")
|
||||||
|
# vram_size=$(nvidia-smi -q | grep 'Total' | head -n1 | awk '{print int($3/1000)}')
|
||||||
|
vram_size=20
|
||||||
|
vram_used=$(cat /sys/class/drm/card1/device/mem_info_vram_used)
|
||||||
|
# vram_used=$(echo $vram_used | sed 's/G//')
|
||||||
|
|
||||||
|
vram_used_percentage=$(echo "$(awk "BEGIN { print "$vram_used/21474836480*100" }" | cut -c1-4 )")
|
||||||
|
vram_used_percentage=$(round $vram_used_percentage 0)
|
||||||
|
|
||||||
|
# todo: use MB and TB insted of MiB and GiB and hide the G if it's >= 1 GB
|
||||||
|
|
||||||
|
# auto format to human readable file size unit
|
||||||
|
vram_used=$(printf %s\\n $vram_used | numfmt --to=si | sed 's/G*//g')
|
||||||
|
# vram_used=$(printf %s\\n $vram_used | numfmt --to=iec-i | sed 's/.$//')
|
||||||
|
|
||||||
|
# make usage human readable
|
||||||
|
# vram_used_mib=$(echo "$(awk "BEGIN { print "$vram_used/1024/1024" }" | head -c4)")
|
||||||
|
|
||||||
|
# when the usage in MiB is greater than 999MBiB, so over 1G
|
||||||
|
# if [ ${#vram_used/1024/1024} -gt 1000 ]; then
|
||||||
|
# vram_used=$(echo "$(awk "BEGIN { print "$vram_used/1024/1024/1024" }")G")
|
||||||
|
# else
|
||||||
|
# vram_used=$(echo "$(awk "BEGIN { print "$vram_used/1024/1024" }" | head -c3 )M")
|
||||||
|
# fi
|
||||||
|
|
||||||
|
|
||||||
|
#echo "GPU "$gpu_usage"% $gpu_temp°C "$gpu_clock"MHz "$gpu_power"W FAN "$fan_duty"% VRAM "$vram_used_percentage"% $vram_used" / "$vram_size"G
|
||||||
|
|
||||||
|
|
||||||
|
# hide core clock and vram usage if gpu usage is below 50%
|
||||||
|
# [[ $fan_duty == "0" ]] && echo ""$gpu_usage"% $gpu_temp_core°C "$gpu_power"W "$fan_duty"%"
|
||||||
|
|
||||||
|
# [[ $gpu_usage -lt 51 ]] && echo "$usage% $power_package"
|
||||||
|
# [[ $gpu_usage -lt "51" ]] && echo ""$gpu_usage"% $gpu_temp_core°C "$gpu_power"W"
|
||||||
|
|
||||||
|
# when called from terminal, show the info and exit
|
||||||
|
# TODO: make this properly check if run from terminal
|
||||||
|
|
||||||
|
[[ "$1" == "-a" ]] && echo ""$gpu_usage"% C: $gpu_temp_core°C H: $gpu_temp_hotspot°C M: $gpu_temp_mem°C "$gpu_clock" "$gpu_power"W "$fan_duty"% "$fan_current_rpm"RPM "$vram_used_percentage"% $vram_used"/"$vram_size"GB && exit
|
||||||
|
|
||||||
|
[[ $gpu_temp_core -lt "65" ]] && [[ $gpu_usage -lt "51" ]] && echo ""$gpu_usage"% "$gpu_power"W"
|
||||||
|
[[ $gpu_temp_core -gt "66" ]] && echo ""$gpu_usage"% $gpu_temp_core °C "$gpu_power"W"
|
||||||
|
|
||||||
|
# [[ $gpu_usage -lt "51" ]] && echo ""$gpu_usage"% $gpu_temp_core°C "$gpu_power"W"
|
||||||
|
# [[ $gpu_usage -lt "50" ]] && echo ""$gpu_usage"% $gpu_temp°C "$gpu_power"W "$fan_duty"%"
|
||||||
|
# [[ $gpu_usage -lt "50" ]] && echo ""$gpu_usage"% $gpu_temp°C "$gpu_power"W "$fan_duty"% "$fan_current_rpm"RPM"
|
||||||
|
|
||||||
|
# echo "GPU "$gpu_usage"% $gpu_temp°C "$gpu_clock"MHz "$gpu_power"W FAN "$fan_duty"% VRAM "$vram_used_percentage"% $vram_used"/"$vram_size"G
|
||||||
|
# echo ""$gpu_usage"% $gpu_temp°C "$gpu_clock"MHz "$gpu_power"W FAN "$fan_duty"% VRAM "$vram_used_percentage"% $vram_used"/"$vram_size"G
|
||||||
|
# echo ""$gpu_usage"% $gpu_temp_core°C "$gpu_clock" "$gpu_power"W "$fan_duty"% "$fan_current_rpm"RPM "$vram_used_percentage"% $vram_used"/"$vram_size"G
|
||||||
|
|
||||||
|
# older output with more withspace for the temps - used until 2026-05-04:
|
||||||
|
# echo ""$gpu_usage"% C: $gpu_temp_core°C H: $gpu_temp_hotspot°C M: $gpu_temp_mem°C "$gpu_clock" "$gpu_power"W "$fan_duty"% "$fan_current_rpm"RPM "$vram_used_percentage"% $vram_used"/"$vram_size"GB
|
||||||
|
echo ""$gpu_usage"% C/H/M: $gpu_temp_core/$gpu_temp_hotspot/$gpu_temp_mem°C "$gpu_clock" "$gpu_power"W "$fan_duty"% "$fan_current_rpm"RPM "$vram_used_percentage"% $vram_used"GB
|
||||||
|
|
||||||
|
#
|
||||||
Executable
+28
@@ -0,0 +1,28 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
gpu_usage=$(nvidia-smi -q | grep 'Gpu' | awk '{ print $3 }')
|
||||||
|
gpu_temp=$(nvidia-smi -q | grep 'GPU Current Temp' | awk '{ print $5 }')
|
||||||
|
gpu_clock=$(nvidia-smi -q | grep 'Graphics' | head -n1 | awk '{ print $3 }')
|
||||||
|
gpu_power=$(nvidia-smi -q | grep 'Power Draw' | awk '{ print $4 }' | awk -F. '{ print $1 }')
|
||||||
|
fan_duty=$(nvidia-smi -q | grep 'Fan Speed' | awk '{ print $4 }')
|
||||||
|
|
||||||
|
vram_used=$(nvidia-smi -q | grep 'Used' | head -n1 | awk '{print $3}' | head -c4 | sed -r 's/[.]+/,/g')
|
||||||
|
|
||||||
|
# make usage human readable
|
||||||
|
# when the usage in MiB is greater than 3 charaters, so over 1G
|
||||||
|
if [ ${#vram_used} -gt 3 ]; then
|
||||||
|
vram_used=$(echo "$(awk "BEGIN { print "$vram_used/1024" }" | head -c4)G")
|
||||||
|
else
|
||||||
|
vram_used=$(echo "$vram_used"M)
|
||||||
|
fi
|
||||||
|
|
||||||
|
vram_used_percentage=$(nvidia-smi -q | grep 'Memory' | sed '3q;d' | awk '{print $3}')
|
||||||
|
vram_size=$(nvidia-smi -q | grep 'Total' | head -n1 | awk '{print int($3/1000)}')
|
||||||
|
|
||||||
|
#echo "GPU "$gpu_usage"% $gpu_temp°C "$gpu_clock"MHz "$gpu_power"W FAN "$fan_duty"% VRAM "$vram_used_percentage"% $vram_used" / "$vram_size"G
|
||||||
|
|
||||||
|
# echo "GPU "$gpu_usage"% $gpu_temp°C "$gpu_clock"MHz "$gpu_power"W FAN "$fan_duty"% VRAM "$vram_used_percentage"% $vram_used"/"$vram_size"G
|
||||||
|
# echo ""$gpu_usage"% $gpu_temp°C "$gpu_clock"MHz "$gpu_power"W FAN "$fan_duty"% VRAM "$vram_used_percentage"% $vram_used"/"$vram_size"G
|
||||||
|
echo ""$gpu_usage"% $gpu_temp°C "$gpu_clock"MHz "$gpu_power"W "$fan_duty"% "$vram_used_percentage"% $vram_used"/"$vram_size"G
|
||||||
|
|
||||||
|
#
|
||||||
Executable
+35
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
: "${XDG_RUNTIME_DIR:?Environment variable XDG_RUNTIME_DIR not set}"
|
||||||
|
: "${HYPRLAND_INSTANCE_SIGNATURE:?Environment variable HYPRLAND_INSTANCE_SIGNATURE not set}"
|
||||||
|
|
||||||
|
handle() {
|
||||||
|
case "$1" in
|
||||||
|
workspace* | focusedmon* | openwindow* | closewindow* | movewindow* | activewindow*)
|
||||||
|
update_active_clients
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
update_active_clients() {
|
||||||
|
# active_clients=$(hyprctl activeworkspace -j | jq -r .windows)
|
||||||
|
# echo "$active_clients"
|
||||||
|
clients=$(hyprctl clients -j | grep address | awk '{print $2}' | sed "s/\"//"| cut -c -14)
|
||||||
|
active_window=$(hyprctl -j activewindow | jq -r '.address')
|
||||||
|
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
hyprctl dispatch setprop address:$line bordersize 1
|
||||||
|
done <<< "$clients"
|
||||||
|
|
||||||
|
# echo $active_window
|
||||||
|
hyprctl dispatch setprop address:$active_window bordersize 2
|
||||||
|
}
|
||||||
|
|
||||||
|
# Initial update
|
||||||
|
update_active_clients
|
||||||
|
|
||||||
|
# Listen to events and handle them
|
||||||
|
socat -U - UNIX-CONNECT:"$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | while IFS= read -r line; do
|
||||||
|
handle "$line"
|
||||||
|
done
|
||||||
Executable
+25
@@ -0,0 +1,25 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
round() {
|
||||||
|
printf "%.${2:-0}f" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
temp_liquid=$(echo "$(sensors | grep 'Coolant' | awk '{print $2}' | cut -c 2-)")
|
||||||
|
temp_liquid=$(round $temp_liquid 0)°C
|
||||||
|
|
||||||
|
# temp_liquid=$(echo "$(liquidctl status | grep 'Liquid' | awk '{print $4}')°C")
|
||||||
|
|
||||||
|
rpm_fan=$(echo "$(sensors | grep 'Fan' | awk '{print $2}')RPM")
|
||||||
|
# rpm_fan=$(echo "$(liquidctl status | grep 'Fan' | awk '{print $4}')RPM")
|
||||||
|
rpm_pump=$(echo "$(sensors | grep 'Pump' | awk '{print $2}')RPM")
|
||||||
|
# rpm_pump=$(echo "$(liquidctl status | grep 'Pump' | awk '{print $4}')RPM")
|
||||||
|
|
||||||
|
# echo "LIQUID $temp_liquid FAN $rpm_fan PUMP $rpm_pump"
|
||||||
|
# echo "KRAKEN $temp_liquid FAN $rpm_fan PUMP $rpm_pump"
|
||||||
|
# echo "$temp_liquid $rpm_fan $rpm_pump"
|
||||||
|
|
||||||
|
[[ "$rpm_fan" =~ ^4* || "$rpm_fan" =~ ^5* ]] && echo "" && exit
|
||||||
|
|
||||||
|
echo "$temp_liquid $rpm_fan"
|
||||||
|
|
||||||
|
#
|
||||||
Executable
+19
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
usage=$(echo "$(free -h --si | awk '/^Speicher:/ {print $3 "/" $2}')" | sed 's/G//')GB
|
||||||
|
usage_short=$(echo "$(free -h --si | awk '/^Speicher:/ {print $3}')" | sed 's/G//')GB
|
||||||
|
# usage=$(echo "$(free -h --si | awk '/^Speicher:/ {print $3 "/" $2}')")
|
||||||
|
|
||||||
|
percentage=$(echo "$(free --si | awk '/^Speicher:/ {print int($3/$2 * 100.0)}')%")
|
||||||
|
# echo "RAM $percentage $usage"
|
||||||
|
|
||||||
|
# [[ "$percentage" -lt 33 || "$temp_cpu" =~ ^4* || $usage -lt 33 ]] && exit
|
||||||
|
|
||||||
|
# echo "$percentage $usage_short"
|
||||||
|
|
||||||
|
echo "$percentage"
|
||||||
|
echo "$percentage $usage"
|
||||||
|
#[[ "$temp_cpu" =~ ^3* || "$temp_cpu" =~ ^4* ]] && echo "$usage% $power_package"
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
Executable
+8
@@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
root=$(df -h / | grep '/dev/nvme0' | awk '{ print $4 }')
|
||||||
|
root_percentage=$(df -h / | grep '/dev/nvme0' | awk '{ print $5 }')
|
||||||
|
data=$(df -h /mnt/data | grep '/dev/nvme1' | awk '{ print $4 }')
|
||||||
|
data_percentage=$(df -h /mnt/data | grep '/dev/nvme1' | awk '{ print $5 }')
|
||||||
|
|
||||||
|
echo "ROOT $root_percentage $root DATA $data_percentage $data"
|
||||||
Executable
+275
@@ -0,0 +1,275 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import json
|
||||||
|
import math
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import textwrap
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
import psutil
|
||||||
|
from gi.repository import GLib
|
||||||
|
from pydbus import SessionBus
|
||||||
|
|
||||||
|
MPRIS_PLAYER_OBJ_PATH = '/org/mpris/MediaPlayer2'
|
||||||
|
MPRIS_PLAYER_IFACE = 'org.mpris.MediaPlayer2.Player'
|
||||||
|
KNOWN_SERVICES = [
|
||||||
|
'org.mpris.MediaPlayer2.mpv',
|
||||||
|
'org.kde.plasma.browser_integration'
|
||||||
|
]
|
||||||
|
KNOWN_BROWSER_MAP = {
|
||||||
|
'mozilla': 'Firefox',
|
||||||
|
'chromium': 'Chromium',
|
||||||
|
'chrome': 'Google Chrome'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Player:
|
||||||
|
def __init__(self, bus, owner_name):
|
||||||
|
self._bus = bus
|
||||||
|
self.owner_name = owner_name
|
||||||
|
self.owner_process = self._get_owner_process()
|
||||||
|
self._obj = self._bus.get(owner_name, MPRIS_PLAYER_OBJ_PATH)
|
||||||
|
|
||||||
|
def _get_owner_process(self):
|
||||||
|
obj = self._bus.get('org.freedesktop.DBus', '/org/freedesktop/DBus')
|
||||||
|
pid = obj.GetConnectionUnixProcessID(self.owner_name)
|
||||||
|
if pid is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return psutil.Process(pid)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _identify_browser_by_cmdline(cmdline):
|
||||||
|
for fragment, browser in KNOWN_BROWSER_MAP.items():
|
||||||
|
if fragment in cmdline:
|
||||||
|
return browser
|
||||||
|
return None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
name = self.owner_process.name()
|
||||||
|
if name == 'plasma-browser-integration-host':
|
||||||
|
cmdline = ' '.join(self.owner_process.cmdline())
|
||||||
|
return self._identify_browser_by_cmdline(cmdline)
|
||||||
|
return name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def status(self):
|
||||||
|
return self._obj.PlaybackStatus.lower()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def title(self):
|
||||||
|
return self._obj.Metadata.get('xesam:title')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def album(self):
|
||||||
|
return self._obj.Metadata.get('xesam:album')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def artist(self):
|
||||||
|
artists = self._obj.Metadata.get('xesam:artist')
|
||||||
|
return ', '.join(artists) if isinstance(artists, list) else artists
|
||||||
|
|
||||||
|
def playpause(self):
|
||||||
|
if self._obj.CanPlay or self._obj.CanPause:
|
||||||
|
self._obj.PlayPause()
|
||||||
|
|
||||||
|
def play(self):
|
||||||
|
if self._obj.CanPlay:
|
||||||
|
self._obj.Play()
|
||||||
|
|
||||||
|
def pause(self):
|
||||||
|
if self._obj.CanPause:
|
||||||
|
self._obj.Pause()
|
||||||
|
|
||||||
|
def previous(self):
|
||||||
|
if self._obj.CanGoPrevious:
|
||||||
|
self._obj.Previous()
|
||||||
|
|
||||||
|
def next(self):
|
||||||
|
if self._obj.CanGoNext:
|
||||||
|
self._obj.Next()
|
||||||
|
|
||||||
|
|
||||||
|
class MediaWatcher:
|
||||||
|
def __init__(self, bus, do_print_status=False):
|
||||||
|
self._bus = bus
|
||||||
|
|
||||||
|
self._owner_to_player = self._find_players()
|
||||||
|
self.player = self._find_active_player()
|
||||||
|
|
||||||
|
if do_print_status:
|
||||||
|
self.status_builder = MediaWatcherStatusBuilder(self)
|
||||||
|
self.status_builder.print_status()
|
||||||
|
else:
|
||||||
|
self.status_builder = None
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
self._subscription = self._bus.subscribe(
|
||||||
|
iface='org.freedesktop.DBus.Properties',
|
||||||
|
signal='PropertiesChanged',
|
||||||
|
object=MPRIS_PLAYER_OBJ_PATH,
|
||||||
|
arg0=MPRIS_PLAYER_IFACE,
|
||||||
|
signal_fired=self._mpris_signal_handler,
|
||||||
|
)
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_value, tb):
|
||||||
|
if exc_type is not None:
|
||||||
|
traceback.print_exception(exc_type, exc_value, tb)
|
||||||
|
self._subscription.unsubscribe()
|
||||||
|
|
||||||
|
def _find_players(self):
|
||||||
|
owner_to_player = {}
|
||||||
|
for service in KNOWN_SERVICES:
|
||||||
|
try:
|
||||||
|
owner_name = self._bus.dbus.GetNameOwner(service)
|
||||||
|
except GLib.Error:
|
||||||
|
continue
|
||||||
|
owner_to_player[owner_name] = Player(bus=self._bus, owner_name=owner_name)
|
||||||
|
return owner_to_player
|
||||||
|
|
||||||
|
def _group_players_by_status(self):
|
||||||
|
status_to_players = {}
|
||||||
|
for player in self._owner_to_player.values():
|
||||||
|
if player.status in status_to_players:
|
||||||
|
status_to_players[player.status].append(player)
|
||||||
|
else:
|
||||||
|
status_to_players[player.status] = [player]
|
||||||
|
return status_to_players
|
||||||
|
|
||||||
|
def _find_active_player(self):
|
||||||
|
players_by_status = self._group_players_by_status()
|
||||||
|
|
||||||
|
if players_by_status.get('playing'):
|
||||||
|
players_by_status['playing'].sort(key=lambda x: x.owner_process.create_time(), reverse=True)
|
||||||
|
return players_by_status['playing'][0]
|
||||||
|
elif players_by_status.get('paused'):
|
||||||
|
return players_by_status['paused'][0]
|
||||||
|
elif players_by_status.get('stopped'):
|
||||||
|
return players_by_status['stopped'][0]
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _mpris_signal_handler(self, sender_name, *_):
|
||||||
|
if sender_name not in self._owner_to_player:
|
||||||
|
self._owner_to_player[sender_name] = Player(bus=self._bus, owner_name=sender_name)
|
||||||
|
|
||||||
|
self.player = self._find_active_player()
|
||||||
|
|
||||||
|
if self.status_builder:
|
||||||
|
self.status_builder.print_status()
|
||||||
|
|
||||||
|
|
||||||
|
class MediaWatcherStatusBuilder:
|
||||||
|
def __init__(self, watcher):
|
||||||
|
self.watcher = watcher
|
||||||
|
|
||||||
|
def _build_tooltip(self):
|
||||||
|
tooltip = []
|
||||||
|
player = self.watcher.player
|
||||||
|
|
||||||
|
if player.status in ['playing', 'paused']:
|
||||||
|
tooltip.append(player.status.title() + ':')
|
||||||
|
if player.title:
|
||||||
|
tooltip.append(player.title)
|
||||||
|
if player.album:
|
||||||
|
tooltip.append(player.album)
|
||||||
|
if player.artist:
|
||||||
|
tooltip.append(player.artist)
|
||||||
|
if player.name:
|
||||||
|
tooltip.append('(' + player.name + ')')
|
||||||
|
|
||||||
|
return '\n'.join(tooltip) if tooltip else None
|
||||||
|
|
||||||
|
def _build_text(self, max_width, title_to_artist_ratio=2 / 3, separator=' - ', placeholder='…'):
|
||||||
|
max_width = max_width - len(separator)
|
||||||
|
player = self.watcher.player
|
||||||
|
|
||||||
|
if player.title and player.artist:
|
||||||
|
title_width = math.floor(max_width * title_to_artist_ratio)
|
||||||
|
artist_width = max_width - title_width
|
||||||
|
elif player.title and not player.artist:
|
||||||
|
title_width = max_width
|
||||||
|
artist_width = 0
|
||||||
|
elif player.artist and not player.title:
|
||||||
|
title_width = 0
|
||||||
|
artist_width = max_width
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
short_title = (
|
||||||
|
None if title_width == 0 else textwrap.shorten(player.title, width=title_width, placeholder=placeholder)
|
||||||
|
)
|
||||||
|
short_artist = (
|
||||||
|
None if artist_width == 0 else textwrap.shorten(player.artist, width=artist_width, placeholder=placeholder)
|
||||||
|
)
|
||||||
|
|
||||||
|
if short_title and short_artist:
|
||||||
|
return separator.join((short_title, short_artist))
|
||||||
|
elif short_title and not short_artist:
|
||||||
|
return short_title
|
||||||
|
elif short_artist and not short_title:
|
||||||
|
return short_artist
|
||||||
|
|
||||||
|
def _build_classes(self):
|
||||||
|
classes = []
|
||||||
|
player = self.watcher.player
|
||||||
|
|
||||||
|
if player.status in ['playing', 'paused']:
|
||||||
|
classes.append(player.status)
|
||||||
|
else:
|
||||||
|
classes.append('stopped')
|
||||||
|
|
||||||
|
return classes
|
||||||
|
|
||||||
|
def build_status(self):
|
||||||
|
return json.dumps(
|
||||||
|
{'tooltip': self._build_tooltip(), 'text': self._build_text(max_width=80), 'class': self._build_classes()}
|
||||||
|
)
|
||||||
|
|
||||||
|
def print_status(self):
|
||||||
|
print(self.build_status())
|
||||||
|
sys.stdout.flush()
|
||||||
|
|
||||||
|
|
||||||
|
def print_usage():
|
||||||
|
name = os.path.basename(sys.argv[0])
|
||||||
|
print('Usage:\n\t{} (status|playpause|previous|next)\n'.format(name))
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
bus = SessionBus()
|
||||||
|
loop = GLib.MainLoop()
|
||||||
|
|
||||||
|
if len(sys.argv) == 2:
|
||||||
|
arg = sys.argv[1]
|
||||||
|
else:
|
||||||
|
print_usage()
|
||||||
|
return
|
||||||
|
|
||||||
|
with MediaWatcher(bus, do_print_status=(arg == 'status')) as media_watcher:
|
||||||
|
if arg == 'status':
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
loop.run()
|
||||||
|
except GLib.Error:
|
||||||
|
pass
|
||||||
|
elif arg == 'playpause':
|
||||||
|
media_watcher.player.playpause()
|
||||||
|
elif arg == 'play':
|
||||||
|
media_watcher.player.play()
|
||||||
|
elif arg == 'pause':
|
||||||
|
media_watcher.player.pause()
|
||||||
|
elif arg == 'previous':
|
||||||
|
media_watcher.player.previous()
|
||||||
|
elif arg == 'next':
|
||||||
|
media_watcher.player.next()
|
||||||
|
else:
|
||||||
|
print_usage()
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
Executable
+51
@@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
sunrise=$(wlsunset_info --sunrise)
|
||||||
|
sunset=$(wlsunset_info --sunset)
|
||||||
|
|
||||||
|
# sleep .1
|
||||||
|
|
||||||
|
if pgrep -x "wlsunset" > /dev/null
|
||||||
|
then
|
||||||
|
state="an"
|
||||||
|
else
|
||||||
|
state="aus"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check if temperature is set, so blue light filter is active
|
||||||
|
# if there's a line in the logs, than it's active
|
||||||
|
# example line:
|
||||||
|
# setting temperature on output '49' to 4771 K
|
||||||
|
|
||||||
|
[[ $sunrise == "" ]] && echo "" && echo "6500K" && exit
|
||||||
|
[[ $state == "aus" ]] && echo "" && echo "$sunrise - $sunset - 6500K" && exit
|
||||||
|
|
||||||
|
|
||||||
|
# todo: if temperature is below 6500K
|
||||||
|
|
||||||
|
|
||||||
|
[[ $state == "an" ]] && \
|
||||||
|
temperature=$(cat /tmp/wlsunset.log | awk '/temperature/ {print $4}' | tail -n1) && \
|
||||||
|
[[ $temperature == "" ]] && echo "" && exit || echo "" && echo "$sunrise - $sunset - $temperature"K # echo " "
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# ⏾
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
@@ -0,0 +1,508 @@
|
|||||||
|
/*
|
||||||
|
* written by fennek182
|
||||||
|
* version 1
|
||||||
|
* last change: Fr 2025-11-11
|
||||||
|
*/
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family:
|
||||||
|
Symbols Nerd Font,
|
||||||
|
Roboto;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: rgba(30, 30, 46, 0.8); /* windowed */
|
||||||
|
border-radius: 0px;
|
||||||
|
border-bottom: 1px solid rgba(90, 104, 125, 0.4);
|
||||||
|
color: #cdd6f4;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar.hidden {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.active {
|
||||||
|
color: #ff80d5; /* pink */
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: rgba(10, 80, 100, 0.95);
|
||||||
|
box-shadow: inset 0 -1px transparent; /* Use box-shadow instead of border so the text isn't offset */
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.3);
|
||||||
|
border-radius: 3px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s; /* animation *1/ */
|
||||||
|
}
|
||||||
|
|
||||||
|
button.active:hover {
|
||||||
|
background-color: rgba(80, 50, 100, 0.95);
|
||||||
|
box-shadow: inset 0 -1px #ff80d5;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
color: #ff80d5; /* pink */
|
||||||
|
margin-left: 8px;
|
||||||
|
margin-right: 8px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window:hover {
|
||||||
|
background-color: rgba(90, 60, 110, 0.97);
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.8);
|
||||||
|
padding: 0 4px;
|
||||||
|
border-radius: 5px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
margin: 2px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window#waybar.hidden {
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces:hover {
|
||||||
|
/* background-color: rgba(0, 70, 100, 0.33); */
|
||||||
|
border-radius: 5px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.8);
|
||||||
|
border-radius: 5px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
/*color: #78dcff;*/
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 0 8px;
|
||||||
|
margin: 2px 3px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active,
|
||||||
|
#wlr-taskbar button.active {
|
||||||
|
color: #ff80d5; /* pink */
|
||||||
|
background-color: rgba(80, 50, 100, 0.6);
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.5);
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
background-color: rgba(90, 60, 110, 0.97);
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active:hover {
|
||||||
|
background-color: rgba(90, 60, 110, 0.97);
|
||||||
|
border-radius: 5px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
background-color: #eb4d4b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window,
|
||||||
|
#custom-cast,
|
||||||
|
#custom-cpu-info,
|
||||||
|
#custom-gpu-info,
|
||||||
|
#custom-kraken,
|
||||||
|
#custom-memory-info,
|
||||||
|
#custom-start_button,
|
||||||
|
#custom-start_button,
|
||||||
|
#custom-usage-toggle,
|
||||||
|
#battery,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#disk,
|
||||||
|
#temperature,
|
||||||
|
#backlight,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#wireplumber,
|
||||||
|
#custom-battery_g502,
|
||||||
|
#custom-bluetooth,
|
||||||
|
#custom-mount,
|
||||||
|
#custom-sync,
|
||||||
|
#custom-server,
|
||||||
|
#custom-kde-connect,
|
||||||
|
#custom-media,
|
||||||
|
#custom-brightness,
|
||||||
|
#custom-wlsunset,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#custom-battery-suffix,
|
||||||
|
#clock.date,
|
||||||
|
#clock.clock,
|
||||||
|
#custom-dunst,
|
||||||
|
#tray,
|
||||||
|
#wlr-taskbar,
|
||||||
|
#mode,
|
||||||
|
#scratchpad,
|
||||||
|
#mpris,
|
||||||
|
#mpd {
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 0 5px;
|
||||||
|
margin: 0;
|
||||||
|
min-width: 18px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock.date:hover,
|
||||||
|
#clock.clock:hover,
|
||||||
|
#custom-battery_g502:hover,
|
||||||
|
#custom-dunst:hover,
|
||||||
|
#custom-cpu-info:hover,
|
||||||
|
#custom-usage-toggle:hover,
|
||||||
|
#custom-kraken:hover,
|
||||||
|
#custom-memory-info:hover,
|
||||||
|
#custom-gpu-info:hover,
|
||||||
|
#backlight:hover,
|
||||||
|
#custom-brightness:hover,
|
||||||
|
#custom-bluetooth:hover,
|
||||||
|
#custom-wlsunset:hover,
|
||||||
|
#idle_inhibitor:hover,
|
||||||
|
#battery:hover,
|
||||||
|
#custom-battery-suffix:hover,
|
||||||
|
#pulseaudio:hover,
|
||||||
|
#wireplumber:hover,
|
||||||
|
#custom-bluetooth:hover,
|
||||||
|
#network:hover,
|
||||||
|
#custom-kde-connect:hover,
|
||||||
|
#custom-cast:hover,
|
||||||
|
#custom-server:hover,
|
||||||
|
#custom-mount:hover,
|
||||||
|
#custom-sync:hover,
|
||||||
|
#mpris:hover {
|
||||||
|
background-color: rgba(10, 80, 100, 0.95);
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.8);
|
||||||
|
padding: 0 4px;
|
||||||
|
border-radius: 5px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
margin: 2px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
padding: 4px;
|
||||||
|
color: #78dcff;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 0 5px;
|
||||||
|
margin: 2px 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray:hover {
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.8);
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 0px 4px;
|
||||||
|
background-color: rgba(10, 80, 100, 0.95);
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wlr-taskbar {
|
||||||
|
background-color: #303030;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding-left: 2px;
|
||||||
|
padding-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button {
|
||||||
|
border-radius: 5px;
|
||||||
|
padding-left: 10px; /* was 5px until Wed 2026-05-06 */
|
||||||
|
padding-right: 10px; /* was 5px until Wed 2026-05-06 */
|
||||||
|
margin: 2px;
|
||||||
|
/* margin-left: 1px; */
|
||||||
|
/* margin-right: 1px; */
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button:hover {
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.4);
|
||||||
|
background-color: rgba(0, 178, 255, 0.3);
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button.active {
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.4);
|
||||||
|
background-color: rgba(10, 70, 90, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#taskbar button.active:hover {
|
||||||
|
/*background-color: rgba(10, 80, 100, 1);*/
|
||||||
|
background-color: rgba(20, 80, 100, 0.95);
|
||||||
|
box-shadow: inset 0 -1px #78dcff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mpris {
|
||||||
|
color: #78dcff;
|
||||||
|
}
|
||||||
|
#mpris:hover {
|
||||||
|
background-color: rgba(10, 80, 100, 0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-usage-toggle:hover {
|
||||||
|
background-color: rgba(60, 50, 100, 0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-start_button {
|
||||||
|
padding: 0px 16px;
|
||||||
|
background-image: url("/home/tobias/.config/waybar/img/start.png");
|
||||||
|
margin: 0 5px;
|
||||||
|
margin-top: 4px;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.35s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-start_button:hover {
|
||||||
|
margin: 2px 4px;
|
||||||
|
/* margin-right: 6px; */
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.2);
|
||||||
|
border-radius: 5px;
|
||||||
|
background-color: rgba(0, 178, 255, 0.5);
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.35s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-separator {
|
||||||
|
color: #cdd6f4;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces:hover,
|
||||||
|
#workspaces button:hover,
|
||||||
|
#taskbar button:hover {
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-cpu-info {
|
||||||
|
color: #ff8ca1;
|
||||||
|
}
|
||||||
|
#custom-cpu-info:hover {
|
||||||
|
background-color: rgba(90, 50, 60, 0.95);
|
||||||
|
border: 1px solid rgba(90, 104, 125, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-kraken {
|
||||||
|
color: #ffaf8a;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-memory-info {
|
||||||
|
color: #ffe769;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-memory-info:hover,
|
||||||
|
#custom-usage-toggle:hover {
|
||||||
|
background-color: rgba(120, 80, 60, 0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock.date:hover,
|
||||||
|
#clock.clock:hover {
|
||||||
|
background-color: rgba(60, 50, 100, 0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===== BLUE - SERVICE /SYSTEM CONTROL ===== */
|
||||||
|
#custom-bluetooth,
|
||||||
|
#custom-mount,
|
||||||
|
#custom-kde-connect,
|
||||||
|
#custom-cast,
|
||||||
|
#custom-sync,
|
||||||
|
#custom-server,
|
||||||
|
#custom-dunst,
|
||||||
|
#network {
|
||||||
|
color: #78dcff; /* blue */
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio:hover,
|
||||||
|
#custom-bluetooth:hover,
|
||||||
|
#custom-mount:hover,
|
||||||
|
#custom-kde-connect:hover,
|
||||||
|
#custom-sync:hover,
|
||||||
|
#custom-server:hover,
|
||||||
|
#custom-dunst:hover,
|
||||||
|
#network:hover {
|
||||||
|
background-color: rgba(10, 70, 90, 0.95);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===== GREEN - SERVICE / SYSTEM CONTROL ===== */
|
||||||
|
#battery:hover,
|
||||||
|
#pulseaudio:hover {
|
||||||
|
background-color: rgba(10, 90, 70, 0.95); /* green */
|
||||||
|
}
|
||||||
|
|
||||||
|
#backlight,
|
||||||
|
#custom-brightness,
|
||||||
|
#idle_inhibitor,
|
||||||
|
#custom-wlsunset,
|
||||||
|
#wireplumber {
|
||||||
|
color: #8df1a9; /* green */
|
||||||
|
}
|
||||||
|
|
||||||
|
#backlight:hover,
|
||||||
|
#custom-brightness:hover,
|
||||||
|
#custom-wlsunset:hover,
|
||||||
|
#idle_inhibitor:hover,
|
||||||
|
#wireplumber:hover {
|
||||||
|
background-color: rgba(10, 90, 70, 0.95); /* green */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ===== YELLOW - SERVICE / SYSTEM CONTROL ===== */
|
||||||
|
#custom-gpu-info {
|
||||||
|
color: #ffe769; /* # yellow */
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-gpu-info:hover {
|
||||||
|
background-color: rgba(81, 95, 60, 0.95); /* yellow */
|
||||||
|
}
|
||||||
|
/* ==========================================-------------- */
|
||||||
|
|
||||||
|
#custom-battery-suffix {
|
||||||
|
padding-left: 1px;
|
||||||
|
background-color: #ff80d5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-battery-suffix:hover {
|
||||||
|
padding-left: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-separator {
|
||||||
|
color: #cdd6f4;
|
||||||
|
margin-right: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-cpu-info {
|
||||||
|
color: #ff8ca1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-memory-info,
|
||||||
|
#custom-usage-toggle {
|
||||||
|
color: #ffaf8a;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
color: red;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock.date {
|
||||||
|
color: #b6b2ff;
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock.clock {
|
||||||
|
color: #b6b2ff;
|
||||||
|
margin-left: 0px;
|
||||||
|
padding-left: 2px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock.clock:hover {
|
||||||
|
margin-left: 0px;
|
||||||
|
padding-left: 1px;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery,
|
||||||
|
#custom-battery-suffix,
|
||||||
|
#pulseaudio {
|
||||||
|
color: #8df1a9;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging,
|
||||||
|
#battery.plugged {
|
||||||
|
color: #8df1a9;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
background-color: #ffffff;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical:not(.charging) {
|
||||||
|
/* background-color: #f53c3c; */
|
||||||
|
color: #ffffff;
|
||||||
|
animation-name: blink;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
label:focus {
|
||||||
|
background-color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
#wireplumber.muted {
|
||||||
|
background-color: #f53c3c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature {
|
||||||
|
background-color: #f0932b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#temperature.critical {
|
||||||
|
background-color: #eb4d4b;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray > .needs-attention {
|
||||||
|
-gtk-icon-effect: highlight;
|
||||||
|
background-color: #eb4d4b;
|
||||||
|
}
|
||||||
|
#mode {
|
||||||
|
background-color: #64727d;
|
||||||
|
border-bottom: 2px solid #5599ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#language {
|
||||||
|
background: #00b093;
|
||||||
|
color: #740864;
|
||||||
|
padding: 0 5px;
|
||||||
|
margin: 0 5px;
|
||||||
|
min-width: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#keyboard-state {
|
||||||
|
background: #97e1ad;
|
||||||
|
color: #000000;
|
||||||
|
padding: 0 0px;
|
||||||
|
margin: 0 5px;
|
||||||
|
min-width: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#keyboard-state > label {
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#keyboard-state > label.locked {
|
||||||
|
background: rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user