4 Коміти e548d3fab3 ... 64956062cf

Автор SHA1 Опис Дата
  Thomas Dy 64956062cf nixpkgs/neovim: add surround for JS template string 1 тиждень тому
  Thomas Dy 8fd5743c78 nixpkgs/neovim: add mapping to toggle ,/; at end of line 1 тиждень тому
  Thomas Dy ca1477b90a nixpkgs/neovim: disable autobrackets in blink 1 тиждень тому
  Thomas Dy 2dfe4c8e52 nixpkgs/neovim: replace gitsigns with mini.diff 1 тиждень тому

+ 5 - 5
.config/nixpkgs/neovim/mappings.lua

@@ -37,10 +37,6 @@ vim.keymap.set('n', ']f', '<C-I>', opts)
 vim.keymap.set('n', '[x', '?^[<lt>=>]\\{7}<CR>', opts)
 vim.keymap.set('n', ']x', '/^[<lt>=>]\\{7}<CR>', opts)
 
--- hunk navigation
-vim.keymap.set('n', '[h', '<cmd>Gitsigns prev_hunk<CR>', opts)
-vim.keymap.set('n', ']h', '<cmd>Gitsigns next_hunk<CR>', opts)
-
 -- window navigation
 vim.keymap.set('n', '[w', '<C-w>W', opts)
 vim.keymap.set('n', ']w', '<C-w>w', opts)
@@ -56,7 +52,7 @@ vim.keymap.set('n', '<Leader>n', require('mini.notify').show_history, opts)
 -- https://github.com/tpope/vim-fugitive/issues/1296
 vim.keymap.set('n', '<Leader>gs', '<cmd>Gedit :<CR>', opts)
 vim.keymap.set('n', '<Leader>gb', '<cmd>Telescope git_branches<CR>', opts)
-vim.keymap.set('n', '<Leader>gd', '<cmd>Gitsigns toggle_deleted<CR>', opts)
+vim.keymap.set('n', '<Leader>gd', function() MiniDiff.toggle_overlay() end, opts)
 
 -- undotree
 vim.keymap.set('n', '<Leader>ut', '<cmd>UndotreeToggle<CR>', opts)
@@ -73,6 +69,10 @@ vim.keymap.set('n', '<Leader>Q', '<cmd>lua MiniBufremove.delete(0, true)<CR>', o
 vim.keymap.set('n', '<Leader>s', '<cmd>TSJSplit<CR>', opts)
 vim.keymap.set('n', '<Leader>j', '<cmd>TSJJoin<CR>', opts)
 
+-- add ,/; to end of line
+vim.keymap.set('i', '<C-,>', function() toggle_end_char(',') end, opts)
+vim.keymap.set('i', '<C-;>', function() toggle_end_char(';') end, opts)
+
 -- diagnostics
 vim.keymap.set('n', '<space>e', function() vim.diagnostic.open_float() end, opts)
 vim.keymap.set('n', '[d', function() vim.diagnostic.jump({ count = -1, float = true, severity = vim.diagnostic.severity.ERROR }) end, opts)

+ 85 - 14
.config/nixpkgs/neovim/plugins.lua

@@ -12,6 +12,32 @@ vim.filetype.add({
   },
 })
 
+-- helpers
+local function resolve_git_path(buf_id)
+  local bufname = vim.api.nvim_buf_get_name(buf_id)
+  if not vim.startswith(bufname, "fugitive://") then
+    return false
+  end
+
+  local parsed = vim.fn.FugitiveParse(bufname)
+  local resolved_path = parsed[1]
+  local repo = parsed[2]
+
+  if resolved_path == "" then
+    return false
+  end
+
+  local parts = vim.split(resolved_path, ':')
+  local commit = parts[1]
+  local path = parts[2]
+
+  return {
+    repo = repo,
+    commit = commit,
+    path = path,
+  }
+end
+
 -- file/buffer/etc picker
 local telescope_actions = require('telescope.actions')
 local action_state = require('telescope.actions.state')
@@ -133,25 +159,18 @@ end
 
 -- custom picker for files within a commit
 _G.commit_files = function(opts)
-  local current_path = vim.api.nvim_buf_get_name(0)
-  local parsed = vim.fn.FugitiveParse(current_path)
-  local resolved_path = parsed[1]
-  local repo = parsed[2]
-
-  if resolved_path == "" then
+  local resolved = resolve_git_path(0)
+  if not resolved then
     vim.print("current file is not a fugitive path")
     return
   end
 
-  local parts = vim.split(resolved_path, ':')
-  local commit = parts[1]
-
   opts = opts or {}
   telescope_pickers.new(opts, {
-    prompt_title = commit,
-    finder = telescope_finders.new_oneshot_job({ "git", "ls-tree", "--name-only", "-r", commit }, {
+    prompt_title = resolved.commit,
+    finder = telescope_finders.new_oneshot_job({ "git", "ls-tree", "--name-only", "-r", resolved.commit }, {
       entry_maker = function(entry)
-        local path = string.format("fugitive://%s//%s/%s", repo, commit, entry)
+        local path = string.format("fugitive://%s//%s/%s", resolved.repo, resolved.commit, entry)
         return {
           path = path,
           value = entry,
@@ -186,7 +205,32 @@ _G.commit_files = function(opts)
 end
 
 -- shows added/removed/changed lines
-require('gitsigns').setup()
+local MiniDiff = require('mini.diff')
+MiniDiff.setup({
+  view = {
+    style = 'sign',
+    signs = {
+      delete = '_',
+    },
+  },
+  source = {
+    MiniDiff.gen_source.git(),
+    -- handle fugitive paths
+    {
+      name = "fugitive",
+      attach = function(buf_id)
+        local resolved = resolve_git_path(buf_id)
+        if not resolved or resolved.path == "" then
+          return false
+        end
+
+        local source = vim.fn.FugitiveFind(string.format("%s~1:%s", resolved.commit, resolved.path))
+        local text = vim.fn['fugitive#readfile'](source)
+        MiniDiff.set_ref_text(buf_id, text)
+      end
+    }
+  }
+})
 
 require('mini.statusline').setup({
   content = {
@@ -222,7 +266,17 @@ require('mini.indentscope').setup()
 require('mini.comment').setup()
 
 -- surround actions
-require('mini.surround').setup()
+require('mini.surround').setup({
+  custom_surroundings = {
+    -- js template string
+    ['$'] = {
+      output = {
+        left = '`${',
+        right = '}`',
+      },
+    },
+  },
+})
 
 local spec_treesitter = require('mini.ai').gen_spec.treesitter
 
@@ -326,6 +380,11 @@ require('blink.cmp').setup({
     enabled = false,
   },
   completion = {
+    accept = {
+      auto_brackets = {
+        enabled = false,
+      },
+    },
     documentation = {
       auto_show = true,
       auto_show_delay_ms = 500,
@@ -353,3 +412,15 @@ require('blink.cmp').setup({
 
 -- typescript-vim compiler options
 vim.g.typescript_compiler_options = '--incremental --noEmit'
+
+-- stuff
+_G.toggle_end_char = function(char)
+  local cursor = vim.api.nvim_win_get_cursor(0)
+  local row = cursor[1] - 1
+  local end_char = vim.api.nvim_buf_get_text(0, row, -2, row, -1, {})[1]
+  if end_char == char then
+    vim.api.nvim_buf_set_text(0, row, -2, row, -1, {})
+  else
+    vim.api.nvim_buf_set_text(0, row, -1, row, -1, { char })
+  end
+end

+ 0 - 4
.config/nixpkgs/neovim/plugins/sources.json

@@ -39,10 +39,6 @@
     "rev": "14ce72476995255fc5cb919da8067f65865e1225",
     "sha256": "1g0bqsgidbn4nm0wdnax6hnlvkmdq7df9lw95ng03w6rgwyz3fdr"
   },
-  "lewis6991/gitsigns.nvim": {
-    "rev": "8b729e489f1475615dc6c9737da917b3bc163605",
-    "sha256": "06ag4vksr64l8yffrsahl86x45c1klyyfzw7b0fzzncp918drrmi"
-  },
   "neovim/nvim-lspconfig": {
     "rev": "562487bc108bf73c2493f9e701b9334b48163216",
     "sha256": "0v13snamlh42icj5yv6bbq52h5npbimyqfyckhzg5pwyyr2whyk2"