{ lib, pkgs, config, ... }: with lib; let cfg = config.eboskma.programs.waybar; in { options.eboskma.programs.waybar = { enable = mkEnableOption "Enable waybar"; sway = mkEnableOption "sway"; river = mkEnableOption "river"; profile = mkOption { description = ""; type = types.enum [ "home" "work" ]; default = "home"; }; cpuTempPath = mkOption { description = "The path to the CPU temperature sensor in sysfs"; type = types.path; }; }; config = mkIf cfg.enable { programs.waybar = { enable = true; systemd.enable = true; settings = [ { layer = "top"; position = "top"; height = 32; modules-left = [ ] ++ lib.optionals cfg.river [ "river/tags" "river/mode" ] ++ lib.optionals cfg.sway [ "sway/workspaces" "sway/mode" ] ++ lib.optional (cfg.profile == "home") "custom/now_playing" ++ lib.optional (cfg.profile == "work") "mpris"; modules-center = (lib.optional cfg.sway "sway/window") ++ (lib.optional cfg.river "river/window"); modules-right = [ "network" "memory" "cpu" "temperature" "wireplumber" "clock#date" "clock#time" "tray" "idle_inhibitor" "custom/notifications" ]; "clock#time" = { interval = 1; format = "{:%H:%M:%S}"; tooltip = false; }; "clock#date" = { interval = 10; format = "󰃭 {:%e %b %Y}"; # Icon: calendar tooltip-format = "{:%e %B %Y}"; }; cpu = { interval = 5; format = "󰻠 {usage}% ({load})"; # Icon: cpu_64_bit states = { warning = 70; critical = 90; }; }; 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"; # Icon: network_off_outline tooltip-format = "{ifname}: {ipaddr}"; }; "custom/now_playing" = { exec = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token"; exec-on-event = false; escape = true; format = "󰐹 {}"; # Icon: radio restart-interval = 1; return-type = "json"; on-click = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token play-pause"; on-scroll-down = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token volume-up"; on-scroll-up = "${pkgs.ha-now-playing}/bin/ha-now-playing --host home.datarift.nl --entity media_player.sonos_woonkamer --token-file /run/secrets/ha_now_playing_token volume-down"; }; mpris = { format = "[{player}] {status_icon} {dynamic}"; status-icons = { paused = "󰏤 "; # Icon: pause playing = "󰐊 "; # Icon: play stopped = "󰓛 "; # Icon: stop }; on-click-middle = "stop"; }; "sway/mode" = { format = ''󰁌 {}''; # Icon: arrow_expand_all tooltip = false; }; "sway/window" = { format = "{}"; max-length = 120; }; "sway/workspaces" = { all-outputs = false; disable-scroll = true; format = "{icon} {name}"; sort-by-number = true; format-icons = { urgent = ""; focused = ""; default = ""; }; }; "river/mode" = { format = ''󰁌 {}''; # Icon: arrow_expand_all }; "river/tags" = { }; "river/window" = { max-length = 120; }; "wlr/workspaces" = { all-outputs = false; # disable-scroll = true; on-click = "activate"; format = "{icon} {name}"; sort-by-number = true; format-icons = { "urgent" = ""; # Icon: fa-exclamation_circle "focused" = ""; # Icon: fa-dot_circle_o "default" = ""; # Icon: fa-circle }; }; wireplumber = { format = "{icon} {volume}%"; format-muted = "󰖁"; # Icon: volume_off format-icons = { headphones = "󰋋"; # Icon: headphones handsfree = "󰋎"; # Icon: headset headset = "󰋎"; # Icon: headset phone = ""; # Icon: phone portable = ""; # Icon: phone car = ""; # Icon: car default = [ "󰕿" "󰖀" "󰕾" ]; # Icons: volume_low volume_medium volume_high }; on-click = "${pkgs.pavucontrol}/bin/pavucontrol"; on-click-middle = "${pkgs.helvum}/bin/helvum"; on-click-right = "${pkgs.easyeffects}/bin/easyeffects"; }; temperature = { hwmon-path = cfg.cpuTempPath; 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 = "󰛑"; }; }; "custom/notifications" = { exec = "${pkgs.swaynotificationcenter}/bin/swaync-client --subscribe-waybar"; on-click = "${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-panel --skip-wait"; on-click-right = "${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-dnd --skip-wait"; return-type = "json"; tooltip = false; format = "{icon}"; format-icons = { notification = ""; # Icon: bell_outline none = ""; # Icon: bell_outline dnd-notification = ""; # Icon: bell_off_outline dnd-none = ""; # Icon: bell_off_outline }; escape = true; }; } ]; style = ./style.css; }; }; }