{ config, pkgs, ... }:
{
  imports = [ ./avizo.nix ];
  stylix.targets.waybar.enable = false;
  systemd.user.targets.tray.Unit = {
    Description = "Home Manager System Tray";
    Requires = [ "graphical-session.target" ];
  };
  home.packages = [ pkgs.playerctl ]; # For MPRIS to work
  programs.waybar = {
    enable = true;
    systemd.enable = true;
    settings.main = {
      name = "main";
      layer = "top";
      position = "left";
      # Layout
      "modules-left" = [
        "hyprland/workspaces"
        "mpris"
      ];
      "modules-center" = [ ];
      "modules-right" = [
        "custom/notification"
        "pulseaudio"
        "network"
        "bluetooth"
        "clock#calendar"
        "clock"
        "backlight"
        "battery"
        "custom/weather"
        "systemd-failed-units"
        "tray"
      ];
      # Module config
      "hyprland/workspaces" = {
        format = "{icon}";
        format-icons = {
          "1" = "󰆍";
          "2" = "󰖟";
          "3" = "󰭹";
          "4" = "󱧶";
          "5" = "󰢹";
          "6" = "󰐫";
          "7" = "󰊴";
          default = "󰀻";
        };
        all-outputs = false;
        persistent-workspaces = {
          "1" = [ ];
          "2" = [ ];
          "3" = [ ];
          "4" = [ ];
          "5" = [ ];
          "6" = [ ];
          "7" = [ ];
        };
      };
      "hyprland/window" = {
        "format" = "{title}";
        "max-length" = 50;
        "rewrite" = {
          "(.*) - GNU Emacs at (.*)" = " $1 [$2]";
          "(alacritty.*)" = " $1";
          "(.*) - mpv" = "󰦟 $1";
          "swayimg: (.*)" = "󰋩 $1";
          "swappy" = "󰹑 swappy";
          "(?:/nix/.*)(btm)" = " Resource Usage [$1]";
          "(?:/nix/.*)(cava)" = "󰝚 Music Visualiser [$1]";
          "Mozilla Firefox" = "󰈹 $1";
          "(.*) — Mozilla Firefox" = "󰈹 $1";
          "Nyxt - (.*)" = "󰀹 $1";
          "(.*) - Chromium" = "󰊯 $1";
          "(Signal.*)" = "󰭹 $1";
          "(WhatsApp for Linux.*)" = "󰖣 $1";
          "((?:.*)WebCord.*)" = "󰙯 $1";
          "(Cartridges.*)" = "󰊗 $1";
          "([Ss]team.*)" = "󰓓 $1";
          "(Prism Launcher.*)" = "󰍳 Minecraft ($1)";
          "(.*)(?: *)PrusaSlicer-(.*)" = "󰐫 $1 PrusaSlicer ($2)";
          "(.*)(?: *)PrusaSlicer G-code Viewer-(.*)" = "󰹛 $1 G-code Viewer ($2)";
          "FreeCAD (.*)" = "󰻬 FreeCAD $1";
          "(.*) - Blender.* " = "󰂫 $1";
          "(Remmina Remote Desktop Client)" = "󰢹 $1";
          "(NoMachine|Nxplayer.bin)(?: *)(.*)" = "󰢹 $1 $2";
        };
      };
      mpris = {
        "format" = "{player_icon}\n{status_icon}";
        "tooltip-format" = "{player_icon} ({player}) {status_icon}\n{title}\n{album}\n{artist}";
        "interval" = 1;
        "dynamic-order" = [
          "album"
          "artist"
          "title"
          "position"
          "length"
        ];
        "player-icons" = {
          "default" = "󰲸";
        };
        "status-icons" = {
          "playing" = "󰐊";
          "paused" = "󰏤";
          "stopped" = "󰓛";
        };
        "ignored-players" = [
          "com"
          "firefox"
        ];
      };
      pulseaudio = {
        scroll-step = 5;
        format = "{format_source}\n{icon}";
        # format-muted = "{format_source} {icon}";
        format-source = "󰍬";
        format-source-muted = "󰍭";
        format-icons = {
          car = "󰄍";
          default = [
            "󰕿"
            "󰖀"
            "󰕾"
          ];
          default-muted = "󰝟";
          hands-free = "󰥰";
          headset = "󰋎";
          phone = "󰏲";
          portable = "󰏳";
          headphone = "󰋋";
        };
        tooltip = true;
        tooltip-format = "{desc} ({volume}%)";
        on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
        on-click-right = "${config.services.avizo.package}/bin/volumectl %";
        on-scroll-up = "${config.services.avizo.package}/bin/volumectl -u + 5";
        on-scroll-down = "${config.services.avizo.package}/bin/volumectl -u - 5";
      };
      network = {
        format-icons = [
          "󰤟"
          "󰤢"
          "󰤥"
          "󰤨"
        ];
        format-wifi = "{icon}";
        format-ethernet = "󰈁";
        format-linked = "󰈂";
        format-disconnected = "󰈂";
        tooltip-format = "{essid} ({signalStrength}%)";
        on-click = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
      };
      bluetooth = {
        format = "󰂯";
        format-disabled = "󰂲";
        format-off = "󰂲";
        format-on = "󰂯";
        format-connected = "󰂱";
        tooltip-format = "{status} | {device_alias}";
        on-click = "${pkgs.blueman}/bin/blueman-manager";
      };
      "clock#calendar" =
        let
          size = "${toString config.stylix.fonts.sizes.popups}pt";
        in
        {
          format = "󰃭";
          tooltip-format = "<span size='${size}'>{calendar}</span>";
          calendar = {
            mode = "month";
            weeks-pos = "left";
            on-scroll = 1;
            format =
              let
                scheme = config.lib.stylix.scheme.withHashtag;
              in
              {
                months = "<span color='${scheme.red}'><b>{}</b></span>";
                weeks = "<span color='${scheme.cyan}'><i>W{}</i></span>";
                weekdays = "<span color='${scheme.orange}'><u>{}</u></span>";
                days = "<span color='${scheme.base05}'>{}</span>";
                today = "<span color='${scheme.magenta}'><b><u>{}</u></b></span>";
              };
          };
          actions = {
            on-scroll-up = "shift_up";
            on-scroll-down = "shift_down";
          };
        };
      clock = {
        format = "{:%H\n%M}";
        tooltip = false;
      };
      backlight = {
        format = "{icon}";
        tooltip-format = "{percent}%";
        format-icons = [
          ""
          ""
          ""
          ""
          ""
          ""
          ""
          ""
          ""
        ];
      };
      battery = {
        states = {
          warning = 20;
          critical = 10;
        };
        format = "{icon}";
        format-time = "{H}:{m}";
        format-charging = "󰂄";
        format-plugged = "󰚥";
        # format-warning = "{icon}{capacity}%";
        # format-critical = "{icon}{capacity}% ({time})";
        tooltip-format = "{capacity}% | {power}W | {time}";
        format-icons = [
          "󱃍"
          "󰁺"
          "󰁻"
          "󰁼"
          "󰁽"
          "󰁾"
          "󰁿"
          "󰂀"
          "󰂁"
          "󰂂"
          "󰁹"
        ];
      };
      "systemd-failed-units" = {
        hide-on-ok = true;
        format = "󰀦";
        system = true;
        user = false;
      };
      "custom/notification" =
        let
          makoctl = "${config.services.mako.package}/bin/makoctl";
          jq = "${pkgs.jq}/bin/jq";
        in
        {
          exec = "( ${makoctl} list | ${jq} -e '.data[] | length > 0' >/dev/null && echo '󱅫' ) || echo '󰂚' ";
          format = "{}";
          tooltip = false;
          on-click = "${makoctl} dismiss -a";
          interval = 3;
        };
      "custom/weather" =
        let
          date-format = "%Y-%m-%d";
          custom-indicator = "{ICON}"; # "{temp_C}°C({FeelsLikeC}°C)";
        in
        {
          format = "{}";
          tooltip = true;
          interval = 900; # Every 15 minutes
          exec = ''${pkgs.wttrbar}/bin/wttrbar --location Didcot --date-format "${date-format}" --custom-indicator "${custom-indicator}"'';
          return-type = "json";
        };
      tray = {
        icon-size = 20;
        show-passive-items = true;
        spacing = 5;
      };
    };
    style =
      let
        scheme = config.lib.stylix.scheme.withHashtag;
        opacity = config.stylix.opacity.desktop;
      in
      ''
        * {
            all: unset;
            font-family: ${config.stylix.fonts.monospace.name};
            font-size: ${toString config.stylix.fonts.sizes.desktop}px;
        }

        window {
            background: transparent;
            box-shadow: none;
            border: none;
        }

        window > box {
            color: ${scheme.base05};
            background: alpha(${scheme.base00}, ${toString opacity});
            margin: 5px 0px 5px 6px;
            padding: 2px;
            border: 1px solid ${scheme.base04};
            border-radius: 10px;
        }

        tooltip {
            background: ${scheme.base00};
            border: 2px solid ${scheme.base0E};
            border-radius: 10px;
            box-shadow: none;
            padding: 10px;
        }

        tooltip label {
            color: ${scheme.base05};
            border: none;
            padding: 5px;
            margin: 0px;
        }

        #workspaces,
        #window,
        #mpris,
        #custom-notification,
        #pulseaudio,
        #network,
        #bluetooth,
        #clock,
        #backlight,
        #battery,
        #custom-weather,
        #tray {
            margin: 0px;
            padding: 2px 4px 2px 3px;
        }

        #workspaces {
            background: ${scheme.base00};
            border-radius: 5px;
            margin: 3px 2px;
            padding: 2px 3px;
        }

        #workspaces button.empty {
            color: ${scheme.base03};
        }
        #workspaces button.active {
            color: ${scheme.base0E};
        }
        #workspaces button.urgent {
            color: ${scheme.base09};
        }

        #mpris.paused {
            color: ${scheme.base03};
        }

        #custom-notification {
            color: ${scheme.base08};
        }
        #pulseaudio {
            color: ${scheme.base09};
        }
        #network {
            color: ${scheme.base0A};
        }
        #bluetooth {
            color: ${scheme.base0B};
        }
        #clock.calendar {
            color: ${scheme.base0C};
        }
        #clock {
            color: ${scheme.base0D};
        }

        #battery.warning {
            color: ${scheme.base09};
        }
        #battery.critical {
            color: ${scheme.base08};
        }
        #battery.charging,
        #battery.plugged {
            color: ${scheme.base0B};
        }

        #systemd-failed-units.ok {
            color: ${scheme.base0B}
        }
        #systemd-failed-units.degraded {
            color: ${scheme.base08}
        }

        #custom-weather,
        #tray {
            padding: 2px 2px 2px 3px;
        }
      '';
  };
}