{ 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; };

    palette = mkOption {
      type = with types; str;
      default = "frappe";
      description = "colour palette in use";
    };

    gtk = {
      package = mkOption {
        type = with types; package;
        default = pkgs.catppuccin-gtk.override {
          accents = [ "pink" ];
          size = "compact";
          #tweaks = [ "rimless" "black" ];
          variant = "frappe";
        };
        description = "catppuccin gtk theme package";
      };
      name = mkOption {
        type = with types; str;
        default = "Catppuccin-Frappe-Compact-Pink-Dark";
        description = "name of catppuccin gtk theme";
      };
    };

    cursor = {
      package = mkOption {
        type = with types; package;
        default = pkgs.catppuccin-cursors.frappeDark;
        description = "catppuccin cursor theme package";
      };
      name = mkOption {
        type = with types; str;
        default = "Catppuccin-Frappe-Dark-Cursors";
        description = "name of catppuccin cursor theme";
      };
    };
  };

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

    # gtk and cursor themes
    environment.systemPackages = with cfg; mkIf cfg.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;
        };
      };
    };
  };
}
