{ lib, pkgs, config, ... }: with lib; let cfg = config.eboskma.programs.waybar; in { options.eboskma.programs.waybar.enable = mkEnableOption "Enable waybar"; config = mkIf cfg.enable { programs.waybar = { enable = true; settings = [ { layer = "top"; position = "top"; height = 30; modules-left = [ "sway/workspaces" "sway/mode" # "custom/now_playing" ]; modules-center = [ "sway/window" ]; modules-right = [ "network" "memory" "cpu" "temperature" "custom/keyboard-layout" "pulseaudio" "tray" "clock#date" "clock#time" "idle_inhibitor" ]; modules = { "clock#time" = { interval = 1; format = "{:%H:%M:%S}"; tooltip = false; }; "clock#date" = { interval = 10; format = " {:%e %b %Y}"; tooltip-format = "{:%e %B %Y}"; }; "cpu" = { interval = 5; format = "﬙ {usage}% ({load})"; states = { warning = 70; critical = 90; }; }; "custom/keyboard-layout" = { exec = "swaymsg -t get_inputs | grep -m1 'xkb_active_layout_name' | cut -d '\"' -f4"; interval = 30; format = " {}"; # Icon: keyboard # Signal sent by Sway key binding (~/.config/sway/key-bindings) signal = 1; # SIGHUP tooltip = false; }; "memory" = { interval = 5; format = " {}%"; # Icon: memory states = { warning = 70; critical = 90; }; }; "network" = { interval = 5; format-wifi = "直 {essid} ({signalStrength}%)"; # Icon: wifi format-ethernet = " {ifname}: {ipaddr}/{cidr}"; # Icon: ethernet format-disconnected = "⚠ Disconnected"; tooltip-format = "{ifname}: {ipaddr}"; }; "sway/mode" = { format = " {}"; # Icon: expand-arrows-alt tooltip = false; }; # TODO: package as nix thingy # "custom/now_playing" = { # exec = "${HOME}/.config/waybar/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token "; # format = " ♪ {}"; # interval = 2; # on-click = "${HOME}/.config/waybar/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token "; # on-scroll-down = "${HOME}/.config/waybar/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token "; # on-scroll-up = "${HOME}/.config/waybar/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token "; # }; "sway/window" = { format = "{}"; max-length = 120; }; "sway/workspaces" = { all-outputs = false; disable-scroll = true; format = "{icon} {name}"; format-icons = { "1 =www" = ""; # Icon = firefox-browser "2 =mail" = ""; # Icon = mail "3 =editor" = ""; # Icon = code "4 =terminals" = ""; # Icon = terminal "5 =portal" = ""; # Icon = terminal "urgent" = ""; "focused" = ""; "default" = ""; }; }; "pulseaudio" = { #scroll-step = 1; format = "{icon} {volume}%"; format-bluetooth = "{icon} {volume}%"; format-muted = "婢"; format-icons = { headphones = ""; handsfree = ""; headset = ""; phone = ""; portable = ""; car = ""; default = [ "奄" "奔" "墳" ]; }; on-click = "pavucontrol"; }; "temperature" = { hwmon-path = "/sys/class/hwmon/hwmon2/temp1_input"; critical-threshold = 80; interval = 5; format = "{icon} {temperatureC}°C"; format-icons = [ "" # Icon = temperature-empty "" # Icon = temperature-quarter "" # Icon = temperature-half "" # Icon = temperature-three-quarters "" # Icon = temperature-full ]; tooltip = true; }; "tray" = { icon-size = 21; spacing = 10; }; "idle_inhibitor" = { format = "{icon}"; format-icons = { activated = "﯎"; deactivated = "﯏"; }; }; }; } ]; style = '' @keyframes blink-warning { 70% { color: white; } to { color: white; background-color: orange; } } @keyframes blink-critical { 70% { color: white; } to { color: white; background-color: red; } } * { border: none; border-radius: 0; min-height: 0; margin: 0; padding: 0; } #waybar { background: #323232; color: white; font-family: "MesloLGM Nerd Font", sans-serif; font-size: 13px; } #battery, #clock, #cpu, #custom-keyboard-layout, #memory, #mode, #network, #pulseaudio, #temperature, #tray, #custom-now_playing, #idle_inhibitor { padding-left: 10px; padding-right: 10px; } #battery { animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; } #battery.warning { color: orange; } #battery.critical { color: red; } #battery.warning.discharging { animation-name: blink-warning; animation-duration: 3s; } #battery.critical.discharging { animation-name: blink-critical; animation-duration: 2s; } #clock { font-weight: bold; } #cpu { /* No styles */ } #cpu.warning { color: orange; } #cpu.critical { color: red; } #memory { animation-timing-function: linear; animation-iteration-count: infinite; animation-direction: alternate; } #memory.warning { color: orange; } #memory.critical { color: red; animation-name: blink-critical; animation-duration: 2s; } #mode { background: #64727D; border-top: 2px solid white; /* To compensate for the top border and still have vertical centering */ padding-bottom: 2px; } #network { /* No styles */ } #network.disconnected { color: orange; } #pulseaudio { /* No styles */ } #pulseaudio.muted { /* No styles */ } #custom-spotify { color: rgb(102, 220, 105); } #temperature { /* No styles */ } #temperature.critical { color: red; } #tray { /* No styles */ } #window { font-weight: bold; } #workspaces button { border-top: 2px solid transparent; /* To compensate for the top border and still have vertical centering */ padding-bottom: 2px; padding-left: 10px; padding-right: 10px; color: #888888; } #workspaces button.focused { border-color: #4c7899; color: white; background-color: #285577; } #workspaces button.urgent { border-color: #c9545d; color: #c9545d; } #idle_inhibitor { background-color: transparent; font-weight: bold; } #idle_inhibitor.activated { background-color: #c9545d; color: #ffffff; } #custom-now_playing { font-weight: bold; } ''; }; }; }