Compare commits

...

59 commits

Author SHA1 Message Date
356f92053c
neovim/init: merge conditionals in options set 2025-01-07 06:12:13 +03:00
raf
b704a28a12
Merge branch 'main' into more-option-stuff 2025-01-07 05:47:59 +03:00
2728e65a5e
docs/installation: mark additional inputs as 'optional' 2025-01-07 04:19:57 +03:00
raf
a1bac1d356
Merge pull request #529 from horriblename/feat-aerial
utility/aerial.nvim: init
2025-01-06 14:00:21 +03:00
Ching Pei Yang
de02e2fa57
docs: update release notes 2025-01-06 11:58:08 +01:00
Ching Pei Yang
c071f2caa2
nvimtree: remove unnecessary import 2025-01-06 11:45:02 +01:00
Ching Pei Yang
92e38fbfae
aerial: init 2025-01-06 11:44:48 +01:00
Ching Pei Yang
ee4c072ba3
flake: add aerial.nvim 2025-01-06 11:44:38 +01:00
raf
9888a277ad
git/gitsigns: migrate to setupOpts (#524)
* git/gitsigns: add `setupOpts` module option for user-specified setup table

* docs: update v0.8 release notes
2025-01-06 03:54:38 +03:00
b7bea89d9a
docs: update contributors section; add maintainers 2025-01-05 11:37:22 +03:00
raf
9584fe25e2
docs: add helpful tips section (#520) 2025-01-05 08:35:09 +00:00
eb6e8b17b7
docs: clean up module installation chapters 2025-01-04 15:35:55 +03:00
fcc6aa485c
utility/wakatime: move plugin options to vim.globals; cleanup 2025-01-04 15:29:11 +03:00
raf
e614860a12
Merge pull request #519 from diniamo/improve-nobuildplug-2
wrapper/build: improve noBuildPlug
2025-01-02 09:51:31 +03:00
diniamo
af0eed84e0 wrapper/build: improve noBuildPlug 2025-01-02 07:18:31 +01:00
Ching Pei Yang
ecc9b60a2d nixos: use attrset for long function args 2025-01-02 04:12:04 +03:00
Ching Pei Yang
fcbc49e2e5 home-manager: use attr for long function args 2025-01-02 04:12:04 +03:00
Ching Pei Yang
59bf01bbe0 nixos: remove redundant import module 2025-01-02 04:12:04 +03:00
Ching Pei Yang
9ccd0bfd4e home-manager: remove redundant import module 2025-01-02 04:12:04 +03:00
Ching Pei Yang
411e641eab lib: remove anythingConcatLists 2025-01-02 04:12:04 +03:00
Ching Pei Yang
98b36e08f0 nixos: use proper submodule type for settings 2025-01-02 04:12:04 +03:00
Ching Pei Yang
8c1352502a module: remove redundant code
the bulk of the build step is moved to modules/wrapper/build
2025-01-02 04:12:04 +03:00
Ching Pei Yang
7d043e5f14 home-manager: use proper submodule type for settings 2025-01-02 04:12:04 +03:00
Ching Pei Yang
26398b6b14 wrapper: add built package as option 2025-01-02 04:12:04 +03:00
Ching Pei Yang
f9d1684b5f wrapper: rename build dir to environemnt 2025-01-02 04:12:04 +03:00
raf
8febf44422
languages/markdown: add render-markdown.nvim as an extension (#517) 2024-12-31 04:02:13 +00:00
raf
c0c6447090
Merge pull request #516 from NotAShelf/bump-all-inputs
flake: bump all inputs
2024-12-30 19:35:54 +03:00
2a89fd4093
flake: bump all inputs 2024-12-30 19:21:33 +03:00
raf
ba3173d363
Merge pull request #515 from diniamo/update-run
flake: update run.nvim
2024-12-30 12:05:52 +03:00
diniamo
c3b51df4a6 flake: update run.nvim 2024-12-30 09:49:33 +01:00
raf
b6a49b299a
Merge pull request #514 from diniamo/update-mnw
flake: update mnw
2024-12-26 10:34:41 +03:00
diniamo
74e48b519d flake: update mnw 2024-12-26 08:06:13 +01:00
raf
aa1754d5cc
Merge pull request #513 from diniamo/update-run
flake: update run.nvim
2024-12-25 18:19:36 +03:00
diniamo
672630f680 flake: update run.nvim 2024-12-25 15:11:29 +01:00
raf
7dd2026b9d
Merge pull request #512 from diniamo/nvim-notify-explicit-function
nvim-notify: use explicit function for vim.notify
2024-12-25 00:52:53 +03:00
raf
edc887f0e3
Merge branch 'main' into nvim-notify-explicit-function 2024-12-25 00:51:18 +03:00
diniamo
a34d104e3f
languages/zig: disable lsp autosave (#511) 2024-12-24 14:19:08 +03:00
diniamo
f6a8cd968e nvim-notify: use explicit function for vim.notify 2024-12-24 11:43:23 +01:00
DamitusThyYeetus123
3a2edd1b75
filetree/nvim-tree: Open on directory (#462)
* nvim-tree: Add directory opening

* formatting

* Fix formatting

* format

Co-authored-by: raf <raf@notashelf.dev>

---------

Co-authored-by: Ching Pei Yang <59727193+horriblename@users.noreply.github.com>
Co-authored-by: raf <raf@notashelf.dev>
2024-12-23 08:56:19 +00:00
raf
46aa168b2d
Merge pull request #509 from diniamo/update-run
flake: update run.nvim
2024-12-22 00:33:24 +03:00
diniamo
9aad80d5e6 flake: update run.nvim 2024-12-21 22:31:41 +01:00
raf
ac905b8aed
Merge pull request #505 from diniamo/odin
languages/odin: init
2024-12-21 12:41:16 +03:00
diniamo
90a5a42742 languages/odin: init 2024-12-21 10:35:39 +01:00
raf
8bab0497fb
Merge pull request #500 from diniamo/lazy-before-setup
wrapper/lazy: add beforeSetup option
2024-12-21 08:17:41 +03:00
raf
f26744c6ce
Merge branch 'main' into lazy-before-setup 2024-12-21 08:15:08 +03:00
raf
62d296a2dc
Merge pull request #506 from amadaluzia/fix-haskell
languages/haskell: fix DAP command definition
2024-12-21 08:14:43 +03:00
raf
8c66f10550
Merge branch 'main' into fix-haskell 2024-12-21 08:14:31 +03:00
raf
ea3d488cf4
Merge pull request #504 from diniamo/surround-cleanup
surround: cleanup
2024-12-21 08:14:14 +03:00
Artur Manuel
0946d43921 languages/haskell: fix DAP command definition 2024-12-21 01:00:02 +00:00
diniamo
7eb8d07bcf surround: cleanup 2024-12-21 01:14:52 +01:00
raf
52042f624c
Merge pull request #498 from NotAShelf/fix-mdpw-ft
preview/markdown-preview: convert `mkdp_filetypes` to correct format
2024-12-20 20:01:21 +03:00
raf
af31021ce4
Merge branch 'main' into fix-mdpw-ft 2024-12-20 20:00:57 +03:00
raf
5c69fbd951
Merge pull request #501 from diniamo/nvim-notify-cleanup
nvim-notify: fix some stuff
2024-12-20 19:00:04 +03:00
diniamo
5d898da816 nvim-notify: fix some stuff 2024-12-20 16:27:44 +01:00
diniamo
ed69816f68 wrapper/lazy: add beforeSetup option
Useful for avoiding a million require calls in setupOpts.
2024-12-20 10:43:36 +01:00
Yoni Firroloni
99a4eafa34
languages/typescript: prevent ts_ls from formatting (#495)
* ts_ls: prevent from formatting

prevent ts_ls from touching the formating.

ts formatting: remove useless indent

* fix unnecessary whitespace

---------

Co-authored-by: raf <raf@notashelf.dev>
2024-12-20 04:11:18 +00:00
Artur Manuel
e715463257
plugins/languages: add haskell support (#499)
* plugins/languages: add haskell support

Closes #426

* fix docs

---------

Co-authored-by: Artur Manuel <balkenix@outlook.com>
Co-authored-by: raf <raf@notashelf.dev>
2024-12-20 03:50:38 +00:00
4f61628399
preview/markdown-preview: convert mkdp_filetypes to correct format 2024-12-19 09:53:15 +03:00
a0a57757a0
wrapper/rc: explicitly add tabstop & shiftwidth to vim.options
Defaults are taken from Neovim's :help tags for those options to avoid intrusive/confusing behaviour.
2024-12-12 20:16:27 +03:00
51 changed files with 1123 additions and 657 deletions

36
.github/README.md vendored
View file

@ -206,6 +206,16 @@ features.
## Credits
### Co-Maintainers
Alongside myself, nvf is developed by those talented folk:
- [**@horriblename**](https://github.com/horriblename) - For actively
implementing planned features and quality of life updates.
- [**@Diniamo**](https://github.com/Diniamo)
([Liberapay](https://en.liberapay.com/diniamo/)) - For actively submitting
pull requests, issues and assistance with maintenance of nvf.
### Contributors
[mnw]: https://github.com/gerg-l/mnw
@ -213,21 +223,19 @@ features.
nvf would not be what it is today without the awesome people below. Special,
heart-felt thanks to
- [@fufexan](https://github.com/fufexan) - For the transition to flake-parts and
invaluable Nix assistance.
- [@FlafyDev](https://github.com/FlafyDev) - For getting home-manager module to
work and Nix assistance.
- [@n3oney](https://github.com/n3oney) - For making custom keybinds finally
- [**@fufexan**](https://github.com/fufexan) - For the transition to flake-parts
and invaluable Nix assistance.
- [**@FlafyDev**](https://github.com/FlafyDev) - For getting Home-Manager module
to work and Nix assistance.
- [**@n3oney**](https://github.com/n3oney) - For making custom keybinds finally
possible, and other module additions.
- [@horriblename](https://github.com/horriblename) - For actively implementing
planned features and quality of life updates.
- [@Yavko](https://github.com/Yavko) - For the amazing **nvf** logo
- [@FrothyMarrow](https://github.com/FrothyMarrow) - For seeing mistakes that I
could not.
- [@Diniamo](https://github.com/Diniamo) - For actively submitting pull
requests, issues and assistance with maintenance of nvf.
- [@Gerg-l](https://github.com/gerg-l) - For the modern Neovim wrapper, [mnw],
and occasional code improvements.
- [**@Yavko**](https://github.com/Yavko) - For the amazing **nvf** logo
- [**@FrothyMarrow**](https://github.com/FrothyMarrow) - For seeing mistakes
that I could not.
- [**@Gerg-l**](https://github.com/gerg-l) 🐸 - For the modern Neovim wrapper,
[mnw], and occasional code improvements.
- [**@Soliprem**](https://github.com/soliprem) - Rigorously implementing missing
features and excellent work on new language modules.
and everyone who has submitted issues or pull requests!

View file

@ -79,6 +79,7 @@ isMaximal: {
dart.enable = false;
ocaml.enable = false;
elixir.enable = false;
haskell.enable = false;
tailwind.enable = false;
svelte.enable = false;

View file

@ -10,12 +10,18 @@ To use it, we first add the input flake.
```nix
{
inputs = {
# Optional, if you intend to follow nvf's obsidian-nvim input
# you must also add it as a flake input.
obsidian-nvim.url = "github:epwalsh/obsidian.nvim";
# Required, nvf works best and only directly supports flakes
nvf = {
url = "github:notashelf/nvf";
# you can override input nixpkgs
# You can override the input nixpkgs to follow your system's
# instance of nixpkgs. This is safe to do as nvf does not depend
# on a binary cache.
inputs.nixpkgs.follows = "nixpkgs";
# you can also override individual plugins
# Optionally, you can also override individual plugins
# for example:
inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- this will use the obsidian-nvim from your inputs
};
@ -27,8 +33,8 @@ Followed by importing the home-manager module somewhere in your configuration.
```nix
{
# assuming nvf is in your inputs and inputs is in the argset
# see example below
# Assuming "nvf" is in your inputs and inputs is in the argument set.
# See example installation below
imports = [ inputs.nvf.homeManagerModules.default ];
}
```
@ -44,12 +50,15 @@ Followed by importing the home-manager module somewhere in your configuration.
};
outputs = { nixpkgs, home-manager, nvf, ... }: let
system = "x86_64-linux"; in {
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in {
# ↓ this is your home output in the flake schema, expected by home-manager
"your-username@your-hostname" = home-manager.lib.homeManagerConfiguration
"your-username@your-hostname" = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [
nvf.homeManagerModules.default # <- this imports the home-manager module that provides the options
./home.nix # <- your home entrypoint
./home.nix # <- your home entrypoint, `programs.nvf.*` may be defined here
];
};
};

View file

@ -10,12 +10,18 @@ To use it, we first add the input flake.
```nix
{
inputs = {
# Optional, if you intend to follow nvf's obsidian-nvim input
# you must also add it as a flake input.
obsidian-nvim.url = "github:epwalsh/obsidian.nvim";
# Required, nvf works best and only directly supports flakes
nvf = {
url = "github:notashelf/nvf";
# you can override input nixpkgs
# You can override the input nixpkgs to follow your system's
# instance of nixpkgs. This is safe to do as nvf does not depend
# on a binary cache.
inputs.nixpkgs.follows = "nixpkgs";
# you can also override individual plugins
# Optionally, you can also override individual plugins
# for example:
inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- this will use the obsidian-nvim from your inputs
};
@ -42,13 +48,12 @@ Followed by importing the NixOS module somewhere in your configuration.
nvf.url = "github:notashelf/nvf";
};
outputs = { nixpkgs, nvf, ... }: let
system = "x86_64-linux"; in {
outputs = { nixpkgs, nvf, ... }: {
# ↓ this is your host output in the flake schema
nixosConfigurations."yourUsername»" = nixpkgs.lib.nixosSystem {
nixosConfigurations."your-hostname" = nixpkgs.lib.nixosSystem {
modules = [
nvf.nixosModules.default # <- this imports the NixOS module that provides the options
./configuration.nix # <- your host entrypoint
./configuration.nix # <- your host entrypoint, `programs.nvf.*` may be defined here
];
};
};

View file

@ -11,6 +11,7 @@ try-it-out.md
default-configs.md
installation.md
configuring.md
tips.md
```
```{=include=} chapters

6
docs/manual/tips.md Normal file
View file

@ -0,0 +1,6 @@
# Helpful Tips {#ch-helpful-tips}
```{=include=} chapters
tips/debugging-nvf.md
tips/offline-docs.md
```

View file

@ -0,0 +1,19 @@
# Debugging nvf {#sec-debugging-nvf}
There may be instances where the your Nix configuration evaluates to invalid
Lua, or times when you will be asked to provide your built Lua configuration for
easier debugging by nvf maintainers. nvf provides two helpful utilities out of
the box.
**nvf-print-config** and **nvf-print-config-path** will be bundled with nvf as
lightweight utilities to help you view or share your built configuration when
necessary.
To view your configuration with syntax highlighting, you may use the
[bat pager](https://github.com/sharkdp/bat).
```bash
nvf-print-config | bat --language=lua
```
Alternatively, `cat` or `less` may also be used.

View file

@ -0,0 +1,11 @@
# Offline Documentation {#sec-offline-documentation}
[https://notashelf.github.io/nvf/options.html]: https://notashelf.github.io/nvf/options.html
The manpages provided by nvf contains an offline version of the option search
normally available at [https://notashelf.github.io/nvf/options.html]. You may
use the `man 5 nvf` command to view option documentation from the comfort of
your terminal.
Note that this is only available for NixOS and Home-Manager module
installations.

View file

@ -3,8 +3,34 @@
[NotAShelf](https://github.com/notashelf):
[typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim
[render-markdown.nvim]: https://github.com/MeanderingProgrammer/render-markdown.nvim
- Add [typst-preview.nvim] under
`languages.typst.extensions.typst-preview-nvim`.
- Add a search widget to the options page in the nvf manual.
- Add [render-markdown.nvim] under
`languages.markdown.extensions.render-markdown-nvim`
- Implement [](#opt-vim.git.gitsigns.setupOpts) for user-specified setup table
in gitsigns configuration.
[amadaluzia](https://github.com/amadaluzia):
[haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim
- Add Haskell support under `vim.languages.haskell` using [haskell-tools.nvim].
[diniamo](https://github.com/diniamo):
- Add Odin support under `vim.languages.odin`.
- Disable the built-in format-on-save feature of zls. Use `vim.lsp.formatOnSave`
instead.
[horriblename](https://github.com/horriblename):
[aerial.nvim](https://github.com/stevearc/aerial.nvim)
- Add [aerial.nvim]

View file

@ -5,11 +5,11 @@
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1730504689,
"narHash": "sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS+b4tfNFCwE=",
"lastModified": 1733312601,
"narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "506278e768c2a08bec68eb62932193e341f55c90",
"rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github"
},
"original": {
@ -38,11 +38,11 @@
},
"mnw": {
"locked": {
"lastModified": 1731821965,
"narHash": "sha256-QiGi/HBQRnIRGY4gQPuH7T3hr7NznOpEO7qNpF5ldmE=",
"lastModified": 1735150973,
"narHash": "sha256-OJhcCAoaMMXeD6o4qI/hxBCNELJp4dN8D5LJZc8w8XA=",
"owner": "Gerg-L",
"repo": "mnw",
"rev": "5fe5c41975ed0af55f55dc37cd28ba906a5d015e",
"rev": "40cd0b006cc48dffd0f8698ad7f54cf1d56779a6",
"type": "github"
},
"original": {
@ -98,11 +98,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1733024928,
"narHash": "sha256-n/DOfpKH1vkukuBnach91QBQId2dr5tkE7/7UrkV2zw=",
"lastModified": 1735523292,
"narHash": "sha256-opBsbR/nrGxiiF6XzlVluiHYb6yN/hEwv+lBWTy9xoM=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2c27ab2e60502d1ebb7cf38909de38663f762a79",
"rev": "6d97d419e5a9b36e6293887a89a078cf85f5a61b",
"type": "github"
},
"original": {
@ -114,14 +114,14 @@
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1730504152,
"narHash": "sha256-lXvH/vOfb4aGYyvFmZK/HlsNsr/0CVWlwYvo2rxJk3s=",
"lastModified": 1733096140,
"narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz"
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/cc2f28000298e1269cea6612cd06ec9979dd5d7f.tar.gz"
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
}
},
"nixpkgs_2": {
@ -156,6 +156,22 @@
"type": "sourcehut"
}
},
"plugin-aerial-nvim": {
"flake": false,
"locked": {
"lastModified": 1736064692,
"narHash": "sha256-7YQtkUTACTMfAGoqoFDPmRrqtw+ypxDbeLCTB3sy4Us=",
"owner": "stevearc",
"repo": "aerial.nvim",
"rev": "b3ec25ca8c347fafa976484a6cace162239112e1",
"type": "github"
},
"original": {
"owner": "stevearc",
"repo": "aerial.nvim",
"type": "github"
}
},
"plugin-alpha-nvim": {
"flake": false,
"locked": {
@ -207,11 +223,11 @@
"plugin-catppuccin": {
"flake": false,
"locked": {
"lastModified": 1732428187,
"narHash": "sha256-Oogw5wmYkx/zsMlPE/r6Kt3cy5sC92rwVzf0P9rzqyw=",
"lastModified": 1735299190,
"narHash": "sha256-lwQLmqm01FihJdad4QRMK23MTrouyOokyuX/3enWjzs=",
"owner": "catppuccin",
"repo": "nvim",
"rev": "faf15ab0201b564b6368ffa47b56feefc92ce3f4",
"rev": "f67b886d65a029f12ffa298701fb8f1efd89295d",
"type": "github"
},
"original": {
@ -335,11 +351,11 @@
"plugin-cmp-nvim-lsp": {
"flake": false,
"locked": {
"lastModified": 1715931395,
"narHash": "sha256-CT1+Z4XJBVsl/RqvJeGmyitD6x7So0ylXvvef5jh7I8=",
"lastModified": 1733823748,
"narHash": "sha256-iaihXNCF5bB5MdeoosD/kc3QtpA/QaIDZVLiLIurBSM=",
"owner": "hrsh7th",
"repo": "cmp-nvim-lsp",
"rev": "39e2eda76828d88b773cc27a3f61d2ad782c922d",
"rev": "99290b3ec1322070bcfb9e846450a46f6efa50f0",
"type": "github"
},
"original": {
@ -415,11 +431,11 @@
"plugin-copilot-cmp": {
"flake": false,
"locked": {
"lastModified": 1718601710,
"narHash": "sha256-8w9go2SBkI+BrXNadWM8ZxDDfrAnZZJx6RbVHAK4+Pg=",
"lastModified": 1733947099,
"narHash": "sha256-erRL8bY/zuwuCZfttw+avTrFV7pjv2H6v73NzY2bymM=",
"owner": "zbirenbaum",
"repo": "copilot-cmp",
"rev": "b6e5286b3d74b04256d0a7e3bd2908eabec34b44",
"rev": "15fc12af3d0109fa76b60b5cffa1373697e261d1",
"type": "github"
},
"original": {
@ -431,11 +447,11 @@
"plugin-copilot-lua": {
"flake": false,
"locked": {
"lastModified": 1729295476,
"narHash": "sha256-UY6N2Q+egh+Cn4REZXrSGH9ElWQBedl0n8tWJvGe7vs=",
"lastModified": 1734926641,
"narHash": "sha256-c2UE0dLBtoYMvMxg+jXzfsD+wN9sZLvftJq4gGmooZU=",
"owner": "zbirenbaum",
"repo": "copilot.lua",
"rev": "f8d8d872bb319f640d5177dad5fbf01f7a16d7d0",
"rev": "886ee73b6d464b2b3e3e6a7ff55ce87feac423a9",
"type": "github"
},
"original": {
@ -463,11 +479,11 @@
"plugin-csharpls-extended": {
"flake": false,
"locked": {
"lastModified": 1732674428,
"narHash": "sha256-d7ll3OlOLx/7E+6+uga26L/FAqd8pZ4XquMakxMsFwU=",
"lastModified": 1734491815,
"narHash": "sha256-jO/vuNgP8JAOIturzPFvxMLL5y+6YTYsUxjWwX6Nyso=",
"owner": "Decodetalkers",
"repo": "csharpls-extended-lsp.nvim",
"rev": "c788fed627827238de348195c3f318cd090e8e77",
"rev": "4f56c06215d10c4fcfee8a7f04ba766c114aece0",
"type": "github"
},
"original": {
@ -511,11 +527,11 @@
"plugin-dracula": {
"flake": false,
"locked": {
"lastModified": 1731308832,
"narHash": "sha256-3Tlk+utoF4QUjTIPszbyMDh5vUyNiBmq4bRW/leMjaU=",
"lastModified": 1734597715,
"narHash": "sha256-9iRI5NW3mcVzduitY4sr679dRWAWVbZuCAEfgM1OIOs=",
"owner": "Mofiqul",
"repo": "dracula.nvim",
"rev": "e6128ec3923b92bb2b16e81b4a0f04ed0308038e",
"rev": "515acae4fd294fcefa5b15237a333c2606e958d1",
"type": "github"
},
"original": {
@ -527,11 +543,11 @@
"plugin-dressing-nvim": {
"flake": false,
"locked": {
"lastModified": 1731521499,
"narHash": "sha256-O0sdxU+ZQnclnnC5IfBpgqlMxjsJKlmPYQYPP+S3cn8=",
"lastModified": 1734804193,
"narHash": "sha256-N4hB5wDgoqXrXxSfzDCrqmdDtdVvq+PtOS7FBPH7qXE=",
"owner": "stevearc",
"repo": "dressing.nvim",
"rev": "fc78a3ca96f4db9f8893bb7e2fd9823e0780451b",
"rev": "3a45525bb182730fe462325c99395529308f431e",
"type": "github"
},
"original": {
@ -543,11 +559,11 @@
"plugin-elixir-tools": {
"flake": false,
"locked": {
"lastModified": 1727872243,
"narHash": "sha256-7gIvoV6myqbkjLnIhHuyNPix1DFkKEeeND2o6VDxDWc=",
"lastModified": 1735076861,
"narHash": "sha256-CoGTVSKifjqshk8hYaQfFYTYgEGsIb1hKdz6fIS81iU=",
"owner": "elixir-tools",
"repo": "elixir-tools.nvim",
"rev": "b465f6aff50257fa466de3886fc3e7de2dcff0de",
"rev": "803fa69dbb457305cff98e3997bed2c4b51aea7c",
"type": "github"
},
"original": {
@ -559,11 +575,11 @@
"plugin-fastaction-nvim": {
"flake": false,
"locked": {
"lastModified": 1732135971,
"narHash": "sha256-Q+FX7XiX8LyTC4OZ43Q2pXIdSViDn65P9pkDp8jvbnA=",
"lastModified": 1734546047,
"narHash": "sha256-1GSxTyXqufjkRtNK3drWlCn/mGJ9mM9bHMR6ZwWT6X8=",
"owner": "Chaitanyabsprip",
"repo": "fastaction.nvim",
"rev": "24255a74e0d35f1e1807aa78997f5c31ae419dbc",
"rev": "886e22d85e13115808e81ca367d5aaba02d9a25b",
"type": "github"
},
"original": {
@ -575,11 +591,11 @@
"plugin-fidget-nvim": {
"flake": false,
"locked": {
"lastModified": 1730221432,
"narHash": "sha256-fQBrkHV54TaOeLYQJ1DE+lr7SFDPN1yqSlzhFm26NAY=",
"lastModified": 1734334336,
"narHash": "sha256-o0za2NxFtzHZa7PRIm9U/P1/fwJrxS1G79ukdGLhJ4Q=",
"owner": "j-hui",
"repo": "fidget.nvim",
"rev": "e2a175c2abe2d4f65357da1c98c59a5cfb2b543f",
"rev": "9238947645ce17d96f30842e61ba81147185b657",
"type": "github"
},
"original": {
@ -591,11 +607,11 @@
"plugin-flutter-tools": {
"flake": false,
"locked": {
"lastModified": 1732910301,
"narHash": "sha256-iU0aTq3F5U2z8iKdUMxkvQ8ZopmWIGdx1I8ir0q7n0U=",
"lastModified": 1735420417,
"narHash": "sha256-xfSdPhrSUwBYdE9ZA8GgwFvR70nOp+snbNrFHeIfwOM=",
"owner": "akinsho",
"repo": "flutter-tools.nvim",
"rev": "40f974b15f82f9af498adda8d93aabd637f3ab58",
"rev": "a526c30f1941a7472509aaedda13758f943c968e",
"type": "github"
},
"original": {
@ -607,11 +623,11 @@
"plugin-friendly-snippets": {
"flake": false,
"locked": {
"lastModified": 1728273759,
"narHash": "sha256-H94Ryad0ZsSg/gioUgW+7sowij7GgtEUMNFi1IOZAys=",
"lastModified": 1733106470,
"narHash": "sha256-I8SRZxnoNC6SOWW+scoA77Jwyxcb4eUczppLdyOiZe0=",
"owner": "rafamadriz",
"repo": "friendly-snippets",
"rev": "de8fce94985873666bd9712ea3e49ee17aadb1ed",
"rev": "efff286dd74c22f731cdec26a70b46e5b203c619",
"type": "github"
},
"original": {
@ -684,6 +700,22 @@
"type": "github"
}
},
"plugin-haskell-tools-nvim": {
"flake": false,
"locked": {
"lastModified": 1734222260,
"narHash": "sha256-gZVN9ADPO5wFOaf19FydCneb7aKTT9K1vcLoBURPEjk=",
"owner": "mrcjkb",
"repo": "haskell-tools.nvim",
"rev": "943b77b68a79d3991523ba4d373063c9355c6f55",
"type": "github"
},
"original": {
"owner": "mrcjkb",
"repo": "haskell-tools.nvim",
"type": "github"
}
},
"plugin-highlight-undo": {
"flake": false,
"locked": {
@ -735,11 +767,11 @@
"plugin-image-nvim": {
"flake": false,
"locked": {
"lastModified": 1732136347,
"narHash": "sha256-Az/jiHW/DtvHNlV+Wzw6U+p8b2Ic9pNJRQ6YGerL81c=",
"lastModified": 1735173549,
"narHash": "sha256-Sjbmf4BmjkjAorT3tojbC7JivJagFamAVgzwcCipa8k=",
"owner": "3rd",
"repo": "image.nvim",
"rev": "5f8fceca2d1be96a45b81de21c2f98bf6084fb34",
"rev": "b991fc7f845bc6ab40c6ec00b39750dcd5190010",
"type": "github"
},
"original": {
@ -751,11 +783,11 @@
"plugin-indent-blankline": {
"flake": false,
"locked": {
"lastModified": 1731320409,
"narHash": "sha256-WVDNi/woG0ohPEYzM83mmXDCRNYnQbqooSDVUtBsJbY=",
"lastModified": 1733296464,
"narHash": "sha256-H3lUQZDvgj3a2STYeMUDiOYPe7rfsy08tJ4SlDd+LuE=",
"owner": "lukas-reineke",
"repo": "indent-blankline.nvim",
"rev": "7871a88056f7144defca9c931e311a3134c5d509",
"rev": "259357fa4097e232730341fa60988087d189193a",
"type": "github"
},
"original": {
@ -783,11 +815,11 @@
"plugin-lsp-lines": {
"flake": false,
"locked": {
"lastModified": 1716108775,
"narHash": "sha256-QsvmPOer7JgO7Y+N/iaNJD7Kmy69gnlV4CeyaQesNvA=",
"lastModified": 1734793049,
"narHash": "sha256-jHiIZemneQACTDYZXBJqX2/PRTBoxq403ILvt1Ej1ZM=",
"owner": "~whynothugo",
"repo": "lsp_lines.nvim",
"rev": "7d9e2748b61bff6ebba6e30adbc7173ccf21c055",
"rev": "a92c755f182b89ea91bd8a6a2227208026f27b4d",
"type": "sourcehut"
},
"original": {
@ -815,11 +847,11 @@
"plugin-lspkind": {
"flake": false,
"locked": {
"lastModified": 1729872608,
"narHash": "sha256-/ifgjqqCQw67l3+gUs00tt860pa92M1WYdjdZ0lhxak=",
"lastModified": 1733408701,
"narHash": "sha256-OCvKUBGuzwy8OWOL1x3Z3fo+0+GyBMI9TX41xSveqvE=",
"owner": "onsails",
"repo": "lspkind-nvim",
"rev": "a700f1436d4a938b1a1a93c9962dc796afbaef4d",
"rev": "d79a1c3299ad0ef94e255d045bed9fa26025dab6",
"type": "github"
},
"original": {
@ -879,11 +911,11 @@
"plugin-luasnip": {
"flake": false,
"locked": {
"lastModified": 1732967555,
"narHash": "sha256-iWivJ6dIOEqT3uLQA5KzvCHkDcjC62OlNWagEW680qc=",
"lastModified": 1733162004,
"narHash": "sha256-efDe3RXncnNVkj37AmIv8oj0DKurB50Dziao5FGTLP4=",
"owner": "L3MON4D3",
"repo": "LuaSnip",
"rev": "2592b91577136dbb355a4708be1e60619456b7f6",
"rev": "33b06d72d220aa56a7ce80a0dd6f06c70cd82b9d",
"type": "github"
},
"original": {
@ -895,11 +927,11 @@
"plugin-lz-n": {
"flake": false,
"locked": {
"lastModified": 1733019070,
"narHash": "sha256-Go9FBjF3EBFy+/53lpC5AdKYpJBK+uFzInTk6lODxdQ=",
"lastModified": 1735437369,
"narHash": "sha256-6NIXqwmX7RgwiZVEzmTnkJgmrPqFNx12ayIcRgNIaEs=",
"owner": "nvim-neorocks",
"repo": "lz.n",
"rev": "f308fa4dd81355fb5fddf3ca209847d679af6917",
"rev": "32be28a221b9c98e56841458e4b20c150a4169c4",
"type": "github"
},
"original": {
@ -960,11 +992,11 @@
"plugin-modes-nvim": {
"flake": false,
"locked": {
"lastModified": 1717693302,
"narHash": "sha256-z1XD0O+gG2/+g/skdWGC64Zv4dXvvhWesaK/8DcPF/E=",
"lastModified": 1734414076,
"narHash": "sha256-ShIK8ROowT1yFHgSIVHUFnnQOEMr3YPIqw4ixzR8w8M=",
"owner": "mvllow",
"repo": "modes.nvim",
"rev": "326cff3282419b3bcc745061978c1e592cae055d",
"rev": "c7a4b1b383606832aab150902719bd5eb5cdb2b0",
"type": "github"
},
"original": {
@ -976,11 +1008,11 @@
"plugin-neo-tree-nvim": {
"flake": false,
"locked": {
"lastModified": 1732465535,
"narHash": "sha256-3wRojpFbdjcRQPv62/mHqQgyfytTqaBcsX1X0zCNgC8=",
"lastModified": 1735302061,
"narHash": "sha256-tZMneZsEbB5bgZgYq4ZWwK25B3vcnn80Q7diKcRoEv4=",
"owner": "nvim-neo-tree",
"repo": "neo-tree.nvim",
"rev": "42caaf5c3b7ca346ab278201151bb878006a6031",
"rev": "a9f8943b4c31f8460d25c71e0f463d65e9775f1c",
"type": "github"
},
"original": {
@ -992,11 +1024,11 @@
"plugin-neocord": {
"flake": false,
"locked": {
"lastModified": 1729369963,
"narHash": "sha256-4dVaxigJ8eOXpgiqcxUYIF4SoC1CPFvNHYKT0zxIYo0=",
"lastModified": 1733429637,
"narHash": "sha256-g/pq6hFo7duonIl1wWoxbJUTh/IRTH3hHEoQUdoiqKE=",
"owner": "IogaMaster",
"repo": "neocord",
"rev": "587e03390a355e9c364d48638e0e0db2a8431d73",
"rev": "4d55d8dab2d5f2f272192add7a2c21982039c699",
"type": "github"
},
"original": {
@ -1024,11 +1056,11 @@
"plugin-neorg": {
"flake": false,
"locked": {
"lastModified": 1732289702,
"narHash": "sha256-8RQ+PFnIcjPoNJQB/qz+zv1fjVjFEwPhuAh+JL7GPL4=",
"lastModified": 1734188232,
"narHash": "sha256-xH87caxEebrWLwY/v3xyyOy6PTG/ZqX2OfCdwg/RqDY=",
"owner": "nvim-neorg",
"repo": "neorg",
"rev": "7a893a176a7d9c074a5371865b53c6aa4e223991",
"rev": "6b945909d84b5aeadc875f9b3f529ec44b9bc60f",
"type": "github"
},
"original": {
@ -1072,11 +1104,11 @@
"plugin-noice-nvim": {
"flake": false,
"locked": {
"lastModified": 1732649160,
"narHash": "sha256-0RLMkThaE6AxYvUKx056Ac63Oc2NTJxvgyRnZJ5/D2g=",
"lastModified": 1734026622,
"narHash": "sha256-OpwgNTGunmy6Y7D/k0T+DFK/WJ8MeVTGWwjiPTQlvEY=",
"owner": "folke",
"repo": "noice.nvim",
"rev": "c6f6fb178ebe9b4fd90383de743c3399f8c3a37c",
"rev": "eaed6cc9c06aa2013b5255349e4f26a6b17ab70f",
"type": "github"
},
"original": {
@ -1105,11 +1137,11 @@
"plugin-nui-nvim": {
"flake": false,
"locked": {
"lastModified": 1726376728,
"narHash": "sha256-90Wq+vT361mTaGU/SvAezqJkX9HHmZ2GI2fKBDxPn04=",
"lastModified": 1733856815,
"narHash": "sha256-6U7E/i5FuNXQy+sF4C5DVxuTPqNKD5wxUgFohpOjm9Q=",
"owner": "MunifTanjim",
"repo": "nui.nvim",
"rev": "b58e2bfda5cea347c9d58b7f11cf3012c7b3953f",
"rev": "53e907ffe5eedebdca1cd503b00aa8692068ca46",
"type": "github"
},
"original": {
@ -1153,11 +1185,11 @@
"plugin-nvim-cmp": {
"flake": false,
"locked": {
"lastModified": 1732948484,
"narHash": "sha256-+0nflL0WCaxPuJgUviELhbXASNYYl/SKZ+nz70sEAXU=",
"lastModified": 1734672427,
"narHash": "sha256-Z/Qy2ErbCa7dbjZVuJUkMmb4d24amNunNgRcbCGPfOg=",
"owner": "hrsh7th",
"repo": "nvim-cmp",
"rev": "ca4d3330d386e76967e53b85953c170658255ecb",
"rev": "b555203ce4bd7ff6192e759af3362f9d217e8c89",
"type": "github"
},
"original": {
@ -1169,11 +1201,11 @@
"plugin-nvim-colorizer-lua": {
"flake": false,
"locked": {
"lastModified": 1732386340,
"narHash": "sha256-lAWeljYC17bmEs1Ss80o6eJYrJ9fsFlKvyJWu9e44XU=",
"lastModified": 1735384185,
"narHash": "sha256-quqs3666vQc/4ticc/Z5BHzGxV6UUVE9jVGT07MEMQQ=",
"owner": "NvChad",
"repo": "nvim-colorizer.lua",
"rev": "4acf88d31b3a7a1a7f31e9c30bf2b23c6313abdb",
"rev": "8a65c448122fc8fac9c67b2e857b6e830a4afd0b",
"type": "github"
},
"original": {
@ -1201,11 +1233,11 @@
"plugin-nvim-dap": {
"flake": false,
"locked": {
"lastModified": 1732901614,
"narHash": "sha256-atsgMdPyAAbh4dIxZOAE3hHLLb/664112lHdXHcXtZQ=",
"lastModified": 1735568902,
"narHash": "sha256-5iaXim9bDvSAI6jUXgu2OEk/KivfAsMTRry+UTHs2Gk=",
"owner": "mfussenegger",
"repo": "nvim-dap",
"rev": "0a0daa796a5919a51e5e5019ffa91219c94c4fef",
"rev": "ffb077e65259f13be096ea6d603e3575a76b214a",
"type": "github"
},
"original": {
@ -1233,11 +1265,11 @@
"plugin-nvim-dap-ui": {
"flake": false,
"locked": {
"lastModified": 1727897692,
"narHash": "sha256-kg7lyVBeuBqPCVzvt3pBoonQupgf1nGh3EvCF/astf4=",
"lastModified": 1735324898,
"narHash": "sha256-psIBQpx3tV2UWm5hZTMPBANcXHPAX24dIuDq8Qcscxs=",
"owner": "rcarriga",
"repo": "nvim-dap-ui",
"rev": "ffa89839f97bad360e78428d5c740fdad9a0ff02",
"rev": "e94d98649dccb6a3884b66aabc2e07beb279e535",
"type": "github"
},
"original": {
@ -1249,11 +1281,11 @@
"plugin-nvim-docs-view": {
"flake": false,
"locked": {
"lastModified": 1723781320,
"narHash": "sha256-6kd3IWsD72eYe+q1w78gcFcK9LalCQHCqtSwwqQR3Ew=",
"lastModified": 1733658747,
"narHash": "sha256-b5aH8Tj+tMk0BjNCgdeCEeR26oQ9NCobj98P7IDgIPY=",
"owner": "amrbashir",
"repo": "nvim-docs-view",
"rev": "365593534e0acd762bfddce6e8313315ffa4fa36",
"rev": "1b97f8f954d74c46061bf289b6cea9232484c12c",
"type": "github"
},
"original": {
@ -1265,11 +1297,11 @@
"plugin-nvim-lightbulb": {
"flake": false,
"locked": {
"lastModified": 1729134062,
"narHash": "sha256-JfXSuOBwyxgH/PzzcBQ7OqoXHkLGZSCYutYHLocbTto=",
"lastModified": 1734997673,
"narHash": "sha256-byvgRJvvt5rhiUVWdreY2jELXoPVld5EKQlOXwjNgWE=",
"owner": "kosayoda",
"repo": "nvim-lightbulb",
"rev": "33d4c95e0e853956bc9468b70b3064c87d5abaca",
"rev": "3ac0791be37ba9cc7939f1ad90ebc5e75abf4eea",
"type": "github"
},
"original": {
@ -1281,11 +1313,11 @@
"plugin-nvim-lspconfig": {
"flake": false,
"locked": {
"lastModified": 1733062298,
"narHash": "sha256-tLZYWbKSQxiRU1tQqRXAUSTfCS7a1tHNSIMbt0aOamU=",
"lastModified": 1735439232,
"narHash": "sha256-6a1HjpLYdZ+ZmWM1B0tv631A3EHHstPrjaV15UnVtoY=",
"owner": "neovim",
"repo": "nvim-lspconfig",
"rev": "90c1c6cc822b1836209514c096069b9bbeab63d9",
"rev": "8b15a1a597a59f4f5306fad9adfe99454feab743",
"type": "github"
},
"original": {
@ -1297,11 +1329,11 @@
"plugin-nvim-metals": {
"flake": false,
"locked": {
"lastModified": 1728295172,
"narHash": "sha256-ja/+MNxZ3H9io9jDwm5rhE6iKNi86a22eCOY75g19O8=",
"lastModified": 1735386491,
"narHash": "sha256-G9V7fX65uW4z7kiuiP8mLtEjLoTJ1mkltj51OlN5/oM=",
"owner": "scalameta",
"repo": "nvim-metals",
"rev": "f861db9fda55939797ac1b05238c49b0dcdc3bdb",
"rev": "e6b02c99161b43c67cfe1d6e5f9a9b9a0bb4701c",
"type": "github"
},
"original": {
@ -1345,11 +1377,11 @@
"plugin-nvim-neoclip": {
"flake": false,
"locked": {
"lastModified": 1725927226,
"narHash": "sha256-GHkTIGPgX5j1wUS9EW/fGOp3NSRjfVaz+6o1Aehy2Xw=",
"lastModified": 1734898459,
"narHash": "sha256-RCMZi1DM9JFrXWQ5w2wOjFzpANkiukn+RvHB9swMtbk=",
"owner": "AckslD",
"repo": "nvim-neoclip.lua",
"rev": "32e05f2d23dc5b6a284a688c0535a83d1bfc633f",
"rev": "5e5e010251281f4aea69cfc1d4976ffe6065cf0f",
"type": "github"
},
"original": {
@ -1377,11 +1409,11 @@
"plugin-nvim-notify": {
"flake": false,
"locked": {
"lastModified": 1727022370,
"narHash": "sha256-Sd7IR5roXHOKRCxhqtYMhWfEltyRJMDEMDO/ecSKenE=",
"lastModified": 1735562588,
"narHash": "sha256-9jDpoLLto9WgTsV399WeE2XGrTJXWTYbcJ+zOFWldAA=",
"owner": "rcarriga",
"repo": "nvim-notify",
"rev": "fbef5d32be8466dd76544a257d3f3dce20082a07",
"rev": "c3797193536711b5d8983975791c4b11dc35ab3a",
"type": "github"
},
"original": {
@ -1441,11 +1473,11 @@
"plugin-nvim-tree-lua": {
"flake": false,
"locked": {
"lastModified": 1732428058,
"narHash": "sha256-HHgC7aH2m3gv2FtOK1jhjBgJOGWrdc+FQOEpMiEWe74=",
"lastModified": 1734820548,
"narHash": "sha256-4PmP31vYPH9xw4AjV5rDSKvcvZGTnIaPfR4Bwc0lAiA=",
"owner": "nvim-tree",
"repo": "nvim-tree.lua",
"rev": "ca7c4c33cac2ad66ec69d45e465379716ef0cc97",
"rev": "68fc4c20f5803444277022c681785c5edd11916d",
"type": "github"
},
"original": {
@ -1457,11 +1489,11 @@
"plugin-nvim-treesitter-context": {
"flake": false,
"locked": {
"lastModified": 1733041360,
"narHash": "sha256-wcz3F0vDrgMXJjB0Zz7naoVQ8YvHdd55gG4NHqQMYQY=",
"lastModified": 1734710732,
"narHash": "sha256-TIFMPKzD2ero1eK9aVfY1iKEvf/Sw8SL/9mk9omCQ3c=",
"owner": "nvim-treesitter",
"repo": "nvim-treesitter-context",
"rev": "920999bf53daa63ddf12efdeb5137a7cea1cc201",
"rev": "2bcf700b59bc92850ca83a1c02e86ba832e0fae0",
"type": "github"
},
"original": {
@ -1473,11 +1505,11 @@
"plugin-nvim-ts-autotag": {
"flake": false,
"locked": {
"lastModified": 1732998473,
"narHash": "sha256-HtF0arW9cuE4yQN+1ccRaonqiH6fcoTpyuSecLPKtKc=",
"lastModified": 1733164313,
"narHash": "sha256-v2NTFBIzKTYizUPWB3uhpnTGVZWaelhE3MT5+BDA6Do=",
"owner": "windwp",
"repo": "nvim-ts-autotag",
"rev": "f2d24aca1bcbbd2c0306fd93d52e3697027b77ff",
"rev": "1cca23c9da708047922d3895a71032bc0449c52d",
"type": "github"
},
"original": {
@ -1489,11 +1521,11 @@
"plugin-nvim-web-devicons": {
"flake": false,
"locked": {
"lastModified": 1732925137,
"narHash": "sha256-Sh+r54pTI60j5tOmSyEkTVS6MzMIt52nqjNdtMp8kpI=",
"lastModified": 1735569123,
"narHash": "sha256-h9rY6F+2sBlG9PFN34/0ZTkY66oCeCIPe/HEadM03K4=",
"owner": "nvim-tree",
"repo": "nvim-web-devicons",
"rev": "203da76ecfbb4b192cf830665b03eb651b635c94",
"rev": "4adeeaa7a32d46cf3b5833341358c797304f950a",
"type": "github"
},
"original": {
@ -1553,11 +1585,11 @@
"plugin-orgmode-nvim": {
"flake": false,
"locked": {
"lastModified": 1731656059,
"narHash": "sha256-uKJuJsxQhdh3NxZx1Uu72poQVFN7KEyyMFEHPUr7UgQ=",
"lastModified": 1734770880,
"narHash": "sha256-E1YJeTay1tX2PgiXwV/DRgrlYHIGUe9/uTA+6ORIhBw=",
"owner": "nvim-orgmode",
"repo": "orgmode",
"rev": "1d8c9b9417f8c8e9fb146d4f54fb1e90a4f7e534",
"rev": "bf657742f7cb56211f99946ff64f5f87d7d7f0d0",
"type": "github"
},
"original": {
@ -1569,11 +1601,11 @@
"plugin-otter-nvim": {
"flake": false,
"locked": {
"lastModified": 1724585935,
"narHash": "sha256-euHwoK2WHLF/hrjLY2P4yGrIbYyBN38FL3q4CKNZmLY=",
"lastModified": 1735130975,
"narHash": "sha256-NPBGcLi1lEmpGGbGs58Xzw1IriOyKTMQdwIdVFsbVDM=",
"owner": "jmbuhr",
"repo": "otter.nvim",
"rev": "ca9ce67d0399380b659923381b58d174344c9ee7",
"rev": "e8c662e1aefa8b483cfba6e00729a39a363dcecc",
"type": "github"
},
"original": {
@ -1678,14 +1710,30 @@
"type": "github"
}
},
"plugin-render-markdown-nvim": {
"flake": false,
"locked": {
"lastModified": 1735525479,
"narHash": "sha256-ncFqBv0JITX3pTsLON+HctLUaKXhLRMBUrRWmI8KOSA=",
"owner": "MeanderingProgrammer",
"repo": "render-markdown.nvim",
"rev": "6fbd1491abc104409f119685de5353c35c97c005",
"type": "github"
},
"original": {
"owner": "MeanderingProgrammer",
"repo": "render-markdown.nvim",
"type": "github"
}
},
"plugin-rose-pine": {
"flake": false,
"locked": {
"lastModified": 1729724348,
"narHash": "sha256-/a4pwuVJ5odm3Iio2MeoqAm8GlWIPI91mM4cVnSy/gE=",
"lastModified": 1733845819,
"narHash": "sha256-ejh9UXQbLc8Ie6wF7zszzL1gaJzr16gcu0dUWqTo8AM=",
"owner": "rose-pine",
"repo": "neovim",
"rev": "07a887a7bef4aacea8c7caebaf8cbf808cdc7a8e",
"rev": "91548dca53b36dbb9d36c10f114385f759731be1",
"type": "github"
},
"original": {
@ -1713,11 +1761,11 @@
"plugin-run-nvim": {
"flake": false,
"locked": {
"lastModified": 1732918526,
"narHash": "sha256-kiszNmZZDXG8tAPMQKuGJDCkqCMzsWT7BkCvkVsH2lA=",
"lastModified": 1735501787,
"narHash": "sha256-CFOyOARCLQiMOhFPeqz8n2ULyaaRxRZrOk0FCibjuIM=",
"owner": "diniamo",
"repo": "run.nvim",
"rev": "d867466e01b8fa4e54a589b9ef446cf43fb966de",
"rev": "9015c9cece816ccf10a185b420f6e345fd990802",
"type": "github"
},
"original": {
@ -1729,11 +1777,11 @@
"plugin-rustaceanvim": {
"flake": false,
"locked": {
"lastModified": 1732919014,
"narHash": "sha256-7UZ54b3IPS1cPyu+JCM/dHhJLHuqa16suaC2XlSw5Og=",
"lastModified": 1735431742,
"narHash": "sha256-ucZXGbxHtbSKf5n11lL3vb6rD2BxJacIDOgcx32PLzA=",
"owner": "mrcjkb",
"repo": "rustaceanvim",
"rev": "4ac7a3c6cca9e393229651cc90733afbdc7c6395",
"rev": "51c097ebfb65d83baa71f48000b1e5c0a8dcc4fb",
"type": "github"
},
"original": {
@ -1745,11 +1793,11 @@
"plugin-smartcolumn": {
"flake": false,
"locked": {
"lastModified": 1710067624,
"narHash": "sha256-DHIeDNUF9n9s14GVeojIwc5QUPwJMYYl3gRvhvO/rdE=",
"lastModified": 1734696989,
"narHash": "sha256-6RodA5BQnL6tB3RCE5G2RiXqBvM3VP3HYZ+T3AxIF7Q=",
"owner": "m4xshen",
"repo": "smartcolumn.nvim",
"rev": "cefb17be095ad5526030a21bb2a80553cae09127",
"rev": "f14fbea6f86cd29df5042897ca9e3ba10ba4d27f",
"type": "github"
},
"original": {
@ -1761,11 +1809,11 @@
"plugin-sqls-nvim": {
"flake": false,
"locked": {
"lastModified": 1733003065,
"narHash": "sha256-VKN4ggWogAr+hwr/gtIDgY5j3afL9R7dZ2oJ4+qpEtE=",
"lastModified": 1733090837,
"narHash": "sha256-o5uD6shPkweuE+k/goBX42W3I2oojXVijfJC7L50sGU=",
"owner": "nanotee",
"repo": "sqls.nvim",
"rev": "8d7b6010d276fdda494ede23df511eba120886b9",
"rev": "a514379f5f89bf72955ed3bf5c1c31a40b8a1472",
"type": "github"
},
"original": {
@ -1809,11 +1857,11 @@
"plugin-tiny-devicons-auto-colors": {
"flake": false,
"locked": {
"lastModified": 1724403745,
"narHash": "sha256-Ndkbvxn/x7+fxEYD7JIygqUiItuhoY+4+DaL/pJGKdc=",
"lastModified": 1733445616,
"narHash": "sha256-klUZKvdYhwO3sq4Su4sBFDcNSAYXh53O72vg4+ZOrhI=",
"owner": "rachartier",
"repo": "tiny-devicons-auto-colors.nvim",
"rev": "a39fa4c92268832f6034306793b8acbfec2a7549",
"rev": "c8f63933ee013c1e0a26091d58131e060546f01f",
"type": "github"
},
"original": {
@ -1841,11 +1889,11 @@
"plugin-toggleterm-nvim": {
"flake": false,
"locked": {
"lastModified": 1731162901,
"narHash": "sha256-g1FwgCc3a8Fak0Nb0gQQ+SI44uyAGaH1tIk1qpaAPEY=",
"lastModified": 1735340326,
"narHash": "sha256-oeNIb+QHa/9yGZz/2u9LYIdKluel0bcQkaIqOuQUkis=",
"owner": "akinsho",
"repo": "toggleterm.nvim",
"rev": "87b2d6a3cab8e2bd9a0255427074285f0365398d",
"rev": "344fc1810292785b3d962ddac2de57669e1a7ff9",
"type": "github"
},
"original": {
@ -1857,11 +1905,11 @@
"plugin-tokyonight": {
"flake": false,
"locked": {
"lastModified": 1732026921,
"narHash": "sha256-vKXlFHzga9DihzDn+v+j3pMNDfvhYHcCT8GpPs0Uxgg=",
"lastModified": 1734211493,
"narHash": "sha256-TJ/a6N6Cc1T0wdMxMopma1NtwL7rMYbZ6F0zFI1zaIA=",
"owner": "folke",
"repo": "tokyonight.nvim",
"rev": "c2725eb6d086c8c9624456d734bd365194660017",
"rev": "45d22cf0e1b93476d3b6d362d720412b3d34465c",
"type": "github"
},
"original": {
@ -1905,11 +1953,11 @@
"plugin-typst-preview-nvim": {
"flake": false,
"locked": {
"lastModified": 1733120663,
"narHash": "sha256-uYMZ2PONiiI3UDvCgNvyy4+jhzmUDbAyxX0phKxELXw=",
"lastModified": 1734839452,
"narHash": "sha256-d6Tv7xZRghYYDfABk/p2e9qTm4qnWHM+ejKDCcR0TfY=",
"owner": "chomosuke",
"repo": "typst-preview.nvim",
"rev": "0cb5f5627312f50ce089f785ec42b55a85f30ce7",
"rev": "c1100e8788baabe8ca8f8cd7fd63d3d479e49e36",
"type": "github"
},
"original": {
@ -1937,11 +1985,11 @@
"plugin-vim-fugitive": {
"flake": false,
"locked": {
"lastModified": 1732036604,
"narHash": "sha256-RGS2T6tHuFPZROU0W4Z6j6wMEiJmd8xuKv3qqM3XHPI=",
"lastModified": 1735457366,
"narHash": "sha256-45zsqKavWoclA67MC54bAel1nE8CLHtSdullHByiRS8=",
"owner": "tpope",
"repo": "vim-fugitive",
"rev": "320b18fba2a4f2fe3c8225c778c687e0d2620384",
"rev": "174230d6a7f2df94705a7ffd8d5413e27ec10a80",
"type": "github"
},
"original": {
@ -2017,11 +2065,11 @@
"plugin-which-key": {
"flake": false,
"locked": {
"lastModified": 1732804356,
"narHash": "sha256-55RmbdN0rNG8946eIMFd5BlN82eY1GKqmHdUiC7BP+U=",
"lastModified": 1734253151,
"narHash": "sha256-f/+sYMDEguB5ZDiYiQAsDvdF/2cVcWnLBU+9qwigk4s=",
"owner": "folke",
"repo": "which-key.nvim",
"rev": "9b365a6428a9633e3eeb34dbef1b791511c54f70",
"rev": "8ab96b38a2530eacba5be717f52e04601eb59326",
"type": "github"
},
"original": {
@ -2058,6 +2106,7 @@
"nil": "nil",
"nixpkgs": "nixpkgs",
"nmd": "nmd",
"plugin-aerial-nvim": "plugin-aerial-nvim",
"plugin-alpha-nvim": "plugin-alpha-nvim",
"plugin-base16": "plugin-base16",
"plugin-bufdelete-nvim": "plugin-bufdelete-nvim",
@ -2091,6 +2140,7 @@
"plugin-gitsigns-nvim": "plugin-gitsigns-nvim",
"plugin-glow-nvim": "plugin-glow-nvim",
"plugin-gruvbox": "plugin-gruvbox",
"plugin-haskell-tools-nvim": "plugin-haskell-tools-nvim",
"plugin-highlight-undo": "plugin-highlight-undo",
"plugin-hop-nvim": "plugin-hop-nvim",
"plugin-icon-picker-nvim": "plugin-icon-picker-nvim",
@ -2153,6 +2203,7 @@
"plugin-precognition-nvim": "plugin-precognition-nvim",
"plugin-project-nvim": "plugin-project-nvim",
"plugin-registers": "plugin-registers",
"plugin-render-markdown-nvim": "plugin-render-markdown-nvim",
"plugin-rose-pine": "plugin-rose-pine",
"plugin-rtp-nvim": "plugin-rtp-nvim",
"plugin-run-nvim": "plugin-run-nvim",

View file

@ -31,7 +31,7 @@
};
homeManagerModules = {
nvf = import ./flake/modules/home-manager.nix self.packages lib;
nvf = import ./flake/modules/home-manager.nix {inherit lib self;};
default = self.homeManagerModules.nvf;
neovim-flake =
lib.warn ''
@ -42,7 +42,7 @@
};
nixosModules = {
nvf = import ./flake/modules/nixos.nix self.packages lib;
nvf = import ./flake/modules/nixos.nix {inherit lib self;};
default = self.nixosModules.nvf;
neovim-flake =
lib.warn ''
@ -488,6 +488,11 @@
flake = false;
};
plugin-render-markdown-nvim = {
url = "github:MeanderingProgrammer/render-markdown.nvim";
flake = false;
};
# Minimap
plugin-minimap-vim = {
url = "github:wfxr/minimap.vim";
@ -720,5 +725,15 @@
url = "github:otavioschwanck/new-file-template.nvim";
flake = false;
};
plugin-haskell-tools-nvim = {
url = "github:mrcjkb/haskell-tools.nvim";
flake = false;
};
plugin-aerial-nvim = {
url = "github:stevearc/aerial.nvim";
flake = false;
};
};
}

View file

@ -1,22 +1,28 @@
# Home Manager module
packages: lib: {
{
self,
lib,
}: {
config,
pkgs,
...
}: let
inherit (self) packages inputs;
inherit (lib) maintainers;
inherit (lib.modules) mkIf mkAliasOptionModule;
inherit (lib.lists) optional;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) attrsOf anything bool;
inherit (lib.nvim) neovimConfiguration;
inherit (lib.nvim.types) anythingConcatLists;
inherit (lib.types) anything bool submoduleWith;
cfg = config.programs.nvf;
neovimConfigured = neovimConfiguration {
inherit pkgs;
modules = [cfg.settings];
nvfModule = submoduleWith {
description = "Nvf module";
class = "nvf";
specialArgs = {
inherit pkgs lib inputs;
};
modules = import ../../modules/modules.nix {inherit pkgs lib;};
};
in {
imports = [
@ -55,7 +61,7 @@ in {
};
settings = mkOption {
type = attrsOf anythingConcatLists;
type = nvfModule;
default = {};
description = "Attribute set of nvf preferences.";
example = literalExpression ''
@ -78,7 +84,7 @@ in {
};
config = mkIf cfg.enable {
programs.nvf.finalPackage = neovimConfigured.neovim;
programs.nvf.finalPackage = cfg.settings.vim.build.finalPackage;
home = {
sessionVariables = mkIf cfg.defaultEditor {EDITOR = "nvim";};

View file

@ -1,22 +1,28 @@
# NixOS module
packages: lib: {
{
self,
lib,
}: {
config,
pkgs,
...
}: let
inherit (self) inputs packages;
inherit (lib) maintainers;
inherit (lib.modules) mkIf mkOverride mkAliasOptionModule;
inherit (lib.lists) optional;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) attrsOf anything bool;
inherit (lib.nvim) neovimConfiguration;
inherit (lib.nvim.types) anythingConcatLists;
inherit (lib.types) anything bool submoduleWith;
cfg = config.programs.nvf;
neovimConfigured = neovimConfiguration {
inherit pkgs;
modules = [cfg.settings];
nvfModule = submoduleWith {
description = "Nvf module";
class = "nvf";
specialArgs = {
inherit pkgs lib inputs;
};
modules = import ../../modules/modules.nix {inherit pkgs lib;};
};
in {
imports = [
@ -55,7 +61,7 @@ in {
};
settings = mkOption {
type = attrsOf anythingConcatLists;
type = nvfModule;
default = {};
description = "Attribute set of nvf preferences.";
example = literalExpression ''
@ -78,7 +84,7 @@ in {
};
config = mkIf cfg.enable {
programs.nvf.finalPackage = neovimConfigured.neovim;
programs.nvf.finalPackage = cfg.settings.vim.build.finalPackage;
environment = {
variables.EDITOR = mkIf cfg.defaultEditor (mkOverride 900 "nvim");

View file

@ -1,57 +1,8 @@
{lib}: let
inherit (lib.options) showOption showFiles getFiles mergeOneOption mergeEqualOption;
inherit (lib.strings) isString isStringLike;
inherit (lib.types) anything attrsOf listOf mkOptionType;
inherit (lib.nvim.types) anythingConcatLists;
inherit (builtins) typeOf isAttrs any head concatLists stringLength match;
inherit (lib.options) mergeEqualOption;
inherit (lib.strings) isString stringLength match;
inherit (lib.types) listOf mkOptionType;
in {
# HACK: Does this break anything in our case?
# A modified version of the nixpkgs anything type that concatenates lists
# This isn't the default because the order in which the lists are concatenated depends on the order in which the modules are imported,
# which makes it non-deterministic
anythingConcatLists =
anything
// {
merge = loc: defs: let
getType = value:
if isAttrs value && isStringLike value
then "stringCoercibleSet"
else typeOf value;
# Throw an error if not all defs have the same type
checkType = getType (head defs).value;
commonType =
if any (def: getType def.value != checkType) defs
then throw "The option `${showOption loc}' has conflicting option types in ${showFiles (getFiles defs)}"
else checkType;
mergeFunctions = {
# Recursively merge attribute sets
set = (attrsOf anythingConcatLists).merge;
# Overridden behavior for lists, that concatenates lists
list = _: defs: concatLists (map (e: e.value) defs);
# This means it's a package, only accept a single definition
stringCoercibleSet = mergeOneOption;
# This works by passing the argument to the functions,
# and merging their returns values instead
lambda = loc: defs: arg:
anythingConcatLists.merge
(loc ++ ["<function body>"])
(map (def: {
inherit (def) file;
value = def.value arg;
})
defs);
};
in
# Merge the defs with the correct function from above, if available
# otherwise only allow equal values
(mergeFunctions.${commonType} or mergeEqualOption) loc defs;
};
mergelessListOf = elemType: let
super = listOf elemType;
in

View file

@ -11,5 +11,5 @@ in {
inherit (typesDag) dagOf;
inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType;
inherit (typesLanguage) diagnostics mkGrammarOption;
inherit (customTypes) anythingConcatLists char hexColor mergelessListOf;
inherit (customTypes) char hexColor mergelessListOf;
}

View file

@ -9,9 +9,8 @@
extraModules ? [],
configuration ? {},
}: let
inherit (pkgs) vimPlugins;
inherit (lib.strings) isString toString;
inherit (lib.lists) filter map concatLists;
inherit (lib.strings) toString;
inherit (lib.lists) concatLists;
# import modules.nix with `check`, `pkgs` and `lib` as arguments
# check can be disabled while calling this file is called
@ -21,7 +20,12 @@
# evaluate the extended library with the modules
# optionally with any additional modules passed by the user
module = lib.evalModules {
specialArgs = extraSpecialArgs // {modulesPath = toString ./.;};
specialArgs =
extraSpecialArgs
// {
inherit inputs;
modulesPath = toString ./.;
};
modules = concatLists [
nvimModules
modules
@ -36,102 +40,11 @@
extraModules))
];
};
# alias to the internal configuration
vimOptions = module.config.vim;
noBuildPlug = {pname, ...} @ attrs: let
src = inputs."plugin-${attrs.pname}";
in
{
version = src.shortRev or src.shortDirtyRev or "dirty";
outPath = src;
passthru.vimPlugin = false;
}
// attrs;
# build a vim plugin with the given name and arguments
# if the plugin is nvim-treesitter, warn the user to use buildTreesitterPlug
# instead
buildPlug = attrs: let
src = inputs."plugin-${attrs.pname}";
in
pkgs.vimUtils.buildVimPlugin (
{
version = src.shortRev or src.shortDirtyRev or "dirty";
inherit src;
}
// attrs
);
buildTreesitterPlug = grammars: vimPlugins.nvim-treesitter.withPlugins (_: grammars);
pluginBuilders = {
nvim-treesitter = buildTreesitterPlug vimOptions.treesitter.grammars;
flutter-tools-patched = buildPlug {
pname = "flutter-tools";
patches = [../patches/flutter-tools.patch];
};
};
buildConfigPlugins = plugins:
map (
plug:
if (isString plug)
then pluginBuilders.${plug} or (noBuildPlug {pname = plug;})
else plug
) (filter (f: f != null) plugins);
# built (or "normalized") plugins that are modified
builtStartPlugins = buildConfigPlugins vimOptions.startPlugins;
builtOptPlugins = map (package: package // {optional = true;}) (buildConfigPlugins vimOptions.optPlugins);
# additional Lua and Python3 packages, mapped to their respective functions
# to conform to the format mnw expects. end user should
# only ever need to pass a list of packages, which are modified
# here
extraLuaPackages = ps: map (x: ps.${x}) vimOptions.luaPackages;
extraPython3Packages = ps: map (x: ps.${x}) vimOptions.python3Packages;
# Wrap the user's desired (unwrapped) Neovim package with arguments that'll be used to
# generate a wrapped Neovim package.
neovim-wrapped = inputs.mnw.lib.wrap pkgs {
neovim = vimOptions.package;
plugins = builtStartPlugins ++ builtOptPlugins;
appName = "nvf";
extraBinPath = vimOptions.extraPackages;
initLua = vimOptions.builtLuaConfigRC;
luaFiles = vimOptions.extraLuaFiles;
inherit (vimOptions) viAlias vimAlias withRuby withNodeJs withPython3;
inherit extraLuaPackages extraPython3Packages;
};
dummyInit = pkgs.writeText "nvf-init.lua" vimOptions.builtLuaConfigRC;
# Additional helper scripts for printing and displaying nvf configuration
# in your commandline.
printConfig = pkgs.writers.writeDashBin "nvf-print-config" "cat ${dummyInit}";
printConfigPath = pkgs.writers.writeDashBin "nvf-print-config-path" "echo -n ${dummyInit}";
in {
inherit (module) options config;
inherit (module._module.args) pkgs;
# Expose wrapped neovim-package for userspace
# or module consumption.
neovim = pkgs.symlinkJoin {
name = "nvf-with-helpers";
paths = [neovim-wrapped printConfig printConfigPath];
postBuild = "echo Helpers added";
# Allow evaluating vimOptions, i.e., config.vim from the packages' passthru
# attribute. For example, packages.x86_64-linux.neovim.passthru.neovimConfig
# will return the configuration in full.
passthru.neovimConfig = vimOptions;
meta =
neovim-wrapped.meta
// {
description = "Wrapped Neovim package with helper scripts to print the config (path)";
};
};
neovim = module.config.vim.build.finalPackage;
}

View file

@ -49,6 +49,7 @@
# using the configuration passed in `neovim` and `plugins` modules.
wrapper = map (p: ./wrapper + "/${p}") [
"build"
"environment"
"rc"
"warnings"
"lazy"

View file

@ -5,6 +5,7 @@
}: let
inherit (lib.options) mkOption mkEnableOption literalMD;
inherit (lib.strings) optionalString;
inherit (lib.attrsets) optionalAttrs;
inherit (lib.types) enum bool str int either;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.dag) entryAfter;
@ -94,55 +95,55 @@ in {
# Set options that were previously interpolated in 'luaConfigRC.basic' as vim.options (vim.o)
# and 'vim.globals' (vim.g). Future options, if possible, should be added here instead of the
# luaConfigRC section below.
options = pushDownDefault {
# Options that are always set, with a lower priority
encoding = "utf-8";
hidden = true;
expandtab = true;
options = pushDownDefault (lib.mergeAttrsList [
{
# Options that are always set, with a lower priority
encoding = "utf-8";
hidden = true;
expandtab = true;
# Junkfile Behaviour
swapfile = !cfg.preventJunkFiles;
backup = !cfg.preventJunkFiles;
writebackup = !cfg.preventJunkFiles;
};
# Junkfile Behaviour
swapfile = !cfg.preventJunkFiles;
backup = !cfg.preventJunkFiles;
writebackup = !cfg.preventJunkFiles;
}
# Options that are more difficult to set through 'vim.options'. Fear not, though
# as the Lua DAG is still as powerful as it could be.
(optionalAttrs cfg.undoFile.enable {
undofile = true;
undodir = cfg.undoFile.path;
})
(optionalAttrs (cfg.bell == "none") {
errorbells = false;
visualbell = false;
})
(optionalAttrs (cfg.bell == "on") {
visualbell = false;
})
(optionalAttrs (cfg.bell == "visual") {
visualbell = false;
})
(optionalAttrs (cfg.lineNumberMode == "relative") {
relativenumber = true;
})
(optionalAttrs (cfg.lineNumberMode == "number") {
number = true;
})
(optionalAttrs (cfg.lineNumberMode == "relNumber") {
number = true;
relativenumber = true;
})
]);
# Options that are more difficult to set through 'vim.options'. Namely, appending values
# to pre-set Neovim options. Fear not, though as the Lua DAG is still as powerful as it
# could be.
luaConfigRC.basic = entryAfter ["globalsScript"] ''
-- Settings that are set for everything
vim.opt.shortmess:append("c")
${optionalString cfg.undoFile.enable ''
vim.o.undofile = true
vim.o.undodir = ${toLuaObject cfg.undoFile.path}
''}
${optionalString (cfg.bell == "none") ''
vim.o.errorbells = false
vim.o.visualbell = false
''}
${optionalString (cfg.bell == "on") ''
vim.o.visualbell = false
''}
${optionalString (cfg.bell == "visual") ''
vim.o.errorbells = false
''}
${optionalString (cfg.lineNumberMode == "relative") ''
vim.o.relativenumber = true
''}
${optionalString (cfg.lineNumberMode == "number") ''
vim.o.number = true
''}
${optionalString (cfg.lineNumberMode == "relNumber") ''
vim.o.number = true
vim.o.relativenumber = true
''}
${optionalString cfg.useSystemClipboard ''
vim.opt.clipboard:append("unnamedplus")
''}

View file

@ -1,7 +1,7 @@
{
options,
config,
lib,
pkgs,
...
}: let
inherit (lib.strings) optionalString;
@ -11,8 +11,7 @@
inherit (lib.nvim.binds) pushDownDefault;
cfg = config.vim.filetree.nvimTree;
self = import ./nvimtree.nix {inherit pkgs lib;};
inherit (self.options.vim.filetree.nvimTree) mappings;
inherit (options.vim.filetree.nvimTree) mappings;
in {
config = mkIf cfg.enable {
vim = {
@ -77,6 +76,9 @@ in {
-- buffer is a real file on the disk
local real_file = vim.fn.filereadable(data.file) == 1
-- buffer is a directory
local directory = vim.fn.isdirectory(data.file) == 1
-- buffer is a [No Name]
local no_name = data.file == "" and vim.bo[data.buf].buftype == ""
@ -84,7 +86,7 @@ in {
local filetype = vim.bo[data.buf].ft
-- only files please
if not real_file and not no_name then
if not real_file and not directory and not no_name then
return
end
@ -93,6 +95,10 @@ in {
return
end
-- cd if buffer is a directory
if directory then
vim.cmd.cd(data.file)
end
-- open the tree but don't focus it
require("nvim-tree.api").tree.toggle({ focus = false })
end

View file

@ -7,6 +7,7 @@
inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetExprBinding mkSetLuaBinding pushDownDefault;
inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.git.gitsigns;
@ -70,7 +71,7 @@ in {
};
pluginRC.gitsigns = entryAnywhere ''
require('gitsigns').setup{}
require('gitsigns').setup(${toLuaObject cfg.setupOpts})
'';
};
}

View file

@ -6,6 +6,7 @@
inherit (lib.options) mkEnableOption;
inherit (lib.modules) mkRenamedOptionModule;
inherit (lib.nvim.binds) mkMappingOption;
inherit (lib.nvim.types) mkPluginSetupOption;
in {
imports = [
(mkRenamedOptionModule ["vim" "git" "gitsigns" "codeActions" "vim" "gitsigns" "codeActions"] ["vim" "git" "gitsigns" "codeActions" "enable"])
@ -13,6 +14,7 @@ in {
options.vim.git.gitsigns = {
enable = mkEnableOption "gitsigns" // {default = config.vim.git.enable;};
setupOpts = mkPluginSetupOption "gitsigns" {};
codeActions.enable = mkEnableOption "gitsigns codeactions through null-ls";

View file

@ -14,6 +14,7 @@ in {
./hcl.nix
./kotlin.nix
./html.nix
./haskell.nix
./java.nix
./lua.nix
./markdown.nix
@ -36,6 +37,7 @@ in {
./csharp.nix
./julia.nix
./nu.nix
./odin.nix
];
options.vim.languages = {

View file

@ -0,0 +1,104 @@
{
config,
lib,
pkgs,
...
}: let
inherit (builtins) isList;
inherit (lib.types) either package listOf str;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.strings) optionalString;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.dag) entryAfter;
inherit (lib.nvim.lua) expToLua;
inherit (pkgs) haskellPackages;
cfg = config.vim.languages.haskell;
in {
options.vim.languages.haskell = {
enable = mkEnableOption "Haskell support";
treesitter = {
enable = mkEnableOption "Treesitter support for Haskell" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "haskell";
};
lsp = {
enable = mkEnableOption "LSP support for Haskell" // {default = config.vim.languages.enableLSP;};
package = mkOption {
description = "Haskell LSP package or command to run the Haskell LSP";
example = ''[ (lib.getExe pkgs.haskellPackages.haskell-language-server) "--debug" ]'';
default = haskellPackages.haskell-language-server;
type = either package (listOf str);
};
};
dap = {
enable = mkEnableOption "DAP support for Haskell" // {default = config.vim.languages.enableDAP;};
package = mkOption {
description = "Haskell DAP package or command to run the Haskell DAP";
default = haskellPackages.haskell-debug-adapter;
type = either package (listOf str);
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter = {
enable = true;
grammars = [cfg.treesitter.package];
};
})
(mkIf (cfg.dap.enable || cfg.lsp.enable) {
vim = {
startPlugins = ["haskell-tools-nvim"];
luaConfigRC.haskell-tools-nvim =
entryAfter
["lsp-setup"]
''
vim.g.haskell_tools = {
${optionalString cfg.lsp.enable ''
-- LSP
tools = {
hover = {
enable = true,
},
},
hls = {
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/haskell-language-server-wrapper"}''
},
on_attach = function(client, bufnr, ht)
default_on_attach(client, bufnr, ht)
local opts = { noremap = true, silent = true, buffer = bufnr }
vim.keymap.set('n', '<localleader>cl', vim.lsp.codelens.run, opts)
vim.keymap.set('n', '<localleader>hs', ht.hoogle.hoogle_signature, opts)
vim.keymap.set('n', '<localleader>ea', ht.lsp.buf_eval_all, opts)
vim.keymap.set('n', '<localleader>rr', ht.repl.toggle, opts)
vim.keymap.set('n', '<localleader>rf', function()
ht.repl.toggle(vim.api.nvim_buf_get_name(0))
end, opts)
vim.keymap.set('n', '<localleader>rq', ht.repl.quit, opts)
end,
},
''}
${optionalString cfg.dap.enable ''
dap = {
cmd = ${
if isList cfg.dap.package
then expToLua cfg.dap.package
else ''{"${cfg.dap.package}/bin/haskell-debug-adapter"}''
},
},
''}
}
'';
};
})
]);
}

View file

@ -4,13 +4,14 @@
lib,
...
}: let
inherit (builtins) attrNames concatLists;
inherit (builtins) attrNames;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.lists) isList;
inherit (lib.lists) isList concatLists;
inherit (lib.types) bool enum either package listOf str;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua toLuaObject;
inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption;
inherit (lib.nvim.dag) entryAnywhere;
cfg = config.vim.languages.markdown;
defaultServer = "marksman";
@ -98,6 +99,29 @@ in {
description = "Extra filetypes to format with the Markdown formatter";
};
};
extensions = {
render-markdown-nvim = {
enable =
mkEnableOption ""
// {
description = ''
[render-markdown.nvim]: https://github.com/MeanderingProgrammer/render-markdown.nvim
Inline Markdown rendering with [render-markdown.nvim]
'';
};
setupOpts = mkPluginSetupOption "render-markdown" {
auto_override_publish_diagnostics = mkOption {
description = "Automatically override the publish_diagnostics handler";
type = bool;
default = true;
};
};
};
};
};
config = mkIf cfg.enable (mkMerge [
@ -115,5 +139,13 @@ in {
vim.lsp.null-ls.enable = true;
vim.lsp.null-ls.sources.markdown-format = formats.${cfg.format.type}.nullConfig;
})
# Extensions
(mkIf cfg.extensions.render-markdown-nvim.enable {
vim.startPlugins = ["render-markdown-nvim"];
vim.pluginRC.render-markdown-nvim = entryAnywhere ''
require("render-markdown").setup(${toLuaObject cfg.extensions.render-markdown-nvim.setupOpts})
'';
})
]);
}

View file

@ -0,0 +1,71 @@
{
config,
pkgs,
lib,
...
}: let
inherit (builtins) attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
inherit (lib.types) either listOf package str enum;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.types) mkGrammarOption;
defaultServer = "ols";
servers = {
ols = {
package = pkgs.ols;
lspConfig = ''
lspconfig.ols.setup {
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else "{'${cfg.lsp.package}/bin/ols'}"
}
}
'';
};
};
cfg = config.vim.languages.odin;
in {
options.vim.languages.odin = {
enable = mkEnableOption "Odin language support";
treesitter = {
enable = mkEnableOption "Odin treesitter" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "odin";
};
lsp = {
enable = mkEnableOption "Odin LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption {
type = enum (attrNames servers);
default = defaultServer;
description = "Odin LSP server to use";
};
package = mkOption {
description = "Ols package, or the command to run as a list of strings";
type = either package (listOf str);
default = pkgs.ols;
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.odin-lsp = servers.${cfg.lsp.server}.lspConfig;
})
]);
}

View file

@ -13,7 +13,7 @@
inherit (lib.types) bool package str listOf either enum;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua;
inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.dag) entryAfter entryAnywhere;
cfg = config.vim.languages.rust;
@ -127,7 +127,7 @@ in {
vim = {
startPlugins = ["rustaceanvim"];
luaConfigRC.rustaceanvim = entryAnywhere ''
pluginRC.rustaceanvim = entryAfter ["lsp-setup"] ''
vim.g.rustaceanvim = {
${optionalString cfg.lsp.enable ''
-- LSP

View file

@ -23,8 +23,11 @@
package = pkgs.typescript-language-server;
lspConfig = ''
lspconfig.ts_ls.setup {
capabilities = capabilities;
on_attach = attach_keymaps,
capabilities = capabilities,
on_attach = function(client, bufnr)
attach_keymaps(client, bufnr);
client.server_capabilities.documentFormattingProvider = false;
end,
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
@ -79,6 +82,7 @@
ls_sources,
null_ls.builtins.formatting.prettier.with({
command = "${cfg.format.package}/bin/prettier",
filetypes = { "typescript" },
})
)
'';

View file

@ -6,7 +6,7 @@
}: let
inherit (builtins) attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.modules) mkIf mkMerge mkDefault;
inherit (lib.lists) isList;
inherit (lib.types) either listOf package str enum;
inherit (lib.nvim.lua) expToLua;
@ -57,15 +57,25 @@ in {
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
vim.treesitter = {
enable = true;
grammars = [cfg.treesitter.package];
};
})
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.zig-lsp = servers.${cfg.lsp.server}.lspConfig;
vim = {
lsp.lspconfig = {
enable = true;
sources.zig-lsp = servers.${cfg.lsp.server}.lspConfig;
};
# nvf handles autosaving already
globals.zig_fmt_autosave = mkDefault 0;
};
})
]);
}

View file

@ -20,17 +20,9 @@ in {
cmd = "Run";
keys = [
(mkKeymap "n" cfg.mappings.run "<cmd>Run<CR>" {desc = mappings.run.description;})
(mkKeymap "n" cfg.mappings.runOverride "<cmd>Run!<CR>" {desc = mappings.runOverride.description;})
(mkKeymap "n" cfg.mappings.runCommand ''
function()
local input = vim.fn.input("Run command: ")
if input ~= "" then require("run").run(input, false) end
end
'' {
desc = mappings.run.description;
lua = true;
})
(mkKeymap "n" cfg.mappings.run "<cmd>Run<cr>" {desc = mappings.run.description;})
(mkKeymap "n" cfg.mappings.runOverride "<cmd>Run!<cr>" {desc = mappings.runOverride.description;})
(mkKeymap "n" cfg.mappings.runCommand "<cmd>RunPrompt<cr>" {desc = mappings.run.description;})
];
};

View file

@ -14,17 +14,9 @@ in {
startPlugins = ["nvim-notify"];
pluginRC.nvim-notify = entryAnywhere ''
require('notify').setup(${toLuaObject cfg.setupOpts})
-- required to fix offset_encoding errors
local notify = vim.notify
vim.notify = function(msg, ...)
if msg:match("warning: multiple different client offset_encodings") then
return
end
notify(msg, ...)
end
local notify = require("notify")
notify.setup(${toLuaObject cfg.setupOpts})
vim.notify = notify.notify
'';
};
};

View file

@ -28,7 +28,7 @@ in {
};
stages = mkOption {
type = enum ["fade_in_slide_out" "fade_in" "slide_out" "none"];
type = enum ["fade_in_slide_out" "fade" "slide" "static"];
default = "fade_in_slide_out";
description = "The stages of the notification";
};
@ -41,7 +41,7 @@ in {
background_colour = mkOption {
type = str;
default = "#000000";
default = "NotifyBackground";
description = "The background colour of the notification";
};

View file

@ -1,5 +1,6 @@
{
imports = [
./outline
./binds
./ccc
./gestures

View file

@ -0,0 +1,14 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
inherit (lib.nvim.types) mkPluginSetupOption;
inherit (lib.nvim.binds) mkMappingOption;
in {
options.vim.utility.outline.aerial-nvim = {
enable = mkEnableOption "Aerial.nvim";
setupOpts = mkPluginSetupOption "aerial.nvim" {};
mappings = {
toggle = mkMappingOption "Toggle aerial window" "gO";
};
};
}

View file

@ -0,0 +1,42 @@
{
options,
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.binds) mkKeymap;
cfg = config.vim.utility.outline.aerial-nvim;
inherit (options.vim.utility.outline.aerial-nvim) mappings;
in {
config = mkIf cfg.enable {
vim = {
lazy.plugins.aerial-nvim = {
package = "aerial-nvim";
setupModule = "aerial";
inherit (cfg) setupOpts;
cmd = [
"AerialClose"
"AerialCloseAll"
"AerialGo"
"AerialInfo"
"AerialNavClose"
"AerialNavOpen"
"AerialNavToggle"
"AerialNext"
"AerialOpen"
"AerialOpenAll"
"AerialPrev"
"AerialToggle"
];
keys = [
(mkKeymap "n" cfg.mappings.toggle ":AerialToggle<CR>" {desc = mappings.toggle.description;})
];
};
};
};
}

View file

@ -0,0 +1,6 @@
{
imports = [
./aerial-nvim.nix
./config.nix
];
}

View file

@ -0,0 +1,5 @@
{
imports = [
./aerial-nvim
];
}

View file

@ -4,8 +4,8 @@
lib,
...
}: let
inherit (lib.strings) concatMapStringsSep;
inherit (lib.modules) mkIf;
cfg = config.vim.utility.preview.markdownPreview;
in {
config = mkIf cfg.enable {
@ -15,7 +15,7 @@ in {
mkdp_auto_start = cfg.autoStart;
mkdp_auto_close = cfg.autoClose;
mkdp_refresh_slow = cfg.lazyRefresh;
mkdp_filetypes = [(concatMapStringsSep ", " (x: "'" + x + "'") cfg.filetypes)];
mkdp_filetypes = cfg.filetypes;
mkdp_command_for_global = cfg.alwaysAllowPreview;
mkdp_open_to_the_world = cfg.broadcastServer;
mkdp_open_ip = cfg.customIP;

View file

@ -4,51 +4,33 @@
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.utility.surround;
mkLznKey = mode: key: {
inherit key mode;
inherit mode key;
};
in {
config = mkIf cfg.enable {
vim = {
startPlugins = ["nvim-surround"];
pluginRC.surround = entryAnywhere "require('nvim-surround').setup(${toLuaObject cfg.setupOpts})";
lazy.plugins.nvim-surround = {
package = "nvim-surround";
setupModule = "nvim-surround";
inherit (cfg) setupOpts;
keys =
[
(mkLznKey ["i"] cfg.setupOpts.keymaps.insert)
(mkLznKey ["i"] cfg.setupOpts.keymaps.insert_line)
(mkLznKey ["x"] cfg.setupOpts.keymaps.visual)
(mkLznKey ["x"] cfg.setupOpts.keymaps.visual_line)
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal)
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal_cur)
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal_line)
(mkLznKey ["n"] cfg.setupOpts.keymaps.normal_cur_line)
(mkLznKey ["n"] cfg.setupOpts.keymaps.delete)
(mkLznKey ["n"] cfg.setupOpts.keymaps.change)
(mkLznKey ["n"] cfg.setupOpts.keymaps.change_line)
]
++ map (mkLznKey ["n" "i" "v"]) [
"<Plug>(nvim-surround-insert)"
"<Plug>(nvim-surround-insert-line)"
"<Plug>(nvim-surround-normal)"
"<Plug>(nvim-surround-normal-cur)"
"<Plug>(nvim-surround-normal-line)"
"<Plug>(nvim-surround-normal-cur-line)"
"<Plug>(nvim-surround-visual)"
"<Plug>(nvim-surround-visual-line)"
"<Plug>(nvim-surround-delete)"
"<Plug>(nvim-surround-change)"
"<Plug>(nvim-surround-change-line)"
];
keys = [
(mkLznKey "i" cfg.setupOpts.keymaps.insert)
(mkLznKey "i" cfg.setupOpts.keymaps.insert_line)
(mkLznKey "x" cfg.setupOpts.keymaps.visual)
(mkLznKey "x" cfg.setupOpts.keymaps.visual_line)
(mkLznKey "n" cfg.setupOpts.keymaps.normal)
(mkLznKey "n" cfg.setupOpts.keymaps.normal_cur)
(mkLznKey "n" cfg.setupOpts.keymaps.normal_line)
(mkLznKey "n" cfg.setupOpts.keymaps.normal_cur_line)
(mkLznKey "n" cfg.setupOpts.keymaps.delete)
(mkLznKey "n" cfg.setupOpts.keymaps.change)
(mkLznKey "n" cfg.setupOpts.keymaps.change_line)
];
};
};
};

View file

@ -1,18 +1,22 @@
{
config,
lib,
pkgs,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.meta) getExe;
cfg = config.vim.utility.vim-wakatime;
in {
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.g.wakatime_CLIPath = "${cfg.cli-package}"
'';
# Wakatime configuration is stored as vim globals.
globals = {
"wakatime_CLIPath" = mkIf (cfg.cli-package != null) "${getExe cfg.cli-package}";
};
};
};
}

View file

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

View file

@ -1,18 +1,24 @@
{
lib,
pkgs,
lib,
...
}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) nullOr package;
in {
options.vim.utility.vim-wakatime = {
enable = mkEnableOption "vim-wakatime: live code statistics";
enable = mkEnableOption ''
automatic time tracking and metrics generated from your programming activity [vim-wakatime]
'';
cli-package = mkOption {
type = nullOr package;
default = pkgs.wakatime;
description = "The package that should be used for wakatime-cli. Set as null to use the default path in `$XDG_DATA_HOME`";
default = pkgs.wakatime-cli;
example = null;
description = ''
The package that should be used for wakatime-cli.
Set as null to use the default path in {env}`$XDG_DATA_HOME`
'';
};
};
}

View file

@ -1,13 +1,116 @@
{
config,
inputs,
lib,
config,
pkgs,
...
}: let
inherit (lib.attrsets) attrValues;
}
: let
inherit (pkgs) vimPlugins;
inherit (lib.strings) isString;
inherit (lib.lists) filter map;
inherit (builtins) path;
cfg = config.vim;
# alias to the internal configuration
vimOptions = config.vim;
noBuildPlug = pname: let
input = inputs."plugin-${pname}";
version = input.shortRev or input.shortDirtyRev or "dirty";
in {
# vim.lazy.plugins relies on pname, so we only set that here
# version isn't needed for anything, but inherit it anyway for correctness
inherit pname version;
outPath = path {
name = "${pname}-0-unstable-${version}";
path = input.outPath;
};
passthru.vimPlugin = false;
};
# build a vim plugin with the given name and arguments
# if the plugin is nvim-treesitter, warn the user to use buildTreesitterPlug
# instead
buildPlug = attrs: let
input = inputs."plugin-${attrs.pname}";
in
pkgs.vimUtils.buildVimPlugin (
{
version = input.shortRev or input.shortDirtyRev or "dirty";
src = input.outPath;
}
// attrs
);
buildTreesitterPlug = grammars: vimPlugins.nvim-treesitter.withPlugins (_: grammars);
pluginBuilders = {
nvim-treesitter = buildTreesitterPlug vimOptions.treesitter.grammars;
flutter-tools-patched = buildPlug {
pname = "flutter-tools";
patches = [./patches/flutter-tools.patch];
};
};
buildConfigPlugins = plugins:
map (
plug:
if (isString plug)
then pluginBuilders.${plug} or (noBuildPlug plug)
else plug
) (filter (f: f != null) plugins);
# built (or "normalized") plugins that are modified
builtStartPlugins = buildConfigPlugins vimOptions.startPlugins;
builtOptPlugins = map (package: package // {optional = true;}) (buildConfigPlugins vimOptions.optPlugins);
# additional Lua and Python3 packages, mapped to their respective functions
# to conform to the format mnw expects. end user should
# only ever need to pass a list of packages, which are modified
# here
extraLuaPackages = ps: map (x: ps.${x}) vimOptions.luaPackages;
extraPython3Packages = ps: map (x: ps.${x}) vimOptions.python3Packages;
# Wrap the user's desired (unwrapped) Neovim package with arguments that'll be used to
# generate a wrapped Neovim package.
neovim-wrapped = inputs.mnw.lib.wrap pkgs {
neovim = vimOptions.package;
plugins = builtStartPlugins ++ builtOptPlugins;
appName = "nvf";
extraBinPath = vimOptions.extraPackages;
initLua = vimOptions.builtLuaConfigRC;
luaFiles = vimOptions.extraLuaFiles;
inherit (vimOptions) viAlias vimAlias withRuby withNodeJs withPython3;
inherit extraLuaPackages extraPython3Packages;
};
dummyInit = pkgs.writeText "nvf-init.lua" vimOptions.builtLuaConfigRC;
# Additional helper scripts for printing and displaying nvf configuration
# in your commandline.
printConfig = pkgs.writers.writeDashBin "nvf-print-config" "cat ${dummyInit}";
printConfigPath = pkgs.writers.writeDashBin "nvf-print-config-path" "echo -n ${dummyInit}";
# Expose wrapped neovim-package for userspace
# or module consumption.
neovim = pkgs.symlinkJoin {
name = "nvf-with-helpers";
paths = [neovim-wrapped printConfig printConfigPath];
postBuild = "echo Helpers added";
# Allow evaluating vimOptions, i.e., config.vim from the packages' passthru
# attribute. For example, packages.x86_64-linux.neovim.passthru.neovimConfig
# will return the configuration in full.
passthru.neovimConfig = vimOptions;
meta =
neovim-wrapped.meta
// {
description = "Wrapped Neovim package with helper scripts to print the config (path)";
};
};
in {
config = {
vim.startPlugins = map (x: x.package) (attrValues cfg.extraPlugins);
config.vim.build = {
finalPackage = neovim;
};
}

View file

@ -1,6 +1,6 @@
{
imports = [
./config.nix
./options.nix
./config.nix
];
}

View file

@ -1,144 +1,12 @@
{
pkgs,
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption literalMD;
inherit (lib.types) package bool str listOf attrsOf;
inherit (lib.nvim.types) pluginsOpt extraPluginType;
{lib, ...}: let
inherit (lib.types) package;
inherit (lib.options) mkOption;
in {
options.vim = {
package = mkOption {
options.vim.build = {
finalPackage = mkOption {
type = package;
default = pkgs.neovim-unwrapped;
description = ''
The neovim package to use for the wrapper. This
corresponds to the package that will be wrapped
with your plugins and settings.
::: {.warning}
You will need to use an unwrapped package for this
option to work as intended. Using an already wrapped
package here may yield undesirable results.
:::
'';
};
viAlias = mkOption {
type = bool;
default = true;
description = "Enable the `vi` alias for `nvim`";
};
vimAlias = mkOption {
type = bool;
default = true;
description = "Enable the `vim` alias for `nvim`";
};
startPlugins = pluginsOpt {
default = ["plenary-nvim"];
example = ''
[pkgs.vimPlugins.telescope-nvim]
'';
description = ''
List of plugins to load on startup. This is used
internally to add plugins to Neovim's runtime.
To add additional plugins to your configuration, consider
using the [{option}`vim.extraPlugins`](#opt-vim.extraPlugins)
option.
'';
};
optPlugins = pluginsOpt {
default = [];
example = ''
[pkgs.vimPlugins.vim-ghost]
'';
description = ''
List of plugins to optionally load on startup.
This option has the same type definition as {option}`vim.startPlugins`
and plugins in this list are appended to {option}`vim.startPlugins` by
the wrapper during the build process.
To avoid overriding packages and dependencies provided by startPlugins, you
are recommended to use this option or {option}`vim.extraPlugins` option.
'';
};
extraPlugins = mkOption {
type = attrsOf extraPluginType;
default = {};
description = ''
A list of plugins and their configurations that will be
set up after builtin plugins.
This option takes a special type that allows you to order
your custom plugins using nvf's modified DAG library.
'';
example = literalMD ''
```nix
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
};
}
```
'';
};
extraPackages = mkOption {
type = listOf package;
default = [];
example = ''[pkgs.fzf pkgs.ripgrep]'';
description = ''
List of additional packages to make available to the Neovim
wrapper.
'';
};
# this defaults to `true` in the wrapper
# and since we pass this value to the wrapper
# with an inherit, it should be `true` here as well
withRuby =
mkEnableOption ''
Ruby support in the Neovim wrapper.
''
// {
default = true;
};
withNodeJs = mkEnableOption ''
NodeJs support in the Neovim wrapper
'';
luaPackages = mkOption {
type = listOf str;
default = [];
example = ''["magick" "serpent"]'';
description = "List of lua packages to install";
};
withPython3 = mkEnableOption ''
Python3 support in the Neovim wrapper
'';
python3Packages = mkOption {
type = listOf str;
default = [];
example = ''["pynvim"]'';
description = "List of python packages to install";
readOnly = true;
description = "final output package";
};
};
}

View file

@ -0,0 +1,13 @@
{
config,
lib,
...
}: let
inherit (lib.attrsets) attrValues;
cfg = config.vim;
in {
config = {
vim.startPlugins = map (x: x.package) (attrValues cfg.extraPlugins);
};
}

View file

@ -0,0 +1,6 @@
{
imports = [
./config.nix
./options.nix
];
}

View file

@ -0,0 +1,144 @@
{
pkgs,
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption literalMD;
inherit (lib.types) package bool str listOf attrsOf;
inherit (lib.nvim.types) pluginsOpt extraPluginType;
in {
options.vim = {
package = mkOption {
type = package;
default = pkgs.neovim-unwrapped;
description = ''
The neovim package to use for the wrapper. This
corresponds to the package that will be wrapped
with your plugins and settings.
::: {.warning}
You will need to use an unwrapped package for this
option to work as intended. Using an already wrapped
package here may yield undesirable results.
:::
'';
};
viAlias = mkOption {
type = bool;
default = true;
description = "Enable the `vi` alias for `nvim`";
};
vimAlias = mkOption {
type = bool;
default = true;
description = "Enable the `vim` alias for `nvim`";
};
startPlugins = pluginsOpt {
default = ["plenary-nvim"];
example = ''
[pkgs.vimPlugins.telescope-nvim]
'';
description = ''
List of plugins to load on startup. This is used
internally to add plugins to Neovim's runtime.
To add additional plugins to your configuration, consider
using the [{option}`vim.extraPlugins`](#opt-vim.extraPlugins)
option.
'';
};
optPlugins = pluginsOpt {
default = [];
example = ''
[pkgs.vimPlugins.vim-ghost]
'';
description = ''
List of plugins to optionally load on startup.
This option has the same type definition as {option}`vim.startPlugins`
and plugins in this list are appended to {option}`vim.startPlugins` by
the wrapper during the build process.
To avoid overriding packages and dependencies provided by startPlugins, you
are recommended to use this option or {option}`vim.extraPlugins` option.
'';
};
extraPlugins = mkOption {
type = attrsOf extraPluginType;
default = {};
description = ''
A list of plugins and their configurations that will be
set up after builtin plugins.
This option takes a special type that allows you to order
your custom plugins using nvf's modified DAG library.
'';
example = literalMD ''
```nix
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
};
}
```
'';
};
extraPackages = mkOption {
type = listOf package;
default = [];
example = ''[pkgs.fzf pkgs.ripgrep]'';
description = ''
List of additional packages to make available to the Neovim
wrapper.
'';
};
# this defaults to `true` in the wrapper
# and since we pass this value to the wrapper
# with an inherit, it should be `true` here as well
withRuby =
mkEnableOption ''
Ruby support in the Neovim wrapper.
''
// {
default = true;
};
withNodeJs = mkEnableOption ''
NodeJs support in the Neovim wrapper
'';
luaPackages = mkOption {
type = listOf str;
default = [];
example = ''["magick" "serpent"]'';
description = "List of lua packages to install";
};
withPython3 = mkEnableOption ''
Python3 support in the Neovim wrapper
'';
python3Packages = mkOption {
type = listOf str;
default = [];
example = ''["pynvim"]'';
description = "List of python packages to install";
};
};
}

View file

@ -76,6 +76,7 @@
else
mkLuaInline ''
function()
${optionalString (spec.beforeSetup != null) spec.beforeSetup}
${
optionalString (spec.setupModule != null)
"require(${toJSON spec.setupModule}).setup(${toLuaObject spec.setupOpts})"

View file

@ -74,6 +74,15 @@
'';
};
beforeSetup = mkOption {
type = nullOr lines;
default = null;
description = ''
Lua code to run after the plugin is loaded, but before the setup
function is called.
'';
};
setupModule = mkOption {
type = nullOr str;
default = null;

View file

@ -143,16 +143,14 @@ in {
example = {"some_variable" = 42;};
description = ''
An attribute set containing global variable values
for storing vim variables as early as possible. If
populated, this option will set vim variables in the
built luaConfigRC as the first item.
A freeform attribute set containing global variable values for setting vim
variables as early as possible. If populated, this option will set vim variables
in the built {option}`luaConfigRC` as the first item.
::: {.note}
`{foo = "bar";}` will set `vim.g.foo` to "bar", where
the type of `bar` in the resulting Lua value will be
inferred from the type of the value in the `{name = value;}`
pair passed to the option.
`{foo = "bar";}` will set `vim.g.foo` to "bar", where the type of `bar` in the
resulting Lua value will be inferred from the type of the value in the
`{name = value;}` pair passed to the option.
:::
'';
};
@ -239,21 +237,39 @@ in {
else x;
description = "Show the sign column";
};
tabstop = mkOption {
type = int;
default = 8; # Neovim default
description = ''
Number of spaces that a `<Tab>` in the file counts for. Also see
the {command}`:retab` command, and the {option}`softtabstop` option.
'';
};
shiftwidth = mkOption {
type = int;
default = 8; # Neovim default
description = ''
Number of spaces to use for each step of (auto)indent. Used for
{option}`cindent`, `>>`, `<<`, etc.
When zero the {option}`tabstop` value will be used.
'';
};
};
};
example = {visualbell = true;};
description = ''
An attribute set containing vim options to be set
as early as possible. If populated, this option will
set vim options in the built luaConfigRC after `basic`
and before `pluginConfigs` DAG entries.
A freeform attribute set containing vim options to be set as early as possible.
If populated, this option will set vim options in the built {option}`luaConfigRC`
after `basic` and before `pluginConfigs` DAG entries.
::: {.note}
`{foo = "bar";}` will set `vim.o.foo` to "bar", where
the type of `bar` in the resulting Lua value will be
inferred from the type of the value in the`{name = value;}`
pair passed to the option.
`{foo = "bar";}` will set `vim.o.foo` to "bar", where the type of `bar` in the
resulting Lua value will be inferred from the type of the value in the
`{name = value;}` pair passed to the option.
:::
'';
};