diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index d85c28da..a43a9445 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -8,23 +8,42 @@ ## Welcome -I'm glad you are thinking about contributing to neovim-flake! 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. +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. -Before you contribute, I encourage you to read this project's CONTRIBUTING policy (you are here), its [LICENSE](LICENSE.md), and its [README](README.md). +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. -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 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. ## Contributing -The contribution process is mostly documented in the [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 unsure about any of the items, please ask. +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 +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 guideliner over at [the documentation](https://notashelf.github.io/neovim-flake#hacking) +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) ### Code of Conduct -This project does not quite have a code of conduct yet. And to be 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 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. -If you feel that you are not being treated with respect, please contact me directly. +If you feel that you are not being treated with respect, please contact me +directly. diff --git a/.github/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md similarity index 83% rename from .github/pull_request_template.md rename to .github/PULL_REQUEST_TEMPLATE/pull_request_template.md index 7768d36e..b2a26919 100644 --- a/.github/pull_request_template.md +++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md @@ -6,7 +6,7 @@ or dependency in this section. If your pull request aims to fix an open issue or a please bug, please also link the relevant issue below this line. You may attach an issue to your pull request with `Fixes #` outside -this comment. +this comment, and it will be closed when your pull request is merged. --> ## Sanity Checking @@ -23,20 +23,20 @@ it above in your description. [editorconfig]: https://editorconfig.org [changelog]: https://github.com/NotAShelf/nvf/tree/main/docs/release-notes -- [ ] I have updated the [changelog] as per my changes. -- [ ] I have tested, and self-reviewed my code. +- [ ] I have updated the [changelog] as per my changes +- [ ] I have tested, and self-reviewed my code - Style and consistency - - [ ] I ran **Alejandra** to format my code (`nix fmt`). - - [ ] My code conforms to the [editorconfig] configuration of the project. - - [ ] My changes are consistent with the rest of the codebase. + - [ ] I ran **Alejandra** to format my code (`nix fmt`) + - [ ] My code conforms to the [editorconfig] configuration of the project + - [ ] My changes are consistent with the rest of the codebase - If new changes are particularly complex: - [ ] My code includes comments in particularly complex areas - - [ ] I have added a section in the manual. - - [ ] _(For breaking changes)_ I have included a migration guide. + - [ ] I have added a section in the manual + - [ ] _(For breaking changes)_ I have included a migration guide - Package(s) built: - [ ] `.#nix` (default package) - [ ] `.#maximal` - - [ ] `.#docs-html` + - [ ] `.#docs-html` (manual, must build) - Tested on platform(s) - [ ] `x86_64-linux` - [ ] `aarch64-linux` diff --git a/.github/README.md b/.github/README.md index 531d062b..029f2fc8 100644 --- a/.github/README.md +++ b/.github/README.md @@ -48,7 +48,7 @@ [Documentation]: #documentation [Help]: #help [Contribute]: #contributing -[FAQ]: #faq +[FAQ]: #frequently-asked-questions [Credits]: #credits **[
 Features
][Features]** @@ -56,7 +56,7 @@ **[
 Documentation 
][Documentation]** **[
 Help 
][Help]** **[
 Contribute 
][Contribute]** -**[
 FAQ 
][Faq]** **[
 Credits 
][Credits]** +**[
 FAQ 
][FAQ]** **[
 Credits 
][Credits]**

@@ -64,12 +64,21 @@ ## Features +[standalone]: https://notashelf.github.io/nvf/index.xhtml#ch-standalone-installation +[NixOS module]: https://notashelf.github.io/nvf/index.xhtml#ch-standalone-nixos +[Home-Manager module]: https://notashelf.github.io/nvf/index.xhtml#ch-standalone-hm + +- **Simple**: One language to rule them all! Use Nix to configure everything, + with additional Lua Support - **Reproducible**: Your configuration will behave the same _anywhere_. No surprises, promise! - **Portable**: nvf depends _solely_ on your Nix store, and nothing else. No more global binaries! Works on all platforms, without hassle. + - Options to install [standalone], [NixOS module] or [Home-Manager module]. - **Customizable**: There are _almost no defaults_ to annoy you. nvf is fully 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. - **Well-documented**: Documentation is priority. You will _never_ face undocumented, obscure behaviour. - **Idiomatic**: nvf does things ✨ _the right way_ ✨ - the codebase is, and @@ -120,7 +129,9 @@ instructions. ## Documentation -The _recommended_ way of installing **nvf** is using either the NixOS or the +### Installation + +The _recommended_ way of installing nvf is using either the NixOS or the Home-Manager module, though it is completely possible and no less supported to install **nvf** as a standalone package, or a flake output. @@ -138,11 +149,13 @@ Please create an issue on the [issue tracker] if you find the documentation lacking or confusing. Any improvements to the documentation through pull requests are also welcome, and appreciated. -## Help +## Getting Help -You can create an issue on the [issue tracker] to ask questions or report bugs. -I am not yet on spaces like matrix or IRC, so please use the issue tracker for -now. +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. ## Contributing @@ -152,7 +165,7 @@ 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. -## FAQ +## Frequently Asked Questions [appropriate issue template]: https://github.com/NotAShelf/nvf/issues/new/choose [list of branches]: https://github.com/NotAShelf/nvf/branches @@ -160,13 +173,15 @@ fix. **Q**: What platforms are supported?
**A**: nvf actively supports Linux and Darwin platforms using standalone -Nix, NixOS or Home-Manager. Please take a look at the +Nix, NixOS or Home-Manager. Please take a look at the [nvf manual] for available +installation instructions. **Q**: Can you add _X_?
**A**: Maybe! It is not one of our goals to support each and every Neovim plugin, however, I am always open to new modules and plugin setup additions to **nvf**. Use the [appropriate issue template] and I will consider a module -addition. As mentioned before, PRs adding new features are also welcome. +addition. As mentioned before, pull requests to add new features are also +welcome. **Q**: A plugin I need is not available in **nvf**. What to do?
**A**: **nvf** exposes several APIs for you to be able to add your own @@ -185,22 +200,26 @@ better prepare to breaking changes. ### Contributors -Special, heart-felt thanks to +[mnw]: https://github.com/gerg-l/mnw -- [@fufexan](https://github.com/fufexan) - For the transition to flake-parts -- [@FlafyDev](https://github.com/FlafyDev) - For getting the home-manager to - work +nvf would not be what it is today without the awesome people below. Special, +heart-felt thanks to + +- [@fufexan](https://github.com/fufexan) - For the transition to flake-parts and + invaluable Nix assistance. +- [@FlafyDev](https://github.com/FlafyDev) - For getting home-manager module to + work and Nix assistance. - [@n3oney](https://github.com/n3oney) - For making custom keybinds finally - possible + possible, and other module additions. - [@horriblename](https://github.com/horriblename) - For actively implementing - planned features and quality of life updates + planned features and quality of life updates. - [@Yavko](https://github.com/Yavko) - For the amazing **nvf** logo - [@FrothyMarrow](https://github.com/FrothyMarrow) - For seeing mistakes that I - could not -- [@Diniamo](https://github.com/Diniamo) - For actively submitting PRs, pull - requests and overall assistence -- [@Gerg-l](https://github.com/gerg-l) - For the modern Neovim wrapper, mnw and - occasional code improvements + could not. +- [@Diniamo](https://github.com/Diniamo) - For actively submitting pull + requests, issues and assistance with maintenance of nvf. +- [@Gerg-l](https://github.com/gerg-l) - For the modern Neovim wrapper, [mnw], + and occasional code improvements. and everyone who has submitted issues or pull requests! @@ -214,7 +233,7 @@ including: is originally based on. - [@sioodmy's](https://github.com/sioodmy) [dotfiles](https://github.com/sioodmy/dotfiles) that inspired the design - choices. + choices for UI and plugin defaults. - [@wiltaylor's](https://github.com/wiltaylor) [neovim-flake](https://github.com/wiltaylor/neovim-flake) for plugin and design ideas. @@ -229,10 +248,11 @@ recommend checking their work out. ## License Following the license of the -[original neovim-flake](https://github.com/jordanisaacs/neovim-flake), **nvf** -has been made available under the [**MIT License**](LICENSE). However, all -assets and documentation are published under the -[**CC BY License**](https://github.com/NotAShelf/nvf/blob/main/.github/assets/LICENSE). +[original neovim-flake](https://github.com/jordanisaacs/neovim-flake), nvf has +been made available under the [**MIT License**](LICENSE). However, all assets +and documentation are published under the +[**CC BY License**](https://github.com/NotAShelf/nvf/blob/main/.github/assets/LICENSE) +under explicit permission by the artist.
Yes, this includes the logo work too. Stop taking artwork that is not yours!
diff --git a/.github/typos.toml b/.github/typos.toml new file mode 100644 index 00000000..df76201c --- /dev/null +++ b/.github/typos.toml @@ -0,0 +1,2 @@ + +default.extend-ignore-words-re = ["(?i)(noice)", "befores", "annote", "viw"] diff --git a/.github/workflows/check-docs.yml b/.github/workflows/check-docs.yml index 18e6a2ef..b543c813 100644 --- a/.github/workflows/check-docs.yml +++ b/.github/workflows/check-docs.yml @@ -19,19 +19,12 @@ jobs: - docs-manpages - docs-json steps: - - uses: easimon/maximize-build-space@v10 - with: - overprovision-lvm: true - remove-android: true - remove-dotnet: true - remove-haskell: true - - name: Install Nix uses: DeterminateSystems/nix-installer-action@main - uses: DeterminateSystems/magic-nix-cache-action@main - - uses: actions/checkout@v4 - name: Checkout + - name: Checkout + uses: actions/checkout@v4 - name: Set default git branch (to reduce log spam) run: git config --global init.defaultBranch main @@ -49,3 +42,16 @@ jobs: with: name: "${{ matrix.package }}" path: result/share/doc/nvf + flake-docs-linkcheck: + name: Validate hyperlinks in documentation sources + runs-on: ubuntu-latest + steps: + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + + - name: Checkout + uses: actions/checkout@v4 + + - name: Build documentation packages + run: nix build .#docs-linkcheck -Lv diff --git a/.github/workflows/editorconfig.yml b/.github/workflows/editorconfig.yml index 68176c7f..d411c89f 100644 --- a/.github/workflows/editorconfig.yml +++ b/.github/workflows/editorconfig.yml @@ -15,7 +15,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | gh api \ - repos/notashelf/neovim-flake/pulls/${{github.event.number}}/files --paginate \ + repos/notashelf/nvf/pulls/${{github.event.number}}/files --paginate \ | jq '.[] | select(.status != "removed") | .filename' \ > "$HOME/changed_files" diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 23381e4e..5b66c8a6 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -47,7 +47,7 @@ jobs: - uses: DeterminateSystems/nix-installer-action@main - uses: DeterminateSystems/magic-nix-cache-action@main - run: | - nix build .#docs + nix build .#docs -Lv cp -r result/share/doc/nvf public - uses: peaceiris/actions-gh-pages@v4 with: diff --git a/.github/workflows/typos.yml b/.github/workflows/typos.yml new file mode 100644 index 00000000..d74ee5b7 --- /dev/null +++ b/.github/workflows/typos.yml @@ -0,0 +1,30 @@ +name: "Check for typos in the source tree" + +permissions: read-all + +on: + pull_request: + workflow_dispatch: + push: + +jobs: + check-typos: + runs-on: ubuntu-latest + if: "!contains(github.event.pull_request.title, '[skip ci]')" + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Check for typos + uses: crate-ci/typos@master + with: + config: .github/typos.toml + + - name: Fail Gracefully + if: ${{ failure() }} + shell: bash + run: | + echo "::error:: Current codebase contains typos that were caught by the CI!" + echo "If those typos were intentional, please add them to the ignored regexes in .github/typos.toml" + echo "[skip ci] label may be used if this is a one-time issue" + exit 1 diff --git a/configuration.nix b/configuration.nix index c3e5722f..aadd1f83 100644 --- a/configuration.nix +++ b/configuration.nix @@ -46,11 +46,15 @@ isMaximal: { nix.enable = true; + # Assembly is not common, and the asm LSP is a major hit-or-miss + assembly.enable = false; + astro.enable = false; markdown.enable = isMaximal; html.enable = isMaximal; css.enable = isMaximal; sql.enable = isMaximal; java.enable = isMaximal; + kotlin.enable = isMaximal; ts.enable = isMaximal; svelte.enable = isMaximal; go.enable = isMaximal; @@ -61,35 +65,34 @@ isMaximal: { python.enable = isMaximal; dart.enable = isMaximal; bash.enable = isMaximal; + gleam.enable = false; r.enable = isMaximal; tailwind.enable = isMaximal; typst.enable = isMaximal; - clang = { - enable = isMaximal; - lsp.server = "clangd"; - }; - + clang.enable = isMaximal; + scala.enable = isMaximal; rust = { enable = isMaximal; crates.enable = isMaximal; }; + csharp.enable = isMaximal; + julia.enable = isMaximal; + vala.enable = isMaximal; + nu.enable = false; }; visuals = { - enable = true; - nvimWebDevicons.enable = true; - scrollBar.enable = isMaximal; - smoothScroll.enable = true; - cellularAutomaton.enable = false; + nvim-scrollbar.enable = isMaximal; + nvim-web-devicons.enable = true; + nvim-cursorline.enable = true; + cinnamon-nvim.enable = true; fidget-nvim.enable = true; + highlight-undo.enable = true; + indent-blankline.enable = true; - indentBlankline.enable = true; - - cursorline = { - enable = true; - lineTimeout = 0; - }; + # Fun + cellular-automaton.enable = false; }; statusline = { @@ -106,15 +109,13 @@ isMaximal: { transparent = false; }; - autopairs.enable = true; + autopairs.nvim-autopairs.enable = true; - autocomplete = { - enable = true; - type = "nvim-cmp"; - }; + autocomplete.nvim-cmp.enable = true; + snippets.luasnip.enable = true; filetree = { - nvimTree = { + neo-tree = { enable = true; }; }; @@ -175,6 +176,7 @@ isMaximal: { notes = { obsidian.enable = false; # FIXME: neovim fails to build if obsidian is enabled + neorg.enable = false; orgmode.enable = false; mind-nvim.enable = isMaximal; todo-comments.enable = true; diff --git a/docs/manual.nix b/docs/manual.nix index f5b23d04..531a6d4e 100644 --- a/docs/manual.nix +++ b/docs/manual.nix @@ -1,63 +1,112 @@ { lib, stdenvNoCC, + fetchzip, + runCommandLocal, # build inputs nixos-render-docs, documentation-highlighter, + dart-sass, path, # nrd configuration release, optionsJSON, -}: -stdenvNoCC.mkDerivation { - name = "nvf-manual"; - src = builtins.path { - path = lib.sourceFilesBySuffices ./manual [".md"]; - name = "nvf-manual"; +} @ args: let + manual-release = args.release or "unstable"; + + scss-reset = fetchzip { + url = "https://github.com/Frontend-Layers/scss-reset/archive/refs/tags/1.4.2.zip"; + hash = "sha256-cif5Sx8Ca5vxdw/mNAgpulLH15TwmzyJFNM7JURpoaE="; }; - nativeBuildInputs = [nixos-render-docs]; + compileStylesheet = runCommandLocal "compile-nvf-stylesheet" {} '' + mkdir -p $out - buildPhase = '' - dest="$out/share/doc/nvf" - mkdir -p "$(dirname "$dest")" - mkdir -p $dest/{highlightjs,media} + tmpfile=$(mktemp -d) + trap "rm -r $tmpfile" EXIT - cp -vt $dest/highlightjs \ - ${documentation-highlighter}/highlight.pack.js \ - ${documentation-highlighter}/LICENSE \ - ${documentation-highlighter}/mono-blue.css \ - ${documentation-highlighter}/loader.js + ln -s "${scss-reset}/build" "$tmpfile/scss-reset" - substituteInPlace ./options.md \ - --subst-var-by \ - OPTIONS_JSON \ - ${optionsJSON}/share/doc/nixos/options.json + ${dart-sass}/bin/sass --load-path "$tmpfile" \ + ${./static/style.scss} "$out/style.css" - substituteInPlace ./manual.md \ - --subst-var-by \ - NVF_VERSION \ - ${release} - - # copy stylesheet - cp ${./static/style.css} "$dest/style.css" - - # copy release notes - cp -vr ${./release-notes} release-notes - - # generate manual from - nixos-render-docs manual html \ - --manpage-urls ${path + "/doc/manpage-urls.json"} \ - --revision ${lib.trivial.revisionWithDefault release} \ - --stylesheet style.css \ - --script highlightjs/highlight.pack.js \ - --script highlightjs/loader.js \ - --toc-depth 2 \ - --section-toc-depth 1 \ - manual.md \ - "$dest/index.xhtml" - - mkdir -p $out/nix-support/ - echo "doc manual $dest index.html" >> $out/nix-support/hydra-build-products + echo "Generated styles" ''; -} +in + stdenvNoCC.mkDerivation { + name = "nvf-manual"; + src = builtins.path { + name = "nvf-manual-${manual-release}"; + path = lib.sourceFilesBySuffices ./manual [".md" ".md.in"]; + }; + + strictDependencies = true; + nativeBuildInputs = [nixos-render-docs]; + + postPatch = '' + ln -s ${optionsJSON}/share/doc/nixos/options.json ./config-options.json + ''; + + buildPhase = '' + dest="$out/share/doc/nvf" + mkdir -p "$(dirname "$dest")" + mkdir -p $dest/{highlightjs,script} + + # Copy highlight scripts to /highlights in document root. + cp -vt $dest/highlightjs \ + ${documentation-highlighter}/highlight.pack.js \ + ${documentation-highlighter}/LICENSE \ + ${documentation-highlighter}/mono-blue.css \ + ${documentation-highlighter}/loader.js + + # Copy anchor scripts to the script directory in document root. + cp -vt "$dest"/script \ + ${./static/script}/anchor-min.js \ + ${./static/script}/anchor-use.js + + substituteInPlace ./options.md \ + --subst-var-by OPTIONS_JSON ./config-options.json + + substituteInPlace ./manual.md \ + --subst-var-by NVF_VERSION ${manual-release} + + substituteInPlace ./hacking/additional-plugins.md \ + --subst-var-by NVF_REPO "https://github.com/notashelf/nvf/blob/${manual-release}" + + # Move compiled stylesheet + cp -vt $dest \ + ${compileStylesheet}/style.css + + # Move release notes + cp -vr ${./release-notes} release-notes + + # Generate final manual from a set of parameters. Explanation of the CLI flags are + # as follows: + # + # 1. --manpage-urls will allow you to use manual pages as they are defined in + # the nixpkgs documentation. + # 2. --revision is the project revision as it is defined in 'release.json' in the + # repository root + # 3. --script will inject a given Javascript file into the resulting pages inside + # the