diff --git a/hyprland/.config/waybar/config-default.jsonc b/hyprland/.config/waybar/config-default.jsonc new file mode 100644 index 0000000..40ad7dc --- /dev/null +++ b/hyprland/.config/waybar/config-default.jsonc @@ -0,0 +1,213 @@ +// -*- mode: jsonc -*- +{ + // "layer": "top", // Waybar at top layer + // "position": "bottom", // Waybar position (top|bottom|left|right) + "height": 30, // Waybar height (to be removed for auto height) + // "width": 1280, // Waybar width + "spacing": 4, // Gaps between modules (4px) + // Choose the order of the modules + "modules-left": [ + "hyprland/workspaces", + "custom/media" + ], + "modules-center": [ + "hyprland/window" + ], + "modules-right": [ + "mpd", + "idle_inhibitor", + "pulseaudio", + "network", + "power-profiles-daemon", + "cpu", + "memory", + "temperature", + "backlight", + "keyboard-state", + "hyprland/language", + "battery", + "battery#bat2", + "clock", + "tray", + "custom/power" + ], + // Modules configuration + "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": true, + "warp-on-scroll": false, + "format": "{name}: {icon}", + "format-icons": { + // "1": "", + // "2": "", + // "3": "", + // "4": "", + // "5": "", + "urgent": "", + "focused": "", + "default": "" + } + }, + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + "sway/mode": { + "format": "{}" + }, + "sway/scratchpad": { + "format": "{icon} {count}", + "show-empty": false, + "format-icons": ["", ""], + "tooltip": true, + "tooltip-format": "{app}: {title}" + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", + "format-disconnected": "Disconnected ", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", + "unknown-tag": "N/A", + "interval": 5, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": " ", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + // "icon-size": 21, + "spacing": 10 + }, + "clock": { + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "memory": { + "format": "{}% " + }, + "temperature": { + // "thermal-zone": 2, + // "hwmon-path": "/sys/class/hwmon/hwmon2/temp1_input", + "critical-threshold": 80, + // "format-critical": "{temperatureC}°C {icon}", + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "backlight": { + // "device": "acpi_video1", + "format": "{percent}% {icon}", + "format-icons": ["", "", "", "", "", "", "", "", ""] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-full": "{capacity}% {icon}", + "format-charging": "{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" + }, + "power-profiles-daemon": { + "format": "{icon}", + "tooltip-format": "Power profile: {profile}\nDriver: {driver}", + "tooltip": true, + "format-icons": { + "default": "", + "performance": "", + "balanced": "", + "power-saver": "" + } + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{volume}% {icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/media": { + "format": "{icon} {text}", + "return-type": "json", + "max-length": 40, + "format-icons": { + "spotify": "", + "default": "🎜" + }, + "escape": true, + "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null" // Script in resources folder + // "exec": "$HOME/.config/waybar/mediaplayer.py --player spotify 2> /dev/null" // Filter player based on name + }, + "custom/power": { + "format" : "⏻ ", + "tooltip": false, + "menu": "on-click", + "menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder + "menu-actions": { + "shutdown": "shutdown", + "reboot": "reboot", + "suspend": "systemctl suspend", + "hibernate": "systemctl hibernate" + } + } +} diff --git a/hyprland/.config/waybar/config.jsonc b/hyprland/.config/waybar/config.jsonc index 7edf3ad..ec3e561 100644 --- a/hyprland/.config/waybar/config.jsonc +++ b/hyprland/.config/waybar/config.jsonc @@ -1,75 +1,206 @@ { - "layer":"top", - "position":"top", - "height": 32, - - "modules-left":["hyprland/workspaces"], - "hyprland/workspaces": { - // "persistent-workspaces":{"*":9,}, - "sort-by":"id", - "format": "{icon} {windows}", - "format-icons":{ - "active":"", - "default":"", - }, - "format-window-separator": " ", - "window-rewrite-default": "", - // "window-rewrite": { - // "title<.*youtube.*>": "", // Windows whose titles contain "youtube" - // "class": "", // Windows whose classes are "firefox" - // "class title<.*GitHub.*>": "", // Windows whose class is "firefox" and title contains "github". Note that "class" always comes first. - // "kitty": "", // Windows that contain "foot" in either class or title. For optimization reasons, it will only match against a title if at least one other window explicitly matches against a title. - // "code": "󰨞", - // }, + "modules-left": ["hyprland/workspaces"], + + "hyprland/workspaces": { + "format": "{icon}", + "format-icons": { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9" + } + }, + + // ------------------------------------------------------------------------ // + + "modules-center": [ "custom/weather", "clock", ], + + "custom/weather": { + "format": "{icon} {percentage}℃", + "format-icons": { + "sunny": "󰖙", + "partlycloudy": "󰖕", + "cloudy": "󰖐", + "verycloudy": "󰼯", + "fog": "󰖑", + "lightrain": "󰖗", + "heavyrain": "󰖖", + "hail": "󰖒", + "thunder": "󰖓", + "lightsnow": "󰖘", + "heavysnow": "󰼶", + "snowrain": "󰙿" + }, + "exec": "$HOME/.config/waybar/modules/weather.sh", + "interval": 600, + "return-type": "json", + "tooltip": true, + "on-click": "swx -t env REPORT=1 $HOME/.config/waybar/modules/weather.sh" + }, + + "custom/hotspots": { + "format": "{}", + "exec": "$HOME/.config/waybar/modules/hotspots.sh", + "on-click": "$HOME/.config/waybar/modules/hotspots.sh click", + "escape": true, + "interval": 600, + "return-type": "json" + }, + + // ------------------------------------------------------------------------ // + "modules-right": ["tray", "cpu", "memory", "disk#root", "disk#home", "temperature", "idle_inhibitor", "backlight", "wireplumber", "custom/vpn", "network#tailscale", "network", "battery", "clock"], + + "tray": { + "icon-size": 15, + "spacing": 5 + }, + + "disk#root": { + "path": "/", + "format": "󰋊 / {percentage_used}%" + }, + + "disk#home": { + "path": "/home", + "format": "/home {percentage_used}%" + }, + + "cpu": { + "format": "{icon} {usage}%", + "format-icons": ["󰊚", "󰀦"], + "on-click": "$HOME/bin/swx -t -- btop" + }, + + "memory": { + "format": "{icon} {percentage}%", + "format-icons": ["󰘚", "󰀦"], // 󰍛 + "on-click": "$HOME/bin/swx -t -- btop" + }, + + "temperature": { + "critical-threshold": 100, + "format": "{icon} {temperatureC}℃", + "format-icons": ["󱃃", "󰔏", "󰸁", "󱜜"] + }, + + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "󰅶", + "deactivated": "󰾪" + } + }, + + "backlight": { + "device": "auto", + "format": "{icon}", + "format-icons": ["󰹐", "󰌶", "󰛩", "󰖧"], + "on-scroll-down": "light -A 5", + "on-scroll-up": "light -U 5", + // save current level + // then set to minimum brightness + "on-click-right": "light -O; light -S $(light -P)", + // revert to previously saved brightness + "on-click-middle": "light -I" + }, + + "custom/gamma": { + "format": "{icon}", + "format-icons": { + "dawn": "󰱌", + "day": "󰱌", + "dusk": "󰱊", + "night": "󰱊", + }, + "exec": "env GAMMA_COMMAND='wlsunset -l $HOME_LAT -L $HOME_LON -p' YAEGI_SYSCALL=1 YAEGI_UNRESTRICTED=1 ${HOME}/.config/waybar/modules/gamma.go", + "return-type": "json" + }, + + "wireblumper": { + "format": "{icon} {volume}%", + "format-bluetooth": "{icon}󰂯 {volume}%", + "format-muted": "󰝟 {volume}%", + "format-icons": { + "easyeffects_sink": "󰺢", + "headphones": "󰋋", + "handsfree": "󰜟", + "headset": "󰋎", + "phone": "󰏲", + "portable": "󰛵", + "car": "󰄋", + "default": ["󰕿", "󰖀", "󰕾"] + }, + }, + + "custom/vpn": { + "exec": "${HOME}/.config/waybar/modules/vpn.sh", + "interval": 600, + "return-type": "json", + "on-click": "${HOME}/.config/waybar/modules/vpn.sh toggle", + }, + + "network#tailscale": { + "interface": "tailscale0", + "format": "󰌆", + "format-disconnected": "󰌊", + "tooltip-format": "{ifname}: {bandwidthUpBits} {bandwidthDownBits}", + "tooltip-format-disconnected": "disconnected", + "on-click": "${HOME}/.config/waybar/modules/tailscale.sh toggle", + }, + + "network": { + "format-wifi": "{icon} {signalStrength}%", + "format-icons": ["󰤫", "󰤟", "󰤢", "󰤥", "󰤨"], + "format-ethernet": "󰌗", + "format-linked": "󰈀 {ifname}", + "format-disconnected": "󰌙 ", + "tooltip-format": "{ifname}: {ipaddr}/{cidr}\ngateway: {gwaddr}\nssid: {essid}\nsignal: {signaldBm} dbm\ndown: {bandwidthDownBits}\nup: {bandwidthUpBits}", + "tooltip-format-disconnected": "disconnected", + // cycles through wifi/ethernet/off + // "on-click": "${HOME}/.config/waybar/modules/network.sh toggle", + }, + + "battery": { + "states": { + "good": 90, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-charging": "󰗱 {capacity}%", + "format-full-charging": "󱊦", + "format-icons": ["󱃍", "󱊡", "󱊢", "󱊣"] + }, + "clock": { + "format": " {:%H:%M}", + "format-alt":" {:%Y-%m-%d  %H:%M (%Z)}", + // "tooltip-format": "{tz_list}\n{calendar}", + "timezones": [ "Canada/Eastern","Etc/UTC"], + "calendar": { + "mode":"year", + "mode-mon-col": 3, + "weeks-pos":"left", + "on-scroll":1, + "format": { + "months": "{}", + "days": "{}", + "weeks": "W{}", + "weekdays": "{}", + "today": "{}" + } + }, + "actions": { + "on-click-right": "mode", + "on-click-forward": "tz_up", + "on-click-backward": "tz_down", + "on-scroll-up": "shift_up", + "on-scroll-down": "shift_down" + } }, - - "modules-center":["hyprland/window"], - "hyprland/window":{ - "separate-outputs": true, - }, - - "modules-right":["keyboard-state#caps","keyboard-state#num","wireplumber","battery","clock"], - - "keyboard-state#caps": { - "capslock": true, - "numlock": true, - "format": "{name} {icon}", - "format-icons": { - "locked":"", - "unlocked": "" - } - }, - // "keyboard-state#num": { - // "numlock": true, - // "format": "{icon}", - // "format-icons": { - // "locked":"󰎣", - // "unlocked": "" - // } - // }, - "battery":{ - "format":"{capacity}% {icon}", - "format-icons": ["", "", "", "", ""], - }, - "clock": { - "format":"{:%H:%M}", - "format-alt": "{:%Y-%m-%d %H:%M}" - }, - "idle_inhibitor": { - "format": "{icon}", - "format-icons": { - "activated": "", - "deactivated": "" - } - }, - "wireplumber": { - "format":"{volume}% {icon}", - "format-muted": "", - "scroll-step": 1, - "on-click":"qpwgraph", - "format-icons": ["", "", ""], - "tooltip":true, - "tooltip-format": "{volume}%" } -} - + \ No newline at end of file diff --git a/hyprland/.config/waybar/modules/timetracked.sh b/hyprland/.config/waybar/modules/timetracked.sh new file mode 100755 index 0000000..4e384bf --- /dev/null +++ b/hyprland/.config/waybar/modules/timetracked.sh @@ -0,0 +1,23 @@ +#!/bin/sh + +set -e +[ -n "$DEBUG" ] && set -x + +if ! command -v timetrace >/dev/null 2>&1; then + exit 0 +fi + +case "$1" in +on-click) + timetrace status >/dev/null && timetrace stop + exit 0 + ;; + +*) ;; +esac + +while true; do + timetrace status -o json | + jq -c 'if .project == "---" then {} else { text: (["▶", .trackedTimeToday] | join(" ")), class: "timetracked", alt: "timetracked" } end' 2>/dev/null + sleep 30 +done diff --git a/hyprland/.config/waybar/modules/weather.sh b/hyprland/.config/waybar/modules/weather.sh new file mode 100755 index 0000000..f85060b --- /dev/null +++ b/hyprland/.config/waybar/modules/weather.sh @@ -0,0 +1,44 @@ +#!/bin/sh +set -e +[ -n "$DEBUG" ] && set -x + +# loc=$1 +loc="45.4208,-75.6901" +if [ -z "${loc}" ]; then + # use /etc/localtime + # loc=$(basename "$(readlink -f /etc/localtime)") + # loc="${HOME_LAT},${HOME_LON}" + loc="45.4208,-75.6901" +fi + +if [ -n "$REPORT" ]; then + curl -s v2.wttr.in/"${loc}"?F | less + exit 0 +fi + +# data="$(curl -s wttr.in/"${loc}"?format=j1)" +data="$(curl -s wttr.in/"${loc}"?format=j1)" + +class= +case "$(echo "${data}" | jq -r '.current_condition[].weatherCode')" in +113) class="sunny" ;; +116) class="partlycloudy" ;; +119) class="cloudy" ;; +122) class="verycloudy" ;; +143|248|260) class="fog" ;; +176|263|266|293|296|353) class="lightrain" ;; +179|182|185|281|284|311|314|317|350|362|365|374|377) class="hail" ;; +200|386|389|392) class="thunder" ;; +227|320) class="lightsnow" ;; +230|329|332|335|338|371|395) class="heavysnow" ;; +299|302|305|308|356|359): class="heavyrain" ;; +323|326|368) class="snowrain" ;; +esac + +echo "${data}" | jq \ + --raw-output \ + --unbuffered \ + --compact-output \ + --arg class "${class}" \ + --arg tooltip "$(curl -s v2.wttr.in/"${loc}"?ATFQ | tail -n5)" \ + '.current_condition[] | { text: .weatherDesc[0].value, percentage: (.temp_C | tonumber), class: $class, alt: $class, tooltip: ($tooltip) }' \ No newline at end of file diff --git a/hyprland/.config/waybar/org.config.jsonc b/hyprland/.config/waybar/org.config.jsonc new file mode 100644 index 0000000..7edf3ad --- /dev/null +++ b/hyprland/.config/waybar/org.config.jsonc @@ -0,0 +1,75 @@ +{ + "layer":"top", + "position":"top", + "height": 32, + + "modules-left":["hyprland/workspaces"], + "hyprland/workspaces": { + // "persistent-workspaces":{"*":9,}, + "sort-by":"id", + "format": "{icon} {windows}", + "format-icons":{ + "active":"", + "default":"", + }, + "format-window-separator": " ", + "window-rewrite-default": "", + // "window-rewrite": { + // "title<.*youtube.*>": "", // Windows whose titles contain "youtube" + // "class": "", // Windows whose classes are "firefox" + // "class title<.*GitHub.*>": "", // Windows whose class is "firefox" and title contains "github". Note that "class" always comes first. + // "kitty": "", // Windows that contain "foot" in either class or title. For optimization reasons, it will only match against a title if at least one other window explicitly matches against a title. + // "code": "󰨞", + // }, + }, + + "modules-center":["hyprland/window"], + "hyprland/window":{ + "separate-outputs": true, + }, + + "modules-right":["keyboard-state#caps","keyboard-state#num","wireplumber","battery","clock"], + + "keyboard-state#caps": { + "capslock": true, + "numlock": true, + "format": "{name} {icon}", + "format-icons": { + "locked":"", + "unlocked": "" + } + }, + // "keyboard-state#num": { + // "numlock": true, + // "format": "{icon}", + // "format-icons": { + // "locked":"󰎣", + // "unlocked": "" + // } + // }, + "battery":{ + "format":"{capacity}% {icon}", + "format-icons": ["", "", "", "", ""], + }, + "clock": { + "format":"{:%H:%M}", + "format-alt": "{:%Y-%m-%d %H:%M}" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "wireplumber": { + "format":"{volume}% {icon}", + "format-muted": "", + "scroll-step": 1, + "on-click":"qpwgraph", + "format-icons": ["", "", ""], + "tooltip":true, + "tooltip-format": "{volume}%" + } +} + diff --git a/hyprland/.config/waybar/org.style.css b/hyprland/.config/waybar/org.style.css new file mode 100644 index 0000000..8306836 --- /dev/null +++ b/hyprland/.config/waybar/org.style.css @@ -0,0 +1,120 @@ +* { + font-family: FontAwesome, 'Noto Sans', sans-serif; + font-size: 1rem; + min-height: 0; + border: none; + border-radius: 0; +} + +window#waybar { + background-color: rgba(43,48,59,0.5); + color: #ffffff; +} + +tooltip { + background: rgba(43,48,59,0.5); + border: 1px solid rgba(100,114,125,0.5) +} +tooltip label { + color: white; +} + +#wireplumber, +#clock, +#battery { + padding: 0 0.625rem; + /* color: #ffffff; */ +} + +#workspace button { + padding: 0 0.5em; + background: transparent; + color: white; + border-bottom: 3px solid transparent; +} + +#workspace button.focused { + background: #64727D; + border-bottom: 3px solid white; +} + +#window, +#workspaces { + margin: 0 0.25rem; +} + +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +#wireplumber, +#battery { + background-color: #ffffff; + color: #000000; +} + +#battery.plugged { + color: #ffffff; + background-color: #26A65B; +} + +#battery.discharging { + background-color: #ff1111; +} + +#battery.charging { + background-color: #00ff00; +} + +#battery.charging { + color: white; + background-color: #26A65B; +} + +@keyframes blink { + to { + background-color: #ffffff; + color: black; + } +} + +#battery.warning:not(.charging) { + background: #f53c3c; + color: white; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#clock { + background-color: #ffffff; + color: #000000; +} + +#idle_inhibitor.activated { + font-size: 1.5rem; +} + +#idle_inhibitor.deactivated { + font-size: 1.5rem; +} + +#keyboard-state { + margin: 0 0.625rem; + min-width: 0.5rem; + /* padding: 0 0.625rem; */ +} + +#keyboard-state > label { + padding: 0 5px; +} + +#keyboard-state > label.locked { + background: rgba(0, 0, 0, 0.2); +} \ No newline at end of file diff --git a/hyprland/.config/waybar/style.css b/hyprland/.config/waybar/style.css index 8306836..1797ef7 100644 --- a/hyprland/.config/waybar/style.css +++ b/hyprland/.config/waybar/style.css @@ -1,120 +1,390 @@ +/* + * vim: fdm=marker fdl=1 + * */ + +/* start flavours */ +@define-color base00 #0c0c0c; +@define-color base01 #db4d6d; +@define-color base02 #5dac81; +@define-color base03 #fad689; +@define-color base04 #58b2dc; +@define-color base05 #69b0ac; +@define-color base06 #70649a; +@define-color base07 #bdc0ba; +@define-color base08 #1c1c1c; +@define-color base09 #cb1b45; +@define-color base0A #86c166; +@define-color base0B #f7d94c; +@define-color base0C #2ea9df; +@define-color base0D #81c7d4; +@define-color base0E #8a6bbe; +@define-color base0F #fffffb; + * { - font-family: FontAwesome, 'Noto Sans', sans-serif; - font-size: 1rem; - min-height: 0; - border: none; - border-radius: 0; + font-family: 'Noto Sans', FontAwesome, Material Design Icons; + font-size: 12pt; +} +/* end flavours */ + +@define-color accent @base06; +@define-color accentdarker @base0E; +@define-color foreground @base07; +@define-color background @base00; +/* @define-color background rgba(12, 12, 12, 0.96); */ +@define-color dimmed #5e5e5e; +@define-color dimmeddarker #434343; +@define-color urgent @base09; + +* { + border: none; + border-radius: 0; } window#waybar { - background-color: rgba(43,48,59,0.5); - color: #ffffff; + background: @background; + color: @foreground; + /* padding: 0 0.3rem; */ } -tooltip { - background: rgba(43,48,59,0.5); - border: 1px solid rgba(100,114,125,0.5) -} -tooltip label { - color: white; +window#waybar.hidden { + opacity: 0; } -#wireplumber, -#clock, -#battery { - padding: 0 0.625rem; - /* color: #ffffff; */ -} - -#workspace button { - padding: 0 0.5em; - background: transparent; - color: white; - border-bottom: 3px solid transparent; -} - -#workspace button.focused { - background: #64727D; - border-bottom: 3px solid white; -} #window, -#workspaces { - margin: 0 0.25rem; -} - -.modules-left > widget:first-child > #workspaces { - margin-left: 0; -} - -.modules-right > widget:last-child > #workspaces { - margin-right: 0; -} - +#mode, +#clock, +#battery, +#cpu, +#memory, +#disk, +#temperature, +#backlight, +#idle_inhibitor, +#network, +#pulseaudio, #wireplumber, -#battery { - background-color: #ffffff; - color: #000000; +#custom-toggl, +#custom-gammastep, +#custom-weather, +#custom-mpris, +#custom-todo, +#custom-covid, +#custom-timetracked, +#tray { + /* border-top: 1px solid @dimmeddarker; */ + padding: 0 0.1rem; + margin: 0 0.2rem; + color: @dimmed; } -#battery.plugged { - color: #ffffff; - background-color: #26A65B; +#cpu:hover, +#memory:hover, +#backlight:hover, +#idle_inhibitor:hover, +#network:hover, +#network.tailscale:hover, +#pulseaudio:hover, +#wireplumber:hover, +#custom-mpris:hover, +#custom-gammastep:hover, +#custom-todo:hover { + color: @foreground; + transition-property: background; + transition-duration: 0.1s; } -#battery.discharging { - background-color: #ff1111; +#tags button, +#workspaces button { + padding: 0 5px; + background: transparent; + color: @dimmed; + /* border-bottom: 3px solid transparent; */ } +#tags button { + color: @dimmeddarker; +} + +#tags button.occupied { + color: @dimmed; +} + +#workspaces button.visible { + color: @dimmeddarker; + background: @accentdarker; +} + +#tags button.focused, +#workspaces button.focused { + font-weight: bold; + color: @foreground; + background: @accent; + transition-property: background; + transition-duration: 0.01s; +} + +#tags button.urgent, +#workspaces button.urgent { + color: @background; + background: @urgent; +} + +#tags button:hover, +#tags button.focused:hover, +#workspaces button:hover, +#workspaces button.focused:hover { + background: @accent; + color: @foreground; + transition-property: background, color; + transition-duration: 0.01s; + + /* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */ + box-shadow: inherit; + text-shadow: inherit; +} + +#tags button.urgent:hover, +#workspaces button.urgent:hover { + background: @foreground; + transition-property: background; + transition-duration: 0.01s; +} + +#mode { + /* font-style: italic; */ + color: @background; + background: @base03; + margin: 3px 6px; + border-radius: 2px; +} + +#clock {} + +#clock.local { + color: @foreground; +} + +#clock.utc {} + +#disk.root {} + +#disk.home { + /* margin-left: 0; */ + /* padding-left: 0; */ +} + +#battery {} + #battery.charging { - background-color: #00ff00; -} - -#battery.charging { - color: white; - background-color: #26A65B; + color: @background; + background: @base0A; } @keyframes blink { - to { - background-color: #ffffff; - color: black; - } + to { + background: @foreground; + color: @background; + } } -#battery.warning:not(.charging) { - background: #f53c3c; - color: white; - animation-name: blink; - animation-duration: 0.5s; - animation-timing-function: steps(12); - animation-iteration-count: infinite; - animation-direction: alternate; +#battery.critical:not(.charging) { + color: @foreground; + background: @urgent; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; } -#clock { - background-color: #ffffff; - color: #000000; +label:focus { + background: @background; } +#cpu {} + +#memory {} + +#backlight {} + +#backlight.off { + color: @dimmed; +} + +#network {} + +#network.disconnected { + border-top: 1px solid @urgent; + color: @dimmed; +} + +#network.tailscale.disabled, +#network.tailscale.disconnected, +#network.mullvad.disabled, +#network.mullvad.disconnected { + border-top: 1px solid @dimmeddarker; +} + +#network.tailscale.ethernet, +#network.tailscale.linked, +#network.mullvad.ethernet, +#network.mullvad.linked { + color: @foreground; + border-top: 1px solid @base0E; +} + +#pulseaudio {} + +#pulseaudio.muted { + border-top: 1px solid @urgent; + color: @dimmed; +} + +#pulseaudio.bluetooth { + border-top: 1px solid @base04; +} + +#wireplumber {} + +#wireplumber.muted { + border-top: 1px solid @urgent; + color: @dimmed; +} + +#wireplumber.bluetooth { + border-top: 1px solid @base04; +} + +#temperature {} + +#temperature.critical { + color: @foreground; + background: @urgent; + border-top: none; +} + +#tray {} + +#idle_inhibitor {} + #idle_inhibitor.activated { - font-size: 1.5rem; + color: @foreground; + border-top: 1px solid @base02; } -#idle_inhibitor.deactivated { - font-size: 1.5rem; +#mpris { + color: @foreground; } -#keyboard-state { - margin: 0 0.625rem; - min-width: 0.5rem; - /* padding: 0 0.625rem; */ +#mpris.playing, +#mpris.paused { + border-top: 1px solid @base04; } -#keyboard-state > label { - padding: 0 5px; +#mpris.paused { + font-style: italic; } -#keyboard-state > label.locked { - background: rgba(0, 0, 0, 0.2); +#mpris.spotify { + border-top: 1px solid #1db954; +} + +#mpris.mpv { + border-top: 1px solid #8f008f; +} + +#custom-toggl { + color: @foreground; + border-top: 1px solid @urgent; +} + +#custom-todo.off { + color: @dimmed; + border-top: 1px solid @dimmeddarker; + padding: 0 0 0 0.4rem; +} + +#custom-todo.on { + color: @foreground; + border-top: 1px solid @urgent; + font-weight: bold; + padding: 0 0.6rem 0 0.4rem; +} + +#custom-todo.work { + background: @urgent; +} + +#custom-timetracked { + color: @urgent; + border-top: 1px solid @urgent; +} + +@keyframes flash { + 50% { + background: rgba(255, 174, 66, 0.7); + color: @background; + } +} + +#custom-gamma.night { + border-top: 1px solid @base0C; + color: @foreground; + animation-name: flash; + animation-duration: 0.3s; + animation-timing-function: linear; + animation-iteration-count: 1; +} + +#custom-gamma.day { + color: @dimmed; +} + +#custom-gamma.off { + border-top: 1px solid @urgent; + color: @dimmed; +} + +#custom-weather { + color: @dimmed; +} + +#custom-covid.green { + /* border-top: 1px solid #00cc00; */ + /* color: #00cc00; */ +} + +#custom-covid.yellow { + /* border-top: 1px solid #f7dd31; */ + /* color: #f7dd31; */ +} + +#custom-covid.orange { + /* border-top: 1px solid #faa31b; */ + /* color: #faa31b; */ +} + +#custom-covid.red { + /* border-top: 1px solid #f92206; */ + /* color: #f92206; */ +} + +#custom-covid.darkred { + /* border-top: 1px solid #c01a00; */ + /* color: #c01a00; */ +} + +#custom-covid.darkdarkred { + /* border-top: 1px solid #941100; */ + /* color: #941100; */ +} + +#custom-hotspots { + border-top: 1px solid @urgent; + color: @dimmed; +} + +#custom-hotspots.soon { + color: @urgent; } \ No newline at end of file