mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
226 lines
5.5 KiB
Nix
226 lines
5.5 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib.nixvim)
|
|
defaultNullOpts
|
|
mkNullOrStr
|
|
mkNullOrOption
|
|
mkNullOrOption'
|
|
;
|
|
inherit (lib) types;
|
|
in
|
|
lib.nixvim.plugins.mkNeovimPlugin {
|
|
name = "neorg";
|
|
|
|
maintainers = [ lib.maintainers.GaetanLepage ];
|
|
|
|
# TODO introduced 2024-12-12: remove after 25.05
|
|
deprecateExtraOptions = true;
|
|
optionsRenamedToSettings = [
|
|
"lazyLoading"
|
|
[
|
|
"logger"
|
|
"plugin"
|
|
]
|
|
[
|
|
"logger"
|
|
"useConsole"
|
|
]
|
|
[
|
|
"logger"
|
|
"highlights"
|
|
]
|
|
[
|
|
"logger"
|
|
"useFile"
|
|
]
|
|
[
|
|
"logger"
|
|
"level"
|
|
]
|
|
[
|
|
"logger"
|
|
"floatPrecision"
|
|
]
|
|
{
|
|
old = "modules";
|
|
new = "load";
|
|
}
|
|
];
|
|
imports = [
|
|
./deprecations.nix
|
|
];
|
|
|
|
extraOptions = {
|
|
telescopeIntegration = {
|
|
enable = lib.mkEnableOption "`neorg-telescope` plugin for telescope integration.";
|
|
|
|
package = lib.mkPackageOption pkgs "neorg-telescope" {
|
|
default = [
|
|
"vimPlugins"
|
|
"neorg-telescope"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
settingsOptions = {
|
|
hook = mkNullOrOption types.rawLua ''
|
|
A user-defined function that is invoked whenever Neorg starts up. May be used to e.g. set custom keybindings.
|
|
|
|
```lua
|
|
fun(manual: boolean, arguments?: string)
|
|
```
|
|
'';
|
|
|
|
lazy_loading = defaultNullOpts.mkBool false ''
|
|
Whether to defer loading the Neorg core until after the user has entered a `.norg` file.
|
|
'';
|
|
|
|
load = defaultNullOpts.mkAttrsOf' {
|
|
description = ''
|
|
A list of modules to load, alongside their configurations.
|
|
'';
|
|
example = {
|
|
"core.defaults".__empty = null;
|
|
"core.concealer".config = {
|
|
icon_preset = "varied";
|
|
};
|
|
"core.dirman".config = {
|
|
workspaces = {
|
|
work = "~/notes/work";
|
|
home = "~/notes/home";
|
|
};
|
|
};
|
|
};
|
|
pluginDefault = { };
|
|
type = types.anything;
|
|
};
|
|
|
|
logger = {
|
|
plugin = defaultNullOpts.mkStr "neorg" ''
|
|
Name of the plugin.
|
|
Prepended to log messages.
|
|
'';
|
|
|
|
use_console = defaultNullOpts.mkBool true ''
|
|
Whether to print the output to Neovim while running.
|
|
'';
|
|
|
|
highlights = defaultNullOpts.mkBool true ''
|
|
Whether highlighting should be used in console (using `:echohl`).
|
|
'';
|
|
|
|
use_file = defaultNullOpts.mkBool true ''
|
|
Whether to write output to a file.
|
|
'';
|
|
|
|
level = defaultNullOpts.mkStr "warn" ''
|
|
Any messages above this level will be logged.
|
|
'';
|
|
|
|
modes = defaultNullOpts.mkListOf' {
|
|
description = ''
|
|
Level configuration.
|
|
'';
|
|
type = types.submodule {
|
|
freeformType = with types; attrsOf anything;
|
|
options = {
|
|
name = mkNullOrStr ''
|
|
Name for this log level.
|
|
'';
|
|
|
|
hl = mkNullOrStr ''
|
|
highlight group.
|
|
'';
|
|
|
|
level = mkNullOrOption' {
|
|
type = with types; maybeRaw (either ints.unsigned str);
|
|
description = ''
|
|
Log level value.
|
|
'';
|
|
example.__raw = "vim.log.levels.TRACE";
|
|
};
|
|
};
|
|
};
|
|
pluginDefault = [
|
|
{
|
|
name = "trace";
|
|
hl = "Comment";
|
|
level.__raw = "vim.log.levels.TRACE";
|
|
}
|
|
{
|
|
name = "debug";
|
|
hl = "Comment";
|
|
level.__raw = "vim.log.levels.DEBUG";
|
|
}
|
|
{
|
|
name = "info";
|
|
hl = "None";
|
|
level.__raw = "vim.log.levels.INFO";
|
|
}
|
|
{
|
|
name = "warn";
|
|
hl = "WarningMsg";
|
|
level.__raw = "vim.log.levels.WARN";
|
|
}
|
|
{
|
|
name = "error";
|
|
hl = "ErrorMsg";
|
|
level.__raw = "vim.log.levels.ERROR";
|
|
}
|
|
{
|
|
name = "fatal";
|
|
hl = "ErrorMsg";
|
|
level = 5;
|
|
}
|
|
];
|
|
};
|
|
|
|
float_precision = defaultNullOpts.mkFloat 0.01 ''
|
|
Can limit the number of decimals displayed for floats.
|
|
'';
|
|
};
|
|
};
|
|
|
|
settingsExample = {
|
|
load = {
|
|
"core.defaults".__empty = null;
|
|
"core.concealer".config = {
|
|
icon_preset = "varied";
|
|
};
|
|
"core.dirman".config = {
|
|
workspaces = {
|
|
work = "~/notes/work";
|
|
home = "~/notes/home";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
extraConfig = cfg: {
|
|
|
|
extraPlugins = lib.mkIf cfg.telescopeIntegration.enable [ cfg.telescopeIntegration.package ];
|
|
|
|
warnings =
|
|
let
|
|
modules = cfg.settings.load or { };
|
|
telescopeModuleEnabled = (modules."core.integrations.telescope" or null) != null;
|
|
in
|
|
(lib.optional (telescopeModuleEnabled && (!cfg.telescopeIntegration.enable)) ''
|
|
You have enabled the telescope neorg module (`core.integrations.telescope`) but have not enabled `plugins.neorg.telescopeIntegration.enable`.
|
|
The latter will install the `neorg-telescope` plugin necessary for this integration to work.
|
|
'')
|
|
++ (lib.optional (cfg.telescopeIntegration.enable && (!config.plugins.telescope.enable)) ''
|
|
Telescope support for neorg is enabled but the telescope plugin is not.
|
|
'')
|
|
++ (lib.optional ((modules ? "core.defaults") && (!config.plugins.treesitter.enable)) ''
|
|
Neorg's `core.defaults` module is enabled but `plugins.treesitter` is not.
|
|
Treesitter is required when using the `core.defaults`.
|
|
'');
|
|
};
|
|
}
|