From a6a06f4e7214cf5fe57cf76f51e5627b538269ed Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 1 Dec 2024 10:09:13 +0300 Subject: [PATCH] modules/{neovim,wrapper}: move Vim options to `vim.options` defaults --- modules/extra/deprecations.nix | 138 ++++++++++++++++++++------------- modules/neovim/init/basic.nix | 87 --------------------- modules/wrapper/rc/options.nix | 77 +++++++++++++++++- 3 files changed, 157 insertions(+), 145 deletions(-) diff --git a/modules/extra/deprecations.nix b/modules/extra/deprecations.nix index 2b6fa7d7..ed28201d 100644 --- a/modules/extra/deprecations.nix +++ b/modules/extra/deprecations.nix @@ -1,65 +1,95 @@ {lib, ...}: let inherit (lib.modules) mkRemovedOptionModule mkRenamedOptionModule; + inherit (lib.lists) concatLists; + inherit (lib.nvim.config) batchRenameOptions; + + migrationTable = { + colourTerm = "termguicolors"; + mouseSupport = "mouse"; + cmdHeight = "cmdheight"; + updateTime = "updatetime"; + mapTimeout = "tm"; + cursorlineOpt = "cursorlineopt"; + splitBelow = "splitbelow"; + splitRight = "splitright"; + autoIndent = "autoindent"; + wordWrap = "wrap"; + }; + + renamedVimOpts = batchRenameOptions ["vim"] ["vim" "options"] migrationTable; in { - imports = [ - # 2024-06-06 - (mkRemovedOptionModule ["vim" "tidal"] '' - Tidalcycles language support has been removed as of 2024-06-06 as it was long unmaintained. If - you depended on this functionality, please open an issue. - '') + imports = concatLists [ + [ + # 2024-06-06 + (mkRemovedOptionModule ["vim" "tidal"] '' + Tidalcycles language support has been removed as of 2024-06-06 as it was long unmaintained. If + you depended on this functionality, please open an issue. + '') - # 2024-07-20 - (mkRemovedOptionModule ["vim" "lsp" "nvimCodeActionMenu"] '' - nvimCodeActionMenu has been deprecated and removed upstream. As of 0.7, fastaction will be - available under `vim.ui.fastaction` as a replacement. Simply remove everything under - `vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`. - '') + # 2024-07-20 + (mkRemovedOptionModule ["vim" "lsp" "nvimCodeActionMenu"] '' + nvimCodeActionMenu has been deprecated and removed upstream. As of 0.7, fastaction will be + available under `vim.ui.fastaction` as a replacement. Simply remove everything under + `vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`. + '') - (mkRemovedOptionModule ["vim" "autopairs" "enable"] '' - vim.autopairs.enable has been removed in favor of per-plugin modules. - You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. - '') - (mkRemovedOptionModule ["vim" "autopairs" "type"] '' - vim.autopairs.type has been removed in favor of per-plugin modules. - You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. - '') - (mkRemovedOptionModule ["vim" "autocomplete" "enable"] '' - vim.autocomplete.enable has been removed in favor of per-plugin modules. - You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. - '') - (mkRemovedOptionModule ["vim" "autocomplete" "type"] '' - vim.autocomplete.type has been removed in favor of per-plugin modules. - You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. - '') - (mkRemovedOptionModule ["vim" "autocomplete" "sources"] '' - vim.autocomplete.sources has been removed in favor of per-plugin modules. - You can add nvim-cmp sources with vim.autocomplete.nvim-cmp.sources - instead. - '') - (mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] '' - vim.snippets.vsnip.enable has been removed in favor of the more modern luasnip. - '') - (mkRenamedOptionModule ["vim" "lsp" "lspkind" "mode"] ["vim" "lsp" "lspkind" "setupOpts" "mode"]) + (mkRemovedOptionModule ["vim" "autopairs" "enable"] '' + vim.autopairs.enable has been removed in favor of per-plugin modules. + You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. + '') + (mkRemovedOptionModule ["vim" "autopairs" "type"] '' + vim.autopairs.type has been removed in favor of per-plugin modules. + You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. + '') + (mkRemovedOptionModule ["vim" "autocomplete" "enable"] '' + vim.autocomplete.enable has been removed in favor of per-plugin modules. + You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. + '') + (mkRemovedOptionModule ["vim" "autocomplete" "type"] '' + vim.autocomplete.type has been removed in favor of per-plugin modules. + You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. + '') + (mkRemovedOptionModule ["vim" "autocomplete" "sources"] '' + vim.autocomplete.sources has been removed in favor of per-plugin modules. + You can add nvim-cmp sources with vim.autocomplete.nvim-cmp.sources + instead. + '') + (mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] '' + vim.snippets.vsnip.enable has been removed in favor of the more modern luasnip. + '') + (mkRenamedOptionModule ["vim" "lsp" "lspkind" "mode"] ["vim" "lsp" "lspkind" "setupOpts" "mode"]) - # 2024-10-14 - (mkRemovedOptionModule ["vim" "configRC"] '' - Please migrate your configRC sections to Neovim's Lua format, and - add them to `vim.luaConfigRC`. + # 2024-10-14 + (mkRemovedOptionModule ["vim" "configRC"] '' + Please migrate your configRC sections to Neovim's Lua format, and + add them to `vim.luaConfigRC`. - See the v0.7 release notes for more information on why and how to - migrate your existing configurations to the new format. - '') + See the v0.7 release notes for more information on why and how to + migrate your existing configurations to the new format. + '') - (mkRemovedOptionModule ["vim" "disableDefaultRuntimePaths"] '' - Nvf now uses $NVIM_APP_NAME so there is no longer the problem of - (accidental) leaking of user configuration. - '') + (mkRemovedOptionModule ["vim" "disableDefaultRuntimePaths"] '' + Nvf now uses $NVIM_APP_NAME so there is no longer the problem of + (accidental) leaking of user configuration. + '') - (mkRemovedOptionModule ["vim" "lsp" "trouble" "mappings" "toggle"] '' - With Trouble having so many different modes, and breaking changes - upstream, it no longer makes sense, nor works, to toggle only Trouble. - '') - # 2024-11-30 - (mkRenamedOptionModule ["vim" "leaderKey"] ["vim" "globals" "mapleader"]) + (mkRemovedOptionModule ["vim" "lsp" "trouble" "mappings" "toggle"] '' + With Trouble having so many different modes, and breaking changes + upstream, it no longer makes sense, nor works, to toggle only Trouble. + '') + + # 2024-11-30 + (mkRenamedOptionModule ["vim" "leaderKey"] ["vim" "globals" "mapleader"]) + + (mkRemovedOptionModule ["vim" "tabWidth"] '' + Previous behaviour of this option was confusing and undocumented. Please set + `tabstop` and `shiftwidth` manually in `vim.options` or per-filetype in a + `ftplugin` directory added to your runtime path. + '') + ] + + # 2024-12-1 + # Migrated via batchRenameOptions. Further batch renames must be below this line. + renamedVimOpts ]; } diff --git a/modules/neovim/init/basic.nix b/modules/neovim/init/basic.nix index f51fb4ac..9370fa8f 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -15,12 +15,6 @@ cfg = config.vim; in { options.vim = { - colourTerm = mkOption { - type = bool; - default = true; - description = "Set terminal up for 256 colours"; - }; - disableArrows = mkOption { type = bool; default = false; @@ -39,12 +33,6 @@ in { description = "Start scrolling this number of lines from the top or bottom of the page."; }; - wordWrap = mkOption { - type = bool; - default = true; - description = "Enable word wrapping."; - }; - syntaxHighlighting = mkOption { type = bool; default = !config.vim.treesitter.highlight.enable; @@ -57,20 +45,6 @@ in { description = "Make use of the clipboard for default yank and paste operations. Don't use * and +"; }; - mouseSupport = mkOption { - type = enum ["a" "n" "v" "i" "c"]; - default = "a"; - description = '' - Set modes for mouse support. - - * a - all - * n - normal - * v - visual - * i - insert - * c - command - ''; - }; - lineNumberMode = mkOption { type = enum ["relative" "number" "relNumber" "none"]; default = "relNumber"; @@ -84,30 +58,6 @@ in { description = "Prevent swapfile and backupfile from being created"; }; - tabWidth = mkOption { - type = int; - default = 4; - description = "Set the width of tabs"; - }; - - autoIndent = mkOption { - type = bool; - default = true; - description = "Enable auto indent"; - }; - - cmdHeight = mkOption { - type = int; - default = 1; - description = "Height of the command pane"; - }; - - updateTime = mkOption { - type = int; - default = 300; - description = "The number of milliseconds till Cursor Hold event is fired"; - }; - showSignColumn = mkOption { type = bool; default = true; @@ -120,36 +70,12 @@ in { description = "Set how bells are handled. Options: on, visual or none"; }; - mapTimeout = mkOption { - type = int; - default = 500; - description = "Timeout in ms that Neovim will wait for mapped action to complete"; - }; - - splitBelow = mkOption { - type = bool; - default = true; - description = "New splits will open below instead of on top"; - }; - - splitRight = mkOption { - type = bool; - default = true; - description = "New splits will open to the right"; - }; - enableEditorconfig = mkOption { type = bool; default = true; description = "Follow editorconfig rules in current directory"; }; - cursorlineOpt = mkOption { - type = enum ["line" "screenline" "number" "both"]; - default = "line"; - description = "Highlight the text line of the cursor with CursorLine hl-CursorLine"; - }; - searchCase = mkOption { type = enum ["ignore" "smart" "sensitive"]; default = "sensitive"; @@ -184,19 +110,6 @@ in { encoding = "utf-8"; hidden = true; expandtab = true; - mouse = cfg.mouseSupport; - tabstop = cfg.tabWidth; - shiftwidth = cfg.tabWidth; - softtabstop = cfg.tabWidth; - cmdheight = cfg.cmdHeight; - updatetime = cfg.updateTime; - tm = cfg.mapTimeout; - cursorlineopt = cfg.cursorlineOpt; - splitbelow = cfg.splitBelow; - splitright = cfg.splitRight; - autoindent = cfg.autoIndent; - termguicolors = cfg.colourTerm; - wrap = cfg.wordWrap; }; globals = pushDownDefault { diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index 4a8ec8c7..4680190a 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -5,7 +5,7 @@ }: let inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; inherit (lib.strings) optionalString; - inherit (lib.types) str attrsOf lines listOf either path submodule anything; + inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything; inherit (lib.nvim.types) dagOf; inherit (lib.nvim.lua) listToLuaTable; @@ -107,12 +107,13 @@ in { mapleader = mkOption { type = str; default = " "; - description = "The key used for mappings"; + description = "The key used for `` mappings"; }; + maplocalleader = mkOption { type = str; default = ","; - description = "The key used for mappings"; + description = "The key used for `` mappings"; }; }; }; @@ -137,7 +138,75 @@ in { default = {}; type = submodule { freeformType = attrsOf anything; - options = {}; + options = { + termguicolors = mkOption { + type = bool; + default = true; + description = "Set terminal up for 256 colours"; + }; + + mouse = mkOption { + type = enum ["a" "n" "v" "i" "c"]; + default = "a"; + description = '' + Set modes for mouse support. + + * a - all + * n - normal + * v - visual + * i - insert + * c - command + ''; + }; + + cmdheight = mkOption { + type = int; + default = 1; + description = "Height of the command pane"; + }; + + updatetime = mkOption { + type = int; + default = 300; + description = "The number of milliseconds till Cursor Hold event is fired"; + }; + + tm = mkOption { + type = int; + default = 500; + description = "Timeout in ms that Neovim will wait for mapped action to complete"; + }; + + cursorlineopt = mkOption { + type = enum ["line" "screenline" "number" "both"]; + default = "line"; + description = "Highlight the text line of the cursor with CursorLine hl-CursorLine"; + }; + + splitbelow = mkOption { + type = bool; + default = true; + description = "New splits will open below instead of on top"; + }; + + splitright = mkOption { + type = bool; + default = true; + description = "New splits will open to the right"; + }; + + autoindent = mkOption { + type = bool; + default = true; + description = "Enable auto indent"; + }; + + wrap = mkOption { + type = bool; + default = true; + description = "Enable word wrapping."; + }; + }; }; example = {visualbell = true;};