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 845f50d..15c4ba2 100644 --- a/flake.lock +++ b/flake.lock @@ -291,84 +291,13 @@ "type": "github" } }, - "nixpkgs_3": { - "locked": { - "lastModified": 1767379071, - "narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "fb7944c166a3b630f177938e478f0378e64ce108", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nvim-treesitter": { - "flake": false, - "locked": { - "lastModified": 1767460514, - "narHash": "sha256-LX0rKTZ56Rp0uQfIXZ2JrcWxuCA/t8NJjK05aKiT0Yw=", - "owner": "nvim-treesitter", - "repo": "nvim-treesitter", - "rev": "300b906a9514d5e0ce02911d371445382fe35a31", - "type": "github" - }, - "original": { - "owner": "nvim-treesitter", - "ref": "main", - "repo": "nvim-treesitter", - "type": "github" - } - }, - "nvim-treesitter-main": { - "inputs": { - "nixpkgs": "nixpkgs_3", - "nvim-treesitter": "nvim-treesitter", - "nvim-treesitter-textobjects": "nvim-treesitter-textobjects" - }, - "locked": { - "lastModified": 1767660784, - "narHash": "sha256-ej7y4nhiJNFE/HcZSPTEIrU6/WQmkMJo+bVQfgT3abE=", - "owner": "iofq", - "repo": "nvim-treesitter-main", - "rev": "d82b04e1a05f88ed88c6221672ca0636dc8d6ef7", - "type": "github" - }, - "original": { - "owner": "iofq", - "repo": "nvim-treesitter-main", - "type": "github" - } - }, - "nvim-treesitter-textobjects": { - "flake": false, - "locked": { - "lastModified": 1767434017, - "narHash": "sha256-5VeIAW09my+4fqXbzVG7RnLXrjpXAk/g2vd7RbhNws8=", - "owner": "nvim-treesitter", - "repo": "nvim-treesitter-textobjects", - "rev": "28a3494c075ef0f353314f627546537e43c09592", - "type": "github" - }, - "original": { - "owner": "nvim-treesitter", - "ref": "main", - "repo": "nvim-treesitter-textobjects", - "type": "github" - } - }, "root": { "inputs": { "dart": "dart", "flake-utils": "flake-utils_2", "gen-luarc": "gen-luarc", "neovim-nightly-overlay": "neovim-nightly-overlay", - "nixpkgs": "nixpkgs_2", - "nvim-treesitter-main": "nvim-treesitter-main" + "nixpkgs": "nixpkgs_2" } }, "systems": { diff --git a/flake.nix b/flake.nix index 2798e5f..5312b1a 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "Neovim derivation"; inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:NixOS/nixpkgs/master"; flake-utils.url = "github:numtide/flake-utils"; neovim-nightly-overlay = { url = "github:nix-community/neovim-nightly-overlay"; @@ -15,9 +15,6 @@ dart = { url = "github:iofq/dart.nvim"; }; - nvim-treesitter-main = { - url = "github:iofq/nvim-treesitter-main"; - }; }; outputs = inputs@{ @@ -32,17 +29,6 @@ neovim-overlay = import ./nix/neovim-overlay.nix { inherit inputs; }; finalOverlays = [ inputs.neovim-nightly-overlay.overlays.default - inputs.nvim-treesitter-main.overlays.default - (final: prev: { - vimPlugins = prev.vimPlugins.extend ( - f: p: { - nvim-treesitter = p.nvim-treesitter.withAllGrammars; - nvim-treesitter-textobjects = p.nvim-treesitter-textobjects.overrideAttrs { - dependencies = [ f.nvim-treesitter ]; - }; - } - ); - }) neovim-overlay ]; in @@ -73,6 +59,7 @@ packages = rec { default = nvim; nvim = pkgs.nvim-pkg; + nvim-min = pkgs.nvim-min-pkg; }; devShells = { default = shell; diff --git a/nix/neovim-overlay.nix b/nix/neovim-overlay.nix index efc75a1..6cf2234 100644 --- a/nix/neovim-overlay.nix +++ b/nix/neovim-overlay.nix @@ -14,21 +14,43 @@ let nvim-autopairs nvim-lint nvim-lspconfig - nvim-treesitter + nvim-treesitter.withAllGrammars nvim-treesitter-textobjects quicker-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..aae14fa 100644 --- a/nvim/after/lua/iofq/snacks_jj.lua +++ b/nvim/after/lua/iofq/snacks_jj.lua @@ -62,21 +62,6 @@ function M.file_history(filename) 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' @@ -100,7 +85,6 @@ function M.file_history(filename) 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..81cb335 100644 --- a/nvim/after/plugin/autocmd.lua +++ b/nvim/after/plugin/autocmd.lua @@ -48,7 +48,7 @@ cmd('FileType', { 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 @@ -98,45 +98,6 @@ cmd('BufWinEnter', { 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, }) diff --git a/nvim/after/plugin/mini.lua b/nvim/after/plugin/mini.lua index 76b5fe9..30d5984 100644 --- a/nvim/after/plugin/mini.lua +++ b/nvim/after/plugin/mini.lua @@ -9,8 +9,6 @@ vim.schedule(function() ai.setup { n_lines = 300, custom_textobjects = { - i = require('mini.extra').gen_ai_spec.indent(), - b = require('mini.extra').gen_ai_spec.buffer(), a = ai.gen_spec.treesitter { a = '@parameter.outer', i = '@parameter.inner' }, f = ai.gen_spec.treesitter { a = '@function.outer', i = '@function.inner' }, }, @@ -18,7 +16,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..abd3c45 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 }, @@ -71,6 +76,7 @@ vim.schedule(function() json = { 'jq' }, lua = { 'stylua' }, python = { 'ruff' }, + nix = { 'nixfmt' }, fish = { 'fish_indent' }, ['*'] = { 'trim_whitespace' }, }, @@ -93,14 +99,11 @@ vim.schedule(function() require('lint').linters_by_ft = { docker = { 'hadolint' }, - yaml = { 'yamllint' }, sh = { 'shellcheck' }, go = { 'golangcilint' }, - ruby = { 'rubocop' }, fish = { 'fish' }, bash = { 'bash' }, nix = { 'nix' }, - php = { 'php' }, } vim.api.nvim_create_autocmd({ 'BufWritePost' }, { callback = function() @@ -116,7 +119,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',