diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4c6ddd7..36b3551 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - package_name: ["nvim"] + package_name: ["nvim-min"] steps: - uses: actions/checkout@v3 - uses: DeterminateSystems/nix-installer-action@main diff --git a/README.md b/README.md index 223d62a..29a9c20 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ## Usage Try it out! ```bash -nix run "github:iofq/nvim.nix" #nvim +nix run "github:iofq/nvim.nix" #nvim-min ``` Or use in a flake: diff --git a/flake.lock b/flake.lock index b868c12..a9853c4 100644 --- a/flake.lock +++ b/flake.lock @@ -6,11 +6,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1762016984, - "narHash": "sha256-ADZ2b2Oz+MOSjdKKCcQX9KmlhtmvVlZFEJr0HigWsOY=", + "lastModified": 1761202123, + "narHash": "sha256-ULrZW4b8SKRvPpJPt8/jkqqc/blQiIWUriNWVXA33so=", "owner": "iofq", "repo": "dart.nvim", - "rev": "8822aabbfef95eda2b22a8f7ee08912c762ef941", + "rev": "71421e7ef5aee8267e24dc562fdd07a83bda192e", "type": "github" }, "original": { @@ -61,11 +61,11 @@ ] }, "locked": { - "lastModified": 1762980239, - "narHash": "sha256-8oNVE8TrD19ulHinjaqONf9QWCKK+w4url56cdStMpM=", + "lastModified": 1760948891, + "narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "52a2caecc898d0b46b2b905f058ccc5081f842da", + "rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04", "type": "github" }, "original": { @@ -203,11 +203,11 @@ ] }, "locked": { - "lastModified": 1763078664, - "narHash": "sha256-HDuT9S50/3+2blDIL4Y5qX8g5bA5FtpzP9lyagmyNq4=", + "lastModified": 1761955453, + "narHash": "sha256-hQomzSbBiFsDXDMCjHmWXrAMgFlQlCiy7T37Eq7RvT4=", "owner": "nix-community", "repo": "neovim-nightly-overlay", - "rev": "994eb1828abe40f256e27ff38663b4f3f819d4cb", + "rev": "c58076a0d9b24bf77fef4fa2e7c43950914edf71", "type": "github" }, "original": { @@ -219,11 +219,11 @@ "neovim-src": { "flake": false, "locked": { - "lastModified": 1763078375, - "narHash": "sha256-oGwmSPl+FA0y2uPEGkkavr5sxLkpHR6+Cio8eZ8OtPo=", + "lastModified": 1761949631, + "narHash": "sha256-YgMQaFD4L9+PEYSkUlBkqaKt+ALPHiVgzgRbjOSW4tE=", "owner": "neovim", "repo": "neovim", - "rev": "d017f3c9a0b745e0c57feb8c92dcc852948f7301", + "rev": "1fddd74da7428e38b79ccb817dbd6952ff1d8ac6", "type": "github" }, "original": { @@ -277,11 +277,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1763114379, - "narHash": "sha256-48vHwFWqC7oUMJqcq3xCB84FBHHjvO3rNL18si1IRvo=", + "lastModified": 1761991861, + "narHash": "sha256-rccG7eGGelDsu4eXPi2vdBR1pddZFZAd/JlB3NLjgy4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "fa972b1d29bb165bebc538c227a6e57f33631789", + "rev": "0e65d6bc462e57fe6a76a49d4eea909ba08b1dc1", "type": "github" }, "original": { @@ -293,11 +293,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1762363567, - "narHash": "sha256-YRqMDEtSMbitIMj+JLpheSz0pwEr0Rmy5mC7myl17xs=", + "lastModified": 1761114652, + "narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=", "owner": "nixos", "repo": "nixpkgs", - "rev": "ae814fd3904b621d8ab97418f1d0f2eb0d3716f4", + "rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c", "type": "github" }, "original": { @@ -310,11 +310,11 @@ "nvim-treesitter": { "flake": false, "locked": { - "lastModified": 1762599340, - "narHash": "sha256-hXs9TdytYtBeXW6nx9QZiQcqsuj1uLuZMf8kclaScQ8=", + "lastModified": 1761385693, + "narHash": "sha256-/SGikTPEMxI7rcfGvuJlNZs73/wZiQx14QX9xlfsTv0=", "owner": "nvim-treesitter", "repo": "nvim-treesitter", - "rev": "d97d226cfd4c00af000b3b8529261352677fc6a8", + "rev": "98fe644cb3b5ba390d1bc3f89299f93c70020803", "type": "github" }, "original": { @@ -331,11 +331,11 @@ "nvim-treesitter-textobjects": "nvim-treesitter-textobjects" }, "locked": { - "lastModified": 1762704339, - "narHash": "sha256-hRGD+CE04Z1qAJAaiJs6o+blS0WUEqfVS/5cqA0NcDI=", + "lastModified": 1761496664, + "narHash": "sha256-xTQUiJu0jJNSEHEv4La1HbaFokup0eWr67Kqf/wDENA=", "owner": "iofq", "repo": "nvim-treesitter-main", - "rev": "69e9583fe72fa2dbffcb740563a9cc48396e3f75", + "rev": "834d66648bb7a96a2ad11d53a33f2d9b13766447", "type": "github" }, "original": { @@ -347,11 +347,11 @@ "nvim-treesitter-textobjects": { "flake": false, "locked": { - "lastModified": 1762622273, - "narHash": "sha256-gzeT2gtmFaXhRSC13mijH6tlk/eWRZaUrGiEpKoAorA=", + "lastModified": 1756368113, + "narHash": "sha256-+KmOpRi4JAqm6UqYdtk80jwFrJhLCs0lZM/Liofq0R4=", "owner": "nvim-treesitter", "repo": "nvim-treesitter-textobjects", - "rev": "7024f8687b060dd9a425bde1fa8621c896a38138", + "rev": "1b2d85d3de6114c4bcea89ffb2cd1ce9e3a19931", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index e5890fa..a9cc1ad 100644 --- a/flake.nix +++ b/flake.nix @@ -73,6 +73,7 @@ packages = rec { default = nvim; nvim = pkgs.nvim-pkg; + nvim-min = pkgs.nvim-min-pkg; }; devShells = { default = shell; diff --git a/new b/new deleted file mode 100644 index fab9518..0000000 --- a/new +++ /dev/null @@ -1 +0,0 @@ -print('kjsnadf') diff --git a/nix/neovim-overlay.nix b/nix/neovim-overlay.nix index efc75a1..430c345 100644 --- a/nix/neovim-overlay.nix +++ b/nix/neovim-overlay.nix @@ -17,18 +17,41 @@ let nvim-treesitter nvim-treesitter-textobjects quicker-nvim + refactoring-nvim render-markdown-nvim snacks-nvim ]; - packages = with prev; [ + basePackages = with prev; [ ripgrep fd ]; + # Extra packages that should be included on nixos but don't need to be bundled + extraPackages = with prev; [ + # linters + yamllint + jq + hadolint + nixfmt + shellcheck + golangci-lint + + # LSPs + gopls + lua-language-server + nixd + basedpyright + ]; in { nvim-pkg = mkNeovim { - inherit plugins packages; + inherit plugins; + packages = basePackages ++ extraPackages; + }; + + nvim-min-pkg = mkNeovim { + inherit plugins; + packages = basePackages; }; nvim-luarc-json = final.mk-luarc-json { diff --git a/nvim/after/lua/iofq/snacks_jj.lua b/nvim/after/lua/iofq/snacks_jj.lua index a9c78fe..639ecfd 100644 --- a/nvim/after/lua/iofq/snacks_jj.lua +++ b/nvim/after/lua/iofq/snacks_jj.lua @@ -49,58 +49,4 @@ function M.status() } end -function M.file_history(filename) - local function preview(ctx) - if ctx.item.rev then - Snacks.picker.preview.cmd( - { 'jj', 'log', '--ignore-working-copy', '--git', '-r', ctx.item.rev, '-p', filename }, - ctx - ) - else - ctx.preview:reset() - return 'No preview available.' - end - end - - local function confirm(picker, item) - picker:close() - local cmd = string.format('jj show --git -r %s', item.rev) - local out = vim.fn.systemlist(cmd) - - local bufnr = vim.api.nvim_create_buf(false, true) - vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, out) - vim.bo[bufnr].bufhidden = 'wipe' - vim.bo[bufnr].buftype = 'nofile' - vim.bo[bufnr].filetype = 'diff' - vim.keymap.set('n', 'q', vim.cmd.bdelete, { buffer = bufnr, noremap = true }) - - vim.api.nvim_set_current_buf(bufnr) - end - - local function get_history(f) - local status_raw = vim.fn.system( - 'jj log --ignore-working-copy --no-graph' - .. ' --template \'if(root, format_root_commit(self), label(if(current_working_copy, "working_copy"), concat(separate(" ", self.change_id().shortest(8), self.bookmarks()), " | ", if(empty, label("empty", "(empty)")), if(description, description.first_line(), label(if(empty, "empty"), description_placeholder),),) ++ "\n",),)\'' - .. ' -- ' - .. f - ) - local lines = {} - for line in status_raw:gmatch('[^\r\n]+') do - local rev = string.match(line, '(%w+)%s.*') - table.insert(lines, { - text = line, - rev = rev, - }) - end - return lines - end - - Snacks.picker.pick { - format = 'text', - title = 'jj file history for ' .. filename, - items = get_history(filename), - preview = preview, - confirm = confirm, - } -end return M diff --git a/nvim/after/plugin/autocmd.lua b/nvim/after/plugin/autocmd.lua index 7e8e994..e22f2b7 100644 --- a/nvim/after/plugin/autocmd.lua +++ b/nvim/after/plugin/autocmd.lua @@ -30,7 +30,7 @@ cmd({ 'FocusGained', 'TermClose', 'TermLeave' }, { }) -- Configure difftool buffers -cmd('FileType', { +vim.api.nvim_create_autocmd('FileType', { pattern = 'qf', group = vim.api.nvim_create_augroup('difftool', { clear = true }), callback = function(event) @@ -41,14 +41,14 @@ cmd('FileType', { local qf = vim.fn.getqflist() local entry = qf[1] - if not entry or not entry.user_data or not entry.user_data.diff then + if not entry or not entry.user_data.diff then return nil end local ns = vim.api.nvim_create_namespace('nvim.difftool.hl') vim.api.nvim_buf_clear_namespace(event.buf, ns, 0, -1) for i, item in ipairs(qf) do - local path = vim.fn.fnamemodify(item.user_data.right, ':.') + local path = vim.fn.fnamemodify(item.user_data.right, ':t') local hl = 'Added' if exec('git diff --quiet -- %s', path) ~= 0 @@ -75,71 +75,6 @@ cmd('FileType', { end, }) --- open conflicts in qflist -cmd('BufWinEnter', { - callback = function(event) - if not vim.wo.diff then - return - end - - local items = {} - while true do - local found = vim.fn.search('^<<<<<<<', 'W') - if found == 0 then - break - end - local line = vim.api.nvim_buf_get_lines(event.buf, found - 1, found, false)[1] - table.insert(items, { bufnr = event.buf, lnum = found, text = line }) - end - - if #items > 1 then - vim.fn.setqflist(items, 'r') - vim.schedule(function() - vim.cmd(string.format('%dcopen', math.min(10, #items))) - end) - end - - local function get_hunks(bufnr) - local conf_start = vim.fn.search('^<<<<<<<', 'bc') - local base_start = vim.fn.search('^|||||||', 'W') - local base_end = vim.fn.search('^=======', 'W') - local conf_end = vim.fn.search('^>>>>>>>', 'W') - - local left = vim.api.nvim_buf_get_lines(bufnr, conf_start, base_start - 1, false) - local right = vim.api.nvim_buf_get_lines(bufnr, base_end, conf_end - 1, false) - - return { - start = conf_start, - stop = conf_end, - left = left, - right = right, - } - end - - local function apply_hunk(hunks, first) - local result = {} - if first == -1 then -- left first - vim.list_extend(result, hunks.left) - vim.list_extend(result, hunks.right) - else - vim.list_extend(result, hunks.right) - vim.list_extend(result, hunks.left) - end - - -- apply hunk in place - vim.api.nvim_buf_set_lines(0, hunks.start - 1, hunks.stop, false, result) - end - - -- "combine" mappings ala vscode's merge editor - vim.keymap.set('n', 'dl', function() - apply_hunk(get_hunks(event.buf), -1) - end, { buffer = event.buf }) - vim.keymap.set('n', 'dr', function() - apply_hunk(get_hunks(event.buf), 1) - end, { buffer = event.buf }) - end, -}) - -- Init treesitter cmd('FileType', { group = vim.api.nvim_create_augroup('treesitter', { clear = true }), diff --git a/nvim/after/plugin/mini.lua b/nvim/after/plugin/mini.lua index 76b5fe9..c60ec00 100644 --- a/nvim/after/plugin/mini.lua +++ b/nvim/after/plugin/mini.lua @@ -18,7 +18,9 @@ vim.schedule(function() require('mini.git').setup() map('n', 'gb', 'Git blame -- %') - map('n', 'go', MiniGit.show_at_cursor) + map('n', 'go', function() + return MiniGit.show_at_cursor() + end) local jump = require('mini.jump2d') jump.setup { diff --git a/nvim/after/plugin/plugins.lua b/nvim/after/plugin/plugins.lua index 21c9339..58dae3e 100644 --- a/nvim/after/plugin/plugins.lua +++ b/nvim/after/plugin/plugins.lua @@ -3,7 +3,12 @@ local map = vim.keymap.set require('mini.basics').setup { mappings = { windows = true } } require('mini.icons').setup() -require('dart').setup {} +require('dart').setup { + tabline = { + icons = false, + label_marked_fg = 'cyan', + }, +} require('snacks').setup { bigfile = { enabled = true }, @@ -51,15 +56,19 @@ map('n', 'f.', Snacks.picker.resume) map('n', 'fb', Snacks.picker.buffers) map('n', 'fq', Snacks.picker.qflist) map('n', 'jf', require('iofq.snacks_jj').status) -map('n', 'jh', function() - require('iofq.snacks_jj').file_history(vim.api.nvim_buf_get_name(0)) -end) vim.schedule(function() require('nvim-treesitter').setup() require('nvim-treesitter-textobjects').setup() + require('render-markdown').setup() require('nvim-autopairs').setup() + require('refactoring').setup() + map('n', 'rr', require('refactoring').select_refactor) + map('n', 'rv', function() + require('refactoring').refactor('Inline Variable') + end) + require('quicker').setup() map('n', 'qf', function() require('quicker').toggle { max_height = 20 } @@ -71,6 +80,7 @@ vim.schedule(function() json = { 'jq' }, lua = { 'stylua' }, python = { 'ruff' }, + nix = { 'nixfmt' }, fish = { 'fish_indent' }, ['*'] = { 'trim_whitespace' }, }, @@ -116,7 +126,7 @@ vim.schedule(function() sources = { default = { 'lsp', 'path', 'snippets', 'ripgrep', 'buffer' }, providers = { - lsp = { fallbacks = {}, async = true }, -- include buffer even when LSP is active + lsp = { fallbacks = {} }, -- include buffer even when LSP is active path = { opts = { get_cwd = vim.fn.getcwd } }, -- use nvim pwd instead of current file pwd ripgrep = { module = 'blink-ripgrep',