# Essentially a derivative of nix-colors that closely follows Tinted Theming # "standard" and can hold multiple palettes suitable for generating multiple # configuration files for organization purposes. { config, lib, ... }: let # This follows the schema of a Tinted Theming scheme. Its support for legacy # Base16 theme is pretty awful for now. Anyways. this would allow a simple # `lib.importYAML` and wam-bam-thank-you-mam. schemeType = { name, config, lib, ... }: { # This would allow extensions to the schema if the scheme author or the # user wants to add some. freeformType = with lib.types; attrsOf anything; options = { # The builder will be the one to detect these properly. Though, we could # also detect this ourselves as well... but with Nixlang? REALLY!?! system = lib.mkOption { type = with lib.types; nullOr (enum [ "base16" "base24" ]); default = null; example = "base24"; description = '' Indicates which system this scheme supports. This is mainly on the builder to properly detect this. ''; }; author = lib.mkOption { type = lib.types.nonEmptyStr; default = "You"; example = "Scheme Author"; description = '' The scheme author's readable name. ''; }; name = lib.mkOption { type = lib.types.nonEmptyStr; default = name; example = "Bark on a tree"; description = '' The human-readable name of the scheme. ''; }; description = lib.mkOption { type = with lib.types; nullOr str; default = null; example = "Rusty theme inspired from the forestry (and Nord theme)."; description = "A short description of the theme."; }; variant = lib.mkOption { type = with lib.types; nullOr (enum [ "dark" "light" ]); default = null; example = "light"; description = '' The variant of the theme. This is typically associated with already existing standards such as the FreeDesktop appearance. ''; }; palette = lib.mkOption { type = with lib.types; attrsOf ( coercedTo str (lib.removePrefix "#") str ); default = { }; example = { base00 = "2b221f"; base01 = "412c26"; base02 = "5c362c"; base03 = "a45b43"; base04 = "e1bcb2"; base05 = "f5ecea"; base06 = "fefefe"; base07 = "eb8a65"; base08 = "d03e68"; base09 = "df937a"; base0A = "afa644"; base0B = "85b26e"; base0C = "eb914a"; base0D = "c67f62"; base0E = "8b7ab9"; base0F = "7f3F83"; }; description = '' A set of colors. For this module, we place a small additional restriction in here that all attributes should be a string. It is common to set colors in HTML hex format. ''; }; }; }; in { options.tinted-theming = { templates = lib.mkOption { type = with lib.types; attrsOf path; default = { }; example = lib.literalExpression '' { vim = pkgs.fetchFromGitHub { owner = "tinted-theming"; repo = "base16-vim"; rev = "tinted-theming/base16-vim"; hash = "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; }; helix = ./templates/helix; } ''; description = '' A set of templates for the specified builder to generate the configuration files. ''; }; schemes = lib.mkOption { type = with lib.types; attrsOf (submodule schemeType); default = { }; example = { "bark-on-a-tree" = { system = "base16"; author = "Gabriel Arazas"; description = '' Rusty and woody theme inspired from forestry (and Nord theme). ''; variant = "dark"; palette = rec { background = base00; foreground = base05; base00 = "2b221f"; base01 = "412c26"; base02 = "5c362c"; base03 = "a45b43"; base04 = "e1bcb2"; base05 = "f5ecea"; base06 = "fefefe"; base07 = "eb8a65"; base08 = "d03e68"; base09 = "df937a"; base0A = "afa644"; base0B = "85b26e"; base0C = "eb914a"; base0D = "c67f62"; base0E = "8b7ab9"; base0F = "7f3F83"; }; }; }; description = '' A set of [Tinted Theming](https://github.com/tinted-theming) schemes. You can set the palette to whatever criteria you deem suitable but this module closely follows common formats with this theming ecosystem. The most common palette scheme is Base16 where the colors are set from `base00` to `base0F`. Some themes could have 24-colors variant or have additional meaningful names (e.g., `foreground`, `background`). ''; }; }; }