{ lib, pkgs, config, ... }: {
  home-manager.users.agatha = {

    systemd.user.services.polybar = {
      Service = {
        Environment = lib.mkForce (lib.concatStringsSep ":" [
          "PATH=${config.home-manager.users.agatha.services.polybar.package}/bin"
          "/run/wrappers/bin"
          "${pkgs.dbus}/bin"
          "${pkgs.dunst}/bin"
          "${pkgs.systemd}/bin"
          "${pkgs.util-linux}/bin"
          "${pkgs.gnused}/bin"
          "${pkgs.kitty}/bin"
        ]);
      };
      Install = { WantedBy = [ "graphical-session.target" ]; };
    };

    xdg.configFile."polybar/config.ini".onChange =
      "${pkgs.systemd}/bin/systemctl --user restart polybar.service";

    services.polybar = {
      enable = true;
      package = pkgs.polybarFull;

      settings = let
        color = n:
          config.environment.graphical.colors."${config.environment.graphical.theme.name}"."${builtins.toString
          n}";
      in {
        "colors" = {
          background = color 0;
          foreground = color 7;
          foreground-alt = color 7;
          primary = color 1;
          secondary = color 2;
          alert = color 3;
          red = color 4;
        };

        "bar/left" = {
          width = "100%:-30";
          height = 30;
          offset-x = 15;
          offset-y = 12;
          radius = 0;
          fixed-center = true;

          background = "\${colors.background}";
          foreground = "\${colors.foreground}";

          line = {
            size = 0;
            color = color 3;
          };
          border = {
            size = 3;
            color = color 1;
          };
          padding = {
            left = 2;
            right = 2;
          };
          module.margin = {
            left = 1;
            right = 1;
          };

          font = {
            "0" = "Iosevka Gothic:pixelsize=10;3";
            "1" = "DejaVuSans:fontformat=truetype:size=8:antialias=false;2";
            "2" = "Siji:pixelsize=11;2";
            "3" = "Symbols Nerd Font:pixelsize=10;2";
            "4" = "DejaVuSans:fontformat=truetype:size=8:antialias=false;1";
          };

          modules = {
            left = "bspwm";
            center = "date";
            right = "spotify wireguard notification-status";
          };

          wm-restack = "bspwm";
          cursor-click = "pointer";
          locale = "de_DE.UTF-8";
        };

        "bar/right" = {
          width = "100%:-30";
          height = 30;
          offset-x = 15;
          offset-y = 12;
          radius = 0;
          fixed-center = true;

          background = "\${colors.background}";
          foreground = "\${colors.foreground}";

          line = {
            size = 0;
            color = color 3;
          };
          border = {
            size = 3;
            color = color 1;
          };
          padding = {
            left = 2;
            right = 2;
          };
          module.margin = {
            left = 1;
            right = 1;
          };

          font = {
            "0" = "Iosevka Gothic:pixelsize=10;3";
            "1" = "DejaVuSans:fontformat=truetype:size=8:antialias=false;2";
            "2" = "Siji:pixelsize=11;2";
            "3" = "Symbols Nerd Font:pixelsize=10;2";
            "4" = "DejaVuSans:fontformat=truetype:size=8:antialias=false;1";
          };

          modules = {
            left = "bspwm";
            center = "date";
            right = lib.mkDefault
              "filesystem battery pulseaudio xkeyboard memory cpu notification-status powermenu";
          };

          wm-restack = "bspwm";
          cursor-click = "pointer";
          locale = "de_DE.UTF-8";
        };

        "module/xkeyboard" = {
          type = "internal/xkeyboard";
          blacklist-0 = "num lock";

          format-prefix = " ";
          format-prefix-foreground = "\${colors.foreground-alt}";

          label = {
            layout = "%layout%";

            indicator = {
              padding = 2;
              margin = 1;
              background = "\${colors.secondary}";
              underline = "\${colors.secondary}";
            };
          };
        };

        "module/bspwm" = {
          type = "internal/bspwm";

          label = {
            focused = "%name%";
            focused-foreground = "\${colors.primary}";
            focused-padding = 1;

            occupied = "%name%";
            occupied-padding = 1;

            urgent = "%name%!";
            urgent-background = "\${xrdb:color1:#222}";
            urgent-padding = 1;

            empty = "%name%";
            empty-foreground = "\${colors.foreground-alt}";
            empty-padding = 1;
          };
        };

        "module/date" = {
          type = "internal/date";
          interval = 5;

          date = "";
          date-alt = " %a, %d %b %Y";

          time = "%H:%M";
          time-alt = "%H:%M:%S";

          format-prefix = "";
          format-prefix-foreground = "\${colors.foreground-alt}";

          label = ''
            %{A3:${pkgs.dunst}/bin/dunstify ' Calendar' "$(${pkgs.util-linux}/bin/cal --color=always | ${pkgs.gnused}/bin/sed "s#\\x1b\\[7m#<b>#;s#\\x1b\\[27m#</b>#g")​":}%date%%{A} %time%'';
        };

        "module/filesystem" = {
          type = "internal/fs";
          interval = 25;

          mount-0 = "/";

          label-mounted = "%mountpoint%: %percentage_used%%";
          label-unmounted = "%mountpoint% not mounted";
          label-unmounted-foreground = "\${colors.foreground-alt}";
        };

        "module/cpu" = {
          type = "internal/cpu";
          interval = 2;
          format-prefix = " ";
          format-prefix-foreground = "\${colors.foreground-alt}";
          label = "%{A1:kitty btop:}%percentage:2%%%{A}";
        };

        "module/memory" = {
          type = "internal/memory";
          interval = 2;
          format-prefix = " ";
          format-prefix-foreground = "\${colors.foreground-alt}";
          label = "%{A1:kitty btop:}%percentage_used%%%{A}";
        };

        "module/pulseaudio" = {
          type = "internal/pulseaudio";

          format-volume = "%{A3:pavucontrol:}<label-volume> <bar-volume>%{A}";
          label-volume = " %percentage%%";
          label-volume-foreground = "\${root.foreground}";

          label-muted = " muted";
          label-muted-foreground = "\${colors.primary}";

          bar.volume = {
            width = 14;
            foreground-0 = "\${colors.secondary}";
            foreground-1 = "\${colors.secondary}";
            foreground-2 = "\${colors.primary}";
            foreground-3 = "\${colors.primary}";
            foreground-4 = "\${colors.primary}";
            foreground-5 = "\${colors.alert}";
            foreground-6 = "\${colors.red}";
            gradient = false;
            indicator = "|";
            indicator-font = 5;
            fill = "─";
            fill-font = 2;
            empty = "─";
            empty-font = 2;
            empty-foreground = "\${colors.foreground-alt}";
          };
        };

        "module/powermenu" = {
          type = "custom/menu";

          expand-right = true;
          format-spacing = 1;

          label = {
            open = "";
            open-foreground = "\${colors.secondary}";
            close = " cancel";
            close-foreground = "\${colors.secondary}";
            separator = "|";
            separator-foreground = "\${colors.foreground-alt}";
          };

          menu = {
            "0-0" = "reboot";
            "0-0-exec" = "${pkgs.systemd}/bin/reboot";
            "0-1" = "power off";
            "0-1-exec" = "${pkgs.systemd}/bin/shutdown now";
          };
        };

        "module/battery" = {
          type = "internal/battery";
          full-at = 99;
          low-at = 10;
          battery = "BAT0";
          adapter = "AC";
          poll-interval = 3;

          content-font = 3;

          format-charging = "<animation-charging> <label-charging>";
          format-discharging = "<ramp-capacity> <label-discharging>";
          label = {
            charging = "%percentage_raw%%";
            discharging = "%percentage_raw%%";
            full = "";
          };

          ramp = {
            capacity-0 = "";
            capacity-1 = "";
            capacity-2 = "";
            capacity-3 = "";
            capacity-4 = "";
          };

          animation = {
            charging-0 = "";
            charging-1 = "";
            charging-2 = "";
            charging-3 = "";
            charging-4 = "";

            charging-framerate = 750;
          };
        };

        "module/notification-status" = {
          type = "custom/script";
          exec = ''
            if $(dunstctl is-paused); then echo "Notifications paused"; else echo ""; fi'';
          interval = 2;
          format-prefix = " ";
        };

        "module/wireguard" = {
          type = "custom/script";
          exec = ''
            ${pkgs.networkmanager}/bin/nmcli conn show --active | ${pkgs.ripgrep}/bin/rg -q wireguard && echo "VPN Connected" || echo ""'';
          click-left = "kitty nmtui";
          interval = 5;
          format-prefix = " ";
        };

        "module/spotify" = {
          type = "custom/script";
          interval = 1;
          exec =
            "${pkgs.polybar-spotify}/bin/polybar-spotify -f '{artist}: {song}'";
          format-prefix = " ";
          format = "<label>";
          click-left =
            "${pkgs.playerctl}/bin/playerctl --player=spotify play-pause";
        };
      };
    };
  };
}
