nix-community.nixvim/modules/performance.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

98 lines
3.5 KiB
Nix
Raw Normal View History

{ lib, ... }:
let
inherit (lib) types;
pathsToLink = [
# :h rtp
# TODO: "/filetype.lua" # filetypes (:h new-filetype)
"/autoload" # automatically loaded scripts (:h autoload-functions)
"/colors" # color scheme files (:h :colorscheme)
"/compiler" # compiler files (:h :compiler)
"/doc" # documentation (:h write-local-help)
"/ftplugin" # filetype plugins (:h write-filetype-plugin)
"/indent" # indent scripts (:h indent-expression)
"/keymap" # key mapping files (:h mbyte-keymap)
"/lang" # menu translations (:h :menutrans)
"/lsp" # LSP client configurations (:h lsp-config)
"/lua" # Lua plugins (:h lua)
# TODO: "/menu.vim" # GUI menus (:h menu.vim)
"/pack" # packages (:h :packadd)
"/parser" # treesitter syntax parsers (:h treesitter)
"/plugin" # plugin scripts (:h write-plugin)
"/queries" # treesitter queries (:h treesitter)
"/rplugin" # remote-plugin scripts (:h remote-plugin)
"/spell" # spell checking files (:h spell)
"/syntax" # syntax files (:h mysyntaxfile)
"/tutor" # tutorial files (:h :Tutor)
# after
"/after"
# ftdetect
"/ftdetect"
# plenary.nvim
"/data/plenary/filetypes"
];
in
{
options.performance = {
byteCompileLua = {
enable = lib.mkEnableOption "byte compiling of lua files";
initLua = lib.mkOption {
description = "Whether to byte compile init.lua.";
type = types.bool;
default = true;
example = false;
};
configs = lib.mkOption {
description = "Whether to byte compile lua configuration files.";
type = types.bool;
default = true;
example = false;
};
plugins = lib.mkEnableOption "plugins" // {
description = "Whether to byte compile lua plugins.";
};
nvimRuntime = lib.mkEnableOption "nvimRuntime" // {
description = "Whether to byte compile lua files in Nvim runtime.";
};
luaLib = lib.mkEnableOption "luaLib" // {
description = "Whether to byte compile lua library.";
};
};
combinePlugins = {
enable = lib.mkEnableOption "combinePlugins" // {
description = ''
Whether to enable EXPERIMENTAL option to combine all plugins
into a single plugin pack. It can significantly reduce startup time,
but all your plugins must have unique filenames and doc tags.
Any collision will result in a build failure. To avoid collisions
you can add your plugin to the `standalonePlugins` option.
Only standard neovim runtime directories are linked to the combined plugin.
If some of your plugins contain important files outside of standard
directories, add these paths to `pathsToLink` option.
'';
};
pathsToLink = lib.mkOption {
type = with types; listOf str;
default = [ ];
# We set this default below in `config` because we want to use default priority
defaultText = pathsToLink;
example = [ "/data" ];
description = "List of paths to link into a combined plugin pack.";
};
standalonePlugins = lib.mkOption {
type = with types; listOf (either str package);
default = [ ];
example = [ "nvim-treesitter" ];
description = "List of plugins (names or packages) to exclude from plugin pack.";
};
};
};
# Set option value with default priority so that values are appended by default
config.performance.combinePlugins = { inherit pathsToLink; };
}