Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
colorschemes/base16: add settings + refactor
Browse files Browse the repository at this point in the history
Added support for the plugin's "advanced" config settings.

Removed the enum restriction and prefix concatenation, allowing anything
to be passed through, including raw lua: fixes #1675

The theme list is now much shorter and is included directly in the option
description.

Some general cleanup, in particular to `extraConfig` and `customColorschemeType`.
MattSturgeon committed Jun 14, 2024
1 parent eb5c090 commit 40ce354
Showing 3 changed files with 147 additions and 284 deletions.
201 changes: 120 additions & 81 deletions plugins/colorschemes/base16/default.nix
Original file line number Diff line number Diff line change
@@ -6,25 +6,27 @@
...
}:
with lib;
# We configure this plugin manually (no `settings` option) so there is no point in using
# `mkNeovimPlugin` here.
helpers.vim-plugin.mkVimPlugin config {
let
name = "base16";
isColorscheme = true;
luaName = "base16-colorscheme";
originalName = "base16.nvim";
in
helpers.neovim-plugin.mkNeovimPlugin config {
inherit name luaName originalName;
defaultPackage = pkgs.vimPlugins.base16-nvim;
isColorscheme = true;

maintainers = [ maintainers.GaetanLepage ];

# We manually set the colorscheme if needed.
colorscheme = null;
maintainers = with maintainers; [
GaetanLepage
MattSturgeon
];

# TODO introduced 2024-03-12: remove 2024-05-12
imports =
let
basePluginPath = [
"colorschemes"
"base16"
name
];
in
[
@@ -37,94 +39,131 @@ helpers.vim-plugin.mkVimPlugin config {
])
];

settingsExample = {
telescope_borders = true;
indentblankline = false;
dapui = false;
};

settingsOptions = with helpers.defaultNullOpts; {
telescope = mkBool true ''
Whether to enable telescope integration.
'';
telescope_borders = mkBool false ''
Whether to display borders around telescope's panel.
'';
indentblankline = mkBool true ''
Whether to enable indentblankline integration.
'';
notify = mkBool true ''
Whether to enable notify integration.
'';
ts_rainbow = mkBool true ''
Whether to enable ts_rainbow integration.
'';
cmp = mkBool true ''
Whether to enable cmp integration.
'';
illuminate = mkBool true ''
Whether to enable illuminate integration.
'';
lsp_semantic = mkBool true ''
Whether to enable lsp_semantic integration.
'';
mini_completion = mkBool true ''
Whether to enable mini_completion integration.
'';
dapui = mkBool true ''
Whether to enable dapui integration.
'';
};

extraOptions = {
colorscheme =
let
customColorschemeType = types.submodule {
options = listToAttrs (
map
(colorId: rec {
name = "base0" + colorId;
value = mkOption {
type = types.str;
description = "The value for color `${name}`.";
example = "#16161D";
};
})
[
"0"
"1"
"2"
"3"
"4"
"5"
"6"
"7"
"8"
"9"
"A"
"B"
"C"
"D"
"E"
"F"
]
);
options = mapAttrs (
name: example:
mkOption {
type = with helpers.nixvimTypes; maybeRaw str;
description = "The value for color `${name}`.";
inherit example;
}
) customColorschemeExample;
};

customColorschemeExample = {
base00 = "#16161D";
base01 = "#2c313c";
base02 = "#3e4451";
base03 = "#6c7891";
base04 = "#565c64";
base05 = "#abb2bf";
base06 = "#9a9bb3";
base07 = "#c5c8e6";
base08 = "#e06c75";
base09 = "#d19a66";
base0A = "#e5c07b";
base0B = "#98c379";
base0C = "#56b6c2";
base0D = "#0184bc";
base0E = "#c678dd";
base0F = "#a06949";
};

builtinColorschemeExamples = import ./theme-list.nix;
in
mkOption {
type = with types; either (enum (import ./theme-list.nix)) customColorschemeType;
helpers.defaultNullOpts.mkNullable' {
type = types.oneOf [
types.str
customColorschemeType
helpers.nixvimTypes.rawLua
];
default = literalMD ''`vim.env.BASE16_THEME` or `"schemer-dark"`'';
description = ''
The base16 colorscheme to use.
It can either be the name of a builtin colorscheme or an attrs specifying each color explicitly.
Example for the latter:
```nix
{
base00 = "#16161D";
base01 = "#2c313c";
base02 = "#3e4451";
base03 = "#6c7891";
base04 = "#565c64";
base05 = "#abb2bf";
base06 = "#9a9bb3";
base07 = "#c5c8e6";
base08 = "#e06c75";
base09 = "#d19a66";
base0A = "#e5c07b";
base0B = "#98c379";
base0C = "#56b6c2";
base0D = "#0184bc";
base0E = "#c678dd";
base0F = "#a06949";
}
```
You may use the name of a builtin colorscheme or an attrs that specifies the colors explicitly.
Examples of builtin themes include:
${concatStrings (
map (e: ''
- "${e}"
'') builtinColorschemeExamples
)}
`:h nvim-base16-builtin-colorschemes` includes a full list of builtin themes,
however the [plugin's source code] may be more up to date.
[plugin's source code]: https://github.com/RRethy/base16-nvim/blob/master/lua/colors/init.lua
'';
example = "edge-light";
example = customColorschemeExample;
};

setUpBar = mkOption {
type = types.bool;
default = true;
example = false;
description = "Whether to set your status bar theme to 'base16'.";
};
};

extraConfig =
cfg:
mkMerge [
{
plugins.airline.settings.theme = mkIf cfg.setUpBar "base16";
plugins.lualine.theme = mkIf cfg.setUpBar "base16";
plugins.lightline.colorscheme = null;

opts.termguicolors = mkDefault true;
}
(mkIf (isString cfg.colorscheme) { colorscheme = "base16-${cfg.colorscheme}"; })
(mkIf (isAttrs cfg.colorscheme) {
extraConfigLuaPre = ''
require('base16-colorscheme').setup(${helpers.toLuaObject cfg.colorscheme})
'';
})
];
# We will manually set the colorscheme, using `setup`
colorscheme = null;
callSetup = false;

extraConfig = cfg: {
plugins.airline.settings.theme = mkIf cfg.setUpBar (mkDefault name);
plugins.lualine.theme = mkIf cfg.setUpBar (mkDefault name);
plugins.lightline.colorscheme = mkDefault null;

opts.termguicolors = mkDefault true;

# `settings` can either be passed to `with_config` before calling `setup`,
# or it can be passed as `setup`'s 2nd argument.
# See https://github.com/RRethy/base16-nvim/blob/6ac181b5733518040a33017dde654059cd771b7c/lua/base16-colorscheme.lua#L107-L125
extraConfigLuaPre = ''
require('${luaName}').setup(${helpers.toLuaObject cfg.colorscheme}, ${helpers.toLuaObject cfg.settings})
'';
};
}
202 changes: 1 addition & 201 deletions plugins/colorschemes/base16/theme-list.nix
Original file line number Diff line number Diff line change
@@ -1,243 +1,43 @@
# This is a list of all base16 themes
# Example base16 builtin themes to include in the docs
[
"3024"
"apathy"
"apprentice"
"ashes"
"atelier-cave"
"atelier-cave-light"
"atelier-dune"
"atelier-dune-light"
"atelier-estuary"
"atelier-estuary-light"
"atelier-forest"
"atelier-forest-light"
"atelier-heath"
"atelier-heath-light"
"atelier-lakeside"
"atelier-lakeside-light"
"atelier-plateau"
"atelier-plateau-light"
"atelier-savanna"
"atelier-savanna-light"
"atelier-seaside"
"atelier-seaside-light"
"atelier-sulphurpool"
"atelier-sulphurpool-light"
"atlas"
"ayu-dark"
"ayu-light"
"ayu-mirage"
"bespin"
"black-metal"
"black-metal-bathory"
"black-metal-burzum"
"black-metal-dark-funeral"
"black-metal-gorgoroth"
"black-metal-immortal"
"black-metal-khold"
"black-metal-marduk"
"black-metal-mayhem"
"black-metal-nile"
"black-metal-venom"
"blueforest"
"blueish"
"brewer"
"bright"
"brogrammer"
"brushtrees"
"brushtrees-dark"
"catppuccin"
"catppuccin-frappe"
"catppuccin-latte"
"catppuccin-macchiato"
"catppuccin-mocha"
"chalk"
"circus"
"classic-dark"
"classic-light"
"codeschool"
"colors"
"cupcake"
"cupertino"
"da-one-black"
"da-one-gray"
"da-one-ocean"
"da-one-paper"
"da-one-sea"
"da-one-white"
"danqing"
"darcula"
"darkmoss"
"darktooth"
"darkviolet"
"decaf"
"default-dark"
"default-light"
"dirtysea"
"dracula"
"edge-dark"
"edge-light"
"eighties"
"embers"
"emil"
"equilibrium-dark"
"equilibrium-gray-dark"
"equilibrium-gray-light"
"equilibrium-light"
"espresso"
"eva"
"eva-dim"
"evenok-dark"
"everforest"
"flat"
"framer"
"fruit-soda"
"gigavolt"
"github"
"google-dark"
"google-light"
"gotham"
"grayscale-dark"
"grayscale-light"
"greenscreen"
"gruber"
"gruvbox-dark-hard"
"gruvbox-dark-medium"
"gruvbox-dark-pale"
"gruvbox-dark-soft"
"gruvbox-light-hard"
"gruvbox-light-medium"
"gruvbox-light-soft"
"gruvbox-material-dark-hard"
"gruvbox-material-dark-medium"
"gruvbox-material-dark-soft"
"gruvbox-material-light-hard"
"gruvbox-material-light-medium"
"gruvbox-material-light-soft"
"hardcore"
"harmonic-dark"
"harmonic-light"
"heetch"
"heetch-light"
"helios"
"hopscotch"
"horizon-dark"
"horizon-light"
"horizon-terminal-dark"
"horizon-terminal-light"
"humanoid-dark"
"humanoid-light"
"ia-dark"
"ia-light"
"icy"
"irblack"
"isotope"
"kanagawa"
"katy"
"kimber"
"lime"
"macintosh"
"marrakesh"
"materia"
"material"
"material-darker"
"material-lighter"
"material-palenight"
"material-vivid"
"mellow-purple"
"mexico-light"
"mocha"
"monokai"
"mountain"
"nebula"
"nord"
"nova"
"ocean"
"oceanicnext"
"one-light"
"onedark"
"outrun-dark"
"pandora"
"papercolor-dark"
"papercolor-light"
"paraiso"
"pasque"
"phd"
"pico"
"pinky"
"pop"
"porple"
"primer-dark"
"primer-dark-dimmed"
"primer-light"
"purpledream"
"qualia"
"railscasts"
"rebecca"
"rose-pine"
"rose-pine-dawn"
"rose-pine-moon"
"sagelight"
"sakura"
"sandcastle"
"seti"
"shades-of-purple"
"shadesmear-dark"
"shadesmear-light"
"shapeshifter"
"silk-dark"
"silk-light"
"snazzy"
"solarflare"
"solarflare-light"
"solarized-dark"
"solarized-light"
"spaceduck"
"spacemacs"
"standardized-dark"
"standardized-light"
"stella"
"still-alive"
"summercamp"
"summerfruit-dark"
"summerfruit-light"
"synth-midnight-dark"
"synth-midnight-light"
"tango"
"tender"
"tokyo-city-dark"
"tokyo-city-light"
"tokyo-city-terminal-dark"
"tokyo-city-terminal-light"
"tokyo-night-dark"
"tokyo-night-light"
"tokyo-night-storm"
"tokyo-night-terminal-dark"
"tokyo-night-terminal-light"
"tokyo-night-terminal-storm"
"tokyodark"
"tokyodark-terminal"
"tomorrow"
"tomorrow-night"
"tomorrow-night-eighties"
"tube"
"twilight"
"unikitty-dark"
"unikitty-light"
"unikitty-reversible"
"uwunicorn"
"vice"
"vulcan"
"windows-10"
"windows-10-light"
"windows-95"
"windows-95-light"
"windows-highcontrast"
"windows-highcontrast-light"
"windows-nt"
"windows-nt-light"
"woodland"
"xcode-dusk"
"zenburn"
]
28 changes: 26 additions & 2 deletions tests/test-sources/plugins/colorschemes/base16.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,36 @@
{
# No empty test because not setting `colorscheme` would error
empty = {
colorschemes.base16.enable = true;
};

defaults = {
colorschemes.base16 = {
enable = true;

colorscheme = "gruvbox-dark-hard";
colorscheme = "schemer-dark";
setUpBar = true;

settings = {
telescope = true;
telescope_borders = false;
indentblankline = true;
notify = true;
ts_rainbow = true;
cmp = true;
illuminate = true;
lsp_semantic = true;
mini_completion = true;
dapui = true;
};
};
};

builtin-colorscheme = {
colorschemes.base16 = {
enable = true;

colorscheme = "gruvbox-dark-hard";
setUpBar = false;
};
};

0 comments on commit 40ce354

Please sign in to comment.