diff --git a/.editorconfig b/.editorconfig
index 5f4be94c..43456223 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -14,7 +14,7 @@ indent_style = space
indent_size = 2
trim_trailing_whitespace = false
-[*.{nix,yml,yaml}]
+[*.{js,nix,yml,yaml}]
indent_style = space
indent_size = 2
tab_width = 2
diff --git a/.github/README.md b/.github/README.md
index 029f2fc8..5d10c73f 100644
--- a/.github/README.md
+++ b/.github/README.md
@@ -69,7 +69,7 @@
[Home-Manager module]: https://notashelf.github.io/nvf/index.xhtml#ch-standalone-hm
- **Simple**: One language to rule them all! Use Nix to configure everything,
- with additional Lua Support
+ with optional Lua support for robust configurability!
- **Reproducible**: Your configuration will behave the same _anywhere_. No
surprises, promise!
- **Portable**: nvf depends _solely_ on your Nix store, and nothing else. No
@@ -77,8 +77,9 @@
- Options to install [standalone], [NixOS module] or [Home-Manager module].
- **Customizable**: There are _almost no defaults_ to annoy you. nvf is fully
customizable through the Nix module system.
-- Not comfortable with a full-nix config or want to bring your Lua config? You
- can do just that, no unnecessary restrictions.
+ - Not comfortable with a full-nix config or want to bring your Lua config? You
+ can do just that, no unnecessary restrictions.
+ - Lazyloading? We got it! Lazyload both internal and external plugins at will.
- **Well-documented**: Documentation is priority. You will _never_ face
undocumented, obscure behaviour.
- **Idiomatic**: nvf does things ✨ _the right way_ ✨ - the codebase is, and
@@ -167,19 +168,19 @@ fix.
## Frequently Asked Questions
-[appropriate issue template]: https://github.com/NotAShelf/nvf/issues/new/choose
+[issue template]: https://github.com/NotAShelf/nvf/issues/new/choose
[list of branches]: https://github.com/NotAShelf/nvf/branches
[list of open pull requests]: https://github.com/NotAShelf/nvf/pulls
**Q**: What platforms are supported?
-
**A**: nvf actively supports Linux and Darwin platforms using standalone
-Nix, NixOS or Home-Manager. Please take a look at the [nvf manual] for available
-installation instructions.
+
**A**: nvf actively supports **Linux and Darwin** platforms using
+standalone Nix, NixOS or Home-Manager. Please take a look at the [nvf manual]
+for available installation instructions.
**Q**: Can you add _X_?
**A**: Maybe! It is not one of our goals to support each and every Neovim
plugin, however, I am always open to new modules and plugin setup additions to
-**nvf**. Use the [appropriate issue template] and I will consider a module
+**nvf**. Use the appropriate [issue template] and I will consider a module
addition. As mentioned before, pull requests to add new features are also
welcome.
@@ -196,6 +197,13 @@ not noticed any activity on the main branch, consider taking a look at the
_testing_ those release branches to get access to new features ahead of time and
better prepare to breaking changes.
+**Q**: Will you support non-flake installations?
+
**A**: Quite possibly. **nvf** started as "neovim-flake", which does mean
+it is and will remain flakes-first but we might consider non-flakes
+compatibility. Though keep in mind that **nvf** under non-flake environments
+would lose customizability of plugin inputs, which is one of our primary
+features.
+
## Credits
### Contributors
diff --git a/configuration.nix b/configuration.nix
index aadd1f83..3802f758 100644
--- a/configuration.nix
+++ b/configuration.nix
@@ -1,3 +1,7 @@
+# This is the sample configuration for nvf, aiming to give you a feel of the default options
+# while certain plugins are enabled. While it may act as one, this is not an overview of nvf's
+# module options. To find a complete overview of nvf's options and examples, visit the manual.
+# https://notashelf.github.io/nvf/options.html
isMaximal: {
config.vim = {
viAlias = true;
@@ -31,54 +35,60 @@ isMaximal: {
};
};
+ # This section does not include a comprehensive list of available language modules.
+ # To list all available language module options, please visit the nvf manual.
languages = {
enableLSP = true;
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = true;
+ # Languages that will be supported in default and maximal configurations.
+ nix.enable = true;
+ markdown.enable = true;
+
+ # Languages that are enabled in the maximal configuration.
+ bash.enable = isMaximal;
+ clang.enable = isMaximal;
+ css.enable = isMaximal;
+ html.enable = isMaximal;
+ sql.enable = isMaximal;
+ java.enable = isMaximal;
+ kotlin.enable = isMaximal;
+ ts.enable = isMaximal;
+ go.enable = isMaximal;
+ lua.enable = isMaximal;
+ zig.enable = isMaximal;
+ python.enable = isMaximal;
+ typst.enable = isMaximal;
+ rust = {
+ enable = isMaximal;
+ crates.enable = isMaximal;
+ };
+
+ # Language modules that are not as common.
+ assembly.enable = false;
+ astro.enable = false;
+ nu.enable = false;
+ csharp.enable = false;
+ julia.enable = false;
+ vala.enable = false;
+ scala.enable = false;
+ r.enable = false;
+ gleam.enable = false;
+ dart.enable = false;
+ ocaml.enable = false;
+ elixir.enable = false;
+
+ tailwind.enable = false;
+ svelte.enable = false;
+
# Nim LSP is broken on Darwin and therefore
# should be disabled by default. Users may still enable
# `vim.languages.vim` to enable it, this does not restrict
# that.
# See:
nim.enable = false;
-
- nix.enable = true;
-
- # Assembly is not common, and the asm LSP is a major hit-or-miss
- assembly.enable = false;
- astro.enable = false;
- markdown.enable = isMaximal;
- html.enable = isMaximal;
- css.enable = isMaximal;
- sql.enable = isMaximal;
- java.enable = isMaximal;
- kotlin.enable = isMaximal;
- ts.enable = isMaximal;
- svelte.enable = isMaximal;
- go.enable = isMaximal;
- lua.enable = isMaximal;
- elixir.enable = isMaximal;
- zig.enable = isMaximal;
- ocaml.enable = isMaximal;
- python.enable = isMaximal;
- dart.enable = isMaximal;
- bash.enable = isMaximal;
- gleam.enable = false;
- r.enable = isMaximal;
- tailwind.enable = isMaximal;
- typst.enable = isMaximal;
- clang.enable = isMaximal;
- scala.enable = isMaximal;
- rust = {
- enable = isMaximal;
- crates.enable = isMaximal;
- };
- csharp.enable = isMaximal;
- julia.enable = isMaximal;
- vala.enable = isMaximal;
- nu.enable = false;
};
visuals = {
diff --git a/docs/manual.nix b/docs/manual.nix
index 531a6d4e..4becdf2d 100644
--- a/docs/manual.nix
+++ b/docs/manual.nix
@@ -62,7 +62,8 @@ in
# Copy anchor scripts to the script directory in document root.
cp -vt "$dest"/script \
${./static/script}/anchor-min.js \
- ${./static/script}/anchor-use.js
+ ${./static/script}/anchor-use.js \
+ ${./static/script}/search.js
substituteInPlace ./options.md \
--subst-var-by OPTIONS_JSON ./config-options.json
@@ -95,11 +96,12 @@ in
nixos-render-docs manual html \
--manpage-urls ${path + "/doc/manpage-urls.json"} \
--revision ${lib.trivial.revisionWithDefault manual-release} \
- --stylesheet "$dest"/style.css \
- --script ./highlightjs/highlight.pack.js \
- --script ./highlightjs/loader.js \
+ --stylesheet style.css \
+ --script highlightjs/highlight.pack.js \
+ --script highlightjs/loader.js \
--script script/anchor-use.js \
--script script/anchor-min.js \
+ --script script/search.js \
--toc-depth 2 \
--section-toc-depth 1 \
manual.md \
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/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md
new file mode 100644
index 00000000..52a9ae64
--- /dev/null
+++ b/docs/release-notes/rl-0.8.md
@@ -0,0 +1,10 @@
+# Release 0.8 {#sec-release-0.8}
+
+[NotAShelf](https://github.com/notashelf):
+
+[typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim
+
+- Add [typst-preview.nvim] under
+ `languages.typst.extensions.typst-preview-nvim`.
+
+- Add a search widget to the options page in the nvf manual.
diff --git a/docs/static/script/search.js b/docs/static/script/search.js
new file mode 100644
index 00000000..e20c2314
--- /dev/null
+++ b/docs/static/script/search.js
@@ -0,0 +1,58 @@
+document.addEventListener("DOMContentLoaded", () => {
+ if (!window.location.pathname.endsWith("options.html")) return;
+
+ const searchDiv = document.createElement("div");
+ searchDiv.id = "search-bar";
+ searchDiv.innerHTML = `
+
+
+ `;
+ document.body.prepend(searchDiv);
+
+ const dtElements = Array.from(document.querySelectorAll("dt"));
+ const ddElements = Array.from(document.querySelectorAll("dd"));
+ const dtOptionIds = dtElements.map(
+ (dt) => dt.querySelector("a")?.id.toLowerCase() || "",
+ );
+
+ if (dtElements.length === 0 || ddElements.length === 0) {
+ console.warn("Something went wrong, page may be loaded incorrectly.");
+ return;
+ }
+
+ const dtElementsData = dtElements.map((dt, index) => ({
+ element: dt,
+ id: dtOptionIds[index],
+ ddElement: ddElements[index],
+ }));
+
+ const hiddenClass = "hidden";
+ const hiddenStyle = document.createElement("style");
+ hiddenStyle.innerHTML = `.${hiddenClass} { display: none; }`;
+ document.head.appendChild(hiddenStyle);
+
+ let debounceTimeout;
+ document.getElementById("search-input").addEventListener("input", (event) => {
+ clearTimeout(debounceTimeout);
+ debounceTimeout = setTimeout(() => {
+ const query = event.target.value.toLowerCase();
+
+ const matches = [];
+ const nonMatches = [];
+
+ dtElementsData.forEach(({ element, id, ddElement }) => {
+ const isMatch = id.includes(query);
+ if (isMatch) {
+ matches.push(element, ddElement);
+ } else {
+ nonMatches.push(element, ddElement);
+ }
+ });
+
+ requestAnimationFrame(() => {
+ matches.forEach((el) => el?.classList.remove(hiddenClass));
+ nonMatches.forEach((el) => el?.classList.add(hiddenClass));
+ });
+ }, 200);
+ });
+});
diff --git a/docs/static/style.scss b/docs/static/style.scss
index 718302f3..d6becd0c 100644
--- a/docs/static/style.scss
+++ b/docs/static/style.scss
@@ -189,14 +189,16 @@ th {
dt {
margin: 1.2rem 0 0.8rem;
+ content-visibility: auto;
+ contain-intrinsic-size: auto 42px;
}
-
dd {
margin-left: 2rem;
+ content-visibility: auto;
+ contain-intrinsic-size: auto 500px;
}
-div.book {
-}
+div.book {}
ul {
@include margined;
@@ -233,6 +235,33 @@ li {
}
}
+#search-bar {
+ position: sticky;
+ top: 0;
+ background: white;
+ padding: 10px;
+ border-bottom: 1px solid $color-gray-200;
+ z-index: 1000;
+ @media (prefers-color-scheme: dark) {
+ background: $color-gray-900;
+ color: $color-gray-50;
+ border-bottom: 1px solid black;
+ }
+}
+
+#search-input {
+ width: 100%;
+ padding: 8px;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ background: inherit;
+ color: inherit;
+}
+
+.hidden {
+ display: none;
+}
+
div.titlepage {
margin: 40px 0;
diff --git a/flake.lock b/flake.lock
index e84beb3a..d5532b4b 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1902,6 +1902,22 @@
"type": "github"
}
},
+ "plugin-typst-preview-nvim": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1733120663,
+ "narHash": "sha256-uYMZ2PONiiI3UDvCgNvyy4+jhzmUDbAyxX0phKxELXw=",
+ "owner": "chomosuke",
+ "repo": "typst-preview.nvim",
+ "rev": "0cb5f5627312f50ce089f785ec42b55a85f30ce7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "chomosuke",
+ "repo": "typst-preview.nvim",
+ "type": "github"
+ }
+ },
"plugin-vim-dirtytalk": {
"flake": false,
"locked": {
@@ -2151,6 +2167,7 @@
"plugin-tokyonight": "plugin-tokyonight",
"plugin-trouble": "plugin-trouble",
"plugin-ts-error-translator": "plugin-ts-error-translator",
+ "plugin-typst-preview-nvim": "plugin-typst-preview-nvim",
"plugin-vim-dirtytalk": "plugin-vim-dirtytalk",
"plugin-vim-fugitive": "plugin-vim-fugitive",
"plugin-vim-illuminate": "plugin-vim-illuminate",
diff --git a/flake.nix b/flake.nix
index e52f9416..65c802f2 100644
--- a/flake.nix
+++ b/flake.nix
@@ -206,6 +206,11 @@
flake = false;
};
+ plugin-typst-preview-nvim = {
+ url = "github:chomosuke/typst-preview.nvim";
+ flake = false;
+ };
+
plugin-nvim-metals = {
url = "github:scalameta/nvim-metals";
flake = false;
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..f91ea9a1 100644
--- a/modules/neovim/init/basic.nix
+++ b/modules/neovim/init/basic.nix
@@ -58,24 +58,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";
@@ -107,13 +95,15 @@ in {
# and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the
# luaConfigRC section below.
options = pushDownDefault {
+ # 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
@@ -127,16 +117,6 @@ in {
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
diff --git a/modules/neovim/mappings/options.nix b/modules/neovim/mappings/options.nix
index 8f0e8ebf..98e04a65 100644
--- a/modules/neovim/mappings/options.nix
+++ b/modules/neovim/mappings/options.nix
@@ -32,7 +32,7 @@
mapConfigOptions
// {
key = mkOption {
- type = str;
+ type = nullOr str;
description = "The key that triggers this keybind.";
};
mode = mkOption {
diff --git a/modules/plugins/comments/comment-nvim/config.nix b/modules/plugins/comments/comment-nvim/config.nix
index 4c18f7e9..9a8e56d5 100644
--- a/modules/plugins/comments/comment-nvim/config.nix
+++ b/modules/plugins/comments/comment-nvim/config.nix
@@ -24,6 +24,7 @@ in {
or '(comment_toggle_linewise_count)'
end
'' {
+ lua = true;
expr = true;
desc = mappings.toggleCurrentLine.description;
})
@@ -33,6 +34,7 @@ in {
or '(comment_toggle_blockwise_count)'
end
'' {
+ lua = true;
expr = true;
desc = mappings.toggleCurrentBlock.description;
})
diff --git a/modules/plugins/debugger/nvim-dap/config.nix b/modules/plugins/debugger/nvim-dap/config.nix
index aa8f8386..70bd9891 100644
--- a/modules/plugins/debugger/nvim-dap/config.nix
+++ b/modules/plugins/debugger/nvim-dap/config.nix
@@ -11,6 +11,10 @@
inherit (lib.nvim.dag) entryAnywhere entryAfter;
cfg = config.vim.debugger.nvim-dap;
+ opt = {
+ silent = true;
+ lua = true;
+ };
inherit (options.vim.debugger.nvim-dap) mappings;
in {
config = mkMerge [
@@ -29,23 +33,23 @@ in {
// mapAttrs (_: v: (entryAfter ["nvim-dap"] v)) cfg.sources;
keymaps = [
- (mkKeymap "n" cfg.mappings.continue "require('dap').continue" {desc = mappings.continue.description;})
- (mkKeymap "n" cfg.mappings.restart "require('dap').restart" {desc = mappings.restart.description;})
- (mkKeymap "n" cfg.mappings.terminate "require('dap').terminate" {desc = mappings.terminate.description;})
- (mkKeymap "n" cfg.mappings.runLast "require('dap').run_last" {desc = mappings.runLast.description;})
+ (mkKeymap "n" cfg.mappings.continue "require('dap').continue" (opt // {desc = mappings.continue.description;}))
+ (mkKeymap "n" cfg.mappings.restart "require('dap').restart" (opt // {desc = mappings.restart.description;}))
+ (mkKeymap "n" cfg.mappings.terminate "require('dap').terminate" (opt // {desc = mappings.terminate.description;}))
+ (mkKeymap "n" cfg.mappings.runLast "require('dap').run_last" (opt // {desc = mappings.runLast.description;}))
- (mkKeymap "n" cfg.mappings.toggleRepl "require('dap').repl.toggle" {desc = mappings.toggleRepl.description;})
- (mkKeymap "n" cfg.mappings.hover "require('dap.ui.widgets').hover" {desc = mappings.hover.description;})
- (mkKeymap "n" cfg.mappings.toggleBreakpoint "require('dap').toggle_breakpoint" {desc = mappings.toggleBreakpoint.description;})
+ (mkKeymap "n" cfg.mappings.toggleRepl "require('dap').repl.toggle" (opt // {desc = mappings.toggleRepl.description;}))
+ (mkKeymap "n" cfg.mappings.hover "require('dap.ui.widgets').hover" (opt // {desc = mappings.hover.description;}))
+ (mkKeymap "n" cfg.mappings.toggleBreakpoint "require('dap').toggle_breakpoint" (opt // {desc = mappings.toggleBreakpoint.description;}))
- (mkKeymap "n" cfg.mappings.runToCursor "require('dap').run_to_cursor" {desc = mappings.runToCursor.description;})
- (mkKeymap "n" cfg.mappings.stepInto "require('dap').step_into" {desc = mappings.stepInto.description;})
- (mkKeymap "n" cfg.mappings.stepOut "require('dap').step_out" {desc = mappings.stepOut.description;})
- (mkKeymap "n" cfg.mappings.stepOver "require('dap').step_over" {desc = mappings.stepOver.description;})
- (mkKeymap "n" cfg.mappings.stepBack "require('dap').step_back" {desc = mappings.stepBack.description;})
+ (mkKeymap "n" cfg.mappings.runToCursor "require('dap').run_to_cursor" (opt // {desc = mappings.runToCursor.description;}))
+ (mkKeymap "n" cfg.mappings.stepInto "require('dap').step_into" (opt // {desc = mappings.stepInto.description;}))
+ (mkKeymap "n" cfg.mappings.stepOut "require('dap').step_out" (opt // {desc = mappings.stepOut.description;}))
+ (mkKeymap "n" cfg.mappings.stepOver "require('dap').step_over" (opt // {desc = mappings.stepOver.description;}))
+ (mkKeymap "n" cfg.mappings.stepBack "require('dap').step_back" (opt // {desc = mappings.stepBack.description;}))
- (mkKeymap "n" cfg.mappings.goUp "require('dap').up" {desc = mappings.goUp.description;})
- (mkKeymap "n" cfg.mappings.goDown "require('dap').down" {desc = mappings.goDown.description;})
+ (mkKeymap "n" cfg.mappings.goUp "require('dap').up" (opt // {desc = mappings.goUp.description;}))
+ (mkKeymap "n" cfg.mappings.goDown "require('dap').down" (opt // {desc = mappings.goDown.description;}))
];
};
})
@@ -59,7 +63,7 @@ in {
inherit (cfg.ui) setupOpts;
keys = [
- (mkKeymap "n" cfg.mappings.toggleDapUI "function() require('dapui').toggle() end" {desc = mappings.toggleDapUI.description;})
+ (mkKeymap "n" cfg.mappings.toggleDapUI "function() require('dapui').toggle() end" (opt // {desc = mappings.toggleDapUI.description;}))
];
};
diff --git a/modules/plugins/languages/typst.nix b/modules/plugins/languages/typst.nix
index fbb090e8..24097e2c 100644
--- a/modules/plugins/languages/typst.nix
+++ b/modules/plugins/languages/typst.nix
@@ -7,10 +7,13 @@
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
- inherit (lib.types) enum either listOf package str;
+ inherit (lib.types) nullOr enum either attrsOf listOf package str;
inherit (lib.attrsets) attrNames;
- inherit (lib.nvim.lua) expToLua;
- inherit (lib.nvim.types) mkGrammarOption;
+ inherit (lib.generators) mkLuaInline;
+ inherit (lib.meta) getExe;
+ inherit (lib.nvim.lua) expToLua toLuaObject;
+ inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption;
+ inherit (lib.nvim.dag) entryAnywhere;
cfg = config.vim.languages.typst;
@@ -33,6 +36,7 @@
}
'';
};
+
tinymist = {
package = pkgs.tinymist;
lspConfig = ''
@@ -120,6 +124,50 @@ in {
default = formats.${cfg.format.type}.package;
};
};
+
+ extensions = {
+ typst-preview-nvim = {
+ enable =
+ mkEnableOption ''
+ [typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim
+
+ Low latency typst preview for Neovim via [typst-preview.nvim]
+ ''
+ // {default = true;};
+
+ setupOpts = mkPluginSetupOption "typst-preview-nvim" {
+ open_cmd = mkOption {
+ type = nullOr str;
+ default = null;
+ example = "firefox %s -P typst-preview --class typst-preview";
+ description = ''
+ Custom format string to open the output link provided with `%s`
+ '';
+ };
+
+ dependencies_bin = mkOption {
+ type = attrsOf str;
+ default = {
+ "tinymist" = getExe servers.tinymist.package;
+ "websocat" = getExe pkgs.websocat;
+ };
+
+ description = ''
+ Provide the path to binaries for dependencies. Setting this
+ to a non-null value will skip the download of the binary by
+ the plugin.
+ '';
+ };
+
+ extra_args = mkOption {
+ type = nullOr (listOf str);
+ default = null;
+ example = ["--input=ver=draft" "--ignore-system-fonts"];
+ description = "A list of extra arguments (or `null`) to be passed to previewer";
+ };
+ };
+ };
+ };
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
@@ -136,5 +184,13 @@ in {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.typst-lsp = servers.${cfg.lsp.server}.lspConfig;
})
+
+ # Extensions
+ (mkIf cfg.extensions.typst-preview-nvim.enable {
+ vim.startPlugins = ["typst-preview-nvim"];
+ vim.pluginRC.typst-preview-nvim = entryAnywhere ''
+ require("typst-preview").setup(${toLuaObject cfg.extensions.typst-preview-nvim.setupOpts})
+ '';
+ })
]);
}
diff --git a/modules/plugins/lsp/lightbulb/config.nix b/modules/plugins/lsp/lightbulb/config.nix
index f44c2ddb..f17b8ad9 100644
--- a/modules/plugins/lsp/lightbulb/config.nix
+++ b/modules/plugins/lsp/lightbulb/config.nix
@@ -5,6 +5,7 @@
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.dag) entryAnywhere;
+ inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.lsp;
in {
@@ -16,7 +17,7 @@ in {
vim.api.nvim_command('autocmd CursorHold,CursorHoldI * lua require\'nvim-lightbulb\'.update_lightbulb()')
-- Enable trouble diagnostics viewer
- require'nvim-lightbulb'.setup()
+ require'nvim-lightbulb'.setup(${toLuaObject cfg.lightbulb.setupOpts})
'';
};
};
diff --git a/modules/plugins/lsp/lightbulb/lightbulb.nix b/modules/plugins/lsp/lightbulb/lightbulb.nix
index ef101a0e..4341cac6 100644
--- a/modules/plugins/lsp/lightbulb/lightbulb.nix
+++ b/modules/plugins/lsp/lightbulb/lightbulb.nix
@@ -1,9 +1,11 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
+ inherit (lib.nvim.types) mkPluginSetupOption;
in {
options.vim.lsp = {
lightbulb = {
enable = mkEnableOption "Lightbulb for code actions. Requires an emoji font";
+ setupOpts = mkPluginSetupOption "nvim-lightbulb" {};
};
};
}
diff --git a/modules/plugins/statusline/lualine/lualine.nix b/modules/plugins/statusline/lualine/lualine.nix
index 1f694eaf..6e95f03b 100644
--- a/modules/plugins/statusline/lualine/lualine.nix
+++ b/modules/plugins/statusline/lualine/lualine.nix
@@ -13,41 +13,43 @@
builtin_themes = [
"auto"
"16color"
- "gruvbox"
"ayu_dark"
"ayu_light"
"ayu_mirage"
"ayu"
+ "base16"
"codedark"
"dracula"
"everforest"
"gruvbox"
"gruvbox_dark"
"gruvbox_light"
- "gruvbox_material"
+ "gruvbox-material"
"horizon"
"iceberg_dark"
"iceberg_light"
"iceberg"
"jellybeans"
"material"
- "modus_vivendi"
+ "modus-vivendi"
"molokai"
"moonfly"
"nightfly"
"nord"
- "oceanicnext"
+ "OceanicNext"
"onedark"
"onelight"
"palenight"
"papercolor_dark"
"papercolor_light"
+ "PaperColor"
"powerline_dark"
"powerline"
+ "pywal"
"seoul256"
"solarized_dark"
"solarized_light"
- "tomorrow"
+ "Tomorrow"
"wombat"
];
in {
diff --git a/modules/plugins/visuals/indent-blankline/indent-blankline.nix b/modules/plugins/visuals/indent-blankline/indent-blankline.nix
index ff9bccc7..1133b80b 100644
--- a/modules/plugins/visuals/indent-blankline/indent-blankline.nix
+++ b/modules/plugins/visuals/indent-blankline/indent-blankline.nix
@@ -6,6 +6,7 @@
inherit (lib.modules) mkRenamedOptionModule;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) int bool str nullOr either listOf attrsOf;
+ inherit (lib.nvim.types) mkPluginSetupOption;
cfg = config.vim.visuals;
in {
@@ -15,7 +16,7 @@ in {
options.vim.visuals.indent-blankline = {
enable = mkEnableOption "indentation guides [indent-blankline]";
- setupOpts = {
+ setupOpts = mkPluginSetupOption "indent-blankline" {
debounce = mkOption {
type = int;
description = "Debounce time in milliseconds";
diff --git a/modules/wrapper/rc/config.nix b/modules/wrapper/rc/config.nix
index 627fd05b..ff8a4585 100644
--- a/modules/wrapper/rc/config.nix
+++ b/modules/wrapper/rc/config.nix
@@ -5,7 +5,7 @@
}: let
inherit (builtins) map mapAttrs filter;
inherit (lib.attrsets) mapAttrsToList;
- inherit (lib.strings) concatLines concatMapStringsSep optionalString;
+ inherit (lib.strings) concatLines concatMapStringsSep;
inherit (lib.trivial) showWarnings;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.dag) entryAfter mkLuarcSection resolveDag entryAnywhere;
@@ -43,7 +43,7 @@ in {
toLuaKeymap = bind: "vim.keymap.set(${toLuaObject bind.mode}, ${toLuaObject bind.key}, ${toLuaObject (getAction bind)}, ${toLuaObject (getOpts bind)})";
- keymaps = concatLines (map toLuaKeymap cfg.keymaps);
+ keymaps = concatLines (map toLuaKeymap (filter (x: x.key != null) cfg.keymaps));
in {
vim = {
luaConfigRC = {
diff --git a/modules/wrapper/rc/options.nix b/modules/wrapper/rc/options.nix
index 4680190a..980c9497 100644
--- a/modules/wrapper/rc/options.nix
+++ b/modules/wrapper/rc/options.nix
@@ -6,28 +6,36 @@
inherit (lib.options) mkOption mkEnableOption 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;
cfg = config.vim;
in {
options.vim = {
- enableLuaLoader = mkEnableOption ''
- [{option}`official documentation`]: https://neovim.io/doc/user/lua.html#vim.loader.enable()
+ enableLuaLoader = mkOption {
+ type = bool;
+ default = false;
+ example = true;
+ description = ''
+ [{option}`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
- If `true`, this will enable the experimental Lua module loader which:
- - overrides loadfile
- - adds the lua loader using the byte-compilation cache
- - adds the libs loader
- - removes the default Neovim loader
+ If `true`, this will enable the experimental Lua module loader which:
+ - overrides loadfile
+ - adds the lua loader using the byte-compilation cache
+ - adds the libs loader
+ - removes the default Neovim loader
- ::: {.note}
- This is disabled by default. Before setting this option, please
- take a look at the [{option}`official documentation`].
- :::
- '';
+ ::: {.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
+ default in the future.
+ :::
+ '';
+ };
additionalRuntimePaths = mkOption {
type = listOf (either path str);
@@ -115,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.
+ '';
+ };
};
};
@@ -206,6 +229,16 @@ in {
default = true;
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";
+ };
};
};
diff --git a/release.json b/release.json
index 28c5eb7f..a80b41ea 100644
--- a/release.json
+++ b/release.json
@@ -1,4 +1,4 @@
{
- "release": "v0.7",
- "isReleaseBranch": true
+ "release": "v0.8",
+ "isReleaseBranch": false
}