From afa4206a819caa6bc00b054ef7d738a0ff89885e Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sat, 4 Feb 2023 02:12:41 +0300 Subject: [PATCH] feat: add `venn.nvim` for drawing venn diagrams --- flake.lock | 23 +++++++++++++++--- flake.nix | 6 +++++ modules/lib/types-plugin.nix | 1 + modules/utility/default.nix | 1 + modules/utility/venn.nix | 47 ++++++++++++++++++++++++++++++++++++ 5 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 modules/utility/venn.nix diff --git a/flake.lock b/flake.lock index 4235c9c..ad5afd3 100644 --- a/flake.lock +++ b/flake.lock @@ -211,11 +211,11 @@ "dashboard-nvim": { "flake": false, "locked": { - "lastModified": 1675318414, - "narHash": "sha256-cwD9Oh7VuF6rECQp1YwEu0ghuYzO8txwnxtWU8ewAgI=", + "lastModified": 1675464953, + "narHash": "sha256-mYSSZnM2Z9uLc4ADiA/prv4JyLPaBEhwN/owwvsmkZY=", "owner": "glepnir", "repo": "dashboard-nvim", - "rev": "f4eedba90f0a55111351fd45444db5a82081727f", + "rev": "d8e5ee3651ce85a34cb1645ecf1ba1d0ce54a1c8", "type": "github" }, "original": { @@ -874,6 +874,7 @@ "todo-comments": "todo-comments", "tokyonight": "tokyonight", "trouble": "trouble", + "venn-nvim": "venn-nvim", "vim-vsnip": "vim-vsnip", "which-key": "which-key" } @@ -1103,6 +1104,22 @@ "type": "github" } }, + "venn-nvim": { + "flake": false, + "locked": { + "lastModified": 1669127905, + "narHash": "sha256-Ks5qUaI0MrhVC2AhVsReVwC/2WArXqIQ36CcCSCyzAk=", + "owner": "jbyuki", + "repo": "venn.nvim", + "rev": "c114563960b8fb1197695d42798d1f3e7190b798", + "type": "github" + }, + "original": { + "owner": "jbyuki", + "repo": "venn.nvim", + "type": "github" + } + }, "vim-tidal-src": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index 7e057f0..49feb34 100644 --- a/flake.nix +++ b/flake.nix @@ -133,6 +133,7 @@ }; vim.utility = { colorizer.enable = true; + venn-nvim.enable = false; # FIXME: throws an error when the command is ran manually }; }; }; @@ -492,5 +493,10 @@ url = "github:uga-rosa/ccc.nvim"; flake = false; }; + + venn-nvim = { + url = "github:jbyuki/venn.nvim"; + flake = false; + }; }; } diff --git a/modules/lib/types-plugin.nix b/modules/lib/types-plugin.nix index 5d3dd9a..ee014a0 100644 --- a/modules/lib/types-plugin.nix +++ b/modules/lib/types-plugin.nix @@ -49,6 +49,7 @@ with lib; let "cinnamon-nvim" "cheatsheet-nvim" "colorizer" + "venn-nvim" ]; pluginsType = with types; listOf (nullOr (either (enum availablePlugins) package)); diff --git a/modules/utility/default.nix b/modules/utility/default.nix index e56ce40..2bc18bb 100644 --- a/modules/utility/default.nix +++ b/modules/utility/default.nix @@ -1,5 +1,6 @@ _: { imports = [ ./colorizer.nix + ./venn.nix ]; } diff --git a/modules/utility/venn.nix b/modules/utility/venn.nix new file mode 100644 index 0000000..05a7594 --- /dev/null +++ b/modules/utility/venn.nix @@ -0,0 +1,47 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.utility.venn-nvim; +in { + options.vim.utility.venn-nvim = { + enable = mkEnableOption "draw ASCII diagrams in Neovim"; + }; + + config = mkIf (cfg.enable) { + vim.startPlugins = [ + "venn-nvim" + ]; + + # TODO: https://github.com/jbyuki/venn.nvim#using-toggle-command + # add keybindings for drawing diagrams4 + vim.luaConfigRC.venn-nvim = nvim.dag.entryAnywhere '' + local venn = require('venn') + -- venn.nvim: enable or disable keymappings + function _G.Toggle_venn() + local venn_enabled = vim.inspect(vim.b.venn_enabled) + if venn_enabled == "nil" then + vim.b.venn_enabled = true + vim.cmd[[setlocal ve=all]] + -- draw a line on HJKL keystokes + vim.api.nvim_buf_set_keymap(0, "n", "J", "j:VBox", {noremap = true}) + vim.api.nvim_buf_set_keymap(0, "n", "K", "k:VBox", {noremap = true}) + vim.api.nvim_buf_set_keymap(0, "n", "L", "l:VBox", {noremap = true}) + vim.api.nvim_buf_set_keymap(0, "n", "H", "h:VBox", {noremap = true}) + -- draw a box by pressing "f" with visual selection + vim.api.nvim_buf_set_keymap(0, "v", "f", ":VBox", {noremap = true}) + else + vim.cmd[[setlocal ve=]] + vim.cmd[[mapclear ]] + vim.b.venn_enabled = nil + end + end + -- toggle keymappings for venn using v + vim.api.nvim_set_keymap('n', 'v', ":lua Toggle_venn()", { noremap = true}) + ''; + }; +}