mirror of
https://github.com/NotAShelf/nvf.git
synced 2024-11-22 21:30:51 +00:00
Compare commits
1 commit
347a8a2d7c
...
8b50e3de61
Author | SHA1 | Date | |
---|---|---|---|
|
8b50e3de61 |
126 changed files with 2058 additions and 4333 deletions
|
@ -46,14 +46,11 @@ isMaximal: {
|
||||||
|
|
||||||
nix.enable = true;
|
nix.enable = true;
|
||||||
|
|
||||||
# Assembly is not common, and the asm LSP is a major hit-or-miss
|
|
||||||
assembly.enable = false;
|
|
||||||
markdown.enable = isMaximal;
|
markdown.enable = isMaximal;
|
||||||
html.enable = isMaximal;
|
html.enable = isMaximal;
|
||||||
css.enable = isMaximal;
|
css.enable = isMaximal;
|
||||||
sql.enable = isMaximal;
|
sql.enable = isMaximal;
|
||||||
java.enable = isMaximal;
|
java.enable = isMaximal;
|
||||||
kotlin.enable = isMaximal;
|
|
||||||
ts.enable = isMaximal;
|
ts.enable = isMaximal;
|
||||||
svelte.enable = isMaximal;
|
svelte.enable = isMaximal;
|
||||||
go.enable = isMaximal;
|
go.enable = isMaximal;
|
||||||
|
@ -67,29 +64,32 @@ isMaximal: {
|
||||||
r.enable = isMaximal;
|
r.enable = isMaximal;
|
||||||
tailwind.enable = isMaximal;
|
tailwind.enable = isMaximal;
|
||||||
typst.enable = isMaximal;
|
typst.enable = isMaximal;
|
||||||
clang.enable = isMaximal;
|
clang = {
|
||||||
scala.enable = isMaximal;
|
enable = isMaximal;
|
||||||
|
lsp.server = "clangd";
|
||||||
|
};
|
||||||
|
|
||||||
rust = {
|
rust = {
|
||||||
enable = isMaximal;
|
enable = isMaximal;
|
||||||
crates.enable = isMaximal;
|
crates.enable = isMaximal;
|
||||||
};
|
};
|
||||||
csharp.enable = isMaximal;
|
|
||||||
julia.enable = isMaximal;
|
|
||||||
vala.enable = isMaximal;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
visuals = {
|
visuals = {
|
||||||
nvim-scrollbar.enable = isMaximal;
|
enable = true;
|
||||||
nvim-web-devicons.enable = true;
|
nvimWebDevicons.enable = true;
|
||||||
nvim-cursorline.enable = true;
|
scrollBar.enable = isMaximal;
|
||||||
cinnamon-nvim.enable = true;
|
smoothScroll.enable = true;
|
||||||
|
cellularAutomaton.enable = false;
|
||||||
fidget-nvim.enable = true;
|
fidget-nvim.enable = true;
|
||||||
|
|
||||||
highlight-undo.enable = true;
|
highlight-undo.enable = true;
|
||||||
indent-blankline.enable = true;
|
|
||||||
|
|
||||||
# Fun
|
indentBlankline.enable = true;
|
||||||
cellular-automaton.enable = false;
|
|
||||||
|
cursorline = {
|
||||||
|
enable = true;
|
||||||
|
lineTimeout = 0;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
statusline = {
|
statusline = {
|
||||||
|
@ -106,10 +106,12 @@ isMaximal: {
|
||||||
transparent = false;
|
transparent = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
autopairs.nvim-autopairs.enable = true;
|
autopairs.enable = true;
|
||||||
|
|
||||||
autocomplete.nvim-cmp.enable = true;
|
autocomplete = {
|
||||||
snippets.luasnip.enable = true;
|
enable = true;
|
||||||
|
type = "nvim-cmp";
|
||||||
|
};
|
||||||
|
|
||||||
filetree = {
|
filetree = {
|
||||||
nvimTree = {
|
nvimTree = {
|
||||||
|
@ -173,7 +175,6 @@ isMaximal: {
|
||||||
|
|
||||||
notes = {
|
notes = {
|
||||||
obsidian.enable = false; # FIXME: neovim fails to build if obsidian is enabled
|
obsidian.enable = false; # FIXME: neovim fails to build if obsidian is enabled
|
||||||
neorg.enable = false;
|
|
||||||
orgmode.enable = false;
|
orgmode.enable = false;
|
||||||
mind-nvim.enable = isMaximal;
|
mind-nvim.enable = isMaximal;
|
||||||
todo-comments.enable = true;
|
todo-comments.enable = true;
|
||||||
|
|
|
@ -20,7 +20,6 @@ custom plugins that you might have added to your configuration.
|
||||||
|
|
||||||
```{=include=} sections
|
```{=include=} sections
|
||||||
custom-plugins/configuring.md
|
custom-plugins/configuring.md
|
||||||
custom-plugins/lazy-method.md
|
custom-plugins/new-method.md
|
||||||
custom-plugins/non-lazy-method.md
|
custom-plugins/old-method.md
|
||||||
custom-plugins/legacy-method.md
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,32 +1,12 @@
|
||||||
# Configuring {#sec-configuring-plugins}
|
# Configuring {#sec-configuring-plugins}
|
||||||
|
|
||||||
Just making the plugin to your Neovim configuration available might not always be enough. In that
|
Just making the plugin to your Neovim configuration available might not always
|
||||||
case, you can write custom lua config using either `config.vim.lazy.plugins.*.setupOpts`
|
be enough. In that case, you can write custom lua config using either
|
||||||
`config.vim.extraPlugins.*.setup` or `config.vim.luaConfigRC`.
|
`config.vim.extraPlugins` (which has the `setup` field) or
|
||||||
|
`config.vim.luaConfigRC`. The first option uses an attribute set, which maps DAG
|
||||||
The first option uses an extended version of `lz.n`'s PluginSpec. `setupModule` and `setupOpt` can
|
section names to a custom type, which has the fields `package`, `after`,
|
||||||
be used if the plugin uses a `require('module').setup(...)` pattern. Otherwise, the `before` and
|
`setup`. They allow you to set the package of the plugin, the sections its setup
|
||||||
`after` hooks should do what you need.
|
code should be after (note that the `extraPlugins` option has its own DAG
|
||||||
|
|
||||||
```nix
|
|
||||||
{
|
|
||||||
config.vim.lazy.plugins = {
|
|
||||||
aerial.nvim = {
|
|
||||||
# ^^^^^^^^^ this name should match the package.pname or package.name
|
|
||||||
package = aerial-nvim;
|
|
||||||
|
|
||||||
setupModule = "aerial";
|
|
||||||
setupOpts = {option_name = false;};
|
|
||||||
|
|
||||||
after = "print('aerial loaded')";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
The second option uses an attribute set, which maps DAG section names to a custom type, which has
|
|
||||||
the fields `package`, `after`, `setup`. They allow you to set the package of the plugin, the
|
|
||||||
sections its setup code should be after (note that the `extraPlugins` option has its own DAG
|
|
||||||
scope), and the its setup code respectively. For example:
|
scope), and the its setup code respectively. For example:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
|
@ -44,7 +24,7 @@ config.vim.extraPlugins = with pkgs.vimPlugins; {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The third option also uses an attribute set, but this one is resolved as a DAG
|
The second option also uses an attribute set, but this one is resolved as a DAG
|
||||||
directly. The attribute names denote the section names, and the values lua code.
|
directly. The attribute names denote the section names, and the values lua code.
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
# Lazy Method {#sec-lazy-method}
|
|
||||||
|
|
||||||
As of version **0.7**, we exposed an API for configuring lazy-loaded plugins via
|
|
||||||
`lz.n` and `lzn-auto-require`.
|
|
||||||
|
|
||||||
```nix
|
|
||||||
{
|
|
||||||
config.vim.lazy.plugins = {
|
|
||||||
"aerial.nvim" = {
|
|
||||||
package = pkgs.vimPlugins.aerial-nvim;
|
|
||||||
setupModule = "aerial";
|
|
||||||
setupOpts = {
|
|
||||||
option_name = true;
|
|
||||||
};
|
|
||||||
after = ''
|
|
||||||
-- custom lua code to run after plugin is loaded
|
|
||||||
print('aerial loaded')
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Explicitly mark plugin as lazy. You don't need this if you define one of
|
|
||||||
# the trigger "events" below
|
|
||||||
lazy = true;
|
|
||||||
|
|
||||||
# load on command
|
|
||||||
cmd = ["AerialOpen"];
|
|
||||||
|
|
||||||
# load on event
|
|
||||||
event = ["BufEnter"];
|
|
||||||
|
|
||||||
# load on keymap
|
|
||||||
keys = [
|
|
||||||
{
|
|
||||||
key = "<leader>a";
|
|
||||||
action = ":AerialToggle<CR>";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Non-lazy Method {#sec-non-lazy-method}
|
# New Method {#sec-new-method}
|
||||||
|
|
||||||
As of version **0.5**, we have a more extensive API for configuring plugins,
|
As of version **0.5**, we have a more extensive API for configuring plugins,
|
||||||
under `vim.extraPlugins`. Instead of using DAGs exposed by the library, you may
|
under `vim.extraPlugins`. Instead of using DAGs exposed by the library, you may
|
|
@ -1,4 +1,4 @@
|
||||||
# Legacy Method {#sec-legacy-method}
|
# Old Method {#sec-old-method}
|
||||||
|
|
||||||
Prior to version 0.5, the method of adding new plugins was adding the plugin
|
Prior to version 0.5, the method of adding new plugins was adding the plugin
|
||||||
package to `vim.startPlugins` and add its configuration as a DAG under one of
|
package to `vim.startPlugins` and add its configuration as a DAG under one of
|
|
@ -12,14 +12,12 @@ entries in nvf:
|
||||||
2. `globalsScript` - used to set globals defined in `vim.globals`
|
2. `globalsScript` - used to set globals defined in `vim.globals`
|
||||||
3. `basic` - used to set basic configuration options
|
3. `basic` - used to set basic configuration options
|
||||||
4. `optionsScript` - used to set options defined in `vim.o`
|
4. `optionsScript` - used to set options defined in `vim.o`
|
||||||
5. `theme` (this is simply placed before `pluginConfigs` and `lazyConfigs`, meaning that
|
5. `theme` (this is simply placed before `pluginConfigs`, meaning that
|
||||||
surrounding entries don't depend on it) - used to set up the theme, which has to be done before
|
surrounding entries don't depend on it) - used to set up the theme, which has
|
||||||
other plugins
|
to be done before other plugins
|
||||||
6. `lazyConfigs` - `lz.n` and `lzn-auto-require` configs. If `vim.lazy.enable`
|
6. `pluginConfigs` - the result of the nested `vim.pluginRC` (internal option,
|
||||||
is false, this will contain each plugin's config instead.
|
|
||||||
7. `pluginConfigs` - the result of the nested `vim.pluginRC` (internal option,
|
|
||||||
see the [Custom Plugins](/index.xhtml#ch-custom-plugins) page for adding your
|
see the [Custom Plugins](/index.xhtml#ch-custom-plugins) page for adding your
|
||||||
own plugins) DAG, used to set up internal plugins
|
own plugins) DAG, used to set up internal plugins
|
||||||
8. `extraPluginConfigs` - the result of `vim.extraPlugins`, which is not a
|
7. `extraPluginConfigs` - the result of `vim.extraPlugins`, which is not a
|
||||||
direct DAG, but is converted to, and resolved as one internally
|
direct DAG, but is converted to, and resolved as one internally
|
||||||
9. `mappings` - the result of `vim.maps`
|
8. `mappings` - the result of `vim.maps`
|
||||||
|
|
|
@ -124,61 +124,3 @@ vim.your-plugin.setupOpts = {
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Lazy plugins {#sec-lazy-plugins}
|
|
||||||
|
|
||||||
If the plugin can be lazy-loaded, `vim.lazy.plugins` should be used to add it. Lazy
|
|
||||||
plugins are managed by `lz.n`.
|
|
||||||
|
|
||||||
```nix
|
|
||||||
# in modules/.../your-plugin/config.nix
|
|
||||||
{lib, config, ...}:
|
|
||||||
let
|
|
||||||
cfg = config.vim.your-plugin;
|
|
||||||
in {
|
|
||||||
vim.lazy.plugins.your-plugin = {
|
|
||||||
# instead of vim.startPlugins, use this:
|
|
||||||
package = "your-plugin";
|
|
||||||
|
|
||||||
# if your plugin uses the `require('your-plugin').setup{...}` pattern
|
|
||||||
setupModule = "your-plugin";
|
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
|
|
||||||
# events that trigger this plugin to be loaded
|
|
||||||
event = ["DirChanged"];
|
|
||||||
cmd = ["YourPluginCommand"];
|
|
||||||
|
|
||||||
# keymaps
|
|
||||||
keys = [
|
|
||||||
# we'll cover this in detail in the keymaps section
|
|
||||||
{
|
|
||||||
key = "<leader>d";
|
|
||||||
mode = "n";
|
|
||||||
action = ":YourPluginCommand";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This results in the following lua code:
|
|
||||||
```lua
|
|
||||||
require('lz.n').load({
|
|
||||||
{
|
|
||||||
"name-of-your-plugin",
|
|
||||||
after = function()
|
|
||||||
require('your-plugin').setup({--[[ your setupOpts ]]})
|
|
||||||
end,
|
|
||||||
|
|
||||||
event = {"DirChanged"},
|
|
||||||
cmd = {"YourPluginCommand"},
|
|
||||||
keys = {
|
|
||||||
{"<leader>d", ":YourPluginCommand", mode = {"n"}},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
})
|
|
||||||
```
|
|
||||||
|
|
||||||
A full list of options can be found
|
|
||||||
[here](https://notashelf.github.io/nvf/options.html#opt-vim.lazy.plugins
|
|
||||||
|
|
|
@ -7,26 +7,37 @@ section contains a general overview to how you may utilize said functions.
|
||||||
|
|
||||||
## Custom Key Mappings Support for a Plugin {#sec-custom-key-mappings}
|
## Custom Key Mappings Support for a Plugin {#sec-custom-key-mappings}
|
||||||
|
|
||||||
To set a mapping, you should define it in `vim.keymaps`.
|
To set a mapping, you should define it in `vim.maps.<<mode>>`.
|
||||||
|
The available modes are:
|
||||||
|
|
||||||
|
- normal
|
||||||
|
- insert
|
||||||
|
- select
|
||||||
|
- visual
|
||||||
|
- terminal
|
||||||
|
- normalVisualOp
|
||||||
|
- visualOnly
|
||||||
|
- operator
|
||||||
|
- insertCommand
|
||||||
|
- lang
|
||||||
|
- command
|
||||||
|
|
||||||
An example, simple keybinding, can look like this:
|
An example, simple keybinding, can look like this:
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
vim.keymaps = [
|
vim.maps.normal = {
|
||||||
{
|
"<leader>wq" = {
|
||||||
key = "<leader>wq";
|
|
||||||
mode = ["n"];
|
|
||||||
action = ":wq<CR>";
|
action = ":wq<CR>";
|
||||||
silent = true;
|
silent = true;
|
||||||
desc = "Save file and quit";
|
desc = "Save file and quit";
|
||||||
}
|
};
|
||||||
];
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
There are many settings available in the options. Please refer to the
|
There are many settings available in the options. Please refer to the
|
||||||
[documentation](https://notashelf.github.io/nvf/options.html#opt-vim.keymaps)
|
[documentation](https://notashelf.github.io/nvf/options.html#opt-vim.maps.command._name_.action)
|
||||||
to see a list of them.
|
to see a list of them.
|
||||||
|
|
||||||
**nvf** provides a list of helper commands, so that you don't have to write the
|
**nvf** provides a list of helper commands, so that you don't have to write the
|
||||||
|
|
|
@ -26,32 +26,6 @@ making good use of its extensive Lua API. Additionally, Vimscript is slow and
|
||||||
brings unnecessary performance overhead while working with different
|
brings unnecessary performance overhead while working with different
|
||||||
configuration formats.
|
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.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
vim.maps.normal."<leader>m" = { ... };
|
|
||||||
```
|
|
||||||
|
|
||||||
has to be replaced by
|
|
||||||
|
|
||||||
```nix
|
|
||||||
vim.keymaps = [
|
|
||||||
{
|
|
||||||
key = "<leader>m";
|
|
||||||
mode = "n";
|
|
||||||
}
|
|
||||||
...
|
|
||||||
];
|
|
||||||
```
|
|
||||||
|
|
||||||
### `vim.lsp.nvimCodeActionMenu` removed in favor of `vim.ui.fastaction` {#sec-nvim-code-action-menu-deprecation}
|
### `vim.lsp.nvimCodeActionMenu` removed in favor of `vim.ui.fastaction` {#sec-nvim-code-action-menu-deprecation}
|
||||||
|
|
||||||
The nvim-code-action-menu plugin has been archived and broken for a long time,
|
The nvim-code-action-menu plugin has been archived and broken for a long time,
|
||||||
|
@ -63,24 +37,6 @@ Note that we are looking to add more alternatives in the future like
|
||||||
dressing.nvim and actions-preview.nvim, in case fastaction doesn't work for
|
dressing.nvim and actions-preview.nvim, in case fastaction doesn't work for
|
||||||
everyone.
|
everyone.
|
||||||
|
|
||||||
### `type` based modules removed {#sec-type-based-modules-removed}
|
|
||||||
|
|
||||||
As part of the autocompletion rewrite, modules that used to use a `type` option
|
|
||||||
have been replaced by per-plugin modules instead. Since both modules only had
|
|
||||||
one type, you can simply change
|
|
||||||
|
|
||||||
- `vim.autocomplete.*` -> `vim.autocomplete.nvim-cmp.*`
|
|
||||||
- `vim.autopairs.enable` -> `vim.autopairs.nvim-autopairs.enable`
|
|
||||||
|
|
||||||
### `nixpkgs-fmt` removed in favor of `nixfmt` {#sec-nixpkgs-fmt-deprecation}
|
|
||||||
|
|
||||||
`nixpkgs-fmt` has been archived for a while, and it's finally being removed in
|
|
||||||
favor of nixfmt (more information can be found
|
|
||||||
[here](https://github.com/nix-community/nixpkgs-fmt?tab=readme-ov-file#nixpkgs-fmt---nix-code-formatter-for-nixpkgs).
|
|
||||||
|
|
||||||
To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to
|
|
||||||
`nixfmt`.
|
|
||||||
|
|
||||||
## Changelog {#sec-release-0.7-changelog}
|
## Changelog {#sec-release-0.7-changelog}
|
||||||
|
|
||||||
[ItsSorae](https://github.com/ItsSorae):
|
[ItsSorae](https://github.com/ItsSorae):
|
||||||
|
@ -111,9 +67,6 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to
|
||||||
- Add dap-go for better dap configurations
|
- Add dap-go for better dap configurations
|
||||||
- Make noice.nvim customizable
|
- Make noice.nvim customizable
|
||||||
- Standardize border style options and add custom borders
|
- Standardize border style options and add custom borders
|
||||||
- Remove `vim.disableDefaultRuntimePaths` in wrapper options.
|
|
||||||
- As nvf uses `$NVIM_APP_NAME` as of recent changes, we can safely assume any
|
|
||||||
configuration in `$XDG_CONFIG_HOME/nvf` is intentional.
|
|
||||||
|
|
||||||
[rust-tools.nvim]: https://github.com/simrat39/rust-tools.nvim
|
[rust-tools.nvim]: https://github.com/simrat39/rust-tools.nvim
|
||||||
[rustaceanvim]: https://github.com/mrcjkb/rustaceanvim
|
[rustaceanvim]: https://github.com/mrcjkb/rustaceanvim
|
||||||
|
@ -123,10 +76,6 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to
|
||||||
recommended to go through rustacean.nvim's README to take a closer look at its
|
recommended to go through rustacean.nvim's README to take a closer look at its
|
||||||
features and usage
|
features and usage
|
||||||
|
|
||||||
- Add [lz.n] support and lazy-load some builtin plugins.
|
|
||||||
|
|
||||||
[lz.n]: https://github.com/mrcjkb/lz.n
|
|
||||||
|
|
||||||
[jacekpoz](https://jacekpoz.pl):
|
[jacekpoz](https://jacekpoz.pl):
|
||||||
|
|
||||||
[ocaml-lsp]: https://github.com/ocaml/ocaml-lsp
|
[ocaml-lsp]: https://github.com/ocaml/ocaml-lsp
|
||||||
|
@ -175,37 +124,10 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to
|
||||||
- Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the
|
- Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the
|
||||||
breaking changes section above for more details
|
breaking changes section above for more details
|
||||||
|
|
||||||
- Add a `setupOpts` option to nvim-surround, which allows modifying options that
|
|
||||||
aren't defined in nvf. Move the alternate nvim-surround keybinds to use
|
|
||||||
`setupOpts`.
|
|
||||||
|
|
||||||
- Remove `autopairs.type`, and rename `autopairs.enable` to
|
|
||||||
`autopairs.nvim-autopairs.enable`. The new
|
|
||||||
[](#opt-vim.autopairs.nvim-autopairs.enable) supports `setupOpts` format by
|
|
||||||
default.
|
|
||||||
|
|
||||||
- Refactor of `nvim-cmp` and completion related modules
|
|
||||||
|
|
||||||
- Remove `autocomplete.type` in favor of per-plugin enable options such as
|
|
||||||
[](#opt-vim.autocomplete.nvim-cmp.enable).
|
|
||||||
- Deprecate legacy Vimsnip in favor of Luasnip, and integrate
|
|
||||||
friendly-snippets for bundled snippets. [](#opt-vim.snippets.luasnip.enable)
|
|
||||||
can be used to toggle Luasnip.
|
|
||||||
- Add sorting function options for completion sources under
|
|
||||||
[](#opt-vim.autocomplete.nvim-cmp.setupOpts.sorting.comparators)
|
|
||||||
|
|
||||||
- Add C# support under `vim.languages.csharp`, with support for both
|
|
||||||
omnisharp-roslyn and csharp-language-server.
|
|
||||||
|
|
||||||
- Add Julia support under `vim.languages.julia`. Note that the entirety of Julia
|
|
||||||
is bundled with nvf, if you enable the module, since there is no way to
|
|
||||||
provide only the LSP server.
|
|
||||||
|
|
||||||
[Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd()
|
[Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd()
|
||||||
|
|
||||||
- Make Neovim's configuration file entirely Lua based. This comes with a few
|
- Make Neovim's configuration file entirely Lua based. This comes with a few
|
||||||
breaking changes:
|
breaking changes:
|
||||||
|
|
||||||
- `vim.configRC` has been removed. You will need to migrate your entries to
|
- `vim.configRC` has been removed. You will need to migrate your entries to
|
||||||
Neovim-compliant Lua code, and add them to `vim.luaConfigRC` instead.
|
Neovim-compliant Lua code, and add them to `vim.luaConfigRC` instead.
|
||||||
Existing vimscript configurations may be preserved in `vim.cmd` functions.
|
Existing vimscript configurations may be preserved in `vim.cmd` functions.
|
||||||
|
@ -214,13 +136,10 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to
|
||||||
has been introduced for setting up internal plugins. See the "DAG entries in
|
has been introduced for setting up internal plugins. See the "DAG entries in
|
||||||
nvf" manual page for more information.
|
nvf" manual page for more information.
|
||||||
|
|
||||||
- Rewrite `vim.maps`, see the breaking changes section above.
|
|
||||||
|
|
||||||
[NotAShelf](https://github.com/notashelf):
|
[NotAShelf](https://github.com/notashelf):
|
||||||
|
|
||||||
[ts-error-translator.nvim]: https://github.com/dmmulroy/ts-error-translator.nvim
|
[ts-error-translator.nvim]: https://github.com/dmmulroy/ts-error-translator.nvim
|
||||||
[credo]: https://github.com/rrrene/credo
|
[credo]: https://github.com/rrrene/credo
|
||||||
[tiny-devicons-auto-colors]: https://github.com/rachartier/tiny-devicons-auto-colors.nvim
|
|
||||||
|
|
||||||
- Add `deno fmt` as the default Markdown formatter. This will be enabled
|
- Add `deno fmt` as the default Markdown formatter. This will be enabled
|
||||||
automatically if you have autoformatting enabled, but can be disabled manually
|
automatically if you have autoformatting enabled, but can be disabled manually
|
||||||
|
@ -279,19 +198,9 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to
|
||||||
configuration for [dashboard.nvim](https://github.com/nvimdev/dashboard-nvim)
|
configuration for [dashboard.nvim](https://github.com/nvimdev/dashboard-nvim)
|
||||||
|
|
||||||
- Update `lualine.nvim` input and add missing themes:
|
- Update `lualine.nvim` input and add missing themes:
|
||||||
|
|
||||||
- Adds `ayu`, `gruvbox_dark`, `iceberg`, `moonfly`, `onedark`,
|
- Adds `ayu`, `gruvbox_dark`, `iceberg`, `moonfly`, `onedark`,
|
||||||
`powerline_dark` and `solarized_light` themes.
|
`powerline_dark` and `solarized_light` themes.
|
||||||
|
|
||||||
- Add [](#opt-vim.spellcheck.extraSpellWords) to allow adding arbitrary
|
|
||||||
spellfiles to Neovim's runtime with ease.
|
|
||||||
|
|
||||||
- Add combined nvf configuration (`config.vim`) into the final package's
|
|
||||||
passthru as `passthru.neovimConfiguration` for easier debugging.
|
|
||||||
|
|
||||||
- Add support for [tiny-devicons-auto-colors] under
|
|
||||||
`vim.visuals.tiny-devicons-auto-colors`
|
|
||||||
|
|
||||||
[ppenguin](https://github.com/ppenguin):
|
[ppenguin](https://github.com/ppenguin):
|
||||||
|
|
||||||
- Telescope:
|
- Telescope:
|
||||||
|
@ -301,40 +210,13 @@ To migrate to `nixfmt`, simply change `vim.languages.nix.format.type` to
|
||||||
[Soliprem](https://github.com/Soliprem):
|
[Soliprem](https://github.com/Soliprem):
|
||||||
|
|
||||||
- Add LSP and Treesitter support for R under `vim.languages.R`.
|
- Add LSP and Treesitter support for R under `vim.languages.R`.
|
||||||
- Add formatter suppoort for R, with styler and formatR as options
|
|
||||||
- Add Otter support under `vim.lsp.otter` and an assert to prevent conflict with
|
- Add Otter support under `vim.lsp.otter` and an assert to prevent conflict with
|
||||||
ccc
|
ccc
|
||||||
- Fixed typo in Otter's setupOpts
|
|
||||||
- Add Neorg support under `vim.notes.neorg`
|
|
||||||
- Add LSP, diagnostics, formatter and Treesitter support for Kotlin under
|
|
||||||
`vim.languages.kotlin`
|
|
||||||
- changed default keybinds for leap.nvim to avoid altering expected behavior
|
|
||||||
- Add LSP, formatter and Treesitter support for Vala under `vim.languages.vala`
|
|
||||||
- Add [Tinymist](https://github.com/Myriad-Dreamin/tinymist] as a formatter for
|
|
||||||
the Typst language module.
|
|
||||||
- Add LSP and Treesitter support for Assembly under `vim.languages.assembly`
|
|
||||||
- Move [which-key](https://github.com/folke/which-key.nvim) to the new spec
|
|
||||||
|
|
||||||
[Bloxx12](https://github.com/Bloxx12)
|
[Bloxx12](https://github.com/Bloxx12):
|
||||||
|
|
||||||
- Add support for [base16 theming](https://github.com/RRethy/base16-nvim) under
|
|
||||||
`vim.theme`
|
|
||||||
- Fix internal breakage in `elixir-tools` setup.
|
- Fix internal breakage in `elixir-tools` setup.
|
||||||
|
|
||||||
[ksonj](https://github.com/ksonj):
|
|
||||||
|
|
||||||
- Add LSP support for Scala via
|
|
||||||
[nvim-metals](https://github.com/scalameta/nvim-metals)
|
|
||||||
|
|
||||||
[nezia1](https://github.com/nezia1):
|
|
||||||
|
|
||||||
- Add [biome](https://github.com/biomejs/biome) support for Typescript, CSS and
|
|
||||||
Svelte. Enable them via [](#opt-vim.languages.ts.format.type),
|
|
||||||
[](#opt-vim.languages.css.format.type) and
|
|
||||||
[](#opt-vim.languages.svelte.format.type) respectively.
|
|
||||||
- Replace [nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt) with
|
|
||||||
[nixfmt](https://github.com/NixOS/nixfmt) (nixfmt-rfc-style).
|
|
||||||
|
|
||||||
[Nowaaru](https://github.com/Nowaaru):
|
[Nowaaru](https://github.com/Nowaaru):
|
||||||
|
|
||||||
- Add `precognition-nvim`.
|
- Add `precognition-nvim`.
|
||||||
|
|
804
flake.lock
804
flake.lock
File diff suppressed because it is too large
Load diff
82
flake.nix
82
flake.nix
|
@ -126,22 +126,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
## Plugins
|
## Plugins
|
||||||
# Lazy loading
|
|
||||||
plugin-lz-n = {
|
|
||||||
url = "github:nvim-neorocks/lz.n";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-lzn-auto-require = {
|
|
||||||
url = "github:horriblename/lzn-auto-require/require-rewrite";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-rtp-nvim = {
|
|
||||||
url = "github:nvim-neorocks/rtp.nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# LSP plugins
|
# LSP plugins
|
||||||
plugin-nvim-lspconfig = {
|
plugin-nvim-lspconfig = {
|
||||||
url = "github:neovim/nvim-lspconfig";
|
url = "github:neovim/nvim-lspconfig";
|
||||||
|
@ -235,21 +219,6 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
plugin-nvim-metals = {
|
|
||||||
url = "github:scalameta/nvim-metals";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-omnisharp-extended = {
|
|
||||||
url = "github:Hoffs/omnisharp-extended-lsp.nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-csharpls-extended = {
|
|
||||||
url = "github:Decodetalkers/csharpls-extended-lsp.nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Copying/Registers
|
# Copying/Registers
|
||||||
plugin-registers = {
|
plugin-registers = {
|
||||||
url = "github:tversteeg/registers.nvim";
|
url = "github:tversteeg/registers.nvim";
|
||||||
|
@ -321,6 +290,11 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
plugin-cmp-vsnip = {
|
||||||
|
url = "github:hrsh7th/cmp-vsnip";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
plugin-cmp-path = {
|
plugin-cmp-path = {
|
||||||
url = "github:hrsh7th/cmp-path";
|
url = "github:hrsh7th/cmp-path";
|
||||||
flake = false;
|
flake = false;
|
||||||
|
@ -331,19 +305,9 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
plugin-cmp-luasnip = {
|
|
||||||
url = "github:saadparwaiz1/cmp_luasnip";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
# snippets
|
# snippets
|
||||||
plugin-luasnip = {
|
plugin-vim-vsnip = {
|
||||||
url = "github:L3MON4D3/LuaSnip";
|
url = "github:hrsh7th/vim-vsnip";
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-friendly-snippets = {
|
|
||||||
url = "github:rafamadriz/friendly-snippets";
|
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -398,11 +362,6 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
# Themes
|
# Themes
|
||||||
plugin-base16 = {
|
|
||||||
url = "github:rrethy/base16-nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-tokyonight = {
|
plugin-tokyonight = {
|
||||||
url = "github:folke/tokyonight.nvim";
|
url = "github:folke/tokyonight.nvim";
|
||||||
flake = false;
|
flake = false;
|
||||||
|
@ -456,7 +415,7 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
plugin-nvim-scrollbar = {
|
plugin-scrollbar-nvim = {
|
||||||
url = "github:petertriho/nvim-scrollbar";
|
url = "github:petertriho/nvim-scrollbar";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
@ -481,11 +440,6 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
plugin-tiny-devicons-auto-colors = {
|
|
||||||
url = "github:rachartier/tiny-devicons-auto-colors.nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-gitsigns-nvim = {
|
plugin-gitsigns-nvim = {
|
||||||
url = "github:lewis6991/gitsigns.nvim";
|
url = "github:lewis6991/gitsigns.nvim";
|
||||||
flake = false;
|
flake = false;
|
||||||
|
@ -695,26 +649,6 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
plugin-lua-utils-nvim = {
|
|
||||||
url = "github:nvim-neorg/lua-utils.nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-pathlib-nvim = {
|
|
||||||
url = "github:pysan3/pathlib.nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-neorg = {
|
|
||||||
url = "github:nvim-neorg/neorg";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-neorg-telescope = {
|
|
||||||
url = "github:nvim-neorg/neorg-telescope";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
plugin-nui-nvim = {
|
plugin-nui-nvim = {
|
||||||
# (required by noice.nvim)
|
# (required by noice.nvim)
|
||||||
url = "github:MunifTanjim/nui.nvim";
|
url = "github:MunifTanjim/nui.nvim";
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
docs-html-wrapped = pkgs.writeScriptBin "docs-html-wrapped" ''
|
docs-html-wrapped = pkgs.writeScriptBin "docs-html-wrapped" ''
|
||||||
#!${pkgs.stdenv.shell}
|
#!${pkgs.stdenv.shell}
|
||||||
# use xdg-open to open the docs in the browser
|
# use xdg-open to open the docs in the browser
|
||||||
${pkgs.xdg-utils}/bin/xdg-open ${docs.manual.html}
|
${pkgs.xdg_utils}/bin/xdg-open ${docs.manual.html}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Exposed neovim configurations
|
# Exposed neovim configurations
|
||||||
|
@ -29,10 +29,10 @@
|
||||||
|
|
||||||
# Published docker images
|
# Published docker images
|
||||||
docker-nix = let
|
docker-nix = let
|
||||||
inherit (pkgs) bash gitFull buildEnv;
|
inherit (pkgs) bash gitFull buildEnv dockerTools;
|
||||||
inherit (config.legacyPackages) neovim-nix;
|
inherit (config.legacyPackages) neovim-nix;
|
||||||
in
|
in
|
||||||
pkgs.dockerTools.buildImage {
|
dockerTools.buildImage {
|
||||||
name = "nvf";
|
name = "nvf";
|
||||||
tag = "latest";
|
tag = "latest";
|
||||||
|
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
{lib}: let
|
|
||||||
inherit (builtins) listToAttrs;
|
|
||||||
in {
|
|
||||||
mapListToAttrs = f: list: listToAttrs (map f list);
|
|
||||||
}
|
|
|
@ -67,30 +67,6 @@
|
||||||
mkLuaBinding binding.value action binding.description;
|
mkLuaBinding binding.value action binding.description;
|
||||||
|
|
||||||
pushDownDefault = attr: mapAttrs (_: mkDefault) attr;
|
pushDownDefault = attr: mapAttrs (_: mkDefault) attr;
|
||||||
|
|
||||||
mkLznBinding = mode: key: action: desc: {
|
|
||||||
inherit mode desc key action;
|
|
||||||
};
|
|
||||||
|
|
||||||
mkLznExprBinding = mode: key: action: desc: {
|
|
||||||
inherit mode desc key action;
|
|
||||||
lua = true;
|
|
||||||
silent = true;
|
|
||||||
expr = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
mkSetLznBinding = binding: action: {
|
|
||||||
inherit action;
|
|
||||||
key = binding.value;
|
|
||||||
desc = binding.description;
|
|
||||||
};
|
|
||||||
|
|
||||||
mkSetLuaLznBinding = binding: action: {
|
|
||||||
inherit action;
|
|
||||||
key = binding.value;
|
|
||||||
lua = true;
|
|
||||||
desc = binding.description;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
binds
|
binds
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
dag = import ./dag.nix {inherit lib;};
|
dag = import ./dag.nix {inherit lib;};
|
||||||
languages = import ./languages.nix {inherit lib;};
|
languages = import ./languages.nix {inherit lib;};
|
||||||
lists = import ./lists.nix {inherit lib;};
|
lists = import ./lists.nix {inherit lib;};
|
||||||
attrsets = import ./attrsets.nix {inherit lib;};
|
|
||||||
lua = import ./lua.nix {inherit lib;};
|
lua = import ./lua.nix {inherit lib;};
|
||||||
neovimConfiguration = import ../modules {inherit inputs lib;};
|
neovimConfiguration = import ../modules {inherit inputs lib;};
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
{lib}: let
|
{lib}: let
|
||||||
inherit (builtins) isString getAttr;
|
inherit (builtins) isString getAttr;
|
||||||
inherit (lib.options) mkOption;
|
inherit (lib.options) mkOption;
|
||||||
|
inherit (lib.attrsets) listToAttrs;
|
||||||
inherit (lib.types) bool;
|
inherit (lib.types) bool;
|
||||||
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.
|
||||||
|
@ -12,8 +12,8 @@ in {
|
||||||
config,
|
config,
|
||||||
diagnosticsProviders,
|
diagnosticsProviders,
|
||||||
}:
|
}:
|
||||||
mapListToAttrs
|
listToAttrs
|
||||||
(v: let
|
(map (v: let
|
||||||
type =
|
type =
|
||||||
if isString v
|
if isString v
|
||||||
then v
|
then v
|
||||||
|
@ -26,7 +26,7 @@ in {
|
||||||
name = "${lang}-diagnostics-${type}";
|
name = "${lang}-diagnostics-${type}";
|
||||||
value = diagnosticsProviders.${type}.nullConfig package;
|
value = diagnosticsProviders.${type}.nullConfig package;
|
||||||
})
|
})
|
||||||
config;
|
config);
|
||||||
|
|
||||||
mkEnable = desc:
|
mkEnable = desc:
|
||||||
mkOption {
|
mkOption {
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
{lib}: let
|
{lib}: let
|
||||||
inherit (lib.options) showOption showFiles getFiles mergeOneOption mergeEqualOption;
|
inherit (lib) isStringLike showOption showFiles getFiles mergeOneOption mergeEqualOption mkOptionType;
|
||||||
inherit (lib.strings) isString isStringLike;
|
inherit (lib.types) anything attrsOf;
|
||||||
inherit (lib.types) anything attrsOf listOf mkOptionType;
|
|
||||||
inherit (lib.nvim.types) anythingConcatLists;
|
inherit (lib.nvim.types) anythingConcatLists;
|
||||||
inherit (builtins) typeOf isAttrs any head concatLists stringLength match;
|
inherit (builtins) typeOf isAttrs any head concatLists stringLength;
|
||||||
in {
|
in {
|
||||||
# HACK: Does this break anything in our case?
|
# HACK: Does this break anything in our case?
|
||||||
# A modified version of the nixpkgs anything type that concatenates lists
|
# A modified version of the nixpkgs anything type that concatenates lists
|
||||||
|
@ -52,16 +51,6 @@ in {
|
||||||
(mergeFunctions.${commonType} or mergeEqualOption) loc defs;
|
(mergeFunctions.${commonType} or mergeEqualOption) loc defs;
|
||||||
};
|
};
|
||||||
|
|
||||||
mergelessListOf = elemType: let
|
|
||||||
super = listOf elemType;
|
|
||||||
in
|
|
||||||
super
|
|
||||||
// {
|
|
||||||
name = "mergelessListOf";
|
|
||||||
description = "mergeless ${super.description}";
|
|
||||||
merge = mergeEqualOption;
|
|
||||||
};
|
|
||||||
|
|
||||||
char = mkOptionType {
|
char = mkOptionType {
|
||||||
name = "char";
|
name = "char";
|
||||||
description = "character";
|
description = "character";
|
||||||
|
@ -69,11 +58,4 @@ in {
|
||||||
check = value: stringLength value < 2;
|
check = value: stringLength value < 2;
|
||||||
merge = mergeEqualOption;
|
merge = mergeEqualOption;
|
||||||
};
|
};
|
||||||
|
|
||||||
hexColor = mkOptionType {
|
|
||||||
name = "hex-color";
|
|
||||||
descriptionClass = "noun";
|
|
||||||
description = "RGB color in hex format";
|
|
||||||
check = v: isString v && (match "#?[0-9a-fA-F]{6}" v) != null;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,10 @@
|
||||||
typesDag = import ./dag.nix {inherit lib;};
|
typesDag = import ./dag.nix {inherit lib;};
|
||||||
typesPlugin = import ./plugins.nix {inherit inputs lib;};
|
typesPlugin = import ./plugins.nix {inherit inputs lib;};
|
||||||
typesLanguage = import ./languages.nix {inherit lib;};
|
typesLanguage = import ./languages.nix {inherit lib;};
|
||||||
customTypes = import ./custom.nix {inherit lib;};
|
typesCustom = import ./custom.nix {inherit lib;};
|
||||||
in {
|
in {
|
||||||
inherit (typesDag) dagOf;
|
inherit (typesDag) dagOf;
|
||||||
inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType;
|
inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType;
|
||||||
inherit (typesLanguage) diagnostics mkGrammarOption;
|
inherit (typesLanguage) diagnostics mkGrammarOption;
|
||||||
inherit (customTypes) anythingConcatLists char hexColor mergelessListOf;
|
inherit (typesCustom) anythingConcatLists char;
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,10 @@
|
||||||
|
|
||||||
# built (or "normalized") plugins that are modified
|
# built (or "normalized") plugins that are modified
|
||||||
builtStartPlugins = buildConfigPlugins vimOptions.startPlugins;
|
builtStartPlugins = buildConfigPlugins vimOptions.startPlugins;
|
||||||
builtOptPlugins = map (package: package // {optional = true;}) (buildConfigPlugins vimOptions.optPlugins);
|
builtOptPlugins = map (package: {
|
||||||
|
plugin = package;
|
||||||
|
optional = true;
|
||||||
|
}) (buildConfigPlugins vimOptions.optPlugins);
|
||||||
|
|
||||||
# additional Lua and Python3 packages, mapped to their respective functions
|
# additional Lua and Python3 packages, mapped to their respective functions
|
||||||
# to conform to the format mnw expects. end user should
|
# to conform to the format mnw expects. end user should
|
||||||
|
@ -123,15 +126,9 @@ in {
|
||||||
paths = [neovim-wrapped printConfig printConfigPath];
|
paths = [neovim-wrapped printConfig printConfigPath];
|
||||||
postBuild = "echo Helpers added";
|
postBuild = "echo Helpers added";
|
||||||
|
|
||||||
# Allow evaluating vimOptions, i.e., config.vim from the packages' passthru
|
meta = {
|
||||||
# attribute. For example, packages.x86_64-linux.neovim.passthru.neovimConfig
|
description = "Wrapped version of Neovim with additional helper scripts";
|
||||||
# will return the configuration in full.
|
mainProgram = "nvim";
|
||||||
passthru.neovimConfig = vimOptions;
|
|
||||||
|
|
||||||
meta =
|
|
||||||
neovim-wrapped.meta
|
|
||||||
// {
|
|
||||||
description = "Wrapped Neovim package with helper scripts to print the config (path)";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib.modules) mkRemovedOptionModule mkRenamedOptionModule;
|
inherit (lib.modules) mkRemovedOptionModule;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
# 2024-06-06
|
# 2024-06-06
|
||||||
|
@ -14,45 +14,5 @@ in {
|
||||||
available under `vim.ui.fastaction` as a replacement. Simply remove everything under
|
available under `vim.ui.fastaction` as a replacement. Simply remove everything under
|
||||||
`vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`.
|
`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"])
|
|
||||||
|
|
||||||
# 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.
|
|
||||||
'')
|
|
||||||
|
|
||||||
(mkRemovedOptionModule ["vim" "disableDefaultRuntimePaths"] ''
|
|
||||||
Nvf now uses $NVIM_APP_NAME so there is no longer the problem of
|
|
||||||
(accidental) leaking of user configuration.
|
|
||||||
'')
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,6 @@
|
||||||
"build"
|
"build"
|
||||||
"rc"
|
"rc"
|
||||||
"warnings"
|
"warnings"
|
||||||
"lazy"
|
|
||||||
];
|
];
|
||||||
|
|
||||||
# Extra modules, such as deprecation warnings
|
# Extra modules, such as deprecation warnings
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
pkgs,
|
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf mkRenamedOptionModule;
|
inherit (lib.modules) mkIf mkRenamedOptionModule;
|
||||||
inherit (lib.options) mkOption mkEnableOption literalExpression;
|
inherit (lib.options) mkOption mkEnableOption literalExpression;
|
||||||
inherit (lib.strings) concatLines;
|
inherit (lib.types) listOf str;
|
||||||
inherit (lib.attrsets) mapAttrsToList;
|
|
||||||
inherit (lib.types) listOf str attrsOf;
|
|
||||||
inherit (lib.nvim.lua) listToLuaTable;
|
inherit (lib.nvim.lua) listToLuaTable;
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
inherit (lib.nvim.dag) entryAfter;
|
||||||
|
|
||||||
|
@ -27,48 +24,10 @@ in {
|
||||||
description = ''
|
description = ''
|
||||||
A list of languages that should be used for spellchecking.
|
A list of languages that should be used for spellchecking.
|
||||||
|
|
||||||
To add your own language files, you may place your `spell` directory in either
|
To add your own language files, you may place your `spell`
|
||||||
{file}`$XDG_CONFIG_HOME/nvf` or in a path that is included in the
|
directory in either `~/.config/nvim` or the
|
||||||
[additionalRuntimePaths](#opt-vim.additionalRuntimePaths) list provided by nvf.
|
[additionalRuntimePaths](#opt-vim.additionalRuntimePaths)
|
||||||
'';
|
directory provided by **nvf**.
|
||||||
};
|
|
||||||
|
|
||||||
extraSpellWords = mkOption {
|
|
||||||
type = attrsOf (listOf str);
|
|
||||||
default = {};
|
|
||||||
example = literalExpression ''{"en.utf-8" = ["nvf" "word_you_want_to_add"];}'';
|
|
||||||
description = ''
|
|
||||||
Additional words to be used for spellchecking. The names of each key will be
|
|
||||||
used as the language code for the spell file. For example
|
|
||||||
|
|
||||||
```nix
|
|
||||||
"en.utf-8" = [ ... ];
|
|
||||||
```
|
|
||||||
|
|
||||||
will result in `en.utf-8.add.spl` being added to Neovim's runtime in the
|
|
||||||
{file}`spell` directory.
|
|
||||||
|
|
||||||
::: {.warning}
|
|
||||||
The attribute keys must be in `"<name>.<encoding>"` format for Neovim to
|
|
||||||
compile your spellfiles without mangling the resulting file names. Please
|
|
||||||
make sure that you enter the correct value, as nvf does not do any kind of
|
|
||||||
internal checking. Please see {command}`:help mkspell` for more details.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
# "en" is the name, and "utf-8" is the encoding. For most use cases, utf-8
|
|
||||||
# will be enough, however, you may change it to any encoding format Neovim
|
|
||||||
# accepts, e.g., utf-16.
|
|
||||||
"en.utf-8" = ["nvf" "word_you_want_to_add"];
|
|
||||||
=> $out/spell/en-utf-8.add.spl
|
|
||||||
```
|
|
||||||
:::
|
|
||||||
|
|
||||||
Note that while adding a new language, you will still need to add the name of
|
|
||||||
the language (e.g. "en") to the {option}`vim.spellcheck.languages` list by name
|
|
||||||
in order to enable spellchecking for the language. By default only `"en"` is in
|
|
||||||
the list.
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -79,69 +38,33 @@ in {
|
||||||
description = ''
|
description = ''
|
||||||
A list of filetypes for which spellchecking will be disabled.
|
A list of filetypes for which spellchecking will be disabled.
|
||||||
|
|
||||||
::: {.tip}
|
You may use `echo &filetype` in Neovim to find out the
|
||||||
You may use {command}`:echo &filetype` in Neovim to find out the
|
|
||||||
filetype for a specific buffer.
|
filetype for a specific buffer.
|
||||||
:::
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
# FIXME: This needs to be revisited. It tries to install
|
||||||
|
# the spellfile to an user directory, but it cannot do so
|
||||||
|
# as we sanitize runtime paths.
|
||||||
programmingWordlist.enable = mkEnableOption ''
|
programmingWordlist.enable = mkEnableOption ''
|
||||||
vim-dirtytalk, a wordlist for programmers containing
|
vim-dirtytalk, a wordlist for programmers containing
|
||||||
common programming terms.
|
common programming terms.
|
||||||
|
|
||||||
::: {.note}
|
Setting this value as `true` has the same effect
|
||||||
Enabling this option will unconditionally set
|
as setting {option}`vim.spellCheck.enable`
|
||||||
{option}`vim.spellcheck.enable` to true as vim-dirtytalk
|
|
||||||
depends on spellchecking having been set up.
|
|
||||||
:::
|
|
||||||
'';
|
'';
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.luaConfigRC.spellcheck = entryAfter ["basic"] ''
|
||||||
additionalRuntimePaths = let
|
|
||||||
compileJoinedSpellfiles =
|
|
||||||
pkgs.runCommandLocal "nvf-compile-spellfiles" {
|
|
||||||
# Use the same version of Neovim as the user's configuration
|
|
||||||
nativeBuildInputs = [config.vim.package];
|
|
||||||
|
|
||||||
spellfilesJoined = pkgs.symlinkJoin {
|
|
||||||
name = "nvf-spellfiles-joined";
|
|
||||||
paths = mapAttrsToList (name: value: pkgs.writeTextDir "spell/${name}.add" (concatLines value)) cfg.extraSpellWords;
|
|
||||||
postBuild = "echo Spellfiles joined";
|
|
||||||
};
|
|
||||||
} ''
|
|
||||||
# Fail on unset variables and non-zero exit codes
|
|
||||||
# this might be the only way to trace when `nvim --headless`
|
|
||||||
# fails in batch mode
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
mkdir -p "$out/spell"
|
|
||||||
for spellfile in "$spellfilesJoined"/spell/*.add; do
|
|
||||||
name="$(basename "$spellfile" ".add")"
|
|
||||||
echo "Compiling spellfile: $spellfile"
|
|
||||||
nvim --headless --clean \
|
|
||||||
--cmd "mkspell $out/spell/$name.add.spl $spellfile" -Es -n
|
|
||||||
done
|
|
||||||
|
|
||||||
'';
|
|
||||||
in
|
|
||||||
mkIf (cfg.extraSpellWords != {}) [
|
|
||||||
# If .outPath is missing, additionalRuntimePaths receives the *function*
|
|
||||||
# instead of a path, causing errors.
|
|
||||||
compileJoinedSpellfiles.outPath
|
|
||||||
];
|
|
||||||
|
|
||||||
luaConfigRC.spellcheck = entryAfter ["basic"] ''
|
|
||||||
vim.opt.spell = true
|
vim.opt.spell = true
|
||||||
vim.opt.spelllang = ${listToLuaTable cfg.languages}
|
vim.opt.spelllang = ${listToLuaTable cfg.languages}
|
||||||
|
|
||||||
-- 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_autocmd({ "FileType" }, {
|
vim.api.nvim_create_autocmd({ "FileType" }, {
|
||||||
group = "nvf_autocmds",
|
|
||||||
pattern = ${listToLuaTable cfg.ignoredFiletypes},
|
pattern = ${listToLuaTable cfg.ignoredFiletypes},
|
||||||
callback = function()
|
callback = function()
|
||||||
vim.opt_local.spell = false
|
vim.opt_local.spell = false
|
||||||
|
@ -149,5 +72,4 @@ in {
|
||||||
})
|
})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,75 +3,51 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf;
|
||||||
inherit (lib.trivial) pipe;
|
|
||||||
inherit (lib.attrsets) mapAttrsToList;
|
|
||||||
inherit (lib.lists) flatten;
|
|
||||||
|
|
||||||
legacyMapModes = {
|
|
||||||
normal = ["n"];
|
|
||||||
insert = ["i"];
|
|
||||||
select = ["s"];
|
|
||||||
visual = ["v"];
|
|
||||||
terminal = ["t"];
|
|
||||||
normalVisualOp = ["n" "v" "o"];
|
|
||||||
visualOnly = ["n" "x"];
|
|
||||||
operator = ["o"];
|
|
||||||
insertCommand = ["i" "c"];
|
|
||||||
lang = ["l"];
|
|
||||||
command = ["c"];
|
|
||||||
};
|
|
||||||
|
|
||||||
cfg = config.vim;
|
cfg = config.vim;
|
||||||
in {
|
in {
|
||||||
config = {
|
config = {
|
||||||
vim.keymaps = mkMerge [
|
vim.maps = {
|
||||||
(
|
normal = mkIf cfg.disableArrows {
|
||||||
mkIf cfg.disableArrows [
|
"<up>" = {
|
||||||
{
|
action = "<nop>";
|
||||||
key = "<up>";
|
|
||||||
mode = ["n" "i"];
|
noremap = false;
|
||||||
|
};
|
||||||
|
"<down>" = {
|
||||||
|
action = "<nop>";
|
||||||
|
|
||||||
|
noremap = false;
|
||||||
|
};
|
||||||
|
"<left>" = {
|
||||||
action = "<nop>";
|
action = "<nop>";
|
||||||
noremap = false;
|
noremap = false;
|
||||||
}
|
};
|
||||||
{
|
"<right>" = {
|
||||||
key = "<down>";
|
|
||||||
mode = ["n" "i"];
|
|
||||||
action = "<nop>";
|
action = "<nop>";
|
||||||
noremap = false;
|
noremap = false;
|
||||||
}
|
};
|
||||||
{
|
};
|
||||||
key = "<left>";
|
|
||||||
mode = ["n" "i"];
|
insert = mkIf cfg.disableArrows {
|
||||||
|
"<up>" = {
|
||||||
action = "<nop>";
|
action = "<nop>";
|
||||||
noremap = false;
|
noremap = false;
|
||||||
}
|
};
|
||||||
{
|
"<down>" = {
|
||||||
key = "<right>";
|
|
||||||
mode = ["n" "i"];
|
|
||||||
action = "<nop>";
|
action = "<nop>";
|
||||||
noremap = false;
|
noremap = false;
|
||||||
}
|
};
|
||||||
]
|
"<left>" = {
|
||||||
)
|
action = "<nop>";
|
||||||
(
|
noremap = false;
|
||||||
pipe cfg.maps
|
};
|
||||||
[
|
"<right>" = {
|
||||||
(mapAttrsToList (
|
action = "<nop>";
|
||||||
oldMode: keybinds:
|
noremap = false;
|
||||||
mapAttrsToList (
|
};
|
||||||
key: bind:
|
};
|
||||||
bind
|
};
|
||||||
// {
|
|
||||||
inherit key;
|
|
||||||
mode = legacyMapModes.${oldMode};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
keybinds
|
|
||||||
))
|
|
||||||
flatten
|
|
||||||
]
|
|
||||||
)
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,97 +1,101 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib.options) mkOption literalMD;
|
inherit (lib.options) mkOption;
|
||||||
inherit (lib.types) either str listOf attrsOf nullOr submodule;
|
inherit (lib.types) bool str attrsOf nullOr submodule;
|
||||||
inherit (lib.nvim.config) mkBool;
|
inherit (lib.nvim.config) mkBool;
|
||||||
|
# Most of the keybindings code is highly inspired by pta2002/nixvim.
|
||||||
|
# Thank you!
|
||||||
mapConfigOptions = {
|
mapConfigOptions = {
|
||||||
|
silent =
|
||||||
|
mkBool false
|
||||||
|
"Whether this mapping should be silent. Equivalent to adding <silent> to a map.";
|
||||||
|
|
||||||
|
nowait =
|
||||||
|
mkBool false
|
||||||
|
"Whether to wait for extra input on ambiguous mappings. Equivalent to adding <nowait> to a map.";
|
||||||
|
|
||||||
|
script =
|
||||||
|
mkBool false
|
||||||
|
"Equivalent to adding <script> to a map.";
|
||||||
|
|
||||||
|
expr =
|
||||||
|
mkBool false
|
||||||
|
"Means that the action is actually an expression. Equivalent to adding <expr> to a map.";
|
||||||
|
|
||||||
|
unique =
|
||||||
|
mkBool false
|
||||||
|
"Whether to fail if the map is already defined. Equivalent to adding <unique> to a map.";
|
||||||
|
|
||||||
|
noremap =
|
||||||
|
mkBool true
|
||||||
|
"Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default.";
|
||||||
|
|
||||||
desc = mkOption {
|
desc = mkOption {
|
||||||
type = nullOr str;
|
type = nullOr str;
|
||||||
default = null;
|
default = null;
|
||||||
description = "A description of this keybind, to be shown in which-key, if you have it enabled.";
|
description = "A description of this keybind, to be shown in which-key, if you have it enabled.";
|
||||||
};
|
};
|
||||||
|
|
||||||
action = mkOption {
|
|
||||||
type = str;
|
|
||||||
description = "The command to execute.";
|
|
||||||
};
|
|
||||||
lua = mkBool false ''
|
|
||||||
If true, `action` is considered to be lua code.
|
|
||||||
Thus, it will not be wrapped in `""`.
|
|
||||||
'';
|
|
||||||
|
|
||||||
silent = mkBool true "Whether this mapping should be silent. Equivalent to adding <silent> to a map.";
|
|
||||||
nowait = mkBool false "Whether to wait for extra input on ambiguous mappings. Equivalent to adding <nowait> to a map.";
|
|
||||||
script = mkBool false "Equivalent to adding <script> to a map.";
|
|
||||||
expr = mkBool false "Means that the action is actually an expression. Equivalent to adding <expr> to a map.";
|
|
||||||
unique = mkBool false "Whether to fail if the map is already defined. Equivalent to adding <unique> to a map.";
|
|
||||||
noremap = mkBool true "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default.";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mapType = submodule {
|
mapOption = submodule {
|
||||||
options =
|
options =
|
||||||
mapConfigOptions
|
mapConfigOptions
|
||||||
// {
|
// {
|
||||||
key = mkOption {
|
action = mkOption {
|
||||||
type = str;
|
type = str;
|
||||||
description = "The key that triggers this keybind.";
|
description = "The action to execute.";
|
||||||
};
|
};
|
||||||
mode = mkOption {
|
|
||||||
type = either str (listOf str);
|
lua = mkOption {
|
||||||
|
type = bool;
|
||||||
description = ''
|
description = ''
|
||||||
The short-name of the mode to set the keymapping for. Passing an empty string is the equivalent of `:map`.
|
If true, `action` is considered to be lua code.
|
||||||
|
Thus, it will not be wrapped in `""`.
|
||||||
See `:help map-modes` for a list of modes.
|
|
||||||
'';
|
'';
|
||||||
example = literalMD ''`["n" "v" "c"]` for normal, visual and command mode'';
|
default = false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
legacyMapOption = mode:
|
mapOptions = mode:
|
||||||
mkOption {
|
mkOption {
|
||||||
description = "Mappings for ${mode} mode";
|
description = "Mappings for ${mode} mode";
|
||||||
type = attrsOf (submodule {
|
type = attrsOf mapOption;
|
||||||
options = mapConfigOptions;
|
|
||||||
});
|
|
||||||
default = {};
|
default = {};
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
options.vim = {
|
options.vim = {
|
||||||
keymaps = mkOption {
|
maps = mkOption {
|
||||||
type = listOf mapType;
|
type = submodule {
|
||||||
description = "Custom keybindings.";
|
options = {
|
||||||
example = ''
|
normal = mapOptions "normal";
|
||||||
vim.keymaps = [
|
insert = mapOptions "insert";
|
||||||
{
|
select = mapOptions "select";
|
||||||
key = "<leader>m";
|
visual = mapOptions "visual and select";
|
||||||
mode = "n";
|
terminal = mapOptions "terminal";
|
||||||
silent = true;
|
normalVisualOp = mapOptions "normal, visual, select and operator-pending (same as plain 'map')";
|
||||||
action = ":make<CR>";
|
|
||||||
}
|
visualOnly = mapOptions "visual only";
|
||||||
{
|
operator = mapOptions "operator-pending";
|
||||||
key = "<leader>l";
|
insertCommand = mapOptions "insert and command-line";
|
||||||
mode = ["n" "x"];
|
lang = mapOptions "insert, command-line and lang-arg";
|
||||||
silent = true;
|
command = mapOptions "command-line";
|
||||||
action = "<cmd>cnext<CR>";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
'';
|
|
||||||
default = {};
|
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
default = {};
|
||||||
|
description = ''
|
||||||
|
Custom keybindings for any mode.
|
||||||
|
|
||||||
|
For plain maps (e.g. just 'map' or 'remap') use `maps.normalVisualOp`.
|
||||||
|
'';
|
||||||
|
|
||||||
|
example = ''
|
||||||
maps = {
|
maps = {
|
||||||
normal = legacyMapOption "normal";
|
normal."<leader>m" = {
|
||||||
insert = legacyMapOption "insert";
|
silent = true;
|
||||||
select = legacyMapOption "select";
|
action = "<cmd>make<CR>";
|
||||||
visual = legacyMapOption "visual and select";
|
}; # Same as nnoremap <leader>m <silent> <cmd>make<CR>
|
||||||
terminal = legacyMapOption "terminal";
|
};
|
||||||
normalVisualOp = legacyMapOption "normal, visual, select and operator-pending (same as plain 'map')";
|
'';
|
||||||
|
|
||||||
visualOnly = legacyMapOption "visual only";
|
|
||||||
operator = legacyMapOption "operator-pending";
|
|
||||||
insertCommand = legacyMapOption "insert and command-line";
|
|
||||||
lang = legacyMapOption "insert, command-line and lang-arg";
|
|
||||||
command = legacyMapOption "command-line";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,11 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (builtins) toJSON;
|
inherit (builtins) toJSON;
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
inherit (lib.lists) optionals;
|
||||||
|
inherit (lib.nvim.binds) mkLuaBinding;
|
||||||
|
|
||||||
cfg = config.vim.assistant.copilot;
|
cfg = config.vim.assistant.copilot;
|
||||||
|
|
||||||
|
@ -20,52 +23,28 @@
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
'';
|
'';
|
||||||
|
|
||||||
mkLuaKeymap = mode: key: action: desc: opts:
|
|
||||||
opts
|
|
||||||
// {
|
|
||||||
inherit mode key action desc;
|
|
||||||
lua = true;
|
|
||||||
};
|
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins =
|
||||||
lazy.plugins = {
|
[
|
||||||
copilot-lua = {
|
"copilot-lua"
|
||||||
package = "copilot-lua";
|
# cfg.copilotNodePackage
|
||||||
setupModule = "copilot";
|
]
|
||||||
inherit (cfg) setupOpts;
|
++ optionals cfg.cmp.enable [
|
||||||
after = mkIf cfg.cmp.enable "require('copilot_cmp').setup()";
|
"copilot-cmp"
|
||||||
|
|
||||||
cmd = ["Copilot" "CopilotAuth" "CopilotDetach" "CopilotPanel" "CopilotStop"];
|
|
||||||
keys = [
|
|
||||||
(mkLuaKeymap ["n"] cfg.mappings.panel.accept (wrapPanelBinding ''require("copilot.panel").accept'' cfg.mappings.panel.accept) "[copilot] Accept suggestion" {})
|
|
||||||
(mkLuaKeymap ["n"] cfg.mappings.panel.jumpNext (wrapPanelBinding "require(\"copilot.panel\").jump_next" cfg.mappings.panel.jumpNext) "[copilot] Accept suggestion" {})
|
|
||||||
(mkLuaKeymap ["n"] cfg.mappings.panel.jumpPrev (wrapPanelBinding "require(\"copilot.panel\").jump_prev" cfg.mappings.panel.jumpPrev) "[copilot] Accept suggestion" {})
|
|
||||||
(mkLuaKeymap ["n"] cfg.mappings.panel.refresh (wrapPanelBinding "require(\"copilot.panel\").refresh" cfg.mappings.panel.refresh) "[copilot] Accept suggestion" {})
|
|
||||||
(mkLuaKeymap ["n"] cfg.mappings.panel.open (wrapPanelBinding ''
|
|
||||||
function() require("copilot.panel").open({ position = "${cfg.setupOpts.panel.layout.position}", ratio = ${toString cfg.setupOpts.panel.layout.ratio}, }) end
|
|
||||||
''
|
|
||||||
cfg.mappings.panel.open) "[copilot] Accept suggestion" {})
|
|
||||||
|
|
||||||
(mkLuaKeymap ["i"] cfg.mappings.suggestion.accept "function() require('copilot.suggestion').accept() end" "[copilot] Accept suggestion" {})
|
|
||||||
(mkLuaKeymap ["i"] cfg.mappings.suggestion.acceptLine "function() require('copilot.suggestion').accept_line() end" "[copilot] Accept suggestion (line)" {})
|
|
||||||
(mkLuaKeymap ["i"] cfg.mappings.suggestion.acceptWord "function() require('copilot.suggestion').accept_word() end" "[copilot] Accept suggestion (word)" {})
|
|
||||||
(mkLuaKeymap ["i"] cfg.mappings.suggestion.dismiss "function() require('copilot.suggestion').dismiss() end" "[copilot] dismiss suggestion" {})
|
|
||||||
(mkLuaKeymap ["i"] cfg.mappings.suggestion.next "function() require('copilot.suggestion').next() end" "[copilot] next suggestion" {})
|
|
||||||
(mkLuaKeymap ["i"] cfg.mappings.suggestion.prev "function() require('copilot.suggestion').prev() end" "[copilot] previous suggestion" {})
|
|
||||||
];
|
];
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
autocomplete.nvim-cmp = {
|
vim.pluginRC.copilot = entryAnywhere ''
|
||||||
sources = {copilot = "[Copilot]";};
|
require("copilot").setup(${toLuaObject cfg.setupOpts})
|
||||||
sourcePlugins = ["copilot-cmp"];
|
|
||||||
};
|
${lib.optionalString cfg.cmp.enable ''
|
||||||
|
require("copilot_cmp").setup()
|
||||||
|
''}
|
||||||
|
'';
|
||||||
|
|
||||||
# Disable plugin handled keymaps.
|
# Disable plugin handled keymaps.
|
||||||
# Setting it here so that it doesn't show up in user docs
|
# Setting it here so that it doesn't show up in user docs
|
||||||
assistant.copilot.setupOpts = {
|
vim.assistant.copilot.setupOpts = {
|
||||||
panel.keymap = {
|
panel.keymap = {
|
||||||
jump_prev = lib.mkDefault false;
|
jump_prev = lib.mkDefault false;
|
||||||
jump_next = lib.mkDefault false;
|
jump_next = lib.mkDefault false;
|
||||||
|
@ -82,6 +61,25 @@ in {
|
||||||
dismiss = lib.mkDefault false;
|
dismiss = lib.mkDefault false;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
vim.maps.normal = mkMerge [
|
||||||
|
(mkLuaBinding cfg.mappings.panel.jumpPrev (wrapPanelBinding "require(\"copilot.panel\").jump_prev" cfg.mappings.panel.jumpPrev) "[copilot] Accept suggestion")
|
||||||
|
(mkLuaBinding cfg.mappings.panel.jumpNext (wrapPanelBinding "require(\"copilot.panel\").jump_next" cfg.mappings.panel.jumpNext) "[copilot] Accept suggestion")
|
||||||
|
(mkLuaBinding cfg.mappings.panel.accept (wrapPanelBinding ''require("copilot.panel").accept'' cfg.mappings.panel.accept) "[copilot] Accept suggestion")
|
||||||
|
(mkLuaBinding cfg.mappings.panel.refresh (wrapPanelBinding "require(\"copilot.panel\").refresh" cfg.mappings.panel.refresh) "[copilot] Accept suggestion")
|
||||||
|
(mkLuaBinding cfg.mappings.panel.open (wrapPanelBinding ''
|
||||||
|
function() require("copilot.panel").open({ position = "${cfg.setupOpts.panel.layout.position}", ratio = ${toString cfg.setupOpts.panel.layout.ratio}, }) end
|
||||||
|
''
|
||||||
|
cfg.mappings.panel.open) "[copilot] Accept suggestion")
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.maps.insert = mkMerge [
|
||||||
|
(mkLuaBinding cfg.mappings.suggestion.accept "require(\"copilot.suggestion\").accept" "[copilot] Accept suggestion")
|
||||||
|
(mkLuaBinding cfg.mappings.suggestion.acceptLine "require(\"copilot.suggestion\").accept_line" "[copilot] Accept suggestion (line)")
|
||||||
|
(mkLuaBinding cfg.mappings.suggestion.acceptWord "require(\"copilot.suggestion\").accept_word" "[copilot] Accept suggestion (word)")
|
||||||
|
(mkLuaBinding cfg.mappings.suggestion.next "require(\"copilot.suggestion\").next" "[copilot] next suggestion")
|
||||||
|
(mkLuaBinding cfg.mappings.suggestion.prev "require(\"copilot.suggestion\").prev" "[copilot] previous suggestion")
|
||||||
|
(mkLuaBinding cfg.mappings.suggestion.dismiss "require(\"copilot.suggestion\").dismiss" "[copilot] dismiss suggestion")
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,17 +4,16 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.trivial) boolToString;
|
||||||
inherit (lib.nvim.dag) entryAnywhere;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
|
|
||||||
cfg = config.vim.autopairs.nvim-autopairs;
|
cfg = config.vim.autopairs;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins = ["nvim-autopairs"];
|
||||||
startPlugins = ["nvim-autopairs"];
|
|
||||||
pluginRC.autopairs = entryAnywhere ''
|
vim.pluginRC.autopairs = entryAnywhere ''
|
||||||
require('nvim-autopairs').setup(${toLuaObject cfg.setupOpts})
|
require("nvim-autopairs").setup({ map_cr = ${boolToString (!config.vim.autocomplete.enable)} })
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,21 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib) mkRemovedOptionModule;
|
inherit (lib) mkRemovedOptionModule;
|
||||||
inherit (lib.options) mkEnableOption;
|
inherit (lib.options) mkEnableOption mkOption;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
inherit (lib.types) enum;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
(mkRemovedOptionModule ["vim" "autopairs" "nvim-compe"] "nvim-compe is deprecated and no longer suported.")
|
(mkRemovedOptionModule ["vim" "autopairs" "nvim-compe"] "nvim-compe is deprecated and no longer suported.")
|
||||||
];
|
];
|
||||||
|
|
||||||
options.vim.autopairs.nvim-autopairs = {
|
options.vim = {
|
||||||
enable = mkEnableOption "autopairs";
|
autopairs = {
|
||||||
setupOpts = mkPluginSetupOption "nvim-autopairs" {};
|
enable = mkEnableOption "autopairs" // {default = false;};
|
||||||
|
|
||||||
|
type = mkOption {
|
||||||
|
type = enum ["nvim-autopairs"];
|
||||||
|
default = "nvim-autopairs";
|
||||||
|
description = "Set the autopairs type. Options: nvim-autopairs [nvim-autopairs]";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib.options) mkEnableOption;
|
inherit (lib.options) mkEnableOption;
|
||||||
inherit (lib.nvim.binds) mkMappingOption;
|
inherit (lib.nvim.binds) mkMappingOption;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
||||||
in {
|
in {
|
||||||
options.vim.comments.comment-nvim = {
|
options.vim.comments.comment-nvim = {
|
||||||
enable = mkEnableOption "smart and powerful comment plugin for neovim comment-nvim";
|
enable = mkEnableOption "smart and powerful comment plugin for neovim comment-nvim";
|
||||||
|
@ -16,12 +15,5 @@ in {
|
||||||
toggleSelectedLine = mkMappingOption "Toggle selected comment" "gc";
|
toggleSelectedLine = mkMappingOption "Toggle selected comment" "gc";
|
||||||
toggleSelectedBlock = mkMappingOption "Toggle selected block" "gb";
|
toggleSelectedBlock = mkMappingOption "Toggle selected block" "gb";
|
||||||
};
|
};
|
||||||
|
|
||||||
setupOpts = mkPluginSetupOption "Comment-nvim" {
|
|
||||||
mappings = {
|
|
||||||
basic = mkEnableOption "basic mappings";
|
|
||||||
extra = mkEnableOption "extra mappings";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,38 +3,48 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.binds) mkLznExprBinding mkLznBinding;
|
inherit (lib.nvim.binds) mkExprBinding mkBinding;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.comments.comment-nvim;
|
cfg = config.vim.comments.comment-nvim;
|
||||||
self = import ./comment-nvim.nix {inherit lib;};
|
self = import ./comment-nvim.nix {inherit lib;};
|
||||||
inherit (self.options.vim.comments.comment-nvim) mappings;
|
inherit (self.options.vim.comments.comment-nvim) mappings;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.lazy.plugins.comment-nvim = {
|
vim.startPlugins = [
|
||||||
package = "comment-nvim";
|
"comment-nvim"
|
||||||
setupModule = "Comment";
|
];
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
keys = [
|
vim.maps.normal = mkMerge [
|
||||||
(mkLznBinding ["n"] cfg.mappings.toggleOpLeaderLine "<Plug>(comment_toggle_linewise)" mappings.toggleOpLeaderLine.description)
|
(mkBinding cfg.mappings.toggleOpLeaderLine "<Plug>(comment_toggle_linewise)" mappings.toggleOpLeaderLine.description)
|
||||||
(mkLznBinding ["n"] cfg.mappings.toggleOpLeaderBlock "<Plug>(comment_toggle_blockwise)" mappings.toggleOpLeaderBlock.description)
|
(mkBinding cfg.mappings.toggleOpLeaderBlock "<Plug>(comment_toggle_blockwise)" mappings.toggleOpLeaderBlock.description)
|
||||||
(mkLznExprBinding ["n"] cfg.mappings.toggleCurrentLine ''
|
|
||||||
|
(mkExprBinding cfg.mappings.toggleCurrentLine ''
|
||||||
function()
|
function()
|
||||||
return vim.api.nvim_get_vvar('count') == 0 and '<Plug>(comment_toggle_linewise_current)'
|
return vim.api.nvim_get_vvar('count') == 0 and '<Plug>(comment_toggle_linewise_current)'
|
||||||
or '<Plug>(comment_toggle_linewise_count)'
|
or '<Plug>(comment_toggle_linewise_count)'
|
||||||
end
|
end
|
||||||
''
|
''
|
||||||
mappings.toggleCurrentLine.description)
|
mappings.toggleCurrentLine.description)
|
||||||
(mkLznExprBinding ["n"] cfg.mappings.toggleCurrentBlock ''
|
(mkExprBinding cfg.mappings.toggleCurrentBlock ''
|
||||||
function()
|
function()
|
||||||
return vim.api.nvim_get_vvar('count') == 0 and '<Plug>(comment_toggle_blockwise_current)'
|
return vim.api.nvim_get_vvar('count') == 0 and '<Plug>(comment_toggle_blockwise_current)'
|
||||||
or '<Plug>(comment_toggle_blockwise_count)'
|
or '<Plug>(comment_toggle_blockwise_count)'
|
||||||
end
|
end
|
||||||
''
|
''
|
||||||
mappings.toggleCurrentBlock.description)
|
mappings.toggleCurrentBlock.description)
|
||||||
(mkLznBinding ["x"] cfg.mappings.toggleSelectedLine "<Plug>(comment_toggle_linewise_visual)" mappings.toggleSelectedLine.description)
|
|
||||||
(mkLznBinding ["x"] cfg.mappings.toggleSelectedBlock "<Plug>(comment_toggle_blockwise_visual)" mappings.toggleSelectedBlock.description)
|
|
||||||
];
|
];
|
||||||
};
|
|
||||||
|
vim.maps.visualOnly = mkMerge [
|
||||||
|
(mkBinding cfg.mappings.toggleSelectedLine "<Plug>(comment_toggle_linewise_visual)" mappings.toggleSelectedLine.description)
|
||||||
|
(mkBinding cfg.mappings.toggleSelectedBlock "<Plug>(comment_toggle_blockwise_visual)" mappings.toggleSelectedBlock.description)
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.pluginRC.comment-nvim = entryAnywhere ''
|
||||||
|
require('Comment').setup({
|
||||||
|
mappings = { basic = false, extra = false, },
|
||||||
|
})
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,137 +3,246 @@
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
|
inherit (builtins) toJSON;
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.attrsets) attrNames mapAttrsToList;
|
||||||
inherit (lib.generators) mkLuaInline;
|
inherit (lib.strings) concatMapStringsSep concatStringsSep optionalString;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetLuaBinding;
|
||||||
inherit (lib.nvim.attrsets) mapListToAttrs;
|
inherit (lib.nvim.dag) entryAnywhere entryAfter;
|
||||||
inherit (builtins) attrNames typeOf tryEval concatStringsSep;
|
|
||||||
|
|
||||||
cfg = config.vim.autocomplete.nvim-cmp;
|
cfg = config.vim.autocomplete;
|
||||||
luasnipEnable = config.vim.snippets.luasnip.enable;
|
lspkindEnabled = config.vim.lsp.enable && config.vim.lsp.lspkind.enable;
|
||||||
getPluginName = plugin:
|
|
||||||
if typeOf plugin == "string"
|
self = import ./nvim-cmp.nix {inherit lib;};
|
||||||
then plugin
|
mappingDefinitions = self.options.vim.autocomplete.mappings;
|
||||||
else if (plugin ? pname && (tryEval plugin.pname).success)
|
|
||||||
then plugin.pname
|
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||||
else plugin.name;
|
|
||||||
inherit (cfg) mappings;
|
builtSources =
|
||||||
|
concatMapStringsSep
|
||||||
|
"\n"
|
||||||
|
(n: "{ name = '${n}'},")
|
||||||
|
(attrNames cfg.sources);
|
||||||
|
|
||||||
|
builtMaps =
|
||||||
|
concatStringsSep
|
||||||
|
"\n"
|
||||||
|
(mapAttrsToList
|
||||||
|
(n: v:
|
||||||
|
if v == null
|
||||||
|
then ""
|
||||||
|
else "${n} = '${v}',")
|
||||||
|
cfg.sources);
|
||||||
|
|
||||||
|
dagPlacement =
|
||||||
|
if lspkindEnabled
|
||||||
|
then entryAfter ["lspkind"]
|
||||||
|
else entryAnywhere;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins = [
|
||||||
startPlugins = ["rtp-nvim"];
|
"nvim-cmp"
|
||||||
lazy.plugins = mkMerge [
|
"cmp-buffer"
|
||||||
(mapListToAttrs (package: {
|
"cmp-vsnip"
|
||||||
name = getPluginName package;
|
"cmp-path"
|
||||||
value = {
|
"vim-vsnip"
|
||||||
inherit package;
|
|
||||||
lazy = true;
|
|
||||||
after = ''
|
|
||||||
local path = vim.fn.globpath(vim.o.packpath, 'pack/*/opt/${getPluginName package}')
|
|
||||||
require("rtp_nvim").source_after_plugin_dir(path)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
})
|
|
||||||
cfg.sourcePlugins)
|
|
||||||
{
|
|
||||||
nvim-cmp = {
|
|
||||||
package = "nvim-cmp";
|
|
||||||
after = ''
|
|
||||||
${optionalString luasnipEnable "local luasnip = require('luasnip')"}
|
|
||||||
local cmp = require("cmp")
|
|
||||||
|
|
||||||
local kinds = require("cmp.types").lsp.CompletionItemKind
|
|
||||||
local deprio = function(kind)
|
|
||||||
return function(e1, e2)
|
|
||||||
if e1:get_kind() == kind then
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
if e2:get_kind() == kind then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
cmp.setup(${toLuaObject cfg.setupOpts})
|
|
||||||
|
|
||||||
${optionalString config.vim.lazy.enable
|
|
||||||
(concatStringsSep "\n" (map
|
|
||||||
(package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})")
|
|
||||||
cfg.sourcePlugins))}
|
|
||||||
'';
|
|
||||||
|
|
||||||
event = ["InsertEnter" "CmdlineEnter"];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
|
|
||||||
autocomplete.nvim-cmp = {
|
vim.autocomplete.sources = {
|
||||||
sources = {
|
"nvim-cmp" = null;
|
||||||
nvim-cmp = null;
|
"vsnip" = "[VSnip]";
|
||||||
buffer = "[Buffer]";
|
"buffer" = "[Buffer]";
|
||||||
path = "[Path]";
|
"crates" = "[Crates]";
|
||||||
|
"path" = "[Path]";
|
||||||
|
"copilot" = "[Copilot]";
|
||||||
};
|
};
|
||||||
|
|
||||||
sourcePlugins = ["cmp-buffer" "cmp-path"];
|
vim.maps.insert = mkMerge [
|
||||||
|
(mkSetLuaBinding mappings.complete ''
|
||||||
setupOpts = {
|
require('cmp').complete
|
||||||
sources = map (s: {name = s;}) (attrNames cfg.sources);
|
'')
|
||||||
|
(let
|
||||||
# TODO: try to get nvim-cmp to follow global border style
|
defaultKeys =
|
||||||
window = mkIf config.vim.ui.borders.enable {
|
if config.vim.autopairs.enable
|
||||||
completion = mkLuaInline "cmp.config.window.bordered()";
|
then "require('nvim-autopairs').autopairs_cr()"
|
||||||
documentation = mkLuaInline "cmp.config.window.bordered()";
|
else "vim.api.nvim_replace_termcodes(${toJSON mappings.confirm.value}, true, false, true)";
|
||||||
};
|
in
|
||||||
|
mkSetLuaBinding mappings.confirm ''
|
||||||
formatting.format = cfg.format;
|
function()
|
||||||
|
if not require('cmp').confirm({ select = true }) then
|
||||||
# `cmp` and `luasnip` are defined above, in the `nvim-cmp` section
|
vim.fn.feedkeys(${defaultKeys}, 'n')
|
||||||
mapping = {
|
end
|
||||||
${mappings.complete} = mkLuaInline "cmp.mapping.complete()";
|
end
|
||||||
${mappings.close} = mkLuaInline "cmp.mapping.abort()";
|
'')
|
||||||
${mappings.scrollDocsUp} = mkLuaInline "cmp.mapping.scroll_docs(-4)";
|
(mkSetLuaBinding mappings.next ''
|
||||||
${mappings.scrollDocsDown} = mkLuaInline "cmp.mapping.scroll_docs(4)";
|
function()
|
||||||
${mappings.confirm} = mkLuaInline "cmp.mapping.confirm({ select = true })";
|
|
||||||
|
|
||||||
${mappings.next} = mkLuaInline ''
|
|
||||||
cmp.mapping(function(fallback)
|
|
||||||
local has_words_before = function()
|
local has_words_before = function()
|
||||||
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local cmp = require('cmp')
|
||||||
|
|
||||||
|
local feedkey = function(key, mode)
|
||||||
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
|
||||||
|
end
|
||||||
|
|
||||||
if cmp.visible() then
|
if cmp.visible() then
|
||||||
cmp.select_next_item()
|
cmp.select_next_item()
|
||||||
${optionalString luasnipEnable ''
|
elseif vim.fn['vsnip#available'](1) == 1 then
|
||||||
elseif luasnip.locally_jumpable(1) then
|
feedkey("<Plug>(vsnip-expand-or-jump)", "")
|
||||||
luasnip.jump(1)
|
|
||||||
''}
|
|
||||||
elseif has_words_before() then
|
elseif has_words_before() then
|
||||||
cmp.complete()
|
cmp.complete()
|
||||||
else
|
else
|
||||||
fallback()
|
local termcode = vim.api.nvim_replace_termcodes(${toJSON mappings.next.value}, true, false, true)
|
||||||
end
|
|
||||||
end)
|
vim.fn.feedkeys(termcode, 'n')
|
||||||
'';
|
end
|
||||||
|
end
|
||||||
|
'')
|
||||||
|
(mkSetLuaBinding mappings.previous ''
|
||||||
|
function()
|
||||||
|
local cmp = require('cmp')
|
||||||
|
|
||||||
|
local feedkey = function(key, mode)
|
||||||
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
|
||||||
|
end
|
||||||
|
|
||||||
${mappings.previous} = mkLuaInline ''
|
|
||||||
cmp.mapping(function(fallback)
|
|
||||||
if cmp.visible() then
|
if cmp.visible() then
|
||||||
cmp.select_prev_item()
|
cmp.select_prev_item()
|
||||||
${optionalString luasnipEnable ''
|
elseif vim.fn['vsnip#available'](-1) == 1 then
|
||||||
elseif luasnip.locally_jumpable(-1) then
|
feedkeys("<Plug>(vsnip-jump-prev)", "")
|
||||||
luasnip.jump(-1)
|
|
||||||
''}
|
|
||||||
else
|
|
||||||
fallback()
|
|
||||||
end
|
end
|
||||||
end)
|
end
|
||||||
'';
|
'')
|
||||||
};
|
(mkSetLuaBinding mappings.close ''
|
||||||
};
|
require('cmp').mapping.abort()
|
||||||
};
|
'')
|
||||||
};
|
(mkSetLuaBinding mappings.scrollDocsUp ''
|
||||||
|
require('cmp').mapping.scroll_docs(-4)
|
||||||
|
'')
|
||||||
|
(mkSetLuaBinding mappings.scrollDocsDown ''
|
||||||
|
require('cmp').mapping.scroll_docs(4)
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.maps.command = mkMerge [
|
||||||
|
(mkSetLuaBinding mappings.complete ''
|
||||||
|
require('cmp').complete
|
||||||
|
'')
|
||||||
|
(mkSetLuaBinding mappings.close ''
|
||||||
|
require('cmp').mapping.close()
|
||||||
|
'')
|
||||||
|
(mkSetLuaBinding mappings.scrollDocsUp ''
|
||||||
|
require('cmp').mapping.scroll_docs(-4)
|
||||||
|
'')
|
||||||
|
(mkSetLuaBinding mappings.scrollDocsDown ''
|
||||||
|
require('cmp').mapping.scroll_docs(4)
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.maps.select = mkMerge [
|
||||||
|
(mkSetLuaBinding mappings.next ''
|
||||||
|
function()
|
||||||
|
local cmp = require('cmp')
|
||||||
|
local has_words_before = function()
|
||||||
|
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
|
||||||
|
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
|
||||||
|
end
|
||||||
|
|
||||||
|
local feedkey = function(key, mode)
|
||||||
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_next_item()
|
||||||
|
elseif vim.fn['vsnip#available'](1) == 1 then
|
||||||
|
feedkey("<Plug>(vsnip-expand-or-jump)", "")
|
||||||
|
elseif has_words_before() then
|
||||||
|
cmp.complete()
|
||||||
|
else
|
||||||
|
local termcode = vim.api.nvim_replace_termcodes(${toJSON mappings.next.value}, true, false, true)
|
||||||
|
|
||||||
|
vim.fn.feedkeys(termcode, 'n')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
'')
|
||||||
|
(mkSetLuaBinding mappings.previous ''
|
||||||
|
function()
|
||||||
|
local cmp = require('cmp')
|
||||||
|
|
||||||
|
local feedkey = function(key, mode)
|
||||||
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true)
|
||||||
|
end
|
||||||
|
|
||||||
|
if cmp.visible() then
|
||||||
|
cmp.select_prev_item()
|
||||||
|
elseif vim.fn['vsnip#available'](-1) == 1 then
|
||||||
|
feedkeys("<Plug>(vsnip-jump-prev)", "")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
|
# TODO: alternative snippet engines to vsnip
|
||||||
|
# https://github.com/hrsh7th/nvim-cmp/blob/main/doc/cmp.txt#L82
|
||||||
|
vim.pluginRC.completion = mkIf (cfg.type == "nvim-cmp") (dagPlacement ''
|
||||||
|
local nvim_cmp_menu_map = function(entry, vim_item)
|
||||||
|
-- name for each source
|
||||||
|
vim_item.menu = ({
|
||||||
|
${builtMaps}
|
||||||
|
})[entry.source.name]
|
||||||
|
return vim_item
|
||||||
|
end
|
||||||
|
|
||||||
|
${optionalString lspkindEnabled ''
|
||||||
|
lspkind_opts.before = ${cfg.formatting.format}
|
||||||
|
''}
|
||||||
|
|
||||||
|
local cmp = require'cmp'
|
||||||
|
cmp.setup({
|
||||||
|
${optionalString config.vim.ui.borders.enable ''
|
||||||
|
-- explicitly enabled by setting ui.borders.enable = true
|
||||||
|
-- TODO: try to get nvim-cmp to follow global border style
|
||||||
|
window = {
|
||||||
|
completion = cmp.config.window.bordered(),
|
||||||
|
documentation = cmp.config.window.bordered(),
|
||||||
|
},
|
||||||
|
''}
|
||||||
|
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
vim.fn["vsnip#anonymous"](args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
sources = {
|
||||||
|
${builtSources}
|
||||||
|
},
|
||||||
|
|
||||||
|
completion = {
|
||||||
|
completeopt = 'menu,menuone,noinsert',
|
||||||
|
${optionalString (!cfg.alwaysComplete) "autocomplete = false"}
|
||||||
|
},
|
||||||
|
|
||||||
|
formatting = {
|
||||||
|
format =
|
||||||
|
${
|
||||||
|
if lspkindEnabled
|
||||||
|
then "lspkind.cmp_format(lspkind_opts)"
|
||||||
|
else cfg.formatting.format
|
||||||
|
},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
${optionalString (config.vim.autopairs.enable && config.vim.autopairs.type == "nvim-autopairs") ''
|
||||||
|
local cmp_autopairs = require('nvim-autopairs.completion.cmp')
|
||||||
|
cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done({ map_char = { text = ""} }))
|
||||||
|
''}
|
||||||
|
'');
|
||||||
|
|
||||||
|
vim.snippets.vsnip.enable =
|
||||||
|
if (cfg.type == "nvim-cmp")
|
||||||
|
then true
|
||||||
|
else config.vim.snippets.vsnip.enable;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
_: {
|
||||||
imports = [
|
imports = [
|
||||||
./config.nix
|
./config.nix
|
||||||
./nvim-cmp.nix
|
./nvim-cmp.nix
|
||||||
|
|
|
@ -1,64 +1,16 @@
|
||||||
{
|
{lib, ...}: let
|
||||||
lib,
|
inherit (lib.options) mkEnableOption mkOption literalMD;
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.options) mkEnableOption mkOption literalExpression literalMD;
|
|
||||||
inherit (lib.types) str attrsOf nullOr either listOf;
|
|
||||||
inherit (lib.generators) mkLuaInline;
|
|
||||||
inherit (lib.nvim.binds) mkMappingOption;
|
inherit (lib.nvim.binds) mkMappingOption;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption luaInline mergelessListOf pluginType;
|
inherit (lib.types) enum attrsOf nullOr str bool;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
inherit (builtins) isString;
|
|
||||||
|
|
||||||
cfg = config.vim.autocomplete.nvim-cmp;
|
|
||||||
in {
|
in {
|
||||||
options.vim.autocomplete.nvim-cmp = {
|
options.vim = {
|
||||||
enable = mkEnableOption "nvim-cmp";
|
autocomplete = {
|
||||||
setupOpts = mkPluginSetupOption "the autocomplete plugin" {
|
enable = mkEnableOption "autocomplete" // {default = false;};
|
||||||
completion.completeopt = mkOption {
|
|
||||||
type = str;
|
|
||||||
default = "menu,menuone,noinsert";
|
|
||||||
description = ''
|
|
||||||
A comma-separated list of options for completion.
|
|
||||||
|
|
||||||
See `:help completeopt` for the complete list.
|
alwaysComplete = mkOption {
|
||||||
'';
|
type = bool;
|
||||||
};
|
description = "Automatically show completion.";
|
||||||
|
default = true;
|
||||||
sorting.comparators = mkOption {
|
|
||||||
type = mergelessListOf (either str luaInline);
|
|
||||||
default = [
|
|
||||||
(mkLuaInline "deprio(kinds.Text)")
|
|
||||||
(mkLuaInline "deprio(kinds.Snippet)")
|
|
||||||
"offset"
|
|
||||||
"exact"
|
|
||||||
"score"
|
|
||||||
"kind"
|
|
||||||
"length"
|
|
||||||
"sort_text"
|
|
||||||
];
|
|
||||||
description = ''
|
|
||||||
The comparator functions used for sorting completions.
|
|
||||||
|
|
||||||
You can either pass a valid inline lua function
|
|
||||||
(see `:help cmp-config.sorting.comparators`),
|
|
||||||
or a string, in which case the builtin comparator with that name will
|
|
||||||
be used.
|
|
||||||
|
|
||||||
A `deprio` function and a `kinds`
|
|
||||||
(`require("cmp.types").lsp.CompletionItemKind`) variable is provided
|
|
||||||
above `setupOpts`. By passing a type to the funcion, the returned
|
|
||||||
function will be a comparator that always ranks the specified kind the
|
|
||||||
lowest.
|
|
||||||
'';
|
|
||||||
apply = map (
|
|
||||||
c:
|
|
||||||
if isString c
|
|
||||||
then mkLuaInline ("cmp.config.compare." + c)
|
|
||||||
else c
|
|
||||||
);
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
mappings = {
|
mappings = {
|
||||||
|
@ -71,47 +23,50 @@ in {
|
||||||
scrollDocsDown = mkMappingOption "Scroll docs down [nvim-cmp]" "<C-f>";
|
scrollDocsDown = mkMappingOption "Scroll docs down [nvim-cmp]" "<C-f>";
|
||||||
};
|
};
|
||||||
|
|
||||||
format = mkOption {
|
type = mkOption {
|
||||||
type = luaInline;
|
type = enum ["nvim-cmp"];
|
||||||
default = mkLuaInline ''
|
default = "nvim-cmp";
|
||||||
function(entry, vim_item)
|
description = "Set the autocomplete plugin. Options: [nvim-cmp]";
|
||||||
vim_item.menu = (${toLuaObject cfg.sources})[entry.source.name]
|
};
|
||||||
return vim_item
|
|
||||||
end
|
sources = mkOption {
|
||||||
|
description = ''
|
||||||
|
Attribute set of source names for nvim-cmp.
|
||||||
|
|
||||||
|
If an attribute set is provided, then the menu value of
|
||||||
|
`vim_item` in the format will be set to the value (if
|
||||||
|
utilizing the `nvim_cmp_menu_map` function).
|
||||||
|
|
||||||
|
Note: only use a single attribute name per attribute set
|
||||||
'';
|
'';
|
||||||
defaultText = literalMD ''
|
type = attrsOf (nullOr str);
|
||||||
|
default = {};
|
||||||
|
example = ''
|
||||||
|
{nvim-cmp = null; buffer = "[Buffer]";}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
formatting = {
|
||||||
|
format = mkOption {
|
||||||
|
description = ''
|
||||||
|
The function used to customize the appearance of the completion menu.
|
||||||
|
|
||||||
|
If [](#opt-vim.lsp.lspkind.enable) is true, then the function
|
||||||
|
will be called before modifications from lspkind.
|
||||||
|
|
||||||
|
Default is to call the menu mapping function.
|
||||||
|
'';
|
||||||
|
type = str;
|
||||||
|
default = "nvim_cmp_menu_map";
|
||||||
|
example = literalMD ''
|
||||||
```lua
|
```lua
|
||||||
function(entry, vim_item)
|
function(entry, vim_item)
|
||||||
vim_item.menu = (''${toLuaObject config.vim.autocomplete.nvim-cmp.sources})[entry.source.name]
|
|
||||||
return vim_item
|
return vim_item
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
'';
|
'';
|
||||||
description = ''
|
|
||||||
The function used to customize the completion menu entires. This is
|
|
||||||
outside of `setupOpts` to allow for an easier integration with
|
|
||||||
lspkind.nvim.
|
|
||||||
|
|
||||||
See `:help cmp-config.formatting.format`.
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sources = mkOption {
|
|
||||||
type = attrsOf (nullOr str);
|
|
||||||
default = {};
|
|
||||||
description = "The list of sources used by nvim-cmp";
|
|
||||||
example = literalExpression ''
|
|
||||||
{
|
|
||||||
nvim-cmp = null;
|
|
||||||
buffer = "[Buffer]";
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
sourcePlugins = mkOption {
|
|
||||||
type = listOf pluginType;
|
|
||||||
default = [];
|
|
||||||
description = "List of source plugins used by nvim-cmp.";
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.attrsets) mapAttrs;
|
inherit (lib.attrsets) mapAttrs;
|
||||||
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetLuaBinding mkSetLuaLznBinding;
|
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetLuaBinding;
|
||||||
inherit (lib.nvim.dag) entryAnywhere entryAfter;
|
inherit (lib.nvim.dag) entryAnywhere entryAfter;
|
||||||
|
|
||||||
cfg = config.vim.debugger.nvim-dap;
|
cfg = config.vim.debugger.nvim-dap;
|
||||||
|
@ -16,10 +16,9 @@
|
||||||
in {
|
in {
|
||||||
config = mkMerge [
|
config = mkMerge [
|
||||||
(mkIf cfg.enable {
|
(mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins = ["nvim-dap"];
|
||||||
startPlugins = ["nvim-dap"];
|
|
||||||
|
|
||||||
pluginRC =
|
vim.pluginRC =
|
||||||
{
|
{
|
||||||
# TODO customizable keymaps
|
# TODO customizable keymaps
|
||||||
nvim-dap = entryAnywhere ''
|
nvim-dap = entryAnywhere ''
|
||||||
|
@ -29,7 +28,7 @@ in {
|
||||||
}
|
}
|
||||||
// mapAttrs (_: v: (entryAfter ["nvim-dap"] v)) cfg.sources;
|
// mapAttrs (_: v: (entryAfter ["nvim-dap"] v)) cfg.sources;
|
||||||
|
|
||||||
maps.normal = mkMerge [
|
vim.maps.normal = mkMerge [
|
||||||
(mkSetLuaBinding mappings.continue "require('dap').continue")
|
(mkSetLuaBinding mappings.continue "require('dap').continue")
|
||||||
(mkSetLuaBinding mappings.restart "require('dap').restart")
|
(mkSetLuaBinding mappings.restart "require('dap').restart")
|
||||||
(mkSetLuaBinding mappings.terminate "require('dap').terminate")
|
(mkSetLuaBinding mappings.terminate "require('dap').terminate")
|
||||||
|
@ -48,36 +47,26 @@ in {
|
||||||
(mkSetLuaBinding mappings.goUp "require('dap').up")
|
(mkSetLuaBinding mappings.goUp "require('dap').up")
|
||||||
(mkSetLuaBinding mappings.goDown "require('dap').down")
|
(mkSetLuaBinding mappings.goDown "require('dap').down")
|
||||||
];
|
];
|
||||||
};
|
|
||||||
})
|
})
|
||||||
(mkIf (cfg.enable && cfg.ui.enable) {
|
(mkIf (cfg.enable && cfg.ui.enable) {
|
||||||
vim = {
|
vim.startPlugins = ["nvim-dap-ui" "nvim-nio"];
|
||||||
startPlugins = ["nvim-nio"];
|
|
||||||
|
|
||||||
lazy.plugins.nvim-dap-ui = {
|
vim.pluginRC.nvim-dap-ui = entryAfter ["nvim-dap"] (''
|
||||||
package = "nvim-dap-ui";
|
local dapui = require("dapui")
|
||||||
setupModule = "dapui";
|
dapui.setup()
|
||||||
inherit (cfg.ui) setupOpts;
|
''
|
||||||
|
+ optionalString cfg.ui.autoStart ''
|
||||||
keys = [
|
|
||||||
(mkSetLuaLznBinding mappings.toggleDapUI "function() require('dapui').toggle() end")
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
pluginRC.nvim-dap-ui = entryAfter ["nvim-dap"] (
|
|
||||||
optionalString cfg.ui.autoStart ''
|
|
||||||
dap.listeners.after.event_initialized["dapui_config"] = function()
|
dap.listeners.after.event_initialized["dapui_config"] = function()
|
||||||
require("dapui").open()
|
dapui.open()
|
||||||
end
|
end
|
||||||
dap.listeners.before.event_terminated["dapui_config"] = function()
|
dap.listeners.before.event_terminated["dapui_config"] = function()
|
||||||
require("dapui").close()
|
dapui.close()
|
||||||
end
|
end
|
||||||
dap.listeners.before.event_exited["dapui_config"] = function()
|
dap.listeners.before.event_exited["dapui_config"] = function()
|
||||||
require("dapui").close()
|
dapui.close()
|
||||||
end
|
end
|
||||||
''
|
'');
|
||||||
);
|
vim.maps.normal = mkSetLuaBinding mappings.toggleDapUI "require('dapui').toggle";
|
||||||
};
|
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,16 +2,12 @@
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
inherit (lib.options) mkEnableOption mkOption;
|
||||||
inherit (lib.types) bool attrsOf str;
|
inherit (lib.types) bool attrsOf str;
|
||||||
inherit (lib.nvim.binds) mkMappingOption;
|
inherit (lib.nvim.binds) mkMappingOption;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
||||||
in {
|
in {
|
||||||
options.vim.debugger.nvim-dap = {
|
options.vim.debugger.nvim-dap = {
|
||||||
enable = mkEnableOption "debugging via nvim-dap";
|
enable = mkEnableOption "debugging via nvim-dap";
|
||||||
|
|
||||||
ui = {
|
ui = {
|
||||||
enable = mkEnableOption "UI extension for nvim-dap";
|
enable = mkEnableOption "UI extension for nvim-dap";
|
||||||
|
|
||||||
setupOpts = mkPluginSetupOption "nvim-dap-ui" {};
|
|
||||||
|
|
||||||
autoStart = mkOption {
|
autoStart = mkOption {
|
||||||
type = bool;
|
type = bool;
|
||||||
default = true;
|
default = true;
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
|
|
||||||
cfg = config.vim.filetree.neo-tree;
|
cfg = config.vim.filetree.neo-tree;
|
||||||
in {
|
in {
|
||||||
|
@ -14,17 +16,15 @@ in {
|
||||||
"plenary-nvim" # commons library
|
"plenary-nvim" # commons library
|
||||||
"image-nvim" # optional for image previews
|
"image-nvim" # optional for image previews
|
||||||
"nui-nvim" # ui library
|
"nui-nvim" # ui library
|
||||||
|
# neotree
|
||||||
|
"neo-tree-nvim"
|
||||||
];
|
];
|
||||||
|
|
||||||
lazy.plugins.neo-tree-nvim = {
|
visuals.nvimWebDevicons.enable = true;
|
||||||
package = "neo-tree-nvim";
|
|
||||||
setupModule = "neo-tree";
|
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
|
|
||||||
cmd = ["Neotree"];
|
pluginRC.neo-tree = entryAnywhere ''
|
||||||
};
|
require("neo-tree").setup(${toLuaObject cfg.setupOpts})
|
||||||
|
'';
|
||||||
visuals.nvim-web-devicons.enable = true;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,10 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.binds) mkLznBinding;
|
inherit (lib.nvim.binds) mkBinding;
|
||||||
inherit (lib.nvim.dag) entryAnywhere;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.nvim.binds) pushDownDefault;
|
inherit (lib.nvim.binds) pushDownDefault;
|
||||||
|
|
||||||
cfg = config.vim.filetree.nvimTree;
|
cfg = config.vim.filetree.nvimTree;
|
||||||
|
@ -15,25 +16,20 @@
|
||||||
inherit (self.options.vim.filetree.nvimTree) mappings;
|
inherit (self.options.vim.filetree.nvimTree) mappings;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins = ["nvim-tree-lua"];
|
||||||
binds.whichKey.register = pushDownDefault {
|
|
||||||
|
vim.maps.normal = mkMerge [
|
||||||
|
(mkBinding cfg.mappings.toggle ":NvimTreeToggle<cr>" mappings.toggle.description)
|
||||||
|
(mkBinding cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description)
|
||||||
|
(mkBinding cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description)
|
||||||
|
(mkBinding cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description)
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.binds.whichKey.register = pushDownDefault {
|
||||||
"<leader>t" = "+NvimTree";
|
"<leader>t" = "+NvimTree";
|
||||||
};
|
};
|
||||||
|
|
||||||
lazy.plugins.nvim-tree-lua = {
|
vim.pluginRC.nvimtreelua = entryAnywhere ''
|
||||||
package = "nvim-tree-lua";
|
|
||||||
setupModule = "nvim-tree";
|
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
cmd = ["NvimTreeClipboard" "NvimTreeClose" "NvimTreeCollapse" "NvimTreeCollapseKeepBuffers" "NvimTreeFindFile" "NvimTreeFindFileToggle" "NvimTreeFocus" "NvimTreeHiTest" "NvimTreeOpen" "NvimTreeRefresh" "NvimTreeResize" "NvimTreeToggle"];
|
|
||||||
keys = [
|
|
||||||
(mkLznBinding ["n"] cfg.mappings.toggle ":NvimTreeToggle<cr>" mappings.toggle.description)
|
|
||||||
(mkLznBinding ["n"] cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description)
|
|
||||||
(mkLznBinding ["n"] cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description)
|
|
||||||
(mkLznBinding ["n"] cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description)
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
pluginRC.nvimtreelua = entryAnywhere ''
|
|
||||||
${
|
${
|
||||||
optionalString cfg.setupOpts.disable_netrw ''
|
optionalString cfg.setupOpts.disable_netrw ''
|
||||||
-- disable netrew completely
|
-- disable netrew completely
|
||||||
|
@ -42,9 +38,10 @@ in {
|
||||||
''
|
''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
require'nvim-tree'.setup(${toLuaObject cfg.setupOpts})
|
||||||
|
|
||||||
${
|
${
|
||||||
optionalString cfg.openOnSetup ''
|
optionalString cfg.openOnSetup ''
|
||||||
${optionalString config.vim.lazy.enable ''require('lz.n').trigger_load("nvim-tree-lua")''}
|
|
||||||
-- autostart behaviour
|
-- autostart behaviour
|
||||||
-- Open on startup has been deprecated
|
-- Open on startup has been deprecated
|
||||||
-- see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup
|
-- see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup
|
||||||
|
@ -84,5 +81,4 @@ in {
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
|
||||||
inherit (lib.types) package;
|
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
|
||||||
|
|
||||||
cfg = config.vim.languages.assembly;
|
|
||||||
in {
|
|
||||||
options.vim.languages.assembly = {
|
|
||||||
enable = mkEnableOption "Assembly support";
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = mkEnableOption "Assembly treesitter" // {default = config.vim.languages.enableTreesitter;};
|
|
||||||
package = mkGrammarOption pkgs "asm";
|
|
||||||
};
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
enable = mkEnableOption "Assembly LSP support (asm-lsp)" // {default = config.vim.languages.enableLSP;};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
type = package;
|
|
||||||
default = pkgs.asm-lsp;
|
|
||||||
description = "asm-lsp package";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
|
||||||
(mkIf cfg.treesitter.enable {
|
|
||||||
vim.treesitter.enable = true;
|
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
|
||||||
vim.lsp.lspconfig.enable = true;
|
|
||||||
vim.lsp.lspconfig.sources.asm-lsp = ''
|
|
||||||
lspconfig.asm_lsp.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = default_on_attach,
|
|
||||||
cmd = {"${cfg.lsp.package}/bin/asm-lsp"},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,122 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
options,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (builtins) attrNames;
|
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
|
||||||
inherit (lib.types) either listOf package str enum;
|
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
|
||||||
inherit (lib.lists) isList;
|
|
||||||
inherit (lib.strings) optionalString;
|
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
|
||||||
inherit (lib.nvim.lua) expToLua;
|
|
||||||
|
|
||||||
lspKeyConfig = config.vim.lsp.mappings;
|
|
||||||
lspKeyOptions = options.vim.lsp.mappings;
|
|
||||||
mkLspBinding = optionName: action: let
|
|
||||||
key = lspKeyConfig.${optionName};
|
|
||||||
desc = lspKeyOptions.${optionName}.description;
|
|
||||||
in
|
|
||||||
optionalString (key != null) "vim.keymap.set('n', '${key}', ${action}, {buffer=bufnr, noremap=true, silent=true, desc='${desc}'})";
|
|
||||||
|
|
||||||
# Omnisharp doesn't have colors in popup docs for some reason, and I've also
|
|
||||||
# seen mentions of it being way slower, so until someone finds missing
|
|
||||||
# functionality, this will be the default.
|
|
||||||
defaultServer = "csharp_ls";
|
|
||||||
servers = {
|
|
||||||
omnisharp = {
|
|
||||||
package = pkgs.omnisharp-roslyn;
|
|
||||||
internalFormatter = true;
|
|
||||||
lspConfig = ''
|
|
||||||
lspconfig.omnisharp.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = function(client, bufnr)
|
|
||||||
default_on_attach(client, bufnr)
|
|
||||||
|
|
||||||
local oe = require("omnisharp_extended")
|
|
||||||
${mkLspBinding "goToDefinition" "oe.lsp_definition"}
|
|
||||||
${mkLspBinding "goToType" "oe.lsp_type_definition"}
|
|
||||||
${mkLspBinding "listReferences" "oe.lsp_references"}
|
|
||||||
${mkLspBinding "listImplementations" "oe.lsp_implementation"}
|
|
||||||
end,
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else "{'${cfg.lsp.package}/bin/OmniSharp'}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
csharp_ls = {
|
|
||||||
package = pkgs.csharp-ls;
|
|
||||||
internalFormatter = true;
|
|
||||||
lspConfig = ''
|
|
||||||
local extended_handler = require("csharpls_extended").handler
|
|
||||||
|
|
||||||
lspconfig.csharp_ls.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = default_on_attach,
|
|
||||||
handlers = {
|
|
||||||
["textDocument/definition"] = extended_handler,
|
|
||||||
["textDocument/typeDefinition"] = extended_handler
|
|
||||||
},
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else "{'${cfg.lsp.package}/bin/csharp-ls'}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
extraServerPlugins = {
|
|
||||||
omnisharp = ["omnisharp-extended"];
|
|
||||||
csharp_ls = ["csharpls-extended"];
|
|
||||||
};
|
|
||||||
|
|
||||||
cfg = config.vim.languages.csharp;
|
|
||||||
in {
|
|
||||||
options = {
|
|
||||||
vim.languages.csharp = {
|
|
||||||
enable = mkEnableOption "C# language support";
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = mkEnableOption "C# treesitter" // {default = config.vim.languages.enableTreesitter;};
|
|
||||||
package = mkGrammarOption pkgs "c-sharp";
|
|
||||||
};
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
enable = mkEnableOption "C# LSP support" // {default = config.vim.languages.enableLSP;};
|
|
||||||
server = mkOption {
|
|
||||||
description = "C# LSP server to use";
|
|
||||||
type = enum (attrNames servers);
|
|
||||||
default = defaultServer;
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
description = "C# LSP server package, or the command to run as a list of strings";
|
|
||||||
type = either package (listOf str);
|
|
||||||
default = servers.${cfg.lsp.server}.package;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
|
||||||
(mkIf cfg.treesitter.enable {
|
|
||||||
vim.treesitter.enable = true;
|
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
|
||||||
vim.startPlugins = extraServerPlugins.${cfg.lsp.server} or [];
|
|
||||||
vim.lsp.lspconfig.enable = true;
|
|
||||||
vim.lsp.lspconfig.sources.csharp-lsp = servers.${cfg.lsp.server}.lspConfig;
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -63,18 +63,6 @@
|
||||||
)
|
)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
biome = {
|
|
||||||
package = pkgs.biome;
|
|
||||||
nullConfig = ''
|
|
||||||
table.insert(
|
|
||||||
ls_sources,
|
|
||||||
null_ls.builtins.formatting.biome.with({
|
|
||||||
command = "${cfg.format.package}/bin/biome",
|
|
||||||
})
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
options.vim.languages.css = {
|
options.vim.languages.css = {
|
||||||
|
|
|
@ -2,27 +2,23 @@
|
||||||
inherit (lib.nvim.languages) mkEnable;
|
inherit (lib.nvim.languages) mkEnable;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./asm.nix
|
|
||||||
./bash.nix
|
./bash.nix
|
||||||
./dart.nix
|
./dart.nix
|
||||||
./clang.nix
|
./clang.nix
|
||||||
./css.nix
|
./css.nix
|
||||||
./elixir.nix
|
./elixir.nix
|
||||||
./go.nix
|
./go.nix
|
||||||
./kotlin.nix
|
|
||||||
./html.nix
|
./html.nix
|
||||||
./java.nix
|
./java.nix
|
||||||
./lua.nix
|
./lua.nix
|
||||||
./markdown.nix
|
./markdown.nix
|
||||||
./nim.nix
|
./nim.nix
|
||||||
./vala.nix
|
|
||||||
./nix.nix
|
./nix.nix
|
||||||
./ocaml.nix
|
./ocaml.nix
|
||||||
./php.nix
|
./php.nix
|
||||||
./python.nix
|
./python.nix
|
||||||
./r.nix
|
./r.nix
|
||||||
./rust.nix
|
./rust.nix
|
||||||
./scala.nix
|
|
||||||
./sql.nix
|
./sql.nix
|
||||||
./svelte.nix
|
./svelte.nix
|
||||||
./tailwind.nix
|
./tailwind.nix
|
||||||
|
@ -30,8 +26,6 @@ in {
|
||||||
./ts.nix
|
./ts.nix
|
||||||
./typst.nix
|
./typst.nix
|
||||||
./zig.nix
|
./zig.nix
|
||||||
./csharp.nix
|
|
||||||
./julia.nix
|
|
||||||
];
|
];
|
||||||
|
|
||||||
options.vim.languages = {
|
options.vim.languages = {
|
||||||
|
|
|
@ -1,126 +0,0 @@
|
||||||
{
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (builtins) attrNames isList;
|
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
|
||||||
inherit (lib.types) either listOf package str enum bool nullOr;
|
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
|
||||||
inherit (lib.strings) optionalString;
|
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
|
||||||
inherit (lib.nvim.lua) expToLua;
|
|
||||||
|
|
||||||
defaultServer = "julials";
|
|
||||||
servers = {
|
|
||||||
julials = {
|
|
||||||
package = pkgs.julia.withPackages ["LanguageServer"];
|
|
||||||
internalFormatter = true;
|
|
||||||
lspConfig = ''
|
|
||||||
lspconfig.julials.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = default_on_attach,
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else ''
|
|
||||||
{
|
|
||||||
"${optionalString (cfg.lsp.package != null) "${cfg.lsp.package}/bin/"}julia",
|
|
||||||
"--startup-file=no",
|
|
||||||
"--history-file=no",
|
|
||||||
"--eval",
|
|
||||||
[[
|
|
||||||
using LanguageServer
|
|
||||||
|
|
||||||
depot_path = get(ENV, "JULIA_DEPOT_PATH", "")
|
|
||||||
project_path = let
|
|
||||||
dirname(something(
|
|
||||||
## 1. Finds an explicitly set project (JULIA_PROJECT)
|
|
||||||
Base.load_path_expand((
|
|
||||||
p = get(ENV, "JULIA_PROJECT", nothing);
|
|
||||||
p === nothing ? nothing : isempty(p) ? nothing : p
|
|
||||||
)),
|
|
||||||
## 2. Look for a Project.toml file in the current working directory,
|
|
||||||
## or parent directories, with $HOME as an upper boundary
|
|
||||||
Base.current_project(),
|
|
||||||
## 3. First entry in the load path
|
|
||||||
get(Base.load_path(), 1, nothing),
|
|
||||||
## 4. Fallback to default global environment,
|
|
||||||
## this is more or less unreachable
|
|
||||||
Base.load_path_expand("@v#.#"),
|
|
||||||
))
|
|
||||||
end
|
|
||||||
@info "Running language server" VERSION pwd() project_path depot_path
|
|
||||||
server = LanguageServer.LanguageServerInstance(stdin, stdout, project_path, depot_path)
|
|
||||||
server.runlinter = true
|
|
||||||
run(server)
|
|
||||||
]]
|
|
||||||
}
|
|
||||||
''
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
cfg = config.vim.languages.julia;
|
|
||||||
in {
|
|
||||||
options = {
|
|
||||||
vim.languages.julia = {
|
|
||||||
enable = mkEnableOption "Julia language support";
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = mkEnableOption "Julia treesitter" // {default = config.vim.languages.enableTreesitter;};
|
|
||||||
package = mkGrammarOption pkgs "julia";
|
|
||||||
};
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
enable = mkOption {
|
|
||||||
type = bool;
|
|
||||||
default = config.vim.languages.enableLSP;
|
|
||||||
description = ''
|
|
||||||
Whether to enable Julia LSP support.
|
|
||||||
|
|
||||||
::: {.note}
|
|
||||||
The entirety of Julia is bundled with nvf, if you enable this
|
|
||||||
option, since there is no way to provide only the LSP server.
|
|
||||||
|
|
||||||
If you want to avoid that, you have to change
|
|
||||||
[](#opt-vim.languages.julia.lsp.package) to use the Julia binary
|
|
||||||
in {env}`PATH` (set it to `null`), and add the `LanguageServer` package to
|
|
||||||
Julia in your devshells.
|
|
||||||
:::
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
server = mkOption {
|
|
||||||
type = enum (attrNames servers);
|
|
||||||
default = defaultServer;
|
|
||||||
description = "Julia LSP server to use";
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
description = ''
|
|
||||||
Julia LSP server package, `null` to use the Julia binary in {env}`PATH`, or
|
|
||||||
the command to run as a list of strings.
|
|
||||||
'';
|
|
||||||
type = nullOr (either package (listOf str));
|
|
||||||
default = servers.${cfg.lsp.server}.package;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
|
||||||
(mkIf cfg.treesitter.enable {
|
|
||||||
vim.treesitter.enable = true;
|
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
|
||||||
vim.lsp.lspconfig.enable = true;
|
|
||||||
vim.lsp.lspconfig.sources.julia-lsp = servers.${cfg.lsp.server}.lspConfig;
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,107 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.options) mkEnableOption mkOption literalExpression;
|
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
|
||||||
inherit (lib.meta) getExe;
|
|
||||||
inherit (lib.nvim.languages) diagnosticsToLua;
|
|
||||||
inherit (lib.types) either package listOf str;
|
|
||||||
inherit (lib.nvim.types) mkGrammarOption diagnostics;
|
|
||||||
inherit (lib.lists) isList;
|
|
||||||
inherit (lib.nvim.lua) expToLua;
|
|
||||||
|
|
||||||
cfg = config.vim.languages.kotlin;
|
|
||||||
|
|
||||||
defaultDiagnosticsProvider = ["ktlint"];
|
|
||||||
diagnosticsProviders = {
|
|
||||||
ktlint = {
|
|
||||||
package = pkgs.ktlint;
|
|
||||||
nullConfig = pkg: ''
|
|
||||||
table.insert(
|
|
||||||
ls_sources,
|
|
||||||
null_ls.builtins.diagnostics.ktlint.with({
|
|
||||||
command = "${getExe pkg}",
|
|
||||||
})
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
options.vim.languages.kotlin = {
|
|
||||||
enable = mkEnableOption "Kotlin/HCL support";
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = mkEnableOption "Kotlin treesitter" // {default = config.vim.languages.enableTreesitter;};
|
|
||||||
package = mkGrammarOption pkgs "kotlin";
|
|
||||||
};
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
enable = mkEnableOption "Kotlin LSP support" // {default = config.vim.languages.enableLSP;};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
description = "kotlin_language_server package with Kotlin runtime";
|
|
||||||
type = either package (listOf str);
|
|
||||||
example = literalExpression ''
|
|
||||||
pkgs.symlinkJoin {
|
|
||||||
name = "kotlin-language-server-wrapped";
|
|
||||||
paths = [pkgs.kotlin-language-server];
|
|
||||||
nativeBuildInputs = [pkgs.makeBinaryWrapper];
|
|
||||||
postBuild = '''
|
|
||||||
wrapProgram $out/bin/kotlin-language-server \
|
|
||||||
--prefix PATH : ''${pkgs.kotlin}/bin
|
|
||||||
''';
|
|
||||||
};
|
|
||||||
'';
|
|
||||||
default = pkgs.kotlin-language-server;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
extraDiagnostics = {
|
|
||||||
enable = mkEnableOption "extra Kotlin diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;};
|
|
||||||
|
|
||||||
types = diagnostics {
|
|
||||||
langDesc = "Kotlin";
|
|
||||||
inherit diagnosticsProviders;
|
|
||||||
inherit defaultDiagnosticsProvider;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
|
||||||
(mkIf cfg.treesitter.enable {
|
|
||||||
vim.treesitter.enable = true;
|
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.extraDiagnostics.enable {
|
|
||||||
vim.lsp.null-ls.enable = true;
|
|
||||||
vim.lsp.null-ls.sources = diagnosticsToLua {
|
|
||||||
lang = "kotlin";
|
|
||||||
config = cfg.extraDiagnostics.types;
|
|
||||||
inherit diagnosticsProviders;
|
|
||||||
};
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
|
||||||
vim.lsp.lspconfig.enable = true;
|
|
||||||
vim.lsp.lspconfig.sources.kotlin_language_server = ''
|
|
||||||
lspconfig.kotlin_language_server.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
root_dir = lspconfig.util.root_pattern("main.kt", ".git"),
|
|
||||||
on_attach=default_on_attach,
|
|
||||||
init_options = {
|
|
||||||
-- speeds up the startup time for the LSP
|
|
||||||
storagePath = vim.fn.stdpath('state') .. '/kotlin',
|
|
||||||
},
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else ''{"${cfg.lsp.package}/bin/kotlin-language-server"}''
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -5,7 +5,6 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (builtins) attrNames;
|
inherit (builtins) attrNames;
|
||||||
inherit (lib) concatStringsSep;
|
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
inherit (lib.options) mkEnableOption mkOption;
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.lists) isList;
|
inherit (lib.lists) isList;
|
||||||
|
@ -63,10 +62,10 @@
|
||||||
command = {"${cfg.format.package}/bin/alejandra", "--quiet"},
|
command = {"${cfg.format.package}/bin/alejandra", "--quiet"},
|
||||||
},
|
},
|
||||||
''}
|
''}
|
||||||
${optionalString (cfg.format.type == "nixfmt")
|
${optionalString (cfg.format.type == "nixpkgs-fmt")
|
||||||
''
|
''
|
||||||
formatting = {
|
formatting = {
|
||||||
command = {"${cfg.format.package}/bin/nixfmt"},
|
command = {"${cfg.format.package}/bin/nixpkgs-fmt"},
|
||||||
},
|
},
|
||||||
''}
|
''}
|
||||||
},
|
},
|
||||||
|
@ -107,19 +106,10 @@
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
nixfmt = {
|
nixpkgs-fmt = {
|
||||||
package = pkgs.nixfmt-rfc-style;
|
package = pkgs.nixpkgs-fmt;
|
||||||
nullConfig = ''
|
# Never need to use null-ls for nixpkgs-fmt
|
||||||
table.insert(
|
|
||||||
ls_sources,
|
|
||||||
null_ls.builtins.formatting.nixfmt.with({
|
|
||||||
command = "${cfg.format.package}/bin/nixfmt"
|
|
||||||
})
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
nixpkgs-fmt = null; # removed
|
|
||||||
};
|
};
|
||||||
|
|
||||||
defaultDiagnosticsProvider = ["statix" "deadnix"];
|
defaultDiagnosticsProvider = ["statix" "deadnix"];
|
||||||
|
@ -161,7 +151,7 @@ in {
|
||||||
enable = mkEnableOption "Nix LSP support" // {default = config.vim.languages.enableLSP;};
|
enable = mkEnableOption "Nix LSP support" // {default = config.vim.languages.enableLSP;};
|
||||||
server = mkOption {
|
server = mkOption {
|
||||||
description = "Nix LSP server to use";
|
description = "Nix LSP server to use";
|
||||||
type = enum (attrNames servers);
|
type = str;
|
||||||
default = defaultServer;
|
default = defaultServer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -201,12 +191,6 @@ in {
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
config = mkIf cfg.enable (mkMerge [
|
||||||
{
|
{
|
||||||
assertions = [
|
|
||||||
{
|
|
||||||
assertion = cfg.format.type != "nixpkgs-fmt";
|
|
||||||
message = "nixpkgs-fmt has been archived upstream. Please use one of the following instead: ${concatStringsSep ", " (attrNames formats)}";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
vim.pluginRC.nix = ''
|
vim.pluginRC.nix = ''
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
pattern = "nix",
|
pattern = "nix",
|
||||||
|
|
|
@ -15,38 +15,7 @@
|
||||||
cfg = config.vim.languages.r;
|
cfg = config.vim.languages.r;
|
||||||
|
|
||||||
r-with-languageserver = pkgs.rWrapper.override {
|
r-with-languageserver = pkgs.rWrapper.override {
|
||||||
packages = [pkgs.rPackages.languageserver];
|
packages = with pkgs.rPackages; [languageserver];
|
||||||
};
|
|
||||||
|
|
||||||
defaultFormat = "format_r";
|
|
||||||
formats = {
|
|
||||||
styler = {
|
|
||||||
package = pkgs.rWrapper.override {
|
|
||||||
packages = [pkgs.rPackages.styler];
|
|
||||||
};
|
|
||||||
nullConfig = ''
|
|
||||||
table.insert(
|
|
||||||
ls_sources,
|
|
||||||
null_ls.builtins.formatting.styler.with({
|
|
||||||
command = "${cfg.format.package}/bin/R",
|
|
||||||
})
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
format_r = {
|
|
||||||
package = pkgs.rWrapper.override {
|
|
||||||
packages = [pkgs.rPackages.formatR];
|
|
||||||
};
|
|
||||||
nullConfig = ''
|
|
||||||
table.insert(
|
|
||||||
ls_sources,
|
|
||||||
null_ls.builtins.formatting.format_r.with({
|
|
||||||
command = "${cfg.format.package}/bin/R",
|
|
||||||
})
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
defaultServer = "r_language_server";
|
defaultServer = "r_language_server";
|
||||||
|
@ -93,22 +62,6 @@ in {
|
||||||
default = servers.${cfg.lsp.server}.package;
|
default = servers.${cfg.lsp.server}.package;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
format = {
|
|
||||||
enable = mkEnableOption "R formatting" // {default = config.vim.languages.enableFormat;};
|
|
||||||
|
|
||||||
type = mkOption {
|
|
||||||
type = enum (attrNames formats);
|
|
||||||
default = defaultFormat;
|
|
||||||
description = "R formatter to use";
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
type = package;
|
|
||||||
default = formats.${cfg.format.type}.package;
|
|
||||||
description = "R formatter package";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
config = mkIf cfg.enable (mkMerge [
|
||||||
|
@ -117,11 +70,6 @@ in {
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
vim.treesitter.grammars = [cfg.treesitter.package];
|
||||||
})
|
})
|
||||||
|
|
||||||
(mkIf cfg.format.enable {
|
|
||||||
vim.lsp.null-ls.enable = true;
|
|
||||||
vim.lsp.null-ls.sources.r-format = formats.${cfg.format.type}.nullConfig;
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
(mkIf cfg.lsp.enable {
|
||||||
vim.lsp.lspconfig.enable = true;
|
vim.lsp.lspconfig.enable = true;
|
||||||
vim.lsp.lspconfig.sources.r-lsp = servers.${cfg.lsp.server}.lspConfig;
|
vim.lsp.lspconfig.sources.r-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
inherit (lib.options) mkOption mkEnableOption;
|
inherit (lib.options) mkOption mkEnableOption;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.trivial) boolToString;
|
inherit (lib.trivial) boolToString;
|
||||||
inherit (lib.lists) isList;
|
inherit (lib.lists) isList optionals;
|
||||||
inherit (lib.types) bool package str listOf either enum;
|
inherit (lib.types) bool package str listOf either enum;
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
inherit (lib.nvim.types) mkGrammarOption;
|
||||||
inherit (lib.nvim.lua) expToLua;
|
inherit (lib.nvim.lua) expToLua;
|
||||||
|
@ -101,7 +101,7 @@ in {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["crates-nvim"];
|
startPlugins = ["crates-nvim"];
|
||||||
lsp.null-ls.enable = mkIf cfg.crates.codeActions true;
|
lsp.null-ls.enable = mkIf cfg.crates.codeActions true;
|
||||||
autocomplete.nvim-cmp.sources = {crates = "[Crates]";};
|
autocomplete.sources = {"crates" = "[Crates]";};
|
||||||
pluginRC.rust-crates = entryAnywhere ''
|
pluginRC.rust-crates = entryAnywhere ''
|
||||||
require('crates').setup {
|
require('crates').setup {
|
||||||
null_ls = {
|
null_ls = {
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.generators) mkLuaInline;
|
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
|
||||||
inherit (lib.nvim.binds) mkMappingOption;
|
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
inherit (lib.nvim.types) mkGrammarOption luaInline;
|
|
||||||
inherit (lib.options) mkOption mkEnableOption mkPackageOption;
|
|
||||||
inherit (lib.strings) optionalString;
|
|
||||||
inherit (lib.types) attrsOf anything bool;
|
|
||||||
|
|
||||||
listCommandsAction =
|
|
||||||
if config.vim.telescope.enable
|
|
||||||
then ''require("telescope").extensions.metals.commands()''
|
|
||||||
else ''require("metals").commands()'';
|
|
||||||
|
|
||||||
cfg = config.vim.languages.scala;
|
|
||||||
|
|
||||||
usingDap = config.vim.debugger.nvim-dap.enable && cfg.dap.enable;
|
|
||||||
usingLualine = config.vim.statusline.lualine.enable;
|
|
||||||
in {
|
|
||||||
options.vim.languages.scala = {
|
|
||||||
enable = mkEnableOption "Scala language support";
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = mkEnableOption "Scala treesitter" // {default = config.vim.languages.enableTreesitter;};
|
|
||||||
package = mkGrammarOption pkgs "scala";
|
|
||||||
};
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
enable = mkEnableOption "Scala LSP support (metals)" // {default = config.vim.languages.enableLSP;};
|
|
||||||
package = mkPackageOption pkgs "metals" {
|
|
||||||
default = ["metals"];
|
|
||||||
};
|
|
||||||
|
|
||||||
extraMappings = {
|
|
||||||
listCommands = mkMappingOption "List Metals commands" "<leader>lc";
|
|
||||||
};
|
|
||||||
|
|
||||||
extraSettings = mkOption {
|
|
||||||
type = attrsOf anything;
|
|
||||||
description = "Extra settings passed to the metals config. Check nvim-metals docs for available options";
|
|
||||||
default = {
|
|
||||||
showImplicitArguments = true;
|
|
||||||
showImplicitConversionsAndClasses = true;
|
|
||||||
showInferredType = true;
|
|
||||||
excludedPackages = [
|
|
||||||
"akka.actor.typed.javadsl"
|
|
||||||
"com.github.swagger.akka.javadsl"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
dap = {
|
|
||||||
enable = mkEnableOption "Scala Debug Adapter support (metals)" // {default = config.vim.languages.enableDAP;};
|
|
||||||
config = mkOption {
|
|
||||||
description = "Lua configuration for dap";
|
|
||||||
type = luaInline;
|
|
||||||
default = mkLuaInline ''
|
|
||||||
dap.configurations.scala = {
|
|
||||||
{
|
|
||||||
type = "scala",
|
|
||||||
request = "launch",
|
|
||||||
name = "RunOrTest",
|
|
||||||
metals = {
|
|
||||||
runType = "runOrTestFile",
|
|
||||||
--args = { "firstArg", "secondArg", "thirdArg" }, -- here just as an example
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type = "scala",
|
|
||||||
request = "launch",
|
|
||||||
name = "Test Target",
|
|
||||||
metals = {
|
|
||||||
runType = "testTarget",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
fixShortmess = mkOption {
|
|
||||||
type = bool;
|
|
||||||
description = "Remove the 'F' flag from shortmess to allow messages to be shown. Without doing this, autocommands that deal with filetypes prohibit messages from being shown";
|
|
||||||
default = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable (
|
|
||||||
mkMerge [
|
|
||||||
(mkIf cfg.treesitter.enable {
|
|
||||||
vim.treesitter.enable = true;
|
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
|
||||||
})
|
|
||||||
(mkIf (cfg.lsp.enable || cfg.dap.enable) {
|
|
||||||
vim = {
|
|
||||||
startPlugins = ["nvim-metals"];
|
|
||||||
pluginRC.nvim-metals = entryAfter ["lsp-setup"] ''
|
|
||||||
local metals_caps = capabilities -- from lsp-setup
|
|
||||||
|
|
||||||
local attach_metals_keymaps = function(client, bufnr)
|
|
||||||
attach_keymaps(client, bufnr) -- from lsp-setup
|
|
||||||
vim.api.nvim_buf_set_keymap(bufnr, 'n', '${cfg.lsp.extraMappings.listCommands}', '<cmd>lua ${listCommandsAction}<CR>', {noremap=true, silent=true, desc='Show all Metals commands'})
|
|
||||||
end
|
|
||||||
|
|
||||||
metals_config = require('metals').bare_config()
|
|
||||||
${optionalString usingLualine "metals_config.init_options.statusBarProvider = 'on'"}
|
|
||||||
|
|
||||||
metals_config.capabilities = metals_caps
|
|
||||||
metals_config.on_attach = function(client, bufnr)
|
|
||||||
${optionalString usingDap "require('metals').setup_dap()"}
|
|
||||||
attach_metals_keymaps(client, bufnr)
|
|
||||||
end
|
|
||||||
|
|
||||||
metals_config.settings = ${toLuaObject cfg.lsp.extraSettings}
|
|
||||||
metals_config.settings.metalsBinaryPath = "${cfg.lsp.package}/bin/metals"
|
|
||||||
|
|
||||||
metals_config.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
|
|
||||||
vim.lsp.diagnostic.on_publish_diagnostics, {
|
|
||||||
virtual_text = {
|
|
||||||
prefix = '⚠',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
${optionalString cfg.fixShortmess ''vim.opt_global.shortmess:remove("F")''}
|
|
||||||
|
|
||||||
local lsp_group = vim.api.nvim_create_augroup('lsp', { clear = true })
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd('FileType', {
|
|
||||||
group = lsp_group,
|
|
||||||
pattern = {'java', 'scala', 'sbt'},
|
|
||||||
callback = function()
|
|
||||||
require('metals').initialize_or_attach(metals_config)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
})
|
|
||||||
]
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -48,18 +48,6 @@
|
||||||
)
|
)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
biome = {
|
|
||||||
package = pkgs.biome;
|
|
||||||
nullConfig = ''
|
|
||||||
table.insert(
|
|
||||||
ls_sources,
|
|
||||||
null_ls.builtins.formatting.biome.with({
|
|
||||||
command = "${cfg.format.package}/bin/biome",
|
|
||||||
})
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# TODO: specify packages
|
# TODO: specify packages
|
||||||
|
|
|
@ -95,18 +95,6 @@
|
||||||
)
|
)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
biome = {
|
|
||||||
package = pkgs.biome;
|
|
||||||
nullConfig = ''
|
|
||||||
table.insert(
|
|
||||||
ls_sources,
|
|
||||||
null_ls.builtins.formatting.biome.with({
|
|
||||||
command = "${cfg.format.package}/bin/biome",
|
|
||||||
})
|
|
||||||
)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
# TODO: specify packages
|
# TODO: specify packages
|
||||||
|
|
|
@ -14,38 +14,6 @@
|
||||||
|
|
||||||
cfg = config.vim.languages.typst;
|
cfg = config.vim.languages.typst;
|
||||||
|
|
||||||
defaultServer = "tinymist";
|
|
||||||
servers = {
|
|
||||||
typst-lsp = {
|
|
||||||
package = pkgs.typst-lsp;
|
|
||||||
lspConfig = ''
|
|
||||||
lspconfig.typst_lsp.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = default_on_attach,
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else ''{"${cfg.lsp.package}/bin/typst-lsp"}''
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
tinymist = {
|
|
||||||
package = pkgs.tinymist;
|
|
||||||
lspConfig = ''
|
|
||||||
lspconfig.tinymist.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = default_on_attach,
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else ''{"${cfg.lsp.package}/bin/tinymist"}''
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
defaultFormat = "typstfmt";
|
defaultFormat = "typstfmt";
|
||||||
formats = {
|
formats = {
|
||||||
typstfmt = {
|
typstfmt = {
|
||||||
|
@ -84,17 +52,11 @@ in {
|
||||||
lsp = {
|
lsp = {
|
||||||
enable = mkEnableOption "Typst LSP support (typst-lsp)" // {default = config.vim.languages.enableLSP;};
|
enable = mkEnableOption "Typst LSP support (typst-lsp)" // {default = config.vim.languages.enableLSP;};
|
||||||
|
|
||||||
server = mkOption {
|
|
||||||
description = "Typst LSP server to use";
|
|
||||||
type = enum (attrNames servers);
|
|
||||||
default = defaultServer;
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
description = "typst-lsp package, or the command to run as a list of strings";
|
description = "typst-lsp package, or the command to run as a list of strings";
|
||||||
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
|
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
|
||||||
type = either package (listOf str);
|
type = either package (listOf str);
|
||||||
default = servers.${cfg.lsp.server}.package;
|
default = pkgs.typst-lsp;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -120,14 +82,19 @@ in {
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
vim.treesitter.grammars = [cfg.treesitter.package];
|
||||||
})
|
})
|
||||||
|
|
||||||
(mkIf cfg.format.enable {
|
|
||||||
vim.lsp.null-ls.enable = true;
|
|
||||||
vim.lsp.null-ls.sources.typst-format = formats.${cfg.format.type}.nullConfig;
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
(mkIf cfg.lsp.enable {
|
||||||
vim.lsp.lspconfig.enable = true;
|
vim.lsp.lspconfig.enable = true;
|
||||||
vim.lsp.lspconfig.sources.typst-lsp = servers.${cfg.lsp.server}.lspConfig;
|
vim.lsp.lspconfig.sources.typst-lsp = ''
|
||||||
|
lspconfig.typst_lsp.setup {
|
||||||
|
capabilities = capabilities,
|
||||||
|
on_attach=default_on_attach,
|
||||||
|
cmd = ${
|
||||||
|
if isList cfg.lsp.package
|
||||||
|
then expToLua cfg.lsp.package
|
||||||
|
else ''{"${cfg.lsp.package}/bin/typst-lsp"}''
|
||||||
|
},
|
||||||
|
}
|
||||||
|
'';
|
||||||
})
|
})
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (builtins) attrNames;
|
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
|
||||||
inherit (lib.lists) isList;
|
|
||||||
inherit (lib.types) enum either listOf package str;
|
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
|
||||||
inherit (lib.nvim.lua) expToLua;
|
|
||||||
|
|
||||||
cfg = config.vim.languages.vala;
|
|
||||||
|
|
||||||
defaultServer = "vala_ls";
|
|
||||||
servers = {
|
|
||||||
vala_ls = {
|
|
||||||
package = pkgs.symlinkJoin {
|
|
||||||
name = "vala-language-server-wrapper";
|
|
||||||
paths = [pkgs.vala-language-server];
|
|
||||||
buildInputs = [pkgs.makeBinaryWrapper];
|
|
||||||
postBuild = ''
|
|
||||||
wrapProgram $out/bin/vala-language-server \
|
|
||||||
--prefix PATH : ${pkgs.uncrustify}/bin
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
internalFormatter = true;
|
|
||||||
lspConfig = ''
|
|
||||||
lspconfig.vala_ls.setup {
|
|
||||||
capabilities = capabilities;
|
|
||||||
on_attach = default_on_attach;
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else ''{"${cfg.lsp.package}/bin/vala-language-server"}''
|
|
||||||
},
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
options.vim.languages.vala = {
|
|
||||||
enable = mkEnableOption "Vala language support";
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = mkEnableOption "Vala treesitter" // {default = config.vim.languages.enableTreesitter;};
|
|
||||||
package = mkGrammarOption pkgs "vala";
|
|
||||||
};
|
|
||||||
|
|
||||||
lsp = {
|
|
||||||
enable = mkEnableOption "Vala LSP support" // {default = config.vim.languages.enableLSP;};
|
|
||||||
server = mkOption {
|
|
||||||
description = "Vala LSP server to use";
|
|
||||||
type = enum (attrNames servers);
|
|
||||||
default = defaultServer;
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkOption {
|
|
||||||
description = "Vala LSP server package, or the command to run as a list of strings";
|
|
||||||
type = either package (listOf str);
|
|
||||||
default = servers.${cfg.lsp.server}.package;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
|
||||||
(mkIf cfg.treesitter.enable {
|
|
||||||
vim.treesitter.enable = true;
|
|
||||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
|
||||||
})
|
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
|
||||||
vim.lsp.lspconfig.enable = true;
|
|
||||||
vim.lsp.lspconfig.sources.vala_ls = servers.${cfg.lsp.server}.lspConfig;
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -4,33 +4,13 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (builtins) attrNames;
|
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
inherit (lib.options) mkEnableOption mkOption;
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.lists) isList;
|
inherit (lib.lists) isList;
|
||||||
inherit (lib.types) either listOf package str enum;
|
inherit (lib.types) either listOf package str;
|
||||||
inherit (lib.nvim.lua) expToLua;
|
inherit (lib.nvim.lua) expToLua;
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
inherit (lib.nvim.types) mkGrammarOption;
|
||||||
|
|
||||||
defaultServer = "zls";
|
|
||||||
servers = {
|
|
||||||
zls = {
|
|
||||||
package = pkgs.zls;
|
|
||||||
internalFormatter = true;
|
|
||||||
lspConfig = ''
|
|
||||||
lspconfig.zls.setup {
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = default_on_attach,
|
|
||||||
cmd = ${
|
|
||||||
if isList cfg.lsp.package
|
|
||||||
then expToLua cfg.lsp.package
|
|
||||||
else "{'${cfg.lsp.package}/bin/zls'}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
cfg = config.vim.languages.zig;
|
cfg = config.vim.languages.zig;
|
||||||
in {
|
in {
|
||||||
options.vim.languages.zig = {
|
options.vim.languages.zig = {
|
||||||
|
@ -42,19 +22,20 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
lsp = {
|
lsp = {
|
||||||
enable = mkEnableOption "Zig LSP support" // {default = config.vim.languages.enableLSP;};
|
enable = mkEnableOption "Zig LSP support (zls)" // {default = config.vim.languages.enableLSP;};
|
||||||
|
|
||||||
server = mkOption {
|
|
||||||
type = enum (attrNames servers);
|
|
||||||
default = defaultServer;
|
|
||||||
description = "Zig LSP server to use";
|
|
||||||
};
|
|
||||||
|
|
||||||
package = mkOption {
|
package = mkOption {
|
||||||
description = "ZLS package, or the command to run as a list of strings";
|
description = "ZLS package, or the command to run as a list of strings";
|
||||||
|
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
|
||||||
type = either package (listOf str);
|
type = either package (listOf str);
|
||||||
default = pkgs.zls;
|
default = pkgs.zls;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
zigPackage = mkOption {
|
||||||
|
description = "Zig package used by ZLS";
|
||||||
|
type = package;
|
||||||
|
default = pkgs.zig;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
config = mkIf cfg.enable (mkMerge [
|
config = mkIf cfg.enable (mkMerge [
|
||||||
|
@ -65,7 +46,23 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.lsp.enable {
|
(mkIf cfg.lsp.enable {
|
||||||
vim.lsp.lspconfig.enable = true;
|
vim.lsp.lspconfig.enable = true;
|
||||||
vim.lsp.lspconfig.sources.zig-lsp = servers.${cfg.lsp.server}.lspConfig;
|
vim.lsp.lspconfig.sources.zig-lsp = ''
|
||||||
|
lspconfig.zls.setup {
|
||||||
|
capabilities = capabilities,
|
||||||
|
on_attach=default_on_attach,
|
||||||
|
cmd = ${
|
||||||
|
if isList cfg.lsp.package
|
||||||
|
then expToLua cfg.lsp.package
|
||||||
|
else ''{"${cfg.lsp.package}/bin/zls"}''
|
||||||
|
},
|
||||||
|
settings = {
|
||||||
|
["zls"] = {
|
||||||
|
zig_exe_path = "${cfg.lsp.zigPackage}/bin/zig",
|
||||||
|
zig_lib_path = "${cfg.lsp.zigPackage}/lib/zig",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
})
|
})
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,52 +5,52 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.lists) optional;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.trivial) boolToString;
|
inherit (lib.trivial) boolToString;
|
||||||
inherit (lib.nvim.binds) addDescriptionsToMappings;
|
inherit (lib.nvim.binds) addDescriptionsToMappings;
|
||||||
|
|
||||||
cfg = config.vim.lsp;
|
cfg = config.vim.lsp;
|
||||||
usingNvimCmp = config.vim.autocomplete.nvim-cmp.enable;
|
usingNvimCmp = config.vim.autocomplete.enable && config.vim.autocomplete.type == "nvim-cmp";
|
||||||
self = import ./module.nix {inherit config lib pkgs;};
|
self = import ./module.nix {inherit config lib pkgs;};
|
||||||
|
|
||||||
mappingDefinitions = self.options.vim.lsp.mappings;
|
mappingDefinitions = self.options.vim.lsp.mappings;
|
||||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||||
mkBinding = binding: action:
|
mkBinding = binding: action:
|
||||||
if binding.value != null
|
if binding.value != null
|
||||||
then "vim.keymap.set('n', '${binding.value}', ${action}, {buffer=bufnr, noremap=true, silent=true, desc='${binding.description}'})"
|
then "vim.api.nvim_buf_set_keymap(bufnr, 'n', '${binding.value}', '<cmd>lua ${action}<CR>', {noremap=true, silent=true, desc='${binding.description}'})"
|
||||||
else "";
|
else "";
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
autocomplete.nvim-cmp = {
|
startPlugins = optional usingNvimCmp "cmp-nvim-lsp";
|
||||||
sources = {nvim_lsp = "[LSP]";};
|
|
||||||
sourcePlugins = ["cmp-nvim-lsp"];
|
autocomplete.sources = {"nvim_lsp" = "[LSP]";};
|
||||||
};
|
|
||||||
|
|
||||||
pluginRC.lsp-setup = ''
|
pluginRC.lsp-setup = ''
|
||||||
vim.g.formatsave = ${boolToString cfg.formatOnSave};
|
vim.g.formatsave = ${boolToString cfg.formatOnSave};
|
||||||
|
|
||||||
local attach_keymaps = function(client, bufnr)
|
local attach_keymaps = function(client, bufnr)
|
||||||
${mkBinding mappings.goToDeclaration "vim.lsp.buf.declaration"}
|
${mkBinding mappings.goToDeclaration "vim.lsp.buf.declaration()"}
|
||||||
${mkBinding mappings.goToDefinition "vim.lsp.buf.definition"}
|
${mkBinding mappings.goToDefinition "vim.lsp.buf.definition()"}
|
||||||
${mkBinding mappings.goToType "vim.lsp.buf.type_definition"}
|
${mkBinding mappings.goToType "vim.lsp.buf.type_definition()"}
|
||||||
${mkBinding mappings.listImplementations "vim.lsp.buf.implementation"}
|
${mkBinding mappings.listImplementations "vim.lsp.buf.implementation()"}
|
||||||
${mkBinding mappings.listReferences "vim.lsp.buf.references"}
|
${mkBinding mappings.listReferences "vim.lsp.buf.references()"}
|
||||||
${mkBinding mappings.nextDiagnostic "vim.diagnostic.goto_next"}
|
${mkBinding mappings.nextDiagnostic "vim.diagnostic.goto_next()"}
|
||||||
${mkBinding mappings.previousDiagnostic "vim.diagnostic.goto_prev"}
|
${mkBinding mappings.previousDiagnostic "vim.diagnostic.goto_prev()"}
|
||||||
${mkBinding mappings.openDiagnosticFloat "vim.diagnostic.open_float"}
|
${mkBinding mappings.openDiagnosticFloat "vim.diagnostic.open_float()"}
|
||||||
${mkBinding mappings.documentHighlight "vim.lsp.buf.document_highlight"}
|
${mkBinding mappings.documentHighlight "vim.lsp.buf.document_highlight()"}
|
||||||
${mkBinding mappings.listDocumentSymbols "vim.lsp.buf.document_symbol"}
|
${mkBinding mappings.listDocumentSymbols "vim.lsp.buf.document_symbol()"}
|
||||||
${mkBinding mappings.addWorkspaceFolder "vim.lsp.buf.add_workspace_folder"}
|
${mkBinding mappings.addWorkspaceFolder "vim.lsp.buf.add_workspace_folder()"}
|
||||||
${mkBinding mappings.removeWorkspaceFolder "vim.lsp.buf.remove_workspace_folder"}
|
${mkBinding mappings.removeWorkspaceFolder "vim.lsp.buf.remove_workspace_folder()"}
|
||||||
${mkBinding mappings.listWorkspaceFolders "function() vim.notify(vim.inspect(vim.lsp.buf.list_workspace_folders())) end"}
|
${mkBinding mappings.listWorkspaceFolders "print(vim.inspect(vim.lsp.buf.list_workspace_folders()))"}
|
||||||
${mkBinding mappings.listWorkspaceSymbols "vim.lsp.buf.workspace_symbol"}
|
${mkBinding mappings.listWorkspaceSymbols "vim.lsp.buf.workspace_symbol()"}
|
||||||
${mkBinding mappings.hover "vim.lsp.buf.hover"}
|
${mkBinding mappings.hover "vim.lsp.buf.hover()"}
|
||||||
${mkBinding mappings.signatureHelp "vim.lsp.buf.signature_help"}
|
${mkBinding mappings.signatureHelp "vim.lsp.buf.signature_help()"}
|
||||||
${mkBinding mappings.renameSymbol "vim.lsp.buf.rename"}
|
${mkBinding mappings.renameSymbol "vim.lsp.buf.rename()"}
|
||||||
${mkBinding mappings.codeAction "vim.lsp.buf.code_action"}
|
${mkBinding mappings.codeAction "vim.lsp.buf.code_action()"}
|
||||||
${mkBinding mappings.format "vim.lsp.buf.format"}
|
${mkBinding mappings.format "vim.lsp.buf.format()"}
|
||||||
${mkBinding mappings.toggleFormatOnSave "function() vim.b.disableFormatSave = not vim.b.disableFormatSave end"}
|
${mkBinding mappings.toggleFormatOnSave "vim.b.disableFormatSave = not vim.b.disableFormatSave"}
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Enable formatting
|
-- Enable formatting
|
||||||
|
@ -116,60 +116,7 @@ in {
|
||||||
end
|
end
|
||||||
|
|
||||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
${optionalString usingNvimCmp ''
|
${optionalString usingNvimCmp "capabilities = require('cmp_nvim_lsp').default_capabilities()"}
|
||||||
-- HACK: copied from cmp-nvim-lsp. If we ever lazy load lspconfig we
|
|
||||||
-- should re-evaluate whether we can just use `default_capabilities`
|
|
||||||
capabilities = {
|
|
||||||
textDocument = {
|
|
||||||
completion = {
|
|
||||||
dynamicRegistration = false,
|
|
||||||
completionItem = {
|
|
||||||
snippetSupport = true,
|
|
||||||
commitCharactersSupport = true,
|
|
||||||
deprecatedSupport = true,
|
|
||||||
preselectSupport = true,
|
|
||||||
tagSupport = {
|
|
||||||
valueSet = {
|
|
||||||
1, -- Deprecated
|
|
||||||
}
|
|
||||||
},
|
|
||||||
insertReplaceSupport = true,
|
|
||||||
resolveSupport = {
|
|
||||||
properties = {
|
|
||||||
"documentation",
|
|
||||||
"detail",
|
|
||||||
"additionalTextEdits",
|
|
||||||
"sortText",
|
|
||||||
"filterText",
|
|
||||||
"insertText",
|
|
||||||
"textEdit",
|
|
||||||
"insertTextFormat",
|
|
||||||
"insertTextMode",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
insertTextModeSupport = {
|
|
||||||
valueSet = {
|
|
||||||
1, -- asIs
|
|
||||||
2, -- adjustIndentation
|
|
||||||
}
|
|
||||||
},
|
|
||||||
labelDetailsSupport = true,
|
|
||||||
},
|
|
||||||
contextSupport = true,
|
|
||||||
insertTextMode = 1,
|
|
||||||
completionList = {
|
|
||||||
itemDefaults = {
|
|
||||||
'commitCharacters',
|
|
||||||
'editRange',
|
|
||||||
'insertTextFormat',
|
|
||||||
'insertTextMode',
|
|
||||||
'data',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
''}
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,32 +3,18 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf mkForce;
|
inherit (lib.modules) mkIf;
|
||||||
inherit (lib.generators) mkLuaInline;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
|
|
||||||
cfg = config.vim.lsp.lspkind;
|
cfg = config.vim.lsp;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf (cfg.enable && cfg.lspkind.enable) {
|
||||||
assertions = [
|
vim.startPlugins = ["lspkind"];
|
||||||
{
|
vim.pluginRC.lspkind = entryAnywhere ''
|
||||||
assertion = config.vim.autocomplete.nvim-cmp.enable;
|
local lspkind = require'lspkind'
|
||||||
message = ''
|
local lspkind_opts = {
|
||||||
While lspkind supports Neovim's native lsp upstream, using that over
|
mode = '${cfg.lspkind.mode}'
|
||||||
nvim-cmp isn't recommended, nor supported by nvf.
|
|
||||||
|
|
||||||
Please migrate to nvim-cmp if you want to use lspkind.
|
|
||||||
'';
|
|
||||||
}
|
}
|
||||||
];
|
'';
|
||||||
|
|
||||||
vim = {
|
|
||||||
startPlugins = ["lspkind"];
|
|
||||||
|
|
||||||
lsp.lspkind.setupOpts.before = config.vim.autocomplete.nvim-cmp.format;
|
|
||||||
autocomplete.nvim-cmp.setupOpts.formatting.format = mkForce (mkLuaInline ''
|
|
||||||
require("lspkind").cmp_format(${toLuaObject cfg.setupOpts})
|
|
||||||
'');
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,16 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
inherit (lib.options) mkEnableOption mkOption;
|
||||||
inherit (lib.types) enum nullOr;
|
inherit (lib.types) enum;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption luaInline;
|
|
||||||
in {
|
in {
|
||||||
options.vim.lsp.lspkind = {
|
options.vim.lsp = {
|
||||||
|
lspkind = {
|
||||||
enable = mkEnableOption "vscode-like pictograms for lsp [lspkind]";
|
enable = mkEnableOption "vscode-like pictograms for lsp [lspkind]";
|
||||||
setupOpts = mkPluginSetupOption "lspkind.nvim" {
|
|
||||||
mode = mkOption {
|
mode = mkOption {
|
||||||
description = "Defines how annotations are shown";
|
description = "Defines how annotations are shown";
|
||||||
type = enum ["text" "text_symbol" "symbol_text" "symbol"];
|
type = enum ["text" "text_symbol" "symbol_text" "symbol"];
|
||||||
default = "symbol_text";
|
default = "symbol_text";
|
||||||
};
|
};
|
||||||
|
|
||||||
before = mkOption {
|
|
||||||
description = "The function that will be called before lspkind's modifications are applied";
|
|
||||||
type = nullOr luaInline;
|
|
||||||
default = null;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ in {
|
||||||
|
|
||||||
pluginRC.otter-nvim = entryAnywhere ''
|
pluginRC.otter-nvim = entryAnywhere ''
|
||||||
-- Enable otter diagnostics viewer
|
-- Enable otter diagnostics viewer
|
||||||
require("otter").setup(${toLuaObject cfg.otter-nvim.setupOpts})
|
require("otter").setup({${toLuaObject cfg.otter-nvim.setupOpts}})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,40 +1,41 @@
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
options,
|
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetLznBinding pushDownDefault;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding pushDownDefault;
|
||||||
|
|
||||||
cfg = config.vim.lsp;
|
cfg = config.vim.lsp;
|
||||||
|
|
||||||
mappingDefinitions = options.vim.lsp.trouble.mappings;
|
self = import ./trouble.nix {inherit lib;};
|
||||||
|
mappingDefinitions = self.options.vim.lsp.trouble.mappings;
|
||||||
mappings = addDescriptionsToMappings cfg.trouble.mappings mappingDefinitions;
|
mappings = addDescriptionsToMappings cfg.trouble.mappings mappingDefinitions;
|
||||||
in {
|
in {
|
||||||
config = mkIf (cfg.enable && cfg.trouble.enable) {
|
config = mkIf (cfg.enable && cfg.trouble.enable) {
|
||||||
vim = {
|
vim = {
|
||||||
lazy.plugins.trouble = {
|
startPlugins = ["trouble"];
|
||||||
package = "trouble";
|
|
||||||
setupModule = "trouble";
|
|
||||||
inherit (cfg.trouble) setupOpts;
|
|
||||||
|
|
||||||
cmd = "Trouble";
|
maps.normal = mkMerge [
|
||||||
keys = [
|
(mkSetBinding mappings.toggle "<cmd>TroubleToggle<CR>")
|
||||||
(mkSetLznBinding mappings.toggle "<cmd>TroubleToggle<CR>")
|
(mkSetBinding mappings.workspaceDiagnostics "<cmd>TroubleToggle workspace_diagnostics<CR>")
|
||||||
(mkSetLznBinding mappings.workspaceDiagnostics "<cmd>TroubleToggle workspace_diagnostics<CR>")
|
(mkSetBinding mappings.documentDiagnostics "<cmd>TroubleToggle document_diagnostics<CR>")
|
||||||
(mkSetLznBinding mappings.documentDiagnostics "<cmd>TroubleToggle document_diagnostics<CR>")
|
(mkSetBinding mappings.lspReferences "<cmd>TroubleToggle lsp_references<CR>")
|
||||||
(mkSetLznBinding mappings.lspReferences "<cmd>TroubleToggle lsp_references<CR>")
|
(mkSetBinding mappings.quickfix "<cmd>TroubleToggle quickfix<CR>")
|
||||||
(mkSetLznBinding mappings.quickfix "<cmd>TroubleToggle quickfix<CR>")
|
(mkSetBinding mappings.locList "<cmd>TroubleToggle loclist<CR>")
|
||||||
(mkSetLznBinding mappings.locList "<cmd>TroubleToggle loclist<CR>")
|
|
||||||
];
|
];
|
||||||
};
|
|
||||||
|
|
||||||
binds.whichKey.register = pushDownDefault {
|
binds.whichKey.register = pushDownDefault {
|
||||||
"<leader>l" = "Trouble";
|
"<leader>l" = "Trouble";
|
||||||
"<leader>x" = "+Trouble";
|
"<leader>x" = "+Trouble";
|
||||||
"<leader>lw" = "Workspace";
|
"<leader>lw" = "Workspace";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pluginRC.trouble = entryAnywhere ''
|
||||||
|
-- Enable trouble diagnostics viewer
|
||||||
|
require("trouble").setup {}
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,11 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib.options) mkEnableOption;
|
inherit (lib.options) mkEnableOption;
|
||||||
inherit (lib.nvim.binds) mkMappingOption;
|
inherit (lib.nvim.binds) mkMappingOption;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
||||||
in {
|
in {
|
||||||
options.vim.lsp = {
|
options.vim.lsp = {
|
||||||
trouble = {
|
trouble = {
|
||||||
enable = mkEnableOption "trouble diagnostics viewer";
|
enable = mkEnableOption "trouble diagnostics viewer";
|
||||||
|
|
||||||
setupOpts = mkPluginSetupOption "Trouble" {};
|
|
||||||
|
|
||||||
mappings = {
|
mappings = {
|
||||||
toggle = mkMappingOption "Toggle trouble [trouble]" "<leader>xx";
|
toggle = mkMappingOption "Toggle trouble [trouble]" "<leader>xx";
|
||||||
workspaceDiagnostics = mkMappingOption "Workspace diagnostics [trouble]" "<leader>lwd";
|
workspaceDiagnostics = mkMappingOption "Workspace diagnostics [trouble]" "<leader>lwd";
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
imports = [
|
imports = [
|
||||||
./obsidian
|
./obsidian
|
||||||
./orgmode
|
./orgmode
|
||||||
./neorg
|
|
||||||
./mind-nvim
|
./mind-nvim
|
||||||
./todo-comments
|
./todo-comments
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
|
||||||
inherit (lib.nvim.dag) entryAnywhere;
|
|
||||||
inherit (lib.nvim.binds) pushDownDefault;
|
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
|
|
||||||
cfg = config.vim.notes.neorg;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
|
||||||
{
|
|
||||||
vim = {
|
|
||||||
startPlugins = [
|
|
||||||
"lua-utils-nvim"
|
|
||||||
"nui-nvim"
|
|
||||||
"nvim-nio"
|
|
||||||
"pathlib-nvim"
|
|
||||||
"plenary-nvim"
|
|
||||||
"neorg"
|
|
||||||
"neorg-telescope"
|
|
||||||
];
|
|
||||||
|
|
||||||
binds.whichKey.register = pushDownDefault {
|
|
||||||
"<leader>o" = "+Notes";
|
|
||||||
};
|
|
||||||
|
|
||||||
pluginRC.neorg = entryAnywhere ''
|
|
||||||
require('neorg').setup(${toLuaObject cfg.setupOpts})
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
(mkIf cfg.treesitter.enable {
|
|
||||||
vim.treesitter.enable = true;
|
|
||||||
vim.treesitter.grammars = [cfg.treesitter.norgPackage];
|
|
||||||
})
|
|
||||||
]);
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./neorg.nix
|
|
||||||
./config.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,50 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.options) mkEnableOption mkOption;
|
|
||||||
inherit (lib.types) submodule listOf str;
|
|
||||||
inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption;
|
|
||||||
in {
|
|
||||||
options.vim.notes.neorg = {
|
|
||||||
enable = mkEnableOption ''
|
|
||||||
Neorg: An intuitive note-taking and organization tool with a structured nested syntax.
|
|
||||||
'';
|
|
||||||
|
|
||||||
setupOpts = mkPluginSetupOption "Neorg" {
|
|
||||||
load = {
|
|
||||||
"core.defaults" = mkOption {
|
|
||||||
default = {};
|
|
||||||
description = ''
|
|
||||||
all of the most important modules that any user would want to have a "just works" experience
|
|
||||||
'';
|
|
||||||
|
|
||||||
type = submodule {
|
|
||||||
options = {
|
|
||||||
enable = mkEnableOption ''
|
|
||||||
all of the most important modules that any user would want to have a "just works" experience
|
|
||||||
'';
|
|
||||||
config = {
|
|
||||||
disable = mkOption {
|
|
||||||
description = ''
|
|
||||||
list of modules from to be disabled from core.defaults
|
|
||||||
'';
|
|
||||||
type = listOf str;
|
|
||||||
default = [];
|
|
||||||
example = ["core.autocommands" "core.itero"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
treesitter = {
|
|
||||||
enable = mkEnableOption "Neorg treesitter" // {default = config.vim.languages.enableTreesitter;};
|
|
||||||
norgPackage = mkGrammarOption pkgs "norg";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -45,10 +45,10 @@ in {
|
||||||
|
|
||||||
completion = {
|
completion = {
|
||||||
nvim_cmp = mkOption {
|
nvim_cmp = mkOption {
|
||||||
# If using nvim-cmp, otherwise set to false
|
# if using nvim-cmp, otherwise set to false
|
||||||
type = bool;
|
type = bool;
|
||||||
description = "If using nvim-cmp, otherwise set to false";
|
description = "If using nvim-cmp, otherwise set to false";
|
||||||
default = config.vim.autocomplete.nvim-cmp.enable;
|
default = config.vim.autocomplete.type == "nvim-cmp";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./luasnip
|
./vsnip
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.modules) mkIf;
|
|
||||||
|
|
||||||
cfg = config.vim.snippets.luasnip;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
vim = {
|
|
||||||
lazy.plugins = {
|
|
||||||
luasnip = {
|
|
||||||
package = "luasnip";
|
|
||||||
lazy = true;
|
|
||||||
after = cfg.loaders;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
startPlugins = cfg.providers;
|
|
||||||
autocomplete.nvim-cmp = {
|
|
||||||
sources = {luasnip = "[LuaSnip]";};
|
|
||||||
sourcePlugins = ["cmp-luasnip"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./luasnip.nix
|
|
||||||
./config.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
{lib, ...}: let
|
|
||||||
inherit (lib.options) mkEnableOption mkOption literalExpression literalMD;
|
|
||||||
inherit (lib.types) listOf lines;
|
|
||||||
inherit (lib.nvim.types) pluginType;
|
|
||||||
in {
|
|
||||||
options.vim.snippets.luasnip = {
|
|
||||||
enable = mkEnableOption "luasnip";
|
|
||||||
providers = mkOption {
|
|
||||||
type = listOf pluginType;
|
|
||||||
default = ["friendly-snippets"];
|
|
||||||
description = ''
|
|
||||||
The snippet provider packages.
|
|
||||||
|
|
||||||
::: {.note}
|
|
||||||
These are simply appended to {option} `vim.startPlugins`.
|
|
||||||
:::
|
|
||||||
'';
|
|
||||||
example = literalExpression "[\"vimPlugins.vim-snippets\"]";
|
|
||||||
};
|
|
||||||
loaders = mkOption {
|
|
||||||
type = lines;
|
|
||||||
default = "require('luasnip.loaders.from_vscode').lazy_load()";
|
|
||||||
defaultText = literalMD ''
|
|
||||||
```lua
|
|
||||||
require('luasnip.loaders.from_vscode').lazy_load()
|
|
||||||
```
|
|
||||||
'';
|
|
||||||
description = "Lua code used to load snippet providers.";
|
|
||||||
example = literalMD ''
|
|
||||||
```lua
|
|
||||||
require("luasnip.loaders.from_snipmate").lazy_load()
|
|
||||||
```
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
13
modules/plugins/snippets/vsnip/config.nix
Normal file
13
modules/plugins/snippets/vsnip/config.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib.modules) mkIf;
|
||||||
|
|
||||||
|
cfg = config.vim.snippets.vsnip;
|
||||||
|
in {
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
vim.startPlugins = ["vim-vsnip"];
|
||||||
|
};
|
||||||
|
}
|
5
modules/plugins/snippets/vsnip/default.nix
Normal file
5
modules/plugins/snippets/vsnip/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./vsnip.nix
|
||||||
|
];
|
||||||
|
}
|
7
modules/plugins/snippets/vsnip/vsnip.nix
Normal file
7
modules/plugins/snippets/vsnip/vsnip.nix
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{lib, ...}: let
|
||||||
|
inherit (lib.options) mkEnableOption;
|
||||||
|
in {
|
||||||
|
options.vim.snippets.vsnip = {
|
||||||
|
enable = mkEnableOption "vim-vsnip: snippet LSP/VSCode's format";
|
||||||
|
};
|
||||||
|
}
|
|
@ -7,26 +7,16 @@
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
inherit (lib.nvim.dag) entryAfter;
|
||||||
cfg = config.vim.spellcheck;
|
cfg = config.vim.spellcheck;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.programmingWordlist.enable {
|
config = mkIf (cfg.enable && cfg.programmingWordlist.enable) {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["vim-dirtytalk"];
|
startPlugins = ["vim-dirtytalk"];
|
||||||
|
|
||||||
spellcheck.enable = true;
|
# vim-dirtytalk doesn't have any setup
|
||||||
|
# but we would like to append programming to spelllang
|
||||||
# vim-dirtytalk doesn't have any setup but we would
|
# as soon as possible while the plugin is enabled
|
||||||
# like to append programming to spelllangs as soon as
|
pluginRC.vim-dirtytalk = entryAfter ["basic"] ''
|
||||||
# possible while the plugin is enabled and the state
|
-- append programming to spelllang
|
||||||
# directory can be found.
|
|
||||||
pluginRC.vim-dirtytalk = entryAfter ["spellcheck"] ''
|
|
||||||
-- If Neovim can find (or access) the state directory
|
|
||||||
-- then append "programming" wordlist from vim-dirtytalk
|
|
||||||
-- to spelllang table. If path cannot be found, display
|
|
||||||
-- an error and avoid appending the programming words
|
|
||||||
if vim.fn.isdirectory(vim.fn.stdpath('state')) == 1 then
|
|
||||||
vim.opt.spelllang:append("programming")
|
vim.opt.spelllang:append("programming")
|
||||||
else
|
|
||||||
vim.notify("State path does not exist: " .. state_path, vim.log.levels.ERROR)
|
|
||||||
end
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -15,14 +15,10 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = [
|
startPlugins = [
|
||||||
"nvim-bufferline-lua"
|
(assert config.vim.visuals.nvimWebDevicons.enable; "nvim-bufferline-lua")
|
||||||
"bufdelete-nvim"
|
"bufdelete-nvim"
|
||||||
];
|
];
|
||||||
|
|
||||||
# Soft-dependency for bufferline.
|
|
||||||
# Recommended by upstream, so enabled here.
|
|
||||||
visuals.nvim-web-devicons.enable = true;
|
|
||||||
|
|
||||||
maps.normal = mkMerge [
|
maps.normal = mkMerge [
|
||||||
(mkLuaBinding cfg.mappings.closeCurrent "require(\"bufdelete\").bufdelete" mappings.closeCurrent.description)
|
(mkLuaBinding cfg.mappings.closeCurrent "require(\"bufdelete\").bufdelete" mappings.closeCurrent.description)
|
||||||
(mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext<CR>" mappings.cycleNext.description)
|
(mkBinding cfg.mappings.cycleNext ":BufferLineCycleNext<CR>" mappings.cycleNext.description)
|
||||||
|
|
|
@ -3,31 +3,39 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.strings) optionalString;
|
inherit (builtins) toJSON;
|
||||||
inherit (lib.lists) optional;
|
inherit (lib.lists) optionals;
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.meta) getExe;
|
inherit (lib.meta) getExe;
|
||||||
inherit (lib.nvim.binds) mkLznBinding;
|
inherit (lib.nvim.binds) mkBinding;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere entryAfter;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
|
|
||||||
cfg = config.vim.terminal.toggleterm;
|
cfg = config.vim.terminal.toggleterm;
|
||||||
lazygitMapDesc = "Open lazygit [toggleterm]";
|
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkMerge [
|
||||||
|
(
|
||||||
|
mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
lazy.plugins.toggleterm-nvim = {
|
startPlugins = [
|
||||||
package = "toggleterm-nvim";
|
"toggleterm-nvim"
|
||||||
cmd = ["ToggleTerm" "ToggleTermSendCurrentLine" "ToggleTermSendVisualLines" "ToggleTermSendVisualSelection" "ToggleTermSetName" "ToggleTermToggleAll"];
|
];
|
||||||
keys =
|
|
||||||
[(mkLznBinding ["n"] cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal")]
|
|
||||||
++ optional cfg.lazygit.enable {
|
|
||||||
key = cfg.lazygit.mappings.open;
|
|
||||||
desc = lazygitMapDesc;
|
|
||||||
};
|
|
||||||
|
|
||||||
setupModule = "toggleterm";
|
maps.normal = mkBinding cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal";
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
after = optionalString cfg.lazygit.enable ''
|
pluginRC.toggleterm = entryAnywhere ''
|
||||||
|
require("toggleterm").setup(${toLuaObject cfg.setupOpts})
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
|
)
|
||||||
|
(
|
||||||
|
mkIf (cfg.enable && cfg.lazygit.enable)
|
||||||
|
{
|
||||||
|
vim.startPlugins = optionals (cfg.lazygit.package != null) [
|
||||||
|
cfg.lazygit.package
|
||||||
|
];
|
||||||
|
vim.pluginRC.toggleterm-lazygit = entryAfter ["toggleterm"] ''
|
||||||
local terminal = require 'toggleterm.terminal'
|
local terminal = require 'toggleterm.terminal'
|
||||||
local lazygit = terminal.Terminal:new({
|
local lazygit = terminal.Terminal:new({
|
||||||
cmd = '${
|
cmd = '${
|
||||||
|
@ -42,9 +50,9 @@ in {
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
vim.keymap.set('n', ${toLuaObject cfg.lazygit.mappings.open}, function() lazygit:toggle() end, {silent = true, noremap = true, desc = '${lazygitMapDesc}'})
|
vim.keymap.set('n', ${toJSON cfg.lazygit.mappings.open}, function() lazygit:toggle() end, {silent = true, noremap = true, desc = 'Open lazygit [toggleterm]'})
|
||||||
'';
|
'';
|
||||||
};
|
}
|
||||||
};
|
)
|
||||||
};
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,14 +4,7 @@
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.trivial) boolToString warnIf;
|
inherit (lib.trivial) boolToString warnIf;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
in {
|
in {
|
||||||
base16 = {
|
|
||||||
setup = {base16-colors, ...}: ''
|
|
||||||
-- Base16 theme
|
|
||||||
require('base16-colorscheme').setup(${toLuaObject base16-colors})
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
onedark = {
|
onedark = {
|
||||||
setup = {style ? "dark", ...}: ''
|
setup = {style ? "dark", ...}: ''
|
||||||
-- OneDark theme
|
-- OneDark theme
|
||||||
|
@ -27,7 +20,6 @@ in {
|
||||||
setup = {
|
setup = {
|
||||||
style ? "night",
|
style ? "night",
|
||||||
transparent,
|
transparent,
|
||||||
...
|
|
||||||
}: ''
|
}: ''
|
||||||
require('tokyonight').setup {
|
require('tokyonight').setup {
|
||||||
transparent = ${boolToString transparent};
|
transparent = ${boolToString transparent};
|
||||||
|
@ -50,7 +42,6 @@ in {
|
||||||
setup = {
|
setup = {
|
||||||
style ? "mocha",
|
style ? "mocha",
|
||||||
transparent ? false,
|
transparent ? false,
|
||||||
...
|
|
||||||
}: ''
|
}: ''
|
||||||
-- Catppuccin theme
|
-- Catppuccin theme
|
||||||
require('catppuccin').setup {
|
require('catppuccin').setup {
|
||||||
|
@ -93,7 +84,6 @@ in {
|
||||||
setup = {
|
setup = {
|
||||||
style ? "dark",
|
style ? "dark",
|
||||||
transparent ? false,
|
transparent ? false,
|
||||||
...
|
|
||||||
}: let
|
}: let
|
||||||
style' =
|
style' =
|
||||||
warnIf (style == "light") "oxocarbon: light theme is not well-supported" style;
|
warnIf (style == "light") "oxocarbon: light theme is not well-supported" style;
|
||||||
|
@ -118,7 +108,6 @@ in {
|
||||||
setup = {
|
setup = {
|
||||||
style ? "dark",
|
style ? "dark",
|
||||||
transparent ? false,
|
transparent ? false,
|
||||||
...
|
|
||||||
}: ''
|
}: ''
|
||||||
-- Gruvbox theme
|
-- Gruvbox theme
|
||||||
require("gruvbox").setup({
|
require("gruvbox").setup({
|
||||||
|
@ -154,7 +143,6 @@ in {
|
||||||
setup = {
|
setup = {
|
||||||
style ? "main",
|
style ? "main",
|
||||||
transparent ? false,
|
transparent ? false,
|
||||||
...
|
|
||||||
}: ''
|
}: ''
|
||||||
require("rose-pine").setup({
|
require("rose-pine").setup({
|
||||||
dark_variant = "${style}", -- main, moon, or dawn
|
dark_variant = "${style}", -- main, moon, or dawn
|
||||||
|
|
|
@ -5,52 +5,31 @@
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.options) mkOption;
|
inherit (lib.options) mkOption;
|
||||||
inherit (lib.attrsets) attrNames;
|
inherit (lib.attrsets) attrNames;
|
||||||
inherit (lib.strings) hasPrefix;
|
|
||||||
inherit (lib.types) bool lines enum;
|
inherit (lib.types) bool lines enum;
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
inherit (lib.nvim.attrsets) mapListToAttrs;
|
|
||||||
inherit (lib.nvim.dag) entryBefore;
|
inherit (lib.nvim.dag) entryBefore;
|
||||||
inherit (lib.nvim.types) hexColor;
|
|
||||||
|
|
||||||
cfg = config.vim.theme;
|
cfg = config.vim.theme;
|
||||||
supportedThemes = import ./supported-themes.nix {
|
supportedThemes = import ./supported-themes.nix {
|
||||||
inherit lib config;
|
inherit lib config;
|
||||||
};
|
};
|
||||||
|
|
||||||
numbers = ["0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F"];
|
|
||||||
base16Options =
|
|
||||||
mapListToAttrs (n: {
|
|
||||||
name = "base0${n}";
|
|
||||||
value = mkOption {
|
|
||||||
description = "The base0${n} color to use";
|
|
||||||
type = hexColor;
|
|
||||||
apply = v:
|
|
||||||
if hasPrefix "#" v
|
|
||||||
then v
|
|
||||||
else "#${v}";
|
|
||||||
};
|
|
||||||
})
|
|
||||||
numbers;
|
|
||||||
in {
|
in {
|
||||||
options.vim.theme = {
|
options.vim.theme = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = bool;
|
type = bool;
|
||||||
description = "Enable theming";
|
description = "Enable theming";
|
||||||
};
|
};
|
||||||
|
|
||||||
name = mkOption {
|
name = mkOption {
|
||||||
type = enum (attrNames supportedThemes);
|
type = enum (attrNames supportedThemes);
|
||||||
description = ''
|
description = "Supported themes can be found in `supportedThemes.nix`";
|
||||||
Supported themes can be found in {file}`supportedThemes.nix`.
|
|
||||||
Setting the theme to "base16" enables base16 theming and
|
|
||||||
requires all of the colors in {option}`vim.theme.base16-colors` to be set.
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
base16-colors = base16Options;
|
|
||||||
|
|
||||||
style = mkOption {
|
style = mkOption {
|
||||||
type = enum supportedThemes.${cfg.name}.styles;
|
type = enum supportedThemes.${cfg.name}.styles;
|
||||||
description = "Specific style for theme if it supports it";
|
description = "Specific style for theme if it supports it";
|
||||||
};
|
};
|
||||||
|
|
||||||
transparent = mkOption {
|
transparent = mkOption {
|
||||||
type = bool;
|
type = bool;
|
||||||
default = false;
|
default = false;
|
||||||
|
@ -66,9 +45,9 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = [cfg.name];
|
startPlugins = [cfg.name];
|
||||||
luaConfigRC.theme = entryBefore ["pluginConfigs" "lazyConfigs"] ''
|
luaConfigRC.theme = entryBefore ["pluginConfigs"] ''
|
||||||
${cfg.extraConfig}
|
${cfg.extraConfig}
|
||||||
${supportedThemes.${cfg.name}.setup {inherit (cfg) style transparent base16-colors;}}
|
${supportedThemes.${cfg.name}.setup {inherit (cfg) style transparent;}}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,12 +5,13 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.lists) optionals;
|
inherit (lib.lists) optional optionals;
|
||||||
inherit (lib.nvim.binds) mkSetBinding addDescriptionsToMappings;
|
inherit (lib.nvim.binds) mkSetBinding addDescriptionsToMappings;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.nvim.dag) entryBefore entryAfter;
|
inherit (lib.nvim.dag) entryBefore entryAfter;
|
||||||
|
|
||||||
cfg = config.vim.treesitter;
|
cfg = config.vim.treesitter;
|
||||||
|
usingNvimCmp = config.vim.autocomplete.enable && config.vim.autocomplete.type == "nvim-cmp";
|
||||||
|
|
||||||
self = import ./treesitter.nix {inherit pkgs lib;};
|
self = import ./treesitter.nix {inherit pkgs lib;};
|
||||||
mappingDefinitions = self.options.vim.treesitter.mappings;
|
mappingDefinitions = self.options.vim.treesitter.mappings;
|
||||||
|
@ -18,13 +19,9 @@
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["nvim-treesitter"];
|
startPlugins = ["nvim-treesitter"] ++ optional usingNvimCmp "cmp-treesitter";
|
||||||
|
|
||||||
autocomplete.nvim-cmp = {
|
|
||||||
sources = {treesitter = "[Treesitter]";};
|
|
||||||
sourcePlugins = ["cmp-treesitter"];
|
|
||||||
};
|
|
||||||
|
|
||||||
|
autocomplete.sources = {"treesitter" = "[Treesitter]";};
|
||||||
treesitter.grammars = optionals cfg.addDefaultGrammars cfg.defaultGrammars;
|
treesitter.grammars = optionals cfg.addDefaultGrammars cfg.defaultGrammars;
|
||||||
|
|
||||||
maps = {
|
maps = {
|
||||||
|
|
|
@ -21,7 +21,7 @@ in {
|
||||||
mkBool true "override the lsp markdown formatter with Noice";
|
mkBool true "override the lsp markdown formatter with Noice";
|
||||||
|
|
||||||
"cmp.entry.get_documentation" =
|
"cmp.entry.get_documentation" =
|
||||||
mkBool config.vim.autocomplete.nvim-cmp.enable "override cmp documentation with Noice";
|
mkBool (config.vim.autocomplete.type == "nvim-cmp") "override cmp documentation with Noice";
|
||||||
};
|
};
|
||||||
|
|
||||||
signature = {
|
signature = {
|
||||||
|
|
|
@ -4,18 +4,15 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.binds.cheatsheet;
|
cfg = config.vim.binds.cheatsheet;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.lazy.plugins.cheatsheet-nvim = {
|
vim.startPlugins = ["cheatsheet-nvim"];
|
||||||
package = "cheatsheet-nvim";
|
|
||||||
setupModule = "cheatsheet";
|
|
||||||
setupOpts = {};
|
|
||||||
cmd = ["Cheatsheet" "CheatsheetEdit"];
|
|
||||||
|
|
||||||
before = optionalString config.vim.lazy.enable "require('lz.n').trigger_load('telescope')";
|
vim.pluginRC.cheaetsheet-nvim = entryAnywhere ''
|
||||||
};
|
require('cheatsheet').setup({})
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,23 +4,33 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
inherit (lib.attrsets) mapAttrsToList;
|
|
||||||
inherit (lib.generators) mkLuaInline;
|
|
||||||
inherit (lib.nvim.dag) entryAnywhere;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.binds.whichKey;
|
cfg = config.vim.binds.whichKey;
|
||||||
register = mapAttrsToList (n: v: mkLuaInline "{ '${n}', desc = '${v}' }") cfg.register;
|
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins = ["which-key"];
|
||||||
startPlugins = ["which-key"];
|
|
||||||
|
|
||||||
pluginRC.whichkey = entryAnywhere ''
|
vim.pluginRC.whichkey = entryAnywhere ''
|
||||||
local wk = require("which-key")
|
local wk = require("which-key")
|
||||||
wk.setup (${toLuaObject cfg.setupOpts})
|
wk.setup ({
|
||||||
wk.add(${toLuaObject register})
|
key_labels = {
|
||||||
|
["<space>"] = "SPACE",
|
||||||
|
["<leader>"] = "SPACE",
|
||||||
|
["<cr>"] = "RETURN",
|
||||||
|
["<tab>"] = "TAB",
|
||||||
|
},
|
||||||
|
|
||||||
|
${optionalString config.vim.ui.borders.plugins.which-key.enable ''
|
||||||
|
window = {
|
||||||
|
border = ${toLuaObject config.vim.ui.borders.plugins.which-key.style},
|
||||||
|
},
|
||||||
|
''}
|
||||||
|
})
|
||||||
|
|
||||||
|
wk.register(${toLuaObject cfg.register})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{
|
_: {
|
||||||
imports = [
|
imports = [
|
||||||
./which-key.nix
|
./which-key.nix
|
||||||
./config.nix
|
./config.nix
|
||||||
|
|
|
@ -1,51 +1,14 @@
|
||||||
{
|
{lib, ...}: let
|
||||||
config,
|
inherit (lib.options) mkEnableOption mkOption;
|
||||||
lib,
|
inherit (lib.types) attrsOf nullOr str;
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.options) mkOption mkEnableOption;
|
|
||||||
inherit (lib.types) attrsOf nullOr str attrs enum bool;
|
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
||||||
in {
|
in {
|
||||||
options.vim.binds.whichKey = {
|
options.vim.binds.whichKey = {
|
||||||
enable = mkEnableOption "which-key keybind helper menu";
|
enable = mkEnableOption "which-key keybind helper menu";
|
||||||
|
|
||||||
register = mkOption {
|
register = mkOption {
|
||||||
|
description = "Register label for which-key keybind helper menu";
|
||||||
type = attrsOf (nullOr str);
|
type = attrsOf (nullOr str);
|
||||||
default = {};
|
default = {};
|
||||||
description = "Register label for which-key keybind helper menu";
|
|
||||||
};
|
|
||||||
|
|
||||||
setupOpts = mkPluginSetupOption "which-key" {
|
|
||||||
preset = mkOption {
|
|
||||||
type = enum ["classic" "modern" "helix"];
|
|
||||||
default = "modern";
|
|
||||||
description = "The default preset for the which-key window";
|
|
||||||
};
|
|
||||||
|
|
||||||
notify = mkOption {
|
|
||||||
type = bool;
|
|
||||||
default = true;
|
|
||||||
description = "Show a warning when issues were detected with mappings";
|
|
||||||
};
|
|
||||||
|
|
||||||
replace = mkOption {
|
|
||||||
type = attrs;
|
|
||||||
default = {
|
|
||||||
"<space>" = "SPACE";
|
|
||||||
"<leader>" = "SPACE";
|
|
||||||
"<cr>" = "RETURN";
|
|
||||||
"<tab>" = "TAB";
|
|
||||||
};
|
|
||||||
description = "Functions/Lua Patterns for formatting the labels";
|
|
||||||
};
|
|
||||||
|
|
||||||
win = {
|
|
||||||
border = mkOption {
|
|
||||||
type = str;
|
|
||||||
default = config.vim.ui.borders.plugins.which-key.style;
|
|
||||||
description = "Which-key window border style";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,14 +8,9 @@
|
||||||
cfg = config.vim.utility.diffview-nvim;
|
cfg = config.vim.utility.diffview-nvim;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins = [
|
||||||
startPlugins = ["plenary-nvim"];
|
"diffview-nvim"
|
||||||
lazy.plugins.diffview-nvim = {
|
"plenary-nvim"
|
||||||
package = "diffview-nvim";
|
];
|
||||||
cmd = ["DiffviewClose" "DiffviewFileHistory" "DiffviewFocusFiles" "DiffviewLog" "DiffviewOpen" "DiffviewRefresh" "DiffviewToggleFiles"];
|
|
||||||
setupModule = "diffview";
|
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,7 @@
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib.options) mkEnableOption;
|
inherit (lib.options) mkEnableOption;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
||||||
in {
|
in {
|
||||||
options.vim.utility.diffview-nvim = {
|
options.vim.utility.diffview-nvim = {
|
||||||
enable = mkEnableOption "diffview-nvim: cycle through diffs for all modified files for any git rev";
|
enable = mkEnableOption "diffview-nvim: cycle through diffs for all modified files for any git rev";
|
||||||
setupOpts = mkPluginSetupOption "Fidget" {};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,20 +4,20 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.utility.icon-picker;
|
cfg = config.vim.utility.icon-picker;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["dressing-nvim"];
|
vim.startPlugins = [
|
||||||
|
"icon-picker-nvim"
|
||||||
|
"dressing-nvim"
|
||||||
|
];
|
||||||
|
|
||||||
vim.lazy.plugins.icon-picker-nvim = {
|
vim.pluginRC.icon-picker = entryAnywhere ''
|
||||||
package = "icon-picker-nvim";
|
require("icon-picker").setup({
|
||||||
setupModule = "icon-picker";
|
disable_legacy_commands = true
|
||||||
setupOpts = {
|
})
|
||||||
disable_legacy_commands = true;
|
'';
|
||||||
};
|
|
||||||
|
|
||||||
cmd = ["IconPickerInsert" "IconPickerNormal" "IconPickerYank"];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,25 +3,41 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf mkDefault;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.binds) mkLznBinding;
|
inherit (lib.nvim.binds) mkBinding;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.utility.motion.leap;
|
cfg = config.vim.utility.motion.leap;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim.startPlugins = [
|
||||||
startPlugins = ["vim-repeat"];
|
"leap-nvim"
|
||||||
lazy.plugins.leap-nvim = {
|
"vim-repeat"
|
||||||
package = "leap-nvim";
|
|
||||||
keys = [
|
|
||||||
(mkLznBinding ["n" "o" "x"] cfg.mappings.leapForwardTo "<Plug>(leap-forward-to)" "Leap forward to")
|
|
||||||
(mkLznBinding ["n" "o" "x"] cfg.mappings.leapBackwardTo "<Plug>(leap-backward-to)" "Leap backward to")
|
|
||||||
(mkLznBinding ["n" "o" "x"] cfg.mappings.leapForwardTill "<Plug>(leap-forward-till)" "Leap forward till")
|
|
||||||
(mkLznBinding ["n" "o" "x"] cfg.mappings.leapBackwardTill "<Plug>(leap-backward-till)" "Leap backward till")
|
|
||||||
(mkLznBinding ["n" "o" "x"] cfg.mappings.leapFromWindow "<Plug>(leap-from-window)" "Leap from window")
|
|
||||||
];
|
];
|
||||||
|
|
||||||
after = ''
|
vim.maps.normal = mkMerge [
|
||||||
|
(mkBinding cfg.mappings.leapForwardTo "<Plug>(leap-forward-to)" "Leap forward to")
|
||||||
|
(mkBinding cfg.mappings.leapBackwardTo "<Plug>(leap-backward-to)" "Leap backward to")
|
||||||
|
(mkBinding cfg.mappings.leapFromWindow "<Plug>(leap-from-window)" "Leap from window")
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.maps.operator = mkMerge [
|
||||||
|
(mkBinding cfg.mappings.leapForwardTo "<Plug>(leap-forward-to)" "Leap forward to")
|
||||||
|
(mkBinding cfg.mappings.leapBackwardTo "<Plug>(leap-backward-to)" "Leap backward to")
|
||||||
|
(mkBinding cfg.mappings.leapForwardTill "<Plug>(leap-forward-till)" "Leap forward till")
|
||||||
|
(mkBinding cfg.mappings.leapBackwardTill "<Plug>(leap-backward-till)" "Leap backward till")
|
||||||
|
(mkBinding cfg.mappings.leapFromWindow "<Plug>(leap-from-window)" "Leap from window")
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.maps.visualOnly = mkMerge [
|
||||||
|
(mkBinding cfg.mappings.leapForwardTo "<Plug>(leap-forward-to)" "Leap forward to")
|
||||||
|
(mkBinding cfg.mappings.leapBackwardTo "<Plug>(leap-backward-to)" "Leap backward to")
|
||||||
|
(mkBinding cfg.mappings.leapForwardTill "<Plug>(leap-forward-till)" "Leap forward till")
|
||||||
|
(mkBinding cfg.mappings.leapBackwardTill "<Plug>(leap-backward-till)" "Leap backward till")
|
||||||
|
(mkBinding cfg.mappings.leapFromWindow "<Plug>(leap-from-window)" "Leap from window")
|
||||||
|
];
|
||||||
|
|
||||||
|
vim.pluginRC.leap-nvim = entryAnywhere ''
|
||||||
require('leap').opts = {
|
require('leap').opts = {
|
||||||
max_phase_one_targets = nil,
|
max_phase_one_targets = nil,
|
||||||
highlight_unlabeled_phase_one_targets = false,
|
highlight_unlabeled_phase_one_targets = false,
|
||||||
|
@ -54,8 +70,4 @@ in {
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
binds.whichKey.register."<leader>s" = mkDefault "+Leap";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,22 +9,22 @@ in {
|
||||||
leapForwardTo = mkOption {
|
leapForwardTo = mkOption {
|
||||||
type = nullOr str;
|
type = nullOr str;
|
||||||
description = "Leap forward to";
|
description = "Leap forward to";
|
||||||
default = "<leader>ss";
|
default = "s";
|
||||||
};
|
};
|
||||||
leapBackwardTo = mkOption {
|
leapBackwardTo = mkOption {
|
||||||
type = nullOr str;
|
type = nullOr str;
|
||||||
description = "Leap backward to";
|
description = "Leap backward to";
|
||||||
default = "<leader>sS";
|
default = "S";
|
||||||
};
|
};
|
||||||
leapForwardTill = mkOption {
|
leapForwardTill = mkOption {
|
||||||
type = nullOr str;
|
type = nullOr str;
|
||||||
description = "Leap forward till";
|
description = "Leap forward till";
|
||||||
default = "<leader>sx";
|
default = "x";
|
||||||
};
|
};
|
||||||
leapBackwardTill = mkOption {
|
leapBackwardTill = mkOption {
|
||||||
type = nullOr str;
|
type = nullOr str;
|
||||||
description = "Leap backward till";
|
description = "Leap backward till";
|
||||||
default = "<leader>sX";
|
default = "X";
|
||||||
};
|
};
|
||||||
leapFromWindow = mkOption {
|
leapFromWindow = mkOption {
|
||||||
type = nullOr str;
|
type = nullOr str;
|
||||||
|
|
|
@ -3,51 +3,41 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
|
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding;
|
||||||
inherit (lib.nvim.dag) entryAnywhere;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
|
|
||||||
cfg = config.vim.utility.surround;
|
cfg = config.vim.utility.surround;
|
||||||
mkLznKey = mode: key: {
|
self = import ./surround.nix {inherit lib config;};
|
||||||
inherit key mode;
|
mappingDefinitions = self.options.vim.utility.surround.mappings;
|
||||||
};
|
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["nvim-surround"];
|
startPlugins = [
|
||||||
pluginRC.surround = entryAnywhere "require('nvim-surround').setup(${toLuaObject cfg.setupOpts})";
|
"nvim-surround"
|
||||||
|
];
|
||||||
|
|
||||||
lazy.plugins.nvim-surround = {
|
pluginRC.surround = entryAnywhere ''
|
||||||
package = "nvim-surround";
|
require('nvim-surround').setup()
|
||||||
setupModule = "nvim-surround";
|
'';
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
|
|
||||||
keys =
|
maps = {
|
||||||
[
|
insert = mkMerge [
|
||||||
(mkLznKey ["i"] cfg.setupOpts.keymaps.insert)
|
(mkIf (mappings.insert != null) (mkSetBinding mappings.insert "<Plug>(nvim-surround-insert)"))
|
||||||
(mkLznKey ["i"] cfg.setupOpts.keymaps.insert_line)
|
(mkIf (mappings.insertLine != null) (mkSetBinding mappings.insertLine "<Plug>(nvim-surround-insert-line)"))
|
||||||
(mkLznKey ["x"] cfg.setupOpts.keymaps.visual)
|
];
|
||||||
(mkLznKey ["x"] cfg.setupOpts.keymaps.visual_line)
|
normal = mkMerge [
|
||||||
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal)
|
(mkIf (mappings.normal != null) (mkSetBinding mappings.normal "<Plug>(nvim-surround-normal)"))
|
||||||
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal_cur)
|
(mkIf (mappings.normalCur != null) (mkSetBinding mappings.normalCur "<Plug>(nvim-surround-normal-cur)"))
|
||||||
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal_line)
|
(mkIf (mappings.normalLine != null) (mkSetBinding mappings.normalLine "<Plug>(nvim-surround-normal-line)"))
|
||||||
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal_cur_line)
|
(mkIf (mappings.normalCurLine != null) (mkSetBinding mappings.normalCurLine "<Plug>(nvim-surround-normal-cur-line)"))
|
||||||
(mkLznKey ["n"] cfg.setupOpts.keymaps.delete)
|
(mkIf (mappings.delete != null) (mkSetBinding mappings.delete "<Plug>(nvim-surround-delete)"))
|
||||||
(mkLznKey ["n"] cfg.setupOpts.keymaps.change)
|
(mkIf (mappings.change != null) (mkSetBinding mappings.change "<Plug>(nvim-surround-change)"))
|
||||||
(mkLznKey ["n"] cfg.setupOpts.keymaps.change_line)
|
];
|
||||||
]
|
visualOnly = mkMerge [
|
||||||
++ map (mkLznKey ["n" "i" "v"]) [
|
(mkIf (mappings.visual != null) (mkSetBinding mappings.visual "<Plug>(nvim-surround-visual)"))
|
||||||
"<Plug>(nvim-surround-insert)"
|
(mkIf (mappings.visualLine != null) (mkSetBinding mappings.visualLine "<Plug>(nvim-surround-visual-line)"))
|
||||||
"<Plug>(nvim-surround-insert-line)"
|
|
||||||
"<Plug>(nvim-surround-normal)"
|
|
||||||
"<Plug>(nvim-surround-normal-cur)"
|
|
||||||
"<Plug>(nvim-surround-normal-line)"
|
|
||||||
"<Plug>(nvim-surround-normal-cur-line)"
|
|
||||||
"<Plug>(nvim-surround-visual)"
|
|
||||||
"<Plug>(nvim-surround-visual-line)"
|
|
||||||
"<Plug>(nvim-surround-delete)"
|
|
||||||
"<Plug>(nvim-surround-change)"
|
|
||||||
"<Plug>(nvim-surround-change-line)"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,65 +3,88 @@
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
|
inherit (lib.modules) mkIf mkDefault;
|
||||||
inherit (lib.options) mkOption;
|
inherit (lib.options) mkOption;
|
||||||
inherit (lib.types) bool str;
|
inherit (lib.types) bool nullOr str;
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
||||||
|
|
||||||
cfg = config.vim.utility.surround;
|
|
||||||
vendoredKeybinds = {
|
|
||||||
insert = "<C-g>z";
|
|
||||||
insert_line = "<C-g>Z";
|
|
||||||
normal = "gz";
|
|
||||||
normal_cur = "gZ";
|
|
||||||
normal_line = "gzz";
|
|
||||||
normal_cur_line = "gZZ";
|
|
||||||
visual = "gz";
|
|
||||||
visual_line = "gZ";
|
|
||||||
delete = "gzd";
|
|
||||||
change = "gzr";
|
|
||||||
change_line = "gZR";
|
|
||||||
};
|
|
||||||
|
|
||||||
mkKeymapOption = name: default:
|
|
||||||
mkOption {
|
|
||||||
description = "keymap for ${name}";
|
|
||||||
type = str;
|
|
||||||
default =
|
|
||||||
if cfg.useVendoredKeybindings
|
|
||||||
then vendoredKeybinds.${name}
|
|
||||||
else default;
|
|
||||||
};
|
|
||||||
in {
|
in {
|
||||||
options.vim.utility.surround = {
|
options.vim.utility.surround = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
type = bool;
|
type = bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = "nvim-surround: add/change/delete surrounding delimiter pairs with ease. Note that the default mappings deviate from upstreeam to avoid conflicts with nvim-leap.";
|
||||||
nvim-surround: add/change/delete surrounding delimiter pairs with ease.
|
|
||||||
Note that the default mappings deviate from upstreeam to avoid conflicts
|
|
||||||
with nvim-leap.
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
setupOpts = mkPluginSetupOption "nvim-surround" {
|
|
||||||
keymaps = {
|
|
||||||
insert = mkKeymapOption "insert" "<C-g>s";
|
|
||||||
insert_line = mkKeymapOption "insert_line" "<C-g>S";
|
|
||||||
normal = mkKeymapOption "normal" "ys";
|
|
||||||
normal_cur = mkKeymapOption "normal_cur" "yss";
|
|
||||||
normal_line = mkKeymapOption "normal_line" "yS";
|
|
||||||
normal_cur_line = mkKeymapOption "normal_cur_line" "ySS";
|
|
||||||
visual = mkKeymapOption "visual" "S";
|
|
||||||
visual_line = mkKeymapOption "visual_line" "gS";
|
|
||||||
delete = mkKeymapOption "delete" "ds";
|
|
||||||
change = mkKeymapOption "change" "cs";
|
|
||||||
change_line = mkKeymapOption "change_line" "cS";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
useVendoredKeybindings = mkOption {
|
useVendoredKeybindings = mkOption {
|
||||||
type = bool;
|
type = bool;
|
||||||
default = true;
|
default = true;
|
||||||
description = "Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap";
|
description = "Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap";
|
||||||
};
|
};
|
||||||
|
mappings = {
|
||||||
|
insert = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "<C-g>z";
|
||||||
|
description = "Add surround character around the cursor";
|
||||||
|
};
|
||||||
|
insertLine = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "<C-g>Z";
|
||||||
|
description = "Add surround character around the cursor on new lines";
|
||||||
|
};
|
||||||
|
normal = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gz";
|
||||||
|
description = "Surround motion with character";
|
||||||
|
};
|
||||||
|
normalCur = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gZ";
|
||||||
|
description = "Surround motion with character on new lines";
|
||||||
|
};
|
||||||
|
normalLine = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gzz";
|
||||||
|
description = "Surround line with character";
|
||||||
|
};
|
||||||
|
normalCurLine = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gZZ";
|
||||||
|
description = "Surround line with character on new lines";
|
||||||
|
};
|
||||||
|
visual = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gz";
|
||||||
|
description = "Surround selection with character";
|
||||||
|
};
|
||||||
|
visualLine = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gZ";
|
||||||
|
description = "Surround selection with character on new lines";
|
||||||
|
};
|
||||||
|
delete = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gzd";
|
||||||
|
description = "Delete surrounding character";
|
||||||
|
};
|
||||||
|
change = mkOption {
|
||||||
|
type = nullOr str;
|
||||||
|
default = "gzr";
|
||||||
|
description = "Change surrounding character";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config.vim.utility.surround = let
|
||||||
|
cfg = config.vim.utility.surround;
|
||||||
|
in {
|
||||||
|
mappings = mkIf (! cfg.useVendoredKeybindings) (mkDefault {
|
||||||
|
insert = null;
|
||||||
|
insertLine = null;
|
||||||
|
normal = null;
|
||||||
|
normalCur = null;
|
||||||
|
normalLine = null;
|
||||||
|
normalCurLine = null;
|
||||||
|
visual = null;
|
||||||
|
visualLine = null;
|
||||||
|
delete = null;
|
||||||
|
change = null;
|
||||||
|
});
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,72 +1,63 @@
|
||||||
{
|
{
|
||||||
options,
|
|
||||||
config,
|
config,
|
||||||
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.binds) addDescriptionsToMappings;
|
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
inherit (lib.lists) optionals;
|
inherit (lib.nvim.binds) pushDownDefault;
|
||||||
inherit (lib.nvim.binds) pushDownDefault mkSetLznBinding;
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
|
|
||||||
cfg = config.vim.telescope;
|
cfg = config.vim.telescope;
|
||||||
mappingDefinitions = options.vim.telescope.mappings;
|
self = import ./telescope.nix {inherit pkgs lib;};
|
||||||
|
mappingDefinitions = self.options.vim.telescope.mappings;
|
||||||
|
|
||||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["plenary-nvim"];
|
startPlugins = [
|
||||||
|
"telescope"
|
||||||
|
"plenary-nvim"
|
||||||
|
];
|
||||||
|
|
||||||
lazy.plugins.telescope = {
|
maps.normal = mkMerge [
|
||||||
package = "telescope";
|
(mkSetBinding mappings.findFiles "<cmd> Telescope find_files<CR>")
|
||||||
setupModule = "telescope";
|
(mkSetBinding mappings.liveGrep "<cmd> Telescope live_grep<CR>")
|
||||||
inherit (cfg) setupOpts;
|
(mkSetBinding mappings.buffers "<cmd> Telescope buffers<CR>")
|
||||||
after = ''
|
(mkSetBinding mappings.helpTags "<cmd> Telescope help_tags<CR>")
|
||||||
local telescope = require("telescope")
|
(mkSetBinding mappings.open "<cmd> Telescope<CR>")
|
||||||
${optionalString config.vim.ui.noice.enable "telescope.load_extension('noice')"}
|
(mkSetBinding mappings.resume "<cmd> Telescope resume<CR>")
|
||||||
${optionalString config.vim.notify.nvim-notify.enable "telescope.load_extension('notify')"}
|
|
||||||
${optionalString config.vim.projects.project-nvim.enable "telescope.load_extension('projects')"}
|
|
||||||
'';
|
|
||||||
|
|
||||||
cmd = ["Telescope"];
|
(mkSetBinding mappings.gitCommits "<cmd> Telescope git_commits<CR>")
|
||||||
|
(mkSetBinding mappings.gitBufferCommits "<cmd> Telescope git_bcommits<CR>")
|
||||||
|
(mkSetBinding mappings.gitBranches "<cmd> Telescope git_branches<CR>")
|
||||||
|
(mkSetBinding mappings.gitStatus "<cmd> Telescope git_status<CR>")
|
||||||
|
(mkSetBinding mappings.gitStash "<cmd> Telescope git_stash<CR>")
|
||||||
|
|
||||||
keys =
|
(mkIf config.vim.lsp.enable (mkMerge [
|
||||||
[
|
(mkSetBinding mappings.lspDocumentSymbols "<cmd> Telescope lsp_document_symbols<CR>")
|
||||||
(mkSetLznBinding mappings.findFiles "<cmd> Telescope find_files<CR>")
|
(mkSetBinding mappings.lspWorkspaceSymbols "<cmd> Telescope lsp_workspace_symbols<CR>")
|
||||||
(mkSetLznBinding mappings.liveGrep "<cmd> Telescope live_grep<CR>")
|
|
||||||
(mkSetLznBinding mappings.buffers "<cmd> Telescope buffers<CR>")
|
|
||||||
(mkSetLznBinding mappings.helpTags "<cmd> Telescope help_tags<CR>")
|
|
||||||
(mkSetLznBinding mappings.open "<cmd> Telescope<CR>")
|
|
||||||
|
|
||||||
(mkSetLznBinding mappings.gitCommits "<cmd> Telescope git_commits<CR>")
|
(mkSetBinding mappings.lspReferences "<cmd> Telescope lsp_references<CR>")
|
||||||
(mkSetLznBinding mappings.gitBufferCommits "<cmd> Telescope git_bcommits<CR>")
|
(mkSetBinding mappings.lspImplementations "<cmd> Telescope lsp_implementations<CR>")
|
||||||
(mkSetLznBinding mappings.gitBranches "<cmd> Telescope git_branches<CR>")
|
(mkSetBinding mappings.lspDefinitions "<cmd> Telescope lsp_definitions<CR>")
|
||||||
(mkSetLznBinding mappings.gitStatus "<cmd> Telescope git_status<CR>")
|
(mkSetBinding mappings.lspTypeDefinitions "<cmd> Telescope lsp_type_definitions<CR>")
|
||||||
(mkSetLznBinding mappings.gitStash "<cmd> Telescope git_stash<CR>")
|
(mkSetBinding mappings.diagnostics "<cmd> Telescope diagnostics<CR>")
|
||||||
]
|
]))
|
||||||
++ (optionals config.vim.lsp.enable [
|
|
||||||
(mkSetLznBinding mappings.lspDocumentSymbols "<cmd> Telescope lsp_document_symbols<CR>")
|
|
||||||
(mkSetLznBinding mappings.lspWorkspaceSymbols "<cmd> Telescope lsp_workspace_symbols<CR>")
|
|
||||||
|
|
||||||
(mkSetLznBinding mappings.lspReferences "<cmd> Telescope lsp_references<CR>")
|
(
|
||||||
(mkSetLznBinding mappings.lspImplementations "<cmd> Telescope lsp_implementations<CR>")
|
mkIf config.vim.treesitter.enable
|
||||||
(mkSetLznBinding mappings.lspDefinitions "<cmd> Telescope lsp_definitions<CR>")
|
(mkSetBinding mappings.treesitter "<cmd> Telescope treesitter<CR>")
|
||||||
(mkSetLznBinding mappings.lspTypeDefinitions "<cmd> Telescope lsp_type_definitions<CR>")
|
|
||||||
(mkSetLznBinding mappings.diagnostics "<cmd> Telescope diagnostics<CR>")
|
|
||||||
])
|
|
||||||
++ (
|
|
||||||
optionals config.vim.treesitter.enable [
|
|
||||||
(mkSetLznBinding mappings.treesitter "<cmd> Telescope treesitter<CR>")
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
++ (
|
|
||||||
optionals config.vim.projects.project-nvim.enable [
|
(
|
||||||
(mkSetLznBinding mappings.findProjects "<cmd Telescope projects<CR>")
|
mkIf config.vim.projects.project-nvim.enable
|
||||||
]
|
(mkSetBinding mappings.findProjects "<cmd> Telescope projects<CR>")
|
||||||
);
|
)
|
||||||
};
|
];
|
||||||
|
|
||||||
binds.whichKey.register = pushDownDefault {
|
binds.whichKey.register = pushDownDefault {
|
||||||
"<leader>f" = "+Telescope";
|
"<leader>f" = "+Telescope";
|
||||||
|
@ -75,6 +66,29 @@ in {
|
||||||
"<leader>fv" = "Telescope Git";
|
"<leader>fv" = "Telescope Git";
|
||||||
"<leader>fvc" = "Commits";
|
"<leader>fvc" = "Commits";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
pluginRC.telescope = entryAnywhere ''
|
||||||
|
local telescope = require('telescope')
|
||||||
|
telescope.setup(${toLuaObject cfg.setupOpts})
|
||||||
|
|
||||||
|
${
|
||||||
|
if config.vim.ui.noice.enable
|
||||||
|
then "telescope.load_extension('noice')"
|
||||||
|
else ""
|
||||||
|
}
|
||||||
|
|
||||||
|
${
|
||||||
|
if config.vim.notify.nvim-notify.enable
|
||||||
|
then "telescope.load_extension('notify')"
|
||||||
|
else ""
|
||||||
|
}
|
||||||
|
|
||||||
|
${
|
||||||
|
if config.vim.projects.project-nvim.enable
|
||||||
|
then "telescope.load_extension('projects')"
|
||||||
|
else ""
|
||||||
|
}
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
{lib, ...}: let
|
|
||||||
inherit (lib.modules) mkRenamedOptionModule;
|
|
||||||
inherit (lib.options) mkOption mkEnableOption;
|
|
||||||
inherit (lib.nvim.types) luaInline;
|
|
||||||
inherit (lib.nvim.binds) mkMappingOption;
|
|
||||||
inherit (lib.generators) mkLuaInline;
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
(mkRenamedOptionModule ["vim" "visuals" "cellularAutomaton"] ["vim" "visuals" "cellular-automaton"])
|
|
||||||
];
|
|
||||||
|
|
||||||
options.vim.visuals.cellular-automaton = {
|
|
||||||
enable = mkEnableOption "cellular-automaton to help you cope with stubborn code [cellular-automaton]";
|
|
||||||
|
|
||||||
mappings = {
|
|
||||||
makeItRain = mkMappingOption "Make it rain [cellular-automaton]" "<leader>fml";
|
|
||||||
};
|
|
||||||
|
|
||||||
animation = {
|
|
||||||
register = mkEnableOption "registering configured animation(s) automatically" // {default = true;};
|
|
||||||
setup = mkOption {
|
|
||||||
type = luaInline;
|
|
||||||
default = mkLuaInline ''
|
|
||||||
local ca_config = {
|
|
||||||
fps = 50,
|
|
||||||
name = 'slide',
|
|
||||||
}
|
|
||||||
|
|
||||||
-- init function is invoked only once at the start
|
|
||||||
-- config.init = function (grid)
|
|
||||||
--
|
|
||||||
-- end
|
|
||||||
|
|
||||||
-- update function
|
|
||||||
ca_config.update = function (grid)
|
|
||||||
for i = 1, #grid do
|
|
||||||
local prev = grid[i][#(grid[i])]
|
|
||||||
for j = 1, #(grid[i]) do
|
|
||||||
grid[i][j], prev = prev, grid[i][j]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
'';
|
|
||||||
description = ''
|
|
||||||
Configuration used to generate an animation to be registered.
|
|
||||||
|
|
||||||
The final value for `ca_config` will be used to register a new
|
|
||||||
animation using `require("cellular-automaton").register_animation(ca_config)`
|
|
||||||
|
|
||||||
::: {.warning}
|
|
||||||
`ca_config` **must** eval to a valid Lua table. nvf does not and cannot
|
|
||||||
perform any kind of validation on your Lua code, so bogus values will
|
|
||||||
result in errors when the animation is registered.
|
|
||||||
:::
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.modules) mkIf;
|
|
||||||
inherit (lib.strings) optionalString;
|
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
inherit (lib.nvim.dag) entryAnywhere entryAfter;
|
|
||||||
inherit (lib.nvim.binds) mkBinding;
|
|
||||||
|
|
||||||
cfg = config.vim.visuals.cellular-automaton;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
vim = {
|
|
||||||
startPlugins = ["cellular-automaton"];
|
|
||||||
|
|
||||||
maps.normal = mkBinding cfg.mappings.makeItRain "<cmd>CellularAutomaton make_it_rain<CR>" "Make it rain";
|
|
||||||
|
|
||||||
pluginRC = {
|
|
||||||
# XXX: This has no error handling. User can set
|
|
||||||
# `animation.setup` to a bogus value, and we would
|
|
||||||
# have an error in our hands. I don't think there
|
|
||||||
# is a good way to check for errors, so I'm leaving
|
|
||||||
# it like this under the assumption that the user
|
|
||||||
# will not mess it up for no reason.
|
|
||||||
cellular-automaton-anim = entryAnywhere (optionalString cfg.animation.register ''
|
|
||||||
-- Coerce user animation config into pluginRC
|
|
||||||
${toLuaObject cfg.animation.setup}
|
|
||||||
'');
|
|
||||||
|
|
||||||
cellular-automaton = entryAfter ["cellular-automaton-anim"] ''
|
|
||||||
-- Register the animation
|
|
||||||
require("cellular-automaton").register_animation(ca_config)
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./config.nix
|
|
||||||
./cellular-automaton.nix
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
{lib, ...}: let
|
|
||||||
inherit (lib.modules) mkRemovedOptionModule;
|
|
||||||
inherit (lib.options) mkOption mkEnableOption;
|
|
||||||
inherit (lib.types) submodule attrs attrsOf;
|
|
||||||
inherit (lib.nvim.types) mkPluginSetupOption;
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
(mkRemovedOptionModule ["vim" "visuals" "smoothScroll"] ''
|
|
||||||
`vim.visuals.smoothScroll` has been removed. You may consider enabling the
|
|
||||||
option `vim.visuals.cinnamon-nvim` to repliace previous smooth scrolling
|
|
||||||
behaviour.
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
|
|
||||||
options.vim.visuals.cinnamon-nvim = {
|
|
||||||
enable = mkEnableOption "smooth scrolling for ANY command [cinnamon-nvim]";
|
|
||||||
setupOpts = mkPluginSetupOption "cinnamon.nvim" {
|
|
||||||
options = mkOption {
|
|
||||||
type = attrs;
|
|
||||||
default = {
|
|
||||||
# Defaults provided for the sake of documentation only!
|
|
||||||
# Who would've guessed setupOpts.options would be confusing?
|
|
||||||
mode = "cursor";
|
|
||||||
count_only = false;
|
|
||||||
};
|
|
||||||
description = "Scroll options";
|
|
||||||
};
|
|
||||||
|
|
||||||
keymaps = {
|
|
||||||
basic = mkEnableOption "basic animation keymaps";
|
|
||||||
extra = mkEnableOption "extra animation keymaps";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.modules) mkIf;
|
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
inherit (lib.nvim.dag) entryAnywhere;
|
|
||||||
|
|
||||||
cfg = config.vim.visuals.cinnamon-nvim;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
vim = {
|
|
||||||
startPlugins = ["cinnamon-nvim"];
|
|
||||||
|
|
||||||
pluginRC.cursorline = entryAnywhere ''
|
|
||||||
require("cinnamon").setup(${toLuaObject cfg.setupOpts})
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
imports = [
|
|
||||||
./config.nix
|
|
||||||
./cinnamon-nvim.nix
|
|
||||||
];
|
|
||||||
}
|
|
118
modules/plugins/visuals/config.nix
Normal file
118
modules/plugins/visuals/config.nix
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
|
inherit (lib.trivial) boolToString;
|
||||||
|
inherit (lib.nvim.binds) mkBinding;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
|
|
||||||
|
cfg = config.vim.visuals;
|
||||||
|
in {
|
||||||
|
config = mkIf cfg.enable (mkMerge [
|
||||||
|
(mkIf cfg.indentBlankline.enable {
|
||||||
|
vim.startPlugins = ["indent-blankline"];
|
||||||
|
vim.pluginRC.indent-blankline = entryAnywhere ''
|
||||||
|
require("ibl").setup(${toLuaObject cfg.indentBlankline.setupOpts})
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.cursorline.enable {
|
||||||
|
vim.startPlugins = ["nvim-cursorline"];
|
||||||
|
vim.pluginRC.cursorline = entryAnywhere ''
|
||||||
|
require('nvim-cursorline').setup {
|
||||||
|
cursorline = {
|
||||||
|
timeout = ${toString cfg.cursorline.lineTimeout},
|
||||||
|
number = ${boolToString (!cfg.cursorline.lineNumbersOnly)},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.nvimWebDevicons.enable {
|
||||||
|
vim.startPlugins = ["nvim-web-devicons"];
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.scrollBar.enable {
|
||||||
|
vim.startPlugins = ["scrollbar-nvim"];
|
||||||
|
vim.pluginRC.scrollBar = entryAnywhere ''
|
||||||
|
require('scrollbar').setup{
|
||||||
|
excluded_filetypes = {
|
||||||
|
'prompt',
|
||||||
|
'TelescopePrompt',
|
||||||
|
'noice',
|
||||||
|
'NvimTree',
|
||||||
|
'alpha',
|
||||||
|
'notify',
|
||||||
|
'Navbuddy'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.smoothScroll.enable {
|
||||||
|
vim.startPlugins = ["cinnamon-nvim"];
|
||||||
|
vim.pluginRC.smoothScroll = entryAnywhere ''
|
||||||
|
require('cinnamon').setup()
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.cellularAutomaton.enable {
|
||||||
|
vim.startPlugins = ["cellular-automaton"];
|
||||||
|
|
||||||
|
vim.maps.normal = mkBinding cfg.cellularAutomaton.mappings.makeItRain "<cmd>CellularAutomaton make_it_rain<CR>" "Make it rain";
|
||||||
|
|
||||||
|
vim.pluginRC.cellularAUtomaton = entryAnywhere ''
|
||||||
|
local config = {
|
||||||
|
fps = 50,
|
||||||
|
name = 'slide',
|
||||||
|
}
|
||||||
|
|
||||||
|
-- init function is invoked only once at the start
|
||||||
|
-- config.init = function (grid)
|
||||||
|
--
|
||||||
|
-- end
|
||||||
|
|
||||||
|
-- update function
|
||||||
|
config.update = function (grid)
|
||||||
|
for i = 1, #grid do
|
||||||
|
local prev = grid[i][#(grid[i])]
|
||||||
|
for j = 1, #(grid[i]) do
|
||||||
|
grid[i][j], prev = prev, grid[i][j]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
require("cellular-automaton").register_animation(config)
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.highlight-undo.enable {
|
||||||
|
vim.startPlugins = ["highlight-undo"];
|
||||||
|
vim.pluginRC.highlight-undo = entryAnywhere ''
|
||||||
|
require('highlight-undo').setup({
|
||||||
|
duration = ${toString cfg.highlight-undo.duration},
|
||||||
|
highlight_for_count = ${boolToString cfg.highlight-undo.highlightForCount},
|
||||||
|
undo = {
|
||||||
|
hlgroup = ${cfg.highlight-undo.undo.hlGroup},
|
||||||
|
mode = 'n',
|
||||||
|
lhs = 'u',
|
||||||
|
map = 'undo',
|
||||||
|
opts = {}
|
||||||
|
},
|
||||||
|
|
||||||
|
redo = {
|
||||||
|
hlgroup = ${cfg.highlight-undo.redo.hlGroup},
|
||||||
|
mode = 'n',
|
||||||
|
lhs = '<C-r>',
|
||||||
|
map = 'redo',
|
||||||
|
opts = {}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
|
@ -1,20 +1,7 @@
|
||||||
{lib, ...}: let
|
{...}: {
|
||||||
inherit (lib.modules) mkRemovedOptionModule;
|
|
||||||
in {
|
|
||||||
imports = [
|
imports = [
|
||||||
(mkRemovedOptionModule ["vim" "visuals" "enable"] ''
|
./config.nix
|
||||||
As top-level toggles are being deprecated, you are encouraged to handle plugin
|
./visuals.nix
|
||||||
toggles under individual options.
|
./fidget
|
||||||
'')
|
|
||||||
|
|
||||||
./cellular-automaton
|
|
||||||
./cinnamon-nvim
|
|
||||||
./fidget-nvim
|
|
||||||
./highlight-undo
|
|
||||||
./indent-blankline
|
|
||||||
./nvim-cursorline
|
|
||||||
./nvim-scrollbar
|
|
||||||
./nvim-web-devicons
|
|
||||||
./tiny-devicons-auto-colors
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib.modules) mkIf;
|
|
||||||
|
|
||||||
cfg = config.vim.visuals.fidget-nvim;
|
|
||||||
in {
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
vim.lazy.plugins.fidget-nvim = {
|
|
||||||
package = "fidget-nvim";
|
|
||||||
setupModule = "fidget";
|
|
||||||
event = "LspAttach";
|
|
||||||
inherit (cfg) setupOpts;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
19
modules/plugins/visuals/fidget/config.nix
Normal file
19
modules/plugins/visuals/fidget/config.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.nvim.lua) toLuaObject;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
|
cfg = config.vim.visuals.fidget-nvim;
|
||||||
|
in {
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
vim.startPlugins = ["fidget-nvim"];
|
||||||
|
|
||||||
|
vim.pluginRC.fidget-nvim = entryAnywhere ''
|
||||||
|
require'fidget'.setup(${toLuaObject cfg.setupOpts})
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue