{
  lib,
  pkgs,
  config,
  ...
}: {
  hm.programs.waybar = {
    enable = true;
    style = ./style.css;

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

        modules-left = ["hyprland/workspaces"];
        modules-center = [];
        modules-right =
          ["memory"]
          ++ lib.optionals (builtins.elem "amdgpu" config.services.xserver.videoDrivers) ["custom/gpu-usage"]
          ++ ["cpu" "wireplumber"]
          ++ lib.optionals config.services.power-profiles-daemon.enable ["battery"]
          ++ lib.optionals config.programs.light.enable ["backlight"]
          ++ ["clock" "tray"];

        "hyprland/workspaces" = {
          format = "{name}";
          on-click = "activate";
          sort-by-number = true;
        };

        tray = {
          icon-size = 16;
          spacing = 10;
        };

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

        cpu = {
          format = "CPU {usage}%";
          tooltip = false;
          interval = 2;
        };

        memory = {
          format = "RAM {}%";
          interval = 2;
        };

        backlight = {
          format = "LGT {percent}%";
          scroll-step = 5;
        };

        battery = {
          states = {
            low = 15;
          };
          format = "BAT {capacity}%";
          format-charging = "BAT+ {capacity}%";
          format-plugged = "BAT+ {capacity}%";
          format-low = "BAT! {capacity}%";
          interval = 5;
        };

        wireplumber = {
          scroll-step = 5;
          format = "VOL {volume}%";
          format-muted = "muted";
          on-click = "${lib.getExe' pkgs.wireplumber "wpctl"} set-mute @DEFAULT_AUDIO_SINK@ toggle";
          on-click-right = "${lib.getExe pkgs.pavucontrol}";
        };

        "custom/gpu-usage" = {
          exec = "cat /sys/class/hwmon/hwmon*/device/gpu_busy_percent";
          format = "GPU {}%";
          return-type = "";
          interval = 2;
        };
      }
    ];
  };
}
