{
  lib,
  config,
  pkgs,
  ...
}:

with lib;
let
  cfg = config.modules.waybar;
  theme = config.theming;
  colors = theme.colors;
in
{
  options.modules.waybar = {
    enable = mkEnableOption "waybar";
  };

  config = mkIf cfg.enable {
    home.packages = with pkgs; [
      pulsemixer
      playerctl
      wpa_supplicant_gui # TODO: Move
    ];

    modules.desktop.reloadScript = ''
      # if ${pkgs.procps}/bin/pgrep waybar; then
      #   ${pkgs.procps}/bin/pkill waybar
      # fi
      ${pkgs.waybar}/bin/waybar &
    '';

    programs.waybar = {
      enable = true;
      settings = {
        mainBar = {
          layer = "top";
          spacing = 16;
          modules-left = [ "river/tags" ];
          modules-center = [
            #"river/window"
            "mpris"
          ];
          modules-right = [
            "bluetooth"
            "network"
            "pulseaudio"
            "battery"
            "clock"
          ];
          "river/window" = {
            max-length = 50;
          };
          "river/tags" = {
            tag-labels = [
              "一"
              "二"
              "三"
              "四"
              "五"
              "六"
              "七"
              "八"
              "九"
            ];
            disable-click = false;
          };
          network = {
            tooltip = false;
            on-click = "wpa_gui";
            format-wifi = "直 {essid}"; # Spacing achieved using "Thin Space"
            format-ethernet = "TODO";
            format-disconnected = "睊";
          };
          pulseaudio = {
            tooltip = false;
            format = "{icon}   {volume}%"; # Spacing achieved using "Thin Space"
            #format-muted = "";
            format-muted = "{icon}  --%"; # Spacing achieved using "Thin Space"
            format-icons = {
              #headphone = "";
              #default = [ "" "" ];
              headphone = "";
              headphone-muted = "";
              default = [
                ""
                ""
                ""
              ];
            };
          };
          battery = {
            format = "{icon} {capacity}%"; # Spacing achieved using "Thin Space"
            format-charging = " {capacity}%"; # Spacing achieved using "Thin Space"
            #format-icons = [ "󰂎" "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ];
            format-icons = [
              ""
              ""
              ""
              ""
              ""
              ""
              ""
              ""
              ""
              ""
              ""
            ];
            interval = 1;
          };
          clock = {
            #format = "󰅐 {:%H:%M}";
            #format = "   {:%H:%M}"; # Spacing achieved using "Thin Space"
            format = "{:%H:%M}";
          };
          mpris = {
            format = "{dynamic}";
            tooltip-format = "";
            interval = 1;
          };
          bluetooth = {
            tooltip = false;
            format = "  {status}"; # Spacing achieved using "Thin Space"
            format-connected = "  {device_alias}"; # Spacing achieved using "Thin Space"
          };
        };
      };
      # TODO: Replace base03 color with named color
      style = ''
        window#waybar {
          color: #${colors.fg};
          background-color: #${colors.bg};
          border-style: none none solid none;
          border-width: ${toString theme.layout.borderSize}px;
          border-color: #${colors.border-unfocused};
          font-size: 12px;
          font-family: "${theme.fonts.monospace.name}";
        }

        .modules-right {
          margin: 0 8px 0 0;
        }

        #tags button {
          color: #${theme.schemeColors.base03};
          padding: 0 5px 1px 5px;
          border-radius: 0;
          font-size: 16px;
          font-family: "wenquanyi bitmap song";
        }

        #tags button.occupied {
          color: #${colors.fg};
        }

        #tags button.focused {
          color: #${colors.accent};
        }
      '';
    };
  };
}