{ lib, config, ... }:
let
  background = "#282828"; # bg0  — main dark background
  background-alt = "#3c3836"; # bg1  — slightly lighter panels/buttons
  background-sec = "#1d2021"; # bg0_h — darker, for mpris/volume contrast
  text = "#ebdbb2"; # fg1  — main foreground
  selected = "#83a598"; # blue — accent for borders/active states
  urgent = "#fb4934"; # bright red — critical notifications
  hover = "#504945"; # bg2  — hover highlight
in
{
  options.custom = {
    swaync.enable = lib.mkEnableOption "enable swaync - color cat alternative";
  };

  config = lib.mkIf config.custom.swaync.enable {
    services.swaync = {
      enable = true;
      settings = {
        positionX = "right";
        positionY = "top";
        cssPriority = "user";

        control-center-width = 380;
        control-center-height = 860;
        control-center-margin-top = 2;
        control-center-margin-bottom = 2;
        control-center-margin-right = 1;
        control-center-margin-left = 0;

        notification-window-width = 400;
        notification-icon-size = 48;
        notification-body-image-height = 160;
        notification-body-image-width = 200;

        timeout = 4;
        timeout-low = 2;
        timeout-critical = 6;

        fit-to-screen = false;
        keyboard-shortcuts = true;
        image-visibility = "when-available";
        transition-time = 200;
        hide-on-clear = true;
        hide-on-action = false;
        script-fail-notify = true;
        scripts = {
          example-script = {
            exec = "echo 'Do something...'";
            urgency = "Normal";
          };
        };
        notification-visibility = {
          example-name = {
            state = "muted";
            urgency = "Low";
            app-name = "Spotify";
          };
        };
        widgets = [
          "mpris"
          "title"
          "dnd"
          "notifications"
        ];

        widget-config = {
          title = {
            text = "Notifications";
            clear-all-button = true;
            button-text = " 󰎟   Clear";
          };
          dnd = {
            text = "Do not disturb";
          };
          label = {
            max-lines = 1;
            text = " ";
          };
          mpris = {
            image-size = 96;
            image-radius = 12;
          };
          volume = {
            label = "󰕾";
            show-per-app = true;
          };
          buttons-grid = {
            actions = [
              {
                label = " ";
                command = "amixer set Master toggle";
              }
              {
                label = "";
                command = "amixer set Capture toggle";
              }
              {
                label = " ";
                command = "nm-connection-editor";
              }
              {
                label = "󰂯";
                command = "blueman-manager";
              }
              {
                label = "󰏘";
                command = "nwg-look";
              }

            ];
          };
        };
      };
      style = ''
        * {
          color: ${text};
          background-color: ${background}
          all: unset;
          font-size: 12px;
          font-family: "BerkeleyMono Nerd Font Propo";
          transition: 200ms;
        }

        .notification-row {
          outline: none;
          margin: 0;
          padding: 0px;
        }

        .floating-notifications.background .notification-row .notification-background {
          background: alpha(${background}, 0.9);
          box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.6);
          border: 1px solid ${selected};
          border-radius: 24px;
          margin: 16px;
          padding: 0;
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .notification {
          padding: 6px;
          border-radius: 12px;
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .notification.critical {
          border: 2px solid ${urgent};
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .notification
          .notification-content {
          margin: 14px;
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > * {
          min-height: 3.4em;
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > *
          .notification-action {
          border-radius: 8px;
          background-color: ${background-alt}};
          margin: 6px;
          border: 1px solid transparent;
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > *
          .notification-action:hover {
          background-color: ${hover};
          border: 1px solid ${selected};
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > *
          .notification-action:active {
          background-color: ${selected};
          color: ${background};
        }

        .image {
          margin: 10px 20px 10px 0px;
        }

        .summary {
          font-weight: 800;
          font-size: 1rem;
        }

        .body {
          font-size: 0.8rem;
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .close-button {
          margin: 6px;
          padding: 2px;
          border-radius: 6px;
          background-color: ${background};
          border: 1px solid transparent;
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .close-button:hover {
          background-color: ${selected};
        }

        .floating-notifications.background
          .notification-row
          .notification-background
          .close-button:active {
          background-color: ${selected};
          color: ${background};
        }

        .notification.critical progress {
          background-color: ${selected};
        }

        .notification.low progress,
        .notification.normal progress {
          background-color: ${selected};
        }

        * {
          color: ${text};

          all: unset;
          font-size: 12px;
          font-family: "BerkeleyMono Nerd Font Propo";
          transition: 200ms;
        }

        /* Avoid 'annoying' backgroud */
        .blank-window {
          background: transparent;
        }

        /* CONTROL CENTER ------------------------------------------------------------------------ */

        .control-center {
          background: alpha(${background}, 0.7);
          border-radius: 24px;
          border: 1px solid ${selected};
          box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.6);
          margin: 18px;
          padding: 12px;
        }

        /* Notifications  */
        .control-center .notification-row .notification-background,
        .control-center
          .notification-row
          .notification-background
          .notification.critical {
          background-color: ${background-alt};
          border-radius: 16px;
          margin: 4px 0px;
          padding: 4px;
        }

        .control-center
          .notification-row
          .notification-background
          .notification.critical {
          color: ${urgent};
        }

        .control-center
          .notification-row
          .notification-background
          .notification
          .notification-content {
          margin: 6px;
          padding: 8px 6px 2px 2px;
        }

        .control-center
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > * {
          min-height: 3.4em;
        }

        .control-center
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > *
          .notification-action {
          background: alpha(${selected}, 0.6);
          color: ${text};
          border-radius: 12px;
          margin: 6px;
        }

        .control-center
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > *
          .notification-action:hover {
          background: ${selected};
        }

        .control-center
          .notification-row
          .notification-background
          .notification
          > *:last-child
          > *
          .notification-action:active {
          background-color: ${selected};
        }

        /* Buttons */

        .control-center .notification-row .notification-background .close-button {
          background: transparent;
          border-radius: 6px;
          color: ${text};
          margin: 0px;
          padding: 4px;
        }

        .control-center .notification-row .notification-background .close-button:hover {
          background-color: ${selected};
        }

        .control-center
          .notification-row
          .notification-background
          .close-button:active {
          background-color: ${selected};
        }

        progressbar,
        progress,
        trough {
          border-radius: 12px;
        }

        progressbar {
          background-color: rgba(255, 255, 255, 0.1);
        }

        /* Notifications expanded-group */

        .notification-group {
          margin: 2px 8px 2px 8px;
        }
        .notification-group-headers {
          font-weight: bold;
          font-size: 1.25rem;
          color: ${text};
          letter-spacing: 2px;
        }

        .notification-group-icon {
          color: ${text};
        }

        .notification-group-collapse-button,
        .notification-group-close-all-button {
          background: transparent;
          color: ${text};
          margin: 4px;
          border-radius: 6px;
          padding: 4px;
        }

        .notification-group-collapse-button:hover,
        .notification-group-close-all-button:hover {
          background: ${hover};
        }

        /* WIDGETS --------------------------------------------------------------------------- */

        /* Notification clear button */
        .widget-title {
          font-size: 1.2em;
          margin: 6px;
        }

        .widget-title button {
          background: ${background-alt};
          border-radius: 6px;
          padding: 4px 16px;
        }

        .widget-title button:hover {
          background-color: ${hover};
        }

        .widget-title button:active {
          background-color: ${selected};
        }

        /* Do not disturb */
        .widget-dnd {
          margin: 6px;
          font-size: 1.2rem;
        }

        .widget-dnd > switch {
          background: ${background-alt};
          font-size: initial;
          border-radius: 8px;
          box-shadow: none;
          padding: 2px;
        }

        .widget-dnd > switch:hover {
          background: ${hover};
        }

        .widget-dnd > switch:checked {
          background: ${selected};
        }

        .widget-dnd > switch:checked:hover {
          background: ${hover};
        }

        .widget-dnd > switch slider {
          background: ${text};
          border-radius: 6px;
        }

        /* Buttons menu */
        .widget-buttons-grid {
          font-size: x-large;
          padding: 6px 2px;
          margin: 6px;
          border-radius: 12px;
          background: ${background-alt};
        }

        .widget-buttons-grid > flowbox > flowboxchild > button {
          margin: 4px 10px;
          padding: 6px 12px;
          background: transparent;
          border-radius: 8px;
        }

        .widget-buttons-grid > flowbox > flowboxchild > button:hover {
          background: ${hover};
        }

        /* Music player */
        .widget-mpris {
          background: ${background-alt};
          border-radius: 16px;
          color: ${text};
          margin: 20px 6px;
        }

        /* NOTE: Background need *opacity 1* otherwise will turn into the album art blurred  */
        .widget-mpris-player {
          background-color: ${background-sec};
          border-radius: 22px;
          padding: 6px 14px;
          margin: 6px;
        }

        .widget-mpris > box > button {
          color: ${text};
          border-radius: 20px;
        }

        .widget-mpris button {
          color: alpha(${text}, 0.6);
        }

        .widget-mpris button:hover {
          color: ${text};
        }

        .widget-mpris-album-art {
          border-radius: 16px;
        }

        .widget-mpris-title {
          font-weight: 700;
          font-size: 1rem;
        }

        .widget-mpris-subtitle {
          font-weight: 500;
          font-size: 0.8rem;
        }

        picture.mpris-background {
          opacity: 0;
        }

        /* Volume */
        .widget-volume {
          background: ${background-sec};
          color: ${background};
          padding: 4px;
          margin: 6px;
          border-radius: 6px;
        }
      '';
    };
  };
}
