mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2024-11-14 03:45:59 +01:00
Compare commits
11 commits
e20034c86a
...
3361be66f3
Author | SHA1 | Date | |
---|---|---|---|
|
3361be66f3 | ||
|
e9f27760b3 | ||
|
b5201df699 | ||
|
2bbda8aa51 | ||
|
d61341e1e9 | ||
|
2da519eebb | ||
|
780d207fa3 | ||
|
4923191b42 | ||
|
47cff4a8d4 | ||
|
71c17cd843 | ||
|
6fb524a256 |
86 changed files with 484 additions and 503 deletions
|
@ -5,5 +5,4 @@ configuring/custom-package.md
|
||||||
configuring/custom-plugins.md
|
configuring/custom-plugins.md
|
||||||
configuring/languages.md
|
configuring/languages.md
|
||||||
configuring/dags.md
|
configuring/dags.md
|
||||||
configuring/dag-entries.md
|
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,38 +1,16 @@
|
||||||
# Configuring {#sec-configuring-plugins}
|
# Configuring {#sec-configuring-plugins}
|
||||||
|
|
||||||
Just making the plugin to your Neovim configuration available might not always
|
Just making the plugin to your Neovim configuration available might not always
|
||||||
be enough. In that case, you can write custom lua config using either
|
be enough. In that case, you can write custom vimscript or lua config, using
|
||||||
`config.vim.extraPlugins` (which has the `setup` field) or
|
either `config.vim.configRC` or `config.vim.luaConfigRC` respectively. Both of
|
||||||
`config.vim.luaConfigRC`. The first option uses an attribute set, which maps DAG
|
these options are attribute sets, and you need to give the configuration you're
|
||||||
section names to a custom type, which has the fields `package`, `after`,
|
adding some name, like this:
|
||||||
`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:
|
|
||||||
|
|
||||||
```nix
|
|
||||||
config.vim.extraPlugins = with pkgs.vimPlugins; {
|
|
||||||
aerial = {
|
|
||||||
package = aerial-nvim;
|
|
||||||
setup = "require('aerial').setup {}";
|
|
||||||
};
|
|
||||||
|
|
||||||
harpoon = {
|
|
||||||
package = harpoon;
|
|
||||||
setup = "require('harpoon').setup {}";
|
|
||||||
after = ["aerial"]; # place harpoon configuration after aerial
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
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.
|
|
||||||
For example:
|
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
# this will create an "aquarium" section in your init.lua with the contents of your custom config
|
# this will create an "aquarium" section in your init.vim with the contents of your custom config
|
||||||
# which will be *appended* to the rest of your configuration, inside your init.vim
|
# which will be *appended* to the rest of your configuration, inside your init.vim
|
||||||
config.vim.luaConfigRC.aquarium = "vim.cmd('colorscheme aquiarum')";
|
config.vim.configRC.aquarium = "colorscheme aquiarum";
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
# DAG entries in nvf {#ch-dag-entries}
|
|
||||||
|
|
||||||
From the previous chapter, it should be clear that DAGs are useful, because you
|
|
||||||
can add code that relies on other code. However, if you don't know what the
|
|
||||||
entries are called, it's hard to do that, so here is a list of the internal
|
|
||||||
entries in nvf:
|
|
||||||
|
|
||||||
`vim.luaConfigRC` (top-level DAG):
|
|
||||||
|
|
||||||
1. (`luaConfigPre`) - not a part of the actual DAG, instead, it's simply
|
|
||||||
inserted before the rest of the DAG
|
|
||||||
2. `globalsScript` - used to set globals defined in `vim.globals`
|
|
||||||
3. `basic` - used to set basic configuration options
|
|
||||||
4. `theme` - used to set up the theme, which has to be done before other plugins
|
|
||||||
5. `pluginConfigs` - the result of the nested `vim.pluginRC` (internal option,
|
|
||||||
see the [Custom Plugins](/index.xhtml#ch-custom-plugins) page for adding your own
|
|
||||||
plugins) DAG, used to set up internal plugins
|
|
||||||
6. `extraPluginConfigs` - the result of `vim.extraPlugins`, which is not a
|
|
||||||
direct DAG, but is converted to, and resolved as one internally
|
|
||||||
7. `mappings` - the result of `vim.maps`
|
|
|
@ -7,7 +7,7 @@ type which is borrowed from home-manager's extended library. This type is most
|
||||||
used for topologically sorting strings. The DAG type allows the attribute set
|
used for topologically sorting strings. The DAG type allows the attribute set
|
||||||
entries to express dependency relations among themselves. This can, for
|
entries to express dependency relations among themselves. This can, for
|
||||||
example, be used to control the order of configuration sections in your
|
example, be used to control the order of configuration sections in your
|
||||||
`luaConfigRC`.
|
`configRC` or `luaConfigRC`.
|
||||||
|
|
||||||
The below section, mostly taken from the [home-manager
|
The below section, mostly taken from the [home-manager
|
||||||
manual](https://raw.githubusercontent.com/nix-community/home-manager/master/docs/manual/writing-modules/types.md)
|
manual](https://raw.githubusercontent.com/nix-community/home-manager/master/docs/manual/writing-modules/types.md)
|
||||||
|
|
|
@ -2,28 +2,6 @@
|
||||||
|
|
||||||
Release notes for release 0.7
|
Release notes for release 0.7
|
||||||
|
|
||||||
## Breaking Changes and Migration Guide {#sec-breaking-changes-and-migration-guide-0-7}
|
|
||||||
|
|
||||||
In v0.7 we are removing `vim.configRC` in favor of making `vim.luaConfigRC` the
|
|
||||||
top-level DAG, and thereby making the entire configuration Lua based. This
|
|
||||||
change introduces a few breaking changes:
|
|
||||||
|
|
||||||
[DAG entries in nvf manual]: /index.xhtml#ch-dag-entries
|
|
||||||
|
|
||||||
- `vim.configRC` has been removed, which means that you have to convert all of
|
|
||||||
your custom vimscript-based configuration to Lua. As for how to do that, you
|
|
||||||
will have to consult the Neovim documentation and your search engine.
|
|
||||||
- After migrating your Vimscript-based configuration to Lua, you might not be
|
|
||||||
able to use the same entry names in `vim.luaConfigRC`, because those have also
|
|
||||||
slightly changed. See the new [DAG entries in nvf manual] for more details.
|
|
||||||
|
|
||||||
**Why?**
|
|
||||||
|
|
||||||
Neovim being an aggressive refactor of Vim, is designed to be mainly Lua based;
|
|
||||||
making good use of its extensive Lua API. Additionally, Vimscript is slow and
|
|
||||||
brings unnecessary performance overhead while working with different
|
|
||||||
configuration formats.
|
|
||||||
|
|
||||||
## Changelog {#sec-release-0.7-changelog}
|
## Changelog {#sec-release-0.7-changelog}
|
||||||
|
|
||||||
[ItsSorae](https://github.com/ItsSorae):
|
[ItsSorae](https://github.com/ItsSorae):
|
||||||
|
@ -34,8 +12,8 @@ configuration formats.
|
||||||
[frothymarrow](https://github.com/frothymarrow):
|
[frothymarrow](https://github.com/frothymarrow):
|
||||||
|
|
||||||
- Modified type for
|
- Modified type for
|
||||||
[](#opt-vim.visuals.fidget-nvim.setupOpts.progress.display.overrides) from
|
[vim.visuals.fidget-nvim.setupOpts.progress.display.overrides](#opt-vim.visuals.fidget-nvim.setupOpts.progress.display.overrides)
|
||||||
`anything` to a `submodule` for better type checking.
|
from `anything` to a `submodule` for better type checking.
|
||||||
|
|
||||||
- Fix null `vim.lsp.mappings` generating an error and not being filtered out.
|
- Fix null `vim.lsp.mappings` generating an error and not being filtered out.
|
||||||
|
|
||||||
|
@ -43,32 +21,25 @@ configuration formats.
|
||||||
group for `Normal`, `NormalFloat`, `LineNr`, `SignColumn` and optionally
|
group for `Normal`, `NormalFloat`, `LineNr`, `SignColumn` and optionally
|
||||||
`NvimTreeNormal` to `none`.
|
`NvimTreeNormal` to `none`.
|
||||||
|
|
||||||
- Fix [](#opt-vim.ui.smartcolumn.setupOpts.custom_colorcolumn) using the wrong
|
- Fix
|
||||||
type `int` instead of the expected type `string`.
|
[vim.ui.smartcolumn.setupOpts.custom_colorcolumn](#opt-vim.ui.smartcolumn.setupOpts.custom_colorcolumn)
|
||||||
|
using the wrong type `int` instead of the expected type `string`.
|
||||||
|
|
||||||
|
- Fix unused src and version attributes in `buildPlug`.
|
||||||
|
|
||||||
[horriblename](https://github.com/horriblename):
|
[horriblename](https://github.com/horriblename):
|
||||||
|
|
||||||
- Fix broken treesitter-context keybinds in visual mode
|
- Fix broken treesitter-context keybinds in visual mode
|
||||||
- Deprecate use of `__empty` to define empty tables in Lua. Empty attrset are no
|
- Deprecate use of `__empty` to define empty tables in lua. Empty attrset are no
|
||||||
longer filtered and thus should be used instead.
|
longer filtered and thus should be used instead.
|
||||||
- Add dap-go for better dap configurations
|
- Add dap-go for better dap configurations
|
||||||
- Make noice.nvim customizable
|
- Make noice.nvim customizable
|
||||||
|
|
||||||
[rust-tools.nvim]: https://github.com/simrat39/rust-tools.nvim
|
|
||||||
[rustaceanvim]: https://github.com/mrcjkb/rustaceanvim
|
|
||||||
|
|
||||||
- Switch from [rust-tools.nvim] to the more feature-packed [rustaceanvim]. This
|
|
||||||
switch entails a whole bunch of new features and options, so you are
|
|
||||||
recommended to go through rustacean.nvim's README to take a closer look at its
|
|
||||||
features and usage
|
|
||||||
|
|
||||||
[jacekpoz](https://github.com/jacekpoz):
|
[jacekpoz](https://github.com/jacekpoz):
|
||||||
|
|
||||||
[ocaml-lsp]: https://github.com/ocaml/ocaml-lsp
|
- Add [ocaml-lsp](https://github.com/ocaml/ocaml-lsp) support.
|
||||||
|
|
||||||
- Add [ocaml-lsp] support
|
- Fix Emac typo
|
||||||
|
|
||||||
- Fix "Emac" typo
|
|
||||||
|
|
||||||
[diniamo](https://github.com/diniamo):
|
[diniamo](https://github.com/diniamo):
|
||||||
|
|
||||||
|
@ -90,7 +61,6 @@ configuration formats.
|
||||||
plugin's options can now be found under `indentBlankline.setupOpts`, the
|
plugin's options can now be found under `indentBlankline.setupOpts`, the
|
||||||
previous iteration of the module also included out of place/broken options,
|
previous iteration of the module also included out of place/broken options,
|
||||||
which have been removed for the time being. These are:
|
which have been removed for the time being. These are:
|
||||||
|
|
||||||
- `listChar` - this was already unused
|
- `listChar` - this was already unused
|
||||||
- `fillChar` - this had nothing to do with the plugin, please configure it
|
- `fillChar` - this had nothing to do with the plugin, please configure it
|
||||||
yourself by adding `vim.opt.listchars:append({ space = '<char>' })` to your
|
yourself by adding `vim.opt.listchars:append({ space = '<char>' })` to your
|
||||||
|
@ -99,22 +69,9 @@ configuration formats.
|
||||||
yourself by adding `vim.opt.listchars:append({ eol = '<char>' })` to your
|
yourself by adding `vim.opt.listchars:append({ eol = '<char>' })` to your
|
||||||
lua configuration
|
lua configuration
|
||||||
|
|
||||||
[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
|
|
||||||
breaking changes:
|
|
||||||
- `vim.configRC` has been removed. You will need to migrate your entries to
|
|
||||||
Neovim-compliant Lua code, and add them to `vim.luaConfigRC` instead.
|
|
||||||
Existing vimscript configurations may be preserved in `vim.cmd` functions.
|
|
||||||
Please see [Neovim documentation on `vim.cmd`]
|
|
||||||
- `vim.luaScriptRC` is now the top-level DAG, and the internal `vim.pluginRC`
|
|
||||||
has been introduced for setting up internal plugins. See the "DAG entries in
|
|
||||||
nvf" manual page for more information.
|
|
||||||
|
|
||||||
[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
|
|
||||||
|
|
||||||
- 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
|
||||||
|
@ -125,8 +82,8 @@ configuration formats.
|
||||||
|
|
||||||
- Refactor `programs.languages.elixir` to use lspconfig and none-ls for LSP and
|
- Refactor `programs.languages.elixir` to use lspconfig and none-ls for LSP and
|
||||||
formatter setups respectively. Diagnostics support is considered, and may be
|
formatter setups respectively. Diagnostics support is considered, and may be
|
||||||
added once the [credo] linter has been added to nixpkgs. A pull request is
|
added once the [credo](https://github.com/rrrene/credo) linter has been added
|
||||||
currently open.
|
to nixpkgs. A pull request is currently open.
|
||||||
|
|
||||||
- Remove vim-tidal and friends.
|
- Remove vim-tidal and friends.
|
||||||
|
|
||||||
|
@ -139,11 +96,3 @@ configuration formats.
|
||||||
|
|
||||||
- Add [neo-tree.nvim] as an alternative file-tree plugin. It will be available
|
- Add [neo-tree.nvim] as an alternative file-tree plugin. It will be available
|
||||||
under `vim.filetree.neo-tree`, similar to nvimtree.
|
under `vim.filetree.neo-tree`, similar to nvimtree.
|
||||||
|
|
||||||
- Add `print-nvf-config` & `print-nvf-config-path` helper scripts to Neovim
|
|
||||||
closure. Both of those scripts have been automatically added to your PATH upon
|
|
||||||
using neovimConfig or `programs.nvf.enable`.
|
|
||||||
- `print-nvf-config` will display your `init.lua`, in full.
|
|
||||||
- `print-nvf-config-path` will display the path to _a clone_ of your
|
|
||||||
`init.lua`. This is not the path used by the Neovim wrapper, but an
|
|
||||||
identical clone.
|
|
||||||
|
|
30
flake.lock
30
flake.lock
|
@ -69,11 +69,11 @@
|
||||||
},
|
},
|
||||||
"mnw": {
|
"mnw": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1721440413,
|
"lastModified": 1720927281,
|
||||||
"narHash": "sha256-PF/FbgCUZ6mQrKp28G2YoVDlSThBy8AxIT9d2Ju3kTY=",
|
"narHash": "sha256-4Z2FtCuL0lT+sM2gb1JMcXOUkeYrWeYZjjs1HuVTlOs=",
|
||||||
"owner": "Gerg-L",
|
"owner": "Gerg-L",
|
||||||
"repo": "mnw",
|
"repo": "mnw",
|
||||||
"rev": "4ea225024677e7c3a96080af8624fd3aa5dfa1b6",
|
"rev": "302b18ddb8498aa9a7e0c01f7026e49d545e6898",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -129,11 +129,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1721016451,
|
"lastModified": 1720571246,
|
||||||
"narHash": "sha256-Cypl9ORr5UjtBsbjXMTJRepTe362yNVrPrntUvHiTaw=",
|
"narHash": "sha256-nkUXwunTck+hNMt2wZuYRN+jf2ySRjKTzI0fo5TDH78=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "a14c5d651cee9ed70f9cd9e83f323f1e531002db",
|
"rev": "16e401f01842c5bb2499e78c1fe227f939c0c474",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -1500,19 +1500,19 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"plugin-rustaceanvim": {
|
"plugin-rust-tools": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1720595685,
|
"lastModified": 1704259376,
|
||||||
"narHash": "sha256-Mx8pB9ECjFpbfmZPuXfpwoE5pUZ363M53f27ht7MBmA=",
|
"narHash": "sha256-kFane5ze7VDiOzF7jdmXkr50XQsNvdb+a9HQtybEVE0=",
|
||||||
"owner": "mrcjkb",
|
"owner": "simrat39",
|
||||||
"repo": "rustaceanvim",
|
"repo": "rust-tools.nvim",
|
||||||
"rev": "047f9c9d8cd2861745eb9de6c1570ee0875aa795",
|
"rev": "676187908a1ce35ffcd727c654ed68d851299d3e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "mrcjkb",
|
"owner": "simrat39",
|
||||||
"repo": "rustaceanvim",
|
"repo": "rust-tools.nvim",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -1913,7 +1913,7 @@
|
||||||
"plugin-project-nvim": "plugin-project-nvim",
|
"plugin-project-nvim": "plugin-project-nvim",
|
||||||
"plugin-registers": "plugin-registers",
|
"plugin-registers": "plugin-registers",
|
||||||
"plugin-rose-pine": "plugin-rose-pine",
|
"plugin-rose-pine": "plugin-rose-pine",
|
||||||
"plugin-rustaceanvim": "plugin-rustaceanvim",
|
"plugin-rust-tools": "plugin-rust-tools",
|
||||||
"plugin-scrollbar-nvim": "plugin-scrollbar-nvim",
|
"plugin-scrollbar-nvim": "plugin-scrollbar-nvim",
|
||||||
"plugin-smartcolumn": "plugin-smartcolumn",
|
"plugin-smartcolumn": "plugin-smartcolumn",
|
||||||
"plugin-sqls-nvim": "plugin-sqls-nvim",
|
"plugin-sqls-nvim": "plugin-sqls-nvim",
|
||||||
|
|
|
@ -25,8 +25,7 @@
|
||||||
|
|
||||||
flake = {
|
flake = {
|
||||||
lib = {
|
lib = {
|
||||||
inherit (lib) nvim;
|
inherit (lib) nvim neovimConfiguration;
|
||||||
inherit (lib.nvim) neovimConfiguration;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
homeManagerModules = {
|
homeManagerModules = {
|
||||||
|
@ -171,8 +170,8 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
plugin-rustaceanvim = {
|
plugin-rust-tools = {
|
||||||
url = "github:mrcjkb/rustaceanvim";
|
url = "github:simrat39/rust-tools.nvim";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
26
lib/dag.nix
26
lib/dag.nix
|
@ -8,10 +8,10 @@
|
||||||
# - the addition of the function `entryBefore` indicating a "wanted
|
# - the addition of the function `entryBefore` indicating a "wanted
|
||||||
# by" relationship.
|
# by" relationship.
|
||||||
{lib}: let
|
{lib}: let
|
||||||
inherit (builtins) isAttrs attrValues attrNames elem all head tail length toJSON isString;
|
inherit (builtins) isAttrs attrValues attrNames elem all head tail length;
|
||||||
inherit (lib.attrsets) filterAttrs mapAttrs;
|
inherit (lib.attrsets) filterAttrs mapAttrs;
|
||||||
inherit (lib.lists) toposort;
|
inherit (lib.lists) toposort;
|
||||||
inherit (lib.nvim.dag) empty isEntry entryBetween entryAfter entriesBetween entryAnywhere topoSort;
|
inherit (lib.nvim.dag) empty isEntry entryBetween entryAfter entriesBetween;
|
||||||
in {
|
in {
|
||||||
empty = {};
|
empty = {};
|
||||||
|
|
||||||
|
@ -147,22 +147,8 @@ in {
|
||||||
${section.data}
|
${section.data}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
resolveDag = {
|
mkVimrcSection = section: ''
|
||||||
name,
|
" SECTION: ${section.name}
|
||||||
dag,
|
${section.data}
|
||||||
mapResult,
|
'';
|
||||||
}: let
|
|
||||||
# When the value is a string, default it to dag.entryAnywhere
|
|
||||||
finalDag = mapAttrs (_: value:
|
|
||||||
if isString value
|
|
||||||
then entryAnywhere value
|
|
||||||
else value)
|
|
||||||
dag;
|
|
||||||
sortedDag = topoSort finalDag;
|
|
||||||
result =
|
|
||||||
if sortedDag ? result
|
|
||||||
then mapResult sortedDag.result
|
|
||||||
else abort ("Dependency cycle in ${name}: " + toJSON sortedDag);
|
|
||||||
in
|
|
||||||
result;
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,5 +11,6 @@
|
||||||
languages = import ./languages.nix {inherit lib;};
|
languages = import ./languages.nix {inherit lib;};
|
||||||
lists = import ./lists.nix {inherit lib;};
|
lists = import ./lists.nix {inherit lib;};
|
||||||
lua = import ./lua.nix {inherit lib;};
|
lua = import ./lua.nix {inherit lib;};
|
||||||
|
vim = import ./vim.nix;
|
||||||
neovimConfiguration = import ./configuration.nix {inherit inputs lib;};
|
neovimConfiguration = import ./configuration.nix {inherit inputs lib;};
|
||||||
}
|
}
|
||||||
|
|
10
lib/lua.nix
10
lib/lua.nix
|
@ -5,6 +5,16 @@
|
||||||
inherit (lib.strings) concatStringsSep concatMapStringsSep stringToCharacters concatLines;
|
inherit (lib.strings) concatStringsSep concatMapStringsSep stringToCharacters concatLines;
|
||||||
inherit (lib.trivial) boolToString warn;
|
inherit (lib.trivial) boolToString warn;
|
||||||
in rec {
|
in rec {
|
||||||
|
wrapLuaConfig = {
|
||||||
|
luaBefore ? "",
|
||||||
|
luaConfig,
|
||||||
|
luaAfter ? "",
|
||||||
|
}: ''
|
||||||
|
lua << EOF
|
||||||
|
${concatLines [luaBefore luaConfig luaAfter]}
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
|
||||||
# Convert a null value to lua's nil
|
# Convert a null value to lua's nil
|
||||||
nullString = value:
|
nullString = value:
|
||||||
if value == null
|
if value == null
|
||||||
|
|
26
lib/vim.nix
Normal file
26
lib/vim.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
let
|
||||||
|
inherit (builtins) isInt isBool toJSON toString;
|
||||||
|
in rec {
|
||||||
|
# yes? no.
|
||||||
|
yesNo = value:
|
||||||
|
if value
|
||||||
|
then "yes"
|
||||||
|
else "no";
|
||||||
|
|
||||||
|
# convert a boolean to a vim compliant boolean string
|
||||||
|
mkVimBool = val:
|
||||||
|
if val
|
||||||
|
then "1"
|
||||||
|
else "0";
|
||||||
|
|
||||||
|
# convert a literal value to a vim compliant value
|
||||||
|
valToVim = val:
|
||||||
|
if (isInt val)
|
||||||
|
then (toString val)
|
||||||
|
else
|
||||||
|
(
|
||||||
|
if (isBool val)
|
||||||
|
then (mkVimBool val)
|
||||||
|
else (toJSON val)
|
||||||
|
);
|
||||||
|
}
|
|
@ -36,19 +36,11 @@ inputs: {
|
||||||
buildPlug = {pname, ...} @ attrs: let
|
buildPlug = {pname, ...} @ attrs: let
|
||||||
src = getAttr ("plugin-" + pname) inputs;
|
src = getAttr ("plugin-" + pname) inputs;
|
||||||
in
|
in
|
||||||
pkgs.stdenvNoCC.mkDerivation ({
|
pkgs.runCommand "${pname}-${src.shortRev or src.shortDirtyRev or "dirty"}" attrs
|
||||||
inherit src;
|
''
|
||||||
version = src.shortRev or src.shortDirtyRev or "dirty";
|
mkdir -p $out
|
||||||
installPhase = ''
|
cp -r ${src}/. $out
|
||||||
runHook preInstall
|
'';
|
||||||
|
|
||||||
mkdir -p $out
|
|
||||||
cp -r . $out
|
|
||||||
|
|
||||||
runHook postInstall
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
// attrs);
|
|
||||||
|
|
||||||
noBuildPlug = {pname, ...} @ attrs: let
|
noBuildPlug = {pname, ...} @ attrs: let
|
||||||
input = getAttr ("plugin-" + pname) inputs;
|
input = getAttr ("plugin-" + pname) inputs;
|
||||||
|
@ -106,42 +98,16 @@ inputs: {
|
||||||
neovim = vimOptions.package;
|
neovim = vimOptions.package;
|
||||||
plugins = concatLists [builtStartPlugins builtOptPlugins];
|
plugins = concatLists [builtStartPlugins builtOptPlugins];
|
||||||
appName = "nvf";
|
appName = "nvf";
|
||||||
|
initViml = vimOptions.builtConfigRC;
|
||||||
extraBinPath = vimOptions.extraPackages;
|
extraBinPath = vimOptions.extraPackages;
|
||||||
initLua = vimOptions.builtLuaConfigRC;
|
|
||||||
luaFiles = vimOptions.extraLuaFiles;
|
|
||||||
|
|
||||||
inherit (vimOptions) viAlias vimAlias withRuby withNodeJs withPython3;
|
inherit (vimOptions) viAlias vimAlias withRuby withNodeJs withPython3;
|
||||||
inherit extraLuaPackages extraPython3Packages;
|
inherit extraLuaPackages extraPython3Packages;
|
||||||
};
|
};
|
||||||
|
|
||||||
# Additional helper scripts for printing and displaying nvf configuration
|
|
||||||
# in your commandline.
|
|
||||||
printConfig = pkgs.writers.writeDashBin "print-nvf-config" ''
|
|
||||||
cat << EOF
|
|
||||||
${vimOptions.builtLuaConfigRC}
|
|
||||||
EOF
|
|
||||||
'';
|
|
||||||
|
|
||||||
printConfigPath = pkgs.writers.writeDashBin "print-nvf-config-path" ''
|
|
||||||
realpath ${pkgs.writeTextFile {
|
|
||||||
name = "nvf-init.lua";
|
|
||||||
text = vimOptions.builtLuaConfigRC;
|
|
||||||
}}
|
|
||||||
'';
|
|
||||||
in {
|
in {
|
||||||
inherit (module) options config;
|
inherit (module) options config;
|
||||||
inherit (module._module.args) pkgs;
|
inherit (module._module.args) pkgs;
|
||||||
|
|
||||||
# Expose wrapped neovim-package for userspace
|
# expose wrapped neovim-package
|
||||||
# or module consumption.
|
neovim = neovim-wrapped;
|
||||||
neovim = pkgs.symlinkJoin {
|
|
||||||
name = "nvf-with-helpers";
|
|
||||||
paths = [neovim-wrapped printConfig printConfigPath];
|
|
||||||
postBuild = "echo helpers added";
|
|
||||||
|
|
||||||
meta = {
|
|
||||||
description = "Wrapped version of Neovim with additional helper scripts";
|
|
||||||
mainProgram = "nvim";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,17 +5,16 @@
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.options) mkOption literalExpression;
|
inherit (lib.options) mkOption literalExpression;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.types) enum bool str int;
|
inherit (lib.types) enum bool str int nullOr;
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
inherit (lib.nvim.dag) entryAfter;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
|
||||||
|
|
||||||
cfg = config.vim;
|
cfg = config.vim;
|
||||||
in {
|
in {
|
||||||
options.vim = {
|
options.vim = {
|
||||||
leaderKey = mkOption {
|
leaderKey = mkOption {
|
||||||
type = str;
|
type = nullOr str;
|
||||||
default = " ";
|
default = null;
|
||||||
description = "The leader key used for `<leader>` mappings";
|
description = "The leader key to be used internally";
|
||||||
};
|
};
|
||||||
|
|
||||||
colourTerm = mkOption {
|
colourTerm = mkOption {
|
||||||
|
@ -54,6 +53,12 @@ in {
|
||||||
description = "Enable syntax highlighting";
|
description = "Enable syntax highlighting";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mapLeaderSpace = mkOption {
|
||||||
|
type = bool;
|
||||||
|
default = true;
|
||||||
|
description = "Map the space key to leader key";
|
||||||
|
};
|
||||||
|
|
||||||
useSystemClipboard = mkOption {
|
useSystemClipboard = mkOption {
|
||||||
type = bool;
|
type = bool;
|
||||||
default = false;
|
default = false;
|
||||||
|
@ -160,110 +165,117 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config.vim.luaConfigRC.basic = entryAfter ["globalsScript"] ''
|
config.vim.configRC.basic = entryAfter ["globalsScript"] ''
|
||||||
-- Settings that are set for everything
|
" Settings that are set for everything
|
||||||
vim.o.encoding = "utf-8"
|
set encoding=utf-8
|
||||||
vim.o.hidden = true
|
set hidden
|
||||||
vim.opt.shortmess:append("c")
|
set shortmess+=c
|
||||||
vim.o.expandtab = true
|
set expandtab
|
||||||
vim.o.mouse = ${toLuaObject cfg.mouseSupport}
|
set mouse=${cfg.mouseSupport}
|
||||||
vim.o.tabstop = ${toLuaObject cfg.tabWidth}
|
set tabstop=${toString cfg.tabWidth}
|
||||||
vim.o.shiftwidth = ${toLuaObject cfg.tabWidth}
|
set shiftwidth=${toString cfg.tabWidth}
|
||||||
vim.o.softtabstop = ${toLuaObject cfg.tabWidth}
|
set softtabstop=${toString cfg.tabWidth}
|
||||||
vim.o.cmdheight = ${toLuaObject cfg.cmdHeight}
|
set cmdheight=${toString cfg.cmdHeight}
|
||||||
vim.o.updatetime = ${toLuaObject cfg.updateTime}
|
set updatetime=${toString cfg.updateTime}
|
||||||
vim.o.tm = ${toLuaObject cfg.mapTimeout}
|
set tm=${toString cfg.mapTimeout}
|
||||||
vim.o.cursorlineopt = ${toLuaObject cfg.cursorlineOpt}
|
set cursorlineopt=${toString cfg.cursorlineOpt}
|
||||||
vim.o.scrolloff = ${toLuaObject cfg.scrollOffset}
|
set scrolloff=${toString cfg.scrollOffset}
|
||||||
vim.g.mapleader = ${toLuaObject cfg.leaderKey}
|
|
||||||
vim.g.maplocalleader = ${toLuaObject cfg.leaderKey}
|
|
||||||
|
|
||||||
${optionalString cfg.splitBelow ''
|
${optionalString cfg.splitBelow ''
|
||||||
vim.o.splitbelow = true
|
set splitbelow
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.splitRight ''
|
${optionalString cfg.splitRight ''
|
||||||
vim.o.splitright = true
|
set splitright
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.showSignColumn ''
|
${optionalString cfg.showSignColumn ''
|
||||||
vim.o.signcolumn = "yes"
|
set signcolumn=yes
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.autoIndent ''
|
${optionalString cfg.autoIndent ''
|
||||||
vim.o.autoindent = true
|
set autoindent
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.preventJunkFiles ''
|
${optionalString cfg.preventJunkFiles ''
|
||||||
vim.o.swapfile = false
|
set noswapfile
|
||||||
vim.o.backup = false
|
set nobackup
|
||||||
vim.o.writebackup = false
|
set nowritebackup
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.bell == "none") ''
|
${optionalString (cfg.bell == "none") ''
|
||||||
vim.o.errorbells = false
|
set noerrorbells
|
||||||
vim.o.visualbell = false
|
set novisualbell
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.bell == "on") ''
|
${optionalString (cfg.bell == "on") ''
|
||||||
vim.o.visualbell = false
|
set novisualbell
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.bell == "visual") ''
|
${optionalString (cfg.bell == "visual") ''
|
||||||
vim.o.errorbells = false
|
set noerrorbells
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.lineNumberMode == "relative") ''
|
${optionalString (cfg.lineNumberMode == "relative") ''
|
||||||
vim.o.relativenumber = true
|
set relativenumber
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.lineNumberMode == "number") ''
|
${optionalString (cfg.lineNumberMode == "number") ''
|
||||||
vim.o.number = true
|
set number
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.lineNumberMode == "relNumber") ''
|
${optionalString (cfg.lineNumberMode == "relNumber") ''
|
||||||
vim.o.number = true
|
set number relativenumber
|
||||||
vim.o.relativenumber = true
|
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.useSystemClipboard ''
|
${optionalString cfg.useSystemClipboard ''
|
||||||
vim.opt.clipboard:append("unnamedplus")
|
set clipboard+=unnamedplus
|
||||||
|
''}
|
||||||
|
|
||||||
|
${optionalString cfg.mapLeaderSpace ''
|
||||||
|
let mapleader=" "
|
||||||
|
let maplocalleader=" "
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.syntaxHighlighting ''
|
${optionalString cfg.syntaxHighlighting ''
|
||||||
vim.cmd("syntax on")
|
syntax on
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (!cfg.wordWrap) ''
|
${optionalString (!cfg.wordWrap) ''
|
||||||
vim.o.wrap = false
|
set nowrap
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.hideSearchHighlight ''
|
${optionalString cfg.hideSearchHighlight ''
|
||||||
vim.o.hlsearch = false
|
set nohlsearch
|
||||||
vim.o.incsearch = true
|
set incsearch
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString cfg.colourTerm ''
|
${optionalString cfg.colourTerm ''
|
||||||
vim.o.termguicolors = true
|
set termguicolors
|
||||||
|
set t_Co=256
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (!cfg.enableEditorconfig) ''
|
${optionalString (!cfg.enableEditorconfig) ''
|
||||||
vim.g.editorconfig = false
|
let g:editorconfig = v:false
|
||||||
|
''}
|
||||||
|
|
||||||
|
${optionalString (cfg.leaderKey != null) ''
|
||||||
|
let mapleader = "${toString cfg.leaderKey}"
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.searchCase == "ignore") ''
|
${optionalString (cfg.searchCase == "ignore") ''
|
||||||
vim.o.smartcase = false
|
set nosmartcase
|
||||||
vim.o.ignorecase = true
|
set ignorecase
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.searchCase == "smart") ''
|
${optionalString (cfg.searchCase == "smart") ''
|
||||||
vim.o.smartcase = true
|
set smartcase
|
||||||
vim.o.ignorecase = true
|
set ignorecase
|
||||||
''}
|
''}
|
||||||
|
|
||||||
${optionalString (cfg.searchCase == "sensitive") ''
|
${optionalString (cfg.searchCase == "sensitive") ''
|
||||||
vim.o.smartcase = false
|
set nosmartcase
|
||||||
vim.o.ignorecase = false
|
set noignorecase
|
||||||
''}
|
''}
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,26 +9,32 @@
|
||||||
in {
|
in {
|
||||||
config = {
|
config = {
|
||||||
vim.maps = {
|
vim.maps = {
|
||||||
normal = mkIf cfg.disableArrows {
|
normal =
|
||||||
"<up>" = {
|
mkIf cfg.disableArrows {
|
||||||
action = "<nop>";
|
"<up>" = {
|
||||||
|
action = "<nop>";
|
||||||
|
|
||||||
noremap = false;
|
noremap = false;
|
||||||
};
|
};
|
||||||
"<down>" = {
|
"<down>" = {
|
||||||
action = "<nop>";
|
action = "<nop>";
|
||||||
|
|
||||||
noremap = false;
|
noremap = false;
|
||||||
|
};
|
||||||
|
"<left>" = {
|
||||||
|
action = "<nop>";
|
||||||
|
noremap = false;
|
||||||
|
};
|
||||||
|
"<right>" = {
|
||||||
|
action = "<nop>";
|
||||||
|
noremap = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// mkIf cfg.mapLeaderSpace {
|
||||||
|
"<space>" = {
|
||||||
|
action = "<nop>";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
"<left>" = {
|
|
||||||
action = "<nop>";
|
|
||||||
noremap = false;
|
|
||||||
};
|
|
||||||
"<right>" = {
|
|
||||||
action = "<nop>";
|
|
||||||
noremap = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
insert = mkIf cfg.disableArrows {
|
insert = mkIf cfg.disableArrows {
|
||||||
"<up>" = {
|
"<up>" = {
|
||||||
|
|
|
@ -33,7 +33,7 @@ in {
|
||||||
startPlugins = [
|
startPlugins = [
|
||||||
"chatgpt"
|
"chatgpt"
|
||||||
];
|
];
|
||||||
pluginRC.chagpt = entryAnywhere ''
|
luaConfigRC.chagpt = entryAnywhere ''
|
||||||
require("chatgpt").setup(${toLuaObject cfg.setupOpts})
|
require("chatgpt").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
maps.normal = mkMerge [
|
maps.normal = mkMerge [
|
||||||
|
|
|
@ -34,7 +34,7 @@ in {
|
||||||
"copilot-cmp"
|
"copilot-cmp"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.copilot = entryAnywhere ''
|
vim.luaConfigRC.copilot = entryAnywhere ''
|
||||||
require("copilot").setup(${toLuaObject cfg.setupOpts})
|
require("copilot").setup(${toLuaObject cfg.setupOpts})
|
||||||
|
|
||||||
${lib.optionalString cfg.cmp.enable ''
|
${lib.optionalString cfg.cmp.enable ''
|
||||||
|
|
|
@ -12,7 +12,7 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["nvim-autopairs"];
|
vim.startPlugins = ["nvim-autopairs"];
|
||||||
|
|
||||||
vim.pluginRC.autopairs = entryAnywhere ''
|
vim.luaConfigRC.autopairs = entryAnywhere ''
|
||||||
require("nvim-autopairs").setup({ map_cr = ${boolToString (!config.vim.autocomplete.enable)} })
|
require("nvim-autopairs").setup({ map_cr = ${boolToString (!config.vim.autocomplete.enable)} })
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -41,7 +41,7 @@ in {
|
||||||
(mkBinding cfg.mappings.toggleSelectedBlock "<Plug>(comment_toggle_blockwise_visual)" mappings.toggleSelectedBlock.description)
|
(mkBinding cfg.mappings.toggleSelectedBlock "<Plug>(comment_toggle_blockwise_visual)" mappings.toggleSelectedBlock.description)
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.comment-nvim = entryAnywhere ''
|
vim.luaConfigRC.comment-nvim = entryAnywhere ''
|
||||||
require('Comment').setup({
|
require('Comment').setup({
|
||||||
mappings = { basic = false, extra = false, },
|
mappings = { basic = false, extra = false, },
|
||||||
})
|
})
|
||||||
|
|
|
@ -186,7 +186,7 @@ in {
|
||||||
|
|
||||||
# TODO: alternative snippet engines to vsnip
|
# TODO: alternative snippet engines to vsnip
|
||||||
# https://github.com/hrsh7th/nvim-cmp/blob/main/doc/cmp.txt#L82
|
# https://github.com/hrsh7th/nvim-cmp/blob/main/doc/cmp.txt#L82
|
||||||
vim.pluginRC.completion = mkIf (cfg.type == "nvim-cmp") (dagPlacement ''
|
vim.luaConfigRC.completion = mkIf (cfg.type == "nvim-cmp") (dagPlacement ''
|
||||||
local nvim_cmp_menu_map = function(entry, vim_item)
|
local nvim_cmp_menu_map = function(entry, vim_item)
|
||||||
-- name for each source
|
-- name for each source
|
||||||
vim_item.menu = ({
|
vim_item.menu = ({
|
||||||
|
|
|
@ -16,7 +16,7 @@ in {
|
||||||
|
|
||||||
# the entire credit for this dashboard configuration to https://github.com/Rishabh672003
|
# the entire credit for this dashboard configuration to https://github.com/Rishabh672003
|
||||||
# honestly, excellent work
|
# honestly, excellent work
|
||||||
vim.pluginRC.alpha = entryAnywhere ''
|
vim.luaConfigRC.alpha = entryAnywhere ''
|
||||||
local alpha = require("alpha")
|
local alpha = require("alpha")
|
||||||
local plenary_path = require("plenary.path")
|
local plenary_path = require("plenary.path")
|
||||||
local dashboard = require("alpha.themes.dashboard")
|
local dashboard = require("alpha.themes.dashboard")
|
||||||
|
|
|
@ -13,7 +13,7 @@ in {
|
||||||
"dashboard-nvim"
|
"dashboard-nvim"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.dashboard-nvim = entryAnywhere ''
|
vim.luaConfigRC.dashboard-nvim = entryAnywhere ''
|
||||||
require("dashboard").setup{}
|
require("dashboard").setup{}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.nvim.vim) mkVimBool;
|
||||||
|
|
||||||
cfg = config.vim.dashboard.startify;
|
cfg = config.vim.dashboard.startify;
|
||||||
in {
|
in {
|
||||||
|
@ -22,28 +23,28 @@ in {
|
||||||
else cfg.customFooter;
|
else cfg.customFooter;
|
||||||
"startify_bookmarks" = cfg.bookmarks;
|
"startify_bookmarks" = cfg.bookmarks;
|
||||||
"startify_lists" = cfg.lists;
|
"startify_lists" = cfg.lists;
|
||||||
"startify_change_to_dir" = cfg.changeToDir;
|
"startify_change_to_dir" = mkVimBool cfg.changeToDir;
|
||||||
"startify_change_to_vcs_root" = cfg.changeToVCRoot;
|
"startify_change_to_vcs_root" = mkVimBool cfg.changeToVCRoot;
|
||||||
"startify_change_cmd" = cfg.changeDirCmd;
|
"startify_change_cmd" = cfg.changeDirCmd;
|
||||||
"startify_skiplist" = cfg.skipList;
|
"startify_skiplist" = cfg.skipList;
|
||||||
"startify_update_oldfiles" = cfg.updateOldFiles;
|
"startify_update_oldfiles" = mkVimBool cfg.updateOldFiles;
|
||||||
"startify_session_autoload" = cfg.sessionAutoload;
|
"startify_session_autoload" = mkVimBool cfg.sessionAutoload;
|
||||||
"startify_commands" = cfg.commands;
|
"startify_commands" = cfg.commands;
|
||||||
"startify_files_number" = cfg.filesNumber;
|
"startify_files_number" = cfg.filesNumber;
|
||||||
"startify_custom_indices" = cfg.customIndices;
|
"startify_custom_indices" = cfg.customIndices;
|
||||||
"startify_disable_at_vimenter" = cfg.disableOnStartup;
|
"startify_disable_at_vimenter" = mkVimBool cfg.disableOnStartup;
|
||||||
"startify_enable_unsafe" = cfg.unsafe;
|
"startify_enable_unsafe" = mkVimBool cfg.unsafe;
|
||||||
"startify_padding_left" = cfg.paddingLeft;
|
"startify_padding_left" = cfg.paddingLeft;
|
||||||
"startify_use_env" = cfg.useEnv;
|
"startify_use_env" = mkVimBool cfg.useEnv;
|
||||||
"startify_session_before_save" = cfg.sessionBeforeSave;
|
"startify_session_before_save" = cfg.sessionBeforeSave;
|
||||||
"startify_session_persistence" = cfg.sessionPersistence;
|
"startify_session_persistence" = mkVimBool cfg.sessionPersistence;
|
||||||
"startify_session_delete_buffers" = cfg.sessionDeleteBuffers;
|
"startify_session_delete_buffers" = mkVimBool cfg.sessionDeleteBuffers;
|
||||||
"startify_session_dir" = cfg.sessionDir;
|
"startify_session_dir" = cfg.sessionDir;
|
||||||
"startify_skiplist_server" = cfg.skipListServer;
|
"startify_skiplist_server" = cfg.skipListServer;
|
||||||
"startify_session_remove_lines" = cfg.sessionRemoveLines;
|
"startify_session_remove_lines" = cfg.sessionRemoveLines;
|
||||||
"startify_session_savevars" = cfg.sessionSavevars;
|
"startify_session_savevars" = cfg.sessionSavevars;
|
||||||
"startify_session_savecmds" = cfg.sessionSavecmds;
|
"startify_session_savecmds" = cfg.sessionSavecmds;
|
||||||
"startify_session_sort" = cfg.sessionSort;
|
"startify_session_sort" = mkVimBool cfg.sessionSort;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ in {
|
||||||
(mkIf cfg.enable {
|
(mkIf cfg.enable {
|
||||||
vim.startPlugins = ["nvim-dap"];
|
vim.startPlugins = ["nvim-dap"];
|
||||||
|
|
||||||
vim.pluginRC =
|
vim.luaConfigRC =
|
||||||
{
|
{
|
||||||
# TODO customizable keymaps
|
# TODO customizable keymaps
|
||||||
nvim-dap = entryAnywhere ''
|
nvim-dap = entryAnywhere ''
|
||||||
|
@ -51,7 +51,7 @@ in {
|
||||||
(mkIf (cfg.enable && cfg.ui.enable) {
|
(mkIf (cfg.enable && cfg.ui.enable) {
|
||||||
vim.startPlugins = ["nvim-dap-ui" "nvim-nio"];
|
vim.startPlugins = ["nvim-dap-ui" "nvim-nio"];
|
||||||
|
|
||||||
vim.pluginRC.nvim-dap-ui = entryAfter ["nvim-dap"] (''
|
vim.luaConfigRC.nvim-dap-ui = entryAfter ["nvim-dap"] (''
|
||||||
local dapui = require("dapui")
|
local dapui = require("dapui")
|
||||||
dapui.setup()
|
dapui.setup()
|
||||||
''
|
''
|
||||||
|
|
|
@ -20,7 +20,7 @@ in {
|
||||||
"neo-tree-nvim"
|
"neo-tree-nvim"
|
||||||
];
|
];
|
||||||
|
|
||||||
pluginRC.neo-tree = entryAnywhere ''
|
luaConfigRC.neo-tree = entryAnywhere ''
|
||||||
require("neo-tree").setup(${toLuaObject cfg.setupOpts})
|
require("neo-tree").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -29,7 +29,7 @@ in {
|
||||||
"<leader>t" = "+NvimTree";
|
"<leader>t" = "+NvimTree";
|
||||||
};
|
};
|
||||||
|
|
||||||
vim.pluginRC.nvimtreelua = entryAnywhere ''
|
vim.luaConfigRC.nvimtreelua = entryAnywhere ''
|
||||||
${
|
${
|
||||||
optionalString cfg.setupOpts.disable_netrw ''
|
optionalString cfg.setupOpts.disable_netrw ''
|
||||||
-- disable netrew completely
|
-- disable netrew completely
|
||||||
|
|
|
@ -69,7 +69,7 @@ in {
|
||||||
"<leader>g" = "+Gitsigns";
|
"<leader>g" = "+Gitsigns";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.gitsigns = entryAnywhere ''
|
luaConfigRC.gitsigns = entryAnywhere ''
|
||||||
require('gitsigns').setup{}
|
require('gitsigns').setup{}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
inherit (lib.modules) mkIf mkMerge;
|
inherit (lib.modules) mkIf mkMerge;
|
||||||
inherit (lib.nvim.lua) expToLua;
|
inherit (lib.nvim.lua) expToLua;
|
||||||
inherit (lib.nvim.types) mkGrammarOption;
|
inherit (lib.nvim.types) mkGrammarOption;
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
packageToCmd = package: defaultCmd:
|
packageToCmd = package: defaultCmd:
|
||||||
if isList cfg.lsp.package
|
if isList cfg.lsp.package
|
||||||
|
@ -141,7 +141,7 @@ in {
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
config = mkIf cfg.enable (mkMerge [
|
||||||
(mkIf cfg.cHeader {
|
(mkIf cfg.cHeader {
|
||||||
vim.pluginRC.c-header = entryAfter ["basic"] "vim.g.c_syntax_for_h = 1";
|
vim.configRC.c-header = entryAnywhere "let g:c_syntax_for_h = 1";
|
||||||
})
|
})
|
||||||
|
|
||||||
(mkIf cfg.treesitter.enable {
|
(mkIf cfg.treesitter.enable {
|
||||||
|
|
|
@ -140,7 +140,7 @@ in {
|
||||||
then ["flutter-tools-patched"]
|
then ["flutter-tools-patched"]
|
||||||
else ["flutter-tools"];
|
else ["flutter-tools"];
|
||||||
|
|
||||||
vim.pluginRC.flutter-tools = entryAnywhere ''
|
vim.luaConfigRC.flutter-tools = entryAnywhere ''
|
||||||
require('flutter-tools').setup {
|
require('flutter-tools').setup {
|
||||||
lsp = {
|
lsp = {
|
||||||
color = { -- show the derived colours for dart variables
|
color = { -- show the derived colours for dart variables
|
||||||
|
|
|
@ -113,7 +113,7 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.elixir-tools.enable {
|
(mkIf cfg.elixir-tools.enable {
|
||||||
vim.startPlugins = ["elixir-tools"];
|
vim.startPlugins = ["elixir-tools"];
|
||||||
vim.pluginRC.elixir-tools = entryAnywhere ''
|
vim.luaConfigRC.elixir-tools = entryAnywhere ''
|
||||||
local elixir-tools = require("elixir")
|
local elixir-tools = require("elixir")
|
||||||
local elixirls = require("elixir-tools.elixirls")
|
local elixirls = require("elixir-tools.elixirls")
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ in {
|
||||||
(mkIf cfg.dap.enable {
|
(mkIf cfg.dap.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["nvim-dap-go"];
|
startPlugins = ["nvim-dap-go"];
|
||||||
pluginRC.nvim-dap-go = entryAfter ["nvim-dap"] ''
|
luaConfigRC.nvim-dap-go = entryAfter ["nvim-dap"] ''
|
||||||
require('dap-go').setup {
|
require('dap-go').setup {
|
||||||
delve = {
|
delve = {
|
||||||
path = '${getExe cfg.dap.package}',
|
path = '${getExe cfg.dap.package}',
|
||||||
|
|
|
@ -36,7 +36,7 @@ in {
|
||||||
grammars = [cfg.treesitter.package];
|
grammars = [cfg.treesitter.package];
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.html-autotag = mkIf cfg.treesitter.autotagHtml (entryAnywhere ''
|
luaConfigRC.html-autotag = mkIf cfg.treesitter.autotagHtml (entryAnywhere ''
|
||||||
require('nvim-ts-autotag').setup()
|
require('nvim-ts-autotag').setup()
|
||||||
'');
|
'');
|
||||||
};
|
};
|
||||||
|
|
|
@ -61,7 +61,7 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.lsp.neodev.enable {
|
(mkIf cfg.lsp.neodev.enable {
|
||||||
vim.startPlugins = ["neodev-nvim"];
|
vim.startPlugins = ["neodev-nvim"];
|
||||||
vim.pluginRC.neodev = entryBefore ["lua-lsp"] ''
|
vim.luaConfigRC.neodev = entryBefore ["lua-lsp"] ''
|
||||||
require("neodev").setup({})
|
require("neodev").setup({})
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.types) enum either listOf package str;
|
inherit (lib.types) enum either listOf package str;
|
||||||
inherit (lib.nvim.types) mkGrammarOption diagnostics;
|
inherit (lib.nvim.types) mkGrammarOption diagnostics;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
inherit (lib.nvim.lua) expToLua;
|
inherit (lib.nvim.lua) expToLua;
|
||||||
inherit (lib.nvim.languages) diagnosticsToLua;
|
inherit (lib.nvim.languages) diagnosticsToLua;
|
||||||
|
|
||||||
|
@ -175,16 +176,8 @@ in {
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
config = mkIf cfg.enable (mkMerge [
|
||||||
{
|
{
|
||||||
vim.pluginRC.nix = ''
|
vim.configRC.nix = entryAnywhere ''
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
autocmd filetype nix setlocal tabstop=2 shiftwidth=2 softtabstop=2
|
||||||
pattern = "nix",
|
|
||||||
callback = function(opts)
|
|
||||||
local bo = vim.bo[opts.buf]
|
|
||||||
bo.tabstop = 2
|
|
||||||
bo.shiftwidth = 2
|
|
||||||
bo.softtabstop = 2
|
|
||||||
end
|
|
||||||
})
|
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,7 +102,7 @@ in {
|
||||||
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.sources = {"crates" = "[Crates]";};
|
autocomplete.sources = {"crates" = "[Crates]";};
|
||||||
pluginRC.rust-crates = entryAnywhere ''
|
luaConfigRC.rust-crates = entryAnywhere ''
|
||||||
require('crates').setup {
|
require('crates').setup {
|
||||||
null_ls = {
|
null_ls = {
|
||||||
enabled = ${boolToString cfg.crates.codeActions},
|
enabled = ${boolToString cfg.crates.codeActions},
|
||||||
|
@ -125,61 +125,72 @@ in {
|
||||||
|
|
||||||
(mkIf (cfg.lsp.enable || cfg.dap.enable) {
|
(mkIf (cfg.lsp.enable || cfg.dap.enable) {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["rustaceanvim"];
|
startPlugins = ["rust-tools"] ++ optionals cfg.dap.enable [cfg.dap.package];
|
||||||
|
|
||||||
luaConfigRC.rustaceanvim = entryAnywhere ''
|
lsp.lspconfig = {
|
||||||
vim.g.rustaceanvim = {
|
enable = true;
|
||||||
${optionalString cfg.lsp.enable ''
|
sources.rust-lsp = ''
|
||||||
-- LSP
|
local rt = require('rust-tools')
|
||||||
tools = {
|
rust_on_attach = function(client, bufnr)
|
||||||
hover_actions = {
|
default_on_attach(client, bufnr)
|
||||||
replace_builtin_hover = false
|
local opts = { noremap=true, silent=true, buffer = bufnr }
|
||||||
|
vim.keymap.set("n", "<leader>ris", rt.inlay_hints.set, opts)
|
||||||
|
vim.keymap.set("n", "<leader>riu", rt.inlay_hints.unset, opts)
|
||||||
|
vim.keymap.set("n", "<leader>rr", rt.runnables.runnables, opts)
|
||||||
|
vim.keymap.set("n", "<leader>rp", rt.parent_module.parent_module, opts)
|
||||||
|
vim.keymap.set("n", "<leader>rm", rt.expand_macro.expand_macro, opts)
|
||||||
|
vim.keymap.set("n", "<leader>rc", rt.open_cargo_toml.open_cargo_toml, opts)
|
||||||
|
vim.keymap.set("n", "<leader>rg", function() rt.crate_graph.view_crate_graph("x11", nil) end, opts)
|
||||||
|
${optionalString cfg.dap.enable ''
|
||||||
|
vim.keymap.set("n", "<leader>rd", ":RustDebuggables<cr>", opts)
|
||||||
|
vim.keymap.set(
|
||||||
|
"n", "${config.vim.debugger.nvim-dap.mappings.continue}",
|
||||||
|
function()
|
||||||
|
local dap = require("dap")
|
||||||
|
if dap.status() == "" then
|
||||||
|
vim.cmd "RustDebuggables"
|
||||||
|
else
|
||||||
|
dap.continue()
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
opts
|
||||||
|
)
|
||||||
|
''}
|
||||||
|
end
|
||||||
|
local rustopts = {
|
||||||
|
tools = {
|
||||||
|
autoSetHints = true,
|
||||||
|
hover_with_actions = false,
|
||||||
|
inlay_hints = {
|
||||||
|
only_current_line = false,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
},
|
server = {
|
||||||
server = {
|
capabilities = capabilities,
|
||||||
cmd = ${
|
on_attach = rust_on_attach,
|
||||||
|
cmd = ${
|
||||||
if isList cfg.lsp.package
|
if isList cfg.lsp.package
|
||||||
then expToLua cfg.lsp.package
|
then expToLua cfg.lsp.package
|
||||||
else ''{"${cfg.lsp.package}/bin/rust-analyzer"}''
|
else ''{"${cfg.lsp.package}/bin/rust-analyzer"}''
|
||||||
},
|
},
|
||||||
on_attach = function(client, bufnr)
|
settings = {
|
||||||
default_on_attach(client, bufnr)
|
${cfg.lsp.opts}
|
||||||
local opts = { noremap=true, silent=true, buffer = bufnr }
|
}
|
||||||
vim.keymap.set("n", "<leader>rr", ":RustLsp runnables<CR>", opts)
|
|
||||||
vim.keymap.set("n", "<leader>rp", ":RustLsp parentModule<CR>", opts)
|
|
||||||
vim.keymap.set("n", "<leader>rm", ":RustLsp expandMacro<CR>", opts)
|
|
||||||
vim.keymap.set("n", "<leader>rc", ":RustLsp openCargo", opts)
|
|
||||||
vim.keymap.set("n", "<leader>rg", ":RustLsp crateGraph x11", opts)
|
|
||||||
${optionalString cfg.dap.enable ''
|
|
||||||
vim.keymap.set("n", "<leader>rd", ":RustLsp debuggables<cr>", opts)
|
|
||||||
vim.keymap.set(
|
|
||||||
"n", "${config.vim.debugger.nvim-dap.mappings.continue}",
|
|
||||||
function()
|
|
||||||
local dap = require("dap")
|
|
||||||
if dap.status() == "" then
|
|
||||||
vim.cmd "RustLsp debuggables"
|
|
||||||
else
|
|
||||||
dap.continue()
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
opts
|
|
||||||
)
|
|
||||||
''}
|
|
||||||
end
|
|
||||||
},
|
|
||||||
''}
|
|
||||||
|
|
||||||
${optionalString cfg.dap.enable ''
|
|
||||||
dap = {
|
|
||||||
adapter = {
|
|
||||||
type = "executable",
|
|
||||||
command = "${cfg.dap.package}/bin/lldb-vscode",
|
|
||||||
name = "rustacean_lldb",
|
|
||||||
},
|
},
|
||||||
},
|
|
||||||
''}
|
${optionalString cfg.dap.enable ''
|
||||||
}
|
dap = {
|
||||||
'';
|
adapter = {
|
||||||
|
type = "executable",
|
||||||
|
command = "${cfg.dap.package}/bin/lldb-vscode",
|
||||||
|
name = "rt_lldb",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
''}
|
||||||
|
}
|
||||||
|
rt.setup(rustopts)
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -192,7 +192,7 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.extensions."ts-error-translator".enable {
|
(mkIf cfg.extensions."ts-error-translator".enable {
|
||||||
vim.startPlugins = ["ts-error-translator"];
|
vim.startPlugins = ["ts-error-translator"];
|
||||||
vim.pluginRC.ts-error-translator = entryAnywhere ''
|
vim.luaConfigRC.ts-error-translator = entryAnywhere ''
|
||||||
require("ts-error-translator").setup(${toLuaObject cfg.extensions.ts-error-translator.setupOpts})
|
require("ts-error-translator").setup(${toLuaObject cfg.extensions.ts-error-translator.setupOpts})
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
|
|
@ -27,7 +27,7 @@ in {
|
||||||
|
|
||||||
autocomplete.sources = {"nvim_lsp" = "[LSP]";};
|
autocomplete.sources = {"nvim_lsp" = "[LSP]";};
|
||||||
|
|
||||||
pluginRC.lsp-setup = ''
|
luaConfigRC.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)
|
||||||
|
|
|
@ -12,7 +12,7 @@ in {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["nvim-lightbulb"];
|
startPlugins = ["nvim-lightbulb"];
|
||||||
|
|
||||||
pluginRC.lightbulb = entryAnywhere ''
|
luaConfigRC.lightbulb = entryAnywhere ''
|
||||||
vim.api.nvim_command('autocmd CursorHold,CursorHoldI * lua require\'nvim-lightbulb\'.update_lightbulb()')
|
vim.api.nvim_command('autocmd CursorHold,CursorHoldI * lua require\'nvim-lightbulb\'.update_lightbulb()')
|
||||||
|
|
||||||
-- Enable trouble diagnostics viewer
|
-- Enable trouble diagnostics viewer
|
||||||
|
|
|
@ -20,7 +20,7 @@ in {
|
||||||
handler_opts.border = config.vim.ui.borders.plugins.lsp-signature.style;
|
handler_opts.border = config.vim.ui.borders.plugins.lsp-signature.style;
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.lsp-signature = entryAnywhere ''
|
luaConfigRC.lsp-signature = entryAnywhere ''
|
||||||
-- Enable lsp signature viewer
|
-- Enable lsp signature viewer
|
||||||
require("lsp_signature").setup(${toLuaObject cfg.lspSignature.setupOpts})
|
require("lsp_signature").setup(${toLuaObject cfg.lspSignature.setupOpts})
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -17,7 +17,7 @@ in {
|
||||||
|
|
||||||
startPlugins = ["nvim-lspconfig"];
|
startPlugins = ["nvim-lspconfig"];
|
||||||
|
|
||||||
pluginRC.lspconfig = entryAfter ["lsp-setup"] ''
|
luaConfigRC.lspconfig = entryAfter ["lsp-setup"] ''
|
||||||
local lspconfig = require('lspconfig')
|
local lspconfig = require('lspconfig')
|
||||||
|
|
||||||
${
|
${
|
||||||
|
@ -29,7 +29,7 @@ in {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
vim.pluginRC = mapAttrs (_: v: (entryAfter ["lspconfig"] v)) cfg.lspconfig.sources;
|
vim.luaConfigRC = mapAttrs (_: v: (entryAfter ["lspconfig"] v)) cfg.lspconfig.sources;
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
in {
|
in {
|
||||||
config = mkIf (cfg.enable && cfg.lspkind.enable) {
|
config = mkIf (cfg.enable && cfg.lspkind.enable) {
|
||||||
vim.startPlugins = ["lspkind"];
|
vim.startPlugins = ["lspkind"];
|
||||||
vim.pluginRC.lspkind = entryAnywhere ''
|
vim.luaConfigRC.lspkind = entryAnywhere ''
|
||||||
local lspkind = require'lspkind'
|
local lspkind = require'lspkind'
|
||||||
local lspkind_opts = {
|
local lspkind_opts = {
|
||||||
mode = '${cfg.lspkind.mode}'
|
mode = '${cfg.lspkind.mode}'
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
in {
|
in {
|
||||||
config = mkIf (cfg.enable && cfg.lsplines.enable) {
|
config = mkIf (cfg.enable && cfg.lsplines.enable) {
|
||||||
vim.startPlugins = ["lsp-lines"];
|
vim.startPlugins = ["lsp-lines"];
|
||||||
vim.pluginRC.lsplines = entryAfter ["lspconfig"] ''
|
vim.luaConfigRC.lsplines = entryAfter ["lspconfig"] ''
|
||||||
require("lsp_lines").setup()
|
require("lsp_lines").setup()
|
||||||
|
|
||||||
vim.diagnostic.config({
|
vim.diagnostic.config({
|
||||||
|
|
|
@ -41,7 +41,7 @@ in {
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.lspsaga = entryAnywhere ''
|
luaConfigRC.lspsaga = entryAnywhere ''
|
||||||
require('lspsaga').init_lsp_saga({
|
require('lspsaga').init_lsp_saga({
|
||||||
${optionalString config.vim.ui.borders.plugins.lspsaga.enable ''
|
${optionalString config.vim.ui.borders.plugins.lspsaga.enable ''
|
||||||
border_style = '${config.vim.ui.borders.plugins.lspsaga.style}',
|
border_style = '${config.vim.ui.borders.plugins.lspsaga.style}',
|
||||||
|
|
|
@ -22,7 +22,7 @@ in {
|
||||||
# since it will hook into LSPs to receive information
|
# since it will hook into LSPs to receive information
|
||||||
lsp.enable = true;
|
lsp.enable = true;
|
||||||
|
|
||||||
pluginRC = {
|
luaConfigRC = {
|
||||||
# early setup for null-ls
|
# early setup for null-ls
|
||||||
null_ls-setup = entryAnywhere ''
|
null_ls-setup = entryAnywhere ''
|
||||||
local null_ls = require("null-ls")
|
local null_ls = require("null-ls")
|
||||||
|
@ -46,7 +46,7 @@ in {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
vim.pluginRC = mapAttrs (_: v: (entryBetween ["null_ls"] ["null_ls-setup"] v)) cfg.null-ls.sources;
|
vim.luaConfigRC = mapAttrs (_: v: (entryBetween ["null_ls"] ["null_ls-setup"] v)) cfg.null-ls.sources;
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ in {
|
||||||
"<leader>c" = "+CodeAction";
|
"<leader>c" = "+CodeAction";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.code-action-menu = entryAnywhere ''
|
luaConfigRC.code-action-menu = entryAnywhere ''
|
||||||
-- border configuration
|
-- border configuration
|
||||||
vim.g.code_action_menu_window_border = '${config.vim.ui.borders.plugins.code-action-menu.style}'
|
vim.g.code_action_menu_window_border = '${config.vim.ui.borders.plugins.code-action-menu.style}'
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ in {
|
||||||
lsp.enable = true;
|
lsp.enable = true;
|
||||||
startPlugins = ["nvim-docs-view"];
|
startPlugins = ["nvim-docs-view"];
|
||||||
|
|
||||||
pluginRC.nvim-docs-view = entryAnywhere ''
|
luaConfigRC.nvim-docs-view = entryAnywhere ''
|
||||||
require("docs-view").setup ${toLuaObject cfg.setupOpts}
|
require("docs-view").setup ${toLuaObject cfg.setupOpts}
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ in {
|
||||||
"<leader>lw" = "Workspace";
|
"<leader>lw" = "Workspace";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.trouble = entryAnywhere ''
|
luaConfigRC.trouble = entryAnywhere ''
|
||||||
-- Enable trouble diagnostics viewer
|
-- Enable trouble diagnostics viewer
|
||||||
require("trouble").setup {}
|
require("trouble").setup {}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -31,7 +31,7 @@ in {
|
||||||
"<leader>m" = "+Minimap";
|
"<leader>m" = "+Minimap";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.codewindow = entryAnywhere ''
|
luaConfigRC.codewindow = entryAnywhere ''
|
||||||
local codewindow = require('codewindow')
|
local codewindow = require('codewindow')
|
||||||
codewindow.setup({
|
codewindow.setup({
|
||||||
exclude_filetypes = { 'NvimTree', 'orgagenda', 'Alpha'},
|
exclude_filetypes = { 'NvimTree', 'orgagenda', 'Alpha'},
|
||||||
|
|
|
@ -25,7 +25,7 @@ in {
|
||||||
"<leader>o" = "+Notes";
|
"<leader>o" = "+Notes";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.mind-nvim = entryAnywhere ''
|
luaConfigRC.mind-nvim = entryAnywhere ''
|
||||||
require'mind'.setup()
|
require'mind'.setup()
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,7 +22,7 @@ in {
|
||||||
"<leader>o" = "+Notes";
|
"<leader>o" = "+Notes";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.obsidian = entryAnywhere ''
|
luaConfigRC.obsidian = entryAnywhere ''
|
||||||
require("obsidian").setup(${toLuaObject cfg.setupOpts})
|
require("obsidian").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -21,7 +21,7 @@ in {
|
||||||
"<leader>o" = "+Notes";
|
"<leader>o" = "+Notes";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.orgmode = entryAnywhere ''
|
luaConfigRC.orgmode = entryAnywhere ''
|
||||||
-- Treesitter configuration
|
-- Treesitter configuration
|
||||||
require('nvim-treesitter.configs').setup {
|
require('nvim-treesitter.configs').setup {
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ in {
|
||||||
(mkIf config.vim.lsp.trouble.enable (mkBinding cfg.mappings.trouble ":TodoTrouble<CR>" mappings.trouble.description))
|
(mkIf config.vim.lsp.trouble.enable (mkBinding cfg.mappings.trouble ":TodoTrouble<CR>" mappings.trouble.description))
|
||||||
];
|
];
|
||||||
|
|
||||||
pluginRC.todo-comments = ''
|
luaConfigRC.todo-comments = ''
|
||||||
require('todo-comments').setup(${toLuaObject cfg.setupOpts})
|
require('todo-comments').setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,7 +14,7 @@ in {
|
||||||
"project-nvim"
|
"project-nvim"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.project-nvim = entryAnywhere ''
|
vim.luaConfigRC.project-nvim = entryAnywhere ''
|
||||||
require('project_nvim').setup(${toLuaObject cfg.setupOpts})
|
require('project_nvim').setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -12,7 +12,7 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["neocord"];
|
vim.startPlugins = ["neocord"];
|
||||||
|
|
||||||
vim.pluginRC.neocord = entryAnywhere ''
|
vim.luaConfigRC.neocord = entryAnywhere ''
|
||||||
-- Description of each option can be found in https://github.com/IogaMaster/neocord#lua
|
-- Description of each option can be found in https://github.com/IogaMaster/neocord#lua
|
||||||
require("neocord").setup(${toLuaObject cfg.setupOpts})
|
require("neocord").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -28,7 +28,7 @@ in {
|
||||||
# TODO: load_current_dir_session
|
# TODO: load_current_dir_session
|
||||||
];
|
];
|
||||||
|
|
||||||
pluginRC.nvim-session-manager = entryAnywhere ''
|
luaConfigRC.nvim-session-manager = entryAnywhere ''
|
||||||
local Path = require('plenary.path')
|
local Path = require('plenary.path')
|
||||||
local sm = require('session_manager.config')
|
local sm = require('session_manager.config')
|
||||||
require('session_manager').setup(${toLuaObject cfg.setupOpts})
|
require('session_manager').setup(${toLuaObject cfg.setupOpts})
|
||||||
|
|
|
@ -14,7 +14,7 @@ in {
|
||||||
# vim-dirtytalk doesn't have any setup
|
# vim-dirtytalk doesn't have any setup
|
||||||
# but we would like to append programming to spelllang
|
# but we would like to append programming to spelllang
|
||||||
# as soon as possible while the plugin is enabled
|
# as soon as possible while the plugin is enabled
|
||||||
pluginRC.vim-dirtytalk = entryAfter ["basic"] ''
|
luaConfigRC.vim-dirtytalk = entryAfter ["basic"] ''
|
||||||
-- append programming to spelllang
|
-- append programming to spelllang
|
||||||
vim.opt.spelllang:append("programming")
|
vim.opt.spelllang:append("programming")
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -35,7 +35,7 @@ in {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["lualine"];
|
startPlugins = ["lualine"];
|
||||||
|
|
||||||
pluginRC.lualine = entryAnywhere ''
|
luaConfigRC.lualine = entryAnywhere ''
|
||||||
local lualine = require('lualine')
|
local lualine = require('lualine')
|
||||||
lualine.setup ${toLuaObject cfg.setupOpts}
|
lualine.setup ${toLuaObject cfg.setupOpts}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -39,7 +39,7 @@ in {
|
||||||
"<leader>bsi" = "BufferLineSortById";
|
"<leader>bsi" = "BufferLineSortById";
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC.nvimBufferline = entryAnywhere ''
|
luaConfigRC.nvimBufferline = entryAnywhere ''
|
||||||
require("bufferline").setup(${toLuaObject cfg.setupOpts})
|
require("bufferline").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,7 +23,7 @@ in {
|
||||||
|
|
||||||
maps.normal = mkBinding cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal";
|
maps.normal = mkBinding cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal";
|
||||||
|
|
||||||
pluginRC.toggleterm = entryAnywhere ''
|
luaConfigRC.toggleterm = entryAnywhere ''
|
||||||
require("toggleterm").setup(${toLuaObject cfg.setupOpts})
|
require("toggleterm").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
@ -35,7 +35,7 @@ in {
|
||||||
vim.startPlugins = optionals (cfg.lazygit.package != null) [
|
vim.startPlugins = optionals (cfg.lazygit.package != null) [
|
||||||
cfg.lazygit.package
|
cfg.lazygit.package
|
||||||
];
|
];
|
||||||
vim.pluginRC.toggleterm-lazygit = entryAfter ["toggleterm"] ''
|
vim.luaConfigRC.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 = '${
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
inherit (lib.attrsets) attrNames;
|
inherit (lib.attrsets) attrNames;
|
||||||
inherit (lib.types) bool lines enum;
|
inherit (lib.types) bool lines enum;
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
inherit (lib.nvim.dag) entryAfter;
|
inherit (lib.nvim.dag) entryBefore;
|
||||||
|
|
||||||
cfg = config.vim.theme;
|
cfg = config.vim.theme;
|
||||||
supportedThemes = import ./supported-themes.nix {
|
supported_themes = import ./supported_themes.nix {
|
||||||
inherit lib config;
|
inherit lib config;
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
|
@ -21,12 +21,12 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
name = mkOption {
|
name = mkOption {
|
||||||
type = enum (attrNames supportedThemes);
|
type = enum (attrNames supported_themes);
|
||||||
description = "Supported themes can be found in `supportedThemes.nix`";
|
description = "Supported themes can be found in `supported_themes.nix`";
|
||||||
};
|
};
|
||||||
|
|
||||||
style = mkOption {
|
style = mkOption {
|
||||||
type = enum supportedThemes.${cfg.name}.styles;
|
type = enum supported_themes.${cfg.name}.styles;
|
||||||
description = "Specific style for theme if it supports it";
|
description = "Specific style for theme if it supports it";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,9 +45,11 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = [cfg.name];
|
startPlugins = [cfg.name];
|
||||||
luaConfigRC.theme = entryAfter ["basic"] ''
|
configRC.theme = entryBefore ["luaScript"] ''
|
||||||
|
lua << EOF
|
||||||
${cfg.extraConfig}
|
${cfg.extraConfig}
|
||||||
${supportedThemes.${cfg.name}.setup {inherit (cfg) style transparent;}}
|
${supported_themes.${cfg.name}.setup (with cfg; {inherit style transparent;})}
|
||||||
|
EOF
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -37,18 +37,18 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
# For some reason treesitter highlighting does not work on start if this is set before syntax on
|
# For some reason treesitter highlighting does not work on start if this is set before syntax on
|
||||||
pluginRC.treesitter-fold = mkIf cfg.fold (entryBefore ["basic"] ''
|
configRC.treesitter-fold = mkIf cfg.fold (entryBefore ["basic"] ''
|
||||||
-- This is required by treesitter-context to handle folds
|
" This is required by treesitter-context to handle folds
|
||||||
vim.o.foldmethod = "expr"
|
set foldmethod=expr
|
||||||
vim.o.foldexpr = "nvim_treesitter#foldexpr()"
|
set foldexpr=nvim_treesitter#foldexpr()
|
||||||
|
|
||||||
-- This is optional, but is set rather as a sane default.
|
" This is optional, but is set rather as a sane default.
|
||||||
-- If unset, opened files will be folded by automatically as
|
" If unset, opened files will be folded by automatically as
|
||||||
-- the files are opened
|
" the files are opened
|
||||||
vim.o.foldenable = false
|
set nofoldenable
|
||||||
'');
|
'');
|
||||||
|
|
||||||
pluginRC.treesitter = entryAfter ["basic"] ''
|
luaConfigRC.treesitter = entryAfter ["basic"] ''
|
||||||
require('nvim-treesitter.configs').setup {
|
require('nvim-treesitter.configs').setup {
|
||||||
-- Disable imperative treesitter options that would attempt to fetch
|
-- Disable imperative treesitter options that would attempt to fetch
|
||||||
-- grammars into the read-only Nix store. To add additional grammars here
|
-- grammars into the read-only Nix store. To add additional grammars here
|
||||||
|
|
|
@ -16,7 +16,7 @@ in {
|
||||||
|
|
||||||
# set up treesitter-context after Treesitter. The ordering
|
# set up treesitter-context after Treesitter. The ordering
|
||||||
# should not matter, but there is no harm in doing this
|
# should not matter, but there is no harm in doing this
|
||||||
pluginRC.treesitter-context = entryAfter ["treesitter"] ''
|
luaConfigRC.treesitter-context = entryAfter ["treesitter"] ''
|
||||||
require("treesitter-context").setup(${toLuaObject cfg.setupOpts})
|
require("treesitter-context").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -78,7 +78,7 @@ in {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
vim.pluginRC.breadcrumbs = entryAfter ["lspconfig"] ''
|
vim.luaConfigRC.breadcrumbs = entryAfter ["lspconfig"] ''
|
||||||
|
|
||||||
${optionalString (cfg.source == "nvim-navic") ''
|
${optionalString (cfg.source == "nvim-navic") ''
|
||||||
local navic = require("nvim-navic")
|
local navic = require("nvim-navic")
|
||||||
|
|
|
@ -14,7 +14,7 @@ in {
|
||||||
"nvim-colorizer-lua"
|
"nvim-colorizer-lua"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.colorizer = entryAnywhere ''
|
vim.luaConfigRC.colorizer = entryAnywhere ''
|
||||||
require('colorizer').setup(${toLuaObject cfg.setupOpts})
|
require('colorizer').setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,7 +11,7 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["vim-illuminate"];
|
vim.startPlugins = ["vim-illuminate"];
|
||||||
|
|
||||||
vim.pluginRC.vim-illuminate = entryAnywhere ''
|
vim.luaConfigRC.vim-illuminate = entryAnywhere ''
|
||||||
require('illuminate').configure({
|
require('illuminate').configure({
|
||||||
filetypes_denylist = {
|
filetypes_denylist = {
|
||||||
'dirvish',
|
'dirvish',
|
||||||
|
|
|
@ -14,7 +14,7 @@ in {
|
||||||
"modes-nvim"
|
"modes-nvim"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.modes-nvim = entryAnywhere ''
|
vim.luaConfigRC.modes-nvim = entryAnywhere ''
|
||||||
require('modes').setup(${toLuaObject cfg.setupOpts})
|
require('modes').setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,7 +23,7 @@ in {
|
||||||
|
|
||||||
treesitter.grammars = optionals tscfg.addDefaultGrammars defaultGrammars;
|
treesitter.grammars = optionals tscfg.addDefaultGrammars defaultGrammars;
|
||||||
|
|
||||||
pluginRC.noice-nvim = entryAnywhere ''
|
luaConfigRC.noice-nvim = entryAnywhere ''
|
||||||
require("noice").setup(${toLuaObject cfg.setupOpts})
|
require("noice").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,7 +13,7 @@ in {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["nvim-notify"];
|
startPlugins = ["nvim-notify"];
|
||||||
|
|
||||||
pluginRC.nvim-notify = entryAnywhere ''
|
luaConfigRC.nvim-notify = entryAnywhere ''
|
||||||
require('notify').setup(${toLuaObject cfg.setupOpts})
|
require('notify').setup(${toLuaObject cfg.setupOpts})
|
||||||
|
|
||||||
-- required to fix offset_encoding errors
|
-- required to fix offset_encoding errors
|
||||||
|
|
|
@ -13,7 +13,7 @@ in {
|
||||||
vim = {
|
vim = {
|
||||||
startPlugins = ["smartcolumn"];
|
startPlugins = ["smartcolumn"];
|
||||||
|
|
||||||
pluginRC.smartcolumn = entryAnywhere ''
|
luaConfigRC.smartcolumn = entryAnywhere ''
|
||||||
require("smartcolumn").setup(${toLuaObject cfg.setupOpts})
|
require("smartcolumn").setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -11,7 +11,7 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["cheatsheet-nvim"];
|
vim.startPlugins = ["cheatsheet-nvim"];
|
||||||
|
|
||||||
vim.pluginRC.cheaetsheet-nvim = entryAnywhere ''
|
vim.luaConfigRC.cheaetsheet-nvim = entryAnywhere ''
|
||||||
require('cheatsheet').setup({})
|
require('cheatsheet').setup({})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,7 +13,7 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["which-key"];
|
vim.startPlugins = ["which-key"];
|
||||||
|
|
||||||
vim.pluginRC.whichkey = entryAnywhere ''
|
vim.luaConfigRC.whichkey = entryAnywhere ''
|
||||||
local wk = require("which-key")
|
local wk = require("which-key")
|
||||||
wk.setup ({
|
wk.setup ({
|
||||||
key_labels = {
|
key_labels = {
|
||||||
|
|
|
@ -13,7 +13,7 @@ in {
|
||||||
"ccc"
|
"ccc"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.ccc = entryAnywhere ''
|
vim.luaConfigRC.ccc = entryAnywhere ''
|
||||||
local ccc = require("ccc")
|
local ccc = require("ccc")
|
||||||
ccc.setup {
|
ccc.setup {
|
||||||
highlighter = {
|
highlighter = {
|
||||||
|
|
|
@ -25,7 +25,7 @@ in {
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.gesture-nvim = entryAnywhere ''
|
vim.luaConfigRC.gesture-nvim = entryAnywhere ''
|
||||||
vim.opt.mouse = "a"
|
vim.opt.mouse = "a"
|
||||||
|
|
||||||
local gesture = require("gesture")
|
local gesture = require("gesture")
|
||||||
|
|
|
@ -14,7 +14,7 @@ in {
|
||||||
"dressing-nvim"
|
"dressing-nvim"
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.icon-picker = entryAnywhere ''
|
vim.luaConfigRC.icon-picker = entryAnywhere ''
|
||||||
require("icon-picker").setup({
|
require("icon-picker").setup({
|
||||||
disable_legacy_commands = true
|
disable_legacy_commands = true
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,7 +19,7 @@ in {
|
||||||
"magick"
|
"magick"
|
||||||
];
|
];
|
||||||
|
|
||||||
pluginRC.image-nvim = entryAnywhere ''
|
luaConfigRC.image-nvim = entryAnywhere ''
|
||||||
require("image").setup(
|
require("image").setup(
|
||||||
${toLuaObject cfg.setupOpts}
|
${toLuaObject cfg.setupOpts}
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,7 +19,7 @@ in {
|
||||||
|
|
||||||
vim.maps.normal = mkSetBinding mappings.hop "<cmd> HopPattern<CR>";
|
vim.maps.normal = mkSetBinding mappings.hop "<cmd> HopPattern<CR>";
|
||||||
|
|
||||||
vim.pluginRC.hop-nvim = entryAnywhere ''
|
vim.luaConfigRC.hop-nvim = entryAnywhere ''
|
||||||
require('hop').setup()
|
require('hop').setup()
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -37,7 +37,7 @@ in {
|
||||||
(mkBinding cfg.mappings.leapFromWindow "<Plug>(leap-from-window)" "Leap from window")
|
(mkBinding cfg.mappings.leapFromWindow "<Plug>(leap-from-window)" "Leap from window")
|
||||||
];
|
];
|
||||||
|
|
||||||
vim.pluginRC.leap-nvim = entryAnywhere ''
|
vim.luaConfigRC.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,
|
||||||
|
|
|
@ -25,7 +25,7 @@ in {
|
||||||
"<leader>pm" = "+Preview Markdown";
|
"<leader>pm" = "+Preview Markdown";
|
||||||
};
|
};
|
||||||
|
|
||||||
vim.pluginRC.glow = entryAnywhere ''
|
vim.luaConfigRC.glow = entryAnywhere ''
|
||||||
require('glow').setup({
|
require('glow').setup({
|
||||||
glow_path = "${pkgs.glow}/bin/glow"
|
glow_path = "${pkgs.glow}/bin/glow"
|
||||||
});
|
});
|
||||||
|
|
|
@ -4,23 +4,25 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.strings) stringLength concatMapStringsSep;
|
inherit (lib.strings) optionalString stringLength concatMapStringsSep;
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.nvim.vim) mkVimBool;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.utility.preview.markdownPreview;
|
cfg = config.vim.utility.preview.markdownPreview;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = [pkgs.vimPlugins.markdown-preview-nvim];
|
vim.startPlugins = [pkgs.vimPlugins.markdown-preview-nvim];
|
||||||
|
|
||||||
vim.globals = {
|
vim.configRC.markdown-preview = entryAnywhere ''
|
||||||
mkdp_auto_start = cfg.autoStart;
|
let g:mkdp_auto_start = ${mkVimBool cfg.autoStart}
|
||||||
mkdp_auto_close = cfg.autoClose;
|
let g:mkdp_auto_close = ${mkVimBool cfg.autoClose}
|
||||||
mkdp_refresh_slow = cfg.lazyRefresh;
|
let g:mkdp_refresh_slow = ${mkVimBool cfg.lazyRefresh}
|
||||||
mkdp_filetypes = [(concatMapStringsSep ", " (x: "'" + x + "'") cfg.filetypes)];
|
let g:mkdp_filetypes = [${concatMapStringsSep ", " (x: "'" + x + "'") cfg.filetypes}]
|
||||||
mkdp_command_for_global = cfg.alwaysAllowPreview;
|
let g:mkdp_command_for_global = ${mkVimBool cfg.alwaysAllowPreview}
|
||||||
mkdp_open_to_the_world = cfg.broadcastServer;
|
let g:mkdp_open_to_the_world = ${mkVimBool cfg.broadcastServer}
|
||||||
mkdp_open_ip = mkIf (stringLength cfg.customIP > 0) cfg.customIP;
|
${optionalString (stringLength cfg.customIP > 0) "let g:mkdp_open_ip = '${cfg.customIP}'"}
|
||||||
mkdp_port = mkIf (stringLength cfg.customPort > 0) cfg.customPort;
|
${optionalString (stringLength cfg.customPort > 0) "let g:mkdp_port = '${cfg.customPort}'"}
|
||||||
};
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ in {
|
||||||
"nvim-surround"
|
"nvim-surround"
|
||||||
];
|
];
|
||||||
|
|
||||||
pluginRC.surround = entryAnywhere ''
|
luaConfigRC.surround = entryAnywhere ''
|
||||||
require('nvim-surround').setup()
|
require('nvim-surround').setup()
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ in {
|
||||||
"<leader>fvc" = "Commits";
|
"<leader>fvc" = "Commits";
|
||||||
};
|
};
|
||||||
|
|
||||||
vim.pluginRC.telescope = entryAnywhere ''
|
vim.luaConfigRC.telescope = entryAnywhere ''
|
||||||
local telescope = require('telescope')
|
local telescope = require('telescope')
|
||||||
telescope.setup(${toLuaObject cfg.setupOpts})
|
telescope.setup(${toLuaObject cfg.setupOpts})
|
||||||
|
|
||||||
|
|
|
@ -5,14 +5,21 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkIf;
|
inherit (lib.modules) mkIf;
|
||||||
|
inherit (lib.nvim.dag) entryAnywhere;
|
||||||
|
|
||||||
cfg = config.vim.utility.vim-wakatime;
|
cfg = config.vim.utility.vim-wakatime;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = [pkgs.vimPlugins.vim-wakatime];
|
vim.startPlugins = [
|
||||||
|
pkgs.vimPlugins.vim-wakatime
|
||||||
|
];
|
||||||
|
|
||||||
vim.pluginRC.vim-wakatime = mkIf (cfg.cli-package != null) ''
|
vim.configRC.vim-wakatime = entryAnywhere ''
|
||||||
vim.g.wakatime_CLIPath = "${cfg.cli-package}"
|
${
|
||||||
|
if cfg.cli-package == null
|
||||||
|
then ""
|
||||||
|
else ''let g:wakatime_CLIPath = "${cfg.cli-package}"''
|
||||||
|
}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,14 +14,14 @@ in {
|
||||||
config = mkIf cfg.enable (mkMerge [
|
config = mkIf cfg.enable (mkMerge [
|
||||||
(mkIf cfg.indentBlankline.enable {
|
(mkIf cfg.indentBlankline.enable {
|
||||||
vim.startPlugins = ["indent-blankline"];
|
vim.startPlugins = ["indent-blankline"];
|
||||||
vim.pluginRC.indent-blankline = entryAnywhere ''
|
vim.luaConfigRC.indent-blankline = entryAnywhere ''
|
||||||
require("ibl").setup(${toLuaObject cfg.indentBlankline.setupOpts})
|
require("ibl").setup(${toLuaObject cfg.indentBlankline.setupOpts})
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
|
||||||
(mkIf cfg.cursorline.enable {
|
(mkIf cfg.cursorline.enable {
|
||||||
vim.startPlugins = ["nvim-cursorline"];
|
vim.startPlugins = ["nvim-cursorline"];
|
||||||
vim.pluginRC.cursorline = entryAnywhere ''
|
vim.luaConfigRC.cursorline = entryAnywhere ''
|
||||||
require('nvim-cursorline').setup {
|
require('nvim-cursorline').setup {
|
||||||
cursorline = {
|
cursorline = {
|
||||||
timeout = ${toString cfg.cursorline.lineTimeout},
|
timeout = ${toString cfg.cursorline.lineTimeout},
|
||||||
|
@ -37,7 +37,7 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.scrollBar.enable {
|
(mkIf cfg.scrollBar.enable {
|
||||||
vim.startPlugins = ["scrollbar-nvim"];
|
vim.startPlugins = ["scrollbar-nvim"];
|
||||||
vim.pluginRC.scrollBar = entryAnywhere ''
|
vim.luaConfigRC.scrollBar = entryAnywhere ''
|
||||||
require('scrollbar').setup{
|
require('scrollbar').setup{
|
||||||
excluded_filetypes = {
|
excluded_filetypes = {
|
||||||
'prompt',
|
'prompt',
|
||||||
|
@ -56,7 +56,7 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.smoothScroll.enable {
|
(mkIf cfg.smoothScroll.enable {
|
||||||
vim.startPlugins = ["cinnamon-nvim"];
|
vim.startPlugins = ["cinnamon-nvim"];
|
||||||
vim.pluginRC.smoothScroll = entryAnywhere ''
|
vim.luaConfigRC.smoothScroll = entryAnywhere ''
|
||||||
require('cinnamon').setup()
|
require('cinnamon').setup()
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
@ -66,7 +66,7 @@ in {
|
||||||
|
|
||||||
vim.maps.normal = mkBinding cfg.cellularAutomaton.mappings.makeItRain "<cmd>CellularAutomaton make_it_rain<CR>" "Make it rain";
|
vim.maps.normal = mkBinding cfg.cellularAutomaton.mappings.makeItRain "<cmd>CellularAutomaton make_it_rain<CR>" "Make it rain";
|
||||||
|
|
||||||
vim.pluginRC.cellularAUtomaton = entryAnywhere ''
|
vim.luaConfigRC.cellularAUtomaton = entryAnywhere ''
|
||||||
local config = {
|
local config = {
|
||||||
fps = 50,
|
fps = 50,
|
||||||
name = 'slide',
|
name = 'slide',
|
||||||
|
@ -94,7 +94,7 @@ in {
|
||||||
|
|
||||||
(mkIf cfg.highlight-undo.enable {
|
(mkIf cfg.highlight-undo.enable {
|
||||||
vim.startPlugins = ["highlight-undo"];
|
vim.startPlugins = ["highlight-undo"];
|
||||||
vim.pluginRC.highlight-undo = entryAnywhere ''
|
vim.luaConfigRC.highlight-undo = entryAnywhere ''
|
||||||
require('highlight-undo').setup({
|
require('highlight-undo').setup({
|
||||||
duration = ${toString cfg.highlight-undo.duration},
|
duration = ${toString cfg.highlight-undo.duration},
|
||||||
highlight_for_count = ${boolToString cfg.highlight-undo.highlightForCount},
|
highlight_for_count = ${boolToString cfg.highlight-undo.highlightForCount},
|
||||||
|
|
|
@ -12,7 +12,7 @@ in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["fidget-nvim"];
|
vim.startPlugins = ["fidget-nvim"];
|
||||||
|
|
||||||
vim.pluginRC.fidget-nvim = entryAnywhere ''
|
vim.luaConfigRC.fidget-nvim = entryAnywhere ''
|
||||||
require'fidget'.setup(${toLuaObject cfg.setupOpts})
|
require'fidget'.setup(${toLuaObject cfg.setupOpts})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -3,16 +3,17 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (builtins) map mapAttrs filter;
|
inherit (builtins) map mapAttrs toJSON filter;
|
||||||
inherit (lib.options) mkOption;
|
inherit (lib.options) mkOption;
|
||||||
inherit (lib.attrsets) filterAttrs getAttrs attrValues attrNames;
|
inherit (lib.attrsets) filterAttrs getAttrs attrValues attrNames;
|
||||||
inherit (lib.strings) concatLines concatMapStringsSep;
|
inherit (lib.strings) isString concatLines concatMapStringsSep;
|
||||||
inherit (lib.misc) mapAttrsFlatten;
|
inherit (lib.misc) mapAttrsFlatten;
|
||||||
inherit (lib.trivial) showWarnings;
|
inherit (lib.trivial) showWarnings;
|
||||||
inherit (lib.types) str nullOr;
|
inherit (lib.types) str nullOr;
|
||||||
inherit (lib.generators) mkLuaInline;
|
inherit (lib.generators) mkLuaInline;
|
||||||
inherit (lib.nvim.dag) entryAfter mkLuarcSection resolveDag entryAnywhere;
|
inherit (lib.nvim.dag) entryAnywhere entryAfter topoSort mkLuarcSection mkVimrcSection;
|
||||||
inherit (lib.nvim.lua) toLuaObject;
|
inherit (lib.nvim.lua) toLuaObject wrapLuaConfig;
|
||||||
|
inherit (lib.nvim.vim) valToVim;
|
||||||
inherit (lib.nvim.config) mkBool;
|
inherit (lib.nvim.config) mkBool;
|
||||||
|
|
||||||
cfg = config.vim;
|
cfg = config.vim;
|
||||||
|
@ -81,23 +82,11 @@
|
||||||
maps);
|
maps);
|
||||||
in {
|
in {
|
||||||
config = let
|
config = let
|
||||||
filterNonNull = attrs: filterAttrs (_: value: value != null) attrs;
|
filterNonNull = mappings: filterAttrs (_name: value: value != null) mappings;
|
||||||
globalsScript =
|
globalsScript =
|
||||||
mapAttrsFlatten (name: value: "vim.g.${name} = ${toLuaObject value}")
|
mapAttrsFlatten (name: value: "let g:${name}=${valToVim value}")
|
||||||
(filterNonNull cfg.globals);
|
(filterNonNull cfg.globals);
|
||||||
|
|
||||||
extraPluginConfigs = resolveDag {
|
|
||||||
name = "extra plugin configs";
|
|
||||||
dag = mapAttrs (_: value: entryAfter value.after value.setup) cfg.extraPlugins;
|
|
||||||
mapResult = result: concatLines (map mkLuarcSection result);
|
|
||||||
};
|
|
||||||
|
|
||||||
pluginConfigs = resolveDag {
|
|
||||||
name = "plugin configs";
|
|
||||||
dag = cfg.pluginRC;
|
|
||||||
mapResult = result: concatLines (map mkLuarcSection result);
|
|
||||||
};
|
|
||||||
|
|
||||||
toLuaBindings = mode: maps:
|
toLuaBindings = mode: maps:
|
||||||
map (value: ''
|
map (value: ''
|
||||||
vim.keymap.set(${toLuaObject mode}, ${toLuaObject value.key}, ${toLuaObject value.action}, ${toLuaObject value.config})
|
vim.keymap.set(${toLuaObject mode}, ${toLuaObject value.key}, ${toLuaObject value.action}, ${toLuaObject value.config})
|
||||||
|
@ -116,31 +105,96 @@ in {
|
||||||
omap = toLuaBindings "o" config.vim.maps.operator;
|
omap = toLuaBindings "o" config.vim.maps.operator;
|
||||||
icmap = toLuaBindings "ic" config.vim.maps.insertCommand;
|
icmap = toLuaBindings "ic" config.vim.maps.insertCommand;
|
||||||
|
|
||||||
maps = [
|
resolveDag = {
|
||||||
nmap
|
name,
|
||||||
imap
|
dag,
|
||||||
vmap
|
mapResult,
|
||||||
xmap
|
}: let
|
||||||
smap
|
# When the value is a string, default it to dag.entryAnywhere
|
||||||
cmap
|
finalDag = mapAttrs (_: value:
|
||||||
omap
|
if isString value
|
||||||
tmap
|
then entryAnywhere value
|
||||||
lmap
|
else value)
|
||||||
icmap
|
dag;
|
||||||
allmap
|
sortedDag = topoSort finalDag;
|
||||||
];
|
result =
|
||||||
mappings = concatLines (map concatLines maps);
|
if sortedDag ? result
|
||||||
|
then mapResult sortedDag.result
|
||||||
|
else abort ("Dependency cycle in ${name}: " + toJSON sortedDag);
|
||||||
|
in
|
||||||
|
result;
|
||||||
in {
|
in {
|
||||||
vim = {
|
vim = {
|
||||||
luaConfigRC = {
|
configRC = {
|
||||||
globalsScript = entryAnywhere (concatLines globalsScript);
|
globalsScript = entryAnywhere (concatLines globalsScript);
|
||||||
# basic, theme
|
|
||||||
pluginConfigs = entryAfter ["theme"] pluginConfigs;
|
# Call additional lua files with :luafile in Vimscript
|
||||||
extraPluginConfigs = entryAfter ["pluginConfigs"] extraPluginConfigs;
|
# section of the configuration, only after
|
||||||
mappings = entryAfter ["extraPluginConfigs"] mappings;
|
# the luaScript section has been evaluated
|
||||||
|
extraLuaFiles = let
|
||||||
|
callLuaFiles = map (file: "luafile ${file}") cfg.extraLuaFiles;
|
||||||
|
in
|
||||||
|
entryAfter ["globalScript"] (concatLines callLuaFiles);
|
||||||
|
|
||||||
|
# wrap the lua config in a lua block
|
||||||
|
# using the wrapLuaConfic function from the lib
|
||||||
|
luaScript = let
|
||||||
|
mapResult = result: (wrapLuaConfig {
|
||||||
|
luaBefore = "${cfg.luaConfigPre}";
|
||||||
|
luaConfig = concatLines (map mkLuarcSection result);
|
||||||
|
luaAfter = "${cfg.luaConfigPost}";
|
||||||
|
});
|
||||||
|
|
||||||
|
luaConfig = resolveDag {
|
||||||
|
name = "lua config script";
|
||||||
|
dag = cfg.luaConfigRC;
|
||||||
|
inherit mapResult;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
entryAnywhere luaConfig;
|
||||||
|
|
||||||
|
extraPluginConfigs = let
|
||||||
|
mapResult = result: (wrapLuaConfig {
|
||||||
|
luaConfig = concatLines (map mkLuarcSection result);
|
||||||
|
});
|
||||||
|
|
||||||
|
extraPluginsDag = mapAttrs (_: {
|
||||||
|
after,
|
||||||
|
setup,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
entryAfter after setup)
|
||||||
|
cfg.extraPlugins;
|
||||||
|
|
||||||
|
pluginConfig = resolveDag {
|
||||||
|
name = "extra plugins config";
|
||||||
|
dag = extraPluginsDag;
|
||||||
|
inherit mapResult;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
entryAfter ["luaScript"] pluginConfig;
|
||||||
|
|
||||||
|
# This is probably not the right way to set the config. I'm not sure how it should look like.
|
||||||
|
mappings = let
|
||||||
|
maps = [
|
||||||
|
nmap
|
||||||
|
imap
|
||||||
|
vmap
|
||||||
|
xmap
|
||||||
|
smap
|
||||||
|
cmap
|
||||||
|
omap
|
||||||
|
tmap
|
||||||
|
lmap
|
||||||
|
icmap
|
||||||
|
allmap
|
||||||
|
];
|
||||||
|
mapConfig = wrapLuaConfig {luaConfig = concatLines (map concatLines maps);};
|
||||||
|
in
|
||||||
|
entryAfter ["globalsScript"] mapConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
builtLuaConfigRC = let
|
builtConfigRC = let
|
||||||
# Catch assertions and warnings
|
# Catch assertions and warnings
|
||||||
# and throw for each failed assertion. If no assertions are found, show warnings.
|
# and throw for each failed assertion. If no assertions are found, show warnings.
|
||||||
failedAssertions = map (x: x.message) (filter (x: !x.assertion) config.assertions);
|
failedAssertions = map (x: x.message) (filter (x: !x.assertion) config.assertions);
|
||||||
|
@ -149,18 +203,14 @@ in {
|
||||||
then throw "\nFailed assertions:\n${concatMapStringsSep "\n" (x: "- ${x}") failedAssertions}"
|
then throw "\nFailed assertions:\n${concatMapStringsSep "\n" (x: "- ${x}") failedAssertions}"
|
||||||
else showWarnings config.warnings;
|
else showWarnings config.warnings;
|
||||||
|
|
||||||
luaConfig = resolveDag {
|
mapResult = result: concatMapStringsSep "\n" mkVimrcSection result;
|
||||||
name = "lua config script";
|
vimConfig = resolveDag {
|
||||||
dag = cfg.luaConfigRC;
|
name = "vim config script";
|
||||||
mapResult = result:
|
dag = cfg.configRC;
|
||||||
concatLines [
|
inherit mapResult;
|
||||||
cfg.luaConfigPre
|
|
||||||
(concatMapStringsSep "\n" mkLuarcSection result)
|
|
||||||
cfg.luaConfigPost
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
baseSystemAssertWarn luaConfig;
|
baseSystemAssertWarn vimConfig;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,25 +3,13 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib.modules) mkRemovedOptionModule;
|
|
||||||
inherit (lib.options) mkOption mkEnableOption literalMD literalExpression;
|
inherit (lib.options) mkOption mkEnableOption literalMD literalExpression;
|
||||||
inherit (lib.strings) optionalString;
|
inherit (lib.strings) optionalString;
|
||||||
inherit (lib.types) str attrs lines listOf either path bool;
|
inherit (lib.types) str oneOf attrs lines listOf either path bool;
|
||||||
inherit (lib.nvim.types) dagOf;
|
inherit (lib.nvim.types) dagOf;
|
||||||
inherit (lib.nvim.lua) listToLuaTable;
|
inherit (lib.nvim.lua) listToLuaTable;
|
||||||
|
|
||||||
cfg = config.vim;
|
cfg = config.vim;
|
||||||
in {
|
in {
|
||||||
imports = [
|
|
||||||
(mkRemovedOptionModule ["vim" "configRC"] ''
|
|
||||||
Please migrate your configRC sections to Neovim's Lua format, and
|
|
||||||
add them to luaConfigRC.
|
|
||||||
|
|
||||||
See the v0.7 release notes for more information on how to migrate
|
|
||||||
your existing configurations.
|
|
||||||
'')
|
|
||||||
];
|
|
||||||
|
|
||||||
options.vim = {
|
options.vim = {
|
||||||
enableLuaLoader = mkEnableOption ''
|
enableLuaLoader = mkEnableOption ''
|
||||||
the experimental Lua module loader to speed up the start up process
|
the experimental Lua module loader to speed up the start up process
|
||||||
|
@ -132,20 +120,35 @@ in {
|
||||||
description = ''
|
description = ''
|
||||||
An attribute set containing global variable values
|
An attribute set containing global variable values
|
||||||
for storing vim variables as early as possible. If
|
for storing vim variables as early as possible. If
|
||||||
populated, this option will set vim variables in the
|
populated, this soption will set vim variables in the
|
||||||
built luaConfigRC as the first item.
|
built configRC as the first item.
|
||||||
|
|
||||||
E.g. {foo = "bar"} will set `vim.g.foo` to "bar" where
|
E.g. {foo = "bar"} will set `g:foo` to "bar" where
|
||||||
the type of `bar` in the resulting vimscript will be
|
the type of `bar` in the resulting vimscript will be
|
||||||
infered from the type of the value in the `{name = value}`
|
infered from the type of the value in the `{name = value}`
|
||||||
pair.
|
pair.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
pluginRC = mkOption {
|
configRC = mkOption {
|
||||||
type = either (dagOf lines) str;
|
type = oneOf [(dagOf lines) str];
|
||||||
default = {};
|
default = {};
|
||||||
description = "The DAG used to configure plugins. If a string is passed, entryAnywhere is automatically applied.";
|
description = ''
|
||||||
|
Contents of vimrc, either as a string or a DAG.
|
||||||
|
|
||||||
|
If this option is passed as a DAG, it will be resolved
|
||||||
|
according to the DAG resolution rules (e.g. entryBefore
|
||||||
|
or entryAfter) as per the **nvf** extended library.
|
||||||
|
'';
|
||||||
|
|
||||||
|
example = literalMD ''
|
||||||
|
```vim
|
||||||
|
" Set the tab size to 4 spaces
|
||||||
|
set tabstop=4
|
||||||
|
set shiftwidth=4
|
||||||
|
set expandtab
|
||||||
|
```
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
luaConfigPre = mkOption {
|
luaConfigPre = mkOption {
|
||||||
|
@ -208,7 +211,7 @@ in {
|
||||||
};
|
};
|
||||||
|
|
||||||
luaConfigRC = mkOption {
|
luaConfigRC = mkOption {
|
||||||
type = either (dagOf lines) str;
|
type = oneOf [(dagOf lines) str];
|
||||||
default = {};
|
default = {};
|
||||||
description = ''
|
description = ''
|
||||||
Lua configuration, either as a string or a DAG.
|
Lua configuration, either as a string or a DAG.
|
||||||
|
@ -242,10 +245,10 @@ in {
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
builtLuaConfigRC = mkOption {
|
builtConfigRC = mkOption {
|
||||||
internal = true;
|
internal = true;
|
||||||
type = lines;
|
type = lines;
|
||||||
description = "The built lua config for neovim after resolving the DAG";
|
description = "The built config for neovim after resolving the DAG";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue