diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index fe5c226d..55746f2b 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -204,8 +204,3 @@ everyone. - Add LSP and Treesitter support for R under `vim.languages.R`. - Add Otter support under `vim.lsp.otter` and an assert to prevent conflict with ccc - -[Bloxx12](https://github.com/Bloxx12) - -- Add support for [base16 theming](https://github.com/RRethy/base16-nvim) under - `vim.theme` diff --git a/lib/types/types.nix b/lib/types/custom.nix similarity index 90% rename from lib/types/types.nix rename to lib/types/custom.nix index 250d7636..a94735c5 100644 --- a/lib/types/types.nix +++ b/lib/types/custom.nix @@ -1,9 +1,8 @@ {lib}: let inherit (lib) isStringLike showOption showFiles getFiles mergeOneOption mergeEqualOption mkOptionType; - inherit (lib.strings) isString; inherit (lib.types) anything attrsOf; inherit (lib.nvim.types) anythingConcatLists; - inherit (builtins) typeOf isAttrs any head concatLists stringLength match; + inherit (builtins) typeOf isAttrs any head concatLists stringLength; in { # HACK: Does this break anything in our case? # A modified version of the nixpkgs anything type that concatenates lists @@ -59,11 +58,4 @@ in { check = value: stringLength value < 2; merge = mergeEqualOption; }; - - hexColor = mkOptionType { - name = "hex-color"; - descriptionClass = "noun"; - description = "RGB color in hex format"; - check = v: isString v && (match "#?[0-9a-fA-F]{6}" v) != null; - }; } diff --git a/lib/types/default.nix b/lib/types/default.nix index 70ca6bef..d7ddd240 100644 --- a/lib/types/default.nix +++ b/lib/types/default.nix @@ -6,10 +6,12 @@ typesDag = import ./dag.nix {inherit lib;}; typesPlugin = import ./plugins.nix {inherit inputs lib;}; typesLanguage = import ./languages.nix {inherit lib;}; - typesTypes = import ./types.nix {inherit lib;}; + typesCustom = import ./custom.nix {inherit lib;}; + typesTheme = import ./theme.nix {inherit lib;}; in { inherit (typesDag) dagOf; inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; inherit (typesLanguage) diagnostics mkGrammarOption; - inherit (typesTypes) anythingConcatLists char hexColor; + inherit (typesCustom) anythingConcatLists char; + inherit (typesTheme) hexColorType; } diff --git a/lib/types/theme.nix b/lib/types/theme.nix new file mode 100644 index 00000000..3ba2f489 --- /dev/null +++ b/lib/types/theme.nix @@ -0,0 +1,14 @@ +{lib}: let + inherit (lib.strings) isString; + inherit (lib.types) mkOptionType; + inherit (builtins) match; + # This was almost entirely taken from raf himself. +in { + hexColorType = mkOptionType { + name = "hex-color"; + descriptionClass = "noun"; + description = "RGB color in hex format"; + # Check to determine wether the provided color is base16-valid + check = x: isString x && (match "#[0-9a-fA-F]{6}" x) != null; + }; +} diff --git a/modules/plugins/theme/base16-colors.nix b/modules/plugins/theme/base16-colors.nix new file mode 100644 index 00000000..95ff2e82 --- /dev/null +++ b/modules/plugins/theme/base16-colors.nix @@ -0,0 +1,69 @@ +{lib}: let + inherit (lib.options) mkOption; + inherit (lib.nvim.types) hexColorType; +in { + base00 = mkOption { + type = hexColorType; + default = "#1e1e2e"; + }; + base01 = mkOption { + type = hexColorType; + default = "#181825"; + }; + base02 = mkOption { + type = hexColorType; + default = "#313244"; + }; + base03 = mkOption { + type = hexColorType; + default = "#45475a"; + }; + base04 = mkOption { + type = hexColorType; + default = "#585b70"; + }; + base05 = mkOption { + type = hexColorType; + default = "#cdd6f4"; + }; + base06 = mkOption { + type = hexColorType; + default = "#f5e0dc"; + }; + base07 = mkOption { + type = hexColorType; + default = "#b4befe"; + }; + base08 = mkOption { + type = hexColorType; + default = "#f38ba8"; + }; + base09 = mkOption { + type = hexColorType; + default = "#fab387"; + }; + base0A = mkOption { + type = hexColorType; + default = "#a6e3a1"; + }; + base0B = mkOption { + type = hexColorType; + default = "#94e2d5"; + }; + base0C = mkOption { + type = hexColorType; + default = "#a6e3a1"; + }; + base0D = mkOption { + type = hexColorType; + default = "#89b4fa"; + }; + base0E = mkOption { + type = hexColorType; + default = "#cba6f4"; + }; + base0F = mkOption { + type = hexColorType; + default = "#f2cdcd"; + }; +} diff --git a/modules/plugins/theme/supported-themes.nix b/modules/plugins/theme/supported-themes.nix index 27951750..24f54222 100644 --- a/modules/plugins/theme/supported-themes.nix +++ b/modules/plugins/theme/supported-themes.nix @@ -5,11 +5,12 @@ inherit (lib.strings) optionalString; inherit (lib.trivial) boolToString warnIf; inherit (lib.nvim.lua) toLuaObject; + cfg = config.vim.theme; in { base16 = { setup = {base16-colors, ...}: '' - -- Base16 theme - require('base16-colorscheme').setup(${toLuaObject base16-colors}) + -- Base-16 theme + require('base16-colorscheme').setup(${toLuaObject cfg.base16-colors}) ''; }; onedark = { diff --git a/modules/plugins/theme/theme.nix b/modules/plugins/theme/theme.nix index 95d15d40..ef79349a 100644 --- a/modules/plugins/theme/theme.nix +++ b/modules/plugins/theme/theme.nix @@ -4,46 +4,29 @@ ... }: let inherit (lib.options) mkOption; - inherit (lib.attrsets) attrNames listToAttrs; - inherit (lib.strings) hasPrefix; + inherit (lib.attrsets) attrNames; inherit (lib.types) bool lines enum; inherit (lib.modules) mkIf; inherit (lib.nvim.dag) entryBefore; - inherit (lib.nvim.types) hexColor; cfg = config.vim.theme; supportedThemes = import ./supported-themes.nix { inherit lib config; }; - - numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F"]; - base16Options = listToAttrs (map (n: { - name = "base0${n}"; - value = mkOption { - description = "The base0${n} color to use"; - type = hexColor; - apply = v: - if hasPrefix "#" v - then v - else "#${v}"; - }; - }) - numbers); + base16-colors = import ./base16-colors.nix { + inherit lib; + }; in { options.vim.theme = { enable = mkOption { type = bool; description = "Enable theming"; }; + inherit base16-colors; name = mkOption { type = enum (attrNames supportedThemes); - description = '' - Supported themes can be found in {file}`supportedThemes.nix`. - Setting the theme to "base16" enables base16 theming and - requires all of the colors in {option}`vim.theme.base16-colors` to be set. - ''; + description = "Supported themes can be found in `supportedThemes.nix`"; }; - base16-colors = base16Options; style = mkOption { type = enum supportedThemes.${cfg.name}.styles;