{ config, pkgs, lib, ... }:
let
  thm = config.lib.base16.theme;
in
with config.deviceSpecific; {
  home-manager.users.${config.mainuser}.programs.waybar = {
    enable = true;
    # style = builtins.readFile ./style.css;
    systemd.enable = true;
    systemd.target = "graphical-session.target";
    settings = {
      mainBar = {
        layer = "top";
        position = "top";
        # margin = "8 8 0 8";
        modules-left = [
          "hyprland/workspaces"
          # "wireplumber"
        ] ++ lib.optionals isLaptop [
          "battery"
          "backlight"
        ];
        modules-center = [ "hyprland/window" ];
        modules-right = [
          "tray"
          "disk"
          "cpu"
          # "temperature"
          "memory"
          "clock"
        ];
        backlight = {
          device = "intel_backlight";
          format = "{percent}% {icon}";
          format-icons = [ "" "" "" "" "" "" "" ];
          # min-length = 7;
        };
        battery = {
          interval = 60;
          states = {
            warning = 30;
            critical = 15;
          };
          format = "{icon} {capacity}%";
          format-charging = "<span color=\"#e0af68\">󱐌</span> {capacity}%";
          format-icons = [
            "<span color=\"#f7768e\"> </span>"
            "<span color=\"#f7768e\"> </span>"
            "<span color=\"#7aa2f7\"> </span>"
            "<span color=\"#7aa2f7\"> </span>"
            "<span color=\"#7aa2f7\"> </span>"
          ];
          on-update = "$HOME/.config/waybar/scripts/check_battery.sh";
        };
        clock = {
          format = "{:%a, %d %b, %H:%M}";
          tooltip-format = "<tt>{calendar}</tt>";
          calendar = {
            mode = "month";
            mode-mon-col = 3;
            weeks-pos = "right";
            on-scroll = 1;
            format = {
              months = "<span color='#c0caf5'><b>{}</b></span>";
              days = "<span color='#c0caf5'><b>{}</b></span>";
              weeks = "<span color='#7dcfff'><b>W{}</b></span>";
              weekdays = "<span color='#ff9e64'><b>{}</b></span>";
              today = "<span color='#f7768e'><b><u>{}</u></b></span>";
            };
          };
          actions = {
            on-click-right = "mode";
            on-click-middle = "shift_reset";
            on-scroll-up = "shift_up";
            on-scroll-down = "shift_down";
          };
        };
        cpu = {
          interval = 4;
          format = "<span color=\"#7aa2f7\">      </span>{usage}%";
        };
        disk = {
          interval = 60;
          format = "<span color=\"#7aa2f7\">      </span>{free}";
          path = "/home";
        };
        "hyprland/window" = {
          max-length = 64;
        };
        "hyprland/workspaces" = {
          format = "{icon}";
          on-click = "activate";
          disable-scroll = true;
          format-icons = {
            "10" = "0";
            "Messengers" = "Msg";
            "Music" = "Mus";
          };
        };
        memory = {
          format = "<span color=\"#7aa2f7\">     </span>{used}GiB";
          interval = 4;
        };
        temperature = {
          # "hwmon-path" = "/sys/class/hwmon/hwmon0/temp1_input";
          critical-threshold = 80;
          format = "<span color=\"#7aa2f7\">\uf4f5     </span>{temperatureC}°C";
          format-critical = "<span color=\"#f7768e\"> </span>{temperatureC}°C";
          interval = 4;
        };
        tray = {
          icon-size = 12;
          spacing = 6;
        };
        wireplumber = {
          scroll-step = 5;
          format = "<span color=\"#7aa2f7\">{icon} </span>{volume}%";
          format-muted = "<span color=\"#f7768e\">\ueee8   </span>Muted";
          format-bluetooth = "<span color=\"#7aa2f7\">\uf282 </span>{volume}%";
          on-click-right = "blueman-manager";
          format-icons = [ "\uf026 " "\uf027 " "\uf028 " ];
          on-click = "pavucontrol";
        };
      };
    };
    style = let
      accent = "lavender";
    in ''
      @import "catppuccin.css";

      * {
        font-family:
          "${thm.fonts.mono.family}",
          feather;
        font-weight: 500;
        font-size: 11pt;
        color: @text;
      }

      /* main waybar */
      window#waybar {
        padding: 0;
        margin: 0;
        /* background: rgba(26, 27, 38, 0.7); */
        background: @base;
      }

      /* when hovering over modules */
      tooltip {
        background: @base;
        border-radius: 5%;
      }

      #workspaces button {
        padding: 2px;
      }

      /* Sets active workspace to have a solid line on the bottom */
      #workspaces button.active {
        border-bottom: 2px solid @${accent};
        border-radius: 0;
        margin-top: 2px;
        transition: all 0.5s ease-in-out;
      }

      /* More workspace stuff for highlighting on hover */
      #workspaces button.focused {
        color: @subtext0;
      }

      #workspaces button.urgent {
        color: #f7768e;
      }

      #workspaces button:hover {
        background: @crust;
        color: @text;
      }

      /* Sets background, padding, margins, and borders for (all) modules */
      #workspaces,
      #clock,
      #window,
      #temperature,
      #disk,
      #cpu,
      #memory,
      #network,
      #wireplumber,
      #tray,
      #backlight,
      #battery {
        /* background: rgba(26, 27, 38, 0); */
        background: @base;
        padding: 0 10px;
        border: 0;
      }

      #workspaces {
        padding-right: 0px;
      }

      /* Hide window module when not focused on window or empty workspace */
      window#waybar.empty #window {
        padding: 0;
        margin: 0;
        opacity: 0;
      }

      /* Set up rounding to make these modules look like separate pills */
      #tray {
        color: @${accent};
        border-radius: 12px;
        margin-right: 4px;
      }

      #window {
        border-radius: 12px;
      }

      /* close right side of bar */
      #temperature {
        border-radius: 12px 0 0 12px;
      }

      /* close left side of bar */
      #battery {
        border-radius: 0 12px 12px 0;
      }
    '';
  };
}