{ config, lib, ... }:

{
  config = lib.mkIf config.desktop.enable {

    home-manager.users.${config.user} = {
      programs.waybar = {

        enable = true;

        settings = [{
          height = 24;
          layer = "top";
          position = "top";
          spacing = 4;

          modules-left = [
            "hyprland/workspaces"
            "hyprland/window"
          ];
          modules-center = [
          ];
          modules-right = [
            "battery"
            "wireplumber"
            "network"
            "clock"
            "tray"
          ];

          "hyprland/workspaces" = {
            disable-scroll = true;
            all-outputs = true;
            format = "{name}";
          };

          battery = {
            interval = 1;
            states = {
              warning = 30;
              critical = 15;
            };
            forma = " {capacity}%";
            format-charging = " {capacity}%";
            format-plugged = " {capacity}%";
            format-full = " {capacity}%";
            format-warning = " {capacity}%";
            format-critical = " {capacity}%";
          };

          wireplumber = {
            format = " {volume}%";
            format-bluetooth = " {volume}%";
            format-muted = " muted";
            scroll-step = 1;
            on-click = "pavucontrol";
            ignored-sinks = ["Easy Effects Sink"];
          };

          network = {
            format = "  disconnected";
            format-wifi = " {essid}";
            format-ethernet = "  {ipaddr}/{cidr}";
            format-disconnected = "  disconnected";
            max-length = 50;
            on-click = "nm-connection-editor";
          };

          clock = {
            interval = 1;
            format = "{:%Y-%m-%d %a %H:%M:%S}";
          };

          tray = {
            spacing = config.theme.outerGap;
          };
        }];

        style =
          let
            accentColor = "#${config.theme.accentColor}";
            textColor = "#${config.theme.colors.base05}";
            baseColor = "#${config.theme.colors.base00}";
            surfaceColor = "#${config.theme.colors.base02}";
            greenColor = "#${config.theme.colors.base0B}";
            yellowColor = "#${config.theme.colors.base0A}";
            redColor = "#${config.theme.colors.base08}";
            fontSize = "${toString config.theme.fontSize}px";
            outerGap = "${toString config.theme.outerGap}px";
            innerGap = "${toString config.theme.innerGap}px";
            outerRadius = "${toString config.theme.outerRadius}px";
            innerRadius = "${toString config.theme.innerRadius}px";
            borderWidth = "${toString config.theme.borderWidth}px";
          in ''

/** Base */

window#waybar {
    font-family: "${config.theme.font}", "${config.theme.iconFont}", "${config.theme.monospaceFont}";
    font-size: ${fontSize};
    color: ${textColor};
    background-color: transparent;
}

window#waybar > box {
    margin: ${outerGap};
    margin-bottom: 0px;
}

.modules-left,
.modules-right {
    padding: ${innerGap} 0px;
    border-radius: ${outerRadius};
    background-color: @base;
    border: ${borderWidth} solid ${accentColor};
}

/** Workspaces */

#workspaces {
    margin-left: ${innerGap};
}

#workspaces button {
    all: initial;
    color: ${textColor};
    background-color: transparent;
    border-radius: ${innerRadius};
    padding: ${innerGap} ${outerGap};
}

#workspaces button.focused,
#workspaces button.active {
    background-color: ${accentColor};
    color: ${baseColor};
}

#workspaces button.urgent {
    background-color: ${redColor};
}

/** Window */

window#waybar:not(.empty) #window {
    padding: 0 ${outerGap};
    border-left: ${borderWidth} solid ${surfaceColor};
    margin: 0 ${innerGap};
}

/** Tray */

#tray {
    border: none;
    margin-right: ${outerGap};
}

#tray > .passive {
    -gtk-icon-effect: dim;
}

#tray > .needs-attention {
    -gtk-icon-effect: highlight;
}

/** Right modules */

#battery,
#wireplumber,
#network,
#clock {
    padding: 0 ${outerGap};
    border-right: ${borderWidth} solid ${surfaceColor};
    color: @text;
}

/** Battery */

#battery.charging {
    color: ${greenColor};
}

#battery.warning:not(.charging) {
    color: ${yellowColor};
}

#battery.critical:not(.charging) {
    color: ${redColor};
}

/** Wireplumber */

#wireplumber.muted {
    color: ${redColor};
}

/** Network */

#network.wifi,
#network.ethernet {
    color: ${greenColor};
}

#network.disconnected {
    color: ${redColor};
}
        '';

      };
    };

  };
}