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