plugins/zk: switch to mkNeovimPlugin

This commit is contained in:
Gaetan Lepage 2024-06-28 09:28:58 +02:00 committed by Gaétan Lepage
parent 38e3849f4a
commit 1b3bda78b4
2 changed files with 119 additions and 48 deletions

View file

@ -6,59 +6,128 @@
... ...
}: }:
with lib; with lib;
{ helpers.neovim-plugin.mkNeovimPlugin config {
options.plugins.zk = { name = "zk";
enable = mkEnableOption "zk.nvim, a plugin to integrate with zk"; originalName = "zk.nvim";
defaultPackage = pkgs.vimPlugins.zk-nvim;
package = helpers.mkPluginPackageOption "zk.nvim" pkgs.vimPlugins.zk-nvim; maintainers = [ maintainers.GaetanLepage ];
# TODO: introduced 2024-06-28. Remove after 24.11 release.
optionsRenamedToSettings = [
"picker"
[
"lsp"
"config"
]
[
"lsp"
"autoAttach"
"enabled"
]
[
"lsp"
"autoAttach"
"filetypes"
]
];
settingsOptions = {
picker = picker =
helpers.defaultNullOpts.mkEnumFirstDefault helpers.defaultNullOpts.mkEnumFirstDefault
[ [
"select" "select"
"fzf" "fzf"
"fzf_lua"
"minipick"
"telescope" "telescope"
] ]
'' ''
it's recommended to use "telescope" or "fzf" It is recommended to use `"telescope"`, `"fzf"`, `"fzf_lua"`, or `"minipick"`.
''; '';
lsp = { lsp = {
config = helpers.neovim-plugin.extraOptionsOptions // { config =
helpers.defaultNullOpts.mkNullable
(types.submodule {
freeformType = with types; attrsOf anything;
options = {
cmd = helpers.defaultNullOpts.mkListOf types.str [ cmd = helpers.defaultNullOpts.mkListOf types.str [
"zk" "zk"
"lsp" "lsp"
] ""; ] "Command to start the language server.";
name = helpers.defaultNullOpts.mkStr "zk" "";
};
autoAttach = { name = helpers.defaultNullOpts.mkStr "zk" ''
enabled = helpers.defaultNullOpts.mkBool true "automatically attach buffers in a zk notebook"; The name for this server.
filetypes = helpers.defaultNullOpts.mkListOf types.str [ '';
"markdown"
] "matching the given filetypes";
};
};
};
config =
let
cfg = config.plugins.zk;
setupOptions = {
inherit (cfg) picker;
lsp = {
inherit (cfg.lsp) config;
auto_attach = {
inherit (cfg.lsp.autoAttach) enabled filetypes;
};
};
};
in
mkIf cfg.enable {
extraPlugins = [ cfg.package ];
extraPackages = [ pkgs.zk ];
extraConfigLua = '' on_attach = helpers.mkNullOrLuaFn ''
require("zk").setup(${helpers.toLuaObject setupOptions}) Command to run when the client is attached.
''; '';
}; };
})
{
cmd = [
"zk"
"lsp"
];
name = "zk";
}
''
LSP configuration. See `:h vim.lsp.start_client()`.
'';
auto_attach = {
enabled = helpers.defaultNullOpts.mkBool true ''
Automatically attach buffers in a zk notebook.
'';
filetypes = helpers.defaultNullOpts.mkListOf types.str [ "markdown" ] ''
Filetypes for which zk should automatically attach.
'';
};
};
};
settingsExample = {
picker = "telescope";
lsp = {
config = {
cmd = [
"zk"
"lsp"
];
name = "zk";
};
auto_attach = {
enabled = true;
filetypes = [ "markdown" ];
};
};
};
extraOptions = {
zkPackage = helpers.mkPackageOption {
name = "zk";
default = pkgs.zk;
};
};
extraConfig = cfg: {
extraPackages = [ cfg.zkPackage ];
warnings = flatten (
mapAttrsToList
(
picker: pluginName:
optional ((cfg.settings.picker == picker) && !config.plugins.${pluginName}.enable) ''
Nixvim (plugins.zk): You have set `plugins.zk.settings.picker = "${picker}"` but `plugins.${pluginName}` is not enabled in your config.
''
)
{
fzf_lua = "fzf-lua";
telescope = "telescope";
}
);
};
} }

View file

@ -6,6 +6,8 @@
defaults = { defaults = {
plugins.zk = { plugins.zk = {
enable = true; enable = true;
settings = {
picker = "select"; picker = "select";
lsp = { lsp = {
config = { config = {
@ -15,12 +17,12 @@
]; ];
name = "zk"; name = "zk";
}; };
auto_attach = {
autoAttach = {
enabled = true; enabled = true;
filetypes = [ "markdown" ]; filetypes = [ "markdown" ];
}; };
}; };
}; };
}; };
};
} }