From 9b938eb50e3b9cd3c6d4dd290dff5c74b6d6cb20 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Thu, 27 Nov 2025 10:23:12 +0000 Subject: [PATCH 01/32] flake: set nixpkgs to 25.11 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit flake.lock updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/a8d610af3f1a5fb71e23e08434d8d61a466fc942?narHash=sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r%2BJerayK/4wvdWA%3D' (2025-11-20) → 'github:NixOS/nixpkgs/2fecba9952096ba043c16b9ef40b92851ff3e5d9?narHash=sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc%3D' (2025-11-26) flake/dev/flake.lock updates: • Updated input 'dev-nixpkgs': 'github:NixOS/nixpkgs/a8d610af3f1a5fb71e23e08434d8d61a466fc942?narHash=sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r%2BJerayK/4wvdWA%3D' (2025-11-20) → 'github:NixOS/nixpkgs/2fecba9952096ba043c16b9ef40b92851ff3e5d9?narHash=sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc%3D' (2025-11-26) --- flake.lock | 8 ++++---- flake.nix | 2 +- flake/dev/flake.lock | 8 ++++---- flake/dev/flake.nix | 2 +- version-info.toml | 9 +++++++-- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/flake.lock b/flake.lock index fc99bdae..da990a70 100644 --- a/flake.lock +++ b/flake.lock @@ -66,16 +66,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1763618868, - "narHash": "sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r+JerayK/4wvdWA=", + "lastModified": 1764173365, + "narHash": "sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a8d610af3f1a5fb71e23e08434d8d61a466fc942", + "rev": "2fecba9952096ba043c16b9ef40b92851ff3e5d9", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-unstable", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } diff --git a/flake.nix b/flake.nix index 4ecd57b7..cd7a9524 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "A neovim configuration system for NixOS"; inputs = { - nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; systems.url = "github:nix-systems/default"; diff --git a/flake/dev/flake.lock b/flake/dev/flake.lock index 76a21e2e..0b525852 100644 --- a/flake/dev/flake.lock +++ b/flake/dev/flake.lock @@ -2,16 +2,16 @@ "nodes": { "dev-nixpkgs": { "locked": { - "lastModified": 1763618868, - "narHash": "sha256-v5afmLjn/uyD9EQuPBn7nZuaZVV9r+JerayK/4wvdWA=", + "lastModified": 1764173365, + "narHash": "sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a8d610af3f1a5fb71e23e08434d8d61a466fc942", + "rev": "2fecba9952096ba043c16b9ef40b92851ff3e5d9", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-unstable", + "ref": "nixos-25.11", "repo": "nixpkgs", "type": "github" } diff --git a/flake/dev/flake.nix b/flake/dev/flake.nix index 56fdf5c9..888e8d30 100644 --- a/flake/dev/flake.nix +++ b/flake/dev/flake.nix @@ -5,7 +5,7 @@ # NOTE: Use a different name to the root flake's inputs.nixpkgs to avoid shadowing it. # NOTE: The only reason we specify a nixpkgs input at all here, is so the other inputs can follow it. # TODO: Once nix 2.26 is more prevalent, follow the root flake's inputs using a "path:../.." input. - dev-nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + dev-nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; # flake-compat is used by the root `default.nix` to allow non-flake users to import nixvim # diff --git a/version-info.toml b/version-info.toml index b72221ad..fe88f82b 100644 --- a/version-info.toml +++ b/version-info.toml @@ -1,8 +1,8 @@ # DO NOT MODIFY! # This file was generated by ci/version-info/default.nix -nixpkgs_rev = "a8d610af3f1a5fb71e23e08434d8d61a466fc942" +nixpkgs_rev = "2fecba9952096ba043c16b9ef40b92851ff3e5d9" release = "25.11" -unstable = true +unstable = false [versions."25.05"] branch = "nixos-25.05" @@ -10,6 +10,11 @@ channel = "nixos-25.05" status = "stable" [versions."25.11"] +branch = "nixos-25.11" +channel = "nixos-25.11" +status = "beta" + +[versions."26.05"] branch = "main" channel = "nixpkgs-unstable" status = "rolling" From eeb1e454f81eb787b8b4d711707551a53197bc30 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sat, 29 Nov 2025 00:21:00 +0000 Subject: [PATCH 02/32] generated: Update - Updated conform-formatters.json - Updated lspconfig-servers.json - Updated unsupported-lspconfig-servers.json --- generated/conform-formatters.json | 1 + generated/lspconfig-servers.json | 6 ++++-- generated/unsupported-lspconfig-servers.json | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/generated/conform-formatters.json b/generated/conform-formatters.json index 77272bf8..adfcaeae 100644 --- a/generated/conform-formatters.json +++ b/generated/conform-formatters.json @@ -214,6 +214,7 @@ "swiftlint", "syntax_tree", "taplo", + "tclfmt", "templ", "terraform_fmt", "terragrunt_hclfmt", diff --git a/generated/lspconfig-servers.json b/generated/lspconfig-servers.json index 94472259..0af57967 100644 --- a/generated/lspconfig-servers.json +++ b/generated/lspconfig-servers.json @@ -117,6 +117,7 @@ "ghdl_ls": "https://github.com/ghdl/ghdl-language-server A language server for VHDL,\nusing ghdl as its backend. `ghdl-ls` is part of pyghdl, for installation\ninstructions see [the upstream\nREADME](https://github.com/ghdl/ghdl/tree/master/pyGHDL/lsp).", "ginko_ls": "Language servers can be used in many editors, such as Visual Studio\nCode, Emacs or Vim Install `ginko_ls` from\nhttps://github.com/Schottkyc137/ginko and add it to path `ginko_ls`\ndoesn't require any configuration.", "gitlab_ci_ls": "https://github.com/alesbrelih/gitlab-ci-ls Language Server for Gitlab CI\n`gitlab-ci-ls` can be installed via cargo: cargo install gitlab-ci-ls", + "gitlab_duo": "GitLab Duo Language Server Configuration for Neovim\nhttps://gitlab.com/gitlab-org/editor-extensions/gitlab-lsp The GitLab\nLSP enables any editor or IDE to integrate with GitLab Duo for\nAI-powered code suggestions via the Language Server Protocol.\nPrerequisites: - Node.js and npm installed - GitLab account with Duo Pro\nlicense - Internet connection for OAuth device flow Setup: 1. Run\n:LspGitLabDuoSignIn to start OAuth authentication 2. Follow the browser\nprompts to authorize 3. Enable inline completion in LspAttach event (see\nexample below) Inline Completion Example:\n\n``` lua\nvim.api.nvim_create_autocmd('LspAttach', {\n callback = function(args)\n local bufnr = args.buf\n local client = assert(vim.lsp.get_client_by_id(args.data.client_id))\n if vim.lsp.inline_completion and\n client:supports_method(vim.lsp.protocol.Methods.textDocument_inlineCompletion, bufnr) then\n vim.lsp.inline_completion.enable(true, { bufnr = bufnr })\n -- Tab to accept suggestion\n vim.keymap.set('i', '', function()\n if vim.lsp.inline_completion.is_visible() then\n return vim.lsp.inline_completion.accept()\n else\n return ''\n end\n end, { expr = true, buffer = bufnr, desc = 'GitLab Duo: Accept suggestion' })\n -- Alt/Option+[ for previous suggestion\n vim.keymap.set('i', '', vim.lsp.inline_completion.select_prev,\n { buffer = bufnr, desc = 'GitLab Duo: Previous suggestion' })\n -- Alt/Option+] for next suggestion\n vim.keymap.set('i', '', vim.lsp.inline_completion.select_next,\n { buffer = bufnr, desc = 'GitLab Duo: Next suggestion' })\n end\n end\n})\n```", "glasgow": "https://github.com/nolanderc/glasgow Provides language features for WGSL\n(WebGPU Shading Language): - Completions: - Local\nfunctions/variables/types. - Fields and swizzles. - Builtin types and\nfunctions (`dot`, `reflect`, `textureSample`, `vec3`, `mat4x2`, etc.) -\nHover Documentation: - Function signatures. - Variable types. - Includes\nbuiltin types and functions. Text is taken from the WGSL\nspecification. - Goto Definition - Find all References - Rename -\nFormatter `glasgow` can be installed via `cargo`:\n\n``` sh\ncargo install glasgow\n```", "gleam": "https://github.com/gleam-lang/gleam A language server for Gleam\nProgramming Language. It comes with the Gleam compiler, for installation\nsee: [Installing Gleam](https://gleam.run/getting-started/installing/)", "glint": "https://github.com/typed-ember/glint\nhttps://typed-ember.gitbook.io/glint/ `glint-language-server` is\ninstalled when adding `@glint/core` to your project's devDependencies:\n\\`\\``sh npm install @glint/core --save-dev yarn add -D @glint/core This configuration uses the local installation of`glint-language-server`(found in the`node_modules`directory of your project). To use a global installation of`glint-language-server`, set the`init_options.glint.useGlobal`to`true\\`.\nvim.lsp.config('glint', { init_options = { glint = { useGlobal = true,\n}, }, })", @@ -162,7 +163,6 @@ "kulala_ls": "https://github.com/mistweaverco/kulala-ls A minimal language server for\nHTTP syntax.", "laravel_ls": "https://github.com/laravel-ls/laravel-ls `laravel-ls`, language server\nfor laravel The default `cmd` assumes that the `laravel-ls` binary can\nbe found in `$PATH`.", "lean3ls": "https://github.com/leanprover/lean-client-js/tree/master/lean-language-server\nLean installation instructions can be found\n[here](https://leanprover-community.github.io/get_started.html#regular-install).\nOnce Lean is installed, you can install the Lean 3 language server by\nrunning\n\n``` sh\nnpm install -g lean-language-server\n```\n\nNote: that if you're using\n[lean.nvim](https://github.com/Julian/lean.nvim), that plugin fully\nhandles the setup of the Lean language server, and you shouldn't set up\n`lean3ls` both with it and `lspconfig`.", - "leanls": "https://github.com/leanprover/lean4 Lean installation instructions can\nbe found\n[here](https://leanprover-community.github.io/get_started.html#regular-install).\nThe Lean language server is included in any Lean installation and does\nnot require any additional packages. Note: that if you're using\n[lean.nvim](https://github.com/Julian/lean.nvim), that plugin fully\nhandles the setup of the Lean language server, and you shouldn't set up\n`leanls` both with it and `lspconfig`.", "lelwel_ls": "https://github.com/0x2a-42/lelwel Language server for lelwel grammars.\nYou can install `lelwel-ls` via cargo:\n\n``` sh\ncargo install --features=\"lsp\" lelwel\n```", "lemminx": "https://github.com/eclipse/lemminx The easiest way to install the server\nis to get a binary from\nhttps://github.com/redhat-developer/vscode-xml/releases and place it on\nyour PATH. NOTE to macOS users: Binaries from unidentified developers\nare blocked by default. If you trust the downloaded binary, run it once,\ncancel the prompt, then remove the binary from Gatekeeper quarantine\nwith `xattr -d com.apple.quarantine lemminx`. It should now run without\nbeing blocked.", "lexical": "https://github.com/lexical-lsp/lexical Lexical is a next-generation\nlanguage server for the Elixir programming language. Follow the\n[Detailed Installation\nInstructions](https://github.com/lexical-lsp/lexical/blob/main/pages/installation.md)\n**By default, `lexical` doesn't have a `cmd` set.** This is because\nnvim-lspconfig does not make assumptions about your path.", @@ -312,6 +312,7 @@ "tailwindcss": "https://github.com/tailwindlabs/tailwindcss-intellisense Tailwind CSS\nLanguage Server can be installed via npm: npm install -g\n@tailwindcss/language-server", "taplo": "https://taplo.tamasfe.dev/cli/usage/language-server.html Language server\nfor Taplo, a TOML toolkit. `taplo-cli` can be installed via `cargo`:\n\n``` sh\ncargo install --features lsp --locked taplo-cli\n```", "tblgen_lsp_server": "https://mlir.llvm.org/docs/Tools/MLIRLSP/#tablegen-lsp-language-server--tblgen-lsp-server\nThe Language Server for the LLVM TableGen language `tblgen-lsp-server`\ncan be installed at the llvm-project repository\n(https://github.com/llvm/llvm-project)", + "tclsp": "https://github.com/nmoroze/tclint `tclsp`, a language server for Tcl\n`tclsp` can be installed via `pipx`:\n\n``` sh\npipx install tclint\n```\n\nOr via `pip`:\n\n``` sh\npip install tclint\n```", "teal_ls": "https://github.com/teal-language/teal-language-server Install with:\n\n luarocks install teal-language-server\n\nOptional Command Args: \\* \"--log-mode=by_date\" - Enable logging in\n\\$HOME/.cache/teal-language-server. Log name will be date + pid of\nprocess \\* \"--log-mode=by_proj_path\" - Enable logging in\n\\$HOME/.cache/teal-language-server. Log name will be project path + pid\nof process \\* \"--verbose=true\" - Increases log level. Does nothing\nunless log-mode is set", "templ": "https://templ.guide The official language server for the templ HTML\ntemplating language.", "termux_language_server": "https://github.com/termux/termux-language-server Language server for\nvarious bash scripts such as Arch PKGBUILD, Gentoo ebuild, Termux\nbuild.sh, etc.", @@ -358,7 +359,8 @@ "visualforce_ls": "https://github.com/forcedotcom/salesforcedx-vscode Language server for\nVisualforce. For manual installation, download the .vsix archive file\nfrom the\n[forcedotcom/salesforcedx-vscode](https://github.com/forcedotcom/salesforcedx-vscode)\nGitHub releases. Then, configure `cmd` to run the Node script at the\nunpacked location:\n\n``` lua\nvim.lsp.config('visualforce_ls', {\n cmd = {\n 'node',\n '/path/to/unpacked/archive/extension/node_modules/@salesforce/salesforcedx-visualforce-language-server/out/src/visualforceServer.js',\n '--stdio'\n }\n})\n```", "vls": "https://github.com/vlang/vls V language server. `v-language-server` can\nbe installed by following the instructions\n[here](https://github.com/vlang/vls#installation).", "volar": "Renamed to [vue_ls](#vue_ls)", - "vscoqtop": "https://github.com/coq-community/vscoq", + "vscoqtop": "Renamed to [vsrocq](#vsrocq)", + "vsrocq": "https://github.com/rocq-prover/vsrocq", "vtsls": "https://github.com/yioneko/vtsls `vtsls` can be installed with npm:\n\n``` sh\nnpm install -g @vtsls/language-server\n```\n\nTo configure a TypeScript project, add a\n[`tsconfig.json`](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html)\nor\n[`jsconfig.json`](https://code.visualstudio.com/docs/languages/jsconfig)\nto the root of your project. \\### Vue support Since v3.0.0, the Vue\nlanguage server requires `vtsls` to support TypeScript.\n\n -- If you are using mason.nvim, you can get the ts_plugin_path like this\n -- For Mason v1,\n -- local mason_registry = require('mason-registry')\n -- local vue_language_server_path = mason_registry.get_package('vue-language-server'):get_install_path() .. '/node_modules/@vue/language-server'\n -- For Mason v2,\n -- local vue_language_server_path = vim.fn.expand '$MASON/packages' .. '/vue-language-server' .. '/node_modules/@vue/language-server'\n -- or even\n -- local vue_language_server_path = vim.fn.stdpath('data') .. \"/mason/packages/vue-language-server/node_modules/@vue/language-server\"\n local vue_language_server_path = '/path/to/@vue/language-server'\n local vue_plugin = {\n name = '@vue/typescript-plugin',\n location = vue_language_server_path,\n languages = { 'vue' },\n configNamespace = 'typescript',\n }\n vim.lsp.config('vtsls', {\n settings = {\n vtsls = {\n tsserver = {\n globalPlugins = {\n vue_plugin,\n },\n },\n },\n },\n filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },\n })\n\n- `location` MUST be defined. If the plugin is installed in\n `node_modules`, `location` can have any value.\n- `languages` must include vue even if it is listed in filetypes.\n- `filetypes` is extended here to include Vue SFC. You must make sure\n the Vue language server is setup. For example,\n\n\n\n vim.lsp.enable('vue_ls')\n\nSee `vue_ls` section and\nhttps://github.com/vuejs/language-tools/wiki/Neovim for more\ninformation. \\### Monorepo support `vtsls` supports monorepos by\ndefault. It will automatically find the `tsconfig.json` or\n`jsconfig.json` corresponding to the package you are working on. This\nworks without the need of spawning multiple instances of `vtsls`, saving\nmemory. It is recommended to use the same version of TypeScript in all\npackages, and therefore have it available in your workspace root. The\nlocation of the TypeScript binary will be determined automatically, but\nonly once.", "vue_ls": "https://github.com/vuejs/language-tools/tree/master/packages/language-server\nThe official language server for Vue It can be installed via npm:\n\n``` sh\nnpm install -g @vue/language-server\n```\n\nThe language server only supports Vue 3 projects by default. For Vue 2\nprojects, [additional\nconfiguration](https://github.com/vuejs/language-tools/blob/master/extensions/vscode/README.md?plain=1#L19)\nare required. The Vue language server works in \"hybrid mode\" that\nexclusively manages the CSS/HTML sections. You need the `vtsls` server\nwith the `@vue/typescript-plugin` plugin to support TypeScript in `.vue`\nfiles. See `vtsls` section and\nhttps://github.com/vuejs/language-tools/wiki/Neovim for more\ninformation. NOTE: Since v3.0.0, the Vue Language Server [no longer\nsupports takeover\nmode](https://github.com/vuejs/language-tools/pull/5248).", "wasm_language_tools": "https://github.com/g-plane/wasm-language-tools WebAssembly Language\nTools aims to provide and improve the editing experience of WebAssembly\nText Format. It also provides an out-of-the-box formatter (a.k.a. pretty\nprinter) for WebAssembly Text Format.", diff --git a/generated/unsupported-lspconfig-servers.json b/generated/unsupported-lspconfig-servers.json index 3ece3ed6..27387e79 100644 --- a/generated/unsupported-lspconfig-servers.json +++ b/generated/unsupported-lspconfig-servers.json @@ -8,6 +8,7 @@ "delphi_ls", "drools_lsp", "haxe_language_server", + "leanls", "openedge_ls", "pkgbuild_language_server", "relay_lsp", From 17d3a903aca30364a8b5e7008601f0a317c7dec7 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Tue, 25 Nov 2025 13:58:16 +0100 Subject: [PATCH 03/32] plugins/conform-nvim: update formatter-packages (cherry picked from commit e39c85a2a5a1d46cae8ee6ce9615eb50cd9a23d3) --- plugins/by-name/conform-nvim/formatter-packages.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/by-name/conform-nvim/formatter-packages.nix b/plugins/by-name/conform-nvim/formatter-packages.nix index e916254e..fe722b05 100644 --- a/plugins/by-name/conform-nvim/formatter-packages.nix +++ b/plugins/by-name/conform-nvim/formatter-packages.nix @@ -21,6 +21,8 @@ rec { # 2025-10-12 build failure on Darwin smlfmt = if stdenv.isDarwin then sType.broken else smlfmt; + # 2025-11-25 build failure + roc = sType.broken; # 2025-09-13 build failure inko = sType.broken; # 2025-09-17 build failure @@ -76,6 +78,7 @@ rec { spotless_maven = sType.unpackaged; standard-clj = sType.unpackaged; standardjs = sType.unpackaged; + tclfmt = sType.unpackaged; tlint = sType.unpackaged; twig-cs-fixer = sType.unpackaged; typstfmt = sType.unpackaged; From 04f4f0af486790d827e4c137eb7d8936e846ad13 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Tue, 25 Nov 2025 14:13:23 +0100 Subject: [PATCH 04/32] plugins/lsp/lsp-packages: update (cherry picked from commit 1cca516a54462a76fa117357d57cbb7ff5df0338) --- plugins/lsp/lsp-packages.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/lsp/lsp-packages.nix b/plugins/lsp/lsp-packages.nix index e4c8908a..6f4b0f11 100644 --- a/plugins/lsp/lsp-packages.nix +++ b/plugins/lsp/lsp-packages.nix @@ -58,6 +58,7 @@ "gh_actions_ls" "ghdl_ls" "ginko_ls" + "gitlab_duo" "glasgow" "glint" "gnls" @@ -153,6 +154,7 @@ "stylua3p_ls" "svlangserver" "tabby_ml" + "tclsp" "termux_language_server" "textlsp" "theme_check" @@ -278,7 +280,7 @@ just = "just-lsp"; koka = "koka"; kotlin_language_server = "kotlin-language-server"; - leanls = "lean4"; + lean3ls = "lean4"; lemminx = "lemminx"; lsp_ai = "lsp-ai"; ltex = "ltex-ls"; @@ -426,6 +428,10 @@ vimls = "vim-language-server"; vls = "vlang"; volar = "vue-language-server"; + vsrocq = [ + "rocqPackages" + "vsrocq-language-server" + ]; vtsls = "vtsls"; vue_ls = "vue-language-server"; wgsl_analyzer = "wgsl-analyzer"; From fb9bb5d5484c3cf287ba7ca729f79a8f3b823c2f Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Wed, 26 Nov 2025 23:11:29 +0100 Subject: [PATCH 05/32] tests/plugins/dap-view: remove deprecated settings.winbar.base_sections.*.action (cherry picked from commit 7bce9d28eaa1db7c65ecbc2b932de2e001b4b505) --- .../plugins/by-name/dap-view/default.nix | 40 ------------------- 1 file changed, 40 deletions(-) diff --git a/tests/test-sources/plugins/by-name/dap-view/default.nix b/tests/test-sources/plugins/by-name/dap-view/default.nix index 500ec633..045c9bcb 100644 --- a/tests/test-sources/plugins/by-name/dap-view/default.nix +++ b/tests/test-sources/plugins/by-name/dap-view/default.nix @@ -26,81 +26,41 @@ keymap = "B"; label = "Breakpoints [B]"; short_label = " [B]"; - action.__raw = '' - function() - require("dap-view.views").switch_to_view("breakpoints") - end - ''; }; scopes = { keymap = "S"; label = "Scopes [S]"; short_label = "󰂥 [S]"; - action.__raw = '' - function() - require("dap-view.views").switch_to_view("scopes") - end - ''; }; exceptions = { keymap = "E"; label = "Exceptions [E]"; short_label = "󰢃 [E]"; - action.__raw = '' - function() - require("dap-view.views").switch_to_view("exceptions") - end - ''; }; watches = { keymap = "W"; label = "Watches [W]"; short_label = "󰛐 [W]"; - action.__raw = '' - function() - require("dap-view.views").switch_to_view("watches") - end - ''; }; threads = { keymap = "T"; label = "Threads [T]"; short_label = "󱉯 [T]"; - action.__raw = '' - function() - require("dap-view.views").switch_to_view("threads") - end - ''; }; repl = { keymap = "R"; label = "REPL [R]"; short_label = "󰯃 [R]"; - action.__raw = '' - function() - require("dap-view.repl").show() - end - ''; }; sessions = { keymap = "K"; label = "Sessions [K]"; short_label = " [K]"; - action.__raw = '' - function() - require("dap-view.views").switch_to_view("sessions") - end - ''; }; console = { keymap = "C"; label = "Console [C]"; short_label = "󰆍 [C]"; - action.__raw = '' - function() - require("dap-view.term").show() - end - ''; }; }; custom_sections.__empty = { }; From c2cc8b5a18eccd969a719fa11c7f5d40adfb7fd5 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Wed, 26 Nov 2025 23:21:53 +0100 Subject: [PATCH 06/32] tests/plugins/leanls: disable plugins.lsp.leanls in disableLsp (cherry picked from commit 960c269f6d80209dc49c42412c2c18d382d90b65) --- tests/test-sources/plugins/by-name/lean/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/test-sources/plugins/by-name/lean/default.nix b/tests/test-sources/plugins/by-name/lean/default.nix index eca9b1ea..192beae2 100644 --- a/tests/test-sources/plugins/by-name/lean/default.nix +++ b/tests/test-sources/plugins/by-name/lean/default.nix @@ -14,7 +14,11 @@ lsp = { enable = true; - servers.leanls.enable = true; + # FIXME: 2025-11-26: Enabling `plugins.lsp.leanls` throws the following warning: + # The option definition `plugins.lsp.servers.leanls' in ... no longer has any effect; please remove it. + # nvim-lspconfig has switched from its own LSP configuration API to neovim's built-in LSP API. + # 'leanls' has not been updated to support neovim's built-in LSP API. + # servers.leanls.enable = true; }; lean = { From cd938720c61c8f80fce3975f952f334b559ccb46 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Thu, 27 Nov 2025 00:05:25 +0100 Subject: [PATCH 07/32] tests/all-package-defaults: disable vimPlugins.nvim-spectre (build failure) (cherry picked from commit 79bfadb32a0a58ebb6a2f786d58420feaf6edaf8) --- tests/all-package-defaults.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/all-package-defaults.nix b/tests/all-package-defaults.nix index 8c0d9d11..a12fe880 100644 --- a/tests/all-package-defaults.nix +++ b/tests/all-package-defaults.nix @@ -59,6 +59,9 @@ let "rustaceanvim" ] ++ lib.optionals hostPlatform.isDarwin [ + # 2025-11-26 build failure + "nvim-spectre" + # 2025-11-16 dependencies pyarrow and kvazaar are broken "aider.nvim" From 5836ccd3352853500acd1c00f401c3ad367a3bb6 Mon Sep 17 00:00:00 2001 From: saygo-png Date: Thu, 27 Nov 2025 00:40:49 +0100 Subject: [PATCH 08/32] plugins/conform: refactor the autoInstall option implementation Signed-off-by: saygo-png (cherry picked from commit 96d3538c32816992f30d858095aa93c9ee32fd45) --- plugins/by-name/conform-nvim/auto-install.nix | 31 +++-- plugins/by-name/conform-nvim/default.nix | 18 +-- .../conform-nvim/formatter-packages.nix | 128 +++++++++--------- 3 files changed, 91 insertions(+), 86 deletions(-) diff --git a/plugins/by-name/conform-nvim/auto-install.nix b/plugins/by-name/conform-nvim/auto-install.nix index 7e25aeaf..81c86087 100644 --- a/plugins/by-name/conform-nvim/auto-install.nix +++ b/plugins/by-name/conform-nvim/auto-install.nix @@ -8,26 +8,27 @@ let inherit (builtins) filter isString + isFunction isAttrs attrValues attrNames concatMap partition ; - - inherit (import ./formatter-packages.nix { inherit pkgs lib; }) sType formatter-packages; - sTypeList = attrValues sType; - isSTypeAttrSet = x: lib.elem (x.mark or null) sTypeList; + inherit (import ./formatter-packages.nix { inherit pkgs lib; }) states formatter-packages; in rec { - cleanMaybePackageList = filter (x: !isSTypeAttrSet x); - - getPackageByName = + getPackageOrStateByName = { configuredFormatters, overrides }: name: let permittedNames = lib.optionals (lib.isAttrs configuredFormatters) (attrNames configuredFormatters); - isSType = x: elem x sTypeList; + stateList = map (state: lib.fix (lib.toFunction state)) (attrValues states); + isState = + maybePackage: + lib.throwIf (isFunction maybePackage) "The '${name}' conform-nvim formatter package is a function" ( + elem maybePackage stateList + ); notFoundMsg = '' A package for the conform-nvim formatter '${name}' could not be found. It is not a user defined formatter. Is the formatter name correct? @@ -36,15 +37,17 @@ rec { overrides.${name} or formatter-packages.${name} or pkgs.${name} or (throwIfNot (elem name permittedNames) notFoundMsg null); in - if isSType maybePackage then + if isState maybePackage then { - inherit name; - mark = maybePackage; + wrong = { + inherit name; + mark = maybePackage; + }; } else - maybePackage; + { right = maybePackage; }; - mkWarnsFromMaybePackageList = + mkWarnsFromStates = opts: list: let mkWarn = @@ -61,7 +64,7 @@ rec { } ]; in - concatMap mkWarn (filter isSTypeAttrSet list); + concatMap mkWarn list; collectFormatters = formatters: diff --git a/plugins/by-name/conform-nvim/default.nix b/plugins/by-name/conform-nvim/default.nix index bc0da68e..bd25b630 100644 --- a/plugins/by-name/conform-nvim/default.nix +++ b/plugins/by-name/conform-nvim/default.nix @@ -245,21 +245,21 @@ lib.nixvim.plugins.mkNeovimPlugin { let inherit (cfg.autoInstall) enable enableWarnings; inherit (import ./auto-install.nix { inherit pkgs lib; }) - getPackageByName + getPackageOrStateByName collectFormatters - cleanMaybePackageList - mkWarnsFromMaybePackageList + mkWarnsFromStates ; - getPackageByNameWith = getPackageByName { + getPackageOrStateByNameWith = getPackageOrStateByName { configuredFormatters = cfg.settings.formatters; inherit (cfg.autoInstall) overrides; }; - names = collectFormatters (attrValues cfg.settings.formatters_by_ft or { }); - packageList = map getPackageByNameWith names; - warns = (mkWarnsFromMaybePackageList opts) packageList; + formatterNames = collectFormatters (attrValues (cfg.settings.formatters_by_ft or { })); + packagesAndStates = lib.foldAttrs (item: acc: [ item ] ++ acc) [ ] ( + map getPackageOrStateByNameWith formatterNames + ); in { - warnings = lib.mkIf (enable && warns != [ ] && enableWarnings) warns; - extraPackages = lib.mkIf enable (cleanMaybePackageList packageList); + warnings = lib.mkIf (enable && enableWarnings) (mkWarnsFromStates opts packagesAndStates.wrong); + extraPackages = lib.mkIf enable packagesAndStates.right; }; } diff --git a/plugins/by-name/conform-nvim/formatter-packages.nix b/plugins/by-name/conform-nvim/formatter-packages.nix index fe722b05..2c8419a1 100644 --- a/plugins/by-name/conform-nvim/formatter-packages.nix +++ b/plugins/by-name/conform-nvim/formatter-packages.nix @@ -3,32 +3,34 @@ ... }: with pkgs; -rec { - sType = { - broken = "broken"; - darwinOnly = "Darwin only"; +let + states = { + broken = _package: "broken"; + darwinOnly = _package: "Darwin only"; unpackaged = "unpackaged"; }; - +in +{ + inherit states; formatter-packages = { # 2025-11-15 dependency swift is broken # https://github.com/NixOS/nixpkgs/issues/461474 - swift = sType.broken; - swift_format = sType.broken; - swiftformat = sType.broken; - swiftlint = sType.broken; + swift = states.broken swift; + swift_format = states.broken swift-format; + swiftformat = states.broken swiftformat; + swiftlint = states.broken swiftlint; # 2025-10-12 build failure on Darwin - smlfmt = if stdenv.isDarwin then sType.broken else smlfmt; + smlfmt = if stdenv.isDarwin then states.broken smlfmt else smlfmt; # 2025-11-25 build failure - roc = sType.broken; + roc = states.broken roc; # 2025-09-13 build failure - inko = sType.broken; + inko = states.broken inko; # 2025-09-17 build failure - gci = sType.broken; + gci = states.broken gci; # 2025-10-08 build failure (haskellPackages.hindent) - hindent = sType.broken; + hindent = states.broken haskellPackages.hindent; format-queries = null; # Uses neovim itself init = null; # Internal thingamajig @@ -36,55 +38,55 @@ rec { trim_newlines = null; # Conform native formatter trim_whitespace = null; # Conform native formatter - auto_optional = sType.unpackaged; - bake = sType.unpackaged; - blue = sType.unpackaged; - bpfmt = sType.unpackaged; - bsfmt = sType.unpackaged; - caramel_fmt = sType.unpackaged; - crlfmt = sType.unpackaged; - darker = sType.unpackaged; - dcm_fix = sType.unpackaged; - dcm_format = sType.unpackaged; - easy-coding-standard = sType.unpackaged; - findent = sType.unpackaged; - ghokin = sType.unpackaged; - gluon_fmt = sType.unpackaged; - grain_format = sType.unpackaged; - hledger-fmt = sType.unpackaged; - imba_fmt = sType.unpackaged; - janet-format = sType.unpackaged; - json_repair = sType.unpackaged; - liquidsoap-prettier = sType.unpackaged; - llf = sType.unpackaged; - markdown-toc = sType.unpackaged; - markdownfmt = sType.unpackaged; - mdslw = sType.unpackaged; - mojo_format = sType.unpackaged; - nomad_fmt = sType.unpackaged; - npm-groovy-lint = sType.unpackaged; - packer_fmt = sType.unpackaged; - pangu = sType.unpackaged; - perlimports = sType.unpackaged; - pint = sType.unpackaged; - purs-tidy = sType.unpackaged; - pycln = sType.unpackaged; - pyink = sType.unpackaged; - pymarkdownlnt = sType.unpackaged; - reformat-gherkin = sType.unpackaged; - rescript-format = sType.unpackaged; - runic = sType.unpackaged; - spotless_gradle = sType.unpackaged; - spotless_maven = sType.unpackaged; - standard-clj = sType.unpackaged; - standardjs = sType.unpackaged; - tclfmt = sType.unpackaged; - tlint = sType.unpackaged; - twig-cs-fixer = sType.unpackaged; - typstfmt = sType.unpackaged; - vsg = sType.unpackaged; - ziggy = sType.unpackaged; - ziggy_schema = sType.unpackaged; + auto_optional = states.unpackaged; + bake = states.unpackaged; + blue = states.unpackaged; + bpfmt = states.unpackaged; + bsfmt = states.unpackaged; + caramel_fmt = states.unpackaged; + crlfmt = states.unpackaged; + darker = states.unpackaged; + dcm_fix = states.unpackaged; + dcm_format = states.unpackaged; + easy-coding-standard = states.unpackaged; + findent = states.unpackaged; + ghokin = states.unpackaged; + gluon_fmt = states.unpackaged; + grain_format = states.unpackaged; + hledger-fmt = states.unpackaged; + imba_fmt = states.unpackaged; + janet-format = states.unpackaged; + json_repair = states.unpackaged; + liquidsoap-prettier = states.unpackaged; + llf = states.unpackaged; + markdown-toc = states.unpackaged; + markdownfmt = states.unpackaged; + mdslw = states.unpackaged; + mojo_format = states.unpackaged; + nomad_fmt = states.unpackaged; + npm-groovy-lint = states.unpackaged; + packer_fmt = states.unpackaged; + pangu = states.unpackaged; + perlimports = states.unpackaged; + pint = states.unpackaged; + purs-tidy = states.unpackaged; + pycln = states.unpackaged; + pyink = states.unpackaged; + pymarkdownlnt = states.unpackaged; + reformat-gherkin = states.unpackaged; + rescript-format = states.unpackaged; + runic = states.unpackaged; + spotless_gradle = states.unpackaged; + spotless_maven = states.unpackaged; + standard-clj = states.unpackaged; + standardjs = states.unpackaged; + tclfmt = states.unpackaged; + tlint = states.unpackaged; + twig-cs-fixer = states.unpackaged; + typstfmt = states.unpackaged; + vsg = states.unpackaged; + ziggy = states.unpackaged; + ziggy_schema = states.unpackaged; inherit (python313Packages) autopep8; awk = gawk; From ae5d510151fbb39ce4d0a5e463d3e45b1b6d1fe7 Mon Sep 17 00:00:00 2001 From: saygo-png Date: Sat, 29 Nov 2025 10:57:32 +0100 Subject: [PATCH 09/32] plugins/conform: fix eval error Signed-off-by: saygo-png (cherry picked from commit 9d6a7608df21df7593ae1b9a552173d7cc2597c4) --- plugins/by-name/conform-nvim/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/by-name/conform-nvim/default.nix b/plugins/by-name/conform-nvim/default.nix index bd25b630..2f46c522 100644 --- a/plugins/by-name/conform-nvim/default.nix +++ b/plugins/by-name/conform-nvim/default.nix @@ -259,7 +259,9 @@ lib.nixvim.plugins.mkNeovimPlugin { ); in { - warnings = lib.mkIf (enable && enableWarnings) (mkWarnsFromStates opts packagesAndStates.wrong); - extraPackages = lib.mkIf enable packagesAndStates.right; + warnings = lib.mkIf (enable && enableWarnings) ( + mkWarnsFromStates opts (packagesAndStates.wrong or [ ]) + ); + extraPackages = lib.mkIf enable (packagesAndStates.right or [ ]); }; } From 5d3e47d2c58cae00d64a45f2cd36c48d73182e92 Mon Sep 17 00:00:00 2001 From: "nixvim-ci[bot]" <212996653+nixvim-ci[bot]@users.noreply.github.com> Date: Sat, 29 Nov 2025 12:51:15 +0000 Subject: [PATCH 10/32] flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/2fecba9952096ba043c16b9ef40b92851ff3e5d9?narHash=sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc%3D' (2025-11-26) → 'github:NixOS/nixpkgs/ba9b83e5fb4b552a423d24dabe5ccb47a9c89901?narHash=sha256-1LNGcU%2BaTbATD3BPCf7U1KsP1CjCH%2BZWqM6JH0sZ6Q0%3D' (2025-11-28) --- flake.lock | 6 +++--- version-info.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/flake.lock b/flake.lock index da990a70..3c3b6be9 100644 --- a/flake.lock +++ b/flake.lock @@ -66,11 +66,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1764173365, - "narHash": "sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc=", + "lastModified": 1764338033, + "narHash": "sha256-1LNGcU+aTbATD3BPCf7U1KsP1CjCH+ZWqM6JH0sZ6Q0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2fecba9952096ba043c16b9ef40b92851ff3e5d9", + "rev": "ba9b83e5fb4b552a423d24dabe5ccb47a9c89901", "type": "github" }, "original": { diff --git a/version-info.toml b/version-info.toml index fe88f82b..787d4c3a 100644 --- a/version-info.toml +++ b/version-info.toml @@ -1,6 +1,6 @@ # DO NOT MODIFY! # This file was generated by ci/version-info/default.nix -nixpkgs_rev = "2fecba9952096ba043c16b9ef40b92851ff3e5d9" +nixpkgs_rev = "ba9b83e5fb4b552a423d24dabe5ccb47a9c89901" release = "25.11" unstable = false From b09935ccf19e7d2f2bacf7ee056391c243b5f5ee Mon Sep 17 00:00:00 2001 From: "nixvim-ci[bot]" <212996653+nixvim-ci[bot]@users.noreply.github.com> Date: Sat, 29 Nov 2025 12:51:27 +0000 Subject: [PATCH 11/32] flake/dev/flake.lock: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'dev-nixpkgs': 'github:NixOS/nixpkgs/2fecba9952096ba043c16b9ef40b92851ff3e5d9?narHash=sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc%3D' (2025-11-26) → 'github:NixOS/nixpkgs/ba9b83e5fb4b552a423d24dabe5ccb47a9c89901?narHash=sha256-1LNGcU%2BaTbATD3BPCf7U1KsP1CjCH%2BZWqM6JH0sZ6Q0%3D' (2025-11-28) • Updated input 'devshell': 'github:numtide/devshell/07bacc9531f5f4df6657c0a02a806443685f384a?narHash=sha256-RXN%2Blcx4DEn3ZS%2BLqEJSUu/HH%2BdwGvy0syN7hTo/Chg%3D' (2025-11-07) → 'github:numtide/devshell/17ed8d9744ebe70424659b0ef74ad6d41fc87071?narHash=sha256-M7SZyPZiqZUR/EiiBJnmyUbOi5oE/03tCeFrTiUZchI%3D' (2025-11-24) • Updated input 'git-hooks': 'github:cachix/git-hooks.nix/20e71a403c5de9ce5bd799031440da9728c1cda1?narHash=sha256-uIRqs/H18YEtMOn1OkbnPH%2BaNTwXKx%2BiU3qnxEkVUd0%3D' (2025-11-21) → 'github:cachix/git-hooks.nix/50b9238891e388c9fdc6a5c49e49c42533a1b5ce?narHash=sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh%2BM4Qc%3D' (2025-11-24) • Updated input 'home-manager': 'github:nix-community/home-manager/d10a9b16b2a3ee28433f3d1c603f4e9f1fecb8e1?narHash=sha256-AUc78Qv3sWir0hvbmfXoZ7Jzq9VVL97l%2BsP9Jgms%2BJU%3D' (2025-11-21) → 'github:nix-community/home-manager/780be8ef503a28939cf9dc7996b48ffb1a3e04c6?narHash=sha256-jgWzgpIaHbL3USIq0gihZeuy1lLf2YSfwvWEwnfAJUw%3D' (2025-11-28) • Updated input 'nix-darwin': 'github:lnl7/nix-darwin/3bda9f6b14161becbd07b3c56411f1670e19b9b5?narHash=sha256-nJRd4LY2kT3OELfHqdgWjvToNZ4w%2BzKCMzS2R6z4sXE%3D' (2025-11-18) → 'github:lnl7/nix-darwin/e95de00a471d07435e0527ff4db092c84998698e?narHash=sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE%3D' (2025-11-26) --- flake/dev/flake.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/flake/dev/flake.lock b/flake/dev/flake.lock index 0b525852..cce40ae3 100644 --- a/flake/dev/flake.lock +++ b/flake/dev/flake.lock @@ -2,11 +2,11 @@ "nodes": { "dev-nixpkgs": { "locked": { - "lastModified": 1764173365, - "narHash": "sha256-JaNFPy3nywPNxSDpEgFFqvngQww5Igb6twG4NhMo8oc=", + "lastModified": 1764338033, + "narHash": "sha256-1LNGcU+aTbATD3BPCf7U1KsP1CjCH+ZWqM6JH0sZ6Q0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2fecba9952096ba043c16b9ef40b92851ff3e5d9", + "rev": "ba9b83e5fb4b552a423d24dabe5ccb47a9c89901", "type": "github" }, "original": { @@ -23,11 +23,11 @@ ] }, "locked": { - "lastModified": 1762521437, - "narHash": "sha256-RXN+lcx4DEn3ZS+LqEJSUu/HH+dwGvy0syN7hTo/Chg=", + "lastModified": 1764011051, + "narHash": "sha256-M7SZyPZiqZUR/EiiBJnmyUbOi5oE/03tCeFrTiUZchI=", "owner": "numtide", "repo": "devshell", - "rev": "07bacc9531f5f4df6657c0a02a806443685f384a", + "rev": "17ed8d9744ebe70424659b0ef74ad6d41fc87071", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1763741496, - "narHash": "sha256-uIRqs/H18YEtMOn1OkbnPH+aNTwXKx+iU3qnxEkVUd0=", + "lastModified": 1763988335, + "narHash": "sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh+M4Qc=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "20e71a403c5de9ce5bd799031440da9728c1cda1", + "rev": "50b9238891e388c9fdc6a5c49e49c42533a1b5ce", "type": "github" }, "original": { @@ -104,11 +104,11 @@ ] }, "locked": { - "lastModified": 1763748372, - "narHash": "sha256-AUc78Qv3sWir0hvbmfXoZ7Jzq9VVL97l+sP9Jgms+JU=", + "lastModified": 1764361670, + "narHash": "sha256-jgWzgpIaHbL3USIq0gihZeuy1lLf2YSfwvWEwnfAJUw=", "owner": "nix-community", "repo": "home-manager", - "rev": "d10a9b16b2a3ee28433f3d1c603f4e9f1fecb8e1", + "rev": "780be8ef503a28939cf9dc7996b48ffb1a3e04c6", "type": "github" }, "original": { @@ -124,11 +124,11 @@ ] }, "locked": { - "lastModified": 1763505477, - "narHash": "sha256-nJRd4LY2kT3OELfHqdgWjvToNZ4w+zKCMzS2R6z4sXE=", + "lastModified": 1764161084, + "narHash": "sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "3bda9f6b14161becbd07b3c56411f1670e19b9b5", + "rev": "e95de00a471d07435e0527ff4db092c84998698e", "type": "github" }, "original": { From 684cad64bfe36dc98578cd2d7525402c6c8ea414 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sat, 29 Nov 2025 00:55:46 +0000 Subject: [PATCH 12/32] plugins/efmls-configs: avoid reading HTML & JSON aliases f0764db7212003520341ac10ddcee50e9c458a6f added rename aliases for the HTML and JSON options, which print a trace when evaluated: trace: Obsolete option `HTML' is used. It was renamed to `html'. trace: Obsolete option `JSON' is used. It was renamed to `json'. These were correctly removed when introspecting enabled tools, however they were not removed when constructing the "setup options" to serialise as a lua table. (cherry picked from commit b831550ec84f23025a07970865a919f575c16678) --- plugins/by-name/efmls-configs/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/by-name/efmls-configs/default.nix b/plugins/by-name/efmls-configs/default.nix index bf7c2f4a..7973696e 100644 --- a/plugins/by-name/efmls-configs/default.nix +++ b/plugins/by-name/efmls-configs/default.nix @@ -182,7 +182,10 @@ lib.nixvim.plugins.mkNeovimPlugin { ( builtins.removeAttrs cfg.setup [ "all" + # Rename aliases added 2025-06-25 in https://github.com/nix-community/nixvim/pull/3503 "warnings" + "HTML" + "JSON" ] ) ) From a4a84e52527622c6636fc40630ece798ff66d10d Mon Sep 17 00:00:00 2001 From: Heitor Augusto <44377258+HeitorAugustoLN@users.noreply.github.com> Date: Fri, 28 Nov 2025 09:45:45 -0300 Subject: [PATCH 13/32] modules/output: improve waylandSupport (cherry picked from commit d14252433d34d369f03bef84595217811bd7a015) --- modules/top-level/output.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/top-level/output.nix b/modules/top-level/output.nix index e41be416..e85bc464 100644 --- a/modules/top-level/output.nix +++ b/modules/top-level/output.nix @@ -30,8 +30,8 @@ in waylandSupport = mkOption { type = types.bool; - default = pkgs.stdenv.hostPlatform.isLinux; - defaultText = lib.literalExpression "pkgs.stdenv.hostPlatform.isLinux"; + default = lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.wayland; + defaultText = lib.literalExpression "lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.wayland"; description = "Enable additional wayland support, such as wl-clipboard for wayland clipboard syncing."; }; From 30cc2dddc9c81a21d326fd10ed33d1d05d5e2a72 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 30 Nov 2025 17:55:22 +0000 Subject: [PATCH 14/32] ci/update: always cd to the root of the flake Allows running the script from a sub-directory, e.g. cd ci nix-build -A update result/bin/update (cherry picked from commit 8147790da9305b1f216286018f7af865f179aa5a) --- ci/update.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/update.nix b/ci/update.nix index 33c5c887..e1f56aa4 100644 --- a/ci/update.nix +++ b/ci/update.nix @@ -31,6 +31,9 @@ writeShellApplication { update_args+=( "--commit-lock-file" ) fi + # Ensure we run at the root of the flake + cd "$(git rev-parse --show-toplevel)" + currentCommit() { git show --no-patch --format=%h } From 8300ad59dd01a82bc36c89153c631704346b4a02 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 30 Nov 2025 17:41:09 +0000 Subject: [PATCH 15/32] ci/update: build version-info with no-out-link Avoid polluting the `result` symlink when building `version-info`. (cherry picked from commit f02d566f4c16b3317be265e3da6f60cafdd1537f) --- ci/update.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ci/update.nix b/ci/update.nix index e1f56aa4..e4df72be 100644 --- a/ci/update.nix +++ b/ci/update.nix @@ -69,8 +69,7 @@ writeShellApplication { ) fi - nix-build ./ci -A version-info - ./result/bin/version-info + "$(nix-build ./ci -A version-info --no-out-link)"/bin/version-info if [ -n "$commit" ]; then git add version-info.toml From 79b887f068b1d955ed893cea62ad6ba3dcc9665d Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 30 Nov 2025 17:18:48 +0000 Subject: [PATCH 16/32] ci/update: refactor to produce a single lockfile commit Refactors the flake update script to consolidate root and dev lockfile updates into a single commit. Changes include: - Captures and normalizes `nix flake update` output. - Removes reliance on `--commit-lock-file` and `--amend`. - Eliminates the need to track or compare HEAD commits manually. - Only commit when flake.lock, flake/dev/flake.lock, or version-info.toml have changes. (cherry picked from commit d269170e384994f85001277e47bac263fcfe537e) --- ci/update.nix | 126 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 77 insertions(+), 49 deletions(-) diff --git a/ci/update.nix b/ci/update.nix index e4df72be..9c05e78d 100644 --- a/ci/update.nix +++ b/ci/update.nix @@ -26,86 +26,114 @@ writeShellApplication { shift done - update_args=( ) - if [ -n "$commit" ]; then - update_args+=( "--commit-lock-file" ) - fi - # Ensure we run at the root of the flake cd "$(git rev-parse --show-toplevel)" - currentCommit() { - git show --no-patch --format=%h - } + workdir=$(mktemp -d -t update-XXXXXX) + trap 'rm -rf "$workdir"' EXIT + root_update="$workdir/root_update" + dev_update="$workdir/dev_update" + root_msg="$workdir/root_msg" + dev_msg="$workdir/dev_msg" + commit_msg="$workdir/commit_msg" - hasChanges() { - old="$1" - new="$2" - if [ -n "$commit" ]; then - [ "$old" != "$new" ] - elif git diff --quiet; then - return 1 - else - return 0 - fi + cleanUpdateOutput() { + awk --assign prefix="$PWD/" ' + # Find the start of the update info block + /^warning: updating lock file "/ { + if (match($0, /"([^"]+)"/, m)) { + # Print the first line as `{path} updates:` + path = m[1] + sub("^" prefix, "", path) + print path " updates:" + + # Mark that we have entered the update info block + printing=1 + } + next + } + + # Print while in the update info block + printing { + if ($0 == "") exit + print + } + ' "$1" } writeGitHubOutput() { - if [ -n "$use_github_output" ] && [ -n "$commit" ]; then + if [ -n "$use_github_output" ]; then { echo "$1<> "$GITHUB_OUTPUT" fi } versionInfo() { - extra_args=( ) - if [ "$1" = "--amend" ]; then - extra_args+=( - "--amend" - "--no-edit" - ) - fi - + echo "Updating version-info" "$(nix-build ./ci -A version-info --no-out-link)"/bin/version-info - - if [ -n "$commit" ]; then - git add version-info.toml - git commit "''${extra_args[@]}" - fi } # Initialise version-info.toml if [ ! -f version-info.toml ]; then echo "Creating version-info file" - versionInfo -m "version-info: init" + versionInfo + if [ -n "$commit" ]; then + git add version-info.toml + git commit -m "version-info: init" + fi fi + # Commit message summary + { + # Avoid using impure global config from `nix config show commit-lock-file-summary` + nix-instantiate --raw --eval flake.nix --attr nixConfig.commit-lock-file-summary 2>/dev/null \ + || echo -n "flake: Update" + printf '\n' + } >"$commit_msg" + # Update the root lockfile - old=$(currentCommit) echo "Updating root lockfile" - nix flake update "''${update_args[@]}" - new=$(currentCommit) - if hasChanges "$old" "$new"; then - echo "Updating version-info" - versionInfo --amend - writeGitHubOutput root_lock_body + nix flake update 2> >(tee "$root_update" >&2) + cleanUpdateOutput "$root_update" > "$root_msg" + if [ -s "$root_msg" ]; then + { + printf '\n' + cat "$root_msg" + } >>"$commit_msg" + versionInfo + writeGitHubOutput root_lock_body "$root_msg" fi # Update the dev lockfile root_nixpkgs=$(nix eval --raw --file . 'inputs.nixpkgs.rev') - old=$(currentCommit) echo "Updating dev lockfile" - nix flake update "''${update_args[@]}" \ + nix flake update \ --override-input 'dev-nixpkgs' "github:NixOS/nixpkgs/$root_nixpkgs" \ - --flake './flake/dev' - new=$(currentCommit) - if hasChanges "$old" "$new"; then - echo "Updating version-info" - versionInfo --amend - writeGitHubOutput dev_lock_body + --flake './flake/dev' \ + 2> >(tee "$dev_update" >&2) + cleanUpdateOutput "$dev_update" > "$dev_msg" + if [ -s "$dev_msg" ]; then + { + printf '\n' + cat "$dev_msg" + } >>"$commit_msg" + versionInfo + writeGitHubOutput dev_lock_body "$dev_msg" + fi + + # Only commit if at least one file has changes + if git diff --quiet flake.lock flake/dev/flake.lock version-info.toml; then + echo "Nothing to commit" + elif [ -n "$commit" ]; then + echo "Committing" + git add flake.lock flake/dev/flake.lock version-info.toml + git commit --file "$commit_msg" + else + echo "Would commit as (skipping):" + cat "$commit_msg" fi ''; } From 967ba0bbe11cb9e5db56449c56e9d061c2915857 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sun, 30 Nov 2025 17:27:11 +0000 Subject: [PATCH 17/32] flake: explicitly configure commit-lock-file-summary MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sets `nixConfig.commit-lock-file-summary` to "flake: Update", matching the default used by `ci/update`. This ensures consistency when running `nix flake update --commit-lock-file` or `nix flake lock --commit-lock-file` manually. Note: manual updates are discouraged. The `nix-build ci -A update` script should be used to update flakes. This ensures both root and dev lockfiles — as well as `version-info.toml` — are kept in sync. (cherry picked from commit aab92fcc99cdfa81c01d754f5a9047414bb6cf32) --- flake.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/flake.nix b/flake.nix index cd7a9524..7a64a356 100644 --- a/flake.nix +++ b/flake.nix @@ -18,6 +18,7 @@ }; nixConfig = { + commit-lock-file-summary = "flake: Update"; extra-substituters = [ "https://nix-community.cachix.org" ]; extra-trusted-public-keys = [ "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" From e36a7fd47953ffe66edf38e76ace824b415f29ba Mon Sep 17 00:00:00 2001 From: Heitor Augusto <44377258+HeitorAugustoLN@users.noreply.github.com> Date: Fri, 28 Nov 2025 21:14:51 -0300 Subject: [PATCH 18/32] modules/files: ensure derivation is recognized as vim plugin (cherry picked from commit 027c96a16116588dd28728b757a24e2d43d19187) --- modules/top-level/files/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/top-level/files/default.nix b/modules/top-level/files/default.nix index ef4a912e..f2fc052f 100644 --- a/modules/top-level/files/default.nix +++ b/modules/top-level/files/default.nix @@ -77,7 +77,7 @@ in # A directory with all the files in it # Implementation based on NixOS's /etc module - build.extraFiles = pkgs.runCommandLocal "nvim-config" { } '' + build.extraFiles = pkgs.runCommandLocal "nvim-config" { passthru.vimPlugin = true; } '' set -euo pipefail makeEntry() { From 28058b3e09d4866e7c8b410cb25a3d05a540d7be Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 1 Dec 2025 10:10:41 +0100 Subject: [PATCH 19/32] treewide: 25.05 -> 25.11 (cherry picked from commit af1ce0d14c71db04a47d5cf12f2a889874756cc6) --- MAINTAINING.md | 6 +++--- README.md | 8 ++++---- docs/user-guide/faq.md | 2 +- docs/user-guide/install.md | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/MAINTAINING.md b/MAINTAINING.md index f8970c47..0911abb3 100644 --- a/MAINTAINING.md +++ b/MAINTAINING.md @@ -13,9 +13,9 @@ Deprecations should include a comment in the format of: where: -- `n` is the current release; 25.05 at the time of writing -- `n+1` is the next release; 25.11 at the time of writing -- `n+2` is the release following `n+1`; 26.05 at the time of writing +- `n` is the current release; 25.11 at the time of writing +- `n+1` is the next release; 26.05 at the time of writing +- `n+2` is the release following `n+1`; 26.11 at the time of writing If a warning is created on release `n`, then: diff --git a/README.md b/README.md index 1a50ce24..6f87bed4 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ If you have any question, please use the [discussions page](https://github.com/n > Nixvim needs to be installed with a compatible nixpkgs version. > This means that the `main` branch of Nixvim requires to be installed with `nixpkgs-unstable`. > -> If you want to use Nixvim with nixpkgs 25.05 you should use the `nixos-25.05` branch. +> If you want to use Nixvim with nixpkgs 25.11 you should use the `nixos-25.11` branch. For more detail, see the [Installation](https://nix-community.github.io/nixvim) section of our documentation. @@ -108,7 +108,7 @@ let nixvim = import (builtins.fetchGit { url = "https://github.com/nix-community/nixvim"; # If you are not running an unstable channel of nixpkgs, select the corresponding branch of Nixvim. - # ref = "nixos-25.05"; + # ref = "nixos-25.11"; }); in { @@ -151,7 +151,7 @@ flakes, just add the `nixvim` input: inputs.nixvim = { url = "github:nix-community/nixvim"; # If you are not running an unstable channel of nixpkgs, select the corresponding branch of Nixvim. - # url = "github:nix-community/nixvim/nixos-25.05"; + # url = "github:nix-community/nixvim/nixos-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -286,7 +286,7 @@ in pkgs.mkShell { Documentation is available on this project's GitHub Pages page: [https://nix-community.github.io/nixvim](https://nix-community.github.io/nixvim) -The stable documentation is also available at [https://nix-community.github.io/nixvim/25.05](https://nix-community.github.io/nixvim/25.05). +The stable documentation is also available at [https://nix-community.github.io/nixvim/25.11](https://nix-community.github.io/nixvim/25.11). If the option `enableMan` is set to `true` (by default it is), man pages will also be installed containing the same information, they can be viewed with `man nixvim`. diff --git a/docs/user-guide/faq.md b/docs/user-guide/faq.md index 73d9557e..1a23446d 100644 --- a/docs/user-guide/faq.md +++ b/docs/user-guide/faq.md @@ -84,7 +84,7 @@ When using Nixvim, it is possible to encounter errors about something not being ``` This usually means one of two things: -- The nixpkgs version is not in line with NixVim (for example nixpkgs nixos-25.05 is used with NixVim master) +- The nixpkgs version is not in line with NixVim (for example nixpkgs nixos-25.11 is used with NixVim master) - The nixpkgs unstable version used with NixVim is not recent enough. When building nixvim using flakes and our ["standalone mode"][standalone], we usually recommend _not_ declaring a "follows" for `inputs.nixvim`. diff --git a/docs/user-guide/install.md b/docs/user-guide/install.md index 5a373292..1e8dafbb 100644 --- a/docs/user-guide/install.md +++ b/docs/user-guide/install.md @@ -5,7 +5,7 @@ You must use a `nixpkgs` version compatible with the nixvim version you choose. The `main` branch requires to use a _very recent_ version of nixpkgs unstable. In order to guarantee the compatibility between nixvim & nixpkgs it is recommended to always update both at the same time. -When using a `stable` version you must use the corresponding nixvim branch, for example `nixos-25.05` when using NixOS 25.05. +When using a `stable` version you must use the corresponding nixvim branch, for example `nixos-25.11` when using NixOS 25.11. Failure to use the correct branch, or an old revision of nixpkgs will likely result in errors of the form `vimPlugins. attribute not found`. From 6bdabc1359d7658e1d9ce065db37df92e904b581 Mon Sep 17 00:00:00 2001 From: Gaetan Lepage Date: Mon, 1 Dec 2025 19:08:55 +0100 Subject: [PATCH 20/32] flake/dev/flake.nix: use stable branch for home-manager and nix-darwin --- flake/dev/flake.lock | 8 +++++--- flake/dev/flake.nix | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/flake/dev/flake.lock b/flake/dev/flake.lock index cce40ae3..4f544378 100644 --- a/flake/dev/flake.lock +++ b/flake/dev/flake.lock @@ -104,15 +104,16 @@ ] }, "locked": { - "lastModified": 1764361670, - "narHash": "sha256-jgWzgpIaHbL3USIq0gihZeuy1lLf2YSfwvWEwnfAJUw=", + "lastModified": 1764536451, + "narHash": "sha256-BgtcUkBfItu9/yU14IgUaj4rYOanTOUZjUfBP20/ZB4=", "owner": "nix-community", "repo": "home-manager", - "rev": "780be8ef503a28939cf9dc7996b48ffb1a3e04c6", + "rev": "3fdd076e08049a9c7a83149b270440d9787d2df5", "type": "github" }, "original": { "owner": "nix-community", + "ref": "release-25.11", "repo": "home-manager", "type": "github" } @@ -133,6 +134,7 @@ }, "original": { "owner": "lnl7", + "ref": "nix-darwin-25.11", "repo": "nix-darwin", "type": "github" } diff --git a/flake/dev/flake.nix b/flake/dev/flake.nix index 888e8d30..cff73fce 100644 --- a/flake/dev/flake.nix +++ b/flake/dev/flake.nix @@ -25,12 +25,12 @@ }; home-manager = { - url = "github:nix-community/home-manager"; + url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "dev-nixpkgs"; }; nix-darwin = { - url = "github:lnl7/nix-darwin"; + url = "github:lnl7/nix-darwin/nix-darwin-25.11"; inputs.nixpkgs.follows = "dev-nixpkgs"; }; From 48e4df646d1e2b21524680011b3f569a0e892af1 Mon Sep 17 00:00:00 2001 From: saygo-png Date: Mon, 1 Dec 2025 18:32:05 +0100 Subject: [PATCH 21/32] plugins/friendly-snippets: fix warning Signed-off-by: saygo-png (cherry picked from commit ee6ccaae42fc032ca4678951b48f92c635cb8ebc) --- plugins/by-name/friendly-snippets/default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/by-name/friendly-snippets/default.nix b/plugins/by-name/friendly-snippets/default.nix index ae345036..baf160cf 100644 --- a/plugins/by-name/friendly-snippets/default.nix +++ b/plugins/by-name/friendly-snippets/default.nix @@ -27,7 +27,9 @@ lib.nixvim.plugins.mkVimPlugin { { when = config.performance.combinePlugins.enable - && !(builtins.elem "friendly-snippets" config.performance.combinePlugins.standalonePlugins) + && !(builtins.elem "friendly-snippets" ( + map lib.getName config.performance.combinePlugins.standalonePlugins + )) && (enabledConsumers != [ ]); message = '' When using ${options.performance.combinePlugins.enable}, ${options.plugins.friendly-snippets.enable} and ${enabledConsumersPretty}: From 64d9e2616f4ee2acee380d61ccf1f3d610e7e969 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Wed, 3 Dec 2025 05:47:17 +0000 Subject: [PATCH 22/32] modules/version: init with nixpkgsReleaseCheck Inspired by `home.version` and `home.enableNixpkgsReleaseCheck` in Home Manager. Print a warning when `lib` or `pkgs` are from a different release to Nixvim. (cherry picked from commit b0f3a365963c2b7a37833f18c68ee22fb5724cb1) --- modules/misc/default.nix | 1 + modules/misc/version.nix | 74 ++++++++++++++++++++++++++ tests/nixpkgs-module.nix | 1 + tests/test-sources/modules/version.nix | 44 +++++++++++++++ 4 files changed, 120 insertions(+) create mode 100644 modules/misc/version.nix create mode 100644 tests/test-sources/modules/version.nix diff --git a/modules/misc/default.nix b/modules/misc/default.nix index 84c80418..f2d4ca71 100644 --- a/modules/misc/default.nix +++ b/modules/misc/default.nix @@ -4,5 +4,6 @@ ./context.nix ./meta.nix ./nixvim-info.nix + ./version.nix ]; } diff --git a/modules/misc/version.nix b/modules/misc/version.nix new file mode 100644 index 00000000..98c13240 --- /dev/null +++ b/modules/misc/version.nix @@ -0,0 +1,74 @@ +{ + lib, + pkgs, + config, + options, + ... +}: +let + versionInfo = lib.importTOML ../../version-info.toml; +in +{ + options.version = { + release = lib.mkOption { + type = lib.types.str; + default = versionInfo.release; + description = "The Nixvim release."; + internal = true; + readOnly = true; + }; + + isUnstable = lib.mkOption { + type = lib.types.bool; + default = versionInfo.unstable; + description = "Whether Nixvim is from an unstable branch."; + internal = true; + readOnly = true; + }; + + enableNixpkgsReleaseCheck = lib.mkOption { + type = lib.types.bool; + default = true; + example = false; + description = '' + Whether to check for release version mismatch between Nixvim and Nixpkgs. + + Using mismatched versions is likely to cause errors and unexpected behavior. + It is highly recommended to use corresponding Nixvim and Nixpkgs releases. + + When this option is enabled and a mismatch is detected, + a warning will be printed when the Nixvim configuration is evaluated. + ''; + }; + + }; + + config = { + warnings = + let + nixvimRelease = config.version.release; + libRelease = lib.trivial.release; + pkgsRelease = pkgs.lib.trivial.release; + releaseMismatch = nixvimRelease != libRelease || nixvimRelease != pkgsRelease; + in + lib.optional (config.version.enableNixpkgsReleaseCheck && releaseMismatch) '' + You are using${ + if libRelease == pkgsRelease then + " Nixvim version ${nixvimRelease} and Nixpkgs version ${libRelease}." + else + '' + : + - Nixvim version: ${nixvimRelease} + - Nixpkgs version used to evaluate Nixvim: ${libRelease} + - Nixpkgs version used for packages (`pkgs`): ${pkgsRelease}'' + } + + Using mismatched versions is likely to cause errors and unexpected behavior. + It is highly recommended to use corresponding Nixvim and Nixpkgs releases. + + If you insist, you can disable this warning using: + + ${options.version.enableNixpkgsReleaseCheck} = false; + ''; + }; +} diff --git a/tests/nixpkgs-module.nix b/tests/nixpkgs-module.nix index 0eea61da..39e5f768 100644 --- a/tests/nixpkgs-module.nix +++ b/tests/nixpkgs-module.nix @@ -24,6 +24,7 @@ let runNvim = false; runCommand = runCommandLocal; }; + version.enableNixpkgsReleaseCheck = false; } ../modules/misc ../modules/top-level/test.nix diff --git a/tests/test-sources/modules/version.nix b/tests/test-sources/modules/version.nix new file mode 100644 index 00000000..d88f204c --- /dev/null +++ b/tests/test-sources/modules/version.nix @@ -0,0 +1,44 @@ +{ pkgs }: +{ + invalid-pkgs = + { lib, config, ... }: + let + versionInfo = lib.importTOML ../../../version-info.toml; + nixvimRelease = versionInfo.release; + pkgsRelease = ""; + in + { + # The test-suite uses `pkgs = mkForce`, so override it. + # Overlay `pkgs` with an invalid `release`: + _module.args.pkgs = lib.mkOverride 0 ( + pkgs.extend ( + final: prev: { + lib = prev.lib.extend ( + final: prev: { + trivial = prev.trivial // { + release = pkgsRelease; + }; + } + ); + } + ) + ); + + test.warnings = expect: [ + (expect "count" 1) + (expect "any" "You are using:") + (expect "any" "- Nixvim version: ${nixvimRelease}") + (expect "any" "- Nixpkgs version used to evaluate Nixvim: ${nixvimRelease}") + (expect "any" "- Nixpkgs version used for packages (`pkgs`): ${pkgsRelease}") + (expect "any" "If you insist, you can disable this warning using:") + (expect "any" " version.enableNixpkgsReleaseCheck = false;") + ]; + + assertions = [ + { + assertion = config.version.release == nixvimRelease; + message = "Expected `config.version.release` to be ${nixvimRelease}, found ${config.version.release}"; + } + ]; + }; +} From cb9357fe1068cbcec1e6ddc525ab5226f7781d09 Mon Sep 17 00:00:00 2001 From: "nixvim-ci[bot]" <212996653+nixvim-ci[bot]@users.noreply.github.com> Date: Sat, 6 Dec 2025 12:52:15 +0000 Subject: [PATCH 23/32] flake: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit flake.lock updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/ba9b83e5fb4b552a423d24dabe5ccb47a9c89901?narHash=sha256-1LNGcU%2BaTbATD3BPCf7U1KsP1CjCH%2BZWqM6JH0sZ6Q0%3D' (2025-11-28) → 'github:NixOS/nixpkgs/c97c47f2bac4fa59e2cbdeba289686ae615f8ed4?narHash=sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA%3D' (2025-12-04) flake/dev/flake.lock updates: • Updated input 'dev-nixpkgs': 'github:NixOS/nixpkgs/ba9b83e5fb4b552a423d24dabe5ccb47a9c89901?narHash=sha256-1LNGcU%2BaTbATD3BPCf7U1KsP1CjCH%2BZWqM6JH0sZ6Q0%3D' (2025-11-28) → 'github:NixOS/nixpkgs/c97c47f2bac4fa59e2cbdeba289686ae615f8ed4?narHash=sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA%3D' (2025-12-04) • Updated input 'flake-compat': 'github:NixOS/flake-compat/01ad7ce89c455171e4f864799b21d0785ba94a3a?narHash=sha256-bHDJDoMHMMctf90Ug0po2LNanPgdB8aRl0psH7%2BTWzc%3D' (2025-10-27) → 'github:NixOS/flake-compat/4dd386262c30922367e6b549c81e9cbdf8f3132f?narHash=sha256-JbjxGEA9gVRZ47LylRFe7TLVjI2KaoW0cwflbQ2apBs%3D' (2025-12-04) • Updated input 'git-hooks': 'github:cachix/git-hooks.nix/50b9238891e388c9fdc6a5c49e49c42533a1b5ce?narHash=sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh%2BM4Qc%3D' (2025-11-24) → 'github:cachix/git-hooks.nix/548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c?narHash=sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ%3D' (2025-12-06) • Updated input 'home-manager': 'github:nix-community/home-manager/3fdd076e08049a9c7a83149b270440d9787d2df5?narHash=sha256-BgtcUkBfItu9/yU14IgUaj4rYOanTOUZjUfBP20/ZB4%3D' (2025-11-30) → 'github:nix-community/home-manager/f63d0fe9d81d36e5fc95497217a72e02b8b7bcab?narHash=sha256-0GsEtXV9OquDQ1VclQfP16cU5VZh7NEVIOjSH4UaJuM%3D' (2025-12-04) --- flake.lock | 6 +++--- flake/dev/flake.lock | 24 ++++++++++++------------ version-info.toml | 6 +++--- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 3c3b6be9..beb8ee32 100644 --- a/flake.lock +++ b/flake.lock @@ -66,11 +66,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1764338033, - "narHash": "sha256-1LNGcU+aTbATD3BPCf7U1KsP1CjCH+ZWqM6JH0sZ6Q0=", + "lastModified": 1764831616, + "narHash": "sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ba9b83e5fb4b552a423d24dabe5ccb47a9c89901", + "rev": "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4", "type": "github" }, "original": { diff --git a/flake/dev/flake.lock b/flake/dev/flake.lock index 4f544378..a1f73c91 100644 --- a/flake/dev/flake.lock +++ b/flake/dev/flake.lock @@ -2,11 +2,11 @@ "nodes": { "dev-nixpkgs": { "locked": { - "lastModified": 1764338033, - "narHash": "sha256-1LNGcU+aTbATD3BPCf7U1KsP1CjCH+ZWqM6JH0sZ6Q0=", + "lastModified": 1764831616, + "narHash": "sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ba9b83e5fb4b552a423d24dabe5ccb47a9c89901", + "rev": "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4", "type": "github" }, "original": { @@ -38,11 +38,11 @@ }, "flake-compat": { "locked": { - "lastModified": 1761588617, - "narHash": "sha256-bHDJDoMHMMctf90Ug0po2LNanPgdB8aRl0psH7+TWzc=", + "lastModified": 1764849477, + "narHash": "sha256-JbjxGEA9gVRZ47LylRFe7TLVjI2KaoW0cwflbQ2apBs=", "owner": "NixOS", "repo": "flake-compat", - "rev": "01ad7ce89c455171e4f864799b21d0785ba94a3a", + "rev": "4dd386262c30922367e6b549c81e9cbdf8f3132f", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1763988335, - "narHash": "sha256-QlcnByMc8KBjpU37rbq5iP7Cp97HvjRP0ucfdh+M4Qc=", + "lastModified": 1765016596, + "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "50b9238891e388c9fdc6a5c49e49c42533a1b5ce", + "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", "type": "github" }, "original": { @@ -104,11 +104,11 @@ ] }, "locked": { - "lastModified": 1764536451, - "narHash": "sha256-BgtcUkBfItu9/yU14IgUaj4rYOanTOUZjUfBP20/ZB4=", + "lastModified": 1764866045, + "narHash": "sha256-0GsEtXV9OquDQ1VclQfP16cU5VZh7NEVIOjSH4UaJuM=", "owner": "nix-community", "repo": "home-manager", - "rev": "3fdd076e08049a9c7a83149b270440d9787d2df5", + "rev": "f63d0fe9d81d36e5fc95497217a72e02b8b7bcab", "type": "github" }, "original": { diff --git a/version-info.toml b/version-info.toml index 787d4c3a..76141e0b 100644 --- a/version-info.toml +++ b/version-info.toml @@ -1,18 +1,18 @@ # DO NOT MODIFY! # This file was generated by ci/version-info/default.nix -nixpkgs_rev = "ba9b83e5fb4b552a423d24dabe5ccb47a9c89901" +nixpkgs_rev = "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4" release = "25.11" unstable = false [versions."25.05"] branch = "nixos-25.05" channel = "nixos-25.05" -status = "stable" +status = "deprecated" [versions."25.11"] branch = "nixos-25.11" channel = "nixos-25.11" -status = "beta" +status = "stable" [versions."26.05"] branch = "main" From a9d0e063bcbb43f18f5baf42713ba240f3a8ab22 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Mon, 8 Dec 2025 07:25:56 +0000 Subject: [PATCH 24/32] modules/lsp: fix `mkServerOption` homepage tryEval evaluation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `lib.pipe` strictly evaluates intermediate steps using `foldl'`. As a result, piping `(opts: opts.package.default or null)` → `(package: (tryEval package).value)` is ineffective because `opts.package.default` is evaluated before `tryEval` can catch exceptions. Instead, inline `opts.package.default` directly into the `tryEval` expression, ensuring missing package errors caught correctly. Resolves errors when building NixOS or nix-darwin docs that include Nixvim options. Adds a regression test. (cherry picked from commit 463fb0ad5dae7c8590cee671247c59ef58433847) --- modules/lsp/servers/default.nix | 8 ++--- tests/test-sources/modules/lsp.nix | 48 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/modules/lsp/servers/default.nix b/modules/lsp/servers/default.nix index b0293b6f..3427f81d 100644 --- a/modules/lsp/servers/default.nix +++ b/modules/lsp/servers/default.nix @@ -40,10 +40,10 @@ let # Get suboptions of `lsp.servers.` (opts: opts.${name}.type.getSubOptions opts.${name}.loc) # Get the default package - (opts: opts.package.default or null) - # The default throws if mkPackageOption can't find the package - # E.g. mismatched nixpkgs revision - (package: (builtins.tryEval package).value) + # + # Use tryEval to catch throws when mkPackageOption can't find the package, + # e.g., due to a mismatched nixpkgs revision + (opts: (builtins.tryEval (opts.package.default or null)).value) # Get package's homepage (package: package.meta.homepage or null) ]; diff --git a/tests/test-sources/modules/lsp.nix b/tests/test-sources/modules/lsp.nix index ea6c36bb..7bdaee08 100644 --- a/tests/test-sources/modules/lsp.nix +++ b/tests/test-sources/modules/lsp.nix @@ -1,3 +1,4 @@ +{ pkgs }: { example = { lsp.servers = { @@ -254,4 +255,51 @@ } ]; }; + + # Regression test for mkServerOption: + # Ensures tryEval catches missing packages when evaluating the description. + # See https://github.com/nix-community/nixvim/issues/4033 + missing-package = + { lib, options, ... }: + let + # `lsp.servers.lua_ls` option + serverOpt = lib.pipe options.lsp.servers [ + (opt: opt.type.getSubOptions opt.loc) + (opts: opts.lua_ls) + ]; + + # `lsp.servers.lua_ls.package` option + packageOpt = (serverOpt.type.getSubOptions serverOpt.loc).package; + + # The lua_ls package attr to remove from pkgs + packageName = lib.pipe ../../../plugins/lsp/lsp-packages.nix [ + import + (lib.getAttr "packages") + (lib.getAttr "lua_ls") + lib.toList + lib.head + ]; + in + { + # Remove lua_ls's package + _module.args.pkgs = lib.mkOverride 0 (lib.removeAttrs pkgs [ packageName ]); + + assertions = [ + { + # Expect the lua_ls description to evaluate without a link + assertion = serverOpt.description == "The lua_ls language server.\n"; + message = '' + Wrong description for `${serverOpt}`. Found: + ${serverOpt.description} + ''; + } + { + # Expect the package default to throw + assertion = !(builtins.tryEval packageOpt.default).success; + message = "Expected `${packageOpt}`'s default to throw."; + } + ]; + + test.buildNixvim = false; + }; } From 844cb1c1b72cda6baec95fd9f18c2937f8f6463c Mon Sep 17 00:00:00 2001 From: "nixvim-ci[bot]" <212996653+nixvim-ci[bot]@users.noreply.github.com> Date: Sat, 13 Dec 2025 12:52:27 +0000 Subject: [PATCH 25/32] flake: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit flake.lock updates: • Updated input 'flake-parts': 'github:hercules-ci/flake-parts/2cccadc7357c0ba201788ae99c4dfa90728ef5e0?narHash=sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q%3D' (2025-11-21) → 'github:hercules-ci/flake-parts/5635c32d666a59ec9a55cab87e898889869f7b71?narHash=sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM%3D' (2025-12-11) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/c97c47f2bac4fa59e2cbdeba289686ae615f8ed4?narHash=sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA%3D' (2025-12-04) → 'github:NixOS/nixpkgs/09eb77e94fa25202af8f3e81ddc7353d9970ac1b?narHash=sha256-mSD5Ob7a%2BT2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo%3D' (2025-12-09) flake/dev/flake.lock updates: • Updated input 'dev-nixpkgs': 'github:NixOS/nixpkgs/c97c47f2bac4fa59e2cbdeba289686ae615f8ed4?narHash=sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA%3D' (2025-12-04) → 'github:NixOS/nixpkgs/09eb77e94fa25202af8f3e81ddc7353d9970ac1b?narHash=sha256-mSD5Ob7a%2BT2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo%3D' (2025-12-09) • Updated input 'flake-compat': 'github:NixOS/flake-compat/4dd386262c30922367e6b549c81e9cbdf8f3132f?narHash=sha256-JbjxGEA9gVRZ47LylRFe7TLVjI2KaoW0cwflbQ2apBs%3D' (2025-12-04) → 'github:NixOS/flake-compat/63d095ca43128741b16fc354b1e918757e6b66e5?narHash=sha256-QN1r/zNqvXHwWqlRAnRtFf4CQwIOJx58PtdExIzAw94%3D' (2025-12-08) • Updated input 'git-hooks': 'github:cachix/git-hooks.nix/548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c?narHash=sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ%3D' (2025-12-06) → 'github:cachix/git-hooks.nix/09e45f2598e1a8499c3594fe11ec2943f34fe509?narHash=sha256-dixPWKiHzh80PtD0aLuxYNQ0xP%2B843dfXG/yM3OzaYQ%3D' (2025-12-11) • Updated input 'home-manager': 'github:nix-community/home-manager/f63d0fe9d81d36e5fc95497217a72e02b8b7bcab?narHash=sha256-0GsEtXV9OquDQ1VclQfP16cU5VZh7NEVIOjSH4UaJuM%3D' (2025-12-04) → 'github:nix-community/home-manager/90b62096f099b73043a747348c11dbfcfbdea949?narHash=sha256-RM2xs%2B1HdHxesjOelxoA3eSvXShC8pmBvtyTke4Ango%3D' (2025-12-13) • Updated input 'nix-darwin': 'github:lnl7/nix-darwin/e95de00a471d07435e0527ff4db092c84998698e?narHash=sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE%3D' (2025-11-26) → 'github:lnl7/nix-darwin/688427b1aab9afb478ca07989dc754fa543e03d5?narHash=sha256-0YSU35gfRFJzx/lTGgOt6ubP8K6LeW0vaywzNNqxkl4%3D' (2025-12-07) --- flake.lock | 12 ++++++------ flake/dev/flake.lock | 30 +++++++++++++++--------------- version-info.toml | 2 +- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/flake.lock b/flake.lock index beb8ee32..bc43bc2e 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1763759067, - "narHash": "sha256-LlLt2Jo/gMNYAwOgdRQBrsRoOz7BPRkzvNaI/fzXi2Q=", + "lastModified": 1765495779, + "narHash": "sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "2cccadc7357c0ba201788ae99c4dfa90728ef5e0", + "rev": "5635c32d666a59ec9a55cab87e898889869f7b71", "type": "github" }, "original": { @@ -66,11 +66,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1764831616, - "narHash": "sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA=", + "lastModified": 1765311797, + "narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4", + "rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b", "type": "github" }, "original": { diff --git a/flake/dev/flake.lock b/flake/dev/flake.lock index a1f73c91..479b3028 100644 --- a/flake/dev/flake.lock +++ b/flake/dev/flake.lock @@ -2,11 +2,11 @@ "nodes": { "dev-nixpkgs": { "locked": { - "lastModified": 1764831616, - "narHash": "sha256-OtzF5wBvO0jgW1WW1rQU9cMGx7zuvkF7CAVJ1ypzkxA=", + "lastModified": 1765311797, + "narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4", + "rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b", "type": "github" }, "original": { @@ -38,11 +38,11 @@ }, "flake-compat": { "locked": { - "lastModified": 1764849477, - "narHash": "sha256-JbjxGEA9gVRZ47LylRFe7TLVjI2KaoW0cwflbQ2apBs=", + "lastModified": 1765186200, + "narHash": "sha256-QN1r/zNqvXHwWqlRAnRtFf4CQwIOJx58PtdExIzAw94=", "owner": "NixOS", "repo": "flake-compat", - "rev": "4dd386262c30922367e6b549c81e9cbdf8f3132f", + "rev": "63d095ca43128741b16fc354b1e918757e6b66e5", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1765016596, - "narHash": "sha256-rhSqPNxDVow7OQKi4qS5H8Au0P4S3AYbawBSmJNUtBQ=", + "lastModified": 1765464257, + "narHash": "sha256-dixPWKiHzh80PtD0aLuxYNQ0xP+843dfXG/yM3OzaYQ=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "548fc44fca28a5e81c5d6b846e555e6b9c2a5a3c", + "rev": "09e45f2598e1a8499c3594fe11ec2943f34fe509", "type": "github" }, "original": { @@ -104,11 +104,11 @@ ] }, "locked": { - "lastModified": 1764866045, - "narHash": "sha256-0GsEtXV9OquDQ1VclQfP16cU5VZh7NEVIOjSH4UaJuM=", + "lastModified": 1765605144, + "narHash": "sha256-RM2xs+1HdHxesjOelxoA3eSvXShC8pmBvtyTke4Ango=", "owner": "nix-community", "repo": "home-manager", - "rev": "f63d0fe9d81d36e5fc95497217a72e02b8b7bcab", + "rev": "90b62096f099b73043a747348c11dbfcfbdea949", "type": "github" }, "original": { @@ -125,11 +125,11 @@ ] }, "locked": { - "lastModified": 1764161084, - "narHash": "sha256-HN84sByg9FhJnojkGGDSrcjcbeioFWoNXfuyYfJ1kBE=", + "lastModified": 1765066094, + "narHash": "sha256-0YSU35gfRFJzx/lTGgOt6ubP8K6LeW0vaywzNNqxkl4=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "e95de00a471d07435e0527ff4db092c84998698e", + "rev": "688427b1aab9afb478ca07989dc754fa543e03d5", "type": "github" }, "original": { diff --git a/version-info.toml b/version-info.toml index 76141e0b..ae64a2b8 100644 --- a/version-info.toml +++ b/version-info.toml @@ -1,6 +1,6 @@ # DO NOT MODIFY! # This file was generated by ci/version-info/default.nix -nixpkgs_rev = "c97c47f2bac4fa59e2cbdeba289686ae615f8ed4" +nixpkgs_rev = "09eb77e94fa25202af8f3e81ddc7353d9970ac1b" release = "25.11" unstable = false From f0b0cc7cae2cf5d76608c9164ab8824a2387e146 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Sat, 13 Dec 2025 16:43:16 +0000 Subject: [PATCH 26/32] modules/lsp: move `packages.nix` from plugins.lsp Move plugins/lsp/lsp-packages.nix -> modules/lsp/servers/packages.nix (cherry picked from commit c97e8e34250c7fe5d4e0c3333a0ca4a9d28957d0) --- modules/lsp/servers/default.nix | 4 ++-- .../lsp/lsp-packages.nix => modules/lsp/servers/packages.nix | 0 plugins/lsp/language-servers/default.nix | 2 +- tests/generated.nix | 4 ++-- tests/test-sources/modules/lsp.nix | 2 +- typos.toml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) rename plugins/lsp/lsp-packages.nix => modules/lsp/servers/packages.nix (100%) diff --git a/modules/lsp/servers/default.nix b/modules/lsp/servers/default.nix index 3427f81d..67cb5244 100644 --- a/modules/lsp/servers/default.nix +++ b/modules/lsp/servers/default.nix @@ -60,11 +60,11 @@ let default = { }; }; - # Combine `packages` and `customCmd` sets from `lsp-packages.nix` + # Combine `packages` and `customCmd` sets from `packages.nix` # We use this set to generate the package-option defaults serverPackages = let - inherit (import ../../../plugins/lsp/lsp-packages.nix) + inherit (import ./packages.nix) packages customCmd ; diff --git a/plugins/lsp/lsp-packages.nix b/modules/lsp/servers/packages.nix similarity index 100% rename from plugins/lsp/lsp-packages.nix rename to modules/lsp/servers/packages.nix diff --git a/plugins/lsp/language-servers/default.nix b/plugins/lsp/language-servers/default.nix index a07c4445..fa11d1bf 100644 --- a/plugins/lsp/language-servers/default.nix +++ b/plugins/lsp/language-servers/default.nix @@ -220,7 +220,7 @@ let }; }; - lspPackages = import ../lsp-packages.nix; + lspPackages = import ../../../modules/lsp/servers/packages.nix; generatedServers = lib.pipe ../../../generated/lspconfig-servers.json [ lib.importJSON diff --git a/tests/generated.nix b/tests/generated.nix index 5b80ea90..31520809 100644 --- a/tests/generated.nix +++ b/tests/generated.nix @@ -45,11 +45,11 @@ let errors = lib.concatStringsSep "\n" ( checkDeclarations ( let - inherit (import ../plugins/lsp/lsp-packages.nix) unpackaged packages customCmd; + inherit (import ../modules/lsp/servers/packages.nix) unpackaged packages customCmd; in { name = "lsp"; - declarationFile = "plugins/lsp/lsp-packages.nix"; + declarationFile = "modules/lsp/servers/packages.nix"; packages = builtins.attrValues packages; diff --git a/tests/test-sources/modules/lsp.nix b/tests/test-sources/modules/lsp.nix index 7bdaee08..b0e839a2 100644 --- a/tests/test-sources/modules/lsp.nix +++ b/tests/test-sources/modules/lsp.nix @@ -272,7 +272,7 @@ packageOpt = (serverOpt.type.getSubOptions serverOpt.loc).package; # The lua_ls package attr to remove from pkgs - packageName = lib.pipe ../../../plugins/lsp/lsp-packages.nix [ + packageName = lib.pipe ../../../modules/lsp/servers/packages.nix [ import (lib.getAttr "packages") (lib.getAttr "lua_ls") diff --git a/typos.toml b/typos.toml index 863ad310..5d197503 100644 --- a/typos.toml +++ b/typos.toml @@ -13,7 +13,7 @@ Highligt = "Highligt" # TODO: ./plugins/utils/neogen.nix Annote = "Annote" # TODO: ./plugins/lsp/fidget.nix ket = "ket" # ./plugins/utils/sandwich.nix tro = "tro" # ./plugins/utils/spectre.nix -protols = "protols" # ./plugins/lsp/lsp-packages.nix +protols = "protols" # ./modules/lsp/servers/packages.nix compatibilty = "compatibilty" # ./plugins/by-name/visual-multi/default.nix Maco = "Maco" # ./plugins/by-name/femaco From 2d088ea80ac63813116556a47cee14ffff07b0a6 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Mon, 15 Dec 2025 10:30:18 +0000 Subject: [PATCH 27/32] modules/lsp/servers: simplify `activate` default The default for `lsp.servers..activate` used to be conditional on whether `name == "*"`. This is leftover from before the * server was moved to its own `global-server.nix` module and can now be removed. (cherry picked from commit 753f7640d61fda3b375630b66dce60ac55aa5072) --- modules/lsp/servers/server.nix | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/modules/lsp/servers/server.nix b/modules/lsp/servers/server.nix index 3feaa6bc..260bf77a 100644 --- a/modules/lsp/servers/server.nix +++ b/modules/lsp/servers/server.nix @@ -36,10 +36,7 @@ in description = '' Whether to call `vim.lsp.enable()` for ${displayName}. ''; - default = config.name != "*"; - defaultText = lib.literalMD '' - `true`, unless the server's `name` is `*` - ''; + default = true; example = false; }; From d8c9d8451d4592dd7de647230f407d4d6370bd8e Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Mon, 15 Dec 2025 10:34:08 +0000 Subject: [PATCH 28/32] modules/lsp/servers: simplify `displayName` and `packageName` Move the `let in` block defining `displayName` and `packageName` up so it doesn't have to deal with the module arg `name` shadowing `args.name`. This simplifies the implementation and reduces repetition. (cherry picked from commit 12a76dd12beccd8d18249b05d10d6acda4e722e0) --- modules/lsp/servers/server.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/lsp/servers/server.nix b/modules/lsp/servers/server.nix index 260bf77a..86f6d46a 100644 --- a/modules/lsp/servers/server.nix +++ b/modules/lsp/servers/server.nix @@ -4,6 +4,10 @@ package ? null, config ? null, }@args: +let + displayName = name; + packageName = package.name or args.name or "language server"; +in { lib, name, @@ -13,8 +17,6 @@ }: let inherit (lib) types; - displayName = args.name or "the language server"; - packageName = package.name or (lib.strings.removePrefix "the " displayName); in { options = { From ce144adecb1ba44345660f1b83540f880a70de91 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Wed, 17 Dec 2025 16:56:57 +0000 Subject: [PATCH 29/32] docs/mdbook: handle `visible = "transparent"` (cherry picked from commit 5ef378a006f4aed5f0fdf81381ab43cbed60db3a) --- docs/mdbook/default.nix | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/docs/mdbook/default.nix b/docs/mdbook/default.nix index 6d1e27fa..3bf71cdc 100644 --- a/docs/mdbook/default.nix +++ b/docs/mdbook/default.nix @@ -48,31 +48,35 @@ let removeWhitespace = builtins.replaceStrings [ " " ] [ "" ]; getSubOptions = - opts: path: - lib.optionalAttrs (isDeeplyVisible opts) (removeUnwanted (opts.type.getSubOptions path)); + opt: + let + visible = opt.visible or true; + visible' = if lib.isBool visible then visible else visible != "shallow"; + subOpts = opt.type.getSubOptions opt.loc; + in + lib.optionalAttrs visible' (removeUnwanted subOpts); - isVisible = isVisibleWith true; - isDeeplyVisible = isVisibleWith false; - - isVisibleWith = - shallow: opts: + isVisible = let test = opt: let internal = opt.internal or false; visible = opt.visible or true; - visible' = if visible == "shallow" then shallow else visible; + visible' = if lib.isBool visible then visible else visible != "transparent"; in visible' && !internal; in + opts: if lib.isOption opts then test opts else if opts.isOption then test opts.index.options else let - filterFunc = lib.filterAttrs (_: v: if lib.isAttrs v then isVisibleWith shallow v else true); + # FIXME: isVisible is not a perfect check; + # it will false-positive on `visible = "transparent"` + filterFunc = lib.filterAttrs (_: v: if lib.isAttrs v then isVisible v else true); hasEmptyIndex = (filterFunc opts.index.options) == { }; hasEmptyComponents = (filterFunc opts.components) == { }; in @@ -136,7 +140,7 @@ let wrapOptionDocPage (path ++ [ name ]) (go (path ++ [ name ]) opts) false else let - subOpts = getSubOptions opts (path ++ [ name ]); + subOpts = getSubOptions opts; in # If this node is an option with sub-options... # Pass wrapOptionDocPage a set containing it and its sub-options. @@ -144,7 +148,7 @@ let if subOpts != { } then wrapOptionDocPage (path ++ [ name ]) ( (go (path ++ [ name ]) subOpts) - // { + // lib.optionalAttrs (isVisible opts) { # This is necessary to include the option itself in the docs. # For instance, this helps submodules like "autoCmd" to include their base declaration in the docs. # Though there must be a better, less "hacky" solution than this. From 685d0be1fce70865c71108ef4105749dbd0957f3 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Wed, 17 Dec 2025 18:33:36 +0000 Subject: [PATCH 30/32] docs/mdbook: refactor `isVisible`'s "has visible" check (cherry picked from commit 79ace278ec8d4c42883095512d15b32a0a5b7d65) --- docs/mdbook/default.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/mdbook/default.nix b/docs/mdbook/default.nix index 3bf71cdc..1729be76 100644 --- a/docs/mdbook/default.nix +++ b/docs/mdbook/default.nix @@ -66,6 +66,10 @@ let visible' = if lib.isBool visible then visible else visible != "transparent"; in visible' && !internal; + + # FIXME: isVisible is not a perfect check; + # it will false-positive on `visible = "transparent"` + hasVisible = opts: lib.any (v: lib.isAttrs v -> isVisible v) (lib.attrValues opts); in opts: if lib.isOption opts then @@ -73,14 +77,10 @@ let else if opts.isOption then test opts.index.options else - let - # FIXME: isVisible is not a perfect check; - # it will false-positive on `visible = "transparent"` - filterFunc = lib.filterAttrs (_: v: if lib.isAttrs v then isVisible v else true); - hasEmptyIndex = (filterFunc opts.index.options) == { }; - hasEmptyComponents = (filterFunc opts.components) == { }; - in - !hasEmptyIndex || !hasEmptyComponents; + lib.any hasVisible [ + opts.index.options + opts.components + ]; wrapOptionDocPage = path: opts: isOpt: rec { index = { From 204a2f3d359e01fcf5af4433adc8cdbb434c9ded Mon Sep 17 00:00:00 2001 From: "nixvim-ci[bot]" <212996653+nixvim-ci[bot]@users.noreply.github.com> Date: Sat, 20 Dec 2025 12:52:29 +0000 Subject: [PATCH 31/32] flake: Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit flake.lock updates: • Updated input 'flake-parts': 'github:hercules-ci/flake-parts/5635c32d666a59ec9a55cab87e898889869f7b71?narHash=sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM%3D' (2025-12-11) → 'github:hercules-ci/flake-parts/a34fae9c08a15ad73f295041fec82323541400a9?narHash=sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw%3D' (2025-12-15) • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/09eb77e94fa25202af8f3e81ddc7353d9970ac1b?narHash=sha256-mSD5Ob7a%2BT2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo%3D' (2025-12-09) → 'github:NixOS/nixpkgs/c6f52ebd45e5925c188d1a20119978aa4ffd5ef6?narHash=sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8%3D' (2025-12-15) flake/dev/flake.lock updates: • Updated input 'dev-nixpkgs': 'github:NixOS/nixpkgs/09eb77e94fa25202af8f3e81ddc7353d9970ac1b?narHash=sha256-mSD5Ob7a%2BT2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo%3D' (2025-12-09) → 'github:NixOS/nixpkgs/c6f52ebd45e5925c188d1a20119978aa4ffd5ef6?narHash=sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8%3D' (2025-12-15) • Updated input 'git-hooks': 'github:cachix/git-hooks.nix/09e45f2598e1a8499c3594fe11ec2943f34fe509?narHash=sha256-dixPWKiHzh80PtD0aLuxYNQ0xP%2B843dfXG/yM3OzaYQ%3D' (2025-12-11) → 'github:cachix/git-hooks.nix/b68b780b69702a090c8bb1b973bab13756cc7a27?narHash=sha256-t3T/xm8zstHRLx%2BpIHxVpQTiySbKqcQbK%2Br%2B01XVKc0%3D' (2025-12-16) • Updated input 'home-manager': 'github:nix-community/home-manager/90b62096f099b73043a747348c11dbfcfbdea949?narHash=sha256-RM2xs%2B1HdHxesjOelxoA3eSvXShC8pmBvtyTke4Ango%3D' (2025-12-13) → 'github:nix-community/home-manager/d3135ab747fd9dac250ffb90b4a7e80634eacbe9?narHash=sha256-/r9/1KamvbHJx6I40H4HsSXnEcBAkj46ZwibhBx9kg0%3D' (2025-12-17) • Updated input 'treefmt-nix': 'github:numtide/treefmt-nix/5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4?narHash=sha256-AlEObg0syDl%2BSpi4LsZIBrjw%2BsnSVU4T8MOeuZJUJjM%3D' (2025-11-12) → 'github:numtide/treefmt-nix/42d96e75aa56a3f70cab7e7dc4a32868db28e8fd?narHash=sha256-%2BcqN4PJz9y0JQXfAK5J1drd0U05D5fcAGhzhfVrDlsI%3D' (2025-12-17) --- flake.lock | 12 ++++++------ flake/dev/flake.lock | 24 ++++++++++++------------ version-info.toml | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/flake.lock b/flake.lock index bc43bc2e..24dee844 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1765495779, - "narHash": "sha256-MhA7wmo/7uogLxiewwRRmIax70g6q1U/YemqTGoFHlM=", + "lastModified": 1765835352, + "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "5635c32d666a59ec9a55cab87e898889869f7b71", + "rev": "a34fae9c08a15ad73f295041fec82323541400a9", "type": "github" }, "original": { @@ -66,11 +66,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1765311797, - "narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=", + "lastModified": 1765838191, + "narHash": "sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b", + "rev": "c6f52ebd45e5925c188d1a20119978aa4ffd5ef6", "type": "github" }, "original": { diff --git a/flake/dev/flake.lock b/flake/dev/flake.lock index 479b3028..6f2d3b8d 100644 --- a/flake/dev/flake.lock +++ b/flake/dev/flake.lock @@ -2,11 +2,11 @@ "nodes": { "dev-nixpkgs": { "locked": { - "lastModified": 1765311797, - "narHash": "sha256-mSD5Ob7a+T2RNjvPvOA1dkJHGVrNVl8ZOrAwBjKBDQo=", + "lastModified": 1765838191, + "narHash": "sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "09eb77e94fa25202af8f3e81ddc7353d9970ac1b", + "rev": "c6f52ebd45e5925c188d1a20119978aa4ffd5ef6", "type": "github" }, "original": { @@ -63,11 +63,11 @@ ] }, "locked": { - "lastModified": 1765464257, - "narHash": "sha256-dixPWKiHzh80PtD0aLuxYNQ0xP+843dfXG/yM3OzaYQ=", + "lastModified": 1765911976, + "narHash": "sha256-t3T/xm8zstHRLx+pIHxVpQTiySbKqcQbK+r+01XVKc0=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "09e45f2598e1a8499c3594fe11ec2943f34fe509", + "rev": "b68b780b69702a090c8bb1b973bab13756cc7a27", "type": "github" }, "original": { @@ -104,11 +104,11 @@ ] }, "locked": { - "lastModified": 1765605144, - "narHash": "sha256-RM2xs+1HdHxesjOelxoA3eSvXShC8pmBvtyTke4Ango=", + "lastModified": 1765979862, + "narHash": "sha256-/r9/1KamvbHJx6I40H4HsSXnEcBAkj46ZwibhBx9kg0=", "owner": "nix-community", "repo": "home-manager", - "rev": "90b62096f099b73043a747348c11dbfcfbdea949", + "rev": "d3135ab747fd9dac250ffb90b4a7e80634eacbe9", "type": "github" }, "original": { @@ -157,11 +157,11 @@ ] }, "locked": { - "lastModified": 1762938485, - "narHash": "sha256-AlEObg0syDl+Spi4LsZIBrjw+snSVU4T8MOeuZJUJjM=", + "lastModified": 1766000401, + "narHash": "sha256-+cqN4PJz9y0JQXfAK5J1drd0U05D5fcAGhzhfVrDlsI=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "5b4ee75aeefd1e2d5a1cc43cf6ba65eba75e83e4", + "rev": "42d96e75aa56a3f70cab7e7dc4a32868db28e8fd", "type": "github" }, "original": { diff --git a/version-info.toml b/version-info.toml index ae64a2b8..57bfe252 100644 --- a/version-info.toml +++ b/version-info.toml @@ -1,6 +1,6 @@ # DO NOT MODIFY! # This file was generated by ci/version-info/default.nix -nixpkgs_rev = "09eb77e94fa25202af8f3e81ddc7353d9970ac1b" +nixpkgs_rev = "c6f52ebd45e5925c188d1a20119978aa4ffd5ef6" release = "25.11" unstable = false From 35688970083857d26bf6c57934541eb906f96249 Mon Sep 17 00:00:00 2001 From: Sizhe Zhao Date: Mon, 22 Dec 2025 16:41:52 +0800 Subject: [PATCH 32/32] colorschemes/github-theme: set colorscheme (cherry picked from commit 1787eeda5a2ce35bcd57dbb482718b0d897786ae) --- colorschemes/github-theme/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/colorschemes/github-theme/default.nix b/colorschemes/github-theme/default.nix index 490a8a49..f80c35b0 100644 --- a/colorschemes/github-theme/default.nix +++ b/colorschemes/github-theme/default.nix @@ -6,6 +6,7 @@ lib.nixvim.plugins.mkNeovimPlugin { name = "github-theme"; package = "github-nvim-theme"; isColorscheme = true; + colorscheme = "github_dark"; maintainers = [ lib.maintainers.GaetanLepage ];