Compare commits

...

83 commits

Author SHA1 Message Date
e1ad7f4fb9
Merge remote-tracking branch 'origin/main' into v0.8 2025-08-21 09:00:16 +03:00
Poseidon
21f4644e31
languages/qml: init (#1092)
* languages/qml: init

Create the qml language module with treesitting, lsp, and formatting

* Fix release notes module name
2025-08-21 08:50:42 +03:00
raf
0383311826
Merge pull request #1090 from stegrams/patch-1
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
Documentation. Update DAG library path in examples.
2025-08-17 23:39:39 +03:00
Stefanos Grammenos
dbfeba975c
Update the 'dag' library from lib.hm.dag to nvf.lib.nvim.dag 2025-08-17 23:21:22 +03:00
Stefanos Grammenos
079f94c73d
Documentation. DAG library examples from lib.dag to lib.hm.dag 2025-08-17 21:13:30 +03:00
b6490efbe0
meta: fix logo path again
JJ god damn you

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69642ebb1684ab496924eb62ef9c8363299d
2025-08-15 13:11:32 +03:00
6980c35a44
meta: update logo path for the new README location
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69646755f9d922c1ca413443307bb6db62c4

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964ece924faf8cffb0f95cdf3d17cb23025

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964ece924faf8cffb0f95cdf3d17cb23025
2025-08-15 13:02:32 +03:00
c5dc719249
flake: bump inputs
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964ec51ac6d8eeb159f2c9500e5d548707e
2025-08-13 23:07:57 +03:00
raf
5619a99e12
Merge pull request #1073 from NotAShelf/dependabot/github_actions/actions/checkout-5
Some checks failed
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
build(deps): bump actions/checkout from 4 to 5
2025-08-12 06:50:47 +03:00
dependabot[bot]
940e3f1ca5
build(deps): bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-12 02:01:35 +00:00
1681ad7034
flake: bump inputs
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69646af60c6f5ccb974cbdd700b65aa5fdec
2025-08-10 16:25:56 +03:00
raf
d61de135ce
Merge pull request #1054 from JManch/blink-cmp-fix-sources
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
fix(blink-cmp): Fix broken default sources
2025-08-07 10:48:38 +03:00
Joshua Manchester
626ad99297
fix(blink-cmp): Fix broken default sources
Currently, regardless of whether nvim-cmp is enabled, nvim-cmp's sources
are added as providers. If the nvim-cmp sources "buffer" or "path" are
enabled they will override and break blink.cmp's default "path" and
"buffer" sources.

This fixes the issue by only configuring nvim-cmp sources and providers
when nvim-cmp is enabled and, if nvim-cmp is enabled, only configuring
nvim-cmp compat providers that are not in the blink.cmp default sources.
2025-08-06 22:35:19 -04:00
raf
22fb0d22cc
Merge pull request #772 from NotAShelf/colorful-menu
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
ui/colorful-menu-nvim
2025-08-05 13:12:20 +03:00
raf
b4dac8d635
Merge branch 'main' into colorful-menu 2025-08-05 13:10:21 +03:00
fa52e006eb
modules: fix typos; clean up vim-startify module
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69641dac96714f7d7ddfb6a302e7340de9ca
2025-08-05 13:08:48 +03:00
085df81edf
wrapper/options: fix exmple for additionalRuntimePaths
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a696484c57a2dd2dcd985ddeba37859e10ff7
2025-08-05 12:53:55 +03:00
raf
16d396f039
Merge pull request #1061 from Soliprem/otter-cleanup
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
lsp/otter: remove conflict warning since 0.11 is now common
2025-08-02 15:19:06 +03:00
Soliprem
4f9b2f4fba docs/rl: add entry
adds entry about the removal of otter's outdated warning
2025-08-02 13:53:35 +02:00
Soliprem
17968d1ced lsp/otter: remove conflict warning since 0.11 is now common 2025-08-02 13:49:09 +02:00
raf
e35a74c44a
meta: actually fix logo path for new README location
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
2025-07-30 12:32:01 +00:00
4a4a376328
meta: update logo path for the new README location
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69646755f9d922c1ca413443307bb6db62c4
2025-07-30 15:30:02 +03:00
48a54502f8
docs: format markdown sources with Deno
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69643dadbb6dbe6860f3002a75b1bb445d27
2025-07-30 14:52:24 +03:00
6585b2d63c
meta: modernize contribution guideline; move README back to repo root
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964885af7bdd99e696633159ecd84363eea
2025-07-30 14:52:24 +03:00
132e50c1e4
ci: check markdown formatting via deno fmt
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a696439d249d3eb69c548013c4a5470c06688
2025-07-30 14:09:00 +03:00
8092a6f188
docs: fix codeblock closing in standalone installation guide
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964ea02c71459a2be778c9e91897f6e49ae
2025-07-30 14:08:59 +03:00
be5cc82c5f
flake: remove flake-utils from inputs
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69641b9b232aa8b7993f1d7432c331145d62
2025-07-30 13:59:16 +03:00
raf
3ae510fefa
Merge pull request #1052 from NotAShelf/notashelf/push-rxqqmvskzksx
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
flake: bump inputs
2025-07-28 16:54:59 +03:00
7f6b045b7d
blink-cmp: 1.3.1 -> 1.6.0
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964cc1685d28fe56579e8824129605342c6
2025-07-28 16:49:39 +03:00
cabb0cff75
pins: bump all plugins
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69648299d47f0f7295b9f32cb61b1f2384df
2025-07-28 15:51:40 +03:00
e20e8dbdbb
flake: bump inputs
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69648b4d6f974bb280149709b03459ac043b
2025-07-28 15:51:23 +03:00
Soliprem
eaad512c1a
Merge pull request #1039 from Cool-Game-Dev/plugin/nvim-biscuits
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
utility/nvim-biscuits: init
2025-07-26 20:22:23 +02:00
raf
00d04a4c06
Merge branch 'main' into plugin/nvim-biscuits 2025-07-24 18:23:34 +00:00
raf
a125a61d6b
Merge pull request #1045 from JManch/guard-undotree
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
utility/undotree: use enable option
2025-07-24 15:08:12 +00:00
Joshua Manchester
afe7559c8e
utility/undotree: use enable option 2025-07-24 15:57:56 +01:00
Coolio
0b325d788e
utility/nvim-biscuits: improve enable option description
Improve the grammar of the `vim.utility.nvim-biscuits.enable` option to read better in documentation.

Co-authored-by: raf <raf@notashelf.dev>
2025-07-23 15:07:20 -05:00
Cool-Game-Dev
b2a462feb7
Add release notes entry
Add missing release notes entry, previously only contained a
reference to nvim-biscuits github.
2025-07-23 12:28:29 -05:00
Cool-Game-Dev
66e32eeafa
utility/nvim-biscuits: Add pluginRC
Add the setup function for the nvim-biscuits with setupOps to pluginRC.
2025-07-23 12:20:14 -05:00
Cool-Game-Dev
55fc5fecb8
fixed release notes
Add the plugin under my own name instead of @NotAShelf
2025-07-22 19:06:57 -05:00
Cool-Game-Dev
29d6f51cbc
utility/nvim-biscuits: init
Add `utility.nvim-biscuits` module. Adds the plugin nvim-biscuits, a
rewrite of assorted biscuits.
2025-07-22 12:23:28 -05:00
8fbecab446
meta: update issue & PR templates to modernize, reword
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69649c2b4a353088654bf90764e8a320cd86
2025-07-22 13:45:40 +03:00
9ad4756114
meta: typo & wording fixes in README 2025-07-22 13:08:50 +03:00
02573ac3e4
avante-nvim: fix library linking
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964d0425213b183c09664d612bec4bd0ea9
2025-07-22 12:41:33 +03:00
23d75fc12d
meta: remove hard-time.nvim from maximal package
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69644f3d0092af4b9e3c00454dc936f14bed
2025-07-22 12:41:32 +03:00
81d99b0ddf
flake: bump inputs
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a696400a25fa448e6ef49d40d54a008d7f6b2
2025-07-22 12:41:27 +03:00
raf
0115325759
Merge pull request #1030 from NotAShelf/notashelf/push-nprwpvxsxrmv
Some checks failed
Set up binary cache / cachix (default) (push) Waiting to run
Set up binary cache / cachix (maximal) (push) Waiting to run
Set up binary cache / cachix (nix) (push) Waiting to run
Treewide Checks / Validate flake (push) Waiting to run
Treewide Checks / Check formatting (push) Waiting to run
Treewide Checks / Check source tree for typos (push) Waiting to run
Treewide Checks / Validate documentation builds (push) Waiting to run
Treewide Checks / Validate hyperlinks in documentation sources (push) Waiting to run
Treewide Checks / Validate Editorconfig conformance (push) Waiting to run
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
flake: move packages to a by-name overlay
2025-07-21 23:47:47 +03:00
raf
d5d4cdeb2f
Merge branch 'main' into notashelf/push-nprwpvxsxrmv 2025-07-21 23:45:00 +03:00
raf
83fd70a937
Merge pull request #1023 from abhirath-a/main
utility/undotree: init
2025-07-21 21:59:29 +03:00
raf
4437cc740a
meta: undo nixfmt style hint 2025-07-21 21:57:11 +03:00
Abhi
338577d9c9
utility/undotree: removed utility category from lazy loader 2025-07-21 14:15:13 -04:00
raf
8ae0aebb8b
Merge branch 'main' into main 2025-07-20 23:08:16 +03:00
Abhi
cec4a94197
utility/undotree: moved undotree to utility object 2025-07-20 15:52:38 -04:00
Abhi
0a1dda51d0
utility/undotree: formatted code 2025-07-20 14:15:49 -04:00
40a5b70c30
docs/hacking: describe packaging complex plugins; more examples
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964ca83a42728d43e4a77b5737e9983016b
2025-07-20 16:16:11 +03:00
8dd53be910
flake: move packages to a by-name overlay
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69642d9409f7d32e01a140cb62c2173b5226
2025-07-20 16:16:10 +03:00
raf
da1fed218b
Merge pull request #1029 from imnotpoz/kaktus-fix
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Treewide Checks / Validate flake (push) Has been cancelled
Treewide Checks / Check formatting (push) Has been cancelled
Treewide Checks / Check source tree for typos (push) Has been cancelled
Treewide Checks / Validate documentation builds (push) Has been cancelled
Treewide Checks / Validate hyperlinks in documentation sources (push) Has been cancelled
Treewide Checks / Validate Editorconfig conformance (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
languages/wgsl: fix binary path
2025-07-20 15:06:09 +03:00
poz
7f6fe46833
languages/wgsl: fix binary path 2025-07-20 13:59:22 +02:00
raf
5f2530a239
Merge branch 'main' into main 2025-07-20 14:41:52 +03:00
raf
e313c56690
Merge pull request #1028 from gabyx/patch-2
docs: note for installing all grammars in `treesitter.nix`
2025-07-20 14:41:29 +03:00
raf
6ffe9302a6
Merge branch 'main' into patch-2 2025-07-20 14:39:14 +03:00
raf
fc0fceaa61
Merge pull request #1027 from NotAShelf/notashelf/push-nrwtqmomkswt
docs: add flakeless examples; describe flakes prerequisites
2025-07-20 14:36:34 +03:00
Gabriel Nützi
9c0c62bbc6
docs: note for installing all grammars in treesitter.nix 2025-07-20 13:35:56 +02:00
raf
f227721366
Merge branch 'main' into notashelf/push-nrwtqmomkswt 2025-07-20 14:35:00 +03:00
raf
a5a202584f
Merge pull request #1025 from NotAShelf/notashelf/push-pknrorvklyzy
meta: add flake-compat & expose flakeless interface
2025-07-20 14:33:54 +03:00
raf
65da8b24b8
Merge branch 'main' into notashelf/push-pknrorvklyzy 2025-07-20 14:31:32 +03:00
33a69fae5f
docs: add flakeless examples; describe flakes prerequisites
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964c8369dbdf7366e333378ee25d125c707
2025-07-20 14:30:37 +03:00
raf
0218bbd6f0
Merge pull request #1026 from gabyx/patch-2
docs: missing `with` in `treesitter.nix`
2025-07-20 14:30:15 +03:00
Gabriel Nützi
a1dcd935b5
docs: missing with in treesitter.nix 2025-07-20 13:12:28 +02:00
c1fea30214
meta: add flake-compat & expose flakeless interface
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964afc8b84fe10106f0a90d4bf3acaeee85
2025-07-20 13:38:02 +03:00
Abhirath A
4847c099eb
utility/undotree: added description to enable
Co-authored-by: raf <raf@notashelf.dev>
2025-07-20 05:39:51 -04:00
Abhirath A
60dd59ecae
utility/undotree: removed unnecessary lazy inputs
Co-authored-by: raf <raf@notashelf.dev>
2025-07-20 05:39:20 -04:00
Abhi
1bb9454933
utility/undotree: added extra commands to lazy loader 2025-07-19 23:14:01 -04:00
Abhi
861d6f3ed7
updated release notes 2025-07-19 19:10:30 -04:00
Abhi
b719103337
formatted files 2025-07-19 18:57:31 -04:00
Abhi
81d566ac39
utility/undotree: removed unimportant boilerplate 2025-07-19 14:44:47 -04:00
Abhi
b7b442737a
utility/undotree: init module 2025-07-19 14:37:41 -04:00
raf
0c9b4d0d80
Merge pull request #1020 from NotAShelf/hunk
Some checks are pending
Set up binary cache / cachix (default) (push) Waiting to run
Set up binary cache / cachix (maximal) (push) Waiting to run
Set up binary cache / cachix (nix) (push) Waiting to run
Treewide Checks / Validate flake (push) Waiting to run
Treewide Checks / Check formatting (push) Waiting to run
Treewide Checks / Check source tree for typos (push) Waiting to run
Treewide Checks / Validate documentation builds (push) Waiting to run
Treewide Checks / Validate hyperlinks in documentation sources (push) Waiting to run
Treewide Checks / Validate Editorconfig conformance (push) Waiting to run
Build and deploy documentation / Check latest commit (push) Waiting to run
Build and deploy documentation / publish (push) Blocked by required conditions
git/hunk-nvim: add missing UI dependency
2025-07-19 18:38:47 +03:00
raf
ec37a8be0e
Merge branch 'main' into hunk 2025-07-19 18:38:30 +03:00
7c1f5db3a5
git/hunk-nvim: add missing UI dependency
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69645f227bef24e5e8481dcd4727623e710f
2025-07-19 18:37:32 +03:00
79d5661547
git/hunk-nvim: add missing UI dependency
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a69645f227bef24e5e8481dcd4727623e710f
2025-07-19 17:48:01 +03:00
b89ed91405
git/hunk-nvim: init
Some checks are pending
Set up binary cache / cachix (default) (push) Waiting to run
Set up binary cache / cachix (maximal) (push) Waiting to run
Set up binary cache / cachix (nix) (push) Waiting to run
Treewide Checks / Validate flake (push) Waiting to run
Treewide Checks / Check formatting (push) Waiting to run
Treewide Checks / Check source tree for typos (push) Waiting to run
Treewide Checks / Validate documentation builds (push) Waiting to run
Treewide Checks / Validate hyperlinks in documentation sources (push) Waiting to run
Treewide Checks / Validate Editorconfig conformance (push) Waiting to run
Build and deploy documentation / Check latest commit (push) Waiting to run
Build and deploy documentation / publish (push) Blocked by required conditions
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I6a6a6964c7b5ff071d9ac1713a149ebd9c3abd0f
2025-07-19 04:28:41 +03:00
raf
514ed8bdd4
Merge branch 'main' into colorful-menu 2025-04-01 13:49:34 +00:00
8a148ad71e
ui/colorful-menu-nvim 2025-04-01 16:41:10 +03:00
51 changed files with 1441 additions and 727 deletions

View file

@ -2,48 +2,72 @@
## Table of Contents
- [Welcome](#welcome)
- [Contributing](#contributing)
- [Preface](#preface)
- [Contributing Process](#contributing-process)
- [Code of Conduct](#code-of-conduct)
## Welcome
## Preface
I'm glad you are thinking about contributing to nvf! If you're unsure about
anything, just ask - or submit the issue or pull request anyway. The worst that
can happen is you'll be politely asked to change something. Friendly
contributions are always welcome.
[LICENSE]: ../LICENSE
Before you contribute, I encourage you to read this project's CONTRIBUTING
policy (you are here) and its [LICENSE](../LICENSE) to understand how your
contributions are licensed.
I am glad you are thinking about contributing to nvf! The project is shaped by
contributors and user feedback, and all contributions are appreciated.
If you have any questions regarding those files, feel free to open an issue or
[shoot me an email](mailto:me@notashelf.dev). Discussions tab is also available
for more informal discussions.
If you are unsure about anything, whether a change is necessary or if it would
be accepted _had_ you created a PR, please just ask! Or submit the issue or pull
request anyway, the worst that can happen is that you will be politely asked to
change something. Friendly contributions are _always_ welcome.
## Contributing
Before you contribute, I encourage you to read the rest of this document for our
contributing policy and guidelines, followed by the [LICENSE] to understand how
your contributions are licensed.
The contribution process is mostly documented in the
[pull request template](PULL_REQUEST_TEMPLATE/pull_request_template.md). You
will find a checklist of items to complete before submitting a pull request.
Please make sure you complete it before submitting a pull request. If you are
If you have any questions regarding those files, or would like to ask a question
that is not covered by any of them, please feel free to open an issue!
Discussions tab is also available for less formal discussions. You may also
choose to contact me on Discord or Matrix if you would like to talk to me
personally.
## Contributing Process
[pull request template]: ./PULL_REQUEST_TEMPLATE.md
The contribution process is mostly documented in the [pull request template].
When you create a pull request, you will find a checklist of items to complete
before it can be submitted. We ask that you please complete it before submitting
a pull request to help maintainers provide more specific feedback. If you are
unsure about any of the items, please ask.
### Guidelines
We provide instructions on a healthy contribution to neovim-flake - including
styling, commit formats, how-to guides for adding new modules and options. You
are very well recommended to read the contributing guidelines over at
[the documentation](https://notashelf.github.io/nvf#hacking)
We provide instructions for a healthy contribution to nvf. This includes
**styling**, **commit formats**, **how-to guides for common contributions**. You
are strongly encouraged to read the contributing guidelines in full over at
[the documentation](https://notashelf.github.io/nvf#hacking).
A general gist of our requirements is that you must
1. Write clean Nix code
2. Self-test your changes
3. Document your changes
Though, please take a look at the manual for the complete contributing guide.
Please also feel free to let us know if you feel that something is missing. We
hope to provide clear, comprehensive instructions that make the contribution
process a breeze.
### Code of Conduct
This project does not quite have a code of conduct yet. And to be perfectly
honest, I'm not sure if I want one or if it will ever have one. I'm not
expecting this project to be a hotbed of activity, but I do want to make sure
that everyone who does contribute feels welcome and safe. As such, I will do my
best to make sure that those who distrupt the project are dealt with swiftly and
appropriately.
This project does not have a formal code of conduct yet, and to be perfectly
honest I am not entirely positive if I want one or if it will _ever_ have one.
This project is not expected to be a hotbed of activity, and I trust my
contributors to keep it civil and respectful.
I do, however, want to make sure that everyone who does contribute feels welcome
and safe around project spaces. As such, I will do my best to make sure anyone
who disrupts the project or engages in negative behaviour will are dealt with
appropriately, and swiftly. You are invited to share any concerns that you have
with the projects moderation, be it over public or private spaces.
If you feel that you are not being treated with respect, please contact me
directly.

View file

@ -90,15 +90,6 @@ body:
validations:
required: true
- type: input
id: nix-metadata
attributes:
label: "💻 Metadata"
description: 'Please run `nix-shell -p nix-info --run "nix-info -m"` and paste the result.'
placeholder: '[user@system:~]$ nix-shell -p nix-info --run "nix-info -m"'
validations:
required: true
- type: textarea
attributes:
label: System Information
@ -119,7 +110,7 @@ body:
id: logs
attributes:
render: bash
label: "📝 Relevant log output"
label: "Relevant log output"
description: >-
Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.

View file

@ -1,58 +1,72 @@
name: 🚀 Feature Request
description: "Propose a new feature"
#title: "[Feature] "
title: "<short description of the desired addition>"
labels: [feature-request]
body:
- type: checkboxes
id: no-duplicate-issues
attributes:
label: "⚠️ Please verify that this feature request has NOT been suggested before."
description: "Search in the issues sections by clicking [HERE](https://github.com/notashelf/neovim-flake/issues?q=)"
label: I have verified that this feature request has not been made before
description: >-
Before opening a new issue for feature requests, please consider searching through currently
open issues [here](https://github.com/notashelf/nvf/issues). If you would like to discuss a
new addition beforehand, you may first want to create a new discussion threat and discuss it
with the maintainers [on the discussions tab](https://github.com/notashelf/nvf/discussions)
options:
- label: "I checked and didn't find a similar feature request"
required: true
- required: true
label: >-
I have checked the [issues tab](https://github.com/notashelf/nvf/issues?q=is%3Aissue),
and did not find a similar feature request. I understand that my issue will be closed
if it is a duplicate.
- type: dropdown
id: feature-area
attributes:
label: "🏷️ Feature Type"
description: "What kind of a feature request is this?"
label: Feature Type
description: Please describe the kind of addition this is
multiple: true
options:
- New Command
- New Addon
- API Additions
- New Plugin
- Update Request (Plugin/Nixpkgs)
- Documentation Updates
- Other
validations:
required: true
- type: textarea
id: feature-description
attributes:
label: Feature description
description: >-
Please provide a clear and concise description of the desired addition. If this is a plugin
addition, please also include a link to the desired plugin and the reason why you think this
is a good addition. Keep in mind that we may refuse plugin requests as nvf already provides
appropriate methods of installing plugins in user configurations.
placeholder: >-
"nvf currently does [...], which really frustrates me" or "You should add [...] because I think
[...]"
validations:
required: true
attributes:
label: "🔖 Feature description"
description: "A clear and concise description of what your feature request is."
placeholder: "'You should add [...]' or '[...] has always frustrated me' "
- type: textarea
id: solution
validations:
required: true
attributes:
label: "✔️ Solution"
description: "A clear and concise description of what you want to happen."
placeholder: "In my use-case, I would like [...]"
- type: textarea
id: alternatives
attributes:
label: Alternatives
description: >-
If you have tried anything before creating this issue, please give us a clear and concise
description of any alternative solutions or methods you have considered.
placeholder: "I have considered [...]"
validations:
required: false
attributes:
label: "❓ Alternatives"
description: "A clear and concise description of any alternative solutions or features you've considered."
placeholder: "I have considered [...]"
- type: textarea
id: additional-context
attributes:
label: Additional Context
description: >-
If there is anything else you would like to mention, such as additional context or screenshots
demonstrating the requested feature, please add them here. This field is optional, but you may
be requested to provide further context. Please ensure that your feature request clearly describes
the requested feature in good detail.
validations:
required: false
attributes:
label: "📝 Additional Context"
description: "Add any other context or screenshots about the feature request here."
placeholder: "..."

View file

@ -17,7 +17,7 @@ jobs:
if: |
github.event.pull_request.merged == true && startsWith(github.event.label.name, 'backport-')
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
with:
ref: ${{ github.event.pull_request.head.sha }}
token: ${{ steps.app-token.outputs.token }}

View file

@ -21,7 +21,7 @@ jobs:
- nix
- maximal
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v5
name: Checkout
- name: Install Nix

View file

@ -17,7 +17,7 @@ jobs:
if: "!contains(github.event.pull_request.title, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
@ -31,7 +31,7 @@ jobs:
if: "!contains(github.event.pull_request.title, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Install Nix
uses: DeterminateSystems/nix-installer-action@main
@ -39,13 +39,24 @@ jobs:
- name: Check formatting via Alejandra
run: nix run nixpkgs#alejandra -- --check . --exclude npins
- name: Check formatting via Deno
run: nix run nixpkgs#deno -- fmt --check --ext md **/*.md
- if: ${{ failure() }}
shell: bash
run: |
echo "::error:: Current codebase contains formatting errors that were caught by the CI!"
echo "Please ensure that all Nix code is formatted with Alejandra, and Markdown with `deno fmt"
echo "[skip ci] label may be added to the PR title if this is a one-time issue and is safe to ignore"
exit 1
check-typos:
name: "Check source tree for typos"
runs-on: ubuntu-latest
if: "!contains(github.event.pull_request.title, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Check for typos
uses: crate-ci/typos@master
@ -76,7 +87,7 @@ jobs:
uses: DeterminateSystems/nix-installer-action@main
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Set default git branch (to reduce log spam)
run: git config --global init.defaultBranch main
@ -104,7 +115,7 @@ jobs:
uses: DeterminateSystems/nix-installer-action@main
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Build linkcheck package
run: nix build .#docs-linkcheck -Lv
@ -115,7 +126,7 @@ jobs:
if: "!contains(github.event.pull_request.title, '[skip ci]')"
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
with:
fetch-depth: 2 # slows down checkout, but we need to compare against the previous commit on push events
@ -142,7 +153,8 @@ jobs:
- name: Checking Editorconfig conformance
shell: bash
run: |
< "$HOME/changed_files" nix-shell -p editorconfig-checker --run 'xargs -r editorconfig-checker -disable-indent-size'
< "$HOME/changed_files" nix-shell -p editorconfig-checker \
--run 'xargs -r editorconfig-checker -disable-indent-size --exclude flake.lock'
- if: ${{ failure() }}
shell: bash

View file

@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: "Checkout"
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: "Delete old branches"
uses: beatlabs/delete-old-branches-action@v0.0.11

View file

@ -28,7 +28,7 @@ jobs:
uses: DeterminateSystems/nix-installer-action@main
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Set default git branch (to reduce log spam)
run: git config --global init.defaultBranch main
@ -127,7 +127,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Delete preview for closed/merged PR
run: |
@ -164,7 +164,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Double check preview directory deletion
run: |

View file

@ -28,7 +28,7 @@ jobs:
outputs:
should_run: ${{ steps.should_run.outputs.should_run }}
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/checkout@v5
- name: print latest_commit
run: echo ${{ github.sha }}
@ -43,7 +43,7 @@ jobs:
if: ${{ needs.check_date.outputs.should_run != 'false' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/checkout@v5
- uses: DeterminateSystems/nix-installer-action@main
- run: |
nix build .#docs -Lv

View file

@ -1,5 +1,6 @@
<!-- markdownlint-disable MD013 MD033 MD041-->
<div align="center">
<img src="assets/nvf-logo-work.svg" alt="nvf Logo" width="200">
<img src=".github/assets/nvf-logo-work.svg" alt="nvf Logo" width="192">
<br/>
<h1>nvf</h1>
</div>
@ -46,11 +47,10 @@
[Features]: #features
[Get Started]: #get-started
[Documentation]: #documentation
[Help]: #help
[Help]: #getting-help
[Contribute]: #contributing
[FAQ]: #frequently-asked-questions
[Credits]: #credits
[License]: #license
**[<kbd><br>Features <br></kbd>][Features]**
**[<kbd><br>Get Started<br></kbd>][Get Started]**
@ -84,21 +84,22 @@
customizable through the Nix module system.
- Not comfortable with a full-nix config or want to bring your Lua config? You
can do just that, no unnecessary restrictions.
- Lazyloading 💤? We got it! Lazyload both internal and external plugins at
will.
- Lazyloading? We got it! Lazyload both internal and external plugins at will
💤 .
- nvf allows _ordering configuration bits_ using [DAG] (_Directed acyclic
graph_)s. It has never been easier to construct an editor configuration
deterministically!
- nvf exposes everything you need to avoid a vendor lock-in. Which means you
can add new modules, plugins and so on without relying on us adding a module
for them! Though, of course, feel free to request them.
- Use plugins from anywhere. Inputs, npins, nixpkgs... You name it.
- Add your own modules, with ease. It's all built-in!
- Use plugins from anywhere: inputs, npins, nixpkgs... You name it.
- Add your own modules with ease. It's all built-in!
- **Well-documented**: Documentation is priority. You will _never_ face
undocumented, obscure behaviour.
- Changes, breaking or otherwise, will be communicated in the [release notes]
- Any and all changes, breaking or otherwise, will be communicated in the
[release notes].
- Refer to the [FAQ section] for answers to common questions.
- Your question not there? Head to the to the [discussions tab]!
- Your question not there? Head to the [discussions tab]!
- **Idiomatic**: nvf does things ✨ _the right way_ ✨ - the codebase is, and
will, remain maintainable for myself and any contributors.
- **Community-Led**: we would like nvf to be fully capable of accomplishing what
@ -121,7 +122,7 @@ the following in order to take **nvf** out for a spin.
```bash
# Run the default package
nix run github:notashelf/nvf
$ nix run github:notashelf/nvf
```
This will get you a feel for the base configuration and UI design. Though, none
@ -129,20 +130,25 @@ of the configuration options are final as **nvf** is designed to be modular and
configurable.
> [!TIP]
> The flake exposes `#nix` as the default package, providing minimal language
> support and various utilities. You may also use the `#nix` or `#maximal`
> packages provided by the this flake to get try out different configurations.
> The flake exposes `nix` as the default package, which will be evaluated when
> you run `nix build` or `nix run` on this repo. It is minimal, and providing
> limited language support and various utilities. We also expose the `maximal`
> package, which you may choose to build if you'd like to see more of nvf's
> built-in modules. Please keep in mind that those are demo packages, nvf does
> not ship a default configuration if installed as a NixOS/Home-Manager module
> or via standalone method.
It is as simple as changing the target output to get a different configuration.
For example, to get a configuration with large language coverage, run:
It is as simple as changing the target output in your `nix run` command to get a
different configuration. For example, to get a configuration with large language
coverage, run:
```bash
# Run the maximal package
nix run github:notashelf/nvf#maximal
$ nix run github:notashelf/nvf#maximal
```
Similar instructions will apply for `nix profile install`. However, you are
recommended to instead use the module system as described in the manual.
recommended to instead use the module system as described in the [nvf manual].
> [!NOTE]
> The `maximal` configuration is quite large, and might take a while to build.
@ -155,6 +161,10 @@ instructions.
## Documentation
**nvf** prides itself in its rich, intuitive documentation. The chapter below
covers several methods through which you can install **nvf**. If you believe
something is missing, or could be done better, please feel free to contact us!
### Installation
The _recommended_ way of installing nvf is using either the NixOS or the
@ -163,7 +173,7 @@ install **nvf** as a standalone package, or a flake output.
See the rendered [nvf manual] for detailed and up-to-date installation guides,
configurations, available options, release notes and more. Tips for installing
userspace plugins is also contained in the documentation.
userspace plugins are also contained in the documentation.
> [!TIP]
> While using NixOS or Home-Manager modules,
@ -180,16 +190,18 @@ requests are also welcome, and appreciated.
If you are confused, stuck or would like to ask a simple question; you may
create an issue on the [issue tracker] to ask questions or report bugs.
We are not not yet on spaces like matrix or IRC, so please use the issue tracker
for now.
We are not yet on spaces like matrix or IRC, so please use the issue tracker for
now. The [discussions tab] can also be a place to request help from community
members, or engage in productive discussion with the maintainers.
## Contributing
[contributing guide]: .github/CONTRIBUTING.md
I am always looking for new ways to help improve this flake. If you would like
to contribute, please read the [contributing guide](CONTRIBUTING.md) before
submitting a pull request. You can also create an issue on the [issue tracker]
before submitting a pull request if you would like to discuss a feature or bug
fix.
to contribute, please read the [contributing guide] before submitting a pull
request. You can also create an issue on the [issue tracker] before submitting a
pull request if you would like to discuss a feature or bug fix.
## Frequently Asked Questions
@ -225,7 +237,7 @@ in the most comfortable way possible for the end user. If you have not noticed
any activity on the main branch, consider taking a look at the
[list of branches] or the [list of open pull requests]. You may also consider
_testing_ those release branches to get access to new features ahead of time and
better prepare to breaking changes.
better prepare for breaking changes.
**Q**: Will you support non-flake installations?
@ -240,19 +252,19 @@ of a configuration generated from Nix?
**A**: Yes! Add `"~/.config/nvim"` to `vim.additionalRuntimePaths = [ ... ]` and
any plugins you want to load to `vim.startPlugins`. This will load your
configuration from `~/.config/nvim`. You may still use `vim.*` to modify
Neovim's behaviour with Nix.
configuration from `~/.config/nvim`. You may still use `vim.*` options in Nix to
further configure Neovim.
## Credits
### Co-Maintainers
Alongside [myself](https://github.com/notashelf), nvf is developed by those
talented folk. nvf would not be what it is today without their invaluable
talented folk. **nvf** would not be what it is today without their invaluable
contributions.
- [**@horriblename**](https://github.com/horriblename)
([Liberapay](https://liberapay.com/horriblename/))- For actively implementing
([Liberapay](https://liberapay.com/horriblename/)) - For actively implementing
planned features and quality of life updates.
- [**@Soliprem**](https://github.com/soliprem) - For rigorously implementing
missing features and excellent work on new language modules.

View file

@ -43,7 +43,7 @@ isMaximal: {
# This section does not include a comprehensive list of available language modules.
# To list all available language module options, please visit the nvf manual.
languages = {
enableFormat = true; #
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = true;
@ -89,6 +89,7 @@ isMaximal: {
ruby.enable = false;
fsharp.enable = false;
just.enable = false;
qml.enable = false;
tailwind.enable = false;
svelte.enable = false;
@ -157,7 +158,6 @@ isMaximal: {
binds = {
whichKey.enable = true;
cheatsheet.enable = true;
hardtime-nvim.enable = isMaximal;
};
telescope.enable = true;
@ -198,6 +198,8 @@ isMaximal: {
leetcode-nvim.enable = isMaximal;
multicursors.enable = isMaximal;
smart-splits.enable = isMaximal;
undotree.enable = isMaximal;
nvim-biscuits.enable = isMaximal;
motion = {
hop.enable = true;

15
default.nix Normal file
View file

@ -0,0 +1,15 @@
(import (
let
lock = builtins.fromJSON (builtins.readFile ./flake.lock);
inherit (lock.nodes.flake-compat.locked) url rev narHash;
in
builtins.fetchTarball {
url = "${url}/archive/${rev}.tar.gz";
sha256 = narHash;
}
) {
src = ./.;
copySourceTreeToStore = false;
useBuiltinsFetchTree = true;
})
.defaultNix

View file

@ -14,14 +14,17 @@ explains in more detail the overall usage logic of the DAG type.
## entryAnywhere {#sec-types-dag-entryAnywhere}
> `lib.dag.entryAnywhere (value: T) : DagEntry<T>`
> `nvf.lib.nvim.dag.entryAnywhere (value: T) : DagEntry<T>`
Indicates that `value` can be placed anywhere within the DAG. This is also the
default for plain attribute set entries, that is
```nix
# For 'nvf' to be available in module's arguments,
# it needs to be inherited from imports in the modules array as:
# modules = [{ _module.args = { inherit nvf; }; } ...];
foo.bar = {
a = lib.dag.entryAnywhere 0;
a = nvf.lib.nvim.dag.entryAnywhere 0;
}
```
@ -37,7 +40,7 @@ are equivalent.
## entryAfter {#ch-types-dag-entryAfter}
> `lib.dag.entryAfter (afters: list string) (value: T) : DagEntry<T>`
> `nvf.lib.nvim.dag.entryAfter (afters: list string) (value: T) : DagEntry<T>`
Indicates that `value` must be placed _after_ each of the attribute names in the
given list. For example
@ -45,7 +48,7 @@ given list. For example
```nix
foo.bar = {
a = 0;
b = lib.dag.entryAfter [ "a" ] 1;
b = nvf.lib.nvim.dag.entryAfter [ "a" ] 1;
}
```
@ -53,14 +56,14 @@ would place `b` after `a` in the graph.
## entryBefore {#ch-types-dag-entryBefore}
> `lib.dag.entryBefore (befores: list string) (value: T) : DagEntry<T>`
> `nvf.lib.nvim.dag.entryBefore (befores: list string) (value: T) : DagEntry<T>`
Indicates that `value` must be placed _before_ each of the attribute names in
the given list. For example
```nix
foo.bar = {
b = lib.dag.entryBefore [ "a" ] 1;
b = nvf.lib.nvim.dag.entryBefore [ "a" ] 1;
a = 0;
}
```
@ -69,7 +72,7 @@ would place `b` before `a` in the graph.
## entryBetween {#sec-types-dag-entryBetween}
> `lib.dag.entryBetween (befores: list string) (afters: list string) (value: T) : DagEntry<T>`
> `nvf.lib.nvim.dag.entryBetween (befores: list string) (afters: list string) (value: T) : DagEntry<T>`
Indicates that `value` must be placed _before_ the attribute names in the first
list and _after_ the attribute names in the second list. For example
@ -77,7 +80,7 @@ list and _after_ the attribute names in the second list. For example
```nix
foo.bar = {
a = 0;
c = lib.dag.entryBetween [ "b" ] [ "a" ] 2;
c = nvf.lib.nvim.dag.entryBetween [ "b" ] [ "a" ] 2;
b = 1;
}
```
@ -92,13 +95,13 @@ functions take a `tag` as argument and the DAG entries will be named
## entriesAnywhere {#sec-types-dag-entriesAnywhere}
> `lib.dag.entriesAnywhere (tag: string) (values: [T]) : Dag<T>`
> `nvf.lib.nvim.dag.entriesAnywhere (tag: string) (values: [T]) : Dag<T>`
Creates a DAG with the given values with each entry labeled using the given tag.
For example
```nix
foo.bar = lib.dag.entriesAnywhere "a" [ 0 1 ];
foo.bar = nvf.lib.nvim.dag.entriesAnywhere "a" [ 0 1 ];
```
is equivalent to
@ -106,13 +109,13 @@ is equivalent to
```nix
foo.bar = {
a-0 = 0;
a-1 = lib.dag.entryAfter [ "a-0" ] 1;
a-1 = nvf.lib.nvim.dag.entryAfter [ "a-0" ] 1;
}
```
## entriesAfter {#sec-types-dag-entriesAfter}
> `lib.dag.entriesAfter (tag: string) (afters: list string) (values: [T]) : Dag<T>`
> `nvf.lib.nvim.dag.entriesAfter (tag: string) (afters: list string) (values: [T]) : Dag<T>`
Creates a DAG with the given values with each entry labeled using the given tag.
The list of values are placed are placed _after_ each of the attribute names in
@ -120,7 +123,7 @@ The list of values are placed are placed _after_ each of the attribute names in
```nix
foo.bar =
{ b = 0; } // lib.dag.entriesAfter "a" [ "b" ] [ 1 2 ];
{ b = 0; } // nvf.lib.nvim.dag.entriesAfter "a" [ "b" ] [ 1 2 ];
```
is equivalent to
@ -128,14 +131,14 @@ is equivalent to
```nix
foo.bar = {
b = 0;
a-0 = lib.dag.entryAfter [ "b" ] 1;
a-1 = lib.dag.entryAfter [ "a-0" ] 2;
a-0 = nvf.lib.nvim.dag.entryAfter [ "b" ] 1;
a-1 = nvf.lib.nvim.dag.entryAfter [ "a-0" ] 2;
}
```
## entriesBefore {#sec-types-dag-entriesBefore}
> `lib.dag.entriesBefore (tag: string) (befores: list string) (values: [T]) : Dag<T>`
> `nvf.lib.nvim.dag.entriesBefore (tag: string) (befores: list string) (values: [T]) : Dag<T>`
Creates a DAG with the given values with each entry labeled using the given tag.
The list of values are placed _before_ each of the attribute names in `befores`.
@ -143,7 +146,7 @@ For example
```nix
foo.bar =
{ b = 0; } // lib.dag.entriesBefore "a" [ "b" ] [ 1 2 ];
{ b = 0; } // nvf.lib.nvim.dag.entriesBefore "a" [ "b" ] [ 1 2 ];
```
is equivalent to
@ -152,13 +155,13 @@ is equivalent to
foo.bar = {
b = 0;
a-0 = 1;
a-1 = lib.dag.entryBetween [ "b" ] [ "a-0" ] 2;
a-1 = nvf.lib.nvim.dag.entryBetween [ "b" ] [ "a-0" ] 2;
}
```
## entriesBetween {#sec-types-dag-entriesBetween}
> `lib.dag.entriesBetween (tag: string) (befores: list string) (afters: list string) (values: [T]) : Dag<T>`
> `nvf.lib.nvim.dag.entriesBetween (tag: string) (befores: list string) (afters: list string) (values: [T]) : Dag<T>`
Creates a DAG with the given values with each entry labeled using the given tag.
The list of values are placed _before_ each of the attribute names in `befores`
@ -166,7 +169,7 @@ and _after_ each of the attribute names in `afters`. For example
```nix
foo.bar =
{ b = 0; c = 3; } // lib.dag.entriesBetween "a" [ "b" ] [ "c" ] [ 1 2 ];
{ b = 0; c = 3; } // nvf.lib.nvim.dag.entriesBetween "a" [ "b" ] [ "c" ] [ 1 2 ];
```
is equivalent to
@ -175,7 +178,7 @@ is equivalent to
foo.bar = {
b = 0;
c = 3;
a-0 = lib.dag.entryAfter [ "c" ] 1;
a-1 = lib.dag.entryBetween [ "b" ] [ "a-0" ] 2;
a-0 = nvf.lib.nvim.dag.entryAfter [ "c" ] 1;
a-1 = nvf.lib.nvim.dag.entryBetween [ "b" ] [ "a-0" ] 2;
}
```

View file

@ -2,9 +2,9 @@
The [additional plugins section](#sec-additional-plugins) details the addition
of new plugins to nvf under regular circumstances, i.e. while making a pull
request to the project. You may _override_ those plugins in your config
to change source versions, e.g., to use newer versions of plugins
that are not yet updated in **nvf**.
request to the project. You may _override_ those plugins in your config to
change source versions, e.g., to use newer versions of plugins that are not yet
updated in **nvf**.
```nix
vim.pluginOverrides = {

View file

@ -1,25 +1,92 @@
# Adding Plugins {#sec-additional-plugins}
To add a new Neovim plugin, use `npins`
There are two methods for adding new Neovim plugins to **nvf**. npins is the
faster option that should be preferred if the plugin consists of pure Lua or
Vimscript code. In which case there is no building required, and we can easily
handle the copying of plugin files. Alternative method, which is required when
plugins try to build their own libraries (e.g., in Rust or C) that need to be
built with Nix to function correctly.
Use:
## With npins {#sec-npins-for-plugins}
`nix-shell -p npins` or `nix shell nixpkgs#npins`
npins is the standard method of adding new plugins to **nvf**. You simply need
the repository URL for the plugin, and can add it as a source to be built
automatically with one command. To add a new Neovim plugin, use `npins`. For
example:
```bash
nix-shell -p npins # or nix shell nixpkgs#npins if using flakes
```
Then run:
`npins add --name <plugin name> github <owner> <repo> -b <branch>`
```bash
npins add --name <plugin name> github <owner> <repo> -b <branch>
```
Be sure to replace any non-alphanumeric characters with `-` for `--name`
::: {.note}
For example
Be sure to replace any non-alphanumeric characters with `-` for `--name`. For
example
`npins add --name lazydev-nvim github folke lazydev.nvim -b main`
```bash
npins add --name lazydev-nvim github folke lazydev.nvim -b main
```
You can now reference this plugin as a **string**.
:::
Once the `npins` command is done, you can start referencing the plugin as a
**string**.
```nix
config.vim.startPlugins = ["lazydev-nvim"];
{
config.vim.startPlugins = ["lazydev-nvim"];
}
```
## Packaging Complex Plugins {#sec-pkgs-for-plugins}
[blink.cmp]: https://github.com/Saghen/blink.cmp
Some plugins require additional packages to be built and substituted to function
correctly. For example [blink.cmp] requires its own fuzzy matcher library, built
with Rust, to be installed or else defaults to a much slower Lua implementation.
In the Blink documentation, you are advised to build with `cargo` but that is
not ideal since we are leveraging the power of Nix. In this case the ideal
solution is to write a derivation for the plugin.
We use `buildRustPackage` to build the library from the repository root, and
copy everything in the `postInstall` phase.
```nix
postInstall = ''
cp -r {lua,plugin} "$out"
mkdir -p "$out/doc"
cp 'doc/'*'.txt' "$out/doc/"
mkdir -p "$out/target"
mv "$out/lib" "$out/target/release"
'';
```
In a similar fashion, you may utilize `stdenv.mkDerivation` and other Nixpkgs
builders to build your library from source, and copy the relevant files and Lua
plugin files in the `postInstall` phase. Do note, however, that you still need
to fetch the plugin sources somehow. npins is, once again, the recommended
option to fetch the plugin sources. Refer to the previous section on how to use
npins to add a new plugin.
Plugins built from source must go into the `flake/pkgs/by-name` overlay. It will
automatically create flake outputs for individual packages. Lastly, you must add
your package to the plugin builder (`pluginBuilders`) function manually in
`modules/wrapper/build/config.nix`. Once done, you may refer to your plugin as a
**string**.
```nix
{
config.vim.startPlugins = ["blink-cmp"];
}
```
## Modular setup options {#sec-modular-setup-options}
@ -70,7 +137,7 @@ in {
}
```
This above config will result in this lua script:
This above config will result in this Lua script:
```lua
require('plugin-name').setup({
@ -101,23 +168,41 @@ own fields!
As you've seen above, `toLuaObject` is used to convert our nix attrSet
`cfg.setupOpts`, into a lua table. Here are some rules of the conversion:
1. nix `null` converts to lua `nil`
2. number and strings convert to their lua counterparts
3. nix attrSet/list convert into lua tables
4. you can write raw lua code using `lib.generators.mkLuaInline`. This function
is part of nixpkgs.
1. Nix `null` converts to lua `nil`
2. Number and strings convert to their lua counterparts
3. Nix attribute sets (`{}`) and lists (`[]`) convert into Lua dictionaries and
tables respectively. Here is an example of Nix -> Lua conversion.
- `{foo = "bar"}` -> `{["foo"] = "bar"}`
- `["foo" "bar"]` -> `{"foo", "bar"}`
4. You can write raw Lua code using `lib.generators.mkLuaInline`. This function
is part of nixpkgs, and is accessible without relying on **nvf**'s extended
library.
- `mkLuaInline "function add(a, b) return a + b end"` will yield the
following result:
Example:
```nix
{
_type = "lua-inline";
expr = "function add(a, b) return a + b end";
}
```
```nix
vim.your-plugin.setupOpts = {
on_init = lib.generators.mkLuaInline ''
function()
print('we can write lua!')
end
'';
}
```
The above expression will be interpreted as a Lua expression in the final
config. Without the `mkLuaInline` function, you will only receive a string
literal. You can use it to feed plugin configuration tables Lua functions
that return specific values as expected by the plugins.
```nix
{
vim.your-plugin.setupOpts = {
on_init = lib.generators.mkLuaInline ''
function()
print('we can write lua!')
end
'';
};
}
```
## Lazy plugins {#sec-lazy-plugins}
@ -126,25 +211,24 @@ Lazy plugins are managed by `lz.n`.
```nix
# in modules/.../your-plugin/config.nix
{lib, config, ...}:
let
{config, ...}: let
cfg = config.vim.your-plugin;
in {
vim.lazy.plugins.your-plugin = {
# instead of vim.startPlugins, use this:
# Instead of vim.startPlugins, use this:
package = "your-plugin";
# if your plugin uses the `require('your-plugin').setup{...}` pattern
# ıf your plugin uses the `require('your-plugin').setup{...}` pattern
setupModule = "your-plugin";
inherit (cfg) setupOpts;
# events that trigger this plugin to be loaded
# Events that trigger this plugin to be loaded
event = ["DirChanged"];
cmd = ["YourPluginCommand"];
# keymaps
# Plugin Keymaps
keys = [
# we'll cover this in detail in the keymaps section
# We'll cover this in detail in the 'keybinds' section
{
key = "<leader>d";
mode = "n";
@ -152,7 +236,6 @@ in {
}
];
};
;
}
```
@ -163,7 +246,9 @@ require('lz.n').load({
{
"name-of-your-plugin",
after = function()
require('your-plugin').setup({--[[ your setupOpts ]]})
require('your-plugin').setup({
--[[ your setupOpts ]]--
})
end,
event = {"DirChanged"},
@ -175,5 +260,7 @@ require('lz.n').load({
})
```
A full list of options can be found
[here](https://notashelf.github.io/nvf/options.html#opt-vim.lazy.plugins
[`vim.lazy.plugins` spec]: https://notashelf.github.io/nvf/options.html#opt-vim.lazy.plugins
A full list of options can be found in the [`vim.lazy.plugins` spec] on the
rendered manual.

View file

@ -30,8 +30,8 @@ There are many settings available in the options. Please refer to the
[documentation](https://notashelf.github.io/nvf/options.html#opt-vim.keymaps) to
see a list of them.
**nvf** provides a helper function, so that you don't have to write the
mapping attribute sets every time:
**nvf** provides a helper function, so that you don't have to write the mapping
attribute sets every time:
- `mkKeymap`, which mimics neovim's `vim.keymap.set` function

View file

@ -0,0 +1,33 @@
### Prerequisites {#sec-flakes-prerequisites}
To install nvf with flakes, you must make sure the following requirements are
met.
1. Nix 2.4 or later must be installed. You may use `nix-shell` to get a later
version of Nix from nixpkgs.
2. Flake-related experimental features must be enabled. Namely, you need
`nix-command` and `flakes`. Some Nix vendors enable those by default, please
consult their documentation if you are not using mainstream Nix.
- When using NixOS, add the following to your `configuration.nix` and rebuild
your system.
```nix
nix.settings.experimental-features = "nix-command flakes";
```
- If you are not using NixOS, add the following to `nix.conf` (located at
`~/.config/nix/` or `/etc/nix/nix.conf`).
```bash
experimental-features = nix-command flakes
```
- You may need to restart the Nix daemon with, for example,
`sudo systemctl restart nix-daemon.service`.
- Alternatively, you can enable flakes on a per-command basis with the
following additional flags to `nix` and `home-manager`:
```sh
$ nix --extra-experimental-features "nix-command flakes" <sub-commands>
```

View file

@ -5,9 +5,18 @@ inside the home-manager configuration without having to call for the wrapper
yourself. It is the recommended way to use **nvf** alongside the NixOS module
depending on your needs.
To use it, we first add the input flake.
## With Flakes {#sec-hm-flakes}
```{=include=}
flakes.md
```
### Usage {#sec-hm-flakes-usage}
To use **nvf** with flakes, we first need to add the input to our `flake.nix`.
```nix
# flake.nix
{
inputs = {
# Optional, if you intend to follow nvf's obsidian-nvim input
@ -16,7 +25,7 @@ To use it, we first add the input flake.
# Required, nvf works best and only directly supports flakes
nvf = {
url = "github:notashelf/nvf";
url = "github:NotAShelf/nvf";
# 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.
@ -25,6 +34,8 @@ To use it, we first add the input flake.
# for example:
inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- this will use the obsidian-nvim from your inputs
};
# ...
};
}
```
@ -39,7 +50,7 @@ Followed by importing the home-manager module somewhere in your configuration.
}
```
## Example Installation {#sec-example-installation-hm}
### Example Installation {#sec-example-installation-hm}
```nix
{
@ -66,7 +77,8 @@ Once the module is properly imported by your host, you will be able to use the
`programs.nvf` module option anywhere in your configuration in order to
configure **nvf**.
```nix{
```nix
{
programs.nvf = {
enable = true;
# your settings need to go into the settings attribute set
@ -89,3 +101,45 @@ installation sections of the manual. You may find all available options in the
[appendix](https://notashelf.github.io/nvf/options)
:::
## Without Flakes {#sec-hm-flakeless}
As of v0.8, it is possible to install **nvf** on a system if you are not using
flakes. This is possible thanks to the flake-compat project.
To get started, you must fetch the repository using `builtins.fetchTarball` or a
similar mechanism.
```nix
# home.nix
let
nvf = import (builtins.fetchTarball {
url = "https://github.com/notashelf/nvf/archive/<commit or tag>.tar.gz";
# Optionally, you can add 'sha256' for verification and caching
# sha256 = "<sha256>";
});
in {
imports = [
# Import the NixOS module from your fetched input
nvf.homeManagerModules.nvf
];
# Once the module is imported, you may use `programs.nvf` as exposed by the
# NixOS module.
programs.nvf.enable = true;
}
```
[npins]: https://github.com/andir/npins
[niv]: https://github.com/nmattia/niv
::: {.tip}
Nix2 does not have a builtin lockfile mechanism like flakes. As such you must
manually update the URL and hash for your input. This is annoying to deal with,
and most users choose to defer this task to projects such as [npins] or [niv].
If you are new to NixOS, I encourage you to look into Flakes and see if they fit
your use case. Alternatively, look into the aforementioned projects for more
convenient dependency management mechanisms.
:::

View file

@ -5,9 +5,18 @@ the NixOS configuration without having to call for the wrapper yourself. It is
the recommended way to use **nvf** alongside the home-manager module depending
on your needs.
To use it, we first add the input flake.
## With Flakes {#sec-nixos-flakes}
```{=include=}
flakes.md
```
### Usage {#sec-nixos-flakes-usage}
To use **nvf** with flakes, we first need to add the input to our `flake.nix`.
```nix
# flake.nix
{
inputs = {
# Optional, if you intend to follow nvf's obsidian-nvim input
@ -16,7 +25,7 @@ To use it, we first add the input flake.
# Required, nvf works best and only directly supports flakes
nvf = {
url = "github:notashelf/nvf";
url = "github:NotAShelf/nvf";
# 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.
@ -25,6 +34,8 @@ To use it, we first add the input flake.
# for example:
inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- this will use the obsidian-nvim from your inputs
};
# ...
};
}
```
@ -39,7 +50,7 @@ Followed by importing the NixOS module somewhere in your configuration.
}
```
## Example Installation {#sec-example-installation-nixos}
### Example Installation {#sec-example-installation-nixos}
```nix
{
@ -64,10 +75,12 @@ Once the module is properly imported by your host, you will be able to use the
`programs.nvf` module option anywhere in your configuration in order to
configure **nvf**.
```nix{
```nix
{
programs.nvf = {
enable = true;
# your settings need to go into the settings attribute set
# Your settings need to go into the settings attribute set
# most settings are documented in the appendix
settings = {
vim.viAlias = false;
@ -87,3 +100,45 @@ installation sections of the manual. You may find all available options in the
[appendix](https://notashelf.github.io/nvf/options)
:::
## Without Flakes {#sec-nixos-flakeless}
As of v0.8, it is possible to install **nvf** on a system if you are not using
flakes. This is possible thanks to the flake-compat project.
To get started, you must fetch the repository using `builtins.fetchTarball` or a
similar mechanism.
```nix
# configuration.nix
let
nvf = import (builtins.fetchTarball {
url = "https://github.com/notashelf/nvf/archive/<commit or tag>.tar.gz";
# Optionally, you can add 'sha256' for verification and caching
# sha256 = "<sha256>";
});
in {
imports = [
# Import the NixOS module from your fetched input
nvf.nixosModules.nvf
];
# Once the module is imported, you may use `programs.nvf` as exposed by the
# NixOS module.
programs.nvf.enable = true;
}
```
[npins]: https://github.com/andir/npins
[niv]: https://github.com/nmattia/niv
::: {.tip}
Nix2 does not have a builtin lockfile mechanism like flakes. As such you must
manually update the URL and hash for your input. This is annoying to deal with,
and most users choose to defer this task to projects such as [npins] or [niv].
If you are new to NixOS, I encourage you to look into Flakes and see if they fit
your use case. Alternatively, look into the aforementioned projects for more
convenient dependency management mechanisms.
:::

View file

@ -49,7 +49,8 @@ the default theme enabled. You may use other options inside `config.vim` in
# ...
modules = [
# This will make wrapped neovim available in your system packages
# Can also move this to another config file if you pass inputs/self around with specialArgs
# Can also move this to another config file if you pass your own
# inputs/self around with specialArgs
({pkgs, ...}: {
environment.systemPackages = [self.packages.${pkgs.stdenv.system}.neovim];
})
@ -58,4 +59,5 @@ the default theme enabled. You may use other options inside `config.vim` in
};
};
};
}```
}
```

View file

@ -5,19 +5,20 @@ installing it to your machine. Below are the commands you may run to try out
different configurations provided by this flake. As of v0.5, two specialized
configurations are provided:
- **Nix** - Nix language server + simple utility plugins
- **Maximal** - Variable language servers + utility and decorative plugins
- **Nix** (`packages.nix`) - Nix language server + simple utility plugins
- **Maximal** (`packages.maximal`) - Variable language servers + utility and
decorative plugins
You may try out any of the provided configurations using the `nix run` command
on a system where Nix is installed.
```bash
```sh
$ cachix use nvf # Optional: it'll save you CPU resources and time
$ nix run github:notashelf/nvf#nix # will run the default minimal configuration
$ nix run github:notashelf/nvf#nix # Will run the default minimal configuration
```
Do keep in mind that this is **susceptible to garbage collection** meaning it
will be removed from your Nix store once you garbage collect.
Do keep in mind that this is **susceptible to garbage collection** meaning that
the built outputs will be removed from your Nix store once you garbage collect.
## Using Prebuilt Configs {#sec-using-prebuilt-configs}
@ -65,6 +66,7 @@ companion or fun plugins.
::: {.warning}
Running the maximal config will download _a lot_ of packages as it is
downloading language servers, formatters, and more.
downloading language servers, formatters, and more. If CPU time and bandwidth
are concerns, please use the default package instead.
:::

View file

@ -35,7 +35,10 @@
[yanky.nvim]: https://github.com/gbprod/yanky.nvim
[yazi.nvim]: https://github.com/mikavilpas/yazi.nvim
[snacks.nvim]: https://github.com/folke/snacks.nvim
[colorful-menu.nvim]: https://github.com/xzbdmw/colorful-menu.nvim
[oil.nvim]: https://github.com/stevearc/oil.nvim
[hunk.nvim]: https://github.com/julienvincent/hunk.nvim
[undotree]: https://github.com/mbbill/undotree
- Add [typst-preview.nvim] under
`languages.typst.extensions.typst-preview-nvim`.
@ -93,9 +96,10 @@
- Lazyload Lspsaga and remove default keybindings for it.
- Add [colorful-menu.nvim] to enhance the completion menus, with optional
integration for blink-cmp and nvim-cmp
- Add [oil.nvim] as an alternative file explorer. It will be available under
`vim.utility.oil-nvim`.
- Add `vim.diagnostics` to interact with Neovim's diagnostics module. Available
options for `vim.diagnostic.config()` can now be customized through the
[](#opt-vim.diagnostics.config) in nvf.
@ -104,6 +108,8 @@
relevant packages in a simple UI.
- This deprecates `vim.useSystemClipboard` as well, see breaking changes
section above for migration options.
- Add [hunk.nvim], Neovim plugin & tool for splitting diffs in Neovim. Available
as `vim.git.hunk-nvim`
[amadaluzia](https://github.com/amadaluzia):
@ -434,7 +440,7 @@
- Add missing `transparent` option for existing
[onedark.nvim](https://github.com/navarasu/onedark.nvim) theme.
[theutz](https://github.com/theutz):
- Added "auto" flavour for catppuccin theme
@ -446,19 +452,21 @@
[neogit]: https://github.com/NeogitOrg/neogit
- Add [solarized.nvim] theme with support for multiple variants
- Add [smart-splits.nvim] for navigating between Neovim windows and terminal multiplexer panes.
Available at `vim.utility.smart-splits`.
- Restore vim-dirtytalk plugin and fix ordering with spellcheck in generated config.
- Add [smart-splits.nvim] for navigating between Neovim windows and terminal
multiplexer panes. Available at `vim.utility.smart-splits`.
- Restore vim-dirtytalk plugin and fix ordering with spellcheck in generated
config.
- Fix lualine separator options
- Add [neogit], an interactive and powerful Git interface for Neovim, inspired by Magit
- Add [neogit], an interactive and powerful Git interface for Neovim, inspired
by Magit
- Allow deregistering which-key binds or groups by setting them to `null`
[justDeeevin](https://github.com/justDeeevin):
[supermaven-nvim]: https://github.com/supermaven-inc/supermaven-nvim
- Add [supermaven-nvim] plugin in `vim.assistant.supermaven-nvim` with `enable` and
`setupOpts`
- Add [supermaven-nvim] plugin in `vim.assistant.supermaven-nvim` with `enable`
and `setupOpts`
[trueNAHO](https://github.com/trueNAHO):
@ -466,13 +474,28 @@
download size.
- `flake-utils`'s `systems` inputs follows nvf's `systems` input to transitively
leverage the pattern introduced in commit [fc8206e7a61d ("flake: utilize
nix-systems for overridable flake systems")](
https://github.com/NotAShelf/nvf/commit/fc8206e7a61d7eb02006f9010e62ebdb3336d0d2).
leverage the pattern introduced in commit
[fc8206e7a61d ("flake: utilize
nix-systems for overridable flake systems")](https://github.com/NotAShelf/nvf/commit/fc8206e7a61d7eb02006f9010e62ebdb3336d0d2).
[soliprem](https://github.com/soliprem):
- fix broken `neorg` grammars
- remove obsolete warning in the `otter` module
[Cool-Game-Dev](https://github.com/Cool-Game-Dev):
[nvim-biscuits]: https://github.com/code-biscuits/nvim-biscuits
- Add [nvim-biscuits] to show block context. Available at
`vim.utility.nvim-biscuits`.
[JManch](https://github.com/JManch):
- Fix default [blink.cmp] sources "path" and "buffer" not working when
`autocomplete.nvim-cmp.enable` was disabled and
`autocomplete.nvim-cmp.sources` had not been modified.
[Cool-Game-Dev](https://github.com/Cool-Game-Dev):
@ -483,6 +506,8 @@
[superhtml]: https://github.com/kristoff-it/superhtml
[htmlHINT]: https://github.com/htmlhint/HTMLHint
[qmk-nvim]: https://github.com/codethread/qmk.nvim
[qmlls]: https://doc.qt.io/qt-6/qtqml-tooling-qmlls.html
[qmlformat]: https://doc.qt.io/qt-6/qtqml-tooling-qmlformat.html
- Add just support under `vim.languages.just` using [just-lsp].
- Add [roslyn-ls] to the `vim.languages.csharp` module.
@ -490,3 +515,4 @@
- Add advanced HTML support under `vim.languages.html` using [superhtml] and
[htmlHINT].
- Add QMK support under `vim.utility.qmk-nvim` via [qmk-nvim].
- Add QML support under `vim.languages.qml` using [qmlls] and [qmlformat]

50
flake.lock generated
View file

@ -1,5 +1,21 @@
{
"nodes": {
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1751685974,
"narHash": "sha256-NKw96t+BgHIYzHUjkTK95FqYRVKB8DHpVhefWSz/kTw=",
"ref": "refs/heads/main",
"rev": "549f2762aebeff29a2e5ece7a7dc0f955281a1d1",
"revCount": 92,
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
},
"original": {
"type": "git",
"url": "https://git.lix.systems/lix-project/flake-compat.git"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@ -7,11 +23,11 @@
]
},
"locked": {
"lastModified": 1749398372,
"narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=",
"lastModified": 1754487366,
"narHash": "sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569",
"rev": "af66ad14b28a127c5c0f3bbb298218fc63528a18",
"type": "github"
},
"original": {
@ -20,26 +36,6 @@
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": [
"systems"
]
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"mnw": {
"locked": {
"lastModified": 1748710831,
@ -57,11 +53,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1750215678,
"narHash": "sha256-Rc/ytpamXRf6z8UA2SGa4aaWxUXRbX2MAWIu2C8M+ok=",
"lastModified": 1755049066,
"narHash": "sha256-ANrc15FSoOAdNbfKHxqEJjZLftIwIsenJGRb/04K41s=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "5395fb3ab3f97b9b7abca147249fa2e8ed27b192",
"rev": "e45f8f193029378d0aaee5431ba098dc80054e9a",
"type": "github"
},
"original": {
@ -73,8 +69,8 @@
},
"root": {
"inputs": {
"flake-compat": "flake-compat",
"flake-parts": "flake-parts",
"flake-utils": "flake-utils",
"mnw": "mnw",
"nixpkgs": "nixpkgs",
"systems": "systems"

View file

@ -5,8 +5,9 @@
self,
...
} @ inputs: let
# call the extended library with `inputs`
# inputs is used to get the original standard library, and to pass inputs to the plugin autodiscovery function
# Call the extended library with `inputs`.
# inputs is used to get the original standard library, and to pass inputs
# to the plugin autodiscovery function
lib = import ./lib/stdlib-extended.nix {inherit inputs self;};
in
flake-parts.lib.mkFlake {
@ -29,6 +30,8 @@
inherit (lib.nvim) neovimConfiguration;
};
inherit (lib.importJSON ./npins/sources.json) pins;
homeManagerModules = {
nvf = import ./flake/modules/home-manager.nix {inherit lib inputs;};
default = self.homeManagerModules.nvf;
@ -50,21 +53,33 @@
''
self.nixosModules.nvf;
};
inherit (lib.importJSON ./npins/sources.json) pins;
};
perSystem = {pkgs, ...}: {
# Provide the default formatter. `nix fmt` in project root
# will format available files with the correct formatter.
# P.S: Please do not format with nixfmt! It messes with many
# syntax elements and results in unreadable code.
formatter = pkgs.alejandra;
# Provides the default formatter for 'nix fmt', which will format the
# entire tree with Alejandra. The wrapper script is necessary due to
# changes to the behaviour of Nix, which now encourages wrappers for
# tree-wide formatting.
formatter = pkgs.writeShellApplication {
name = "nix3-fmt-wrapper";
# Check if codebase is properly formatted.
# This can be initiated with `nix build .#checks.<system>.nix-fmt`
# or with `nix flake check`
runtimeInputs = [
pkgs.alejandra
pkgs.fd
];
text = ''
# Find Nix files in the tree and format them with Alejandra
fd "$@" -t f -e nix -x alejandra -q '{}'
'';
};
# Provides checks to be built an ran on 'nix flake check'. They can also
# be built individually with 'nix build' as described below.
checks = {
# Check if codebase is properly formatted.
# This can be initiated with `nix build .#checks.<system>.nix-fmt`
# or with `nix flake check`
nix-fmt = pkgs.runCommand "nix-fmt-check" {nativeBuildInputs = [pkgs.alejandra];} ''
alejandra --check ${self} < /dev/null | tee $out
'';
@ -72,8 +87,9 @@
};
};
# Flake inputs
inputs = {
systems.url = "github:nix-systems/default";
## Basic Inputs
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
@ -82,13 +98,11 @@
inputs.nixpkgs-lib.follows = "nixpkgs";
};
flake-utils = {
url = "github:numtide/flake-utils";
inputs.systems.follows = "systems";
flake-compat = {
url = "git+https://git.lix.systems/lix-project/flake-compat.git";
flake = false;
};
systems.url = "github:nix-systems/default";
# Alternate neovim-wrapper
mnw.url = "github:Gerg-L/mnw";
};

View file

@ -9,84 +9,114 @@
lib,
...
}: let
inherit (lib.customisation) makeScope;
inherit (lib.attrsets) isDerivation isAttrs concatMapAttrs;
inherit (lib.strings) concatStringsSep;
inherit (lib.filesystem) packagesFromDirectoryRecursive;
# Entrypoint for nvf documentation and relevant packages.
docs = import ../docs {inherit pkgs inputs lib;};
# Helper function for creating demo configurations for nvf
# TODO: make this more generic.
buildPkg = maximal:
(args.config.flake.lib.nvim.neovimConfiguration {
inherit pkgs;
modules = [(import ../configuration.nix maximal)];
}).neovim;
# This constructs a by-name overlay similar to the one found in Nixpkgs.
# The goal is to automatically discover and packages found in pkgs/by-name
# as long as they have a 'package.nix' in the package directory. We also
# pass 'inputs' and 'pins' to all packages in the 'callPackage' scope, therefore
# they are always available in the relevant 'package.nix' files.
# ---
# The logic is borrowed from drupol/pkgs-by-name-for-flake-parts, available
# under the MIT license.
flattenPkgs = separator: path: value:
if isDerivation value
then {
${concatStringsSep separator path} = value;
}
else if isAttrs value
then concatMapAttrs (name: flattenPkgs separator (path ++ [name])) value
else
# Ignore the functions which makeScope returns
{};
inputsScope = makeScope pkgs.newScope (_: {
inherit inputs;
inherit (self) pins;
});
scopeFromDirectory = directory:
packagesFromDirectoryRecursive {
inherit directory;
inherit (inputsScope) newScope callPackage;
};
legacyPackages = scopeFromDirectory ./pkgs/by-name;
in {
packages = {
blink-cmp = pkgs.callPackage ./blink {};
avante-nvim = let
pin = self.pins.avante-nvim;
in
pkgs.callPackage ./avante-nvim {
version = pin.branch;
src = pkgs.fetchFromGitHub {
inherit (pin.repository) owner repo;
rev = pin.revision;
sha256 = pin.hash;
};
pins = self.pins;
};
packages =
(flattenPkgs "/" [] legacyPackages)
// {
inherit (docs.manual) htmlOpenTool;
inherit (docs.manual) htmlOpenTool;
# Documentation
docs = docs.manual.html;
docs-html = docs.manual.html;
docs-manpages = docs.manPages;
docs-json = docs.options.json;
docs-linkcheck = let
site = config.packages.docs;
in
pkgs.testers.lycheeLinkCheck {
inherit site;
# Documentation
docs = docs.manual.html;
docs-html = docs.manual.html;
docs-manpages = docs.manPages;
docs-json = docs.options.json;
docs-linkcheck = let
site = config.packages.docs;
in
pkgs.testers.lycheeLinkCheck {
inherit site;
remap = {
"https://notashelf.github.io/nvf/" = site;
remap = {
"https://notashelf.github.io/nvf/" = site;
};
extraConfig = {
exclude = [];
include_mail = true;
include_verbatim = true;
};
};
extraConfig = {
exclude = [];
include_mail = true;
include_verbatim = true;
};
};
# Helper utility for building the HTML manual and opening it in the
# browser with $BROWSER or using xdg-open as a fallback tool.
# Adapted from Home-Manager, available under the MIT license.
docs-html-wrapped = let
xdg-open = lib.getExe' pkgs.xdg-utils "xdg-open";
docs-html = docs.manual.html + /share/doc/nvf;
in
pkgs.writeShellScriptBin "docs-html-wrapped" ''
set -euo pipefail
# Helper utility for building the HTML manual and opening it in the
# browser with $BROWSER or using xdg-open as a fallback tool.
# Adapted from Home-Manager, available under the MIT license.
docs-html-wrapped = let
xdg-open = lib.getExe' pkgs.xdg-utils "xdg-open";
docs-html = docs.manual.html + /share/doc/nvf;
in
pkgs.writeShellScriptBin "docs-html-wrapped" ''
set -euo pipefail
if [[ ! -v BROWSER || -z $BROWSER ]]; then
for candidate in xdg-open open w3m; do
BROWSER="$(type -P $candidate || true)"
if [[ -x $BROWSER ]]; then
break;
fi
done
fi
if [[ ! -v BROWSER || -z $BROWSER ]]; then
for candidate in xdg-open open w3m; do
BROWSER="$(type -P $candidate || true)"
if [[ -x $BROWSER ]]; then
break;
fi
done
fi
if [[ ! -v BROWSER || -z $BROWSER ]]; then
echo "$0: unable to start a web browser; please set \$BROWSER"
echo "$0: Trying xdg-open as a fallback"
${xdg-open} ${docs-html}/index.xhtml
else
echo "\$BROWSER is set. Attempting to open manual"
exec "$BROWSER" "${docs-html}/index.xhtml"
fi
'';
if [[ ! -v BROWSER || -z $BROWSER ]]; then
echo "$0: unable to start a web browser; please set \$BROWSER"
echo "$0: Trying xdg-open as a fallback"
${xdg-open} ${docs-html}/index.xhtml
else
echo "\$BROWSER is set. Attempting to open manual"
exec "$BROWSER" "${docs-html}/index.xhtml"
fi
'';
# Exposed neovim configurations
nix = buildPkg false;
maximal = buildPkg true;
default = config.packages.nix;
};
# Exposed neovim configurations
nix = buildPkg false;
maximal = buildPkg true;
default = config.packages.nix;
};
};
}

View file

@ -1,4 +1,5 @@
{
pins,
openssl,
pkg-config,
rustPlatform,
@ -6,11 +7,17 @@
vimUtils,
makeWrapper,
pkgs,
version,
src,
...
}: let
inherit version src;
# From npins
pin = pins.avante-nvim;
version = pin.branch;
src = pkgs.fetchFromGitHub {
inherit (pin.repository) owner repo;
rev = pin.revision;
sha256 = pin.hash;
};
avante-nvim-lib = rustPlatform.buildRustPackage {
pname = "avante-nvim-lib";
inherit version src;
@ -48,10 +55,9 @@ in
ext = stdenv.hostPlatform.extensions.sharedLibrary;
in ''
mkdir -p $out/build
ln -s ${avante-nvim-lib}/lib/libavante_repo_map${ext} $out/build/avante_repo_map${ext}
ln -s ${avante-nvim-lib}/lib/libavante_templates${ext} $out/build/avante_templates${ext}
ln -s ${avante-nvim-lib}/lib/libavante_tokenizers${ext} $out/build/avante_tokenizers${ext}
ln -s ${avante-nvim-lib}/lib/libavante_html2md${ext} $out/build/avante_html2md${ext}
for lib in "avante_repo_map" "avante_templates" "avante_tokenizers" "avante_html2md"; do
ln -s ${avante-nvim-lib}/lib/lib$lib${ext} $out/build/$lib${ext}
done
'';
nvimSkipModules = [

View file

@ -5,13 +5,13 @@
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "blink-cmp";
version = "1.3.1";
version = "1.6.0";
src = fetchFromGitHub {
owner = "Saghen";
repo = "blink.cmp";
tag = "v${finalAttrs.version}";
hash = "sha256-8lyDDrsh3sY7l0i0TPyhL69Oq0l63+/QPnLaU/mhq5A=";
hash = "sha256-IHRYgKcYP+JDGu8Vtawgzlhq25vpROFqb8KmpfVMwCk=";
};
forceShare = [
@ -29,8 +29,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
mv "$out/lib" "$out/target/release"
'';
cargoHash = "sha256-IDoDugtNWQovfSstbVMkKHLBXKa06lxRWmywu4zyS3M=";
useFetchCargoVendor = true;
cargoHash = "sha256-QsVCugYWRri4qu64wHnbJQZBhy4tQrr+gCYbXtRBlqE=";
nativeBuildInputs = [
(writeShellScriptBin "git" "exit 1")

View file

@ -5,11 +5,12 @@
}: let
inherit (lib.modules) mkIf;
inherit (lib.strings) optionalString;
inherit (lib.attrsets) optionalAttrs;
inherit (lib.generators) mkLuaInline;
inherit (lib.attrsets) attrValues filterAttrs mapAttrsToList;
inherit (lib.lists) map optional elem;
inherit (lib.lists) map optional optionals elem;
inherit (lib.nvim.lua) toLuaObject;
inherit (builtins) concatStringsSep typeOf tryEval attrNames mapAttrs;
inherit (builtins) concatStringsSep typeOf tryEval attrNames mapAttrs removeAttrs;
cfg = config.vim.autocomplete.blink-cmp;
cmpCfg = config.vim.autocomplete.nvim-cmp;
@ -55,7 +56,7 @@ in {
after =
# lua
''
${optionalString config.vim.lazy.enable
${optionalString (config.vim.lazy.enable && cmpCfg.enable)
(concatStringsSep "\n" (map
(package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})")
cmpCfg.sourcePlugins))}
@ -66,7 +67,10 @@ in {
autocomplete = {
enableSharedCmpSources = true;
blink-cmp.setupOpts = {
sources = {
sources = let
# We do not want nvim-cmp compat sources overriding built-in blink sources
filteredCmpSources = removeAttrs cmpCfg.sources blinkBuiltins;
in {
default =
[
"lsp"
@ -74,14 +78,16 @@ in {
"snippets"
"buffer"
]
++ (attrNames cmpCfg.sources)
++ optionals cmpCfg.enable (attrNames filteredCmpSources)
++ (attrNames enabledBlinkSources);
providers =
mapAttrs (name: _: {
inherit name;
module = "blink.compat.source";
})
cmpCfg.sources
optionalAttrs cmpCfg.enable (
mapAttrs (name: _: {
inherit name;
module = "blink.compat.source";
})
filteredCmpSources
)
// (mapAttrs (name: definition: {
inherit name;
inherit (definition) module;

View file

@ -3,46 +3,47 @@
inherit (lib.types) listOf attrs bool enum str oneOf int;
in {
options.vim.dashboard.startify = {
enable = mkEnableOption "dashboard via vim-startify";
enable = mkEnableOption "fancy start screen for Vim [vim-startify]";
bookmarks = mkOption {
default = [];
description = ''List of book marks to display on start page'';
type = listOf attrs;
default = [];
example = {"c" = "~/.vimrc";};
description = "List of book marks to display on start page";
};
changeToDir = mkOption {
default = true;
description = "Should vim change to the directory of the file you open";
type = bool;
default = true;
description = "Whether Vim should change to the directory of the file you open";
};
changeToVCRoot = mkOption {
default = false;
description = "Should vim change to the version control root when opening a file";
type = bool;
default = false;
description = "Whether Vim should change to the version control root when opening a file";
};
changeDirCmd = mkOption {
default = "lcd";
description = "Command to change the current window with. Can be cd, lcd or tcd";
type = enum ["cd" "lcd" "tcd"];
default = "lcd";
description = "Command to change the current window with.";
};
customHeader = mkOption {
type = listOf str;
default = [];
description = "Text to place in the header";
type = listOf str;
};
customFooter = mkOption {
type = listOf str;
default = [];
description = "Text to place in the footer";
type = listOf str;
};
lists = mkOption {
type = listOf attrs;
default = [
{
type = "files";
@ -66,121 +67,136 @@ in {
}
];
description = "Specify the lists and in what order they are displayed on startify.";
type = listOf attrs;
};
skipList = mkOption {
type = listOf str;
default = [];
description = "List of regex patterns to exclude from MRU lists";
type = listOf str;
};
updateOldFiles = mkOption {
type = bool;
default = false;
description = "Set if you want startify to always update and not just when neovim closes";
type = bool;
};
sessionAutoload = mkOption {
default = false;
description = "Make startify auto load Session.vim files from the current directory";
type = bool;
default = false;
description = "Make vim-startify auto load Session.vim files from the current directory";
};
commands = mkOption {
type = listOf (oneOf [str attrs (listOf str)]);
default = [];
description = "Commands that are presented to the user on startify page";
type = listOf (oneOf [str attrs (listOf str)]);
};
filesNumber = mkOption {
type = int;
default = 10;
description = "How many files to list";
type = int;
};
customIndices = mkOption {
type = listOf str;
default = [];
description = "Specify a list of default characters to use instead of numbers";
type = listOf str;
};
disableOnStartup = mkOption {
default = false;
description = "Prevent startify from opening on startup but can be called with :Startify";
type = bool;
default = false;
description = ''
Whether vim-startify should be disabled on startup.
This will prevent startify from opening on startup, but it can still
be called with `:Startify`
'';
};
unsafe = mkOption {
default = false;
description = "Turns on unsafe mode for Startify. Stops resolving links, checking files are readable and filtering bookmark list";
type = bool;
default = false;
description = ''
Whether to turn on unsafe mode for Startify.
While enabld, vim-startify will stops resolving links, checking files
are readable and filtering bookmark list
'';
};
paddingLeft = mkOption {
type = int;
default = 3;
description = "Number of spaces used for left padding.";
type = int;
};
useEnv = mkOption {
type = bool;
default = false;
description = "Show environment variables in path if name is shorter than value";
type = bool;
};
sessionBeforeSave = mkOption {
type = listOf str;
default = [];
description = "Commands to run before saving a session";
type = listOf str;
};
sessionPersistence = mkOption {
type = bool;
default = false;
description = "Persist session before leaving vim or switching session";
type = bool;
};
sessionDeleteBuffers = mkOption {
type = bool;
default = true;
description = "Delete all buffers when loading or closing a session";
type = bool;
};
sessionDir = mkOption {
type = str;
default = "~/.vim/session";
description = "Directory to save and load sessions from";
type = str;
};
skipListServer = mkOption {
type = listOf str;
default = [];
description = "List of vim servers to not load startify for";
type = listOf str;
};
sessionRemoveLines = mkOption {
type = listOf str;
default = [];
description = "Patterns to remove from session files";
type = listOf str;
};
sessionSavevars = mkOption {
type = listOf str;
default = [];
description = "List of variables to save into a session file.";
type = listOf str;
};
sessionSavecmds = mkOption {
type = listOf str;
default = [];
description = "List of commands to run when loading a session.";
type = listOf str;
};
sessionSort = mkOption {
default = false;
description = "Set if you want items sorted by date rather than alphabetically";
type = bool;
default = false;
example = true;
description = ''
While true, sessions will be sorted by date rather than alphabetically.
'';
};
};
}

View file

@ -3,6 +3,7 @@
in {
imports = [
./gitsigns
./hunk-nvim
./vim-fugitive
./git-conflict
./gitlinker-nvim
@ -14,7 +15,9 @@ in {
git integration suite.
Enabling this option will enable the following plugins:
* gitsigns
* hunk-nvim
* vim-fugitive
* git-conflict
* gitlinker-nvim

View file

@ -0,0 +1,27 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim.git.hunk-nvim;
in {
config = mkIf cfg.enable {
vim = {
startPlugins = [
# dependencies
"nui-nvim" # ui library
"nvim-web-devicons" # glyphs
];
lazy.plugins = {
"hunk-nvim" = {
package = "hunk-nvim";
setupModule = "hunk";
inherit (cfg) setupOpts;
};
};
};
};
}

View file

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

View file

@ -0,0 +1,13 @@
{
config,
lib,
...
}: let
inherit (lib.options) mkEnableOption;
inherit (lib.nvim.types) mkPluginSetupOption;
in {
options.vim.git.hunk-nvim = {
enable = mkEnableOption "tool for splitting diffs in Neovim [hunk-nvim]" // {default = config.vim.git.enable;};
setupOpts = mkPluginSetupOption "hunk-nvim" {};
};
}

View file

@ -30,6 +30,7 @@ in {
./ocaml.nix
./php.nix
./python.nix
./qml.nix
./r.nix
./rust.nix
./scala.nix

View file

@ -0,0 +1,98 @@
{
config,
pkgs,
lib,
...
}: let
inherit (builtins) attrNames;
inherit (lib.meta) getExe getExe';
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) enum package;
inherit (lib.nvim.types) mkGrammarOption singleOrListOf;
inherit (lib.nvim.attrsets) mapListToAttrs;
cfg = config.vim.languages.qml;
qmlPackage = pkgs.kdePackages.qtdeclarative;
defaultServers = ["qmlls"];
servers = {
qmlls = {
cmd = [(getExe' qmlPackage "qmlls")];
filetypes = ["qml" "qmljs"];
rootmarkers = [".git"];
};
};
defaultFormat = "qmlformat";
formats = {
qmlformat = {
package = pkgs.writeShellApplication {
name = "qmlformat";
runtimeInputs = [qmlPackage];
text = "qmlformat -";
};
};
};
in {
options.vim.languages.qml = {
enable = mkEnableOption "QML language support";
treesitter = {
enable = mkEnableOption "QML treesitter support" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "qmljs";
};
lsp = {
enable = mkEnableOption "QML LSP support" // {default = config.vim.lsp.enable;};
servers = mkOption {
type = singleOrListOf (enum (attrNames servers));
default = defaultServers;
description = "QML LSP server to use";
};
};
format = {
enable = mkEnableOption "QML formatting" // {default = config.vim.languages.enableFormat;};
type = mkOption {
type = enum (attrNames formats);
default = defaultFormat;
description = "QML formatter to use";
};
package = mkOption {
type = package;
default = formats.${cfg.format.type}.package;
description = "QML formatter package";
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter = {
enable = true;
grammars = [cfg.treesitter.package];
};
})
(mkIf cfg.lsp.enable {
vim.lsp.servers =
mapListToAttrs (n: {
name = n;
value = servers.${n};
})
cfg.lsp.servers;
})
(mkIf (cfg.format.enable && !cfg.lsp.enable) {
vim.formatter.conform-nvim = {
enable = true;
setupOpts.formatters_by_ft.qml = [cfg.format.type];
setupOpts.formatters.${cfg.format.type} = {
command = getExe cfg.format.package;
};
};
})
]);
}

View file

@ -15,13 +15,6 @@
mappings = addDescriptionsToMappings cfg.otter-nvim.mappings mappingDefinitions;
in {
config = mkIf (cfg.enable && cfg.otter-nvim.enable) {
warnings = [
# TODO: remove warning when we update to nvim 0.11
(mkIf config.vim.utility.ccc.enable ''
ccc and otter occasionally have small conflicts that will disappear with nvim 0.11.
In the meantime, otter handles it by throwing a warning, but both plugins will work.
'')
];
vim = {
startPlugins = ["otter-nvim"];

View file

@ -25,7 +25,7 @@ in {
type = listOf package;
default = [];
example = literalExpression ''
pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
with pkgs.vimPlugins.nvim-treesitter.builtGrammars; [
regex
kdl
];
@ -33,6 +33,7 @@ in {
description = ''
List of treesitter grammars to install. For grammars to be installed properly,
you must use grammars from `pkgs.vimPlugins.nvim-treesitter.builtGrammars`.
You can use `pkgs.vimPlugins.nvim-treesitter.allGrammars` to install all grammars.
For languages already supported by nvf, you may use
{option}`vim.language.<lang>.treesitter` options, which will automatically add

View file

@ -0,0 +1,9 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
inherit (lib.nvim.types) mkPluginSetupOption;
in {
options.vim.ui.colorful-menu-nvim = {
enable = mkEnableOption "treesitter highlighted completion menus [colorful-menu.nvim]";
setupOpts = mkPluginSetupOption "colorful-menu-nvim" {};
};
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.ui.colorful-menu-nvim;
in {
config = mkIf cfg.enable {
vim = {
startPlugins = ["colorful-menu-nvim"];
pluginRC.colorful-menu-nvim = entryAnywhere ''
require("colorful-menu").setup(${toLuaObject cfg.setupOpts})
'';
};
};
}

View file

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

View file

@ -1,14 +1,15 @@
{
imports = [
./noice
./modes
./nvim-ufo
./notifications
./smartcolumn
./colorizer
./illuminate
./breadcrumbs
./borders
./breadcrumbs
./colorful-menu-nvim
./colorizer
./fastaction
./illuminate
./modes
./noice
./notifications
./nvim-ufo
./smartcolumn
];
}

View file

@ -15,6 +15,7 @@
./multicursors
./new-file-template
./nix-develop
./nvim-biscuits
./oil-nvim
./outline
./preview
@ -27,5 +28,6 @@
./wakatime
./yanky-nvim
./yazi-nvim
./undotree
];
}

View file

@ -0,0 +1,20 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.utility.nvim-biscuits;
in {
config = mkIf cfg.enable {
vim = {
startPlugins = ["nvim-biscuits"];
pluginRC.nvim-biscuits = entryAnywhere ''
require('nvim-biscuits').setup(${toLuaObject cfg.setupOpts})
'';
};
};
}

View file

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

View file

@ -0,0 +1,10 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
inherit (lib.nvim.types) mkPluginSetupOption;
in {
options.vim.utility.nvim-biscuits = {
enable = mkEnableOption "a Neovim port of Assorted Biscuits [nvim-biscuits]";
setupOpts = mkPluginSetupOption "nvim-biscuits" {};
};
}

View file

@ -0,0 +1,22 @@
{
lib,
config,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim.utility.undotree;
in {
config = mkIf cfg.enable {
vim.lazy.plugins.undotree = {
package = "undotree";
cmd = [
"UndotreeToggle"
"UndotreeShow"
"UndotreeHide"
"UndotreePersistUndo"
"UndotreeFocus"
];
};
};
}

View file

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

View file

@ -0,0 +1,7 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
in {
options.vim.utility.undotree = {
enable = mkEnableOption "undo history visualizer for Vim [undotree]";
};
}

View file

@ -33,32 +33,33 @@ in {
default = [];
example = literalExpression ''
[
# absolute path, as a string - impure
# Absolute path, as a string. This is the impure option.
"$HOME/.config/nvim-extra"
# relative path, as a path - pure
# Relative path inside your configuration. If your config
# is version controlled, then this is pure and reproducible.
./nvim
# source type path - pure and reproducible
(builtins.source {
path = ./runtime;
name = "nvim-runtime";
# Source type path. This pure and reproducible.
# See `:doc builtins.path` inside a Nix repl for more options.
(builtins.path {
path = ./runtime; # this must be a relative path
name = "nvim-runtime"; # name is arbitrary
})
]
'';
description = ''
Additional runtime paths that will be appended to the
active runtimepath of the Neovim. This can be used to
add additional lookup paths for configs, plugins, spell
languages and other things you would generally place in
your {file}`$HOME/.config/nvim`.
Additional runtime paths that will be appended to the active
runtimepath of the Neovim. This can be used to add additional
lookup paths for configs, plugins, spell languages and other
things you would generally place in your {file}`$HOME/.config/nvim`.
This is meant as a declarative alternative to throwing
files into {file}`~/.config/nvim` and having the Neovim
wrapper pick them up. For more details on
`vim.o.runtimepath`, and what paths to use; please see
[the official documentation](https://neovim.io/doc/user/options.html#'runtimepath')
This is meant as a declarative alternative to throwing files into
{file}`~/.config/nvim` and having the Neovim wrapper pick them up.
For more details on `vim.o.runtimepath`, and what paths to use, please see
[the official documentation](https://neovim.io/doc/user/options.html#'runtimepath').
'';
};
@ -67,13 +68,13 @@ in {
default = [];
example = literalExpression ''
[
# absolute path, as a string - impure
# Absolute path, as a string - impure
"$HOME/.config/nvim/my-lua-file.lua"
# relative path, as a path - pure
# Relative path, as a path - pure
./nvim/my-lua-file.lua
# source type path - pure and reproducible
# Source type path - pure and reproducible
(builtins.path {
path = ./nvim/my-lua-file.lua;
name = "my-lua-file";
@ -82,9 +83,10 @@ in {
'';
description = ''
Additional lua files that will be sourced by Neovim.
Takes both absolute and relative paths, all of which
will be called via the `luafile` command in Neovim.
Additional Lua files that will be sourced by Neovim.
Takes both absolute and relative paths, all of which will be called
via the `luafile` command in Neovim.
See [lua-commands](https://neovim.io/doc/user/lua.html#lua-commands)
on the Neovim documentation for more details.

File diff suppressed because it is too large Load diff

7
shell.nix Normal file
View file

@ -0,0 +1,7 @@
# Make the behaviour of `nix-shell` consistent with the one of `nix develop`
# by returning the default devShell output from the flake. This is useful when
# I do not want to work with direnv, or simply need backwards compatibility.
{system ? builtins.currentSystem}: let
nvf = import ./.;
in
nvf.devShells.${system}.default