chore: initial commit

Moved from a94642d3e8
This commit is contained in:
Nicolas Goudry 2024-05-27 00:58:58 +02:00
commit 1c12503ebf
No known key found for this signature in database
GPG key ID: 5FC434D9FFD1DF44
15 changed files with 1434 additions and 0 deletions

62
plugins/default.nix Normal file
View file

@ -0,0 +1,62 @@
# This file will load all plugins defined in the current directory (plugins)
# and load their content in the 'plugins' nixvim attribute.
# Each plugin file must export a lambda, which is called with an attrset
# containing nixpkgs library as 'lib'. Plugins may or may not use it.
# For plugins natively supported by nixvim, the plugin file must have the same
# name as the plugin attribute name expected by nixvim (ie. 'telescope.nix' for
# 'plugins.telescope'). The plugin lambda must return an attrset with at least
# the 'opts' attribute, this attribute is the plugin options as expected by
# nixvim.
# For plugins not supported by nixvim, the plugin file can have any name. The
# plugin lambda must return an attrset with the 'extra' attribute which is also
# an attrset with two attributes: 'package' and 'config'. The 'package'
# attribute is the plugin package in nixpkgs (ie. vimPlugins.<plugin>). The
# 'config' attribute is the plugin configuration in Lua format.
# Additionally, a 'rootOpts' can be returned alongside other attributes, this
# attribute will be used to set extra options to the root nixvim options. For
# example, this allows to set keymaps for plugins that do not have an internal
# option to set keymaps.
{ lib, ... }@args:
let
# Flag to enable LSP plugin with servers
# Given as an extra special arg when building nixvim module
withLSP = args.withLSP or true;
# Load plugins filenames in list
definitions = lib.attrNames (
lib.filterAttrs
(filename: kind:
filename != "default.nix"
&& (kind == "regular" || kind == "directory")
# If file is an LSP plugin, respect withLSP flag
&& (if filename == "lsp.nix" then withLSP else true)
)
(builtins.readDir ./.)
);
in
lib.mkMerge (
map
(file:
let
pluginName = lib.elemAt (lib.splitString "." file) 0;
plugin = import ./${file} args;
in
lib.mkMerge [
(lib.optionalAttrs (plugin ? opts) {
plugins.${pluginName} = plugin.opts;
})
(lib.optionalAttrs (plugin ? extra) {
extraConfigLua = plugin.extra.config or "";
extraPlugins = plugin.extra.packages;
})
(plugin.rootOpts or { })
]
)
definitions
)