{ config, lib, ... }: with lib; { programs.waybar = mkIf config.my.desktop.sway.enable { enable = true; settings = [ { layer = "top"; position = "top"; height = 30; modules-left = [ "sway/workspaces" "sway/mode" ]; modules-center = [ "sway/window" ]; modules-right = [ "memory" "cpu" "pulseaudio" "network" "battery" "tray" "sway/language" "clock" ]; "sway/workspaces" = { "disable-scroll" = true; "all-outputs" = false; "format" = "{icon}"; "format-icons" = { "1:term" = ""; "2:web" = ""; "3:email" = ""; "4:im" = ""; "5:dev" = ""; "6:music" = ""; "7:graph" = ""; "8:any" = ""; "9:any" = ""; "10:aux" = ""; }; }; "tray" = { "icon-size" = 18; "spacing" = 12; }; "memory" = { "format" = "{percentage:3}% 󰍛"; "states" = { "warning" = 70; "critical" = 90; }; }; "cpu" = { "format" = "{usage:3}% "; "states" = { "warning" = 70; "critical" = 90; }; }; "pulseaudio" = { "format" = "{volume:3}% {icon}"; "format-bluetooth" = "{icon}"; "format-muted" = "󰝟<\big>"; "format-icons" = { "headphone" = ""; "hands-free" = ""; "headset" = ""; "phone" = ""; "portable" = ""; "car" = ""; "default" = [ "" ]; }; "on-click" = "pavucontrol"; "on-scroll-up" = "pamixer -ui 2 && pamixer --get-volume > $SWAYSOCK.wob"; "on-scroll-down" = "pamixer -ud 2 && pamixer --get-volume > $SWAYSOCK.wob"; }; "network" = { "format-wifi" = "{essid} "; "format-ethernet" = ""; "format-disconnected" = "󰌙"; "format-linked" = ""; "format-alt" = "{ifname}: {ipaddr}/{cidr}"; "tooltip-format-ethernet" = " {bandwidthDownBits} {bandwidthUpBits}"; "tooltip-format-wifi" = "{bandwidthDownBits} {bandwidthUpBits}"; }; "battery" = { "states" = { "5pct" = 5; "10pct" = 10; "20pct" = 20; "30pct" = 30; "40pct" = 40; "50pct" = 50; "60pct" = 60; "70pct" = 70; "80pct" = 80; "90pct" = 90; "full" = 100; }; "format" = "{capacity:3}% {icon}"; "format-icons" = { "5pct" = "󰂃"; "10pct" = "󰁺"; "20pct" = "󰁻"; "30pct" = "󰁼"; "40pct" = "󰁽"; "50pct" = "󰁾"; "60pct" = "󰁿"; "70pct" = "󰂀"; "80pct" = "󰂁"; "90pct" = "󰂂"; "full" = "󰁹"; }; "on-click" = "notify-send -u low -t 3000 'Battery Status' \"$(acpi)\""; }; "clock" = { "format-alt" = "{:%A, %B %d}"; "tooltip-format" = "{:%Y %B}\n{calendar}"; }; } ]; style = '' @keyframes blink-warning { to { background-color: #bf616a; } } @keyframes blink-critical { to { color: #2e3440; background-color: #bf616a; } } * { border: none; border-radius: 0; font-family: JetBrainsMono, JetBrainsMono Nerd Font Mono, monospace; font-size: 14px; min-height: 0; box-shadow: none; text-shadow: none; } window#waybar { background-color: #3b4252; color: #e5e9f0; opacity: 0.9; } #window { font-family: JetBrainsMono, JetBrainsMono Nerd Font Mono, sans-serif; } #workspaces { background-color: #4c566a; } #workspaces button { padding: 3px 9px 0px 9px; background: transparent; color: #e5e9f0; border-bottom: 3px solid transparent; font-weight: 900; } #workspaces button.focused { background-color: #434c5e; color: #eceff4; border-bottom: 3px solid #ebcb8b; } #workspaces button:hover { background-color: #5e81ac; } #mode { padding: 0px 9px; background-color: #a3be8c; color: #3b4252; font-family: JetBrains Mono, sans-serif; font-size: 14px; font-weight: bold; } #clock, #language, #pulseaudio, #tray, #memory, #cpu, #battery, #network { padding: 0px 8px; color: #d8dee9; font-size: 14px; } #clock { background-color: #4c566a; font-weight: bold; } #language { color: #d8dee9; font-weight: bold; } #pulseaudio { } #pulseaudio.muted { color: #d08770; } #tray { margin-left: 10px; } #cpu { padding-left: 0px; font-size: 14px; } #cpu.warning { color: #ebcb8b; } #cpu.critical { color: #d08770; } #memory { padding-left: 0px; font-size: 14px; } #memory.warning { color: #ebcb8b; } #memory.critical { color: #d08770; } #battery { font-size: 14px; animation-timing-function: ease-in-out; animation-iteration-count: infinite; animation-direction: alternate; } #battery.20pct.discharging { animation-name: blink-warning; animation-duration: 3s; } #battery.10pct.discharging { animation-name: blink-critical; animation-duration: 2s; } ''; }; }