This commit is contained in:
raf 2025-01-07 03:12:24 +00:00 committed by GitHub
commit eef4bed5b6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 155 additions and 121 deletions

View file

@ -28,11 +28,11 @@ configuration formats.
### `vim.maps` rewrite {#sec-vim-maps-rewrite} ### `vim.maps` rewrite {#sec-vim-maps-rewrite}
Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new Instead of specifying map modes using submodules (e.g.: `vim.maps.normal`), a
`vim.keymaps` submodule with support for a `mode` option has been introduced. It new `vim.keymaps` submodule with support for a `mode` option has been
can be either a string, or a list of strings, where a string represents the introduced. It can be either a string, or a list of strings, where a string
short-name of the map mode(s), that the mapping should be set for. See represents the short-name of the map mode(s), that the mapping should be set
`:help map-modes` for more information. for. See `:help map-modes` for more information.
For example: 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 `vim.options` as default values. Some are left as they don't have a direct
equivalent, but expect a switch eventually. equivalent, but expect a switch eventually.
- Deprecated `vim.enableEditorconfig` in favor of
[](#opt-vim.globals.editorconfig).
[ppenguin](https://github.com/ppenguin): [ppenguin](https://github.com/ppenguin):
- Telescope: - Telescope:

View file

@ -6,7 +6,12 @@
inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.attrsets) mapListToAttrs;
in { in {
# Converts a boolean to a yes/no string. This is used in lots of # 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 = { diagnosticsToLua = {
lang, lang,
config, config,
@ -30,8 +35,8 @@ in {
mkEnable = desc: mkEnable = desc:
mkOption { mkOption {
description = "Turn on ${desc} for enabled languages by default";
type = bool;
default = false; default = false;
type = bool;
description = "Turn on ${desc} for enabled languages by default";
}; };
} }

View file

@ -14,6 +14,7 @@
splitRight = "splitright"; splitRight = "splitright";
autoIndent = "autoindent"; autoIndent = "autoindent";
wordWrap = "wrap"; wordWrap = "wrap";
showSignColumn = "signcolumn";
}; };
in { in {
imports = concatLists [ imports = concatLists [
@ -35,23 +36,28 @@ in {
vim.autopairs.enable has been removed in favor of per-plugin modules. vim.autopairs.enable has been removed in favor of per-plugin modules.
You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead.
'') '')
(mkRemovedOptionModule ["vim" "autopairs" "type"] '' (mkRemovedOptionModule ["vim" "autopairs" "type"] ''
vim.autopairs.type has been removed in favor of per-plugin modules. vim.autopairs.type has been removed in favor of per-plugin modules.
You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead. You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead.
'') '')
(mkRemovedOptionModule ["vim" "autocomplete" "enable"] '' (mkRemovedOptionModule ["vim" "autocomplete" "enable"] ''
vim.autocomplete.enable has been removed in favor of per-plugin modules. vim.autocomplete.enable has been removed in favor of per-plugin modules.
You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead.
'') '')
(mkRemovedOptionModule ["vim" "autocomplete" "type"] '' (mkRemovedOptionModule ["vim" "autocomplete" "type"] ''
vim.autocomplete.type has been removed in favor of per-plugin modules. vim.autocomplete.type has been removed in favor of per-plugin modules.
You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead. You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead.
'') '')
(mkRemovedOptionModule ["vim" "autocomplete" "sources"] '' (mkRemovedOptionModule ["vim" "autocomplete" "sources"] ''
vim.autocomplete.sources has been removed in favor of per-plugin modules. vim.autocomplete.sources has been removed in favor of per-plugin modules.
You can add nvim-cmp sources with vim.autocomplete.nvim-cmp.sources You can add nvim-cmp sources with vim.autocomplete.nvim-cmp.sources
instead. instead.
'') '')
(mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] '' (mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] ''
vim.snippets.vsnip.enable has been removed in favor of the more modern luasnip. 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 `tabstop` and `shiftwidth` manually in `vim.options` or per-filetype in a
`ftplugin` directory added to your runtime path. `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. # Migrated via batchRenameOptions. Further batch renames must be below this line.
renamedVimOpts renamedVimOpts
]; ];

View file

@ -5,6 +5,7 @@
}: let }: let
inherit (lib.options) mkOption mkEnableOption literalMD; inherit (lib.options) mkOption mkEnableOption literalMD;
inherit (lib.strings) optionalString; inherit (lib.strings) optionalString;
inherit (lib.attrsets) optionalAttrs;
inherit (lib.types) enum bool str int either; inherit (lib.types) enum bool str int either;
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.dag) entryAfter; inherit (lib.nvim.dag) entryAfter;
@ -58,24 +59,12 @@ in {
description = "Prevent swapfile and backupfile from being created"; description = "Prevent swapfile and backupfile from being created";
}; };
showSignColumn = mkOption {
type = bool;
default = true;
description = "Show the sign column";
};
bell = mkOption { bell = mkOption {
type = enum ["none" "visual" "on"]; type = enum ["none" "visual" "on"];
default = "none"; default = "none";
description = "Set how bells are handled. Options: on, visual or 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 { searchCase = mkOption {
type = enum ["ignore" "smart" "sensitive"]; type = enum ["ignore" "smart" "sensitive"];
default = "sensitive"; default = "sensitive";
@ -106,63 +95,55 @@ in {
# Set options that were previously interpolated in 'luaConfigRC.basic' as vim.options (vim.o) # 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 # and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the
# luaConfigRC section below. # luaConfigRC section below.
options = pushDownDefault { options = pushDownDefault (lib.mergeAttrsList [
{
# Options that are always set, with a lower priority
encoding = "utf-8"; encoding = "utf-8";
hidden = true; hidden = true;
expandtab = true; expandtab = true;
};
globals = pushDownDefault { # Junkfile Behaviour
editorconfig = cfg.enableEditorconfig; swapfile = !cfg.preventJunkFiles;
}; backup = !cfg.preventJunkFiles;
writebackup = !cfg.preventJunkFiles;
}
# Options that are more difficult to set through 'vim.options'. Fear not, though (optionalAttrs cfg.undoFile.enable {
# as the Lua DAG is still as powerful as it could be. 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"] '' 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 '' ${optionalString cfg.useSystemClipboard ''
vim.opt.clipboard:append("unnamedplus") vim.opt.clipboard:append("unnamedplus")
''} ''}

View file

@ -124,7 +124,6 @@ in {
nvim --headless --clean \ nvim --headless --clean \
--cmd "mkspell $out/spell/$name.add.spl $spellfile" -Es -n --cmd "mkspell $out/spell/$name.add.spl $spellfile" -Es -n
done done
''; '';
in in
mkIf (cfg.extraSpellWords != {}) [ mkIf (cfg.extraSpellWords != {}) [
@ -133,10 +132,12 @@ in {
compileJoinedSpellfiles.outPath compileJoinedSpellfiles.outPath
]; ];
luaConfigRC.spellcheck = entryAfter ["basic"] '' options = {
vim.opt.spell = true spell = true;
vim.opt.spelllang = ${listToLuaTable cfg.languages} spelllang = cfg.languages;
};
luaConfigRC.spellcheck = entryAfter ["basic"] ''
-- Disable spellchecking for certain filetypes -- Disable spellchecking for certain filetypes
-- as configured by `vim.spellcheck.ignoredFiletypes` -- as configured by `vim.spellcheck.ignoredFiletypes`
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false}) vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})

View file

@ -15,9 +15,10 @@
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions; mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim.startPlugins = ["gesture-nvim"]; vim = {
startPlugins = ["gesture-nvim"];
vim.maps.normal = mkMerge [ maps.normal = mkMerge [
(mkSetLuaBinding mappings.draw "require('gesture').draw") (mkSetLuaBinding mappings.draw "require('gesture').draw")
(mkSetLuaBinding mappings.finish "require('gesture').finish") (mkSetLuaBinding mappings.finish "require('gesture').finish")
(mkIf (mappings.draw.value == "<RightDrag>") { (mkIf (mappings.draw.value == "<RightDrag>") {
@ -25,20 +26,21 @@ in {
}) })
]; ];
vim.pluginRC.gesture-nvim = entryAnywhere '' options.mouse = "a";
vim.opt.mouse = "a" pluginRC.gesture-nvim = entryAnywhere ''
local gesture = require("gesture") local gesture = require("gesture")
gesture.register({ gesture.register({
name = "scroll to bottom", name = "scroll to bottom",
inputs = { gesture.up(), gesture.down() }, inputs = { gesture.up(), gesture.down() },
action = "normal! G", action = "normal! G",
}) })
gesture.register({ gesture.register({
name = "next tab", name = "next tab",
inputs = { gesture.right() }, inputs = { gesture.right() },
action = "tabnext", action = "tabnext",
}) })
gesture.register({ gesture.register({
name = "previous tab", name = "previous tab",
inputs = { gesture.left() }, inputs = { gesture.left() },
@ -46,6 +48,7 @@ in {
vim.cmd.tabprevious() vim.cmd.tabprevious()
end, end,
}) })
gesture.register({ gesture.register({
name = "go back", name = "go back",
inputs = { gesture.right(), gesture.left() }, inputs = { gesture.right(), gesture.left() },
@ -54,4 +57,5 @@ in {
}) })
''; '';
}; };
};
} }

View file

@ -1,4 +1,4 @@
_: { {
imports = [ imports = [
./gesture-nvim.nix ./gesture-nvim.nix
./config.nix ./config.nix

View file

@ -3,9 +3,11 @@
lib, lib,
... ...
}: let }: let
inherit (lib.options) mkOption mkEnableOption literalMD literalExpression; inherit (lib.options) mkOption literalMD literalExpression;
inherit (lib.strings) optionalString; inherit (lib.strings) optionalString;
inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything; 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.types) dagOf;
inherit (lib.nvim.lua) listToLuaTable; inherit (lib.nvim.lua) listToLuaTable;
@ -17,7 +19,7 @@ in {
default = false; default = false;
example = true; example = true;
description = '' 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 the experimental Lua module loader to speed up the start up process
@ -29,7 +31,7 @@ in {
::: {.note} ::: {.note}
The Lua module loader is *disabled* by default. Before setting this option, please 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. default in the future.
::: :::
''; '';
@ -81,7 +83,7 @@ in {
./nvim/my-lua-file.lua ./nvim/my-lua-file.lua
# source type path - pure and reproducible # source type path - pure and reproducible
(builtins.source { (builtins.path {
path = ./nvim/my-lua-file.lua; path = ./nvim/my-lua-file.lua;
name = "my-lua-file"; name = "my-lua-file";
}) })
@ -121,6 +123,21 @@ in {
default = ","; default = ",";
description = "The key used for `<localleader>` mappings"; description = "The key used for `<localleader>` 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."; 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 { tabstop = mkOption {
type = int; type = int;
default = 8; # Neovim default default = 8; # Neovim default
@ -263,7 +290,11 @@ in {
vim.opt.runtimepath:append(${listToLuaTable cfg.additionalRuntimePaths}) 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 '' defaultText = literalMD ''
@ -273,7 +304,7 @@ in {
if [](#opt-vim.enableLuaLoader) is set to true. 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 = '' description = ''
Verbatim lua code that will be inserted **before** Verbatim lua code that will be inserted **before**