mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2025-12-21 00:30:03 +01:00
docs: link NDG syntax documentation; revise keymaps section
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: Ie150938b131257fbc143f338b8d9956e6a6a6964
This commit is contained in:
parent
c6022aeab2
commit
20bcf9e946
1 changed files with 171 additions and 118 deletions
|
|
@ -311,24 +311,52 @@ acceptableList = [
|
||||||
|
|
||||||
## Testing Changes {#sec-testing-changes}
|
## Testing Changes {#sec-testing-changes}
|
||||||
|
|
||||||
Once you have made your changes, you will need to test them thoroughly. If it is
|
Once you have made your changes, you will need to test them thoroughly. To make
|
||||||
a module, add your module option to `configuration.nix` (located in the root of
|
testing easier you may either use the `configuration.nix` located in the
|
||||||
this project) inside `neovimConfiguration`. Enable it, and then run the maximal
|
repository root, or use the development package located in `flake/develop.nix`.
|
||||||
configuration with `nix run .#maximal -Lv` to check for build errors. If neovim
|
The development package allows you to quickly bootstrap a Neovim configuration
|
||||||
opens in the current directory without any error messages (you can check the
|
with only the required modules, instead of the packages that consume the
|
||||||
output of `:messages` inside neovim to see if there are any errors), then your
|
`configuration.nix`, so it is generally preferable. To use it navigate to the
|
||||||
changes are good to go. Open your pull request, and it will be reviewed as soon
|
`develop.nix` module, and update the `configuration` set with the Neovim
|
||||||
as possible.
|
configuration that you would like to test with. For example:
|
||||||
|
|
||||||
If it is not a new module, but a change to an existing one, then make sure the
|
```nix
|
||||||
module you have changed is enabled in the maximal configuration by editing
|
{
|
||||||
`configuration.nix`, and then run it with `nix run .#maximal -Lv`. Same
|
# Let's assume you are adding a new module for the Nix language.
|
||||||
procedure as adding a new module will apply here.
|
# You will need to enable it here
|
||||||
|
configuration = {
|
||||||
|
vim.languages.nix.enable = true;
|
||||||
|
|
||||||
|
# You can also enable other plugins that you wish to test with, for example
|
||||||
|
# none-ls:
|
||||||
|
vim.lsp.null-ls = {
|
||||||
|
enable = true;
|
||||||
|
setupOpts = { /* Your setup options here */ };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
You may then run this package with `nix run .#develop` and check for build or
|
||||||
|
runtime errors. If Neovim builds and opens without any errors, then your changes
|
||||||
|
are good to go. Open your pull request, and it will be reviewed as soon as
|
||||||
|
possible.
|
||||||
|
|
||||||
|
If your changes are rather large, or if you would like to instead test with a
|
||||||
|
more complex configuration then you might use the `configuration.nix` for
|
||||||
|
testing. Make your changes, and then build either the default or `maximal`
|
||||||
|
package to test your changes.
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> `configuration.nix` is a module used to bootstrap **demo** packages and should
|
||||||
|
> generally not be changed unless migrating old APIs or updating the set of
|
||||||
|
> default plugins. Similarly, the `develop.nix` file is for reference, and
|
||||||
|
> testing configurations **should not be committed**.
|
||||||
|
|
||||||
## Adding Documentation {#sec-guidelines-documentation}
|
## Adding Documentation {#sec-guidelines-documentation}
|
||||||
|
|
||||||
[Nixpkgs Flavoured Markdown]: https://github.com/NixOS/nixpkgs/blob/master/doc/README.md#syntax
|
[Nixpkgs Flavoured Markdown]: https://github.com/NixOS/nixpkgs/blob/master/doc/README.md#syntax
|
||||||
[in-house documentation generator]: https://github.com/feel-co/ndg
|
[in-house documentation generator]: https://github.com/feel-co/ndg
|
||||||
|
[library documentation]: https://github.com/feel-co/ndg/blob/main/ndg-commonmark/docs/SYNTAX.md
|
||||||
|
|
||||||
Almost all changes to **nvf**'s codebase warrant updates to the documentation.
|
Almost all changes to **nvf**'s codebase warrant updates to the documentation.
|
||||||
At the very least, you must update the relevant changelog document to describe
|
At the very least, you must update the relevant changelog document to describe
|
||||||
|
|
@ -345,7 +373,10 @@ As a general rule of thumb:
|
||||||
By feeding NDG, our documentation generator, Markdown sources we can generate a
|
By feeding NDG, our documentation generator, Markdown sources we can generate a
|
||||||
HTML manual with various goodies, including a **search page** and an **options
|
HTML manual with various goodies, including a **search page** and an **options
|
||||||
page**. The latter, found under `options.html` contains module options, similar
|
page**. The latter, found under `options.html` contains module options, similar
|
||||||
to the official Nixpkgs search utility.
|
to the official Nixpkgs search utility. The supported syntax for NDG can be
|
||||||
|
found over at the [library documentation].
|
||||||
|
|
||||||
|
### Building the Documentation
|
||||||
|
|
||||||
The HTML version of this documentation, dubbed the "nvf manual", can be
|
The HTML version of this documentation, dubbed the "nvf manual", can be
|
||||||
generated and opened by typing the following in a shell within a clone of the
|
generated and opened by typing the following in a shell within a clone of the
|
||||||
|
|
@ -369,7 +400,9 @@ $ nix build .#docs-linkcheck
|
||||||
```
|
```
|
||||||
|
|
||||||
You must ensure that the **HTML Documentation** builds before submitting a pull
|
You must ensure that the **HTML Documentation** builds before submitting a pull
|
||||||
request.
|
request. If the documentation builds, an automatic "preview" build will be
|
||||||
|
deployed automatically for your Pull Request. You may use this preview to view
|
||||||
|
your changes as your Pull Request is updated.
|
||||||
|
|
||||||
### Formatting Changelog Entries
|
### Formatting Changelog Entries
|
||||||
|
|
||||||
|
|
@ -380,13 +413,30 @@ manual for users hoping to learn what has changed.
|
||||||
To maintain consistency, you must follow the following format in the changelog:
|
To maintain consistency, you must follow the following format in the changelog:
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
[<username>](https://github.com/<username>):
|
[username](https://github.com/username):
|
||||||
|
|
||||||
- Added ...
|
- Added ...
|
||||||
- Removed ...
|
- Removed ...
|
||||||
- Changed ...
|
- Changed ...
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If this is your first contribution, you should add yourself to the changelog.
|
||||||
|
Linking your GitHub account is not a strict requirement; it can be any page that
|
||||||
|
people can use to discover you. Below the link to your profile, you should
|
||||||
|
include a brief description of your changes. Those descriptions must be in past
|
||||||
|
tense, unlike commit messages.
|
||||||
|
|
||||||
|
While adding a new section, please insert the section at an arbitrary location
|
||||||
|
under the `## Changelog` section rather than the end of the document. This helps
|
||||||
|
avoid merge conflicts.
|
||||||
|
|
||||||
|
### Breaking Changes
|
||||||
|
|
||||||
|
If you are introducing _breaking_ changes to the repository, then you must also
|
||||||
|
briefly mention what has changed in the breaking changes section of the
|
||||||
|
changelog document that you are editing. If this section does not yet exist, you
|
||||||
|
must create it.
|
||||||
|
|
||||||
```markdown
|
```markdown
|
||||||
# Release 0.9 {#sec-release-0-9}
|
# Release 0.9 {#sec-release-0-9}
|
||||||
|
|
||||||
|
|
@ -395,108 +445,10 @@ To maintain consistency, you must follow the following format in the changelog:
|
||||||
- We broke everything, please migrate!
|
- We broke everything, please migrate!
|
||||||
```
|
```
|
||||||
|
|
||||||
If you are introducing _breaking_ changes to the repository, then you must also
|
This section is _critical_, as it is used to communicate to the users what has
|
||||||
briefly mention what has changed in the breaking changes section of the
|
changed in the codebase and what breakage they may expect upon an update. To be
|
||||||
changelog document that you are editing. If this section does not yet exist, you
|
comprehensive, you should include migration steps or how users may mitigate
|
||||||
must create it.
|
breakage depending on the context of the change.
|
||||||
|
|
||||||
## Keybinds {#sec-keybinds}
|
|
||||||
|
|
||||||
As of 0.4, there exists an API for writing your own keybinds and a couple of
|
|
||||||
useful utility functions are available in the
|
|
||||||
[extended standard library](https://github.com/NotAShelf/nvf/tree/main/lib). The
|
|
||||||
following section contains a general overview to how you may utilize said
|
|
||||||
functions.
|
|
||||||
|
|
||||||
### Custom Key Mappings Support for a Plugin {#sec-custom-key-mappings}
|
|
||||||
|
|
||||||
To set a mapping, you should define it in `vim.keymaps`.
|
|
||||||
|
|
||||||
An example, simple keybinding, can look like this:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
{
|
|
||||||
vim.keymaps = [
|
|
||||||
{
|
|
||||||
key = "<leader>wq";
|
|
||||||
mode = ["n"];
|
|
||||||
action = ":wq<CR>";
|
|
||||||
silent = true;
|
|
||||||
desc = "Save file and quit";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
There are many settings available in the options. Please refer to the
|
|
||||||
[documentation](/options.html#option-vim-keymaps) to see a list of them.
|
|
||||||
|
|
||||||
**nvf** provides a helper function, so that you don't have to write the mapping
|
|
||||||
attribute sets every time:
|
|
||||||
|
|
||||||
- `mkKeymap`, which mimics Neovim's `vim.keymap.set` function
|
|
||||||
|
|
||||||
You can read the source code of some modules to see them in action, but the
|
|
||||||
usage should look something like this:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
# plugindefinition.nix
|
|
||||||
{lib, ...}: let
|
|
||||||
inherit (lib.options) mkEnableOption;
|
|
||||||
inherit (lib.nvim.binds) mkMappingOption;
|
|
||||||
in {
|
|
||||||
options.vim.plugin = {
|
|
||||||
enable = mkEnableOption "Enable plugin";
|
|
||||||
|
|
||||||
# Mappings should always be inside an attrset called mappings
|
|
||||||
mappings = {
|
|
||||||
workspaceDiagnostics = mkMappingOption "Workspace diagnostics [trouble]" "<leader>lwd";
|
|
||||||
documentDiagnostics = mkMappingOption "Document diagnostics [trouble]" "<leader>ld";
|
|
||||||
lspReferences = mkMappingOption "LSP References [trouble]" "<leader>lr";
|
|
||||||
quickfix = mkMappingOption "QuickFix [trouble]" "<leader>xq";
|
|
||||||
locList = mkMappingOption "LOCList [trouble]" "<leader>xl";
|
|
||||||
symbols = mkMappingOption "Symbols [trouble]" "<leader>xs";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
<!-- markdownlint-disable MD013 -->
|
|
||||||
|
|
||||||
```nix
|
|
||||||
# config.nix
|
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
options,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.modules) mkIf;
|
|
||||||
inherit (lib.nvim.binds) mkKeymap;
|
|
||||||
|
|
||||||
cfg = config.vim.plugin;
|
|
||||||
|
|
||||||
keys = cfg.mappings;
|
|
||||||
inherit (options.vim.lsp.trouble) mappings;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
vim.keymaps = [
|
|
||||||
(mkKeymap "n" keys.workspaceDiagnostics "<cmd>Trouble toggle diagnostics<CR>" {desc = mappings.workspaceDiagnostics.description;})
|
|
||||||
(mkKeymap "n" keys.documentDiagnostics "<cmd>Trouble toggle diagnostics filter.buf=0<CR>" {desc = mappings.documentDiagnostics.description;})
|
|
||||||
(mkKeymap "n" keys.lspReferences "<cmd>Trouble toggle lsp_references<CR>" {desc = mappings.lspReferences.description;})
|
|
||||||
(mkKeymap "n" keys.quickfix "<cmd>Trouble toggle quickfix<CR>" {desc = mappings.quickfix.description;})
|
|
||||||
(mkKeymap "n" keys.locList "<cmd>Trouble toggle loclist<CR>" {desc = mappings.locList.description;})
|
|
||||||
(mkKeymap "n" keys.symbols "<cmd>Trouble toggle symbols<CR>" {desc = mappings.symbols.description;})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
<!-- markdownlint-enable MD013 -->
|
|
||||||
|
|
||||||
> [!TIP]
|
|
||||||
> If you have come across a plugin that has an API that doesn't seem to easily
|
|
||||||
> allow custom keybindings, don't be scared to implement a draft PR. We'll help
|
|
||||||
> you get it done.
|
|
||||||
|
|
||||||
## Adding Plugins {#sec-additional-plugins}
|
## Adding Plugins {#sec-additional-plugins}
|
||||||
|
|
||||||
|
|
@ -593,7 +545,7 @@ your package to the plugin builder (`pluginBuilders`) function manually in
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Modular setup options {#sec-modular-setup-options}
|
### Modular Setup Options {#sec-modular-setup-options}
|
||||||
|
|
||||||
Most plugins is initialized with a call to `require('plugin').setup({...})`.
|
Most plugins is initialized with a call to `require('plugin').setup({...})`.
|
||||||
|
|
||||||
|
|
@ -768,3 +720,104 @@ require('lz.n').load({
|
||||||
|
|
||||||
A full list of options can be found in the [`vim.lazy.plugins` spec] on the
|
A full list of options can be found in the [`vim.lazy.plugins` spec] on the
|
||||||
rendered manual.
|
rendered manual.
|
||||||
|
|
||||||
|
## Keybinds {#sec-keybinds}
|
||||||
|
|
||||||
|
[extended standard library]: https://github.com/NotAShelf/nvf/tree/main/lib
|
||||||
|
|
||||||
|
As of 0.4, there exists an API for writing your own keybinds and a couple of
|
||||||
|
useful utility functions are available in the [extended standard library]. The
|
||||||
|
following section contains a general overview to how you may utilize said
|
||||||
|
functions.
|
||||||
|
|
||||||
|
### Custom Key Mappings Support for a Plugin {#sec-custom-key-mappings}
|
||||||
|
|
||||||
|
To set a mapping, you should define it in `vim.keymaps`. As an example, a simple
|
||||||
|
keybinding can look like this:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
vim.keymaps = [
|
||||||
|
{
|
||||||
|
key = "<leader>wq";
|
||||||
|
mode = ["n"];
|
||||||
|
action = ":wq<CR>";
|
||||||
|
silent = true;
|
||||||
|
desc = "Save file and quit";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[module option documentation]: options.html#option-vim-keymaps
|
||||||
|
|
||||||
|
There are many other settings available in the keymap module. Please refer to
|
||||||
|
the [module option documentation] for a full and up-to-date list of them.
|
||||||
|
|
||||||
|
To make adding new keymaps for your favorite plugins easier, **nvf** provides a
|
||||||
|
helper function. This is so that you do not have to write the mapping attribute
|
||||||
|
sets every time:
|
||||||
|
|
||||||
|
- `mkKeymap`, which mimics Neovim's `vim.keymap.set` function
|
||||||
|
|
||||||
|
You can read the source code of some modules to see them in action, but the
|
||||||
|
usage should look something like this:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# pluginDefinition.nix
|
||||||
|
{lib, ...}: let
|
||||||
|
inherit (lib.options) mkEnableOption;
|
||||||
|
inherit (lib.nvim.binds) mkMappingOption;
|
||||||
|
in {
|
||||||
|
options.vim.plugin = {
|
||||||
|
enable = mkEnableOption "Enable plugin";
|
||||||
|
|
||||||
|
# Mappings should always be inside an attrset called mappings
|
||||||
|
mappings = {
|
||||||
|
workspaceDiagnostics = mkMappingOption "Workspace diagnostics [trouble]" "<leader>lwd";
|
||||||
|
documentDiagnostics = mkMappingOption "Document diagnostics [trouble]" "<leader>ld";
|
||||||
|
lspReferences = mkMappingOption "LSP References [trouble]" "<leader>lr";
|
||||||
|
quickfix = mkMappingOption "QuickFix [trouble]" "<leader>xq";
|
||||||
|
locList = mkMappingOption "LOCList [trouble]" "<leader>xl";
|
||||||
|
symbols = mkMappingOption "Symbols [trouble]" "<leader>xs";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- markdownlint-disable MD013 -->
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# config.nix
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
options,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.nvim.binds) mkKeymap;
|
||||||
|
|
||||||
|
cfg = config.vim.plugin;
|
||||||
|
|
||||||
|
keys = cfg.mappings;
|
||||||
|
inherit (options.vim.lsp.trouble) mappings;
|
||||||
|
in {
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
vim.keymaps = [
|
||||||
|
(mkKeymap "n" keys.workspaceDiagnostics "<cmd>Trouble toggle diagnostics<CR>" {desc = mappings.workspaceDiagnostics.description;})
|
||||||
|
(mkKeymap "n" keys.documentDiagnostics "<cmd>Trouble toggle diagnostics filter.buf=0<CR>" {desc = mappings.documentDiagnostics.description;})
|
||||||
|
(mkKeymap "n" keys.lspReferences "<cmd>Trouble toggle lsp_references<CR>" {desc = mappings.lspReferences.description;})
|
||||||
|
(mkKeymap "n" keys.quickfix "<cmd>Trouble toggle quickfix<CR>" {desc = mappings.quickfix.description;})
|
||||||
|
(mkKeymap "n" keys.locList "<cmd>Trouble toggle loclist<CR>" {desc = mappings.locList.description;})
|
||||||
|
(mkKeymap "n" keys.symbols "<cmd>Trouble toggle symbols<CR>" {desc = mappings.symbols.description;})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
<!-- markdownlint-enable MD013 -->
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> If you have come across a plugin that has an API that doesn't seem to easily
|
||||||
|
> allow custom keybindings, don't be scared to implement a draft PR. We'll help
|
||||||
|
> you get it done.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue