diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc
new file mode 100644
index 0000000..e72a81f
--- /dev/null
+++ b/.config/waybar/config.jsonc
@@ -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": " {}",
+ "tooltip-format": "mehr System-Infos anzeigen",
+ "interval": 6600,
+ "on-click": "dunstify 'Umschalten der Telemetrie Info'",
+ },
+ "custom/battery-g502": {
+ "format": " {}",
+ "tooltip-format": "mehr System-Infos anzeigen",
+ "interval": 600,
+ "on-click": "solaar",
+ "exec": "$HOME/.config/waybar/scripts/battery-g502x.sh",
+ },
+ "custom/server": {
+ "format": "{}",
+ "tooltip-format": "dunstify 'Server Control",
+ "interval": 6600,
+ "on-click": "dunstify 'Server Control'",
+ },
+ "custom/tray": {
+ "format": " {}",
+ "tooltip-format": "Tray anzeigen",
+ "interval": 6600,
+ "on-click": "dunstify 'Tray anzeigen'",
+ },
+ "custom/cast": {
+ "format": "{}",
+ "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": "{}",
+ },
+ "sway/scratchpad": {
+ "format": "{icon} {count}",
+ "show-empty": false,
+ "format-icons": ["", ""],
+ "tooltip": true,
+ "tooltip-format": "{app}: {title}",
+ },
+ "custom/cpu-info": {
+ "format": " {}",
+ // "format": " {}",
+ "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": " {}",
+ // "format": "# {}",
+ "interval": 5,
+ "exec": "$HOME/.config/waybar/scripts/kraken.sh",
+ },
+ "custom/memory-info": {
+ "format": " {}",
+ "on-click": "flatpak run io.missioncenter.MissionCenter",
+ "interval": 5,
+ "exec": "$HOME/.config/waybar/scripts/memory.sh",
+ },
+ "custom/gpu-info": {
+ "format": " {}",
+ "interval": 5,
+ "exec": "$HOME/.config/waybar/scripts/gpu.sh",
+ "on-click-middle": "corectrl",
+ },
+ "custom/bluetooth": {
+ // "icon-size": 21,
+ "spacing": 10,
+ "format": " ",
+ "format": "",
+ "on-click": "blueman-manager",
+ "tooltip-format": "hier könnte ihre Werbung stehen.",
+ },
+ "custom/kde-connect": {
+ // "icon-size": 21,
+ "spacing": 10,
+ "format": " ",
+ "format": "",
+ "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": " ",
+ "on-click": "dunstify 'für nur 420,69€ im Monat!'",
+ "tooltip-format": "hier könnte ihre Werbung stehen.",
+ },
+ "custom/sync": {
+ "spacing": 10,
+ "format": " ",
+ "format": "",
+ "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": "{:L%A %d.%m.%Y\nKW %V}\n{calendar}",
+ "format": " 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": "{:L%A %d.%m.%Y\nKW %V}\n{calendar}",
+ "format": " {:L%H:%M}",
+ "on-click": "flatpak run org.gnome.clocks",
+ },
+ "backlight": {
+ // "device": "acpi_video1",
+ "format": "{icon} {percent}%",
+ "format-icons": ["", "", "", "", "", "", "", "", ""],
+ },
+ "battery": {
+ "states": {
+ // "good": 95,
+ "warning": 30,
+ "critical": 15,
+ },
+ "format": "{icon} {capacity}%",
+ "format-charging": " {capacity}%",
+ // "format-plugged": " {capacity}%",
+ "format-plugged": " {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": " ",
+ // "format-ethernet": " ",
+ // "format-ethernet": " ",
+ "format-ethernet": "",
+ // 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": "{ifname}: {ipaddr}/{cidr}%",
+ // "format": " ",
+ // "format-linked": "{ifname} (No IP) ",
+ // "format-linked": "{ifname} (No IP) ",
+ "format-disconnected": "Disconnected ⚠",
+ "format-alt": "{ifname}: {ipaddr}/{cidr}",
+ },
+ "wireplumber": {
+ "scroll-step": 1, // %, can be a float
+ // "format": "{icon} {volume}% {format_source}",
+ "format": "{icon} {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": " ",
+ "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": "{}",
+ "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} {dynamic}",
+ "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"]
+ },
+}
diff --git a/.config/waybar/img/start.png b/.config/waybar/img/start.png
new file mode 100644
index 0000000..8dc63f6
Binary files /dev/null and b/.config/waybar/img/start.png differ
diff --git a/.config/waybar/scripts/battery-g502x.sh b/.config/waybar/scripts/battery-g502x.sh
new file mode 100755
index 0000000..d8b41bf
--- /dev/null
+++ b/.config/waybar/scripts/battery-g502x.sh
@@ -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"
+
+##
diff --git a/.config/waybar/scripts/cpu.sh b/.config/waybar/scripts/cpu.sh
new file mode 100755
index 0000000..ffb2e60
--- /dev/null
+++ b/.config/waybar/scripts/cpu.sh
@@ -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"
+
+#
diff --git a/.config/waybar/scripts/dunst.sh b/.config/waybar/scripts/dunst.sh
new file mode 100755
index 0000000..51c19e3
--- /dev/null
+++ b/.config/waybar/scripts/dunst.sh
@@ -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
diff --git a/.config/waybar/scripts/gpu.sh b/.config/waybar/scripts/gpu.sh
new file mode 100755
index 0000000..18ba2f6
--- /dev/null
+++ b/.config/waybar/scripts/gpu.sh
@@ -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
+
+#
diff --git a/.config/waybar/scripts/gpu_nvidia.sh b/.config/waybar/scripts/gpu_nvidia.sh
new file mode 100755
index 0000000..13ee0f0
--- /dev/null
+++ b/.config/waybar/scripts/gpu_nvidia.sh
@@ -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
+
+#
diff --git a/.config/waybar/scripts/hyprland_clients.sh b/.config/waybar/scripts/hyprland_clients.sh
new file mode 100755
index 0000000..2448f0a
--- /dev/null
+++ b/.config/waybar/scripts/hyprland_clients.sh
@@ -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
diff --git a/.config/waybar/scripts/kraken.sh b/.config/waybar/scripts/kraken.sh
new file mode 100755
index 0000000..27078e6
--- /dev/null
+++ b/.config/waybar/scripts/kraken.sh
@@ -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"
+
+#
diff --git a/.config/waybar/scripts/memory.sh b/.config/waybar/scripts/memory.sh
new file mode 100755
index 0000000..bfd67e6
--- /dev/null
+++ b/.config/waybar/scripts/memory.sh
@@ -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"
+
+
+#
diff --git a/.config/waybar/scripts/ssd.sh b/.config/waybar/scripts/ssd.sh
new file mode 100755
index 0000000..c254884
--- /dev/null
+++ b/.config/waybar/scripts/ssd.sh
@@ -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"
diff --git a/.config/waybar/scripts/waybar-media.py b/.config/waybar/scripts/waybar-media.py
new file mode 100755
index 0000000..824e30a
--- /dev/null
+++ b/.config/waybar/scripts/waybar-media.py
@@ -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()
diff --git a/.config/waybar/scripts/wlsunset.sh b/.config/waybar/scripts/wlsunset.sh
new file mode 100755
index 0000000..47c48de
--- /dev/null
+++ b/.config/waybar/scripts/wlsunset.sh
@@ -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 " "
+
+
+#
+#
+#
+#
+#
+# ⏾
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
+#
diff --git a/.config/waybar/style.css b/.config/waybar/style.css
new file mode 100644
index 0000000..0c9b473
--- /dev/null
+++ b/.config/waybar/style.css
@@ -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);
+}