From d09224cb3b0b3316d2414adbbcef8f1d21f3bfd3 Mon Sep 17 00:00:00 2001 From: Tyler Perkins Date: Fri, 3 Oct 2025 18:57:00 -0400 Subject: [PATCH] Update waybar --- .config/waybar/config.jsonc | 277 ++++++++++++++++++++++++----------- .config/waybar/style.css | 284 +++++++++++++++++++++++++++++++----- 2 files changed, 444 insertions(+), 117 deletions(-) diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc index c56fc64..71a42b8 100644 --- a/.config/waybar/config.jsonc +++ b/.config/waybar/config.jsonc @@ -1,74 +1,77 @@ { - // Waybar reads JSONC and is styled via CSS. - // niri has a native workspaces module "niri/workspaces". - // Save as: ~/.config/waybar/config.jsonc + "layer": "top", + "position": "top", - "layer": "top", - "position": "top", - "height": 28, - "gtk-layer-shell": true, - - "modules-left": [ + "modules-left": [ "niri/workspaces", - ], - "modules-center": [ - ], - "modules-right": [ - "custom/weather", - "custom/loadavg", + "custom/arrow10" + ], + + "modules-right": [ + "custom/arrow9", + "pulseaudio", + "custom/arrow8", + "network", + "custom/arrow7", + "memory", + "custom/arrow6", + "cpu", + "custom/arrow5", + "temperature", + "custom/arrow4", + "battery", + "custom/arrow3", "custom/docker", + "custom/arrow2", + "tray", + "clock#date", + "custom/arrow1", + "clock#time" + ], - "cpu", - "memory", - "pulseaudio", - "bluetooth", - "battery", - "tray", - "clock" - ], + // Modules + + "battery": { + "interval": 10, + "states": { + "warning": 30, + "critical": 15 + }, + "format-time": "{H}:{M:02}", + "format": "{icon} {capacity}% ({time})", + "format-charging": " {capacity}% ({time})", + "format-charging-full": " {capacity}%", + "format-full": "{icon} {capacity}%", + "format-alt": "{icon} {power}W", + "format-icons": [ + "", + "", + "", + "", + "" + ], + "tooltip": false + }, + + "clock#time": { + "interval": 10, + "format": "{:%H:%M}", + "tooltip": false + }, + + "clock#date": { + "interval": 20, + "format": "{:%e %b %Y}", + "tooltip": false + //"tooltip-format": "{:%e %B %Y}" + }, - // ----- niri workspaces ----- "niri/workspaces": { "format": "{name}", "on-click": "niri msg action toggle-overview", "disable-scroll": false }, - // ----- CPU / Memory ----- - "cpu": { - "interval": 3, - "format": " {usage:>2}%" - }, - "memory": { - "interval": 5, - "format": " {used:0.1f}G" - }, - - // ----- Clock / Date ----- - "clock": { - "interval": 1, - "format": " {:%a %b %d}  {:%H:%M:%S}", - "tooltip": false - }, - - // ----- Loadavg (custom) ----- - "custom/loadavg": { - "exec": "awk '{printf \" %s\", $1}' /proc/loadavg", - "interval": 5, - "return-type": "text", - "tooltip": false - }, - - // ----- IP (custom) ----- - // Shows first non-loopback IPv4; adjust if you prefer a specific iface. - "custom/ip": { - "exec": "ip -4 -o addr show scope global | awk '{print $4}' | cut -d/ -f1 | head -n1 | awk '{print \" \"$1}'", - "interval": 15, - "return-type": "text", - "tooltip": "ip -4 -o addr show" - }, - - // ----- Docker (custom) ----- "custom/docker": { "exec": "printf \" %s\" \"$(docker ps -q 2>/dev/null | wc -l)\"", "interval": 10, @@ -76,30 +79,140 @@ "tooltip": "docker ps" }, - // ----- Bluetooth (native) ----- - "bluetooth": { - "format": "{status}", - "format-disabled": " off", - "format-connected": " {num_connections}", - "on-click": "blueman-manager" - }, + "cpu": { + "interval": 1, + "tooltip": false, + "format": " {usage}%", + "format-alt": " {load}", + "states": { + "warning": 70, + "critical": 90 + } + }, - // ----- Battery ----- - "battery": { - "interval": 15, - "format": "{icon} {capacity}%", - "format-charging": " {capacity}%", - "format-icons": ["", "", "", "", ""], - "states": { - "warning": 25, - "critical": 10 - } - }, + "memory": { + "interval": 5, + "format": "{used:0.1f}G/{total:0.1f}G", + "states": { + "warning": 70, + "critical": 90 + }, + "tooltip": false + }, - // ----- System tray ----- - "tray": { - "icon-size": 16, - "spacing": 6 - } + "network": { + "interval": 5, + "format-wifi": " {essid} ({signalStrength}%)", + "format-ethernet": "{ifname}", + "format-disconnected": "No connection", + "format-alt": " {ipaddr}/{cidr}", + "tooltip": false + }, + + "sway/mode": { + "format": "{}", + "tooltip": false + }, + + "sway/window": { + "format": "{}", + "max-length": 30, + "tooltip": false + }, + + "sway/workspaces": { + "disable-scroll-wraparound": true, + "smooth-scrolling-threshold": 4, + "enable-bar-scroll": true, + "format": "{name}" + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "format-bluetooth": "{icon} {volume}%", + "format-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", ""] + }, + "scroll-step": 1, + "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle", + "tooltip": false + }, + + "temperature": { + "critical-threshold": 90, + "interval": 5, + "format": "{icon} {temperatureC}°", + "format-icons": [ + "", + "", + "", + "", + "" + ], + "tooltip": false + }, + + "tray": { + "icon-size": 18 + //"spacing": 10 + }, + + "custom/arrow1": { + "format": "", + "tooltip": false + }, + + "custom/arrow2": { + "format": "", + "tooltip": false + }, + + "custom/arrow3": { + "format": "", + "tooltip": false + }, + + "custom/arrow4": { + "format": "", + "tooltip": false + }, + + "custom/arrow5": { + "format": "", + "tooltip": false + }, + + "custom/arrow6": { + "format": "", + "tooltip": false + }, + + "custom/arrow7": { + "format": "", + "tooltip": false + }, + + "custom/arrow8": { + "format": "", + "tooltip": false + }, + + "custom/arrow9": { + "format": "", + "tooltip": false + }, + + "custom/arrow10": { + "format": "", + "tooltip": false + } } +// vi:ft=jsonc diff --git a/.config/waybar/style.css b/.config/waybar/style.css index f860bd0..66c6b1e 100644 --- a/.config/waybar/style.css +++ b/.config/waybar/style.css @@ -1,51 +1,265 @@ -/* Waybar CSS — match your DWM palette + Hermit font */ +/* Keyframes */ +@keyframes blink-critical { + to { + /*color: @white;*/ + background-color: @critical; + } +} + + +/* Styles */ + +/* Colors (gruvbox) */ +@define-color black #282828; +@define-color red #cc241d; +@define-color green #98971a; +@define-color yellow #d79921; +@define-color blue #458588; +@define-color purple #b16286; +@define-color aqua #689d6a; +@define-color gray #a89984; +@define-color brgray #928374; +@define-color brred #fb4934; +@define-color brgreen #b8bb26; +@define-color bryellow #fabd2f; +@define-color brblue #83a598; +@define-color brpurple #d3869b; +@define-color braqua #8ec07c; +@define-color white #ebdbb2; +@define-color bg2 #504945; + + +@define-color warning @bryellow; +@define-color critical @red; +@define-color mode @black; +@define-color unfocused @bg2; +@define-color focused @braqua; +@define-color inactive @purple; +@define-color sound @brpurple; +@define-color network @purple; +@define-color memory @braqua; +@define-color cpu @green; +@define-color temp @brgreen; +@define-color layout @bryellow; +@define-color battery @aqua; +@define-color date @black; +@define-color time @white; + +/* Reset all styles */ * { - font-family: Hermit, monospace; - font-size: 11pt; + border: none; + border-radius: 0; + min-height: 0; + margin: 0; + padding: 0; + box-shadow: none; + text-shadow: none; + icon-shadow: none; } -window#waybar { - background: #222222; - color: #eeeeee; - border-bottom: 0px solid transparent; +/* The whole bar */ +#waybar { + background: rgba(40, 40, 40, 0.8784313725); /* #282828e0 */ + color: @white; + font-family: JetBrains Mono, Siji; + font-size: 10pt; + /*font-weight: bold;*/ } +/* Each module */ +#battery, +#clock, +#cpu, +#language, +#memory, +#mode, +#network, +#pulseaudio, +#temperature, +#tray, +#backlight, +#idle_inhibitor, +#disk, +#user, +#mpris { + padding-left: 8pt; + padding-right: 8pt; +} + +/* Each critical module */ +#mode, +#memory.critical, +#cpu.critical, +#temperature.critical, +#battery.critical.discharging { + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; + animation-name: blink-critical; + animation-duration: 1s; +} + +/* Each warning */ +#network.disconnected, +#memory.warning, +#cpu.warning, +#temperature.warning, +#battery.warning.discharging { + color: @warning; +} + +/* And now modules themselves in their respective order */ + +/* Current sway mode (resize etc) */ +#mode { + color: @white; + background: @mode; +} + +/* Workspaces stuff */ #workspaces button { - padding: 0 6px; - margin: 0 3px; - border-radius: 6px; - background: #222222; - color: #bbbbbb; - border: 1px solid #444444; + /*font-weight: bold;*/ + padding-left: 2pt; + padding-right: 2pt; + color: @white; + background: @unfocused; } -#workspaces button.active { - background: #458588; /* your light blue accent */ - color: #eeeeee; - border-color: #458588; + +/* Inactive (on unfocused output) */ +#workspaces button.visible { + color: @white; + background: @inactive; } + +/* Active (on focused output) */ +#workspaces button.focused { + color: @black; + background: @focused; +} + +/* Contains an urgent window */ +#workspaces button.urgent { + color: @black; + background: @warning; +} + +/* Style when cursor is on the button */ #workspaces button:hover { - background: #444444; - color: #eeeeee; + background: @black; + color: @white; } -#cpu, #memory, #clock, #pulseaudio, #battery, #tray, -#custom-weather, #custom-loadavg, #custom-ip, #custom-docker, #bluetooth { - padding: 0 10px; - margin: 0 4px; - border-radius: 8px; - background: #222222; - border: 1px solid #444444; +#window { + margin-right: 35pt; + margin-left: 35pt; } -#pulseaudio.muted { - color: #bbbbbb; - opacity: 0.7; -} -#battery.warning { - color: #ffcc00; -} -#battery.critical { - color: #ff5555; +#pulseaudio { + background: @sound; + color: @black; } +#network { + background: @network; + color: @white; +} + +#memory { + background: @memory; + color: @black; +} + +#cpu { + background: @cpu; + color: @white; +} + +#temperature { + background: @temp; + color: @black; +} + +#language { + background: @layout; + color: @black; +} + +#battery { + background: @battery; + color: @white; +} + +#tray { + background: @date; +} + +#clock.date { + background: @date; + color: @white; +} + +#clock.time { + background: @time; + color: @black; +} + +#custom-arrow1 { + font-size: 11pt; + color: @time; + background: @date; +} + +#custom-arrow2 { + font-size: 11pt; + color: @date; + background: @layout; +} + +#custom-arrow3 { + font-size: 11pt; + color: @layout; + background: @battery; +} + +#custom-arrow4 { + font-size: 11pt; + color: @battery; + background: @temp; +} + +#custom-arrow5 { + font-size: 11pt; + color: @temp; + background: @cpu; +} + +#custom-arrow6 { + font-size: 11pt; + color: @cpu; + background: @memory; +} + +#custom-arrow7 { + font-size: 11pt; + color: @memory; + background: @network; +} + +#custom-arrow8 { + font-size: 11pt; + color: @network; + background: @sound; +} + +#custom-arrow9 { + font-size: 11pt; + color: @sound; + background: transparent; +} + +#custom-arrow10 { + font-size: 11pt; + color: @unfocused; + background: transparent; +}