{ config
, lib
, pkgs
, ...
}:

with lib;
let
  cfg = config.my.services.picom;
in
{
  options.my.services.picom.enable = mkEnableOption "picom";

  config = lib.mkIf cfg.enable {
    home-manager.users.moritz = {
      services.picom = {
        enable = true;
        package = pkgs.picom-next;
        settings = {
          blur = true;
          blurExclude = [ "class_g = 'Polybar'" ];

          # improve performance
          glx-no-rebind-pixmap = true;
          glx-no-stencil = true;

          # against flicker
          unredir-if-possible = false;

          # fastest swap method
          glx-swap-method = 1;

          # dual kawase blur
          blur-background-fixed = false;
          blur-method = "dual_kawase";
          blur-strength = 2;

          # group wintypes and don't focus a menu (Telegram)
          detect-transient = true;
          detect-client-leader = true;

          # needed for nvidia with glx backend
          xrender-sync-fence = true;
        };
        inactiveOpacity = 0.97;
        opacityRules = [ "100:fullscreen" "100:class_g   = 'Polybar'" ];
        vSync = true;
      };
    };
  };
}