{
  pkgs,
  config,
  lib,
  inputs,
  ...
}:
{
  options.chimera.theme = {
    font = {
      mono = lib.mkOption {
        type = inputs.home-manager.lib.hm.types.fontType;
        description = "Mono width font to use as system default";
        default = {
          name = "FiraCode";
          package = pkgs.fira-code;
          size = 12;
        };
      };
      variableWidth = {
        serif = lib.mkOption {
          type = inputs.home-manager.lib.hm.types.fontType;
          description = "Serif variable width font to use as system default";
          default = {
            name = "Roboto Serif";
            package = pkgs.roboto-serif;
            size = 12;
          };
        };
        sansSerif = lib.mkOption {
          type = inputs.home-manager.lib.hm.types.fontType;
          description = "Sans serif variable width font to use as system default";
          default = {
            name = "Roboto";
            package = pkgs.roboto;
            size = 12;
          };
        };
      };
      emoji = lib.mkOption {
        type = inputs.home-manager.lib.hm.types.fontType;
        description = "Emoji's to use as system default";
        default = {
          name = "Twitter Color Emoji";
          package = pkgs.twitter-color-emoji;
          size = 12;
        };
      };
      nerdFontGlyphs.enable = lib.mkEnableOption "Enable Nerd Font Glyphs";
      extraFonts = lib.mkOption {
        type = lib.types.listOf inputs.home-manager.lib.hm.types.fontType;
        description = "Extra fonts to install";
        default = [ ];
      };
    };

    cursor = lib.mkOption {
      type = lib.types.nullOr (
        lib.types.submodule {
          options = {
            package = lib.mkOption {
              type = lib.types.package;
              example = lib.literalExpression "pkgs.vanilla-dmz";
              description = "Package providing the cursor theme";
            };

            name = lib.mkOption {
              type = lib.types.str;
              example = "Vanilla-DMZ";
              description = "The cursor name within the package";
            };

            size = lib.mkOption {
              type = lib.types.int;
              default = 32;
              example = 64;
              description = "The cursor size";
            };
          };
        }
      );
      description = "Cursor settings";
      default = null;
    };

    style = lib.mkOption {
      type = lib.types.enum [
        "Light"
        "Dark"
      ];
      description = "Whether this theme prefers to match with light or dark color schemes";
    };

    colors =
      let
        themeColor = lib.types.submodule {
          options = {
            hex = lib.mkOption { type = lib.types.str; };
            rgb = {
              r = lib.mkOption { type = lib.types.numbers 0 255; };
              g = lib.mkOption { type = lib.types.numbers 0 255; };
              b = lib.mkOption { type = lib.types.numbers 0 255; };
            };
            hsl = {
              h = lib.mkOption { type = lib.types.numbers 0 360; };
              s = lib.mkOption { type = lib.types.numbers 0 100; };
              l = lib.mkOption { type = lib.types.numbers 0 100; };
            };
          };
        };
      in
      {
        Rosewater = lib.mkOption { type = themeColor; };
        Flamingo = lib.mkOption { type = themeColor; };
        Pink = lib.mkOption { type = themeColor; };
        Mauve = lib.mkOption { type = themeColor; };
        Red = lib.mkOption { type = themeColor; };
        Maroon = lib.mkOption { type = themeColor; };
        Peach = lib.mkOption { type = themeColor; };
        Yellow = lib.mkOption { type = themeColor; };
        Green = lib.mkOption { type = themeColor; };
        Teal = lib.mkOption { type = themeColor; };
        Sky = lib.mkOption { type = themeColor; };
        Sapphire = lib.mkOption { type = themeColor; };
        Blue = lib.mkOption { type = themeColor; };
        Lavender = lib.mkOption { type = themeColor; };
        Text = lib.mkOption { type = themeColor; };
        Subtext1 = lib.mkOption { type = themeColor; };
        Subtext0 = lib.mkOption { type = themeColor; };
        Overlay2 = lib.mkOption { type = themeColor; };
        Overlay1 = lib.mkOption { type = themeColor; };
        Overlay0 = lib.mkOption { type = themeColor; };
        Surface2 = lib.mkOption { type = themeColor; };
        Surface1 = lib.mkOption { type = themeColor; };
        Surface0 = lib.mkOption { type = themeColor; };
        Base = lib.mkOption { type = themeColor; };
        Mantle = lib.mkOption { type = themeColor; };
        Crust = lib.mkOption { type = themeColor; };
        Accent = lib.mkOption { type = themeColor; };
      };
  };

  config = {

    fonts.fontconfig.enable = true;

    home.packages =
      [
        config.chimera.theme.font.mono.package
        config.chimera.theme.font.variableWidth.serif.package
        config.chimera.theme.font.variableWidth.sansSerif.package
        config.chimera.theme.font.emoji.package
      ]
      ++ (
        if config.chimera.theme.font.nerdFontGlyphs.enable then
          [ (pkgs.nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; }) ]
        else
          [ ]
      )
      ++ config.chimera.theme.font.extraFonts;

    home.pointerCursor = lib.mkIf (config.chimera.theme.cursor != null) {
      name = config.chimera.theme.cursor.name;
      package = config.chimera.theme.cursor.package;
      size = config.chimera.theme.cursor.size;
      gtk.enable = true;
      x11.enable = true;
    };
  };
}
