Release Notes
This section lists the release notes for tagged version of nvf and the current main current main branch
Release 0.1
This is the current master branch and information here is not final. These are changes from the v0.1 tag.
Special thanks to home-manager for this release. Docs/manual generation, the new module evaluation system, and DAG implementation are from them.
Changelog
-
Removed hare language support (lsp/tree-sitter/etc).
vim.lsp.hareis no longer defined. If you use hare and would like it added back, please file an issue. -
vim.startPlugins& {option}vim-optPluginsare now an enum ofstringfor options sourced from the flake inputs. Users can still provide vim plugin packages.- If you are contributing and adding a new plugin, add the plugin name to
availablePluginsin [types-plugin.nix].
- If you are contributing and adding a new plugin, add the plugin name to
-
neovimBuilderhas been removed for configuration. Using an overlay is no longer required. See the manual for the new way to configuration.
-
Treesitter grammars are now configurable with
vim.treesitter.grammars. Utilizes the nixpkgsnvim-treesitterplugin rather than a custom input in order to take advantage of build support of pinned versions. See the relevant discourse post for more information. Packages can be found under thevimPlugins.nvim-treesitter.builtGrammarsnamespace. -
vim.configRCandvim.luaConfigRCare now of type DAG lines. This allows for ordering of the config. Usage is the same is in home-manager'shome.activationoption.
vim.luaConfigRC = lib.nvim.dag.entryAnywhere "config here"
catppuccintheme is now available as a neovim themevim.theme.styleand Lualine themevim.statusline.lualine.theme.
Release 0.2
Release notes for release 0.2
Changelog
- Added two minimap plugins under
vim.minimap.codewindow.nvimis enabled by default, whileminimap.vimis available with its code-minimap dependency. - A complementary plugin,
obsidian.nvimand the Neovim alternative for Emacs' orgmode withorgmode.nvimhave been added. Both will be disabled by default. - Smooth scrolling for ANY movement command is now available with
cinnamon.nvim - You will now notice a dashboard on startup. This is provided by the
alpha.nvimplugin. You can use any of the three available dashboard plugins, or disable them entirely. - There is now a scrollbar on active buffers, which can highlight errors by
hooking to your LSPs. This is on by default, but can be toggled off under
vim.visualsif seen necessary. - Discord Rich Presence has been added through
presence.nvimfor those who want to flex that they are using the superior text editor. - An icon picker is now available with telescope integration. You can use
:IconPickerInsertor:IconPickerYankto add icons to your code. - A general-purpose cheatsheet has been added through
cheatsheet.nvim. Forget no longer! ccc.nvimhas been added to the default plugins to allow picking colors with ease.- Most UI components of Neovim have been replaced through the help of
noice.nvim. There are also notifications and custom UI elements available for Neovim messages and prompts. - A (floating by default) terminal has been added through
toggleterm.nvim. - Harness the power of ethical (
tabnine.nvim) and not-so-ethical (copilot.lua) AI by those new assistant plugins. Both are off by default, TabNine needs to be wrapped before it's working. - Experimental mouse gestures have been added through
gesture.nvim. See plugin page and the relevant module for more details on how to use. - Re-open last visited buffers via
nvim-session-manager. Disabled by default as deleting buffers seems to be problematic at the moment. - Most of NvimTree's configuration options have been changed with some options being toggled to off by default.
- Lualine had its configuration simplified and style toned down. Less color, more info.
- Modules where multiple plugin configurations were in the same directory have been simplified. Each plugin inside a single module gets its directory to be imported.
- Separate config options with the same parent attribute have been merged into one for simplicity.
Release 0.3
Release 0.3 had to come out before I wanted it to due to Neovim 0.9 dropping into nixpkgs-unstable. The Treesitter changes have prompted a Treesitter rework, which was followed by reworking the languages system. Most of the changes to those are downstreamed from the original repository. The feature requests that was originally planned for 0.3 have been moved to 0.4, which should come out soon.
Changelog
-
We have transitioned to flake-parts, from flake-utils to extend the flexibility of this flake. This means the flake structure is different than usual, but the functionality remains the same.
-
We now provide a home-manager module. Do note that it is still far from perfect, but it works.
-
nodejs_16is now bundled withCopilot.luaif the user has enabled Copilot assistant. -
which-key section titles have been fixed. This is to be changed once again in a possible keybind rewrite, but now it should display the correct titles instead of
+prefix -
Most of
presence.nvim's options have been made fully configurable through your configuration file. -
Most of the modules have been refactored to separate
configandoptionsattributes. -
Darwin has been deprecated as the Zig package is marked as broken. We will attempt to use the Zig overlay to return Darwin support.
-
Fidget.nvimhas been added as a neat visual addition for LSP installations. -
diffview.nvimhas been added to provide a convenient diff utility. -
Treesitter grammars are now configurable with
vim.treesitter.grammars. Utilizes the nixpkgsnvim-treesitterplugin rather than a custom input in order to take advantage of build support of pinned versions. See discourse for more information. Packages can be found under thepkgs.vimPlugins.nvim-treesitter.builtGrammarsattribute. Treesitter grammars for supported languages should be enabled within the module. By default no grammars are installed, thus the following grammars which do not have a language section are not included anymore: comment, toml, make, html, css, graphql, json. -
A new section has been added for language support:
vim.languages.<language>.- The options
enableLSPvim.languages.enableTreesitter, etc. will enable the respective section for all languages that have been enabled. - All LSP languages have been moved here
plantumlandmarkdownhave been moved here- A new section has been added for
html. The oldvim.treesitter.autotagHtmlcan be found atvim.languages.html.treesitter.autotagHtml.
- The options
-
vim.git.gitsigns.codeActionshas been added, allowing you to turn on Gitsigns' code actions. -
Removed the plugins document in the docs. Was too unwieldy to keep updated.
-
vim.visual.lspkindhas been moved tovim.lsp.lspkind.enable -
Improved handling of completion formatting. When setting
vim.autocomplete.sources, can also include optional menu mapping. And can provide your own function withvim.autocomplete.formatting.format. -
For
vim.visuals.indentBlankline.fillCharandvim.visuals.indentBlankline.eolCharoptions, turning them off should be done by usingnullrather than""now. -
Transparency has been made optional and has been disabled by default.
vim.theme.transparentoption can be used to enable or disable transparency for your configuration. -
Fixed deprecated configuration method for Tokyonight, and added new style "moon"
-
Dart language support as well as extended flutter support has been added. Thanks to @FlafyDev for his contributions towards Dart language support.
-
Elixir language support has been added through
elixir-tools.nvim. -
hop.nvimandleap.nvimhave been added for fast navigation. -
modes.nvimhas been added to the UI plugins as a minor error highlighter. -
smartcollumn.nvimhas been added to dynamically display a colorcolumn when the limit has been exceeded, providing per-buftype column position and more. -
project.nvimhas been added for better project management inside Neovim. -
More configuration options have been added to
nvim-session-manager. -
Editorconfig support has been added to the core functionality, with an enable option.
-
venn-nvimhas been dropped due to broken keybinds.
Release 0.4
Following the release of v0.3, I have decided to release v0.4 with a massive new
change: customizable keybinds. As of the 0.4 release, keybinds will no longer be
hardcoded and instead provided by each module's own keybinds section. The old
keybind system (vim.keybinds = {}) is now considered deprecated and the new
lib functions are recommended to be used for adding keybinds for new plugins, or
adding keybinds to existing plugins.
Alongside customizable keybinds, there are a few quality of life updates, such
as lazygit integration and the new experimental Lua loader of Neovim 0.9
thanks to our awesome contributors who made this update possible during my
absence.
Changelog
-
Streamlined keybind adding process towards new functions in extended stdlib.
-
Moved default keybinds into keybinds section of each module
-
Simplified luaConfigRC and configRC setting - they can now just take strings
-
Refactored the resolveDag function - you can just provide a string now, which will default to dag.entryAnywhere
-
Fixed formatting sometimes removing parts of files
-
Made formatting synchronous
-
Gave null-ls priority over other formatters
-
Added
clangdas alternative lsp for C/++. -
Added
toggletermintegration forlazygit. -
Added new option
enableluaLoaderto enable neovim's experimental module loader for faster startup time. -
Fixed bug where flutter-tools can't find
dartLSP -
Added Debug Adapter (DAP) support for clang, rust, go, python and dart.
-
Made Copilot's Node package configurable. It is recommended to keep as default, but providing a different NodeJS version is now possible.
-
Added
vim.cursorlineOptfor configuring Neovim'svim.o.cursorlineopt. -
Added
filetree.nvimTreeLua.view.cursorline, default false, to enable cursorline in nvimtre. -
Added Fidget.nvim support for the Catppuccin theme.
-
Updated bundled NodeJS version used by
Copilot.lua. v16 is now marked as insecure on Nixpkgs, and we updated to v18 -
Enabled Catppuccin modules for plugins available by default.
-
Added experimental Svelte support under
vim.languages. -
Removed unnecessary scrollbar element from notifications and codeaction warning UI.
-
vim.utility.colorizerhas been renamed tovim.utility.cccafter the plugin it uses -
Color preview via
nvim-colorizer.lua -
Updated Lualine statusline UI
-
Added vim-illuminate for smart highlighting
-
Added a module for enabling Neovim's spellchecker
-
Added prettierd as an alternative formatter to prettier - currently defaults to prettier
-
Fixed presence.nvim inheriting the wrong client id
-
Cleaned up documentation
Release 0.5
Changelog
-
Added phan language server for PHP
-
Added phpactor language server for PHP
-
Added transparency support for tokyonight theme
-
Fixed a bug where cmp's close and scrollDocs mappings wasn't working
-
Streamlined and simplified extra plugin API with the addition of
vim.extraPlugins -
Allow using command names in place of LSP packages to avoid automatic installation
-
Add lua LSP and Treesitter support, and neodev.nvim plugin support
-
Add
vim.lsp.mappings.toggleFormatOnSavekeybind
-
Added daily notes options for obsidian plugin
-
Added
jdt-language-serverfor Java
-
Added Deno Language Server for Javascript/Typescript
-
Added support for multiple languages under
vim.spellChecking.languages, and added vim-dirtytalk throughvim.spellChecking.enableProgrammingWordList
-
Renamed
vim.visuals.cursorWordlinetovim.visuals.cursorline.enable -
Added
vim.visuals.cursorline.lineNumbersOnlyto display cursorline only in the presence of line numbers -
Added Oxocarbon to the list of available themes.
-
Added GitHub Copilot to nvim-cmp completion sources.
-
Added
vim.ui.borders.enablefor global and individual plugin border configuration. -
LSP integrated breadcrumbs with
vim.ui.breadcrumbs.enablethrough nvim-navic -
LSP navigation helper with nvim-navbuddy, depends on nvim-navic (automatically enabled if navic is enabled)
-
Added nvim-navic integration for Catppuccin theme
-
Fixed mismatching Zig language description
-
Added support for
statixanddeadnixthroughvim.languages.nix.extraDiagnostics.types -
Added
lsp_linesplugin for showing diagnostic messages -
Added a configuration option for choosing the leader key
-
The package used for neovim is now customizable by the user, using
vim.package. For best results, always use an unwrapped package -
Added highlight-undo plugin for highlighting undo/redo targets
-
Added bash LSP and formatter support
-
Disabled Lualine LSP status indicator for Toggleterm buffer
-
Added
nvim-docs-view, a plugin to display LSP hover documentation in a side panel -
Switched to
nixosOptionsDocin option documentation. To quote home-manager commit: "Output is mostly unchanged aside from some minor typographical and formatting changes, along with better source links." -
Updated indent-blankine.nvim to v3 - this comes with a few option changes, which will be migrated with
renamedOptionModule
poz:
-
Fixed scrollOffset not being used
-
Updated clangd to 16
-
Disabled
useSystemClipboardby default
-
Add support to change mappings to utility/surround
-
Add black-and-isort python formatter
-
Removed redundant "Enable ..." in
mkEnableOptiondescriptions -
Add options to modify LSP key bindings and add proper which-key descriptions
-
Changed type of
statusline.lualine.activeSectionandstatusline.lualine.inactiveSectionfromattrsOf strtoattrsOf (listOf str) -
Added
statusline.lualine.extraActiveSectionandstatusline.lualine.extraInactiveSection
Release 0.6
Release notes for release 0.6
Breaking Changes and Migration Guide
In v0.6 we are introducing setupOpts: many plugin related options are moved
into their respective setupOpts submodule, e.g. nvimTree.disableNetrw is
renamed to nvimTree.setupOpts.disable_netrw.
Why? in short, you can now pass in anything to setupOpts and it will be passed
to your require'plugin'.setup{...}. No need to wait for us to support every
single plugin option.
The warnings when you rebuild your config should be enough to guide you through what you need to do, if there's an option that was renamed but wasn't listed in the warning, please file a bug report!
To make your migration process less annoying, here's a keybind that will help you with renaming stuff from camelCase to snake_case (you'll be doing that a lot):
-- paste this in a temp.lua file and load it in vim with :source /path/to/temp.lua
function camelToSnake()
-- Get the current word under the cursor
local word = vim.fn.expand("<cword>")
-- Replace each capital letter with an underscore followed by its lowercase equivalent
local snakeCase = string.gsub(word, "%u", function(match)
return "_" .. string.lower(match)
end)
-- Remove the leading underscore if present
if string.sub(snakeCase, 1, 1) == "_" then
snakeCase = string.sub(snakeCase, 2)
end
vim.fn.setreg(vim.v.register, snakeCase)
-- Select the word under the cursor and paste
vim.cmd("normal! viwP")
end
vim.api.nvim_set_keymap('n', '<leader>a', ':lua camelToSnake()<CR>', { noremap = true, silent = true })
Changelog
-
Added Terraform language support.
-
Added
ChatGPT.nvim, which can be enabled withvim.assistant.chatgpt.enable. Do keep in mind that this option requiresOPENAI_API_KEYenvironment variable to be set.
-
Added Gruvbox theme.
-
Added marksman LSP for Markdown.
-
Fixed markdown preview with Glow not working and added an option for changing the preview keybind.
-
colorizer.nvim: switched to a maintained fork.
-
Added
markdown-preview.nvim, movedglow.nvimto a brand newvim.utility.previewcategory.
- Added rose-pine theme.
poz:
- Added
vim.autocomplete.alwaysComplete. Allows users to have the autocomplete window popup only when manually activated.
-
Fixed empty winbar when breadcrumbs are disabled.
-
Added custom
setupOptsfor various plugins. -
Removed support for deprecated plugin "nvim-compe".
-
Moved most plugins to
setupOptsmethod.
-
Added option
vim.luaPackagesto wrap neovim with extra Lua packages. -
Rewrote the entire
fidget.nvimmodule to include extensive configuration options. Optionvim.fidget-nvim.align.bottomhas been removed in favor ofvim.fidget-nvim.notification.window.align, which now supportstopandbottomvalues.vim.fidget-nvim.align.righthas no longer any equivalent and also has been removed. -
which-key.nvimcategories can now be customized through vim.binds.whichKey.register -
Added
magicktovim.luaPackagesforimage.nvim. -
Added
alejandrato the default devShell. -
Migrated neovim-flake to
makeNeovimUnstablewrapper.
-
Finished moving to
nixosOptionsDocin the documentation and changelog. All documentation options and files are fully free of Asciidoc, and will now use Nixpkgs flavored markdown. -
Bumped plugin inputs to their latest versions.
-
Deprecated
presence.nvimin favor ofneocord. This meansvim.rich-presence.presence-nvimis removed and will throw a warning if used. You are recommended to rewrite your neocord configuration from scratch based on the. official documentation -
Removed Tabnine plugin due to the usage of imperative tarball downloads. If you'd like to see it back, please create an issue.
-
Added support for css and tailwindcss through vscode-language-servers-extracted & tailwind-language-server. Those can be enabled through
vim.languages.cssandvim.languages.tailwind. -
Lualine module now allows customizing
always_divide_middle,ignore_focusanddisabled_filetypesthrough the new options: vim.statusline.lualine.alwaysDivideMiddle, vim.statusline.lualine.ignoreFocus and vim.statusline.lualine.disabledFiletypes. -
Updated all plugin inputs to their latest versions (21.04.2024) - this brought minor color changes to the Catppuccin theme.
-
Moved home-manager module entrypoint to
flake/modulesand added an experimental Nixos module. This requires further testing before it can be considered ready for use. -
Made lib calls explicit. E.g.
lib.strings.optionalStringinstead oflib.optionalString. This is a pattern expected to be followed by all contributors in the future. -
Added
image.nvimfor image previews. -
The final neovim package is now exposed. This means you can build the neovim package that will be added to your package list without rebuilding your system to test if your configuration yields a broken package.
-
Changed the tree structure to distinguish between core options and plugin options.
-
Added plugin auto-discovery from plugin inputs. This is mostly from JordanIsaac's neovim-flake. Allows contributors to add plugin inputs with the
plugin-prefix to have them automatically discovered for theplugintype inlib/types. -
Moved internal
wrapLuaConfigto the extended library, structured its arguments to takeluaBefore,luaConfigandluaAfteras strings, which are then concatted inside a lua block. -
Added
vim.luaConfigPreand {option}vim-luaConfigPostfor inserting verbatim Lua configuration before and after the resolved Lua DAG respectively. Both of those options take strings as the type, so you may read the contents of a Lua file from a given path. -
Added
vim.spellchecking.ignoredFiletypesandvim.spellChecking.programmingWordlist.enablefor ignoring certain filetypes in spellchecking and enablingvim-dirtytalkrespectively. The previously usedvim.spellcheck.vim-dirtytalkaliases to the latter option. -
Exposed
withRuby,withNodeJs,withPython3, andpython3Packagesfrom themakeNeovimConfigfunction under their respective options. -
Added
vim.extraPackagesfor appending additional packages to the wrapper PATH, making said packages available while inside the Neovim session. -
Made Treesitter options configurable, and moved treesitter-context to
setupOptswhile it is enabled. -
Added
vim.notify.nvim-notify.setupOpts.renderwhich takes either a string of enum, or a Lua function. The default is "compact", but you may change it according to nvim-notify documentation.
Release 0.7
Release notes for release 0.7
Breaking Changes and Migration Guide
vim.configRC removed
In v0.7 we are removing vim.configRC in favor of making vim.luaConfigRC the
top-level DAG, and thereby making the entire configuration Lua based. This
change introduces a few breaking changes:
vim.configRChas been removed, which means that you have to convert all of your custom vimscript-based configuration to Lua. As for how to do that, you will have to consult the Neovim documentation and your search engine.- After migrating your Vimscript-based configuration to Lua, you might not be
able to use the same entry names in
vim.luaConfigRC, because those have also slightly changed. See the new DAG entries in nvf manual for more details.
Why?
Neovim being an aggressive refactor of Vim, is designed to be mainly Lua based; making good use of its extensive Lua API. Additionally, Vimscript is slow and brings unnecessary performance overhead while working with different configuration formats.
vim.maps rewrite
Instead of specifying map modes using submodules (e.g., vim.maps.normal), a
new vim.keymaps submodule with support for a mode option has been
introduced. It can be either a string, or a list of strings, where a string
represents the short-name of the map mode(s), that the mapping should be set
for. See :help map-modes for more information.
For example:
vim.maps.normal."<leader>m" = { ... };
has to be replaced by
vim.keymaps = [
{
key = "<leader>m";
mode = "n";
}
...
];
vim.lsp.nvimCodeActionMenu removed in favor of vim.ui.fastaction
The nvim-code-action-menu plugin has been archived and broken for a long time,
so it's being replaced with a young, but better alternative called
fastaction.nvim. Simply remove everything set under
vim.lsp.nvimCodeActionMenu, and set vim.ui.fastaction.enable to true.
Note that we are looking to add more alternatives in the future like dressing.nvim and actions-preview.nvim, in case fastaction doesn't work for everyone.
type based modules removed
As part of the autocompletion rewrite, modules that used to use a type option
have been replaced by per-plugin modules instead. Since both modules only had
one type, you can simply change
vim.autocomplete.*->vim.autocomplete.nvim-cmp.*vim.autopairs.enable->vim.autopairs.nvim-autopairs.enable
nixpkgs-fmt removed in favor of nixfmt
nixpkgs-fmt has been archived for a while, and it's finally being removed in
favor of nixfmt (more information can be found
here.
To migrate to nixfmt, simply change vim.languages.nix.format.type to
nixfmt.
leader changes
This has been deprecated in favor of using the more generic vim.globals (you
can use vim.globals.mapleader to change this instead).
Rust specific keymaps now use maplocalleader instead of localleader by
default. This is to avoid conflicts with other modules. You can change
maplocalleader with vim.globals.maplocalleader, but it's recommended to set
it to something other than mapleader to avoid conflicts.
vim.* changes
Inline with the leader changes, we have removed some
options that were under vim as convenient shorthands for vim.o.* options.
Warning
As v0.7 features the addition of vim.options, those options are now
considered as deprecated. You should migrate to the appropriate options in the
vim.options submodule.
The changes are, in no particular order:
-
colourTerm,mouseSupport,cmdHeight,updateTime,mapTime,cursorlineOpt,splitBelow,splitRight,autoIndentandwordWraphave been mapped to theirvim.optionsequivalents. Please see the module definition for the updated options. -
tabWidthhas been removed as it lead to confusing behaviour. You can replicate the same functionality by settingshiftwidth,tabstopandsofttabstopundervim.optionsas you see fit.
Changelog
- Add support for typst under
vim.languages.typstThis will enable thetypst-lsplanguage server, and thetypstfmtformatter
-
Modified type for
vim.visuals.fidget-nvim.setupOpts.progress.display.overridesfromanythingto asubmodulefor better type checking. -
Fix null
vim.lsp.mappingsgenerating an error and not being filtered out. -
Add basic transparency support for
oxocarbontheme by setting the highlight group forNormal,NormalFloat,LineNr,SignColumnand optionallyNvimTreeNormaltonone. -
Fix
vim.ui.smartcolumn.setupOpts.custom_colorcolumnusing the wrong typeintinstead of the expected typestring.
- Fix broken treesitter-context keybinds in visual mode
- Deprecate use of
__emptyto define empty tables in Lua. Empty attrset are no longer filtered and thus should be used instead. - Add dap-go for better dap configurations
- Make noice.nvim customizable
- Standardize border style options and add custom borders
- Remove
vim.disableDefaultRuntimePathsin wrapper options.- As nvf uses
$NVIM_APP_NAMEas of recent changes, we can safely assume any configuration in$XDG_CONFIG_HOME/nvfis intentional.
- As nvf uses
- Switch from rust-tools.nvim to the more feature-packed rustaceanvim. This switch entails a whole bunch of new features and options, so you are recommended to go through rustacean.nvim's README to take a closer look at its features and usage
- Add lz.n support and lazy-load some builtin plugins.
- Add simpler helper functions for making keymaps
poz:
-
Add ocaml-lsp support
-
Fix "Emac" typo
-
Add new-file-template.nvim to automatically fill new file contents using templates
-
Make neo-tree.nvim display file icons properly by enabling
visuals.nvimWebDevicons
-
Move the
themedag entry to beforeluaScript. -
Add rustfmt as the default formatter for Rust.
-
Enabled the terminal integration of catppuccin for theming Neovim's built-in terminal (this also affects toggleterm).
-
Migrate bufferline to setupOpts for more customizability
-
Use
clangdas the default language server for C languages -
Expose
lib.nvim.types.pluginType, which for example allows the user to create abstractions for adding plugins -
Migrate indent-blankline to setupOpts for more customizability. While the plugin's options can now be found under
indentBlankline.setupOpts, the previous iteration of the module also included out of place/broken options, which have been removed for the time being. These are:listChar- this was already unusedfillChar- this had nothing to do with the plugin, please configure it yourself by addingvim.opt.listchars:append({ space = '<char>' })to your lua configurationeolChar- this also had nothing to do with the plugin, please configure it yourself by addingvim.opt.listchars:append({ eol = '<char>' })to your lua configuration
-
Replace
vim.lsp.nvimCodeActionMenuwithvim.ui.fastaction, see the breaking changes section above for more details -
Add a
setupOptsoption to nvim-surround, which allows modifying options that aren't defined in nvf. Move the alternate nvim-surround keybinds to usesetupOpts. -
Remove
autopairs.type, and renameautopairs.enabletoautopairs.nvim-autopairs.enable. The newvim.autopairs.nvim-autopairs.enablesupportssetupOptsformat by default. -
Refactor of
nvim-cmpand completion related modules- Remove
autocomplete.typein favor of per-plugin enable options such asvim.autocomplete.nvim-cmp.enable. - Deprecate legacy Vimsnip in favor of Luasnip, and integrate
friendly-snippets for bundled snippets.
vim.snippets.luasnip.enablecan be used to toggle Luasnip. - Add sorting function options for completion sources under
vim.autocomplete.nvim-cmp.setupOpts.sorting.comparators
- Remove
-
Add C# support under
vim.languages.csharp, with support for both omnisharp-roslyn and csharp-language-server. -
Add Julia support under
vim.languages.julia. Note that the entirety of Julia is bundled with nvf, if you enable the module, since there is no way to provide only the LSP server. -
Add
run.nvimsupport for running code using cached commands.
-
Make Neovim's configuration file entirely Lua based. This comes with a few breaking changes:
vim.configRChas been removed. You will need to migrate your entries to Neovim-compliant Lua code, and add them tovim.luaConfigRCinstead. Existing vimscript configurations may be preserved invim.cmdfunctions. Please see Neovim documentation onvim.cmdvim.luaScriptRCis now the top-level DAG, and the internalvim.pluginRChas been introduced for setting up internal plugins. See the "DAG entries in nvf" manual page for more information.
-
Rewrite
vim.maps, see the breaking changes section above.
-
Add
deno fmtas the default Markdown formatter. This will be enabled automatically if you have autoformatting enabled, but can be disabled manually if you choose to. -
Add
vim.extraLuaFilesfor optionally sourcing additional lua files in your configuration. -
Refactor
programs.languages.elixirto use lspconfig and none-ls for LSP and formatter setups respectively. Diagnostics support is considered, and may be added once the credo linter has been added to nixpkgs. A pull request is currently open. -
Remove vim-tidal and friends.
-
Clean up Lualine module to reduce theme dependency on Catppuccin, and fixed blending issues in component separators.
-
Add [ts-ereror-translator.nvim] extension of the TS language module, under
vim.languages.ts.extensions.ts-error-translatorto aid with Typescript development. -
Add neo-tree.nvim as an alternative file-tree plugin. It will be available under
vim.filetree.neo-tree, similar to nvimtree. -
Add
nvf-print-config&nvf-print-config-pathhelper scripts to Neovim closure. Both of those scripts have been automatically added to your PATH upon using neovimConfig orprograms.nvf.enable.nvf-print-configwill display yourinit.lua, in full.nvf-print-config-pathwill display the path to a clone of yourinit.lua. This is not the path used by the Neovim wrapper, but an identical clone.
-
Add
vim.ui.breadcrumbs.lualineto allow fine-tuning breadcrumbs behaviour on Lualine. Onlyvim.ui.breadcrumbs.lualine.winbaris supported for the time being.vim.ui.breadcrumbs.lualine.winbar.enablehas been added to allow controlling the default behaviour of thenvim-naviccomponent on Lualine, which used to occupywinbar.lualine_cas long as breadcrumbs are enabled.vim.ui.breadcrumbs.alwaysRenderhas been renamed tovim.ui.breadcrumbs.lualine.winbar.alwaysRenderto be conform to the new format.
-
Add basedpyright as a Python LSP server and make it default.
-
Add python-lsp-server as an additional Python LSP server.
-
Add
vim.optionsto setvim.ovalues in in your nvf configuration without using additional Lua. See option documentation for more details. -
Add
vim.dashboard.dashboard-nvim.setupOptsto allow user configuration for dashboard.nvim -
Update
lualine.nviminput and add missing themes:- Adds
ayu,gruvbox_dark,iceberg,moonfly,onedark,powerline_darkandsolarized_lightthemes.
- Adds
-
Add
vim.spellcheck.extraSpellWordsto allow adding arbitrary spellfiles to Neovim's runtime with ease. -
Add combined nvf configuration (
config.vim) into the final package'spassthruaspassthru.neovimConfigurationfor easier debugging. -
Add support for tiny-devicons-auto-colors under
vim.visuals.tiny-devicons-auto-colors -
Move options that used to set
vim.ovalues (e.g.vim.wordWrap) intovim.optionsas default values. Some are left as they don't have a direct equivalent, but expect a switch eventually.
- Telescope:
- Fixed
project-nvimcommand and keybinding - Added default ikeybind/command for
Telescope resume(<leader>fr)
- Fixed
- Add
hcllsp/formatter (not the same asterraform, which is not useful for e.g.nomadconfig files).
- Add LSP and Treesitter support for R under
vim.languages.R.- Add formatter support for R, with styler and formatR as options
- Add Otter support under
vim.lsp.otterand an assert to prevent conflict with ccc - Fixed typo in Otter's setupOpts
- Add Neorg support under
vim.notes.neorg - Add LSP, diagnostics, formatter and Treesitter support for Kotlin under
vim.languages.kotlin - changed default keybinds for leap.nvim to avoid altering expected behavior
- Add LSP, formatter and Treesitter support for Vala under
vim.languages.vala - Add [Tinymist](https://github.com/Myriad-Dreamin/tinymist] as a formatter for the Typst language module.
- Add LSP and Treesitter support for Assembly under
vim.languages.assembly - Move which-key to the new spec
- Add LSP and Treesitter support for Nushell under
vim.languages.nu - Add LSP and Treesitter support for Gleam under
vim.languages.gleam
- Add support for base16 theming under
vim.theme - Fix internal breakage in
elixir-toolssetup.
- Add LSP support for Scala via nvim-metals
- Add biome support for Typescript, CSS and
Svelte. Enable them via
vim.languages.ts.format.type,vim.languages.css.format.typeandvim.languages.svelte.format.typerespectively. - Replace nixpkgs-fmt with nixfmt (nixfmt-rfc-style).
- Add
precognition-nvim.
- Add support for Astro language server.
Release 0.8
Breaking changes
-
git-conflictkeybinds are now prefixed with<leader>to avoid conflicting with builtins. -
alphais now configured with nix, default config removed. -
Lspsaga module no longer ships default keybindings. The keybind format has been changed by upstream, and old keybindings do not have equivalents under the new API they provide. Please manually set your keybinds according to Lspsaga documentation following the new API.
-
none-ls has been updated to the latest version. If you have been using raw Lua configuration to manually configure it, some of the formats may become unavailable as they have been refactored out of the main none-ls repository upstream.
-
vim.useSystemClipboardhas been deprecated as a part of removing most top-level convenience options, and should instead be configured in the new module interface. You may setvim.clipboard.registersappropriately to configure Neovim to use the system clipboard. -
Changed which-key group used for gitsigns from
<leader>gto<leader>hto align with the "hunks" themed mapping and avoid conflict with the new neogit group. -
LSP keybinds and related plugin integrations are now attached in an LspAttach autocmd event. If you were calling
default_on_attach()in your LSP setup you can remove them now.
Changelog
-
Add typst-preview.nvim under
languages.typst.extensions.typst-preview-nvim. -
Add a search widget to the options page in the nvf manual.
-
Add render-markdown.nvim under
languages.markdown.extensions.render-markdown-nvim. -
Implement
vim.git.gitsigns.setupOptsfor user-specified setup table in gitsigns configuration. -
vim.options.mouseno longer compares values to an enum of available mouse modes. This means you can provide any string without the module system warning you that it is invalid. Do keep in mind that this value is no longer checked, so you will be responsible for ensuring its validity. -
Deprecate
vim.enableEditorconfigin favor ofvim.globals.editorconfig. -
Deprecate rnix-lsp as it has been abandoned and archived upstream.
-
Hardcoded indentation values for the Nix language module have been removed. To replicate previous behaviour, you must either consolidate Nix indentation in your Editorconfig configuration, or use an autocommand to set indentation values for buffers with the Nix filetype.
-
Add
vim.lsp.lightbulb.autocmd.enablefor manually managing the previously managed lightbulb autocommand.- A warning will occur if {option} vim-lsp-lightbulb-autocmd-enable) and
vim.lsp.lightbulb.setupOpts.autocmd.enabledare both set at the same time. Pick only one.
- A warning will occur if {option} vim-lsp-lightbulb-autocmd-enable) and
-
Add yanky.nvim to available plugins, under
vim.utility.yanky-nvim. -
Fix plugin
setupOptsfor yanky.nvim and assert if shada is configured as a backend while shada is disabled in Neovim options. -
Add yazi.nvim as a companion plugin for Yazi, the terminal file manager.
-
Add
vim.autocmdsandvim-augroupsto allow declaring autocommands via Nix. -
Fix plugin
setupOptsfor yanky.nvim and assert if shada is configured as a backend while shada is disabled in Neovim options. -
Add yazi.nvim as a companion plugin for Yazi, the terminal file manager.
-
Add snacks.nvim under
vim.utility.snacks-nvimas a general-purpose utility plugin. -
Move LSPSaga to
setupOptsformat, allowing freeform configuration invim.lsp.lspsaga.setupOpts. -
Lazyload Lspsaga and remove default keybindings for it.
-
Add colorful-menu.nvim to enhance the completion menus, with optional integration for blink-cmp and nvim-cmp
-
Add oil.nvim as an alternative file explorer. It will be available under
vim.utility.oil-nvim. -
Add
vim.diagnosticsto interact with Neovim's diagnostics module. Available options forvim.diagnostic.config()can now be customized through thevim.diagnostics.configin nvf. -
Add
vim.clipboardmodule for easily managing Neovim clipboard providers and relevant packages in a simple UI.- This deprecates
vim.useSystemClipboardas well, see breaking changes section above for migration options.
- This deprecates
-
Add hunk.nvim, Neovim plugin & tool for splitting diffs in Neovim. Available as
vim.git.hunk-nvim -
Move
crates.nvimintolanguages.rust.extensions and supportsetupOptsfor the plugin. Deprecates the top level "crates" option inlanguages.rust.
- Migrate all current lsp configurations to
vim.lsp.serverand remove internal dependency onnvim-lspconfig
- Add Haskell support under
vim.languages.haskellusing haskell-tools.nvim.
- Add [aerial.nvim].
- Add [nvim-ufo].
- Add blink.cmp support.
- Add
LazyFileuser event. - Migrate language modules from none-ls to conform/nvim-lint
- Add tsx support in conform and lint
- Moved code setting
additionalRuntimePathsandenableLuaLoaderout ofluaConfigPre's default to prevent being overridden - Use conform over custom autocmds for LSP format on save
- Move LSP keybinds and other related plugin integrations into an LspAttach event.
- Allow multiple formatters in language modules.
- Fixed
prettierin astro and svelte, and removedprettierddue to high complexity that would be needed to support it.
-
Add Odin support under
vim.languages.odin. -
Disable the built-in format-on-save feature of zls. Use
vim.lsp.formatOnSaveinstead.
- Remove
vim.notes.obsidian.setupOpts.dir, which was set by default. Fixes issue with setting the workspace directory. - Add
vim.snippets.luasnip.setupOpts, which was previously missing. - Add
"prettierd"as a formatter option invim.languages.markdown.format.type. - Add the following plugins from
mini.nvim
mini.aimini.alignmini.animatemini.base16mini.basicsmini.bracketedmini.bufremovemini.cluemini.colorsmini.commentmini.completionmini.depsmini.diffmini.docmini.extramini.filesmini.fuzzymini.gitmini.hipatternsmini.huesmini.iconsmini.indentscopemini.jumpmini.jump2dmini.mapmini.miscmini.movemini.notifymini.operatorsmini.pairsmini.pickmini.sessionsmini.snippetsmini.splitjoinmini.startermini.statuslinemini.surroundmini.tablinemini.testmini.trailspacemini.visits
- Add fzf-lua in
vim.fzf-lua - Add rainbow-delimiters
in
vim.visuals.rainbow-delimiters - Add options to define highlights under
vim.highlight
- Add WGSL support under
vim.languages.wgsl.
- Add Ruby support under
vim.languages.rubyusing solargraph. - Add
nordtheme from gbprod/nord.nvim.
- Add ruff as a formatter option in
vim.languages.python.format.type. - Add cue support under
vim.languages.cue.
- Add
vim.languages.zig.dapsupport through pkgs.lldb dap adapter. Code Inspiration fromvim.languages.clang.dapimplementation. - Add leetcode.nvim plugin under
vim.utility.leetcode-nvim. - Add [codecompanion.nvim] plugin under
vim.assistant.codecompanion-nvim. - Fix codecompanion-nvim plugin: nvim-cmp error and setupOpts defaults.
- Add support for nixd language server.
- Add multicursors.nvim to
available plugins, under
vim.utility.multicursors. - Add hydra.nvim as dependency for
multicursors.nvimand lazy loads by default.
-
Fix plugin name for lsp/lspkind.
-
Move
vim-illuminatetosetupOpts format
- Add lsp options support for nixd language server.
- Corrects pin names used for nvim themes.
- Add git-conflict plugin for resolving git conflicts.
- Add formatters for go: gofmt, golines and gofumpt.
- Add harpoon plugin for navigation
- Add YAML support under
vim.languages.yaml.
- Add missing
yazi.nvimdependency (snacks.nvim). - Add mkdir.nvim plugin for automatic creation of parent directories when editing a nested file.
- Add nix-develop.nvim plugin for
in-neovim
nix develop,nix shelland more. - Add direnv.vim plugin for automatic syncing of nvim shell environment with direnv's.
- Add blink.cmp source options and some default-disabled sources.
- Add blink.cmp option to add friendly-snippets so blink.cmp can source snippets from it.
- Fix blink.cmp breaking when built-in sources were modified.
- Fix conform.nvim not allowing disabling formatting on and after save. Use
nullvalue to disable them if conform is enabled. - Add markdown-oxide option to markdown language module.
- Fix Helm-YAML language module integration. YAML diagnostics will now remain in
helmfiles when both are enabled. - Fix YAML language module not activating LSP keybinds if the Helm language module was also enabled.
- Fix
jsonlanguage module (default) language server not activating.
- Fix plugin
setupOptsforneovim-session-managerhaving an invalid value forautoload_mode.
- Add
github-nvim-themetheme from projekt0n/github-nvim-theme.
alphais now configured with nix.- Add
markview-nvimmarkdown renderer.
- Add
intelephenselanguage server support undervim.languages.php.lsp.server
- Add Helm chart support under
vim.languages.helm.
eslint_dnow checks for configuration files to load.- Fix an error where
eslint_dfails to load. - Add required files support for linters under
vim.diagnostics.nvim-lint.linters.*.required_files. - Add global function
nvf_lintundervim.diagnostics.nvim-lint.lint_function. - Deprecate
vim.scrollOffsetin favor ofvim.options.scrolloff. - Fix
svelte-language-servernot reloading .js/.ts files on change.
- Add F# support under
vim.languages.fsharp.
- Add lint (luacheck) and formatting (stylua) support for Lua.
- Add lint (markdownlint-cli2) support for Markdown.
- Add catppuccin integration for Bufferline, Lspsaga.
- Add
neo-tree,snacks.explorerintegrations tobufferline. - Add more applicable filetypes to illuminate denylist.
- Disable mini.indentscope for applicable filetypes.
- Fix fzf-lua having a hard dependency on fzf.
- Enable inlay hints support -
config.vim.lsp.inlayHints. - Add
neo-tree,snacks.pickerextensions tolualine. - Add support for
vim.lsp.formatOnSaveandvim.lsp.mappings.toggleFormatOnSave
- Fix
pickersconfiguration fortelescopeby nesting it undersetupOpts - Fix
find_commandconfiguration fortelescopeby nesting it undersetupOpts.pickers.find_files - Update default
telescope.setupOpts.pickers.find_files.find_commandto only include files (and therefore exclude directories from results)
- Fix oil config referencing snacks
- Add flash.nvim plugin to
vim.utility.motion.flash-nvim - Fix default telescope ignore list entry for '.git/' to properly match
- Add gitlinker.nvim plugin to
vim.git.gitlinker-nvim - Add nvim-treesitter-textobjects plugin to
vim.treesitter.textobjects - Default to disabling Conform for Rust if rust-analyzer is used
- To force using Conform, set
languages.rust.format.enable = true.
- To force using Conform, set
- Add custom snippet support to
vim.snippets.luasnip - Fix namespace of python-lsp-server by changing it to python3Packages
- Add missing
flutter-tools.nvimdependencyplenary.nvim. - Add necessary dependency of
flutter-tools.nvimon lsp. - Add the
vim.languages.dart.flutter-tools.flutterPackageoption. - Fix the type of the
highlightcolor options. - Add vim-sleuth plugin under
vim.utility.sleuth.
- Change python dap adapter name from
pythonto commonly expecteddebugpy.
- Fix render-markdown.nvim file_types option type to list, to accept merging.
- Add avante.nvim plugin under
vim.assistant.avante-nvim.
poz:
- Fix gitsigns null-ls issue.
- Add everforest theme support.
- Add oil-git-status support to oil module.
- Add Plugin Hardtime.nvim under
vim.binds.hardtime-nvimwithenableandsetupOptsoptions
- Add missing
right_alignoption for existingrenderer.iconsoptions. - Add missing
render.iconsoptions (hidden_placement,diagnostics_placement, andbookmarks_placement).
- Add
rubylspoption invim.languages.ruby.lsp.serverto use shopify's ruby-lsp language server
- Add solarized-osaka.nvim theme
- Add img-clip.nvim plugin in
vim.utility.images.img-clipwithenableandsetupOpts - Add
vim.utility.images.img-clip.enable = isMaximalin configuration.nix
- Add Clojure support under
vim.languages.clojureusing clojure-lsp - Add code evaluation environment conjure under
vim.repl.conjure
- Add missing
transparentoption for existing onedark.nvim theme.
- Added "auto" flavour for catppuccin theme
- Add solarized.nvim theme with support for multiple variants
- Add smart-splits.nvim for navigating between Neovim windows and terminal
multiplexer panes. Available at
vim.utility.smart-splits. - Restore vim-dirtytalk plugin and fix ordering with spellcheck in generated config.
- Fix lualine separator options
- Add neogit, an interactive and powerful Git interface for Neovim, inspired by Magit
- Allow deregistering which-key binds or groups by setting them to
null
- Add supermaven-nvim plugin in
vim.assistant.supermaven-nvimwithenableandsetupOpts
-
flake-parts'snixpkgs-libinput follows nvf'snixpkgsinput to reduce download size. -
flake-utils'ssystemsinputs follows nvf'ssystemsinput to transitively leverage the pattern introduced in commit fc8206e7a61d ("flake: utilize nix-systems for overridable flake systems").
- fix broken
neorggrammars - remove obsolete warning in the
ottermodule - add mainProgram attribute to vala language server wrapper
- fix
crates-nvim's completions by using the in-program lsp
- Fix default blink.cmp sources "path" and "buffer" not working when
autocomplete.nvim-cmp.enablewas disabled andautocomplete.nvim-cmp.sourceshad not been modified.
- Add nvim-biscuits support under
vim.utility.nvim-biscuits. - Add just support under
vim.languages.justusing just-lsp. - Add roslyn-ls to the
vim.languages.csharpmodule. - Add JSON support under
vim.languages.jsonusing jsonls and jsonfmt. - Add advanced HTML support under
vim.languages.htmlusing superhtml and htmlHINT. - Add QMK support under
vim.utility.qmk-nvimvia qmk-nvim. - Add QML support under
vim.languages.qmlusing qmlls and qmlformat.
- Add EEx Treesitter Grammar for Elixir
- Add HEEx Treesitter Grammar for Elixir
- Fixed
typescripttreesitter grammar not being included by default.
- Add [ruff-fix] as a formatter option in
vim.languages.python.format.type.
- Add harper-ls to the
vim.lspmodule.
- Fix
vim.lazy.plugins.<name>.enabledLua evaluation.
-
Add nvim-highlight-colors plugin in
vim.ui.nvim-highlight-colorswithenableandsetupOpts -
Fix blink.cmp keymap preset types to allow alternate cmdline, terminal, etc modes to
inheritthe default mode keymaps. This is an option as per the blink.cmp docs and is now supported in nvf.
- Add inline typst concealing support under
vim.languages.typstusing typst-concealer.
- Migrate phaazon/hop.nvim to smoka7/hop.nvim
- Update
pythonlanguage module to use correct lsp binary. - Fix
pythonpyright and basedpyright language servers not using default on attach behavior.
- Add mellow.nvim plugin for vim and lualine theme support
- Enable
languages.ts.formatfor.jsfiles - Add emmet-ls to
html.lsp.servers
- Add neocodeium plugin in
vim.assistant.neocodeiumwithenable,setupOptsandkeymaps
- Added gitFiles mapping option to telescope