mirror of
				https://github.com/NotAShelf/nvf.git
				synced 2025-10-31 02:52:37 +00:00 
			
		
		
		
	Compare commits
	
		
			83 commits
		
	
	
		
			
				2c43ee3aad
			
			...
			
				e1ad7f4fb9
			
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e1ad7f4fb9 | |||
|   | 21f4644e31 | ||
| 0383311826 | |||
|   | dbfeba975c | ||
|   | 079f94c73d | ||
| b6490efbe0 | |||
| 6980c35a44 | |||
| c5dc719249 | |||
| 5619a99e12 | |||
| ![dependabot[bot]](/assets/img/avatar_default.png)  | 940e3f1ca5 | ||
| 1681ad7034 | |||
| d61de135ce | |||
|   | 626ad99297 | ||
| 22fb0d22cc | |||
| b4dac8d635 | |||
| fa52e006eb | |||
| 085df81edf | |||
| 16d396f039 | |||
|   | 4f9b2f4fba | ||
|   | 17968d1ced | ||
| e35a74c44a | |||
| 4a4a376328 | |||
| 48a54502f8 | |||
| 6585b2d63c | |||
| 132e50c1e4 | |||
| 8092a6f188 | |||
| be5cc82c5f | |||
| 3ae510fefa | |||
| 7f6b045b7d | |||
| cabb0cff75 | |||
| e20e8dbdbb | |||
|   | eaad512c1a | ||
| 00d04a4c06 | |||
| a125a61d6b | |||
|   | afe7559c8e | ||
|   | 0b325d788e | ||
|   | b2a462feb7 | ||
|   | 66e32eeafa | ||
|   | 55fc5fecb8 | ||
|   | 29d6f51cbc | ||
| 8fbecab446 | |||
| 9ad4756114 | |||
| 02573ac3e4 | |||
| 23d75fc12d | |||
| 81d99b0ddf | |||
| 0115325759 | |||
| d5d4cdeb2f | |||
| 83fd70a937 | |||
|   | 4437cc740a | ||
|   | 338577d9c9 | ||
| 8ae0aebb8b | |||
|   | cec4a94197 | ||
|   | 0a1dda51d0 | ||
| 40a5b70c30 | |||
| 8dd53be910 | |||
| da1fed218b | |||
|   | 7f6fe46833 | ||
| 5f2530a239 | |||
| e313c56690 | |||
| 6ffe9302a6 | |||
| fc0fceaa61 | |||
|   | 9c0c62bbc6 | ||
| f227721366 | |||
| a5a202584f | |||
| 65da8b24b8 | |||
| 33a69fae5f | |||
| 0218bbd6f0 | |||
|   | a1dcd935b5 | ||
| c1fea30214 | |||
|   | 4847c099eb | ||
|   | 60dd59ecae | ||
|   | 1bb9454933 | ||
|   | 861d6f3ed7 | ||
|   | b719103337 | ||
|   | 81d566ac39 | ||
|   | b7b442737a | ||
| 0c9b4d0d80 | |||
| ec37a8be0e | |||
| 7c1f5db3a5 | |||
| 79d5661547 | |||
| b89ed91405 | |||
|   | 514ed8bdd4 | ||
| 8a148ad71e | 
					 51 changed files with 1441 additions and 727 deletions
				
			
		
							
								
								
									
										80
									
								
								.github/CONTRIBUTING.md
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								.github/CONTRIBUTING.md
									
										
									
									
										vendored
									
									
								
							|  | @ -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. | ||||
|  |  | |||
							
								
								
									
										11
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								.github/ISSUE_TEMPLATE/bug_report.yaml
									
										
									
									
										vendored
									
									
								
							|  | @ -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. | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										76
									
								
								.github/ISSUE_TEMPLATE/feature_request.yaml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										76
									
								
								.github/ISSUE_TEMPLATE/feature_request.yaml
									
										
									
									
										vendored
									
									
								
							|  | @ -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: "..." | ||||
|  |  | |||
							
								
								
									
										2
									
								
								.github/workflows/backport.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/backport.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 }} | ||||
|  |  | |||
							
								
								
									
										2
									
								
								.github/workflows/cachix.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/cachix.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -21,7 +21,7 @@ jobs: | |||
|           - nix | ||||
|           - maximal | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/checkout@v5 | ||||
|         name: Checkout | ||||
| 
 | ||||
|       - name: Install Nix | ||||
|  |  | |||
							
								
								
									
										26
									
								
								.github/workflows/check.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/check.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										2
									
								
								.github/workflows/cleanup.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/cleanup.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										6
									
								
								.github/workflows/docs-preview.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.github/workflows/docs-preview.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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: | | ||||
|  |  | |||
							
								
								
									
										4
									
								
								.github/workflows/manual.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/manual.yml
									
										
									
									
										vendored
									
									
								
							|  | @ -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 | ||||
|  |  | |||
|  | @ -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. | ||||
|  | @ -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
									
								
							
							
						
						
									
										15
									
								
								default.nix
									
										
									
									
									
										Normal 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 | ||||
|  | @ -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; | ||||
| } | ||||
| ``` | ||||
|  |  | |||
|  | @ -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 = { | ||||
|  |  | |||
|  | @ -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. | ||||
|  |  | |||
|  | @ -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 | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										33
									
								
								docs/manual/installation/modules/flakes.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								docs/manual/installation/modules/flakes.md
									
										
									
									
									
										Normal 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> | ||||
|      ``` | ||||
|  | @ -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. | ||||
| 
 | ||||
| ::: | ||||
|  |  | |||
|  | @ -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. | ||||
| 
 | ||||
| ::: | ||||
|  |  | |||
|  | @ -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 | |||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| }``` | ||||
| } | ||||
| ``` | ||||
|  |  | |||
|  | @ -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. | ||||
| 
 | ||||
| ::: | ||||
|  |  | |||
|  | @ -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
									
									
									
								
							
							
						
						
									
										50
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -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" | ||||
|  |  | |||
							
								
								
									
										50
									
								
								flake.nix
									
										
									
									
									
								
							
							
						
						
									
										50
									
								
								flake.nix
									
										
									
									
									
								
							|  | @ -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"; | ||||
|   }; | ||||
|  |  | |||
|  | @ -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; | ||||
|       }; | ||||
|   }; | ||||
| } | ||||
|  |  | |||
|  | @ -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 = [ | ||||
|  | @ -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") | ||||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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. | ||||
| 
 | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
							
								
								
									
										27
									
								
								modules/plugins/git/hunk-nvim/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								modules/plugins/git/hunk-nvim/config.nix
									
										
									
									
									
										Normal 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; | ||||
|         }; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										6
									
								
								modules/plugins/git/hunk-nvim/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/plugins/git/hunk-nvim/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| { | ||||
|   imports = [ | ||||
|     ./hunk-nvim.nix | ||||
|     ./config.nix | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										13
									
								
								modules/plugins/git/hunk-nvim/hunk-nvim.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								modules/plugins/git/hunk-nvim/hunk-nvim.nix
									
										
									
									
									
										Normal 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" {}; | ||||
|   }; | ||||
| } | ||||
|  | @ -30,6 +30,7 @@ in { | |||
|     ./ocaml.nix | ||||
|     ./php.nix | ||||
|     ./python.nix | ||||
|     ./qml.nix | ||||
|     ./r.nix | ||||
|     ./rust.nix | ||||
|     ./scala.nix | ||||
|  |  | |||
							
								
								
									
										98
									
								
								modules/plugins/languages/qml.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								modules/plugins/languages/qml.nix
									
										
									
									
									
										Normal 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; | ||||
|         }; | ||||
|       }; | ||||
|     }) | ||||
|   ]); | ||||
| } | ||||
|  | @ -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"]; | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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" {}; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										20
									
								
								modules/plugins/ui/colorful-menu-nvim/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/plugins/ui/colorful-menu-nvim/config.nix
									
										
									
									
									
										Normal 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}) | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										6
									
								
								modules/plugins/ui/colorful-menu-nvim/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/plugins/ui/colorful-menu-nvim/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| { | ||||
|   imports = [ | ||||
|     ./config.nix | ||||
|     ./colorful-menu-nvim.nix | ||||
|   ]; | ||||
| } | ||||
|  | @ -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 | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
|  | @ -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 | ||||
|   ]; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										20
									
								
								modules/plugins/utility/nvim-biscuits/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/plugins/utility/nvim-biscuits/config.nix
									
										
									
									
									
										Normal 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}) | ||||
|       ''; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										6
									
								
								modules/plugins/utility/nvim-biscuits/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/plugins/utility/nvim-biscuits/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| { | ||||
|   imports = [ | ||||
|     ./config.nix | ||||
|     ./nvim-biscuits.nix | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										10
									
								
								modules/plugins/utility/nvim-biscuits/nvim-biscuits.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								modules/plugins/utility/nvim-biscuits/nvim-biscuits.nix
									
										
									
									
									
										Normal 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" {}; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										22
									
								
								modules/plugins/utility/undotree/config.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/plugins/utility/undotree/config.nix
									
										
									
									
									
										Normal 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" | ||||
|       ]; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
							
								
								
									
										6
									
								
								modules/plugins/utility/undotree/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								modules/plugins/utility/undotree/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| { | ||||
|   imports = [ | ||||
|     ./undotree.nix | ||||
|     ./config.nix | ||||
|   ]; | ||||
| } | ||||
							
								
								
									
										7
									
								
								modules/plugins/utility/undotree/undotree.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								modules/plugins/utility/undotree/undotree.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| {lib, ...}: let | ||||
|   inherit (lib.options) mkEnableOption; | ||||
| in { | ||||
|   options.vim.utility.undotree = { | ||||
|     enable = mkEnableOption "undo history visualizer for Vim [undotree]"; | ||||
|   }; | ||||
| } | ||||
|  | @ -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
									
								
							
							
						
						
									
										7
									
								
								shell.nix
									
										
									
									
									
										Normal 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 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue