diff --git a/plugins/default.nix b/plugins/default.nix index 27f541be..dfcb338d 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -111,6 +111,7 @@ ./ui/image.nix ./ui/noice.nix ./ui/transparent.nix + ./ui/twilight.nix ./ui/virt-column.nix ./utils/alpha.nix diff --git a/plugins/ui/twilight.nix b/plugins/ui/twilight.nix new file mode 100644 index 00000000..4a630af1 --- /dev/null +++ b/plugins/ui/twilight.nix @@ -0,0 +1,81 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +with lib; + helpers.neovim-plugin.mkNeovimPlugin config { + name = "twilight"; + originalName = "twilight.nvim"; + defaultPackage = pkgs.vimPlugins.twilight-nvim; + + maintainers = [maintainers.GaetanLepage]; + + settingsOptions = { + dimming = { + alpha = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.25" '' + Amount of dimming. + ''; + + color = helpers.defaultNullOpts.mkListOf types.str ''["Normal" "#ffffff"]'' '' + Highlight groups / colors to use. + ''; + + term_bg = helpers.defaultNullOpts.mkStr "#000000" '' + If `guibg=NONE`, this will be used to calculate text color. + ''; + + inactive = helpers.defaultNullOpts.mkBool false '' + When true, other windows will be fully dimmed (unless they contain the same buffer). + ''; + }; + + context = helpers.defaultNullOpts.mkUnsignedInt 10 '' + Amount of lines we will try to show around the current line. + ''; + + treesitter = helpers.defaultNullOpts.mkBool true '' + Use `treesitter` when available for the filetype. + `treesitter` is used to automatically expand the visible text, but you can further control + the types of nodes that should always be fully expanded. + ''; + + expand = + helpers.defaultNullOpts.mkListOf types.str + '' + [ + "function" + "method" + "table" + "if_statement" + ] + '' + "For treesitter, we will always try to expand to the top-most ancestor with these types."; + + exclude = helpers.defaultNullOpts.mkListOf types.str "[]" '' + Exclude these filetypes. + ''; + }; + + settingsExample = { + dimming.alpha = 0.4; + context = 20; + treesitter = true; + expand = ["function" "method"]; + }; + + extraConfig = cfg: { + warnings = + optional + ( + (isBool cfg.settings.treesitter) + && cfg.settings.treesitter + && (!config.plugins.treesitter.enable) + ) + '' + Nixvim (plugins.twilight): You have set `plugins.twilight.treesitter` to `true` but `plugins.treesitter.enable` is false. + ''; + }; + } diff --git a/tests/test-sources/plugins/ui/twilight.nix b/tests/test-sources/plugins/ui/twilight.nix new file mode 100644 index 00000000..afc4d81a --- /dev/null +++ b/tests/test-sources/plugins/ui/twilight.nix @@ -0,0 +1,32 @@ +{ + empty = { + plugins.twilight.enable = true; + }; + + defaults = { + plugins = { + treesitter.enable = true; + twilight = { + enable = true; + + settings = { + dimming = { + alpha = 0.25; + color = ["Normal" "#ffffff"]; + term_bg = "#000000"; + inactive = false; + }; + context = 10; + treesitter = true; + expand = [ + "function" + "method" + "table" + "if_statement" + ]; + exclude = []; + }; + }; + }; + }; +}