{ pkgs, ... }:
{
  programs.waybar = {
    enable = true;

    package = (pkgs.waybar.overrideAttrs (oldAttrs: {
      mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ];
    })
    );

    settings = {
      mainBar = {
        layer = "top";
        position = "top";
        modules-left = [
          "hyprland/submap"
          "hyprland/workspaces"
          "custom/arrow10"
          "hyprland/window"
        ];
        modules-right = [
          "custom/arrow9"
          "pulseaudio"
          "custom/arrow8"
          "network"
          "custom/arrow7"
          "memory"
          "custom/arrow6"
          "cpu"
          "custom/arrow5"
          "temperature"
          "custom/arrow4"
          "battery"
          "custom/arrow3"
          "hyprland/language"
          "custom/arrow2"
          "tray"
          "clock#date"
          "custom/arrow1"
          "clock#time"
        ];

        # Module configuration
        battery = {
          interval = 10;
          states = {
            warning = 30;
            critical = 15;
          };

          format-time = "{H}:{M:02}";
          format = "{icon} {capacity}% ({time})";
          format-charging = " {capacity}% ({time})";
          format-charging-full = " {capacity}%";
          format-full = "{icon} {capacity}%";
          format-alt = "{icon} {power}W";
          format-icons = [
            ""
            ""
            ""
            ""
            ""
          ];
          tooltip = false;
        };

        "clock#time" = {
          interval = 10;
          format = "{:%H:%M}";
          tooltip = false;
        };
        "clock#date" = {
          interval = 20;
          format = "{:%e %b %Y}";
          tooltip = false;
          #"tooltip-format" = "{:%e %B %Y}"
        };

        "cpu" = {
          interval = 5;
          tooltip = false;
          format = " {usage}%";
          format-alt = " {load}";
          states = {
            warning = 70;
            critical = 90;
          };
        };

        "hyprland/language" = {
          format = " {}";
          min-length = 5;
          #"on-click" = "swaymsg 'input * xkb_switch_layout next'";
          tooltip = false;
        };

        memory = {
          interval = 5;
          format = "🧠 {used:0.1f}G/{total:0.1f}G";
          states = {
            "warning" = 70;
            "critical" = 90;
          };
          tooltip = false;
        };

        network = {
          interval = 5;
          format-wifi = " {essid} ({signalStrength}%)";
          format-ethernet = " {ifname}";
          format-disconnected = "No connection";
          format-alt = " {ipaddr}/{cidr}";
          tooltip = false;
        };

        "hyprland/submap" = {
          format = "{}";
          tooltip = false;
        };

        "hyprland/window" = {
          format = "{}";
          max-length = 30;
          tooltip = false;
        };

        pulseaudio = {
          format = "{icon} {volume}%";
          format-bluetooth = "{icon} {volume}%";
          format-muted = "";
          format-icons = {
            headphone = "";
            hands-free = "";
            headset = "";
            phone = "";
            portable = "";
            car = "";
            default = [
              ""
              ""
            ];
          };
          scroll-step = 1;
          on-click = "pactl set-sink-mute @DEFAULT_SINK@ toggle";
          tooltip = false;
        };

        temperature = {
          critical-threshold = 90;
          interval = 5;
          format = "{icon} {temperatureC}°";
          format-icons = [
            ""
            ""
            ""
            ""
            ""
          ];
          tooltip = false;
        };

        tray = {
          icon-size = 18;
          #"spacing" = 10
        };

        "custom/arrow1" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow2" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow3" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow4" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow5" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow6" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow7" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow8" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow9" = {
          format = "";
          tooltip = false;
        };

        "custom/arrow10" = {
          format = "";
          tooltip = false;
        };
      };
    };

    style = ''
      /* Keyframes */
      @keyframes blink-critical {
        to {
          /*color: @white;*/
          background-color: @critical;
        }
      }

      /* Styles */

      /* Colors (gruvbox) */
      @define-color black	#282828;
      @define-color red	#cc241d;
      @define-color green	#98971a;
      @define-color yellow	#d79921;
      @define-color blue	#458588;
      @define-color purple	#b16286;
      @define-color aqua	#689d6a;
      @define-color gray	#a89984;
      @define-color brgray	#928374;
      @define-color brred	#fb4934;
      @define-color brgreen	#b8bb26;
      @define-color bryellow	#fabd2f;
      @define-color brblue	#83a598;
      @define-color brpurple	#d3869b;
      @define-color braqua	#8ec07c;
      @define-color white	#ebdbb2;
      @define-color bg2	#504945;


      @define-color warning 	@bryellow;
      @define-color critical	@red;
      @define-color mode	@black;
      @define-color unfocused	@bg2;
      @define-color focused	@braqua;
      @define-color inactive	@purple;
      @define-color sound	@brpurple;
      @define-color network	@purple;
      @define-color memory	@braqua;
      @define-color cpu	@green;
      @define-color temp	@brgreen;
      @define-color layout	@bryellow;
      @define-color battery	@aqua;
      @define-color date	@black;
      @define-color time	@white;

      /* Reset all styles */
      * {
        border: none;
        border-radius: 0;
        min-height: 0;
        margin: 0;
        padding: 0;
        box-shadow: none;
        text-shadow: none;
        icon-shadow: none;
      }

      /* The whole bar */
      #waybar {
        background: rgba(40, 40, 40, 0.8784313725); /* #282828e0 */
        color: @white;
        font-family: JetBrains Mono, Siji;
        font-size: 10pt;
        /*font-weight: bold;*/
      }

      /* Each module */
      #battery,
      #clock,
      #cpu,
      #language,
      #memory,
      #mode,
      #network,
      #pulseaudio,
      #temperature,
      #tray,
      #backlight,
      #idle_inhibitor,
      #disk,
      #user,
      #mpris {
        padding-left: 8pt;
        padding-right: 8pt;
      }

      /* Each critical module */
      #mode,
      #memory.critical,
      #cpu.critical,
      #temperature.critical,
      #battery.critical.discharging {
        animation-timing-function: linear;
        animation-iteration-count: infinite;
        animation-direction: alternate;
        animation-name: blink-critical;
        animation-duration: 1s;
      }

      /* Each warning */
      #network.disconnected,
      #memory.warning,
      #cpu.warning,
      #temperature.warning,
      #battery.warning.discharging {
        color: @warning;
      }

      /* And now modules themselves in their respective order */

      /* Current sway mode (resize etc) */
      #mode {
        color: @white;
        background: @mode;
      }

      /* Workspaces stuff */
      #workspaces button {
        /*font-weight: bold;*/
        padding-left: 2pt;
        padding-right: 2pt;
        color: @white;
        background: @unfocused;
      }

      /* Inactive (on unfocused output) */
      #workspaces button.visible {
        color: @white;
        background: @inactive;
      }

      /* Active (on focused output) */
      #workspaces button.focused {
        color: @black;
        background: @focused;
      }

      /* Contains an urgent window */
      #workspaces button.urgent {
        color: @black;
        background: @warning;
      }

      /* Style when cursor is on the button */
      #workspaces button:hover {
        background: @black;
        color: @white;
      }

      #window {
        margin-right: 35pt;
        margin-left: 35pt;
      }

      #pulseaudio {
        background: @sound;
        color: @black;
      }

      #network {
        background: @network;
        color: @white;
      }

      #memory {
        background: @memory;
        color: @black;
      }

      #cpu {
        background: @cpu;
        color: @white;
      }

      #temperature {
        background: @temp;
        color: @black;
      }

      #language {
        background: @layout;
        color: @black;
      }

      #battery {
        background: @battery;
        color: @white;
      }

      #tray {
        background: @date;
      }

      #clock.date {
        background: @date;
        color: @white;
      }

      #clock.time {
        background: @time;
        color: @black;
      }

      #custom-arrow1 {
        font-size: 11pt;
        color: @time;
        background: @date;
      }

      #custom-arrow2 {
        font-size: 11pt;
        color: @date;
        background: @layout;
      }

      #custom-arrow3 {
        font-size: 11pt;
        color: @layout;
        background: @battery;
      }

      #custom-arrow4 {
        font-size: 11pt;
        color: @battery;
        background: @temp;
      }

      #custom-arrow5 {
        font-size: 11pt;
        color: @temp;
        background: @cpu;
      }

      #custom-arrow6 {
        font-size: 11pt;
        color: @cpu;
        background: @memory;
      }

      #custom-arrow7 {
        font-size: 11pt;
        color: @memory;
        background: @network;
      }

      #custom-arrow8 {
        font-size: 11pt;
        color: @network;
        background: @sound;
      }

      #custom-arrow9 {
        font-size: 11pt;
        color: @sound;
        background: transparent;
      }

      #custom-arrow10 {
        font-size: 11pt;
        color: @unfocused;
        background: transparent;
      }
    '';
  };
}