diff --git a/flake.lock b/flake.lock index 6cb497d..dde4cac 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixCats": { "locked": { - "lastModified": 1750385475, - "narHash": "sha256-jxssG9BjbGlxXGhAhtwIIaazpQxROpO0919aGaKuIiY=", + "lastModified": 1751874031, + "narHash": "sha256-Bj8RGeMMNT4MThQJaKjML123kTXiKtTPsXWC2ieaiDc=", "owner": "BirdeeHub", "repo": "nixCats-nvim", - "rev": "0dbb19a5688f045e6e8b4f9f35bc32cdb777b1a9", + "rev": "a985eb3e7d30d3f9c9cf7e8a8718d2d10126bcbd", "type": "github" }, "original": { @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1750215678, - "narHash": "sha256-Rc/ytpamXRf6z8UA2SGa4aaWxUXRbX2MAWIu2C8M+ok=", + "lastModified": 1752012998, + "narHash": "sha256-Q82Ms+FQmgOBkdoSVm+FBpuFoeUAffNerR5yVV7SgT8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "5395fb3ab3f97b9b7abca147249fa2e8ed27b192", + "rev": "2a2130494ad647f953593c4e84ea4df839fbd68c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 1998d07..f92d331 100644 --- a/flake.nix +++ b/flake.nix @@ -157,6 +157,7 @@ nvim-dap nvim-dap-ui nvim-dap-virtual-text + venn-nvim ]; }; lint = [ diff --git a/lua/myLuaConf/plugins/gitsigns.lua b/lua/myLuaConf/plugins/gitsigns.lua new file mode 100644 index 0000000..84205ed --- /dev/null +++ b/lua/myLuaConf/plugins/gitsigns.lua @@ -0,0 +1,84 @@ +return { + "gitsigns.nvim", + for_cat = 'always', + event = "DeferredUIEnter", + -- cmd = { "" }, + -- ft = "", + -- keys = "", + -- colorscheme = "", + after = function() + require('gitsigns').setup({ + -- See `:help gitsigns.txt` + signs = { + add = { text = '+' }, + change = { text = '~' }, + delete = { text = '_' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + }, + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map({ 'n', 'v' }, ']c', function() + if vim.wo.diff then + return ']c' + end + vim.schedule(function() + gs.next_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to next hunk' }) + + map({ 'n', 'v' }, '[c', function() + if vim.wo.diff then + return '[c' + end + vim.schedule(function() + gs.prev_hunk() + end) + return '' + end, { expr = true, desc = 'Jump to previous hunk' }) + + -- Actions + -- visual mode + map('v', 'hs', function() + gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'stage git hunk' }) + map('v', 'hr', function() + gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } + end, { desc = 'reset git hunk' }) + -- normal mode + map('n', 'gs', gs.stage_hunk, { desc = 'git stage hunk' }) + map('n', 'gr', gs.reset_hunk, { desc = 'git reset hunk' }) + map('n', 'gS', gs.stage_buffer, { desc = 'git Stage buffer' }) + map('n', 'gu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) + map('n', 'gR', gs.reset_buffer, { desc = 'git Reset buffer' }) + map('n', 'gp', gs.preview_hunk, { desc = 'preview git hunk' }) + map('n', 'gb', function() + gs.blame_line { full = false } + end, { desc = 'git blame line' }) + map('n', 'gd', gs.diffthis, { desc = 'git diff against index' }) + map('n', 'gD', function() + gs.diffthis '~' + end, { desc = 'git diff against last commit' }) + + -- Toggles + map('n', 'gtb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) + map('n', 'gtd', gs.toggle_deleted, { desc = 'toggle git show deleted' }) + + -- Text object + map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) + end, + }) + vim.cmd([[hi GitSignsAdd guifg=#04de21]]) + vim.cmd([[hi GitSignsChange guifg=#83fce6]]) + vim.cmd([[hi GitSignsDelete guifg=#fa2525]]) + end, +} diff --git a/lua/myLuaConf/plugins/init.lua b/lua/myLuaConf/plugins/init.lua index 2115fa9..2c24fcc 100644 --- a/lua/myLuaConf/plugins/init.lua +++ b/lua/myLuaConf/plugins/init.lua @@ -74,7 +74,6 @@ if nixCats("always") then input = { enable = true }, lazygit = { enable = true }, notifier = { enable = true }, - scroll = { enable = true }, terminal = { enable = true }, toggle = { enable = true }, quickfile = { enable = true }, @@ -168,6 +167,9 @@ end require('lze').load { { import = "myLuaConf.plugins.treesitter", }, { import = "myLuaConf.plugins.completion", }, + { import = "myLuaConf.plugins.gitsigns", }, + { import = "myLuaConf.plugins.lualine", }, + { import = "myLuaConf.plugins.which-key", }, { "markdown-preview.nvim", -- NOTE: for_cat is a custom handler that just sets enabled value for us, @@ -211,6 +213,38 @@ require('lze').load { require('marks').setup({}) end }, + { + "venn.nvim", + for_cat = "always", + keys = { + { "v", function() Toggle_venn() end, desc = "toggle diagram drawing" } + }, + before = function() + -- 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.o.virtualedit="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.o.virtualedit="" + vim.api.nvim_buf_del_keymap(0, "n", "J") + vim.api.nvim_buf_del_keymap(0, "n", "K") + vim.api.nvim_buf_del_keymap(0, "n", "L") + vim.api.nvim_buf_del_keymap(0, "n", "H") + vim.api.nvim_buf_del_keymap(0, "v", "f") + vim.b.venn_enabled = nil + end + end + end + }, { "vim-startuptime", for_cat = 'extra', @@ -220,151 +254,5 @@ require('lze').load { vim.g.startuptime_tries = 10 vim.g.startuptime_exe_path = nixCats.packageBinPath end, - }, - { - "lualine.nvim", - for_cat = 'always', - -- cmd = { "" }, - event = "DeferredUIEnter", - -- ft = "", - -- keys = "", - -- colorscheme = "", - after = function() - require('lualine').setup({ - options = { - alwaysDivideMiddle = true, - icons_enabled = true, - component_separators = { left = '', right = '' }, - section_separators = { left = '', right = '' }, - }, - inactive_sections = { - lualine_a = {}, - lualine_b = {}, - lualine_c = { "filename" }, - lualine_x = { "filetype" }, - lualine_y = {}, - lualine_z = {}, - }, - sections = { - lualine_a = { "mode" }, - lualine_b = { "branch", "diff", "diagnostics" }, - lualine_c = { { "filename", path = 1 } }, - lualine_x = { "encoding", "fileformat", "filetype" }, - lualine_y = { "progress" }, - lualine_z = { "location" }, - }, - tabline = { - lualine_a = { { "buffers", mode = 4 } }, - lualine_b = {}, - lualine_c = {}, - lualine_x = {}, - lualine_y = {}, - lualine_z = { { "tabs", mode = 2 } } - }, - }) - end, - }, - { - "gitsigns.nvim", - for_cat = 'always', - event = "DeferredUIEnter", - -- cmd = { "" }, - -- ft = "", - -- keys = "", - -- colorscheme = "", - after = function() - require('gitsigns').setup({ - -- See `:help gitsigns.txt` - signs = { - add = { text = '+' }, - change = { text = '~' }, - delete = { text = '_' }, - topdelete = { text = '‾' }, - changedelete = { text = '~' }, - }, - on_attach = function(bufnr) - local gs = package.loaded.gitsigns - - local function map(mode, l, r, opts) - opts = opts or {} - opts.buffer = bufnr - vim.keymap.set(mode, l, r, opts) - end - - -- Navigation - map({ 'n', 'v' }, ']c', function() - if vim.wo.diff then - return ']c' - end - vim.schedule(function() - gs.next_hunk() - end) - return '' - end, { expr = true, desc = 'Jump to next hunk' }) - - map({ 'n', 'v' }, '[c', function() - if vim.wo.diff then - return '[c' - end - vim.schedule(function() - gs.prev_hunk() - end) - return '' - end, { expr = true, desc = 'Jump to previous hunk' }) - - -- Actions - -- visual mode - map('v', 'hs', function() - gs.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } - end, { desc = 'stage git hunk' }) - map('v', 'hr', function() - gs.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } - end, { desc = 'reset git hunk' }) - -- normal mode - map('n', 'gs', gs.stage_hunk, { desc = 'git stage hunk' }) - map('n', 'gr', gs.reset_hunk, { desc = 'git reset hunk' }) - map('n', 'gS', gs.stage_buffer, { desc = 'git Stage buffer' }) - map('n', 'gu', gs.undo_stage_hunk, { desc = 'undo stage hunk' }) - map('n', 'gR', gs.reset_buffer, { desc = 'git Reset buffer' }) - map('n', 'gp', gs.preview_hunk, { desc = 'preview git hunk' }) - map('n', 'gb', function() - gs.blame_line { full = false } - end, { desc = 'git blame line' }) - map('n', 'gd', gs.diffthis, { desc = 'git diff against index' }) - map('n', 'gD', function() - gs.diffthis '~' - end, { desc = 'git diff against last commit' }) - - -- Toggles - map('n', 'gtb', gs.toggle_current_line_blame, { desc = 'toggle git blame line' }) - map('n', 'gtd', gs.toggle_deleted, { desc = 'toggle git show deleted' }) - - -- Text object - map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', { desc = 'select git hunk' }) - end, - }) - vim.cmd([[hi GitSignsAdd guifg=#04de21]]) - vim.cmd([[hi GitSignsChange guifg=#83fce6]]) - vim.cmd([[hi GitSignsDelete guifg=#fa2525]]) - end, - }, - { - "which-key.nvim", - for_cat = 'always', - after = function() - require('which-key').setup({ - }) - require('which-key').add { - { "g", group = "[g]it" }, - { "z", group = "[z]ettelkasten" }, - { "gt", group = "[t]oggle" }, - { "m", group = "[m]arkdown" }, - { "f", group = "[f]ind" }, - { "t", group = "[t]ree" }, - { "c", group = "[c]heck" }, - { "l", group = "[l]sp" }, - { "lw", group = "[l]sp [w]orkspace" }, - } - end, - }, + } } diff --git a/lua/myLuaConf/plugins/lualine.lua b/lua/myLuaConf/plugins/lualine.lua new file mode 100644 index 0000000..2a97b3a --- /dev/null +++ b/lua/myLuaConf/plugins/lualine.lua @@ -0,0 +1,43 @@ +return { + "lualine.nvim", + for_cat = 'always', + -- cmd = { "" }, + event = "DeferredUIEnter", + -- ft = "", + -- keys = "", + -- colorscheme = "", + after = function() + require('lualine').setup({ + options = { + alwaysDivideMiddle = true, + icons_enabled = true, + component_separators = { left = '', right = '' }, + section_separators = { left = '', right = '' }, + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = { "filename" }, + lualine_x = { "filetype" }, + lualine_y = {}, + lualine_z = {}, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "branch", "diff", "diagnostics" }, + lualine_c = { { "filename", path = 1 } }, + lualine_x = { "encoding", "fileformat", "filetype" }, + lualine_y = { "progress" }, + lualine_z = { "location" }, + }, + tabline = { + lualine_a = { { "buffers", mode = 4 } }, + lualine_b = {}, + lualine_c = {}, + lualine_x = {}, + lualine_y = {}, + lualine_z = { { "tabs", mode = 2 } } + }, + }) + end, + } diff --git a/lua/myLuaConf/plugins/which-key.lua b/lua/myLuaConf/plugins/which-key.lua new file mode 100644 index 0000000..881a34d --- /dev/null +++ b/lua/myLuaConf/plugins/which-key.lua @@ -0,0 +1,19 @@ +return { + "which-key.nvim", + for_cat = 'always', + after = function() + require('which-key').setup({ + }) + require('which-key').add { + { "g", group = "[g]it" }, + { "z", group = "[z]ettelkasten" }, + { "gt", group = "[t]oggle" }, + { "m", group = "[m]arkdown" }, + { "f", group = "[f]ind" }, + { "t", group = "[t]ree" }, + { "c", group = "[c]heck" }, + { "l", group = "[l]sp" }, + { "lw", group = "[l]sp [w]orkspace" }, + } + end, +}