From f05549b86dd28dcd366ef21f5fe3f786e6b1ac93 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 11:13:50 +1000 Subject: [PATCH 01/37] flake: remove nixvim nixpkgs follows, track nixos-unstable --- flake.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 0e7b50f7..05350b2b 100644 --- a/flake.nix +++ b/flake.nix @@ -2,9 +2,8 @@ description = "Neve is a Neovim configuration built with Nixvim, which allows you to use Nix language to manage Neovim plugins/options"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/d7f52a7a640bc54c7bb414cca603835bf8dd4b10"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixvim.url = "github:nix-community/nixvim"; - nixvim.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; }; From 5dca1700a9e5fc6b0b022d7110166dde02a5cdb8 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 11:17:45 +1000 Subject: [PATCH 02/37] flake: update lockfile to latest upstreams --- flake.lock | 119 +++++++++++------------------------------------------ 1 file changed, 24 insertions(+), 95 deletions(-) diff --git a/flake.lock b/flake.lock index 1a8c88a6..a4d0ddaa 100644 --- a/flake.lock +++ b/flake.lock @@ -8,11 +8,11 @@ ] }, "locked": { - "lastModified": 1759362264, - "narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=", + "lastModified": 1778716662, + "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "758cf7296bee11f1706a574c77d072b8a7baa881", + "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", "type": "github" }, "original": { @@ -39,83 +39,50 @@ "type": "github" } }, - "flake-utils_2": { - "inputs": { - "systems": "systems_2" - }, - "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "ixx": { - "inputs": { - "flake-utils": [ - "nixvim", - "nuschtosSearch", - "flake-utils" - ], - "nixpkgs": [ - "nixvim", - "nuschtosSearch", - "nixpkgs" - ] - }, + "nixpkgs": { "locked": { - "lastModified": 1754860581, - "narHash": "sha256-EM0IE63OHxXCOpDHXaTyHIOk2cNvMCGPqLt/IdtVxgk=", - "owner": "NuschtOS", - "repo": "ixx", - "rev": "babfe85a876162c4acc9ab6fb4483df88fa1f281", + "lastModified": 1778869304, + "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", "type": "github" }, "original": { - "owner": "NuschtOS", - "ref": "v0.1.1", - "repo": "ixx", + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", "type": "github" } }, - "nixpkgs": { + "nixpkgs_2": { "locked": { - "lastModified": 1759632233, - "narHash": "sha256-krgZxGAIIIKFJS+UB0l8do3sYUDWJc75M72tepmVMzE=", - "owner": "nixos", + "lastModified": 1778869304, + "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "d7f52a7a640bc54c7bb414cca603835bf8dd4b10", + "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", - "rev": "d7f52a7a640bc54c7bb414cca603835bf8dd4b10", "type": "github" } }, "nixvim": { "inputs": { "flake-parts": "flake-parts", - "nixpkgs": [ - "nixpkgs" - ], - "nuschtosSearch": "nuschtosSearch", - "systems": "systems_3" + "nixpkgs": "nixpkgs_2", + "systems": "systems_2" }, "locked": { - "lastModified": 1760861672, - "narHash": "sha256-TNBuBgesZcUO76dOi+xGFraT30umxQyfyogrWqiOJZE=", + "lastModified": 1779142999, + "narHash": "sha256-KcXaaS7489oPtzW51a7bKSsMeeF4yDjs9GWQ4qA9i4k=", "owner": "nix-community", "repo": "nixvim", - "rev": "b4852e4d359b89241497ee3cb29eaa83ef1510d4", + "rev": "9b28a7e6e3e6f61b114a550941abfc9fce0645cc", "type": "github" }, "original": { @@ -124,29 +91,6 @@ "type": "github" } }, - "nuschtosSearch": { - "inputs": { - "flake-utils": "flake-utils_2", - "ixx": "ixx", - "nixpkgs": [ - "nixvim", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1758662783, - "narHash": "sha256-igrxT+/MnmcftPOHEb+XDwAMq3Xg1Xy7kVYQaHhPlAg=", - "owner": "NuschtOS", - "repo": "search", - "rev": "7d4c0fc4ffe3bd64e5630417162e9e04e64b27a4", - "type": "github" - }, - "original": { - "owner": "NuschtOS", - "repo": "search", - "type": "github" - } - }, "root": { "inputs": { "flake-utils": "flake-utils", @@ -183,21 +127,6 @@ "repo": "default", "type": "github" } - }, - "systems_3": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", From 786b58836c55bf1873cb8a699dc70d287b114d9f Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 11:22:50 +1000 Subject: [PATCH 03/37] fix: update copilot-lua options to snake_case for NixVim compat --- config/completion/copilot.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/completion/copilot.nix b/config/completion/copilot.nix index 6dce903e..fb39ba86 100644 --- a/config/completion/copilot.nix +++ b/config/completion/copilot.nix @@ -45,8 +45,8 @@ cvs = false; "." = false; }; - copilotNodeCommand = "node"; # Node.js version must be > 18.x - serverOptsOverrides = { }; + copilot_node_command = "node"; # Node.js version must be > 18.x + server_opts_overrides = { }; }; }; } From e88e66c85df5c3266604967202d78ef9e4f7d000 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 11:25:11 +1000 Subject: [PATCH 04/37] fix: remove copilot_node_command, use NixVim defaults --- config/completion/copilot.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/completion/copilot.nix b/config/completion/copilot.nix index fb39ba86..21076f45 100644 --- a/config/completion/copilot.nix +++ b/config/completion/copilot.nix @@ -45,8 +45,7 @@ cvs = false; "." = false; }; - copilot_node_command = "node"; # Node.js version must be > 18.x - server_opts_overrides = { }; + # copilot_node_command and server_opts_overrides use NixVim defaults ("node" and {}) }; }; } From 092030d546e9493a24c5ff2be41390865517b232 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 11:59:50 +1000 Subject: [PATCH 05/37] fix(nixvim): update plugin options for nixvim flake update - copilot-lua: move options under settings and convert to snake_case - treesitter-textobjects: move options under settings and convert to snake_case - alpha: move layout under settings --- config/completion/copilot.nix | 72 ++--- config/languages/treesitter-nvim.nix | 84 +++--- config/ui/alpha.nix | 384 ++++++++++++++------------- 3 files changed, 273 insertions(+), 267 deletions(-) diff --git a/config/completion/copilot.nix b/config/completion/copilot.nix index 21076f45..00d6a63d 100644 --- a/config/completion/copilot.nix +++ b/config/completion/copilot.nix @@ -6,45 +6,47 @@ config = lib.mkIf config.copilot.enable { plugins.copilot-lua = { enable = true; - panel = { - enabled = false; - autoRefresh = true; - keymap = { - jumpPrev = "[["; - jumpNext = "]]"; - accept = ""; - refresh = "gr"; - open = ""; + settings = { + panel = { + enabled = false; + auto_refresh = true; + keymap = { + jump_prev = "[["; + jump_next = "]]"; + accept = ""; + refresh = "gr"; + open = ""; + }; + layout = { + position = "bottom"; # | top | left | right + ratio = 0.4; + }; }; - layout = { - position = "bottom"; # | top | left | right - ratio = 0.4; + suggestion = { + enabled = false; + auto_trigger = true; + debounce = 75; + keymap = { + accept = ""; + accept_word = false; + accept_line = false; + next = ""; + prev = ""; + dismiss = ""; + }; }; - }; - suggestion = { - enabled = false; - autoTrigger = true; - debounce = 75; - keymap = { - accept = ""; - acceptWord = false; - acceptLine = false; - next = ""; - prev = ""; - dismiss = ""; + filetypes = { + yaml = false; + markdown = false; + help = false; + gitcommit = false; + gitrebase = false; + hgcommit = false; + svn = false; + cvs = false; + "." = false; }; }; - filetypes = { - yaml = false; - markdown = false; - help = false; - gitcommit = false; - gitrebase = false; - hgcommit = false; - svn = false; - cvs = false; - "." = false; - }; # copilot_node_command and server_opts_overrides use NixVim defaults ("node" and {}) }; }; diff --git a/config/languages/treesitter-nvim.nix b/config/languages/treesitter-nvim.nix index 77412b15..2a02a670 100644 --- a/config/languages/treesitter-nvim.nix +++ b/config/languages/treesitter-nvim.nix @@ -61,49 +61,51 @@ plugins.treesitter-textobjects = { enable = true; - select = { - enable = true; - lookahead = true; - keymaps = { - "aa" = "@parameter.outer"; - "ia" = "@parameter.inner"; - "af" = "@function.outer"; - "if" = "@function.inner"; - "ac" = "@class.outer"; - "ic" = "@class.inner"; - "ii" = "@conditional.inner"; - "ai" = "@conditional.outer"; - "il" = "@loop.inner"; - "al" = "@loop.outer"; - "at" = "@comment.outer"; - }; - }; - move = { - enable = true; - gotoNextStart = { - "]m" = "@function.outer"; - "]]" = "@class.outer"; - }; - gotoNextEnd = { - "]M" = "@function.outer"; - "][" = "@class.outer"; - }; - gotoPreviousStart = { - "[m" = "@function.outer"; - "[[" = "@class.outer"; - }; - gotoPreviousEnd = { - "[M" = "@function.outer"; - "[]" = "@class.outer"; + settings = { + select = { + enable = true; + lookahead = true; + keymaps = { + "aa" = "@parameter.outer"; + "ia" = "@parameter.inner"; + "af" = "@function.outer"; + "if" = "@function.inner"; + "ac" = "@class.outer"; + "ic" = "@class.inner"; + "ii" = "@conditional.inner"; + "ai" = "@conditional.outer"; + "il" = "@loop.inner"; + "al" = "@loop.outer"; + "at" = "@comment.outer"; + }; }; - }; - swap = { - enable = true; - swapNext = { - "a" = "@parameters.inner"; + move = { + enable = true; + goto_next_start = { + "]m" = "@function.outer"; + "]]" = "@class.outer"; + }; + goto_next_end = { + "]M" = "@function.outer"; + "][" = "@class.outer"; + }; + goto_previous_start = { + "[m" = "@function.outer"; + "[[" = "@class.outer"; + }; + goto_previous_end = { + "[M" = "@function.outer"; + "[]" = "@class.outer"; + }; }; - swapPrevious = { - "A" = "@parameter.outer"; + swap = { + enable = true; + swap_next = { + "a" = "@parameters.inner"; + }; + swap_previous = { + "A" = "@parameter.outer"; + }; }; }; }; diff --git a/config/ui/alpha.nix b/config/ui/alpha.nix index 97d57516..15dcf3e9 100644 --- a/config/ui/alpha.nix +++ b/config/ui/alpha.nix @@ -7,205 +7,207 @@ plugins.alpha = { enable = true; theme = null; - layout = - let - padding = val: { - type = "padding"; - inherit val; - }; - in - [ - (padding 4) - { - opts = { - hl = "AlphaHeader"; - position = "center"; + settings = { + layout = + let + padding = val: { + type = "padding"; + inherit val; }; - type = "text"; - val = [ - " ███▄ █ ▓█████ ██▒ █▓▓█████ " - " ██ ▀█ █ ▓█ ▀▓██░ █▒▓█ ▀ " - " ▓██ ▀█ ██▒▒███ ▓██ █▒░▒███ " - " ▓██▒ ▐▌██▒▒▓█ ▄ ▒██ █░░▒▓█ ▄ " - " ▒██░ ▓██░░▒████▒ ▒▀█░ ░▒████▒ " - " ░ ▒░ ▒ ▒ ░░ ▒░ ░ ░ ▐░ ░░ ▒░ ░ " - " ░ ░░ ░ ▒░ ░ ░ ░ ░ ░░ ░ ░ ░ " - " ░ ░ ░ ░ ░░ ░ " - " ░ ░ ░ ░ ░ ░ " - " ░ " - " " - " git@github.com:redyf/neve " - ]; - } - (padding 2) - { - type = "button"; - val = " Find File"; - on_press = { - __raw = "function() require('telescope.builtin').find_files() end"; - }; - opts = { - # hl = "comment"; - keymap = [ - "n" - "f" - ":Telescope find_files " - { - noremap = true; - silent = true; - nowait = true; - } + in + [ + (padding 4) + { + opts = { + hl = "AlphaHeader"; + position = "center"; + }; + type = "text"; + val = [ + " ███▄ █ ▓█████ ██▒ █▓▓█████ " + " ██ ▀█ █ ▓█ ▀▓██░ █▒▓█ ▀ " + " ▓██ ▀█ ██▒▒███ ▓██ █▒░▒███ " + " ▓██▒ ▐▌██▒▒▓█ ▄ ▒██ █░░▒▓█ ▄ " + " ▒██░ ▓██░░▒████▒ ▒▀█░ ░▒████▒ " + " ░ ▒░ ▒ ▒ ░░ ▒░ ░ ░ ▐░ ░░ ▒░ ░ " + " ░ ░░ ░ ▒░ ░ ░ ░ ░ ░░ ░ ░ ░ " + " ░ ░ ░ ░ ░░ ░ " + " ░ ░ ░ ░ ░ ░ " + " ░ " + " " + " git@github.com:redyf/neve " ]; - shortcut = "f"; + } + (padding 2) + { + type = "button"; + val = " Find File"; + on_press = { + __raw = "function() require('telescope.builtin').find_files() end"; + }; + opts = { + # hl = "comment"; + keymap = [ + "n" + "f" + ":Telescope find_files " + { + noremap = true; + silent = true; + nowait = true; + } + ]; + shortcut = "f"; - position = "center"; - cursor = 3; - width = 38; - align_shortcut = "right"; - hl_shortcut = "Keyword"; - }; - } - (padding 1) - { - type = "button"; - val = " New File"; - on_press = { - __raw = "function() vim.cmd[[ene]] end"; - }; - opts = { - # hl = "comment"; - keymap = [ - "n" - "n" - ":ene startinsert " - { - noremap = true; - silent = true; - nowait = true; - } - ]; - shortcut = "n"; + position = "center"; + cursor = 3; + width = 38; + align_shortcut = "right"; + hl_shortcut = "Keyword"; + }; + } + (padding 1) + { + type = "button"; + val = " New File"; + on_press = { + __raw = "function() vim.cmd[[ene]] end"; + }; + opts = { + # hl = "comment"; + keymap = [ + "n" + "n" + ":ene startinsert " + { + noremap = true; + silent = true; + nowait = true; + } + ]; + shortcut = "n"; - position = "center"; - cursor = 3; - width = 38; - align_shortcut = "right"; - hl_shortcut = "Keyword"; - }; - } - (padding 1) - { - type = "button"; - val = "󰈚 Recent Files"; - on_press = { - __raw = "function() require('telescope.builtin').oldfiles() end"; - }; - opts = { - # hl = "comment"; - keymap = [ - "n" - "r" - ":Telescope oldfiles " - { - noremap = true; - silent = true; - nowait = true; - } - ]; - shortcut = "r"; + position = "center"; + cursor = 3; + width = 38; + align_shortcut = "right"; + hl_shortcut = "Keyword"; + }; + } + (padding 1) + { + type = "button"; + val = "󰈚 Recent Files"; + on_press = { + __raw = "function() require('telescope.builtin').oldfiles() end"; + }; + opts = { + # hl = "comment"; + keymap = [ + "n" + "r" + ":Telescope oldfiles " + { + noremap = true; + silent = true; + nowait = true; + } + ]; + shortcut = "r"; - position = "center"; - cursor = 3; - width = 38; - align_shortcut = "right"; - hl_shortcut = "Keyword"; - }; - } - (padding 1) - { - type = "button"; - val = "󰈭 Find Word"; - on_press = { - __raw = "function() require('telescope.builtin').live_grep() end"; - }; - opts = { - # hl = "comment"; - keymap = [ - "n" - "g" - ":Telescope live_grep " - { - noremap = true; - silent = true; - nowait = true; - } - ]; - shortcut = "g"; + position = "center"; + cursor = 3; + width = 38; + align_shortcut = "right"; + hl_shortcut = "Keyword"; + }; + } + (padding 1) + { + type = "button"; + val = "󰈭 Find Word"; + on_press = { + __raw = "function() require('telescope.builtin').live_grep() end"; + }; + opts = { + # hl = "comment"; + keymap = [ + "n" + "g" + ":Telescope live_grep " + { + noremap = true; + silent = true; + nowait = true; + } + ]; + shortcut = "g"; - position = "center"; - cursor = 3; - width = 38; - align_shortcut = "right"; - hl_shortcut = "Keyword"; - }; - } - (padding 1) - { - type = "button"; - val = " Restore Session"; - on_press = { - __raw = "function() require('persistence').load() end"; - }; - opts = { - # hl = "comment"; - keymap = [ - "n" - "s" - ":lua require('persistence').load()" - { - noremap = true; - silent = true; - nowait = true; - } - ]; - shortcut = "s"; + position = "center"; + cursor = 3; + width = 38; + align_shortcut = "right"; + hl_shortcut = "Keyword"; + }; + } + (padding 1) + { + type = "button"; + val = " Restore Session"; + on_press = { + __raw = "function() require('persistence').load() end"; + }; + opts = { + # hl = "comment"; + keymap = [ + "n" + "s" + ":lua require('persistence').load()" + { + noremap = true; + silent = true; + nowait = true; + } + ]; + shortcut = "s"; - position = "center"; - cursor = 3; - width = 38; - align_shortcut = "right"; - hl_shortcut = "Keyword"; - }; - } - (padding 1) - { - type = "button"; - val = " Quit Neovim"; - on_press = { - __raw = "function() vim.cmd[[qa]] end"; - }; - opts = { - # hl = "comment"; - keymap = [ - "n" - "q" - ":qa" - { - noremap = true; - silent = true; - nowait = true; - } - ]; - shortcut = "q"; + position = "center"; + cursor = 3; + width = 38; + align_shortcut = "right"; + hl_shortcut = "Keyword"; + }; + } + (padding 1) + { + type = "button"; + val = " Quit Neovim"; + on_press = { + __raw = "function() vim.cmd[[qa]] end"; + }; + opts = { + # hl = "comment"; + keymap = [ + "n" + "q" + ":qa" + { + noremap = true; + silent = true; + nowait = true; + } + ]; + shortcut = "q"; - position = "center"; - cursor = 3; - width = 38; - align_shortcut = "right"; - hl_shortcut = "Keyword"; - }; - } - ]; + position = "center"; + cursor = 3; + width = 38; + align_shortcut = "right"; + hl_shortcut = "Keyword"; + }; + } + ]; + }; }; }; } From bf22c117bf14dbb5f87c4bc85d309aa1318cef3a Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:05:22 +1000 Subject: [PATCH 06/37] refactor: rename codeium-vim to windsurf-vim per NixVim upstream --- config/completion/codeium.nix | 12 ------------ config/completion/default.nix | 4 ++-- config/completion/windsurf.nix | 11 +++++++++++ 3 files changed, 13 insertions(+), 14 deletions(-) delete mode 100644 config/completion/codeium.nix create mode 100644 config/completion/windsurf.nix diff --git a/config/completion/codeium.nix b/config/completion/codeium.nix deleted file mode 100644 index ae073c79..00000000 --- a/config/completion/codeium.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ lib, config, ... }: -{ - options = { - codeium.enable = lib.mkEnableOption "Enable codeium module"; - }; - config = lib.mkIf config.codeium.enable { - - plugins.codeium-vim = { - enable = true; - }; - }; -} diff --git a/config/completion/default.nix b/config/completion/default.nix index 626f7aa8..be17c983 100644 --- a/config/completion/default.nix +++ b/config/completion/default.nix @@ -6,7 +6,7 @@ { imports = [ ./cmp.nix - ./codeium.nix + ./windsurf.nix ./copilot.nix ./lspkind.nix ]; @@ -16,7 +16,7 @@ }; config = lib.mkIf config.completion.enable { cmp.enable = lib.mkDefault true; - codeium.enable = lib.mkDefault false; + windsurf.enable = lib.mkDefault false; copilot.enable = lib.mkDefault false; lspkind.enable = lib.mkDefault true; }; diff --git a/config/completion/windsurf.nix b/config/completion/windsurf.nix new file mode 100644 index 00000000..04a2f256 --- /dev/null +++ b/config/completion/windsurf.nix @@ -0,0 +1,11 @@ +{ lib, config, ... }: +{ + options = { + windsurf.enable = lib.mkEnableOption "Enable windsurf module"; + }; + config = lib.mkIf config.windsurf.enable { + plugins.windsurf-vim = { + enable = true; + }; + }; +} From db108f81306ccb1786ad222b06ac855ee934af76 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:08:22 +1000 Subject: [PATCH 07/37] feat: enable mini.icons alongside web-devicons for NixVim compat --- config/ui/web-devicons.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/ui/web-devicons.nix b/config/ui/web-devicons.nix index 5e5b95ca..9b2290de 100644 --- a/config/ui/web-devicons.nix +++ b/config/ui/web-devicons.nix @@ -7,5 +7,8 @@ plugins.web-devicons = { enable = true; }; + plugins.mini.icons = { + enable = true; + }; }; } From 3c411efb4f0954f43f68ec9b6cdcdd40f03b70ca Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:08:25 +1000 Subject: [PATCH 08/37] chore: remove disabled lsp-format dead code --- config/lsp/lsp-nvim.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/lsp/lsp-nvim.nix b/config/lsp/lsp-nvim.nix index e5777bea..698351e7 100644 --- a/config/lsp/lsp-nvim.nix +++ b/config/lsp/lsp-nvim.nix @@ -5,9 +5,6 @@ }; config = lib.mkIf config.lsp-nvim.enable { plugins = { - lsp-format = { - enable = false; # Enable it if you want lsp-format integration for none-ls - }; lsp = { enable = true; capabilities = "offsetEncoding = 'utf-16'"; From 88396c1f79687910f519a16d57ecdd3ceeffa42f Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:08:27 +1000 Subject: [PATCH 09/37] docs: add redundancy note to plenary.nix --- config/utils/plenary.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/utils/plenary.nix b/config/utils/plenary.nix index 9a1e8b09..632699c3 100644 --- a/config/utils/plenary.nix +++ b/config/utils/plenary.nix @@ -9,6 +9,8 @@ plenary.enable = lib.mkEnableOption "Enable plenary module"; }; config = lib.mkIf config.plenary.enable { + # NOTE: plenary-nvim is a transitive dependency of telescope and many other + # plugins. This explicit install is redundant but harmless. extraPlugins = with pkgs.vimPlugins; [ plenary-nvim ]; From 36942cb2502be62b1d7d2e548cceb432b6806b2c Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:09:55 +1000 Subject: [PATCH 10/37] refactor: migrate dressing-nvim to native plugins.dressing module --- config/ui/dressing-nvim.nix | 232 +++++++++++------------------------- 1 file changed, 69 insertions(+), 163 deletions(-) diff --git a/config/ui/dressing-nvim.nix b/config/ui/dressing-nvim.nix index fdf93bc5..075c8877 100644 --- a/config/ui/dressing-nvim.nix +++ b/config/ui/dressing-nvim.nix @@ -1,183 +1,89 @@ -{ - lib, - config, - pkgs, - ... -}: +{ lib, config, ... }: { options = { dressing-nvim.enable = lib.mkEnableOption "Enable dressing-nvim module"; }; config = lib.mkIf config.dressing-nvim.enable { - - extraPlugins = with pkgs.vimPlugins; [ - dressing-nvim - ]; - extraConfigLua = '' - require("dressing").setup({ + plugins.dressing = { + enable = true; + settings = { input = { - -- Set to false to disable the vim.ui.input implementation - enabled = true, - - -- Default prompt string - default_prompt = "Input", - - -- Trim trailing `:` from prompt - trim_prompt = true, - - -- Can be 'left', 'right', or 'center' - title_pos = "left", - - -- When true, will close the modal - insert_only = true, - - -- When true, input will start in insert mode. - start_in_insert = true, - - -- These are passed to nvim_open_win - border = "rounded", - -- 'editor' and 'win' will default to being centered - relative = "cursor", - - -- These can be integers or a float between 0 and 1 (e.g. 0.4 for 40%) - prefer_width = 40, - width = nil, - -- min_width and max_width can be a list of mixed types. - -- min_width = {20, 0.2} means "the greater of 20 columns or 20% of total" - max_width = { 140, 0.9 }, - min_width = { 20, 0.2 }, - - buf_options = {}, + enabled = true; + default_prompt = "Input"; + trim_prompt = true; + title_pos = "left"; + insert_only = true; + start_in_insert = true; + border = "rounded"; + relative = "cursor"; + prefer_width = 40; + width = null; + max_width = [ 140 0.9 ]; + min_width = [ 20 0.2 ]; win_options = { - -- Disable line wrapping - wrap = false, - -- Indicator for when text exceeds window - list = true, - listchars = "precedes:…,extends:…", - -- Increase this for more context when text scrolls off the window - sidescrolloff = 0, - }, - - -- Set to `false` to disable + wrap = false; + list = true; + listchars = "precedes:\226\128\166,extends:\226\128\166"; + sidescrolloff = 0; + }; mappings = { n = { - [""] = "Close", - [""] = "Confirm", - }, + "" = "Close"; + "" = "Confirm"; + }; i = { - [""] = "Close", - [""] = "Confirm", - [""] = "HistoryPrev", - [""] = "HistoryNext", - }, - }, - - override = function(conf) - -- This is the config that will be passed to nvim_open_win. - -- Change values here to customize the layout - return conf - end, - - -- see :help dressing_get_config - get_config = nil, - }, + "" = "Close"; + "" = "Confirm"; + "" = "HistoryPrev"; + "" = "HistoryNext"; + }; + }; + }; select = { - -- Set to false to disable the vim.ui.select implementation - enabled = true, - - -- Priority list of preferred vim.select implementations - backend = { "telescope", "fzf_lua", "fzf", "builtin", "nui" }, - - -- Trim trailing `:` from prompt - trim_prompt = true, - - -- Options for telescope selector - -- These are passed into the telescope picker directly. Can be used like: - -- telescope = require('telescope.themes').get_ivy({...}) - telescope = nil, - - -- Options for fzf selector + enabled = true; + backend = [ "telescope" "fzf_lua" "fzf" "builtin" "nui" ]; + trim_prompt = true; + telescope = null; fzf = { window = { - width = 0.5, - height = 0.4, - }, - }, - - -- Options for fzf-lua - fzf_lua = { - -- winopts = { - -- height = 0.5, - -- width = 0.5, - -- }, - }, - - -- Options for nui Menu + width = 0.5; + height = 0.4; + }; + }; nui = { - position = "50%", - size = nil, - relative = "editor", + position = "50%"; + size = null; + relative = "editor"; border = { - style = "rounded", - }, - buf_options = { - swapfile = false, - filetype = "DressingSelect", - }, - win_options = { - winblend = 0, - }, - max_width = 80, - max_height = 40, - min_width = 40, - min_height = 10, - }, - - -- Options for built-in selector + style = "rounded"; + }; + max_width = 80; + max_height = 40; + min_width = 40; + min_height = 10; + }; builtin = { - -- Display numbers for options and set up keymaps - show_numbers = true, - -- These are passed to nvim_open_win - border = "rounded", - -- 'editor' and 'win' will default to being centered - relative = "editor", - - buf_options = {}, + show_numbers = true; + border = "rounded"; + relative = "editor"; win_options = { - cursorline = true, - cursorlineopt = "both", - }, - - -- These can be integers or a float between 0 and 1 (e.g. 0.4 for 40%) - -- the min_ and max_ options can be a list of mixed types. - -- max_width = {140, 0.8} means "the lesser of 140 columns or 80% of total" - width = nil, - max_width = { 140, 0.8 }, - min_width = { 40, 0.2 }, - height = nil, - max_height = 0.9, - min_height = { 10, 0.2 }, - - -- Set to `false` to disable + cursorline = true; + cursorlineopt = "both"; + }; + width = null; + max_width = [ 140 0.8 ]; + min_width = [ 40 0.2 ]; + height = null; + max_height = 0.9; + min_height = [ 10 0.2 ]; mappings = { - [""] = "Close", - [""] = "Close", - [""] = "Confirm", - }, - - override = function(conf) - -- This is the config that will be passed to nvim_open_win. - -- Change values here to customize the layout - return conf - end, - }, - - -- Used to override format_item. See :help dressing-format - format_item_override = {}, - - -- see :help dressing_get_config - get_config = nil, - }, - }) ''; + "" = "Close"; + "" = "Close"; + "" = "Confirm"; + }; + }; + }; + }; + }; }; } From de03bff18908873c121b2f0f2563f07c9d86b901 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:11:10 +1000 Subject: [PATCH 11/37] refactor: modernize staline.nix plugin installation --- config/statusline/staline.nix | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/config/statusline/staline.nix b/config/statusline/staline.nix index de831128..3670b155 100644 --- a/config/statusline/staline.nix +++ b/config/statusline/staline.nix @@ -9,17 +9,8 @@ staline.enable = lib.mkEnableOption "Enable staline module"; }; config = lib.mkIf config.staline.enable { - extraPlugins = with pkgs.vimUtils; [ - (buildVimPlugin { - pname = "staline.nvim"; - version = "2024-02-05"; - src = pkgs.fetchFromGitHub { - owner = "tamton-aquib"; - repo = "staline.nvim"; - rev = "a53f869278b8b186a5afd6f21680cd103c381599"; - hash = "sha256-GDMKzxFDtQk5LL+rMsxTGTyLv69w5NUd+u19noeO5ws="; - }; - }) + extraPlugins = with pkgs.vimPlugins; [ + staline-nvim ]; extraConfigLua = '' require("staline").setup({ From 6b172e3d48470f7bde340cbc2ad658065761c377 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:11:12 +1000 Subject: [PATCH 12/37] refactor: modernize sidebar.nix plugin installation --- config/utils/sidebar.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/config/utils/sidebar.nix b/config/utils/sidebar.nix index cae1145d..a67fdc88 100644 --- a/config/utils/sidebar.nix +++ b/config/utils/sidebar.nix @@ -9,6 +9,7 @@ sidebar.enable = lib.mkEnableOption "Enable sidebar module"; }; config = lib.mkIf config.sidebar.enable { + # TODO: migrate to pkgs.vimPlugins.sidebar-nvim when available in nixpkgs extraPlugins = with pkgs.vimUtils; [ (buildVimPlugin { pname = "sidebar.nvim"; From a24dc60e9b2e02ff1529ec82e8cb663dadd86416 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:11:15 +1000 Subject: [PATCH 13/37] refactor: modernize ultimate-autopair.nix plugin installation --- config/utils/ultimate-autopair.nix | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/config/utils/ultimate-autopair.nix b/config/utils/ultimate-autopair.nix index a89c7c56..2abb2fe0 100644 --- a/config/utils/ultimate-autopair.nix +++ b/config/utils/ultimate-autopair.nix @@ -10,17 +10,8 @@ }; config = lib.mkIf config.ultimate-autopair.enable { - extraPlugins = with pkgs.vimUtils; [ - (buildVimPlugin { - pname = "ultimate-autopair.nvim"; - version = "2024-02-05"; - src = pkgs.fetchFromGitHub { - owner = "altermo"; - repo = "ultimate-autopair.nvim"; - rev = "25c13e0ce167db0255456cac10158b27d2be30c0"; - sha256 = "0bsxfj6g8fii9nn92vl15hdhafx3fikgiz4srr7y10pxz01c5s4c"; - }; - }) + extraPlugins = with pkgs.vimPlugins; [ + ultimate-autopair-nvim ]; extraConfigLua = '' require('ultimate-autopair').setup() From d410a8e93ce21380e73a815544f48924607c6f78 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:12:53 +1000 Subject: [PATCH 14/37] fix: remove orphaned config function wrapper in lualine extraConfigLua --- config/statusline/lualine.nix | 123 ++++++++++++++++------------------ 1 file changed, 56 insertions(+), 67 deletions(-) diff --git a/config/statusline/lualine.nix b/config/statusline/lualine.nix index 427b5c10..72300980 100644 --- a/config/statusline/lualine.nix +++ b/config/statusline/lualine.nix @@ -36,77 +36,66 @@ }; }; extraConfigLua = '' - config = function() - local harpoon = require("harpoon.mark") + local harpoon = require("harpoon.mark") - local function truncate_branch_name(branch) - if not branch or branch == "" then - return "" - end - - -- Match the branch name to the specified format - local user, team, ticket_number = string.find(branch, "(%w+)%/(%w+)%-(%d+)%-") - - -- If the branch name matches the format, display sko-{ticket_number}, otherwise display the full branch name - if ticket_number then - return user .. "/" .. team .. "-" .. ticket_number - else - return branch - end - end - - local function harpoon_component() - local total_marks = harpoon.get_length() - - if total_marks == 0 then - return "" - end - - local current_mark = "—" - - local mark_idx = harpoon.get_current_index() - if mark_idx ~= nil then - current_mark = tostring(mark_idx) - end + local function truncate_branch_name(branch) + if not branch or branch == "" then + return "" + end + local user, team, ticket_number = string.find(branch, "(%w+)%/(%w+)%-(%d+)%-") + if ticket_number then + return user .. "/" .. team .. "-" .. ticket_number + else + return branch + end + end - return string.format("󱡅 %s/%d", current_mark, total_marks) - end + local function harpoon_component() + local total_marks = harpoon.get_length() + if total_marks == 0 then + return "" + end + local current_mark = "\226\128\148" + local mark_idx = harpoon.get_current_index() + if mark_idx ~= nil then + current_mark = tostring(mark_idx) + end + return string.format("\239\177\133\133 %s/%d", current_mark, total_marks) + end - local function get_lsp_client(_) - ---@type any?{} - local client_names = {} - local msg = "No Active Lsp" - local clients = vim.lsp.get_clients({ bufnr = 0 }) - if next(clients) == nil then - return msg - end - for _, client in ipairs(clients) do - table.insert(client_names, client.name) - end - return #client_names == 0 and msg or table.concat(client_names, " | ") - end - local function wordcount() - return tostring(vim.fn.wordcount().words) .. " words" - end - local function readingtime() - return tostring(math.ceil(vim.fn.wordcount().words / 200.0)) .. " min" - end - local function is_markdown() - return vim.bo.filetype == "markdown" or vim.bo.filetype == "asciidoc" - end - local function navic() - return require("nvim-navic").get_location() - end - local function navic_is_available() - return package.loaded["nvim-navic"] and require("nvim-navic").is_available() - end - local cmd_mode = function() - return require("noice").api.status.mode.get() - end - local show_mode = function() - return package.loaded["noice"] and require("noice").api.status.mode.has() or "" - end + local function get_lsp_client(_) + local client_names = {} + local msg = "No Active Lsp" + local clients = vim.lsp.get_clients({ bufnr = 0 }) + if next(clients) == nil then + return msg + end + for _, client in ipairs(clients) do + table.insert(client_names, client.name) end + return #client_names == 0 and msg or table.concat(client_names, " | ") + end + local function wordcount() + return tostring(vim.fn.wordcount().words) .. " words" + end + local function readingtime() + return tostring(math.ceil(vim.fn.wordcount().words / 200.0)) .. " min" + end + local function is_markdown() + return vim.bo.filetype == "markdown" or vim.bo.filetype == "asciidoc" + end + local function navic() + return require("nvim-navic").get_location() + end + local function navic_is_available() + return package.loaded["nvim-navic"] and require("nvim-navic").is_available() + end + local cmd_mode = function() + return require("noice").api.status.mode.get() + end + local show_mode = function() + return package.loaded["noice"] and require("noice").api.status.mode.has() or "" + end ''; }; } From 8b8fbc83d7ec99cfef638f6aee1c7867e354639b Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:13:04 +1000 Subject: [PATCH 15/37] fix: replace hardcoded store paths in jdtls.nix with package references --- config/languages/jdtls.nix | 72 +++----------------------------------- 1 file changed, 4 insertions(+), 68 deletions(-) diff --git a/config/languages/jdtls.nix b/config/languages/jdtls.nix index f9ea4fa0..edaf0fbb 100644 --- a/config/languages/jdtls.nix +++ b/config/languages/jdtls.nix @@ -1,8 +1,4 @@ -{ lib, config, ... }: -let - javaTestPath = "/nix/store/j3nvmhvj2pmnykw5pbm51dn0bz4cv6j3-vscode-extension-vscjava-vscode-java-test-0.38.2023032402/share/vscode/extensions/vscjava.vscode-java-test/server/com.microsoft.java.test.plugin-0.38.2.jar - "; -in +{ lib, config, pkgs, ... }: { options = { jdtls.enable = lib.mkEnableOption "Enable jdtls module"; @@ -12,77 +8,17 @@ in enable = true; settings = { cmd = [ - "/nix/store/l7wd7xjnz95yxv225kix5gbq8k3vm7fl-jdt-language-server-1.48.0/bin/jdtls --data ~/.cache/jdtls/workspace" + "${pkgs.jdt-language-server}/bin/jdtls" + "--data" + "~/.cache/jdtls/workspace" ]; - # configuration = "/path/to/configuration"; settings = { java = { signatureHelp = true; completion = true; }; }; - initOptions = { - bundles = [ - "/nix/store/b9ib40q36wxjl4xs5lng263lflz1fsi7-vscode-extension-vscjava-vscode-java-debug-0.49.2023032407/share/vscode/extensions/vscjava.vscode-java-debug/server/com.microsoft.java.debug.plugin-0.44.0.jar" - "${javaTestPath}" - ]; - }; }; }; }; } -# -# extraConfigLua = '' -# local jdtls = require("jdtls") -# local cmp_nvim_lsp = require("cmp_nvim_lsp") -# -# local root_dir = require("jdtls.setup").find_root({ "packageInfo" }, "Config") -# local home = os.getenv("HOME") -# local eclipse_workspace = home .. "/.local/share/eclipse/" .. vim.fn.fnamemodify(root_dir, ":p:h:t") -# -# local ws_folders_jdtls = {} -# if root_dir then -# local file = io.open(root_dir .. "/.bemol/ws_root_folders") -# if file then -# for line in file:lines() do -# table.insert(ws_folders_jdtls, "file://" .. line) -# end -# file:close() -# end -# end -# -# -- for completions -# local client_capabilities = vim.lsp.protocol.make_client_capabilities() -# local capabilities = cmp_nvim_lsp.default_capabilities(client_capabilities) -# -# local config = { -# capabilities = capabilities, -# cmd = { -# "${pkgs.jdt-language-server}/bin/jdt-language-server", -# "--jvm-arg=-javaagent:" .. home .. "/Developer/lombok.jar", -# "-data", -# eclipse_workspace, -# "--add-modules=ALL-SYSTEM", -# }, -# root_dir = root_dir, -# init_options = { -# workspaceFolders = ws_folders_jdtls, -# }, -# settings = { -# java = { -# signatureHelp = { enabled = true}, -# completion = { enabled = true }, -# }, -# }, -# on_attach = function(client, bufnr) -# local opts = { silent = true, buffer = bufnr } -# vim.keymap.set('n', "lo", jdtls.organize_imports, { desc = 'Organize imports', buffer = bufnr }) -# vim.keymap.set('n', "df", jdtls.test_class, opts) -# vim.keymap.set('n', "dn", jdtls.test_nearest_method, opts) -# vim.keymap.set('n', 'rv', jdtls.extract_variable_all, { desc = 'Extract variable', buffer = bufnr }) -# vim.keymap.set('n', 'rc', jdtls.extract_constant, { desc = 'Extract constant', buffer = bufnr }) -# end -# } -# -# jdtls.start_or_attach(config) -# ''; From ca4620edf20fbf92fe7c9c9001a522fe8dcf9399 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 12:20:02 +1000 Subject: [PATCH 16/37] fix: correct mini.icons module path to mini.modules.icons --- config/ui/web-devicons.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/ui/web-devicons.nix b/config/ui/web-devicons.nix index 9b2290de..61fa6776 100644 --- a/config/ui/web-devicons.nix +++ b/config/ui/web-devicons.nix @@ -7,7 +7,7 @@ plugins.web-devicons = { enable = true; }; - plugins.mini.icons = { + plugins.mini.modules.icons = { enable = true; }; }; From 7d2cef43ce437e3cb8eb30583af2bcc49bbe786f Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 20:19:17 +1000 Subject: [PATCH 17/37] feat: add wrapped package with Lua runtimepath fix for Neovim 0.12 Neovim 0.12.2's module loader (via lazy.nvim's cache) fails to resolve Lua modules from runtimepath/lua/ directories in the Nix store, causing require('nvim-treesitter'), require('cmp'), and others to fail at startup. The wrapped package adds a --cmd flag that augments package.path with all lua/ directories on the runtimepath, so modules are found regardless of which loader is active. Usage: nix run github:jee-mj/Neve#wrapped --- flake.nix | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/flake.nix b/flake.nix index 05350b2b..989fbab6 100644 --- a/flake.nix +++ b/flake.nix @@ -55,6 +55,21 @@ packages = { # Lets you run `nix run .` to start nixvim default = nvim; + + # Wrapped with Lua runtimepath fix for Neovim 0.12 + wrapped = pkgs.symlinkJoin { + name = "neve-wrapped"; + paths = [ nvim ]; + postBuild = '' + mv $out/bin/nvim $out/bin/.nvim-real + cat > $out/bin/nvim << 'SCRIPT' + #!/bin/sh + exec "$(dirname "$0")/.nvim-real" --cmd "lua for _,p in ipairs(vim.api.nvim_get_runtime_file('lua',true)) do package.path=package.path..';'..p..'/?.lua;'..p..'/?/init.lua' end" "$@" + SCRIPT + chmod +x $out/bin/nvim + ''; + meta.mainProgram = "nvim"; + }; }; formatter = pkgs.nixfmt-rfc-style; From 9a9dbf77aaffeb1db5959accf2d7d56992c0be85 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 21:14:58 +1000 Subject: [PATCH 18/37] fix: lazy.nvim rtp reset breaks neocord autoload --- config/pluginmanagers/lazy-nvim.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/config/pluginmanagers/lazy-nvim.nix b/config/pluginmanagers/lazy-nvim.nix index 32185918..b43ef60a 100644 --- a/config/pluginmanagers/lazy-nvim.nix +++ b/config/pluginmanagers/lazy-nvim.nix @@ -10,6 +10,18 @@ config = lib.mkIf config.lazy-nvim.enable { plugins.lazy = { enable = true; + settings = { + # Empty list as spec signals lazy.nvim to treat this as opts (2nd arg), + # not as plugin specs. Nixvim drops {} (empty attrset) but preserves []. + spec = [ ]; + performance = { + # Nixvim manages plugins via packpath; lazy.nvim must not reset it + reset_packpath = false; + rtp = { + reset = false; + }; + }; + }; }; }; } From 82af393918b29242c36f7c1f7234827bb5ef7188 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 21:50:21 +1000 Subject: [PATCH 19/37] fix: migrate lualine.nix harpoon API from v1 to v2 (harpoon2) --- config/statusline/lualine.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/config/statusline/lualine.nix b/config/statusline/lualine.nix index 72300980..4b150487 100644 --- a/config/statusline/lualine.nix +++ b/config/statusline/lualine.nix @@ -36,7 +36,7 @@ }; }; extraConfigLua = '' - local harpoon = require("harpoon.mark") + local harpoon = require("harpoon") local function truncate_branch_name(branch) if not branch or branch == "" then @@ -51,12 +51,14 @@ end local function harpoon_component() - local total_marks = harpoon.get_length() + local list = harpoon:list() + local total_marks = list:length() if total_marks == 0 then return "" end local current_mark = "\226\128\148" - local mark_idx = harpoon.get_current_index() + -- harpoon2 tracks current index via internal _index field (1-based) + local mark_idx = list._index if mark_idx ~= nil then current_mark = tostring(mark_idx) end From 49f5a308ed7e0f08f3a7693f6e02e0ed57c89110 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 22:02:54 +1000 Subject: [PATCH 20/37] fix: replace deprecated vim.lsp.with() with handler wrappers --- config/lsp/lsp-nvim.nix | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/config/lsp/lsp-nvim.nix b/config/lsp/lsp-nvim.nix index 698351e7..0ccdf2db 100644 --- a/config/lsp/lsp-nvim.nix +++ b/config/lsp/lsp-nvim.nix @@ -189,17 +189,15 @@ border = _border } - vim.lsp.handlers["textDocument/hover"] = vim.lsp.with( - vim.lsp.handlers.hover, { - border = _border - } - ) + vim.lsp.handlers["textDocument/hover"] = function(err, result, ctx, config) + config = vim.tbl_deep_extend("force", config or {}, { border = _border }) + return vim.lsp.handlers.hover(err, result, ctx, config) + end - vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with( - vim.lsp.handlers.signature_help, { - border = _border - } - ) + vim.lsp.handlers["textDocument/signatureHelp"] = function(err, result, ctx, config) + config = vim.tbl_deep_extend("force", config or {}, { border = _border }) + return vim.lsp.handlers.signature_help(err, result, ctx, config) + end vim.diagnostic.config({ float = { border = "rounded" }, From 64bbd2d5065ed1b6f1024625ddafbdf4b8981489 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 22:10:30 +1000 Subject: [PATCH 21/37] fix: pre-create .local/share/nvim in test derivation for Neovim 0.12 Neovim 0.12 requires $HOME/.local/share/nvim for stdpath('data'). The nixvim test harness only creates .cache/nvim, causing an 'Invalid save_dir' error that fails the check. Fix by overriding the check derivation to pre-create the missing directory. --- flake.nix | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index 989fbab6..debe03f9 100644 --- a/flake.nix +++ b/flake.nix @@ -46,10 +46,17 @@ { checks = { # Run `nix flake check .` to verify that your config is not broken - default = nixvimLib.check.mkTestDerivationFromNvim { + default = (nixvimLib.check.mkTestDerivationFromNvim { inherit nvim; name = "Neve"; - }; + }).overrideAttrs (oldAttrs: { + # Neovim 0.12 requires $HOME/.local/share/nvim for stdpath('data'). + # The nixvim test harness only creates .cache/nvim. Pre-create the + # missing directory before running nvim. + buildCommand = '' + mkdir -p .local/share/nvim + '' + oldAttrs.buildCommand; + }); }; packages = { From 7dc581203e8e13b9410a260714e5f9ac51fbde31 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 22:16:33 +1000 Subject: [PATCH 22/37] fix: add neocord to lazy.nvim managed plugins, remove spec workaround Replace the empty spec = [] workaround with explicit neocord plugin registration in lazy.nvim's managed plugins. This ensures lazy.nvim treats the settings table as opts (2nd arg to setup()), preventing it from resetting the runtimepath and breaking Vimscript autoload functions like neocord#SetAutoCmds. Using config = "" (empty string) prevents lazy.nvim from running its auto-setup callback, since Nixvim handles neocord setup separately. --- config/pluginmanagers/lazy-nvim.nix | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/config/pluginmanagers/lazy-nvim.nix b/config/pluginmanagers/lazy-nvim.nix index b43ef60a..efdd1692 100644 --- a/config/pluginmanagers/lazy-nvim.nix +++ b/config/pluginmanagers/lazy-nvim.nix @@ -1,6 +1,7 @@ { lib, config, + pkgs, ... }: { @@ -10,10 +11,22 @@ config = lib.mkIf config.lazy-nvim.enable { plugins.lazy = { enable = true; + # Add neocord to lazy.nvim's managed plugins so that settings.spec is + # non-empty. This makes lazy.nvim interpret the settings table as opts + # (2nd arg to setup()), preventing it from resetting the runtimepath + # and breaking Vimscript autoload functions (e.g. neocord#SetAutoCmds). + # + # Using `config = ""` (empty string) prevents lazy.nvim from running its + # auto-setup callback (which would call setup() without opts), since + # Nixvim handles neocord setup separately via its own require call. + plugins = [ + { + pkg = pkgs.vimPlugins.neocord; + name = "neocord"; + config = ""; + } + ]; settings = { - # Empty list as spec signals lazy.nvim to treat this as opts (2nd arg), - # not as plugin specs. Nixvim drops {} (empty attrset) but preserves []. - spec = [ ]; performance = { # Nixvim manages plugins via packpath; lazy.nvim must not reset it reset_packpath = false; From 22da833b00a2d9db00070e7b7391d633bb92f6ca Mon Sep 17 00:00:00 2001 From: jee-mj Date: Tue, 19 May 2026 23:15:30 +1000 Subject: [PATCH 23/37] feat: add extraPackages with CLI tools and Nerd Font dependency Adds fd, tree-sitter, nixfmt-rfc-style, stylua, prettierd, and nerd-fonts.symbols-only to the runtime closure. Resolves 6 checkhealth items (1 error, 5 warnings) for missing CLI formatters and tools. --- config/default.nix | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/config/default.nix b/config/default.nix index 8a9faa1f..22349acc 100644 --- a/config/default.nix +++ b/config/default.nix @@ -1,5 +1,19 @@ -{ lib, config, ... }: { + lib, + config, + pkgs, + ... +}: +{ + extraPackages = with pkgs; [ + fd + tree-sitter + nixfmt-rfc-style + stylua + prettierd + nerd-fonts.symbols-only + ]; + # Import all your configuration modules here imports = [ ./bufferlines From 6d991d7f5443cd71ce9846e6a24e1bcce49ea406 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Wed, 20 May 2026 00:11:24 +1000 Subject: [PATCH 24/37] docs: add HEALTH.md with allowed checkhealth exceptions --- docs/HEALTH.md | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/HEALTH.md diff --git a/docs/HEALTH.md b/docs/HEALTH.md new file mode 100644 index 00000000..e01fa274 --- /dev/null +++ b/docs/HEALTH.md @@ -0,0 +1,74 @@ +# Neve Health Exceptions + +This document catalogues `:checkhealth` items that are expected, environment-dependent, +or upstream artifacts — not Neve configuration errors. + +Items are classified as: + +- **Expected** — By-design consequence of using NixVim +- **Environment** — Depends on host tools or user preference +- **User-auth** — Requires per-user authentication +- **Upstream** — Bug or artifact in a third-party plugin or Neovim itself +- **Test artifact** — Plugin self-test failure that does not affect real usage + +## Current Exceptions (2026-05-19) + +### nvim-treesitter — Parser dependency errors +- **Severity:** 6 ❌ +- **Classification:** Upstream / benign fallback +- **Detail:** `html`, `javascript`, `tsx`, and `typescript` parsers declare companion + dependencies (`ecma`, `jsx`, `html_tags`) that are not installed. These companion + parsers provide shared capture groups for edge-case highlighting. Direct Lua API + access to all query files succeeds — parsing and highlighting work correctly without + them. The empty error bodies in healthcheck occur because `'queries'` is a catch-all + pseudo-type for dependency checks, not a real query group. + +### ultimate-autopair — Self-test failures +- **Severity:** 3 ❌ +- **Classification:** Test artifact +- **Detail:** The plugin's self-test suite uses `vim.treesitter.get_string_parser` + (synthetic test harness), while real editor usage uses `vim.treesitter.get_parser` + (live buffer). In Neovim 0.12, these code paths can produce different node trees, + causing false-positive test failures in `rfaswarp` tests. Headless testing confirmed + reverse fastwarp (``) works correctly in live buffers for all three test cases. + No configuration change needed. + +### lazy.nvim — luarocks/hererocks +- **Severity:** 1 ❌, 3 ⚠️ +- **Classification:** Expected +- **Detail:** NixVim manages all plugins through Nix derivations. LuaRocks and hererocks + are not needed and not installed. lazy.nvim's healthcheck warns about this by default. + There is no supported way to disable these warnings in a NixVim-managed config. + +### copilot.lua — LSP client not available +- **Severity:** 1 ❌ +- **Classification:** User-auth +- **Detail:** Copilot requires authentication via `:Copilot auth` with GitHub credentials. + This is a per-user action, not a configuration issue. Users who do not use Copilot + can ignore this; users who do must authenticate once. + +### vim.health — Missing user config +- **Severity:** 1 ⚠️ +- **Classification:** Expected +- **Detail:** NixVim generates its own `init.lua` and does not use + `~/.config/nvim/init.lua`. The missing-user-config warning is expected and harmless. + +### diffview — hg not executable +- **Severity:** 1 ⚠️ +- **Classification:** Environment +- **Detail:** Mercurial (`hg`) is an optional VCS dependency for diffview.nvim. Git is the + only VCS in use. Install `hg` only if Mercurial repositories are needed. + +### project.nvim — No active session / fzf-lua disabled +- **Severity:** 2 ⚠️ +- **Classification:** Expected +- **Detail:** Normal on fresh Neovim start. A session is created after opening a project. + `fzf-lua` integration being disabled is intentional — telescope is the fuzzy finder in use. + +### conform — Language-specific formatters +- **Severity:** 4 ⚠️ +- **Classification:** Environment +- **Detail:** `black` (Python), `rustfmt` (Rust), `google-java-format` (Java), and `prettier` + (fallback) are not included in the Neve closure. These are language-specific tools that + not every user needs. Install them per-project or per-user preference. + `prettierd` is included as the primary web-language formatter. From 426d410e2f34a59a7855eb36328839ef8bd009a0 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Wed, 20 May 2026 00:16:40 +1000 Subject: [PATCH 25/37] docs: add 5 remaining checkhealth warnings to HEALTH.md --- docs/HEALTH.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/docs/HEALTH.md b/docs/HEALTH.md index e01fa274..a47aa95c 100644 --- a/docs/HEALTH.md +++ b/docs/HEALTH.md @@ -72,3 +72,38 @@ Items are classified as: (fallback) are not included in the Neve closure. These are language-specific tools that not every user needs. Install them per-project or per-user preference. `prettierd` is included as the primary web-language formatter. + +### vim.pack — Existing packages in vim-pack-dir +- **Severity:** 1 ⚠️ +- **Classification:** Expected +- **Detail:** NixVim manages plugins via a constructed `vim-pack-dir` at + `/nix/store/...-vim-pack-dir/pack/myNeovimPackages`. `vim.pack` healthcheck + detects these as "existing packages" which is the intended behaviour. + +### vim.treesitter — Java parser up-to-date warning +- **Severity:** 1 ⚠️ +- **Classification:** Upstream +- **Detail:** nvim-treesitter healthcheck warns when a parser may need updating. + This is a per-parser maintenance notice, not a configuration error. Parsers are + managed via Nix derivations and updated with nixpkgs. + +### vim.health — Version number mismatch +- **Severity:** 1 ⚠️ +- **Classification:** Expected +- **Detail:** NixVim wraps Neovim in a derivation that may report a different + `:version` string than the unwrapped binary. This is a packaging artifact and + does not affect functionality. + +### nvim-treesitter — Unknown filetype 'javascript.jsx' +- **Severity:** 1 ⚠️ +- **Classification:** Upstream +- **Detail:** The `javascript.jsx` filetype is a legacy alias. nvim-treesitter's + filetype-to-parser mapping may not recognize it. Does not affect highlighting + or parsing of actual `.jsx` files. + +### nvim-treesitter — Unknown filetype 'typescript.tsx' +- **Severity:** 1 ⚠️ +- **Classification:** Upstream +- **Detail:** The `typescript.tsx` filetype is a legacy alias. nvim-treesitter's + filetype-to-parser mapping may not recognize it. Does not affect highlighting + or parsing of actual `.tsx` files. From 423f4b2adc02e26b4531a729ac0c65f2f7567aa2 Mon Sep 17 00:00:00 2001 From: jee-mj Date: Wed, 20 May 2026 00:22:02 +1000 Subject: [PATCH 26/37] fix: replace deprecated nixfmt-rfc-style with nixfmt nixpkgs now aliases nixfmt-rfc-style to pkgs.nixfmt. The old name triggers deprecation warnings during evaluation. --- config/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/default.nix b/config/default.nix index 22349acc..eeb796d5 100644 --- a/config/default.nix +++ b/config/default.nix @@ -8,7 +8,7 @@ extraPackages = with pkgs; [ fd tree-sitter - nixfmt-rfc-style + nixfmt stylua prettierd nerd-fonts.symbols-only From b392773f62161d370d37869e138111f58e24635c Mon Sep 17 00:00:00 2001 From: jee-mj Date: Wed, 20 May 2026 00:57:55 +1000 Subject: [PATCH 27/37] chore: add .gitignore to prevent result symlink tracking --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..976c4ce0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Nix build symlink +result From d5702b1cb48c1ef324b40e141a910fb931e3fe37 Mon Sep 17 00:00:00 2001 From: jee-mj <28581723+jee-mj@users.noreply.github.com> Date: Tue, 26 May 2026 11:56:49 +1000 Subject: [PATCH 28/37] feat(utils): replace markdown-preview.nvim with peek.nvim - Remove markdown-preview.nvim (external browser, Firefox-based) - Add peek.nvim (native webview, Deno-powered) - Preview filetypes: markdown, html, pandoc, rmd, qmd, vimwiki, tex, latex - Keybind unchanged: cp toggles preview - Enabled by default (was previously disabled) - Adds deno to extraPackages as runtime dependency --- config/utils/default.nix | 4 +-- config/utils/markdown-preview.nix | 27 ------------------- config/utils/peek.nix | 45 +++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 29 deletions(-) delete mode 100644 config/utils/markdown-preview.nix create mode 100644 config/utils/peek.nix diff --git a/config/utils/default.nix b/config/utils/default.nix index 3b9b1da4..59d3f6e5 100644 --- a/config/utils/default.nix +++ b/config/utils/default.nix @@ -9,7 +9,7 @@ ./cloak.nix ./colorizer.nix ./harpoon.nix - ./markdown-preview.nix + ./peek.nix ./mini.nix ./neocord.nix ./neotest.nix @@ -37,7 +37,7 @@ better-escape.enable = lib.mkDefault true; cloak.enable = lib.mkDefault true; harpoon.enable = lib.mkDefault true; - markdown-preview.enable = lib.mkDefault false; + peek.enable = lib.mkDefault true; mini.enable = lib.mkDefault true; neocord.enable = lib.mkDefault true; neotest.enable = lib.mkDefault true; diff --git a/config/utils/markdown-preview.nix b/config/utils/markdown-preview.nix deleted file mode 100644 index d1bd2f72..00000000 --- a/config/utils/markdown-preview.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ lib, config, ... }: -{ - # TODO: Switch to peek.nvim - options = { - markdown-preview.enable = lib.mkEnableOption "Enable markdown-preview module"; - }; - config = lib.mkIf config.markdown-preview.enable { - - plugins.markdown-preview = { - enable = true; - settings = { - browser = "firefox"; - theme = "dark"; - }; - }; - keymaps = [ - { - mode = "n"; - key = "cp"; - action = "MarkdownPreview"; - options = { - desc = "Markdown Preview"; - }; - } - ]; - }; -} diff --git a/config/utils/peek.nix b/config/utils/peek.nix new file mode 100644 index 00000000..dc0fa241 --- /dev/null +++ b/config/utils/peek.nix @@ -0,0 +1,45 @@ +{ lib, config, pkgs, ... }: +{ + options = { + peek.enable = lib.mkEnableOption "Enable peek.nvim markdown preview module"; + }; + config = lib.mkIf config.peek.enable { + + extraPlugins = with pkgs.vimPlugins; [ peek-nvim ]; + extraPackages = with pkgs; [ deno ]; + + extraConfigLua = '' + require('peek').setup({ + auto_load = true, + close_on_bdelete = true, + theme = 'dark', + app = 'webview', + syntax = true, + update_on_change = true, + filetype = { 'markdown', 'html', 'pandoc', 'rmd', 'qmd', 'vimwiki', 'tex', 'latex' }, + }) + + vim.api.nvim_create_user_command('PeekOpen', require('peek').open, {}) + vim.api.nvim_create_user_command('PeekClose', require('peek').close, {}) + + _G.peek_toggle = function() + if require('peek').is_open() then + require('peek').close() + else + require('peek').open() + end + end + ''; + + keymaps = [ + { + mode = "n"; + key = "cp"; + action = "lua _G.peek_toggle()"; + options = { + desc = "Toggle Markdown Preview"; + }; + } + ]; + }; +} From dc89d765bbd93539e72e31d9b9614f63e2d8dccf Mon Sep 17 00:00:00 2001 From: jee-mj <28581723+jee-mj@users.noreply.github.com> Date: Tue, 26 May 2026 12:05:34 +1000 Subject: [PATCH 29/37] pin current nix packages Pin nixpkgs, nixvim, and flake-utils to specific revisions instead of following branch refs (nixos-unstable/default). --- flake.lock | 4 +++- flake.nix | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index a4d0ddaa..c01a0f97 100644 --- a/flake.lock +++ b/flake.lock @@ -36,6 +36,7 @@ "original": { "owner": "numtide", "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" } }, @@ -50,8 +51,8 @@ }, "original": { "owner": "nixos", - "ref": "nixos-unstable", "repo": "nixpkgs", + "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", "type": "github" } }, @@ -88,6 +89,7 @@ "original": { "owner": "nix-community", "repo": "nixvim", + "rev": "9b28a7e6e3e6f61b114a550941abfc9fce0645cc", "type": "github" } }, diff --git a/flake.nix b/flake.nix index debe03f9..12b7322f 100644 --- a/flake.nix +++ b/flake.nix @@ -2,9 +2,9 @@ description = "Neve is a Neovim configuration built with Nixvim, which allows you to use Nix language to manage Neovim plugins/options"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - nixvim.url = "github:nix-community/nixvim"; - flake-utils.url = "github:numtide/flake-utils"; + nixpkgs.url = "github:nixos/nixpkgs/d233902339c02a9c334e7e593de68855ad26c4cb"; + nixvim.url = "github:nix-community/nixvim/9b28a7e6e3e6f61b114a550941abfc9fce0645cc"; + flake-utils.url = "github:numtide/flake-utils/11707dc2f618dd54ca8739b309ec4fc024de578b"; }; outputs = From 8a2bd4200355f0bd992fbf02dc1d47150a567319 Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 00:31:00 -0300 Subject: [PATCH 30/37] fix(lazy): re-enable loadplugins so plugin/ commands register lazy.nvim's setup() forces vim.go.loadplugins = false. Since this config also tells lazy not to reset the runtimepath/packpath, lazy never re-sources the plugin/ scripts of the Nix-managed start packages, so any command defined only there silently disappears, most notably :Telescope (and :TodoTelescope), which unlike most plugins is not created inside its setup(). Re-enable loadplugins after init so Neovim sources those scripts. --- config/pluginmanagers/lazy-nvim.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/pluginmanagers/lazy-nvim.nix b/config/pluginmanagers/lazy-nvim.nix index efdd1692..dbb93bbf 100644 --- a/config/pluginmanagers/lazy-nvim.nix +++ b/config/pluginmanagers/lazy-nvim.nix @@ -9,6 +9,9 @@ lazy-nvim.enable = lib.mkEnableOption "Enable lazy-nvim module"; }; config = lib.mkIf config.lazy-nvim.enable { + extraConfigLuaPost = '' + vim.go.loadplugins = true + ''; plugins.lazy = { enable = true; # Add neocord to lazy.nvim's managed plugins so that settings.spec is From f94dc30483d00f45240a644aadf82b729135b2cc Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 00:58:18 -0300 Subject: [PATCH 31/37] remove(comment): unnecessary comment --- config/utils/plenary.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/utils/plenary.nix b/config/utils/plenary.nix index 632699c3..9a1e8b09 100644 --- a/config/utils/plenary.nix +++ b/config/utils/plenary.nix @@ -9,8 +9,6 @@ plenary.enable = lib.mkEnableOption "Enable plenary module"; }; config = lib.mkIf config.plenary.enable { - # NOTE: plenary-nvim is a transitive dependency of telescope and many other - # plugins. This explicit install is redundant but harmless. extraPlugins = with pkgs.vimPlugins; [ plenary-nvim ]; From 3ffcd2a2d7ef72820eba8c31d67a6310b0be3f9e Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 01:01:20 -0300 Subject: [PATCH 32/37] chore(flake): unpin inputs, restore nixpkgs follows, drop wrapped package - Inputs are movable refs again (nixpkgs -> nixos-unstable, nixvim and flake-utils without a fixed rev); exact version pinning lives in flake.lock so 'nix flake update' (and the update CI) can manage the revs instead of frozen URLs. - Restore 'nixvim.inputs.nixpkgs.follows = \"nixpkgs\"' so nixvim shares the root nixpkgs again instead of carrying its own. - Remove the 'packages.wrapped' derivation: it tried to fix the missing Telescope commands via package.path, but the real cause was loadplugins being disabled by lazy.nvim (fixed separately). It was dead code. - Regenerate flake.lock: nixpkgs and nixvim move to current revs and the duplicate nixpkgs node is dropped (effect of the follows). --- flake.lock | 43 ++++++++++++++----------------------------- flake.nix | 48 ++++++++++++++++++------------------------------ 2 files changed, 32 insertions(+), 59 deletions(-) diff --git a/flake.lock b/flake.lock index c01a0f97..badac412 100644 --- a/flake.lock +++ b/flake.lock @@ -36,38 +36,21 @@ "original": { "owner": "numtide", "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" } }, "nixpkgs": { "locked": { - "lastModified": 1778869304, - "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", + "lastModified": 1780243769, + "narHash": "sha256-x5UQuRsH3MqI0U9afaXSNqzTPSeZlRLvFAav2Ux1pNw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", + "rev": "331800de5053fcebacf6813adb5db9c9dca22a0c", "type": "github" }, "original": { "owner": "nixos", - "repo": "nixpkgs", - "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1778869304, - "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } @@ -75,21 +58,22 @@ "nixvim": { "inputs": { "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_2", + "nixpkgs": [ + "nixpkgs" + ], "systems": "systems_2" }, "locked": { - "lastModified": 1779142999, - "narHash": "sha256-KcXaaS7489oPtzW51a7bKSsMeeF4yDjs9GWQ4qA9i4k=", + "lastModified": 1780646548, + "narHash": "sha256-Ckyl/l1XBmEwnaHcHD8PvBZk1uph0NqwbJ//CAvB7iE=", "owner": "nix-community", "repo": "nixvim", - "rev": "9b28a7e6e3e6f61b114a550941abfc9fce0645cc", + "rev": "816a15282e58678dde831477964987d0262d4293", "type": "github" }, "original": { "owner": "nix-community", "repo": "nixvim", - "rev": "9b28a7e6e3e6f61b114a550941abfc9fce0645cc", "type": "github" } }, @@ -117,15 +101,16 @@ }, "systems_2": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1774449309, + "narHash": "sha256-brhZ8DmuGtzkCYHJg4HEd602amKm89Y9ytsFZ5uWD1w=", "owner": "nix-systems", "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "rev": "c29398b59d2048c4ab79345812849c9bd15e9150", "type": "github" }, "original": { "owner": "nix-systems", + "ref": "future-26.11", "repo": "default", "type": "github" } diff --git a/flake.nix b/flake.nix index 12b7322f..7c8c8a38 100644 --- a/flake.nix +++ b/flake.nix @@ -2,9 +2,10 @@ description = "Neve is a Neovim configuration built with Nixvim, which allows you to use Nix language to manage Neovim plugins/options"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/d233902339c02a9c334e7e593de68855ad26c4cb"; - nixvim.url = "github:nix-community/nixvim/9b28a7e6e3e6f61b114a550941abfc9fce0645cc"; - flake-utils.url = "github:numtide/flake-utils/11707dc2f618dd54ca8739b309ec4fc024de578b"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixvim.url = "github:nix-community/nixvim"; + nixvim.inputs.nixpkgs.follows = "nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; }; outputs = @@ -17,7 +18,6 @@ }@inputs: let config = import ./config; # import the module directly - # Enable unfree packages nixpkgsConfig = { allowUnfree = true; }; @@ -46,37 +46,25 @@ { checks = { # Run `nix flake check .` to verify that your config is not broken - default = (nixvimLib.check.mkTestDerivationFromNvim { - inherit nvim; - name = "Neve"; - }).overrideAttrs (oldAttrs: { - # Neovim 0.12 requires $HOME/.local/share/nvim for stdpath('data'). - # The nixvim test harness only creates .cache/nvim. Pre-create the - # missing directory before running nvim. - buildCommand = '' - mkdir -p .local/share/nvim - '' + oldAttrs.buildCommand; - }); + default = + (nixvimLib.check.mkTestDerivationFromNvim { + inherit nvim; + name = "Neve"; + }).overrideAttrs + (oldAttrs: { + # Neovim 0.12 requires $HOME/.local/share/nvim for stdpath('data'). + # The nixvim test harness only creates .cache/nvim. Pre-create the + # missing directory before running nvim. + buildCommand = '' + mkdir -p .local/share/nvim + '' + + oldAttrs.buildCommand; + }); }; packages = { # Lets you run `nix run .` to start nixvim default = nvim; - - # Wrapped with Lua runtimepath fix for Neovim 0.12 - wrapped = pkgs.symlinkJoin { - name = "neve-wrapped"; - paths = [ nvim ]; - postBuild = '' - mv $out/bin/nvim $out/bin/.nvim-real - cat > $out/bin/nvim << 'SCRIPT' - #!/bin/sh - exec "$(dirname "$0")/.nvim-real" --cmd "lua for _,p in ipairs(vim.api.nvim_get_runtime_file('lua',true)) do package.path=package.path..';'..p..'/?.lua;'..p..'/?/init.lua' end" "$@" - SCRIPT - chmod +x $out/bin/nvim - ''; - meta.mainProgram = "nvim"; - }; }; formatter = pkgs.nixfmt-rfc-style; From 50bd00b8150e9c53fdf9da6df8d3f6ab2dc184ca Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 01:12:55 -0300 Subject: [PATCH 33/37] docs: remove HEALTH.md checkhealth is the live source of truth; a static snapshot of its output goes stale on every nixvim/nixpkgs/Neovim bump (already inaccurate for the nvim-treesitter section and missing newer warnings) and risks masking real issues by labeling everything as expected. --- docs/HEALTH.md | 109 ------------------------------------------------- 1 file changed, 109 deletions(-) delete mode 100644 docs/HEALTH.md diff --git a/docs/HEALTH.md b/docs/HEALTH.md deleted file mode 100644 index a47aa95c..00000000 --- a/docs/HEALTH.md +++ /dev/null @@ -1,109 +0,0 @@ -# Neve Health Exceptions - -This document catalogues `:checkhealth` items that are expected, environment-dependent, -or upstream artifacts — not Neve configuration errors. - -Items are classified as: - -- **Expected** — By-design consequence of using NixVim -- **Environment** — Depends on host tools or user preference -- **User-auth** — Requires per-user authentication -- **Upstream** — Bug or artifact in a third-party plugin or Neovim itself -- **Test artifact** — Plugin self-test failure that does not affect real usage - -## Current Exceptions (2026-05-19) - -### nvim-treesitter — Parser dependency errors -- **Severity:** 6 ❌ -- **Classification:** Upstream / benign fallback -- **Detail:** `html`, `javascript`, `tsx`, and `typescript` parsers declare companion - dependencies (`ecma`, `jsx`, `html_tags`) that are not installed. These companion - parsers provide shared capture groups for edge-case highlighting. Direct Lua API - access to all query files succeeds — parsing and highlighting work correctly without - them. The empty error bodies in healthcheck occur because `'queries'` is a catch-all - pseudo-type for dependency checks, not a real query group. - -### ultimate-autopair — Self-test failures -- **Severity:** 3 ❌ -- **Classification:** Test artifact -- **Detail:** The plugin's self-test suite uses `vim.treesitter.get_string_parser` - (synthetic test harness), while real editor usage uses `vim.treesitter.get_parser` - (live buffer). In Neovim 0.12, these code paths can produce different node trees, - causing false-positive test failures in `rfaswarp` tests. Headless testing confirmed - reverse fastwarp (``) works correctly in live buffers for all three test cases. - No configuration change needed. - -### lazy.nvim — luarocks/hererocks -- **Severity:** 1 ❌, 3 ⚠️ -- **Classification:** Expected -- **Detail:** NixVim manages all plugins through Nix derivations. LuaRocks and hererocks - are not needed and not installed. lazy.nvim's healthcheck warns about this by default. - There is no supported way to disable these warnings in a NixVim-managed config. - -### copilot.lua — LSP client not available -- **Severity:** 1 ❌ -- **Classification:** User-auth -- **Detail:** Copilot requires authentication via `:Copilot auth` with GitHub credentials. - This is a per-user action, not a configuration issue. Users who do not use Copilot - can ignore this; users who do must authenticate once. - -### vim.health — Missing user config -- **Severity:** 1 ⚠️ -- **Classification:** Expected -- **Detail:** NixVim generates its own `init.lua` and does not use - `~/.config/nvim/init.lua`. The missing-user-config warning is expected and harmless. - -### diffview — hg not executable -- **Severity:** 1 ⚠️ -- **Classification:** Environment -- **Detail:** Mercurial (`hg`) is an optional VCS dependency for diffview.nvim. Git is the - only VCS in use. Install `hg` only if Mercurial repositories are needed. - -### project.nvim — No active session / fzf-lua disabled -- **Severity:** 2 ⚠️ -- **Classification:** Expected -- **Detail:** Normal on fresh Neovim start. A session is created after opening a project. - `fzf-lua` integration being disabled is intentional — telescope is the fuzzy finder in use. - -### conform — Language-specific formatters -- **Severity:** 4 ⚠️ -- **Classification:** Environment -- **Detail:** `black` (Python), `rustfmt` (Rust), `google-java-format` (Java), and `prettier` - (fallback) are not included in the Neve closure. These are language-specific tools that - not every user needs. Install them per-project or per-user preference. - `prettierd` is included as the primary web-language formatter. - -### vim.pack — Existing packages in vim-pack-dir -- **Severity:** 1 ⚠️ -- **Classification:** Expected -- **Detail:** NixVim manages plugins via a constructed `vim-pack-dir` at - `/nix/store/...-vim-pack-dir/pack/myNeovimPackages`. `vim.pack` healthcheck - detects these as "existing packages" which is the intended behaviour. - -### vim.treesitter — Java parser up-to-date warning -- **Severity:** 1 ⚠️ -- **Classification:** Upstream -- **Detail:** nvim-treesitter healthcheck warns when a parser may need updating. - This is a per-parser maintenance notice, not a configuration error. Parsers are - managed via Nix derivations and updated with nixpkgs. - -### vim.health — Version number mismatch -- **Severity:** 1 ⚠️ -- **Classification:** Expected -- **Detail:** NixVim wraps Neovim in a derivation that may report a different - `:version` string than the unwrapped binary. This is a packaging artifact and - does not affect functionality. - -### nvim-treesitter — Unknown filetype 'javascript.jsx' -- **Severity:** 1 ⚠️ -- **Classification:** Upstream -- **Detail:** The `javascript.jsx` filetype is a legacy alias. nvim-treesitter's - filetype-to-parser mapping may not recognize it. Does not affect highlighting - or parsing of actual `.jsx` files. - -### nvim-treesitter — Unknown filetype 'typescript.tsx' -- **Severity:** 1 ⚠️ -- **Classification:** Upstream -- **Detail:** The `typescript.tsx` filetype is a legacy alias. nvim-treesitter's - filetype-to-parser mapping may not recognize it. Does not affect highlighting - or parsing of actual `.tsx` files. From dec8853fa2a74622d6c0eb519a4db19e58691e07 Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 01:24:44 -0300 Subject: [PATCH 34/37] feat(markdown-preview): add markdown-preview with peek.nvim So the user can choose which one is better for their needs. --- config/utils/default.nix | 4 +++- config/utils/markdown-preview.nix | 26 ++++++++++++++++++++++++++ config/utils/peek.nix | 9 +++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 config/utils/markdown-preview.nix diff --git a/config/utils/default.nix b/config/utils/default.nix index 59d3f6e5..adfe823d 100644 --- a/config/utils/default.nix +++ b/config/utils/default.nix @@ -9,6 +9,7 @@ ./cloak.nix ./colorizer.nix ./harpoon.nix + ./markdown-preview.nix ./peek.nix ./mini.nix ./neocord.nix @@ -37,7 +38,8 @@ better-escape.enable = lib.mkDefault true; cloak.enable = lib.mkDefault true; harpoon.enable = lib.mkDefault true; - peek.enable = lib.mkDefault true; + markdown-preview.enable = lib.mkDefault true; + peek.enable = lib.mkDefault false; mini.enable = lib.mkDefault true; neocord.enable = lib.mkDefault true; neotest.enable = lib.mkDefault true; diff --git a/config/utils/markdown-preview.nix b/config/utils/markdown-preview.nix new file mode 100644 index 00000000..d3ac17de --- /dev/null +++ b/config/utils/markdown-preview.nix @@ -0,0 +1,26 @@ +{ lib, config, ... }: +{ + options = { + markdown-preview.enable = lib.mkEnableOption "Enable markdown-preview module"; + }; + config = lib.mkIf config.markdown-preview.enable { + + plugins.markdown-preview = { + enable = true; + settings = { + browser = "firefox"; + theme = "dark"; + }; + }; + keymaps = [ + { + mode = "n"; + key = "cp"; + action = "MarkdownPreview"; + options = { + desc = "Markdown Preview"; + }; + } + ]; + }; +} diff --git a/config/utils/peek.nix b/config/utils/peek.nix index dc0fa241..c4a2b766 100644 --- a/config/utils/peek.nix +++ b/config/utils/peek.nix @@ -1,4 +1,9 @@ -{ lib, config, pkgs, ... }: +{ + lib, + config, + pkgs, + ... +}: { options = { peek.enable = lib.mkEnableOption "Enable peek.nvim markdown preview module"; @@ -34,7 +39,7 @@ keymaps = [ { mode = "n"; - key = "cp"; + key = "co"; action = "lua _G.peek_toggle()"; options = { desc = "Toggle Markdown Preview"; From e9df1d6193f31a4d0a8bf4200b08109a658a42c0 Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 01:28:51 -0300 Subject: [PATCH 35/37] =?UTF-8?q?refactor(ui):=20drop=20redundant=20mini.i?= =?UTF-8?q?cons=20from=20web-devicons=20module=20nvim-web-devicons=20and?= =?UTF-8?q?=20mini.icons=20are=20competing=20icon=20providers,=20not=20com?= =?UTF-8?q?plementary=20ones.=20The=20module=20enabled=20both,=20but=20wit?= =?UTF-8?q?hout=20calling=20mock=5Fnvim=5Fweb=5Fdevicons()=20the=20consume?= =?UTF-8?q?r=20plugins=20keep=20requiring=20nvim-web-devicons,=20so=20mini?= =?UTF-8?q?.icons=20just=20loads=20unused=20=E2=80=94=20extra=20startup=20?= =?UTF-8?q?cost=20=20=20and=20a=20risk=20of=20inconsistent=20icons=20for?= =?UTF-8?q?=20no=20benefit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/ui/web-devicons.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/config/ui/web-devicons.nix b/config/ui/web-devicons.nix index 61fa6776..5e5b95ca 100644 --- a/config/ui/web-devicons.nix +++ b/config/ui/web-devicons.nix @@ -7,8 +7,5 @@ plugins.web-devicons = { enable = true; }; - plugins.mini.modules.icons = { - enable = true; - }; }; } From 14c7fcd679e2c5e1aace52a6b391c38301bbe5bd Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 01:30:50 -0300 Subject: [PATCH 36/37] remove(sidebar.nvim): It's been archived for a while now --- config/utils/default.nix | 2 -- config/utils/sidebar.nix | 67 ---------------------------------------- 2 files changed, 69 deletions(-) delete mode 100644 config/utils/sidebar.nix diff --git a/config/utils/default.nix b/config/utils/default.nix index adfe823d..dbfac458 100644 --- a/config/utils/default.nix +++ b/config/utils/default.nix @@ -21,7 +21,6 @@ ./persistence.nix ./plenary.nix ./project-nvim.nix - ./sidebar.nix ./tmux-navigator.nix ./todo-comments.nix ./ultimate-autopair.nix @@ -51,7 +50,6 @@ persistence.enable = lib.mkDefault true; plenary.enable = lib.mkDefault true; project-nvim.enable = lib.mkDefault true; - sidebar.enable = lib.mkDefault false; tmux-navigator.enable = lib.mkDefault true; todo-comments.enable = lib.mkDefault true; ultimate-autopair.enable = lib.mkDefault true; diff --git a/config/utils/sidebar.nix b/config/utils/sidebar.nix deleted file mode 100644 index a67fdc88..00000000 --- a/config/utils/sidebar.nix +++ /dev/null @@ -1,67 +0,0 @@ -{ - lib, - config, - pkgs, - ... -}: -{ - options = { - sidebar.enable = lib.mkEnableOption "Enable sidebar module"; - }; - config = lib.mkIf config.sidebar.enable { - # TODO: migrate to pkgs.vimPlugins.sidebar-nvim when available in nixpkgs - extraPlugins = with pkgs.vimUtils; [ - (buildVimPlugin { - pname = "sidebar.nvim"; - version = "2024-02-07"; - src = pkgs.fetchFromGitHub { - owner = "sidebar-nvim"; - repo = "sidebar.nvim"; - rev = "5695712eef6288fff667343c4ae77c54911bdb1b"; - sha256 = "1p12189367x0x26cys9wxipzwr3i0bmz4lb0s79ki0a49d6zja2c"; - }; - }) - ]; - extraConfigLua = '' - local sidebar = require("sidebar-nvim") - sidebar.setup({ - disable_default_keybindings = 0, - bindings = nil, - open = false, - side = "left", - initial_width = 32, - hide_statusline = false, - update_interval = 1000, - sections = { "git", "containers" }, - section_separator = {"", "-----", ""}, - section_title_separator = {""}, - containers = { - attach_shell = "/bin/sh", show_all = true, interval = 5000, - }, - datetime = { format = "%a %b %d, %H:%M", clocks = { { name = "local" } } }, - todos = { ignored_paths = {} }, - ["git"] = { - icon = "", --  - }, - }) - cmd = { - "SidebarNvimToggle", - "SidebarNvimOpen", - "SidebarNvimFocus", - "SidebarNvimUpdate", - }, - ''; - - keymaps = [ - { - mode = "n"; - key = "e"; - action = ":SidebarNvimToggle"; - options = { - desc = "Toggle Explorer"; - silent = true; - }; - } - ]; - }; -} From db72fd67e73b4922c07fc2319c9f09a6137fb9fb Mon Sep 17 00:00:00 2001 From: redyf Date: Sat, 6 Jun 2026 01:36:08 -0300 Subject: [PATCH 37/37] refactor(config): trim unused tools from extraPackages --- config/default.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/default.nix b/config/default.nix index eeb796d5..af311dca 100644 --- a/config/default.nix +++ b/config/default.nix @@ -7,11 +7,9 @@ { extraPackages = with pkgs; [ fd - tree-sitter nixfmt stylua prettierd - nerd-fonts.symbols-only ]; # Import all your configuration modules here