From 1b3bda78b40cb85341b69d86e39f09634fef18a1 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Fri, 28 Jun 2024 09:28:58 +0200 Subject: [PATCH] plugins/zk: switch to mkNeovimPlugin --- plugins/utils/zk.nix | 141 ++++++++++++++++++------ tests/test-sources/plugins/utils/zk.nix | 26 +++-- 2 files changed, 119 insertions(+), 48 deletions(-) diff --git a/plugins/utils/zk.nix b/plugins/utils/zk.nix index 6fbaf9b1..90b0d974 100644 --- a/plugins/utils/zk.nix +++ b/plugins/utils/zk.nix @@ -6,59 +6,128 @@ ... }: with lib; -{ - options.plugins.zk = { - enable = mkEnableOption "zk.nvim, a plugin to integrate with zk"; +helpers.neovim-plugin.mkNeovimPlugin config { + name = "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 = helpers.defaultNullOpts.mkEnumFirstDefault [ "select" "fzf" + "fzf_lua" + "minipick" "telescope" ] '' - it's recommended to use "telescope" or "fzf" + It is recommended to use `"telescope"`, `"fzf"`, `"fzf_lua"`, or `"minipick"`. ''; lsp = { - config = helpers.neovim-plugin.extraOptionsOptions // { - cmd = helpers.defaultNullOpts.mkListOf types.str [ - "zk" - "lsp" - ] ""; - name = helpers.defaultNullOpts.mkStr "zk" ""; - }; + config = + helpers.defaultNullOpts.mkNullable + (types.submodule { + freeformType = with types; attrsOf anything; + options = { + cmd = helpers.defaultNullOpts.mkListOf types.str [ + "zk" + "lsp" + ] "Command to start the language server."; - autoAttach = { - enabled = helpers.defaultNullOpts.mkBool true "automatically attach buffers in a zk notebook"; - filetypes = helpers.defaultNullOpts.mkListOf types.str [ - "markdown" - ] "matching the given filetypes"; + name = helpers.defaultNullOpts.mkStr "zk" '' + The name for this server. + ''; + + on_attach = helpers.mkNullOrLuaFn '' + 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. + ''; }; }; }; - 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 = '' - require("zk").setup(${helpers.toLuaObject setupOptions}) - ''; + 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"; + } + ); + }; } diff --git a/tests/test-sources/plugins/utils/zk.nix b/tests/test-sources/plugins/utils/zk.nix index 8ce01ccd..6e6efc5f 100644 --- a/tests/test-sources/plugins/utils/zk.nix +++ b/tests/test-sources/plugins/utils/zk.nix @@ -6,19 +6,21 @@ defaults = { plugins.zk = { enable = true; - picker = "select"; - lsp = { - config = { - cmd = [ - "zk" - "lsp" - ]; - name = "zk"; - }; - autoAttach = { - enabled = true; - filetypes = [ "markdown" ]; + settings = { + picker = "select"; + lsp = { + config = { + cmd = [ + "zk" + "lsp" + ]; + name = "zk"; + }; + auto_attach = { + enabled = true; + filetypes = [ "markdown" ]; + }; }; }; };