nix-community.nixvim/plugins/by-name/neorg/default.nix
2025-01-04 00:15:16 +01:00

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`.
'');
};
}