diff --git a/plugins/default.nix b/plugins/default.nix index ef4988f0..fe4d33de 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -100,5 +100,6 @@ ./utils/emmet.nix ./utils/magma-nvim.nix ./utils/which-key.nix + ./utils/zk.nix ]; } diff --git a/plugins/utils/zk.nix b/plugins/utils/zk.nix new file mode 100644 index 00000000..b950bee0 --- /dev/null +++ b/plugins/utils/zk.nix @@ -0,0 +1,55 @@ +{ + pkgs, + config, + lib, + ... +} @ args: +with lib; let + helpers = import ../helpers.nix args; +in { + options.plugins.zk = { + enable = mkEnableOption "zk.nvim, a plugin to integrate with zk"; + + package = helpers.mkPackageOption "zk.nvim" pkgs.vimPlugins.zk-nvim; + + picker = helpers.defaultNullOpts.mkEnumFirstDefault ["select" "fzf" "telescope"] '' + it's recommended to use "telescope" or "fzf" + ''; + + lsp = { + config = + helpers.extraOptionsOptions + // { + cmd = helpers.defaultNullOpts.mkNullable (types.listOf types.str) ''["zk" "lsp"]'' ""; + name = helpers.defaultNullOpts.mkStr "zk" ""; + }; + + autoAttach = { + enabled = helpers.defaultNullOpts.mkBool true "automatically attach buffers in a zk notebook"; + filetypes = + helpers.defaultNullOpts.mkNullable (types.listOf 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 = '' + require("zk").setup(${helpers.toLuaObject setupOptions}) + ''; + }; +} diff --git a/tests/test-sources/plugins/utils/zk.nix b/tests/test-sources/plugins/utils/zk.nix new file mode 100644 index 00000000..8393ff8a --- /dev/null +++ b/tests/test-sources/plugins/utils/zk.nix @@ -0,0 +1,23 @@ +{ + empty = { + plugins.zk.enable = true; + }; + + defaults = { + plugins.zk = { + enable = true; + picker = "select"; + lsp = { + config = { + cmd = ["zk" "lsp"]; + name = "zk"; + }; + + autoAttach = { + enabled = true; + filetypes = ["markdown"]; + }; + }; + }; + }; +}