{ lib, helpers, config, pkgs, ... }: with lib; let cfg = config.plugins.cursorline; in { options.plugins.cursorline = helpers.neovim-plugin.extraOptionsOptions // { enable = mkEnableOption "nvim-cursorline"; package = helpers.mkPackageOption "nvim-cursorline" pkgs.vimPlugins.nvim-cursorline; cursorline = { enable = helpers.defaultNullOpts.mkBool true "Show / hide cursorline in connection with cursor moving."; timeout = helpers.defaultNullOpts.mkInt 1000 "Time (in ms) after which the cursorline appears."; number = helpers.defaultNullOpts.mkBool false "Whether to also highlight the line number."; }; cursorword = { enable = helpers.defaultNullOpts.mkBool true "Underlines the word under the cursor."; minLength = helpers.defaultNullOpts.mkInt 3 "Minimum length for underlined words."; hl = helpers.defaultNullOpts.mkNullable types.attrs "{underline = true;}" "Highliht definition map for cursorword highlighting."; }; }; config = let options = { cursorline = with cfg.cursorline; { inherit enable timeout number; }; cursorword = with cfg.cursorword; { inherit enable; min_length = minLength; inherit hl; }; } // cfg.extraOptions; in mkIf cfg.enable { extraPlugins = [cfg.package]; extraConfigLua = '' require('nvim-cursorline').setup(${helpers.toLuaObject options}) ''; }; }