{ pkgs
, lib
, config
, ... }: with lib; let
  gui = with config.global.gpu; enable && session;
  cfg = config.home.catppuccin;
in {
  options.home.catppuccin = {
    enable = mkEnableOption "catppuccin colour scheme" // { default = gui; };

    gtk = {
      package = mkOption {
        type = with types; package;
        default = (pkgs.catppuccin-gtk.overrideAttrs {
          src = pkgs.fetchFromGitHub {
            owner = "catppuccin";
            repo = "gtk";
            rev = "v1.0.3";
            fetchSubmodules = true;
            hash = "sha256-q5/VcFsm3vNEw55zq/vcM11eo456SYE5TQA3g2VQjGc=";
          };

          postUnpack = "";
        }).override {
          accents = [ "pink" ];
          size = "compact";
          #tweaks = [ "rimless" "black" ];
          variant = "mocha";
        };
        description = "catppuccin gtk theme package";
      };
      name = mkOption {
        type = with types; str;
        default = "catppuccin-mocha-pink-compact";
        description = "name of catppuccin gtk theme";
      };
    };

    cursor = {
      package = mkOption {
        type = with types; package;
        default = pkgs.catppuccin-cursors.mochaDark;
        description = "catppuccin cursor theme package";
      };
      name = mkOption {
        type = with types; str;
        default = "catppuccin-mocha-dark-cursors";
        description = "name of catppuccin cursor theme";
      };
    };
  };

  config = {
    users.homeModules = [
      # this module passes catppuccin configuration to home-manager
      { passthrough.catppuccin = cfg; }
    ];

    catppuccin.enable = cfg.enable;

    # gtk and cursor themes
    environment.systemPackages = with cfg; mkIf enable [
      gtk.package cursor.package
    ];

    # override greetd theme
    programs.regreet = mkIf cfg.enable {
      settings = {
        background.path = ./solid.png;
        GTK = {
          theme_name = cfg.gtk.name;
          cursor_theme_name = cfg.cursor.name;
        };
      };
    };
  };
}
