diff --git a/docs/release-notes/rl-0.7.md b/docs/release-notes/rl-0.7.md index 59267ddf..fd3764ac 100644 --- a/docs/release-notes/rl-0.7.md +++ b/docs/release-notes/rl-0.7.md @@ -28,11 +28,11 @@ configuration formats. ### `vim.maps` rewrite {#sec-vim-maps-rewrite} -Instead of specifying map modes using submodules (eg.: `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. +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: @@ -334,6 +334,9 @@ The changes are, in no particular order: `vim.options` as default values. Some are left as they don't have a direct equivalent, but expect a switch eventually. +- Deprecated `vim.enableEditorconfig` in favor of + [](#opt-vim.globals.editorconfig). + [ppenguin](https://github.com/ppenguin): - Telescope: diff --git a/lib/languages.nix b/lib/languages.nix index 52f1b5b8..56c225d6 100644 --- a/lib/languages.nix +++ b/lib/languages.nix @@ -6,7 +6,12 @@ inherit (lib.nvim.attrsets) mapListToAttrs; in { # Converts a boolean to a yes/no string. This is used in lots of - # configuration formats. + # configuration formats, and is not covered by `toLuaObject` + toVimBool = bool: + if bool + then "yes" + else "no"; + diagnosticsToLua = { lang, config, @@ -30,8 +35,8 @@ in { mkEnable = desc: mkOption { - description = "Turn on ${desc} for enabled languages by default"; - type = bool; default = false; + type = bool; + description = "Turn on ${desc} for enabled languages by default"; }; } diff --git a/modules/extra/deprecations.nix b/modules/extra/deprecations.nix index e4cb193f..8d27d7ac 100644 --- a/modules/extra/deprecations.nix +++ b/modules/extra/deprecations.nix @@ -14,6 +14,7 @@ splitRight = "splitright"; autoIndent = "autoindent"; wordWrap = "wrap"; + showSignColumn = "signcolumn"; }; in { imports = concatLists [ @@ -35,23 +36,28 @@ in { 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. '') @@ -84,9 +90,12 @@ in { `tabstop` and `shiftwidth` manually in `vim.options` or per-filetype in a `ftplugin` directory added to your runtime path. '') + + # 2024-12-02 + (mkRenamedOptionModule ["vim" "enableEditorconfig"] ["vim" "globals" "editorconfig"]) ] - # 2024-12-1 + # 2024-12-01 # 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 9370fa8f..532ebcea 100644 --- a/modules/neovim/init/basic.nix +++ b/modules/neovim/init/basic.nix @@ -5,6 +5,7 @@ }: let inherit (lib.options) mkOption mkEnableOption literalMD; inherit (lib.strings) optionalString; + inherit (lib.attrsets) optionalAttrs; inherit (lib.types) enum bool str int either; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.dag) entryAfter; @@ -58,24 +59,12 @@ in { description = "Prevent swapfile and backupfile from being created"; }; - showSignColumn = mkOption { - type = bool; - default = true; - description = "Show the sign column"; - }; - bell = mkOption { type = enum ["none" "visual" "on"]; default = "none"; description = "Set how bells are handled. Options: on, visual or none"; }; - enableEditorconfig = mkOption { - type = bool; - default = true; - description = "Follow editorconfig rules in current directory"; - }; - searchCase = mkOption { type = enum ["ignore" "smart" "sensitive"]; default = "sensitive"; @@ -106,63 +95,55 @@ in { # Set options that were previously interpolated in 'luaConfigRC.basic' as vim.options (vim.o) # and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the # luaConfigRC section below. - options = pushDownDefault { - encoding = "utf-8"; - hidden = true; - expandtab = true; - }; + options = pushDownDefault (lib.mergeAttrsList [ + { + # Options that are always set, with a lower priority + encoding = "utf-8"; + hidden = true; + expandtab = true; - globals = pushDownDefault { - editorconfig = cfg.enableEditorconfig; - }; + # Junkfile Behaviour + swapfile = !cfg.preventJunkFiles; + backup = !cfg.preventJunkFiles; + writebackup = !cfg.preventJunkFiles; + } - # Options that are more difficult to set through 'vim.options'. Fear not, though - # as the Lua DAG is still as powerful as it could be. + (optionalAttrs cfg.undoFile.enable { + undofile = true; + undodir = cfg.undoFile.path; + }) + + (optionalAttrs (cfg.bell == "none") { + errorbells = false; + visualbell = false; + }) + + (optionalAttrs (cfg.bell == "on") { + visualbell = false; + }) + + (optionalAttrs (cfg.bell == "visual") { + visualbell = false; + }) + + (optionalAttrs (cfg.lineNumberMode == "relative") { + relativenumber = true; + }) + + (optionalAttrs (cfg.lineNumberMode == "number") { + number = true; + }) + + (optionalAttrs (cfg.lineNumberMode == "relNumber") { + number = true; + relativenumber = true; + }) + ]); + + # Options that are more difficult to set through 'vim.options'. Namely, appending values + # to pre-set Neovim options. Fear not, though as the Lua DAG is still as powerful as it + # could be. luaConfigRC.basic = entryAfter ["globalsScript"] '' - -- Settings that are set for everything - vim.opt.shortmess:append("c") - - ${optionalString cfg.undoFile.enable '' - vim.o.undofile = true - vim.o.undodir = ${toLuaObject cfg.undoFile.path} - ''} - - ${optionalString cfg.showSignColumn '' - vim.o.signcolumn = "yes" - ''} - - ${optionalString cfg.preventJunkFiles '' - vim.o.swapfile = false - vim.o.backup = false - vim.o.writebackup = false - ''} - - ${optionalString (cfg.bell == "none") '' - vim.o.errorbells = false - vim.o.visualbell = false - ''} - - ${optionalString (cfg.bell == "on") '' - vim.o.visualbell = false - ''} - - ${optionalString (cfg.bell == "visual") '' - vim.o.errorbells = false - ''} - - ${optionalString (cfg.lineNumberMode == "relative") '' - vim.o.relativenumber = true - ''} - - ${optionalString (cfg.lineNumberMode == "number") '' - vim.o.number = true - ''} - - ${optionalString (cfg.lineNumberMode == "relNumber") '' - vim.o.number = true - vim.o.relativenumber = true - ''} - ${optionalString cfg.useSystemClipboard '' vim.opt.clipboard:append("unnamedplus") ''} diff --git a/modules/neovim/init/spellcheck.nix b/modules/neovim/init/spellcheck.nix index 5d6f5bed..f8d784da 100644 --- a/modules/neovim/init/spellcheck.nix +++ b/modules/neovim/init/spellcheck.nix @@ -124,7 +124,6 @@ in { nvim --headless --clean \ --cmd "mkspell $out/spell/$name.add.spl $spellfile" -Es -n done - ''; in mkIf (cfg.extraSpellWords != {}) [ @@ -133,10 +132,12 @@ in { compileJoinedSpellfiles.outPath ]; - luaConfigRC.spellcheck = entryAfter ["basic"] '' - vim.opt.spell = true - vim.opt.spelllang = ${listToLuaTable cfg.languages} + options = { + spell = true; + spelllang = cfg.languages; + }; + luaConfigRC.spellcheck = entryAfter ["basic"] '' -- Disable spellchecking for certain filetypes -- as configured by `vim.spellcheck.ignoredFiletypes` vim.api.nvim_create_augroup("nvf_autocmds", {clear = false}) diff --git a/modules/plugins/utility/gestures/gesture-nvim/config.nix b/modules/plugins/utility/gestures/gesture-nvim/config.nix index 2996f7d2..9838c178 100644 --- a/modules/plugins/utility/gestures/gesture-nvim/config.nix +++ b/modules/plugins/utility/gestures/gesture-nvim/config.nix @@ -15,43 +15,47 @@ mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; in { config = mkIf cfg.enable { - vim.startPlugins = ["gesture-nvim"]; + vim = { + startPlugins = ["gesture-nvim"]; - vim.maps.normal = mkMerge [ - (mkSetLuaBinding mappings.draw "require('gesture').draw") - (mkSetLuaBinding mappings.finish "require('gesture').finish") - (mkIf (mappings.draw.value == "") { - "" = {action = "";}; - }) - ]; + maps.normal = mkMerge [ + (mkSetLuaBinding mappings.draw "require('gesture').draw") + (mkSetLuaBinding mappings.finish "require('gesture').finish") + (mkIf (mappings.draw.value == "") { + "" = {action = "";}; + }) + ]; - vim.pluginRC.gesture-nvim = entryAnywhere '' - vim.opt.mouse = "a" + options.mouse = "a"; + pluginRC.gesture-nvim = entryAnywhere '' + local gesture = require("gesture") + gesture.register({ + name = "scroll to bottom", + inputs = { gesture.up(), gesture.down() }, + action = "normal! G", + }) - local gesture = require("gesture") - gesture.register({ - name = "scroll to bottom", - inputs = { gesture.up(), gesture.down() }, - action = "normal! G", - }) - gesture.register({ - name = "next tab", - inputs = { gesture.right() }, - action = "tabnext", - }) - gesture.register({ - name = "previous tab", - inputs = { gesture.left() }, - action = function(ctx) -- also can use callable - vim.cmd.tabprevious() - end, - }) - gesture.register({ - name = "go back", - inputs = { gesture.right(), gesture.left() }, - -- map to `` keycode - action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("", true, false, true), "n", true)]], - }) - ''; + gesture.register({ + name = "next tab", + inputs = { gesture.right() }, + action = "tabnext", + }) + + gesture.register({ + name = "previous tab", + inputs = { gesture.left() }, + action = function(ctx) -- also can use callable + vim.cmd.tabprevious() + end, + }) + + gesture.register({ + name = "go back", + inputs = { gesture.right(), gesture.left() }, + -- map to `` keycode + action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("", true, false, true), "n", true)]], + }) + ''; + }; }; } diff --git a/modules/plugins/utility/gestures/gesture-nvim/default.nix b/modules/plugins/utility/gestures/gesture-nvim/default.nix index 27e7e09f..4c7987e7 100644 --- a/modules/plugins/utility/gestures/gesture-nvim/default.nix +++ b/modules/plugins/utility/gestures/gesture-nvim/default.nix @@ -1,4 +1,4 @@ -_: { +{ imports = [ ./gesture-nvim.nix ./config.nix diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix index df3831ec..d82fc741 100644 --- a/modules/wrapper/rc/options.nix +++ b/modules/wrapper/rc/options.nix @@ -3,9 +3,11 @@ lib, ... }: let - inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; + inherit (lib.options) mkOption literalMD literalExpression; inherit (lib.strings) optionalString; inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything; + inherit (lib.trivial) isBool; + inherit (lib.nvim.languages) toVimBool; inherit (lib.nvim.types) dagOf; inherit (lib.nvim.lua) listToLuaTable; @@ -17,7 +19,7 @@ in { default = false; example = true; description = '' - [{option}`official documentation`]: https://neovim.io/doc/user/lua.html#vim.loader.enable() + [official documentation]: https://neovim.io/doc/user/lua.html#vim.loader.enable() the experimental Lua module loader to speed up the start up process @@ -29,7 +31,7 @@ in { ::: {.note} The Lua module loader is *disabled* by default. Before setting this option, please - take a look at the [{option}`official documentation`]. This option may be enabled by + take a look at the {option}`[official documentation]`. This option may be enabled by default in the future. ::: ''; @@ -81,7 +83,7 @@ in { ./nvim/my-lua-file.lua # source type path - pure and reproducible - (builtins.source { + (builtins.path { path = ./nvim/my-lua-file.lua; name = "my-lua-file"; }) @@ -121,6 +123,21 @@ in { default = ","; description = "The key used for `` mappings"; }; + + editorconfig = mkOption { + type = bool; + default = true; + description = '' + Whether to enable EditorConfig integration in Neovim. + + This defaults to true as it is enabled by default in stock + Neovim, setting this option to false disables EditorConfig + integration entirely. + + See [Neovim documentation](https://neovim.io/doc/user/editorconfig.html) + for more details on configuring EditorConfig behaviour. + ''; + }; }; }; @@ -211,6 +228,16 @@ in { description = "Enable word wrapping."; }; + signcolumn = mkOption { + type = either str bool; + default = true; + apply = x: + if isBool x + then toVimBool x # convert to a yes/no str + else x; + description = "Show the sign column"; + }; + tabstop = mkOption { type = int; default = 8; # Neovim default @@ -263,7 +290,11 @@ in { vim.opt.runtimepath:append(${listToLuaTable cfg.additionalRuntimePaths}) ''} - ${optionalString cfg.enableLuaLoader "vim.loader.enable()"} + ${optionalString cfg.enableLuaLoader '' + if vim.loader then + vim.loader.enable() + end + ''} ''; defaultText = literalMD '' @@ -273,7 +304,7 @@ in { if [](#opt-vim.enableLuaLoader) is set to true. ''; - example = literalExpression ''"$${builtins.readFile ./my-lua-config-pre.lua}"''; + example = literalExpression ''''${builtins.readFile ./my-lua-config-pre.lua}''; description = '' Verbatim lua code that will be inserted **before**