{ lib, ... }:

let
  mkColorOption = description: lib.mkOption {
    inherit description;
    type = lib.types.str;
  };
in {
  options = {
    themes = lib.mkOption {
      type = lib.types.attrsOf (lib.types.submodule ({config, ...}: {
        options = {
          foreground = {
            primary = mkColorOption "Primary color for foreground (text)";
            secondary = mkColorOption "Secondary color for foreground (text)";
            text = mkColorOption "Basic text color for stuff that's not primary, secondary etc.";

            active = mkColorOption "Color for foreground (text) when element is active";
            activeAlt = mkColorOption "Color for foreground when element is active, and `active` color is used as background instead";

            inactive = mkColorOption "Color for foreground (text) when element is inactive";
          };
          background = {
            primary = mkColorOption "Primary color for background";
            secondary = mkColorOption "Primary color for background";
            box = mkColorOption "Color for box elements";
            inactive = mkColorOption "Color for foreground (text) when element is inactive";
            active = mkColorOption "Color for background when element is active. When this is in use, use `foreground.activeAlt` for text.";
          };

          urgent = mkColorOption "Urgent windows";
        };
      }));
    };
  };

  config = {
    themes.default = {
      foreground = {
        primary = "51afef";
        secondary = "55eddc";
        activeAlt = "d5d5d5";
        text = "cccccc";
        active = "8babf0";
        inactive = "737373";
      };
      background = {
        primary = "222223";
        secondary = "444444";
        active = "8babf0";
        inactive = "555e60";
        box = "121212";
      };
      urgent = "c45500";
    };
  };
}