From 4b7636090f8186484f4aa2420f3b54c4d96c6c4c Mon Sep 17 00:00:00 2001 From: iofq Date: Sun, 3 Aug 2025 14:39:54 -0500 Subject: [PATCH] dart persist + picker --- ...estingstuffalotofstuffreallywellohyeah.txt | 0 flake.lock | 16 + flake.nix | 33 +- nix/neovim-overlay.nix | 5 +- nvim/lua/config/autocmd.lua | 57 +++ nvim/lua/config/init.lua | 88 ----- nvim/lua/config/keymaps.lua | 18 + nvim/lua/plugins/lib/dart.lua | 361 ------------------ nvim/lua/plugins/lib/session_jj.lua | 26 +- nvim/lua/plugins/lib/snacks.lua | 25 -- nvim/lua/plugins/mini.lua | 19 +- nvim/lua/plugins/misc.lua | 5 + nvim/lua/plugins/snacks.lua | 15 +- 13 files changed, 149 insertions(+), 519 deletions(-) delete mode 100644 123reallinglongfilenamefortestingstuffalotofstuffreallywellohyeah.txt create mode 100644 nvim/lua/config/autocmd.lua create mode 100644 nvim/lua/config/keymaps.lua delete mode 100644 nvim/lua/plugins/lib/dart.lua diff --git a/123reallinglongfilenamefortestingstuffalotofstuffreallywellohyeah.txt b/123reallinglongfilenamefortestingstuffalotofstuffreallywellohyeah.txt deleted file mode 100644 index e69de29..0000000 diff --git a/flake.lock b/flake.lock index 9d0c7b0..c6d2f3f 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,20 @@ { "nodes": { + "dart": { + "flake": false, + "locked": { + "lastModified": 1754291267, + "owner": "iofq", + "repo": "dart.nvim", + "rev": "617587d40fd2f2727c18758c4e6decac78459529", + "type": "github" + }, + "original": { + "owner": "iofq", + "repo": "dart.nvim", + "type": "github" + } + }, "flake-compat": { "flake": false, "locked": { @@ -376,6 +391,7 @@ }, "root": { "inputs": { + "dart": "dart", "flake-utils": "flake-utils", "gen-luarc": "gen-luarc", "neovim-nightly-overlay": "neovim-nightly-overlay", diff --git a/flake.nix b/flake.nix index b752ee4..488efc6 100644 --- a/flake.nix +++ b/flake.nix @@ -9,6 +9,10 @@ url = "github:mrcjkb/nix-gen-luarc-json"; inputs.nixpkgs.follows = "nixpkgs"; }; + dart = { + url = "github:iofq/dart.nvim"; + flake = false; + }; # Add bleeding-edge plugins here. # They can be updated with `nix flake update` (make sure to commit the generated flake.lock) # wf-nvim = { @@ -16,19 +20,22 @@ # flake = false; # }; }; - outputs = inputs @ { - self, - nixpkgs, - flake-utils, - ... - }: let - systems = builtins.attrNames nixpkgs.legacyPackages; + outputs = + inputs@{ + self, + nixpkgs, + flake-utils, + ... + }: + let + systems = builtins.attrNames nixpkgs.legacyPackages; - # This is where the Neovim derivation is built. - neovim-overlay = import ./nix/neovim-overlay.nix {inherit inputs;}; - in + # This is where the Neovim derivation is built. + neovim-overlay = import ./nix/neovim-overlay.nix { inherit inputs; }; + in flake-utils.lib.eachSystem systems ( - system: let + system: + let pkgs = import nixpkgs { inherit system; config.allowUnfree = true; @@ -48,7 +55,6 @@ nil stylua luajitPackages.luacheck - alejandra nvim-dev ]; shellHook = '' @@ -58,7 +64,8 @@ ln -Tfns $PWD/nvim ~/.config/nvim-dev ''; }; - in { + in + { packages = rec { default = nvim; nvim = pkgs.nvim-pkg; diff --git a/nix/neovim-overlay.nix b/nix/neovim-overlay.nix index 1b83895..6dcb1b4 100644 --- a/nix/neovim-overlay.nix +++ b/nix/neovim-overlay.nix @@ -14,10 +14,13 @@ let }; mkNeovim = pkgs.callPackage ./mkNeovim.nix { inherit pkgs-wrapNeovim; }; + dart-nvim-git = mkNvimPlugin inputs.dart "dart.nvim"; + all-plugins = with pkgs.vimPlugins; [ blink-cmp blink-ripgrep-nvim conform-nvim + dart-nvim-git diffview-nvim eyeliner-nvim friendly-snippets @@ -43,12 +46,12 @@ let # Extra packages that should be included on nixos but don't need to be bundled extraPackages = with pkgs; [ # linters - alejandra yamllint jq hadolint nixfmt shellcheck + golangci-lint # LSPs gopls diff --git a/nvim/lua/config/autocmd.lua b/nvim/lua/config/autocmd.lua new file mode 100644 index 0000000..597b87d --- /dev/null +++ b/nvim/lua/config/autocmd.lua @@ -0,0 +1,57 @@ +-- create undopath +local undopath = vim.fn.stdpath('data') .. 'undo' +vim.api.nvim_create_autocmd('VimEnter', { + command = 'silent !mkdir -p ' .. undopath, + group = vim.api.nvim_create_augroup('Init', {}), +}) + +-- open :h in buffers +vim.api.nvim_create_autocmd('BufWinEnter', { + pattern = '*', + callback = function(event) + if vim.bo[event.buf].filetype == 'help' then + vim.cmd.only() + vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true }) + vim.bo.buflisted = false + end + end, +}) + +-- Allow basic deletion in qflist +vim.api.nvim_create_autocmd({ 'FileType' }, { + pattern = 'qf', + callback = function() + vim.keymap.set({ 'n', 'i' }, 'dd', function() + local ln = vim.fn.line('.') + local qf = vim.fn.getqflist() + if #qf == 0 then + return + end + table.remove(qf, ln) + vim.fn.setqflist(qf, 'r') + vim.cmd('copen') + -- move cursor to stay at same index (or up one if at EOF) + vim.api.nvim_win_set_cursor(vim.fn.win_getid(), { ln < #qf and ln or math.max(ln - 1, 1), 0 }) + end, { buffer = true }) + end, +}) + +-- resize splits if window got resized +vim.api.nvim_create_autocmd({ 'VimResized' }, { + group = vim.api.nvim_create_augroup('resize_splits', { clear = true }), + callback = function() + local current_tab = vim.fn.tabpagenr() + vim.cmd('tabdo wincmd =') + vim.cmd('tabnext ' .. current_tab) + end, +}) + +-- Check if we need to reload the file when it changed +vim.api.nvim_create_autocmd({ 'FocusGained', 'TermClose', 'TermLeave' }, { + group = vim.api.nvim_create_augroup('check_reload', { clear = true }), + callback = function() + if vim.o.buftype ~= 'nofile' then + vim.cmd('checktime') + end + end, +}) diff --git a/nvim/lua/config/init.lua b/nvim/lua/config/init.lua index a331e13..0fabd68 100644 --- a/nvim/lua/config/init.lua +++ b/nvim/lua/config/init.lua @@ -1,14 +1,9 @@ vim.opt.autowrite = true - vim.opt.backspace = 'indent,eol,start' vim.opt.confirm = true vim.opt.completeopt = { 'menu', 'menuone', 'noselect' } -vim.opt.cmdheight = 1 vim.opt.diffopt = 'internal,filler,closeoff,inline:char' vim.opt.expandtab = true -- insert tabs as spaces -vim.o.foldenable = true -vim.o.foldmethod = 'expr' -- use tree-sitter for folding method -vim.o.foldexpr = 'v:lua.vim.treesitter.foldexpr()' vim.o.foldlevelstart = 99 vim.opt.inccommand = 'split' -- incremental live completion vim.opt.list = true @@ -27,30 +22,6 @@ vim.opt.virtualedit = 'onemore' vim.opt.winborder = 'single' vim.cmd('colorscheme iofq') --- Switch tab length on the fly -vim.keymap.set('n', '\\t', function() - vim.o.tabstop = vim.o.tabstop == 8 and 2 or 2 * vim.o.tabstop -end, { silent = true, desc = 'toggle tabstop' }) - --- autocmd ----------------------------------------- -local undopath = vim.fn.stdpath('data') .. 'undo' -vim.api.nvim_create_autocmd('VimEnter', { - command = 'silent !mkdir -p ' .. undopath, - group = vim.api.nvim_create_augroup('Init', {}), -}) --- open :h in buffers -vim.api.nvim_create_autocmd('BufWinEnter', { - pattern = '*', - callback = function(event) - if vim.bo[event.buf].filetype == 'help' then - vim.cmd.only() - vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true }) - vim.bo.buflisted = false - end - end, -}) - -- Configure Neovim diagnostic messages vim.diagnostic.config { virtual_text = true, @@ -62,62 +33,3 @@ vim.diagnostic.config { source = 'if_many', }, } - --- Allow basic deletion in qflist -vim.api.nvim_create_autocmd({ 'FileType' }, { - pattern = 'qf', - callback = function() - vim.keymap.set({ 'n', 'i' }, 'dd', function() - local ln = vim.fn.line('.') - local qf = vim.fn.getqflist() - if #qf == 0 then - return - end - table.remove(qf, ln) - vim.fn.setqflist(qf, 'r') - vim.cmd('copen') - -- move cursor to stay at same index (or up one if at EOF) - vim.api.nvim_win_set_cursor(vim.fn.win_getid(), { ln < #qf and ln or math.max(ln - 1, 1), 0 }) - end, { buffer = true }) - end, -}) - --- random keymaps -vim.keymap.set({ 'v', 'i' }, 'wq', 'l', { noremap = true, silent = true }) -vim.keymap.set({ 'v', 'n' }, 'q:', '') -vim.keymap.set('v', '<', '', '>gv') -vim.keymap.set('n', 'n', 'nzz', { noremap = true }) -vim.keymap.set('n', 'N', 'Nzz', { noremap = true }) -vim.keymap.set('n', '', 'zz', { noremap = true }) -vim.keymap.set('n', '', 'zz', { noremap = true }) -vim.keymap.set('v', '', ":m '>+1gv=gv", { desc = 'move selection down' }) -vim.keymap.set('v', '', ":m '<-2gv=gv", { desc = 'move selection up' }) -vim.keymap.set('n', 'gq', vim.cmd.bdelete, { noremap = true, silent = true, desc = 'close buffer' }) -vim.keymap.set('n', 'gQ', function() - vim.cmd('bufdo bdelete') -end, { noremap = true, silent = true, desc = 'close all buffers' }) - --- custom tabline -local dart = require('plugins.lib.dart') -dart.setup() - --- resize splits if window got resized -vim.api.nvim_create_autocmd({ 'VimResized' }, { - group = vim.api.nvim_create_augroup('resize_splits', { clear = true }), - callback = function() - local current_tab = vim.fn.tabpagenr() - vim.cmd('tabdo wincmd =') - vim.cmd('tabnext ' .. current_tab) - end, -}) - --- Check if we need to reload the file when it changed -vim.api.nvim_create_autocmd({ 'FocusGained', 'TermClose', 'TermLeave' }, { - group = vim.api.nvim_create_augroup('check_reload', { clear = true }), - callback = function() - if vim.o.buftype ~= 'nofile' then - vim.cmd('checktime') - end - end, -}) diff --git a/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..109879d --- /dev/null +++ b/nvim/lua/config/keymaps.lua @@ -0,0 +1,18 @@ +-- Switch tab length on the fly +vim.keymap.set('n', '\\t', function() + vim.o.tabstop = vim.o.tabstop == 8 and 2 or 2 * vim.o.tabstop +end, { silent = true, desc = 'toggle tabstop' }) +vim.keymap.set({ 'v', 'i' }, 'wq', 'l', { noremap = true, silent = true }) +vim.keymap.set({ 'v', 'n' }, 'q:', '') +vim.keymap.set('v', '<', '', '>gv') +vim.keymap.set('n', 'n', 'nzz', { noremap = true }) +vim.keymap.set('n', 'N', 'Nzz', { noremap = true }) +vim.keymap.set('n', '', 'zz', { noremap = true }) +vim.keymap.set('n', '', 'zz', { noremap = true }) +vim.keymap.set('v', '', ":m '>+1gv=gv", { desc = 'move selection down' }) +vim.keymap.set('v', '', ":m '<-2gv=gv", { desc = 'move selection up' }) +vim.keymap.set('n', 'gq', vim.cmd.bdelete, { noremap = true, silent = true, desc = 'close buffer' }) +vim.keymap.set('n', 'gQ', function() + vim.cmd('bufdo bdelete') +end, { noremap = true, silent = true, desc = 'close all buffers' }) diff --git a/nvim/lua/plugins/lib/dart.lua b/nvim/lua/plugins/lib/dart.lua deleted file mode 100644 index af00bf6..0000000 --- a/nvim/lua/plugins/lib/dart.lua +++ /dev/null @@ -1,361 +0,0 @@ -local Dart = {} -local M = {} - --- table of {bufnr = int, mark = string} -M.state = {} - -Dart.setup = function(config) - config = M.setup_config(config) - M.apply_config(config) - M.create_autocommands() - M.create_default_hl() - - _G.Dart = Dart -end - -M.config = { - -- list of characters to use to mark 'pinned' buffers - -- the characters will be chosen for new pins in order - marklist = { 'a', 's', 'd', 'f', 'q', 'w', 'e', 'r' }, - -- list of characters to use to mark recent buffers - -- we track the last #buflist opened buffers to display on the left side of the tabline - buflist = { 'z', 'x', 'c' }, - - mappings = { - mark = 'mm', - jump = 'm', - pick = 'mp', - next = '', - prev = '', - }, -} - -M.setup_config = function(config) - M.config = vim.tbl_deep_extend('force', M.config, config or {}) - return M.config -end - -M.apply_config = function(config) - -- built list of all marks (buf + pin) to sort tabline by - M.order = {} - for i, key in ipairs(vim.list_extend(vim.deepcopy(config.buflist), config.marklist)) do - M.order[key] = i - end - - vim.opt.showtabline = 2 - vim.opt.tabline = '%!v:lua.Dart.gen_tabline()' - - -- setup keymaps - local function map(mode, lhs, rhs, opts) - if lhs == '' then - return - end - opts = vim.tbl_deep_extend('force', { silent = true }, opts or {}) - vim.keymap.set(mode, lhs, rhs, opts) - end - - map('n', config.mappings.mark, Dart.mark, { desc = 'Dart: mark current buffer' }) - map('n', config.mappings.jump, function() - Dart.jump(vim.fn.getcharstr()) - end, { desc = 'Dart: jump to buffer' }) - map('n', config.mappings.pick, Dart.pick, { desc = 'Dart: pick buffer' }) - map('n', config.mappings.next, Dart.next, { desc = 'Dart: next buffer' }) - map('n', config.mappings.prev, Dart.prev, { desc = 'Dart: prev buffer' }) -end - -M.create_autocommands = function() - local group = vim.api.nvim_create_augroup('Dart', {}) - - -- cleanup deleted buffers - vim.api.nvim_create_autocmd('BufDelete', { - group = group, - callback = function(args) - M.del_by_bufnr(args.buf) - end, - }) - - -- track last n opened buffers - vim.api.nvim_create_autocmd({ 'BufWinEnter', 'BufAdd' }, { - group = group, - callback = function(args) - M.shift_buflist(args.buf) - end, - }) - - -- Clickable tabs - vim.api.nvim_exec2( - [[function! SwitchBuffer(buf_id, clicks, button, mod) - execute 'buffer' a:buf_id - endfunction]], - {} - ) -end - --- Use Mini Tabline for default highlights, since it's well supported by many colorschemes --- override the foreground for labels to be more visible -M.create_default_hl = function() - local set_default_hl = function(name, opts) - opts.default = true - vim.api.nvim_set_hl(0, name, opts) - end - - local override_label = function(hl, link) - local prev = vim.api.nvim_get_hl(0, { name = link }) - vim.api.nvim_set_hl(0, hl, { bg = prev.bg, fg = 'orange', bold = true }) - end - - -- Current selection - set_default_hl('DartCurrent', { link = 'MiniTablineCurrent' }) - override_label('DartCurrentLabel', 'MiniTablineCurrent') - - -- Current selection if modified - set_default_hl('DartCurrentModified', { link = 'MiniTablineModifiedCurrent' }) - override_label('DartCurrentLabelModified', 'MiniTablineModifiedCurrent') - - -- Visible but not selected - set_default_hl('DartVisible', { link = 'MiniTablineVisible' }) - override_label('DartVisibleLabel', 'MiniTablineVisible') - - -- Visible and modified but not selected - set_default_hl('DartVisibleModified', { link = 'MiniTablineModifiedVisible' }) - override_label('DartVisibleLabelModified', 'MiniTablineModifiedVisible') - - -- Fill - set_default_hl('DartFill', { link = 'MiniTablineFill' }) -end - -M.get_state_by_field = function(field, value) - for _, m in ipairs(M.state) do - if m[field] == value then - return m - end - end -end - -M.state_from_bufnr = function(bufnr) - return M.get_state_by_field('bufnr', bufnr) -end - -M.state_from_mark = function(mark) - return M.get_state_by_field('mark', mark) -end - -M.del_by_bufnr = function(bufnr) - for i, m in ipairs(M.state) do - if m.bufnr == bufnr then - table.remove(M.state, i) - return - end - end -end - -M.should_show = function(bufnr) - return vim.api.nvim_buf_is_valid(bufnr) -- buffer exists and is loaded - and vim.api.nvim_buf_is_loaded(bufnr) - and vim.bo[bufnr].buflisted -- don't show hidden buffers - and vim.bo[bufnr].buftype == '' -- don't show pickers, prompts, etc. - and vim.api.nvim_buf_get_name(bufnr) ~= '' -- don't show unnamed files -end - -M.next_unused_mark = function() - for _, m in ipairs(M.config.marklist) do - if not M.state_from_mark(m) then - return m - end - end - return 'Z' -end - -M.shift_buflist = function(bufnr) - if M.state_from_bufnr(bufnr) or not M.should_show(bufnr) then - return - end - - local buflist = M.config.buflist - - -- if there's a free buflist mark, set it - for _, mark in ipairs(buflist) do - if not M.state_from_mark(mark) then - M.mark(bufnr, mark) - return - end - end - - -- if not, shift buflist right and set new buffer to element 1 - for i = #buflist, 2, -1 do - local mark = M.state_from_mark(buflist[i]) - local next = M.state_from_mark(buflist[i - 1]) - mark.bufnr = next.bufnr - end - M.state_from_mark(buflist[1]).bufnr = bufnr -end - --- param direction -1 for prev, 1 for next -M.cycle_tabline = function(direction) - local cur = vim.api.nvim_get_current_buf() - for i, m in ipairs(M.state) do - if cur == m.bufnr then - local next = ((i + direction - 1) % #M.state) + 1 -- wrap around list - if M.state[next] then - vim.api.nvim_set_current_buf(M.state[next].bufnr) - return - end - end - end -end - -M.gen_tabpage = function() - local n_tabpages = vim.fn.tabpagenr('$') - if n_tabpages == 1 then - return '' - end - return string.format('%%= Tab %d/%d ', vim.fn.tabpagenr(), n_tabpages) -end - -M.gen_tabline_item = function(item) - local bufnr = item.bufnr - local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(bufnr), ':t') - local is_current = bufnr == vim.api.nvim_get_current_buf() - local modified = vim.bo[bufnr].modified and 'Modified' or '' - - local hl_label = is_current and 'DartCurrentLabel' or 'DartVisibleLabel' - local label = item.mark ~= '' and item.mark .. ' ' or '' - local hl = is_current and 'DartCurrent' or 'DartVisible' - local content = filename ~= '' and filename or '*' - - return { - bufnr = bufnr, - hl_label = hl_label .. modified, - label = label, - hl = hl .. modified, - content = content, - } -end - -M.format_tabline_item = function(item) - local click = string.format('%%%s@SwitchBuffer@', item.bufnr) - return string.format('%%#%s#%s %s%%#%s#%s %%X', item.hl_label, click, item.label, item.hl, item.content) -end - -M.mark = function(bufnr, mark) - if not bufnr then - bufnr = vim.api.nvim_get_current_buf() - end - if not M.should_show(bufnr) then - return - end - if not mark then - mark = M.next_unused_mark() - end - - local exists = M.state_from_bufnr(bufnr) - if not exists then - table.insert(M.state, { bufnr = bufnr, mark = mark }) - elseif vim.tbl_contains(M.config.buflist, exists.mark) then - exists.mark = mark -- allow for re-marking buffers in the buflist - else - return -- skip sort if no change - end - table.sort(M.state, function(a, b) - return (M.order[a.mark] or 998) < (M.order[b.mark] or 999) - end) - vim.cmd.redrawtabline() -end - -Dart.state = M.state -Dart.mark = M.mark - -Dart.jump = function(mark) - local m = M.state_from_mark(mark) - if m and m.bufnr then - vim.api.nvim_set_current_buf(m.bufnr) - end -end - -Dart.pick = function() - local prompt = { 'Jump to buffer:' } - for _, mark in ipairs(M.state) do - local name = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(mark.bufnr), ':t') - table.insert(prompt, string.format(' %s → %s', mark.mark, name)) - end - - local selected = vim.fn.input(table.concat(prompt, '\n') .. '\n> ') - Dart.jump(selected) -end - -Dart.next = function() - M.cycle_tabline(1) -end - -Dart.prev = function() - M.cycle_tabline(-1) -end - -Dart.gen_tabline = function() - local items = {} - local center = 1 - local cur = vim.api.nvim_get_current_buf() - local columns = vim.o.columns - - for i, m in ipairs(M.state) do - if M.should_show(m.bufnr) then - table.insert(items, M.gen_tabline_item(m)) - if m.bufnr == cur then - center = i - end - else - M.del_by_bufnr(m.bufnr) - end - end - - local function width(tabline) - return vim.api.nvim_strwidth(table.concat( - vim.tbl_map(function(m) - return string.format(' %s %s ', m.label, m.content) - end, tabline), - '' - )) + 3 -- save room for trunc - end - - local result = { items[center] } - local left = center - 1 - local right = center + 1 - local trunc_left = false - local trunc_right = false - - while left >= 1 or right <= #items do - local added = false - - if left >= 1 then - table.insert(result, 1, items[left]) - if width(result) >= columns then - table.remove(result, 1) - trunc_left = true - else - left = left - 1 - added = true - end - end - if right <= #items then - table.insert(result, items[right]) - if width(result) >= columns then - table.remove(result) - trunc_right = true - else - right = right + 1 - added = true - end - end - if not added then - break - end - end - - return (trunc_left and '%#DartVisibleLabel# < ' or '') - .. table.concat(vim.tbl_map(M.format_tabline_item, result), '') - .. (trunc_right and '%#DartVisibleLabel# > ' or '') - .. '%X%#DartFill#' - .. M.gen_tabpage() -end - -return Dart diff --git a/nvim/lua/plugins/lib/session_jj.lua b/nvim/lua/plugins/lib/session_jj.lua index ee9bf6a..cf7d400 100644 --- a/nvim/lua/plugins/lib/session_jj.lua +++ b/nvim/lua/plugins/lib/session_jj.lua @@ -9,18 +9,18 @@ M.get_id = function() end local result = vim - .system({ - 'jj', - 'log', - '-r', - 'latest(heads(::@ & bookmarks()))', - '--template', - 'bookmarks', - '--no-pager', - '--no-graph', - }) - :wait() - local branch = vim.trim(string.gsub(result.stdout, '[\n*]', '')) -- trim newlines and unpushed indicator + .system({ + 'jj', + 'log', + '-r', + 'latest(heads(::@ & bookmarks()))', + '--template', + 'bookmarks', + '--no-pager', + '--no-graph', + }) + :wait() + local branch = vim.trim(string.gsub(result.stdout, '[\n*]', '')) -- trim newlines and unpushed indicator local root = vim.trim(string.gsub(jj_root.stdout, '\n', '')) local id = string.gsub(string.format('jj:%s:%s', root, branch), '[./]', '-') -- slugify return id @@ -49,12 +49,10 @@ M.load = function() if c == 'Yes' then -- load session (buffers, etc) as well as shada (marks) sessions.read(id) - vim.cmd('rshada') vim.notify('loaded jj session: ' .. id) end end) else - vim.cmd('wshada') -- create session if it did not exist sessions.write(id) end end diff --git a/nvim/lua/plugins/lib/snacks.lua b/nvim/lua/plugins/lib/snacks.lua index 4791c61..1bdd791 100644 --- a/nvim/lua/plugins/lib/snacks.lua +++ b/nvim/lua/plugins/lib/snacks.lua @@ -1,29 +1,4 @@ M = {} -M.marks = function() - Snacks.picker.marks { - ['local'] = false, - on_show = function() - vim.cmd.delmarks { args = { '0-9' } } - vim.cmd.delmarks { args = { '"' } } - end, - actions = { - markdel = function(picker) - for _, item in ipairs(picker:selected { fallback = true }) do - vim.cmd.delmarks { args = { item.label } } - end - vim.cmd('wshada') - picker.list:set_selected() - picker.list:set_target() - picker:find() - end, - }, - win = { - input = { - keys = { [''] = { 'markdel', mode = { 'n', 'i' } } }, - }, - }, - } -end M.diagnostics = function(filter) Snacks.picker.diagnostics { filter = filter, diff --git a/nvim/lua/plugins/mini.lua b/nvim/lua/plugins/mini.lua index 44503e6..756b1ae 100644 --- a/nvim/lua/plugins/mini.lua +++ b/nvim/lua/plugins/mini.lua @@ -102,6 +102,18 @@ return { require('mini.sessions').setup { file = '', autowrite = true, + hooks = { + pre = { + read = function(session) -- load Dart state *before* buffers are loaded + vim.cmd('rshada') + Dart.read_session(session['name']) + end, + write = function(session) + vim.cmd('wshada') + Dart.write_session(session['name']) + end, + }, + }, verbose = { write = false, }, @@ -126,12 +138,11 @@ return { markdown = true, } - local jj = require('plugins.lib.minidiff_jj') local diff = require('mini.diff') diff.setup { options = { wrap_goto = true }, source = { - jj.gen_source(), + require('plugins.lib.minidiff_jj').gen_source(), diff.gen_source.git(), }, } @@ -185,7 +196,9 @@ return { vim.keymap.set('n', '`', function() local cur_entry_path = MiniFiles.get_fs_entry().path local cur_directory = vim.fs.dirname(cur_entry_path) - vim.fn.chdir(cur_directory) + if cur_directory ~= '' then + vim.fn.chdir(cur_directory) + end end, { buffer = args.data.buf_id }) end, }) diff --git a/nvim/lua/plugins/misc.lua b/nvim/lua/plugins/misc.lua index 080ec7d..8313182 100644 --- a/nvim/lua/plugins/misc.lua +++ b/nvim/lua/plugins/misc.lua @@ -1,4 +1,9 @@ return { + { + 'iofq/dart.nvim', + event = 'VeryLazy', + config = true, + }, { 'jinh0/eyeliner.nvim', event = 'VeryLazy', diff --git a/nvim/lua/plugins/snacks.lua b/nvim/lua/plugins/snacks.lua index 5ce8578..346fc95 100644 --- a/nvim/lua/plugins/snacks.lua +++ b/nvim/lua/plugins/snacks.lua @@ -27,6 +27,7 @@ return { matcher = { frecency = true, history_bonus = true, + cwd_bonus = true, }, layout = 'ivy_split', sources = { @@ -109,13 +110,6 @@ return { end, desc = 'snacks explorer', }, - { - 'fg', - function() - Snacks.picker.git_files() - end, - desc = 'Fuzzy find git files', - }, { 'ff', function() @@ -186,13 +180,6 @@ return { end, desc = 'pick treesitter nodes', }, - { - 'fm', - function() - require('plugins.lib.snacks').marks() - end, - desc = 'pick global marks', - }, { 'jf', function()