{
  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";

          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";
          };

          "sway/mode" = {
            format = ''<span style="italic">󰁌  {}</span>''; # 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 = ''<span style="italic">󰁌  {}</span>''; # 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 = ''<span size="large">{icon}</span>'';
            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 = "<span foreground='red'><sup></sup></span>"; # Icon: bell_outline
              none = ""; # Icon: bell_outline
              dnd-notification = "<span foreground='red'><sup></sup></span>"; # Icon: bell_off_outline
              dnd-none = ""; # Icon: bell_off_outline
            };
            escape = true;
          };
        }
      ];

      style = ./style.css;
    };
  };
}