{
  config,
  pkgs,
  fonts,
  accentColourName,
  ...
}: {
  systemd.user.targets.tray.Unit = {
    Description = "Home Manager System Tray";
    Requires = ["graphical-session.target"];
  };
  programs.waybar = {
    enable = true;
    systemd.enable = true;
    settings.main = {
      name = "main";
      layer = "top";
      position = "top";
      # Layout
      "modules-left" = [
        "sway/workspaces"
        "sway/window"
      ];
      "modules-center" = [];
      "modules-right" = [
        "mpris"
        "custom/notification"
        "pulseaudio"
        "network"
        "bluetooth"
        "clock#calendar"
        "clock"
        "backlight"
        "battery"
        "custom/weather"
        "tray"
      ];
      # Module config
      "sway/workspaces" = {
        format = "{icon}";
        format-icons = {
          "1" = "󰫃 ";
          "2" = "󰫄 ";
          "3" = "󰫅 ";
          "4" = "󰫆 ";
          "5" = "󰫇 ";
          "6" = "󰫈 ";
          default = "󰋙 ";
          urgent = "󰁡 ";
        };
        all-outputs = false;
        persistent-workspaces = {
          "1" = [];
          "2" = [];
          "3" = [];
          "4" = [];
          "5" = [];
          "6" = [];
        };
      };
      "sway/window" = {
        "format" = "{title}";
        "max-length" = 50;
        "rewrite" = {
          "(.*) - GNU Emacs at (.*)" = "  $1 [$2]";
          "(alacritty.*)" = "  $1";
          "(.*) - mpv" = "󰦟  $1";
          "swayimg: (.*)" = "󰋩  $1";
          "(btm)" = "  Resource Usage [$1]";
          "(cava)" = "󰝚  Music Visualiser [$1]";
          "(.*) - Thunar" = "󰝰  $1";
          "Mozilla Firefox" = "󰈹  $1";
          "(.*) — Mozilla Firefox" = "󰈹  $1";
          "Nyxt - (.*)" = "󰀹  $1";
          "(.*) - Chromium" = "󰊯  $1";
          "(Signal.*)" = "󰭹  $1";
          "((?:.*)WebCord.*)" = "󰙯  $1";
          "(Cartridges.*)" = "󰊗  $1";
          "([Ss]team.*)" = "󰓓  $1";
          "(Prism Launcher.*)" = "󰍳  Minecraft ($1)";
          "(X2Go Client)" = "󰢹  $1";
          "(NoMachine|Nxplayer.bin) (.*)" = "󰢹  $1 $2";
        };
      };
      mpris = {
        "format" = "{player_icon} {artist} - {title} {status_icon}";
        "tooltip-format" = "{player_icon} ({player}) {dynamic}";
        "title-len" = 64;
        "interval" = 1;
        "dynamic-order" = [
          "album"
          "artist"
          "title"
          "position"
          "length"
        ];
        "player-icons" = {
          "default" = "󰲸 ";
          "emms" = " ";
          "firefox" = "󰈹 ";
          "mpv" = "󰦟 ";
        };
        "status-icons" = {
          "playing" = "󰐊";
          "paused" = "󰏤";
          "stopped" = "󰓛";
        };
        "ignored-players" = [];
      };
      pulseaudio = {
        scroll-step = 5;
        format = "{format_source}{icon}{volume}%";
        format-muted = "{format_source} 󰝟 ";
        format-source = "󰍬 ";
        format-source-muted = "󰍭 ";
        format-icons = {
          car = "󰄍 ";
          default = ["󰕿 " "󰖀 " "󰕾 "];
          hands-free = "󰥰 ";
          headset = "󰋎 ";
          phone = "󰏲 ";
          portable = "󰏳 ";
          headphone = "󰋋 ";
        };
        on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
        on-click-right = "${pkgs.pamixer}/bin/pamixer -t";
        on-scroll-up = "${pkgs.pamixer}/bin/pamixer -i 5";
        on-scroll-down = "${pkgs.pamixer}/bin/pamixer -d 5";
      };
      disk = {
        format = "󰋊 {percentage_used}%";
        path = config.home.homeDirectory;
      };
      cpu = {
        format = "󰻠 {usage}%";
        tooltip = false;
      };
      memory = {format = "󰍛 {}%";};
      temperature = {
        critical-threshold = 80;
        format = "{icon} {temperatureC}°C";
        format-icons = ["󱃃" "󰔏" "󱃂"];
      };
      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" = {
        format = "󰃭 {:%Y-%m-%d}";
        tooltip-format = "<tt>{calendar}</tt>";
        calendar = {
          mode = "month";
          mode-mon-col = 3;
          weeks-pos = "left";
          on-scroll = 1;
          format = let
            sc = config.scheme.withHashtag;
          in {
            months = "<span color='${sc.red}'><b>{}</b></span>";
            weeks = "<span color='${sc.cyan}'><b>W{}</b></span>";
            weekdays = "<span color='${sc.orange}'><b>{}</b></span>";
            days = "<span color='${sc.base05}'><b>{}</b></span>";
            today = "<span color='${sc.${accentColourName}}'><b><i>{}</i></b></span>";
          };
        };
        actions = {
          on-scroll-up = "shift_up";
          on-scroll-down = "shift_down";
        };
      };
      clock.format = "󰥔 {:%R}";
      backlight = {
        format = "{icon}";
        tooltip-format = "{percent}%";
        format-icons = [" " " " " " " " " " " " " " " " " "];
      };
      battery = {
        states = {
          warning = 30;
          critical = 20;
        };
        format = "{icon}";
        format-charging = "󰂄 ";
        format-plugged = "󰚥 ";
        tooltip-format = "{capacity}% {time}";
        format-icons = ["󱃍 " "󰁺 " "󰁻 " "󰁼 " "󰁽 " "󰁾 " "󰁿 " "󰂀 " "󰂁 " "󰂂 " "󰁹 "];
      };
      "custom/notification" = let
        swaync = pkgs.swaynotificationcenter;
      in {
        tooltip = false;
        format = "{icon}{}";
        format-icons = {
          notification = "󱅫 ";
          none = "󰂚 ";
          dnd-notification = "󰅸 ";
          dnd-none = "󰂜 ";
          inhibited-notification = "󰅸 ";
          inhibited-none = "󰂜 ";
          dnd-inhibited-notification = "󰅸 ";
          dnd-inhibited-none = "󰂜 ";
        };
        return-type = "json";
        exec-if = "which ${swaync}/bin/swaync-client";
        exec = "${swaync}/bin/swaync-client -swb";
        on-click = "${swaync}/bin/swaync-client -t -sw";
        on-click-right = "${swaync}/bin/swaync-client -d -sw";
        escape = true;
      };
      "custom/weather" = let
        date-format = "%Y-%m-%d";
        custom-indicator = "{ICON}{temp_C}({FeelsLikeC})";
      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 = builtins.floor fonts.sizes.popups;
        show-passive-items = true;
        spacing = 5;
      };
    };
    style = let
      sc = config.scheme.withHashtag;
      alpha = "0.85";
    in ''
      * {
          all: unset;
          font-size: ${toString fonts.sizes.popups}px;
          font-family: ${fonts.monospace.name};
      }

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

      window > box {
          color: ${sc.base05};
          background: alpha(${sc.base00}, ${alpha});
          margin: 5px 5px 0px;
          padding: 0px;
          border-top: 1px solid ${sc.base04};
          border-radius: 5px;
      }

      tooltip {
          background: ${sc.base00};
          border: 1px solid ${sc.${accentColourName}};
          border-radius: 5px;
          box-shadow: none;
      }

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

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

      #workspaces,
      #window,
      #mpris,
      #tray,
      #backlight,
      #battery,
      #custom-weather {
          color: ${sc.base05};
      }

      #workspaces button {
          background: transparent;
          color: ${sc.base05};
          margin: 0px;
          padding: 0px 5px;
      }
      #workspaces button.persistent {
          color: ${sc.base03};
      }
      #workspaces button.focused {
          color: ${sc.${accentColourName}};
      }
      #workspaces button.urgent {
          color: ${sc.base09};
      }

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