mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-12-09 21:53:54 +00:00
Compare commits
74 commits
7f0ab59a01
...
dad9511e8e
| Author | SHA1 | Date | |
|---|---|---|---|
| dad9511e8e | |||
| 0045159706 | |||
| 09f29ba544 | |||
| 67e2d87778 | |||
|
|
b305b92dba |
||
| e0b58a57c6 | |||
| 348a15a1b2 | |||
| 146f0b4ff2 | |||
|
|
cb920c5940 |
||
|
|
4abd1fec5b |
||
|
|
7e0ec5bce7 |
||
|
10bb103dfa |
|||
|
|
e7955adbba | ||
|
|
90be13528a | ||
|
09470524a2 |
|||
|
|
67dab85c98 |
||
|
aab08f3056 |
|||
|
227a55cdf1 |
|||
|
da5c91424e |
|||
|
|
9e9be6d0f2 |
||
|
3d3cd87978 |
|||
|
|
7919c72128 |
||
|
20d8fca94d |
|||
|
40a69d81c1 |
|||
|
04c8715279 |
|||
|
3e0f704000 |
|||
|
e6b2d28159 |
|||
|
|
00498aa46f |
||
|
|
96ba7b6486 |
||
|
4b904de361 |
|||
|
|
a8f7c6d00c |
||
|
dad8ece966 |
|||
|
|
269e22d0e2 |
||
|
9b3e7bcf68 |
|||
|
15c26bfc1c |
|||
|
a2934aa4d5 |
|||
|
|
8327c66c86 | ||
|
ea3ee477fa |
|||
|
99b003f67f |
|||
|
cbf496cf65 |
|||
|
|
0982a84b09 |
||
|
|
3e48f13c3c |
||
|
|
3ace0780dd |
||
|
9df9d51fd9 |
|||
|
|
2cbf07e129 |
||
|
314962bcb4 |
|||
|
|
2c9a8e2857 | ||
|
dde524f7cc |
|||
|
88dd4cd48d |
|||
|
171410f6c5 |
|||
|
e48638aef3 |
|||
|
6d6dd9bb8e |
|||
|
b4a759677a |
|||
|
131eb55afc |
|||
|
|
737b80e2ca |
||
|
8e73e98f56 |
|||
|
|
b8e05a5a33 |
||
|
5ff51032a4 |
|||
|
|
572ea52a25 |
||
|
|
8e9186e4b8 |
||
|
|
06bc21e75c |
||
|
|
8593e0929b |
||
|
|
ae1922f6da |
||
|
|
8ff302fadd |
||
|
|
ef508ea10d |
||
|
|
c13edf9961 |
||
|
|
11fd1b7083 |
||
|
|
e1fd607e3f |
||
|
|
d26b9dc896 |
||
|
|
74d6fe86e6 |
||
|
|
b7571df4d6 |
||
|
1bd9fc1164 |
|||
|
|
96e1004e55 |
||
|
|
930e71d0ce |
53 changed files with 827 additions and 547 deletions
6
.github/dependabot.yml
vendored
6
.github/dependabot.yml
vendored
|
|
@ -1,11 +1,7 @@
|
|||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
open-pull-requests-limit: 15
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: daily
|
||||
open-pull-requests-limit: 15
|
||||
reviewers:
|
||||
- NotAShelf
|
||||
assignees:
|
||||
- NotAShelf
|
||||
|
|
|
|||
2
.github/typos.toml
vendored
2
.github/typos.toml
vendored
|
|
@ -5,8 +5,10 @@ default.extend-ignore-words-re = [
|
|||
"befores",
|
||||
"annote",
|
||||
"viw",
|
||||
"typ",
|
||||
"edn",
|
||||
"esy",
|
||||
"BA", # somehow "BANanaD3V" is valid, but BA is not...
|
||||
"Emac"
|
||||
]
|
||||
|
||||
|
|
|
|||
2
.github/workflows/check.yml
vendored
2
.github/workflows/check.yml
vendored
|
|
@ -101,7 +101,7 @@ jobs:
|
|||
run: echo "date=$(date +'%Y-%m-%d-%H%M%S')" >> ${GITHUB_OUTPUT}
|
||||
|
||||
- name: Upload doc artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v5
|
||||
with:
|
||||
name: "${{ matrix.package }}"
|
||||
path: result/share/doc/nvf
|
||||
|
|
|
|||
6
.github/workflows/docs-preview.yml
vendored
6
.github/workflows/docs-preview.yml
vendored
|
|
@ -90,7 +90,7 @@ jobs:
|
|||
echo "Preview can be found at ${URL}" >> "$GITHUB_STEP_SUMMARY"
|
||||
|
||||
- name: Find Comment
|
||||
uses: peter-evans/find-comment@v3
|
||||
uses: peter-evans/find-comment@v4
|
||||
id: fc
|
||||
with:
|
||||
comment-author: "github-actions[bot]"
|
||||
|
|
@ -98,7 +98,7 @@ jobs:
|
|||
body-includes: "Live preview deployed"
|
||||
|
||||
- name: Post live preview comment
|
||||
uses: peter-evans/create-or-update-comment@v4
|
||||
uses: peter-evans/create-or-update-comment@v5
|
||||
env:
|
||||
COMMENT_ID: ${{ steps.fc.outputs.comment-id }}
|
||||
URL: ${{ steps.prelude.outputs.URL }}
|
||||
|
|
@ -177,7 +177,7 @@ jobs:
|
|||
fi
|
||||
|
||||
- name: Post cleanup verification
|
||||
uses: peter-evans/create-or-update-comment@v4
|
||||
uses: peter-evans/create-or-update-comment@v5
|
||||
with:
|
||||
issue-number: ${{ github.event.pull_request.number }}
|
||||
body: |
|
||||
|
|
|
|||
91
.github/workflows/update.yml
vendored
Normal file
91
.github/workflows/update.yml
vendored
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
name: Weekly Dependency Updates
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
# 8 PM UTC every Friday
|
||||
- cron: '0 20 * * 5'
|
||||
jobs:
|
||||
update-dependencies:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: "Install Nix"
|
||||
uses: cachix/install-nix-action@v31.8.2
|
||||
|
||||
- name: Set up Git
|
||||
run: |
|
||||
git config user.name "GitHub Actions Bot"
|
||||
git config user.email "actions@github.com"
|
||||
|
||||
- name: Create branch for updates
|
||||
run: |
|
||||
DATE=$(date +%Y-%m-%d)
|
||||
BRANCH_NAME="update/dependencies-$DATE"
|
||||
git checkout -b $BRANCH_NAME
|
||||
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV
|
||||
|
||||
- name: Update npins
|
||||
run: nix run nixpkgs#npins update
|
||||
|
||||
# Only update Nixpkgs. mnw might break on update, better to track it manually to avoid
|
||||
# unexpected breakage.
|
||||
- name: Update nixpkgs
|
||||
run: nix flake update nixpkgs
|
||||
|
||||
- name: Check for changes
|
||||
id: check_changes
|
||||
run: |
|
||||
if git diff --quiet; then
|
||||
echo "No changes detected"
|
||||
echo "changes_detected=false" >> "$GITHUB_OUTPUT"
|
||||
exit 0
|
||||
else
|
||||
echo "Changes detected"
|
||||
echo "changes_detected=true" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
|
||||
# FIXME: Worth adding additional checks for, e.g., fragile plugins
|
||||
# or modules
|
||||
# nix build .#checks.<system>.<check-name>
|
||||
# We'll probably want to handle this with machine tests
|
||||
- name: Verify changes
|
||||
if: steps.check_changes.outputs.changes_detected == 'true'
|
||||
run: |
|
||||
# Run verification tests to ensure updates don't break anything
|
||||
nix flake check
|
||||
|
||||
|
||||
- name: Set date variable
|
||||
run: echo "DATE=$(date +%Y-%m-%d)" >> "$GITHUB_ENV"
|
||||
|
||||
- name: Commit and push changes
|
||||
if: steps.check_changes.outputs.changes_detected == 'true'
|
||||
run: |
|
||||
git add .
|
||||
git commit -m "pins: bump all plugins (${{ env.DATE }})"
|
||||
git push -u origin $BRANCH_NAME
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.check_changes.outputs.changes_detected == 'true'
|
||||
uses: peter-evans/create-pull-request@v7
|
||||
with:
|
||||
branch: ${{ env.BRANCH_NAME }}
|
||||
base: main
|
||||
labels: dependencies,automated pr
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
commit-message: "npins: bump all plugins (${{ env.DATE }})"
|
||||
title: "Weekly Dependency Updates: ${{ env.DATE }}"
|
||||
body: |
|
||||
> [!NOTE]
|
||||
> This PR was automatically generated by the Weekly Dependency Updates workflow. Please wait
|
||||
> for all CI steps to complete, and test any major changes personally.
|
||||
|
||||
Updates Performed:
|
||||
|
||||
- Updated dependencies using `npins update`
|
||||
- Updated nixpkgs using `nix flake update nixpkgs`
|
||||
|
||||
If the verification steps have passed, updates should be safe to merge. For failing CI steps
|
||||
submit a Pull Request targetting ${{ env.BRANCH_NAME }}
|
||||
14
docs/manual/release-notes/release-notes.md
Normal file
14
docs/manual/release-notes/release-notes.md
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
# Release Notes {#ch-release-notes}
|
||||
|
||||
This section lists the release notes for tagged version of **nvf** and the
|
||||
current main current main branch
|
||||
|
||||
```{=include=} chapters
|
||||
rl-0.1.md
|
||||
rl-0.2.md
|
||||
rl-0.3.md
|
||||
rl-0.4.md
|
||||
rl-0.5.md
|
||||
rl-0.6.md
|
||||
rl-0.7.md
|
||||
```
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
# Release 0.6 {#sec-release-0-6}
|
||||
|
||||
Release notes for release 0-6
|
||||
Release notes for release 0.6
|
||||
|
||||
## Breaking Changes and Migration Guide {#sec-breaking-changes-and-migration-guide}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,10 @@
|
|||
align with the "hunks" themed mapping and avoid conflict with the new [neogit]
|
||||
group.
|
||||
|
||||
- LSP keybinds and related plugin integrations are now attached in an LspAttach
|
||||
autocmd event. If you were calling `default_on_attach()` in your LSP setup you
|
||||
can remove them now.
|
||||
|
||||
## Changelog {#sec-release-0-8-changelog}
|
||||
|
||||
[NotAShelf](https://github.com/notashelf):
|
||||
|
|
@ -40,6 +44,7 @@
|
|||
[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`.
|
||||
|
|
@ -112,6 +117,9 @@
|
|||
- Add [hunk.nvim], Neovim plugin & tool for splitting diffs in Neovim. Available
|
||||
as `vim.git.hunk-nvim`
|
||||
|
||||
- Move `crates.nvim` into `languages.rust.extensions and support` `setupOpts`
|
||||
for the plugin. Deprecates the top level "crates" option in `languages.rust`.
|
||||
|
||||
[sjcobb2022](https://github.com/sjcobb2022):
|
||||
|
||||
- Migrate all current lsp configurations to `vim.lsp.server` and remove internal
|
||||
|
|
@ -136,6 +144,8 @@
|
|||
- Moved code setting `additionalRuntimePaths` and `enableLuaLoader` out of
|
||||
`luaConfigPre`'s default to prevent being overridden
|
||||
- Use conform over custom autocmds for LSP format on save
|
||||
- Move LSP keybinds and other related plugin integrations into an LspAttach
|
||||
event.
|
||||
|
||||
[diniamo](https://github.com/diniamo):
|
||||
|
||||
|
|
@ -290,10 +300,13 @@
|
|||
- Fix [blink.cmp] breaking when built-in sources were modified.
|
||||
- Fix [conform.nvim] not allowing disabling formatting on and after save. Use
|
||||
`null` value to disable them if conform is enabled.
|
||||
- Add [markdown-oxide](https://github.com/Feel-ix-343/markdown-oxide) option to
|
||||
markdown language module.
|
||||
- Fix Helm-YAML language module integration. YAML diagnostics will now remain in
|
||||
`helmfile`s when both are enabled.
|
||||
- Fix YAML language module not activating LSP keybinds if the Helm language
|
||||
module was also enabled.
|
||||
- Fix `json` language module (default) language server not activating.
|
||||
|
||||
[TheColorman](https://github.com/TheColorman):
|
||||
|
||||
|
|
@ -493,6 +506,7 @@
|
|||
|
||||
- fix broken `neorg` grammars
|
||||
- remove obsolete warning in the `otter` module
|
||||
- add mainProgram attribute to vala language server wrapper
|
||||
|
||||
[JManch](https://github.com/JManch):
|
||||
|
||||
|
|
@ -557,8 +571,23 @@
|
|||
- Add [nvim-highlight-colors] plugin in `vim.ui.nvim-highlight-colors` with
|
||||
`enable` and `setupOpts`
|
||||
|
||||
[simon-wg](https://github.com/simon-wg):
|
||||
- Fix [blink.cmp] keymap preset types to allow alternate cmdline, terminal, etc
|
||||
modes to `inherit` the default mode keymaps. This is an option as per the
|
||||
[blink.cmp] docs and is now supported in nvf.
|
||||
|
||||
[PartyWumpus](https://github.com/PartyWumpus):
|
||||
|
||||
[typst-concealer]: https://github.com/PartyWumpus/typst-concealer
|
||||
|
||||
- Add inline typst concealing support under `vim.languages.typst` using
|
||||
[typst-concealer]. [simon-wg](https://github.com/simon-wg):
|
||||
|
||||
- Update `python` language module to use correct lsp binary.
|
||||
- Fix `python` pyright and basedpyright language servers not using default on
|
||||
attach behavior.
|
||||
|
||||
[critical](https://github.com/critical):
|
||||
|
||||
[mellow.nvim]: https://github.com/mellow-theme/mellow.nvim
|
||||
|
||||
- Add [mellow.nvim] plugin for vim and lualine theme support
|
||||
|
|
|
|||
65
flake.lock
generated
65
flake.lock
generated
|
|
@ -16,6 +16,21 @@
|
|||
"url": "https://git.lix.systems/lix-project/flake-compat.git"
|
||||
}
|
||||
},
|
||||
"flake-compat_2": {
|
||||
"locked": {
|
||||
"lastModified": 1747046372,
|
||||
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
|
|
@ -23,11 +38,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1759362264,
|
||||
"narHash": "sha256-wfG0S7pltlYyZTM+qqlhJ7GMw2fTF4mLKCIVhLii/4M=",
|
||||
"lastModified": 1760948891,
|
||||
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "758cf7296bee11f1706a574c77d072b8a7baa881",
|
||||
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -51,13 +66,48 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"ndg": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_2",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760777965,
|
||||
"narHash": "sha256-PHmDh1GxoBixpgtRCrBCvXJee/tCb6T57MLbwKfIURg=",
|
||||
"owner": "feel-co",
|
||||
"repo": "ndg",
|
||||
"rev": "30b955582f0cd869a86007f491252bbffde48f8b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "feel-co",
|
||||
"repo": "ndg",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1760596604,
|
||||
"narHash": "sha256-J/i5K6AAz/y5dBePHQOuzC7MbhyTOKsd/GLezSbEFiM=",
|
||||
"lastModified": 1761880412,
|
||||
"narHash": "sha256-QoJjGd4NstnyOG4mm4KXF+weBzA2AH/7gn1Pmpfcb0A=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8913c168d1c56dc49a7718685968f38752171c3b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1756696532,
|
||||
"narHash": "sha256-6FWagzm0b7I/IGigOv9pr6LL7NQ86mextfE8g8Q6HBg=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3cbe716e2346710d6e1f7c559363d14e11c32a43",
|
||||
"rev": "a7fc11be66bdfb5cdde611ee5ce381c183da8386",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -72,7 +122,8 @@
|
|||
"flake-compat": "flake-compat",
|
||||
"flake-parts": "flake-parts",
|
||||
"mnw": "mnw",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"ndg": "ndg",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"systems": "systems"
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
pkgs,
|
||||
config,
|
||||
self',
|
||||
inputs',
|
||||
...
|
||||
}: {
|
||||
devShells = {
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
# - the addition of the function `entryBefore` indicating a "wanted
|
||||
# by" relationship.
|
||||
{lib}: let
|
||||
inherit (builtins) isAttrs attrValues attrNames elem all head tail length toJSON isString;
|
||||
inherit (builtins) isAttrs attrValues attrNames elem all head tail length toJSON isString removeAttrs;
|
||||
inherit (lib.attrsets) filterAttrs mapAttrs;
|
||||
inherit (lib.lists) toposort;
|
||||
inherit (lib.nvim.dag) empty isEntry entryBetween entryAfter entriesBetween entryAnywhere topoSort;
|
||||
|
|
@ -169,10 +169,11 @@ in {
|
|||
else value)
|
||||
dag;
|
||||
sortedDag = topoSort finalDag;
|
||||
loopDetail = map (loops: removeAttrs loops ["data"]) sortedDag.loops;
|
||||
result =
|
||||
if sortedDag ? result
|
||||
then mapResult sortedDag.result
|
||||
else abort ("Dependency cycle in ${name}: " + toJSON sortedDag);
|
||||
else abort ("Dependency cycle in ${name}: " + toJSON loopDetail);
|
||||
in
|
||||
result;
|
||||
}
|
||||
|
|
|
|||
134
lib/lua.nix
134
lib/lua.nix
|
|
@ -1,92 +1,52 @@
|
|||
# Helpers for converting values to lua
|
||||
{lib}: let
|
||||
inherit (builtins) hasAttr head throw typeOf isList isAttrs isBool isInt isString isPath isFloat toJSON;
|
||||
inherit (lib.attrsets) mapAttrsToList filterAttrs;
|
||||
inherit (lib.strings) concatStringsSep concatMapStringsSep stringToCharacters;
|
||||
inherit (lib.trivial) boolToString warn;
|
||||
in rec {
|
||||
# Convert a null value to lua's nil
|
||||
nullString = value:
|
||||
if value == null
|
||||
then "nil"
|
||||
else "'${value}'";
|
||||
|
||||
# convert an expression to lua
|
||||
expToLua = exp:
|
||||
if isList exp
|
||||
then listToLuaTable exp # if list, convert to lua table
|
||||
else if isAttrs exp
|
||||
then attrsetToLuaTable exp # if attrs, convert to table
|
||||
else if isBool exp
|
||||
then boolToString exp # if bool, convert to string
|
||||
else if isInt exp
|
||||
then toString exp # if int, convert to string
|
||||
else if exp == null
|
||||
then "nil"
|
||||
else (toJSON exp); # otherwise jsonify the value and print as is
|
||||
|
||||
# convert list to a lua table
|
||||
listToLuaTable = list:
|
||||
"{ " + (concatStringsSep ", " (map expToLua list)) + " }";
|
||||
|
||||
# convert attrset to a lua table
|
||||
attrsetToLuaTable = attrset:
|
||||
"{ "
|
||||
+ (
|
||||
concatStringsSep ", "
|
||||
(
|
||||
mapAttrsToList (
|
||||
name: value:
|
||||
name
|
||||
+ " = "
|
||||
+ (expToLua value)
|
||||
)
|
||||
attrset
|
||||
)
|
||||
)
|
||||
+ " }";
|
||||
# Convert a list of lua expressions to a lua table. The difference to listToLuaTable is that the elements here are expected to be lua expressions already, whereas listToLuaTable converts from nix types to lua first
|
||||
luaTable = items: ''{${concatStringsSep "," items}}'';
|
||||
|
||||
isLuaInline = object: (object._type or null) == "lua-inline";
|
||||
|
||||
toLuaObject = args:
|
||||
if isAttrs args
|
||||
then
|
||||
if isLuaInline args
|
||||
then args.expr
|
||||
else if hasAttr "__empty" args
|
||||
then
|
||||
warn ''
|
||||
Using `__empty` to define an empty lua table is deprecated. Use an empty attrset instead.
|
||||
'' "{ }"
|
||||
else
|
||||
"{"
|
||||
+ (concatStringsSep ","
|
||||
(mapAttrsToList
|
||||
(n: v:
|
||||
if head (stringToCharacters n) == "@"
|
||||
then toLuaObject v
|
||||
else "[${toLuaObject n}] = " + (toLuaObject v))
|
||||
(filterAttrs
|
||||
(_: v: v != null)
|
||||
args)))
|
||||
+ "}"
|
||||
else if isList args
|
||||
then "{" + concatMapStringsSep "," toLuaObject args + "}"
|
||||
else if isString args
|
||||
then
|
||||
# This should be enough!
|
||||
toJSON args
|
||||
else if isPath args
|
||||
then toJSON (toString args)
|
||||
else if isBool args
|
||||
then "${boolToString args}"
|
||||
else if isFloat args
|
||||
then "${toString args}"
|
||||
else if isInt args
|
||||
then "${toString args}"
|
||||
else if (args == null)
|
||||
then "nil"
|
||||
else throw "could not convert object of type `${typeOf args}` to lua object";
|
||||
}
|
||||
{
|
||||
int = toString args;
|
||||
float = toString args;
|
||||
|
||||
# escapes \ and quotes
|
||||
string = builtins.toJSON args;
|
||||
path = builtins.toJSON args;
|
||||
|
||||
bool = lib.boolToString args;
|
||||
null = "nil";
|
||||
|
||||
list = "{${lib.concatMapStringsSep ",\n" toLuaObject args}}";
|
||||
|
||||
set =
|
||||
if lib.isDerivation args
|
||||
then ''"${args}"''
|
||||
else if isLuaInline args
|
||||
then args.expr
|
||||
else "{${
|
||||
lib.pipe args [
|
||||
(lib.filterAttrs (_: v: v != null))
|
||||
(builtins.mapAttrs (
|
||||
n: v:
|
||||
if lib.hasPrefix "@" n
|
||||
then toLuaObject v
|
||||
else "[${toLuaObject n}] = ${toLuaObject v}"
|
||||
))
|
||||
builtins.attrValues
|
||||
(lib.concatStringsSep ",\n")
|
||||
]
|
||||
}}";
|
||||
}
|
||||
.${
|
||||
builtins.typeOf args
|
||||
}
|
||||
or (builtins.throw "Could not convert object of type `${builtins.typeOf args}` to lua object");
|
||||
in
|
||||
{
|
||||
inherit isLuaInline toLuaObject;
|
||||
luaTable = x: (toLuaObject (map lib.mkLuaInline x));
|
||||
}
|
||||
// lib.genAttrs [
|
||||
"nullString"
|
||||
"expToLua"
|
||||
"listToLuaTable"
|
||||
"attrsetToLuaTable"
|
||||
] (name: lib.warn "${name} is deprecated use toLuaObject instead" toLuaObject)
|
||||
|
|
|
|||
|
|
@ -4,13 +4,11 @@
|
|||
inherit (lib.strings) isString stringLength match;
|
||||
inherit (lib.types) listOf mkOptionType coercedTo;
|
||||
in {
|
||||
mergelessListOf = elemType: let
|
||||
super = listOf elemType;
|
||||
in
|
||||
super
|
||||
// {
|
||||
mergelessListOf = elemType:
|
||||
mkOptionType {
|
||||
name = "mergelessListOf";
|
||||
description = "mergeless ${super.description}";
|
||||
description = "mergeless list of ${elemType.description or "values"}";
|
||||
inherit (lib.types.listOf elemType) check;
|
||||
merge = mergeEqualOption;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -62,7 +62,13 @@ in rec {
|
|||
inherit (elemType) getSubModules;
|
||||
getSubOptions = prefix: elemType.getSubOptions (prefix ++ ["<name>"]);
|
||||
substSubModules = m: dagOf (elemType.substSubModules m);
|
||||
functor = (defaultFunctor name) // {wrapped = elemType;};
|
||||
functor = {
|
||||
name = name;
|
||||
type = dagOf;
|
||||
wrapped = elemType;
|
||||
payload = elemType;
|
||||
binOp = a: b: a;
|
||||
};
|
||||
nestedTypes.elemType = elemType;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -259,6 +259,16 @@ in {
|
|||
|
||||
(mkRenamedLspServer "zig")
|
||||
(mkRemovedLspPackage "zig")
|
||||
|
||||
# 2025-10-22
|
||||
(mkRenamedOptionModule ["vim" "languages" "rust" "crates" "enable"] ["vim" "languages" "rust" "extensions" "crates-nvim" "enable"])
|
||||
(mkRemovedOptionModule ["vim" "languages" "rust" "crates" "codeActions"] ''
|
||||
'vim.languages.rust.crates' option has been moved to 'vim.languages.rust.extensions.crates-nvim' in full and the
|
||||
codeActions option has been removed. To set up code actions again, you may use the the new 'setupOpts' option
|
||||
located under 'vim.languages.rust.extensions.crates-nvim'. Refer to crates.nvim documentation for setup steps:
|
||||
|
||||
<https://github.com/Saecki/crates.nvim/wiki/Documentation-v0.7.1#in-process-language-server>
|
||||
'')
|
||||
]
|
||||
|
||||
# Migrated via batchRenameOptions. Further batch renames must be below this line.
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
inherit (lib.types) nullOr submodule listOf str bool;
|
||||
inherit (lib.nvim.types) luaInline;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.nvim.dag) entryAfter;
|
||||
inherit (lib.nvim.dag) entryAfter entryBetween;
|
||||
|
||||
autocommandType = submodule {
|
||||
options = {
|
||||
|
|
@ -144,7 +144,7 @@ in {
|
|||
enabledAutogroups = filter (au: au.enable) cfg.augroups;
|
||||
in {
|
||||
luaConfigRC = {
|
||||
augroups = entryAfter ["pluginConfigs"] (optionalString (enabledAutogroups != []) ''
|
||||
augroups = entryBetween ["autocmds"] ["pluginConfigs"] (optionalString (enabledAutogroups != []) ''
|
||||
local nvf_autogroups = {}
|
||||
for _, group in ipairs(${toLuaObject enabledAutogroups}) do
|
||||
if group.name then
|
||||
|
|
|
|||
|
|
@ -77,7 +77,6 @@ in {
|
|||
{
|
||||
vim.lsp.servers."*" = {
|
||||
capabilities = mkDefault (mkLuaInline "capabilities");
|
||||
on_attach = mkDefault (mkLuaInline "default_on_attach");
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
inherit (lib.strings) concatLines concatStringsSep optionalString;
|
||||
inherit (lib.attrsets) mapAttrsToList;
|
||||
inherit (lib.types) listOf str attrsOf;
|
||||
inherit (lib.nvim.lua) listToLuaTable;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.nvim.dag) entryAfter;
|
||||
|
||||
cfg = config.vim.spellcheck;
|
||||
|
|
@ -152,7 +152,7 @@ in {
|
|||
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})
|
||||
vim.api.nvim_create_autocmd({ "FileType" }, {
|
||||
group = "nvf_autocmds",
|
||||
pattern = ${listToLuaTable cfg.ignoredFiletypes},
|
||||
pattern = ${toLuaObject cfg.ignoredFiletypes},
|
||||
callback = function()
|
||||
vim.opt_local.spell = false
|
||||
end,
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) filter;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.nvim.dag) entryBefore;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -10,8 +11,7 @@
|
|||
|
||||
cfg = config.vim.assistant.chatgpt;
|
||||
|
||||
self = import ./chatgpt.nix {inherit lib;};
|
||||
mappingDefinitions = self.options.vim.assistant.chatgpt.mappings;
|
||||
mappingDefinitions = options.vim.assistant.chatgpt.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
maps = mkMerge [
|
||||
(mkSetBinding mappings.editWithInstructions "<cmd>ChatGPTEditWithInstruction<CR>")
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ in {
|
|||
accept = mkOption {
|
||||
type = nullOr str;
|
||||
default = "<M-l>";
|
||||
description = "Accept suggetion";
|
||||
description = "Accept suggestion";
|
||||
};
|
||||
|
||||
acceptWord = mkOption {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
freeformType = attrsOf (listOf (either str luaInline));
|
||||
options = {
|
||||
preset = mkOption {
|
||||
type = enum ["default" "none" "super-tab" "enter" "cmdline"];
|
||||
type = enum ["inherit" "default" "none" "super-tab" "enter" "cmdline"];
|
||||
default = "none";
|
||||
description = "keymap presets";
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -10,8 +11,7 @@
|
|||
|
||||
cfg = config.vim.git.git-conflict;
|
||||
|
||||
self = import ./git-conflict.nix {inherit lib config;};
|
||||
gcMappingDefinitions = self.options.vim.git.git-conflict.mappings;
|
||||
gcMappingDefinitions = options.vim.git.git-conflict.mappings;
|
||||
|
||||
gcMappings = addDescriptionsToMappings cfg.mappings gcMappingDefinitions;
|
||||
in {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) toJSON;
|
||||
|
|
@ -12,8 +13,7 @@
|
|||
|
||||
cfg = config.vim.git.gitsigns;
|
||||
|
||||
self = import ./gitsigns.nix {inherit lib config;};
|
||||
gsMappingDefinitions = self.options.vim.git.gitsigns.mappings;
|
||||
gsMappingDefinitions = options.vim.git.gitsigns.mappings;
|
||||
|
||||
gsMappings = addDescriptionsToMappings cfg.mappings gsMappingDefinitions;
|
||||
in {
|
||||
|
|
|
|||
|
|
@ -26,8 +26,6 @@
|
|||
workspace_required = true;
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
|
||||
local function switch_source_header(bufnr)
|
||||
local method_name = "textDocument/switchSourceHeader"
|
||||
local params = vim.lsp.util.make_text_document_params(bufnr)
|
||||
|
|
@ -77,8 +75,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
|
||||
local function switch_source_header(bufnr)
|
||||
local method_name = "textDocument/switchSourceHeader"
|
||||
local client = vim.lsp.get_clients({ bufnr = bufnr, name = "clangd", })[1]
|
||||
|
|
|
|||
|
|
@ -8,10 +8,8 @@
|
|||
inherit (lib.options) mkEnableOption mkOption;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.meta) getExe;
|
||||
inherit (lib.lists) isList;
|
||||
inherit (lib.types) enum either listOf package str;
|
||||
inherit (lib.types) enum listOf package;
|
||||
inherit (lib.nvim.types) mkGrammarOption;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.attrsets) mapListToAttrs;
|
||||
|
||||
cfg = config.vim.languages.clojure;
|
||||
|
|
|
|||
|
|
@ -63,12 +63,11 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
local oe = require("omnisharp_extended")
|
||||
${mkLspBinding "goToDefinition" "oe.lsp_definition"}
|
||||
${mkLspBinding "goToType" "oe.lsp_type_definition"}
|
||||
${mkLspBinding "listReferences" "oe.lsp_references"}
|
||||
${mkLspBinding "listImplementations" "oe.lsp_implementation"}
|
||||
local oe = require("omnisharp_extended")
|
||||
${mkLspBinding "goToDefinition" "oe.lsp_definition"}
|
||||
${mkLspBinding "goToType" "oe.lsp_type_definition"}
|
||||
${mkLspBinding "listReferences" "oe.lsp_references"}
|
||||
${mkLspBinding "listImplementations" "oe.lsp_implementation"}
|
||||
end
|
||||
'';
|
||||
settings = {
|
||||
|
|
|
|||
|
|
@ -161,7 +161,6 @@ in {
|
|||
},
|
||||
|
||||
capabilities = capabilities,
|
||||
on_attach = default_on_attach;
|
||||
},
|
||||
${optionalString cfg.dap.enable ''
|
||||
debugger = {
|
||||
|
|
|
|||
|
|
@ -10,13 +10,11 @@
|
|||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.nvim.types) mkGrammarOption;
|
||||
inherit (lib.nvim.dag) entryAfter entryBefore;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.dag) entryAfter;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.meta) getExe';
|
||||
inherit (lib.generators) mkLuaInline;
|
||||
inherit (lib.nvim.attrsets) mapListToAttrs;
|
||||
inherit (pkgs) haskellPackages;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
|
||||
cfg = config.vim.languages.haskell;
|
||||
|
||||
|
|
@ -34,7 +32,6 @@
|
|||
''
|
||||
function(client, bufnr)
|
||||
local ht = require("haskell-tools")
|
||||
default_on_attach(client, bufnr, ht)
|
||||
local opts = { noremap = true, silent = true, buffer = bufnr }
|
||||
vim.keymap.set('n', '<localleader>cl', vim.lsp.codelens.run, opts)
|
||||
vim.keymap.set('n', '<localleader>hs', ht.hoogle.hoogle_signature, opts)
|
||||
|
|
@ -122,7 +119,7 @@ in {
|
|||
dap = {
|
||||
cmd = ${
|
||||
if isList cfg.dap.package
|
||||
then expToLua cfg.dap.package
|
||||
then toLuaObject cfg.dap.package
|
||||
else ''{"${cfg.dap.package}/bin/haskell-debug-adapter"}''
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
defaultServers = ["jsonls"];
|
||||
servers = {
|
||||
jsonls = {
|
||||
cmd = [(getExe' pkgs.vscode-langservers-extracted "vscode-json-languageserver") "--stdio"];
|
||||
cmd = [(getExe' pkgs.vscode-langservers-extracted "vscode-json-language-server") "--stdio"];
|
||||
filetypes = ["json" "jsonc"];
|
||||
init_options = {provideFormatter = true;};
|
||||
root_markers = [".git"];
|
||||
|
|
|
|||
|
|
@ -23,6 +23,13 @@
|
|||
filetypes = ["markdown" "markdown.mdx"];
|
||||
root_markers = [".marksman.toml" ".git"];
|
||||
};
|
||||
|
||||
markdown-oxide = {
|
||||
enable = true;
|
||||
cmd = [(getExe pkgs.markdown-oxide)];
|
||||
filetypes = ["markdown"];
|
||||
root_markers = [".git" ".obsidian" ".moxide.toml"];
|
||||
};
|
||||
};
|
||||
|
||||
defaultFormat = "deno_fmt";
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr);
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function()
|
||||
local params = {
|
||||
command = 'pyright.organizeimports',
|
||||
|
|
@ -89,7 +88,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr);
|
||||
vim.api.nvim_buf_create_user_command(bufnr, 'LspPyrightOrganizeImports', function()
|
||||
local params = {
|
||||
command = 'basedpyright.organizeimports',
|
||||
|
|
|
|||
|
|
@ -4,16 +4,15 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) attrNames;
|
||||
inherit (lib.meta) getExe;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.options) mkOption mkEnableOption literalMD;
|
||||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.trivial) boolToString;
|
||||
inherit (lib.lists) isList;
|
||||
inherit (lib.attrsets) attrNames;
|
||||
inherit (lib.types) bool package str listOf either enum;
|
||||
inherit (lib.nvim.types) mkGrammarOption;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption;
|
||||
inherit (lib.nvim.lua) expToLua toLuaObject;
|
||||
inherit (lib.nvim.dag) entryAfter entryAnywhere;
|
||||
|
||||
cfg = config.vim.languages.rust;
|
||||
|
|
@ -33,15 +32,6 @@ in {
|
|||
package = mkGrammarOption pkgs "rust";
|
||||
};
|
||||
|
||||
crates = {
|
||||
enable = mkEnableOption "crates-nvim, tools for managing dependencies";
|
||||
codeActions = mkOption {
|
||||
description = "Enable code actions through null-ls";
|
||||
type = bool;
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
|
||||
lsp = {
|
||||
enable = mkEnableOption "Rust LSP support (rust-analyzer with extra tools)" // {default = config.vim.lsp.enable;};
|
||||
package = mkOption {
|
||||
|
|
@ -103,25 +93,32 @@ in {
|
|||
default = pkgs.lldb;
|
||||
};
|
||||
};
|
||||
|
||||
extensions = {
|
||||
crates-nvim = {
|
||||
enable = mkEnableOption "crates.io dependency management [crates-nvim]";
|
||||
|
||||
setupOpts = mkPluginSetupOption "crates-nvim" {
|
||||
completion.cmp.enable = mkOption {
|
||||
type = bool;
|
||||
default = config.vim.autocomplete.nvim-cmp.enable;
|
||||
defaultText = "{option}`config.vim.autocomplete.nvim-cmp.enable`";
|
||||
description = ''
|
||||
Whether to add crates.nvim as a source for completion plugins. The following
|
||||
plugins are supported by crates.nvim:
|
||||
|
||||
* nvim-cmp
|
||||
* coq.nvim
|
||||
|
||||
However nvf only supports auto-setup for nvim-cmp.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
(mkIf cfg.crates.enable {
|
||||
vim = {
|
||||
startPlugins = ["crates-nvim"];
|
||||
lsp.null-ls.enable = mkIf cfg.crates.codeActions true;
|
||||
autocomplete.nvim-cmp.sources = {crates = "[Crates]";};
|
||||
pluginRC.rust-crates = entryAnywhere ''
|
||||
require('crates').setup {
|
||||
null_ls = {
|
||||
enabled = ${boolToString cfg.crates.codeActions},
|
||||
name = "crates.nvim",
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
})
|
||||
|
||||
(mkIf cfg.treesitter.enable {
|
||||
vim.treesitter.enable = true;
|
||||
vim.treesitter.grammars = [cfg.treesitter.package];
|
||||
|
|
@ -140,7 +137,6 @@ in {
|
|||
(mkIf (cfg.lsp.enable || cfg.dap.enable) {
|
||||
vim = {
|
||||
startPlugins = ["rustaceanvim"];
|
||||
|
||||
pluginRC.rustaceanvim = entryAfter ["lsp-setup"] ''
|
||||
vim.g.rustaceanvim = {
|
||||
${optionalString cfg.lsp.enable ''
|
||||
|
|
@ -199,5 +195,28 @@ in {
|
|||
'';
|
||||
};
|
||||
})
|
||||
|
||||
(mkIf cfg.extensions.crates-nvim.enable {
|
||||
vim = let
|
||||
withCompletion = cfg.extensions.crates-nvim.setupOpts.completion.cmp.enable;
|
||||
in
|
||||
mkMerge [
|
||||
{
|
||||
startPlugins = ["crates-nvim"];
|
||||
pluginRC.rust-crates = entryAnywhere ''
|
||||
require("crates").setup(${toLuaObject cfg.extensions.crates-nvim.setupOpts})
|
||||
'';
|
||||
}
|
||||
|
||||
# FIXME: this will not be necessary once crates.nvim creates a new release that
|
||||
# ships improvements to the in-progress LSP module. If updating > 0.7.1, remember
|
||||
# to update this section.
|
||||
# See:
|
||||
# <https://github.com/saecki/crates.nvim/wiki/Documentation-unstable#auto-completion>
|
||||
(mkIf withCompletion {
|
||||
autocomplete.nvim-cmp.sources = {crates = "[Crates]";};
|
||||
})
|
||||
];
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,8 +50,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr);
|
||||
|
||||
-- ts_ls provides `source.*` code actions that apply to the whole file. These only appear in
|
||||
-- `vim.lsp.buf.code_action()` if specified in `context.only`.
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspTypescriptSourceAction', function()
|
||||
|
|
@ -106,7 +104,6 @@
|
|||
};
|
||||
on_attach = mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
default_on_attach(client, bufnr)
|
||||
vim.api.nvim_buf_create_user_command(0, 'LspDenolsCache', function()
|
||||
client:exec_cmd({
|
||||
command = 'deno.cache',
|
||||
|
|
|
|||
|
|
@ -4,15 +4,16 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.options) mkEnableOption mkOption;
|
||||
inherit (lib.options) mkOption mkEnableOption;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.types) nullOr enum attrsOf listOf package str;
|
||||
inherit (lib.types) nullOr enum attrsOf listOf package str bool int;
|
||||
inherit (lib.attrsets) attrNames;
|
||||
inherit (lib.meta) getExe;
|
||||
inherit (lib.nvim.types) mkGrammarOption mkPluginSetupOption singleOrListOf;
|
||||
inherit (lib.nvim.dag) entryAnywhere;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
inherit (lib.nvim.attrsets) mapListToAttrs;
|
||||
inherit (lib.nvim.binds) mkKeymap mkMappingOption;
|
||||
inherit (lib.generators) mkLuaInline;
|
||||
|
||||
cfg = config.vim.languages.typst;
|
||||
|
|
@ -91,11 +92,8 @@
|
|||
};
|
||||
};
|
||||
|
||||
defaultFormat = "typstfmt";
|
||||
defaultFormat = "typstyle";
|
||||
formats = {
|
||||
typstfmt = {
|
||||
package = pkgs.typstfmt;
|
||||
};
|
||||
# https://github.com/Enter-tainer/typstyle
|
||||
typstyle = {
|
||||
package = pkgs.typstyle;
|
||||
|
|
@ -178,6 +176,57 @@ in {
|
|||
};
|
||||
};
|
||||
};
|
||||
typst-concealer = {
|
||||
enable = mkEnableOption ''
|
||||
[typst-concealer]: https://github.com/PartyWumpus/typst-concealer
|
||||
|
||||
Inline typst preview for Neovim via [typst-concealer]
|
||||
'';
|
||||
|
||||
mappings = {
|
||||
toggleConcealing = mkMappingOption "Enable typst-concealer in buffer" "<leader>TT";
|
||||
};
|
||||
|
||||
setupOpts = mkPluginSetupOption "typst-concealer" {
|
||||
do_diagnostics = mkOption {
|
||||
type = nullOr bool;
|
||||
default = !cfg.lsp.enable;
|
||||
description = "Should typst-concealer provide diagnostics on error?";
|
||||
};
|
||||
color = mkOption {
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
example = "rgb(\"#f012be\")";
|
||||
description = "What color should typst-concealer render text/stroke with? (only applies when styling_type is 'colorscheme')";
|
||||
};
|
||||
enabled_by_default = mkOption {
|
||||
type = nullOr bool;
|
||||
default = null;
|
||||
description = "Should typst-concealer conceal newly opened buffers by default?";
|
||||
};
|
||||
styling_type = mkOption {
|
||||
type = nullOr (enum ["simple" "none" "colorscheme"]);
|
||||
default = null;
|
||||
description = "What kind of styling should typst-concealer apply to your typst?";
|
||||
};
|
||||
ppi = mkOption {
|
||||
type = nullOr int;
|
||||
default = null;
|
||||
description = "What PPI should typst render at. Plugin default is 300, typst's normal default is 144.";
|
||||
};
|
||||
typst_location = mkOption {
|
||||
type = str;
|
||||
default = getExe pkgs.typst;
|
||||
description = "Where should typst-concealer look for your typst binary?";
|
||||
example = ''lib.getExe pkgs.typst'';
|
||||
};
|
||||
conceal_in_normal = mkOption {
|
||||
type = nullOr bool;
|
||||
default = null;
|
||||
description = "Should typst-concealer still conceal when the normal mode cursor goes over a line.";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
|
|
@ -212,5 +261,18 @@ in {
|
|||
require("typst-preview").setup(${toLuaObject cfg.extensions.typst-preview-nvim.setupOpts})
|
||||
'';
|
||||
})
|
||||
|
||||
(mkIf cfg.extensions.typst-concealer.enable {
|
||||
vim.lazy.plugins.typst-concealer = {
|
||||
event = "BufRead *.typ";
|
||||
package = "typst-concealer";
|
||||
setupModule = "typst-concealer";
|
||||
setupOpts = cfg.extensions.typst-concealer.setupOpts;
|
||||
|
||||
keys = [
|
||||
(mkKeymap "n" cfg.extensions.typst-concealer.mappings.toggleConcealing "<cmd>lua require('typst-concealer').toggle_buf()<CR>" {desc = "Toggle typst-concealer in buffer";})
|
||||
];
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
(getExe (pkgs.symlinkJoin {
|
||||
name = "vala-language-server-wrapper";
|
||||
paths = [pkgs.vala-language-server];
|
||||
meta.mainProgram = "vala-language-server-wrapper";
|
||||
buildInputs = [pkgs.makeBinaryWrapper];
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/vala-language-server \
|
||||
|
|
|
|||
|
|
@ -15,18 +15,18 @@
|
|||
|
||||
cfg = config.vim.languages.yaml;
|
||||
|
||||
on_attach = mkLuaInline (
|
||||
on_attach =
|
||||
if config.vim.languages.helm.lsp.enable && config.vim.languages.helm.enable
|
||||
then ''
|
||||
function(client, bufnr)
|
||||
default_on_attach()
|
||||
local filetype = vim.bo[bufnr].filetype
|
||||
if filetype == "helm" then
|
||||
client.stop()
|
||||
then
|
||||
mkLuaInline ''
|
||||
function(client, bufnr)
|
||||
local filetype = vim.bo[bufnr].filetype
|
||||
if filetype == "helm" then
|
||||
client.stop()
|
||||
end
|
||||
end
|
||||
end''
|
||||
else "default_on_attach"
|
||||
);
|
||||
''
|
||||
else null;
|
||||
|
||||
defaultServers = ["yaml-language-server"];
|
||||
servers = {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.generators) mkLuaInline;
|
||||
|
|
@ -10,20 +10,21 @@
|
|||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.trivial) boolToString;
|
||||
inherit (lib.nvim.binds) addDescriptionsToMappings;
|
||||
inherit (lib.nvim.dag) entryBefore;
|
||||
inherit (lib.nvim.lua) toLuaObject;
|
||||
|
||||
cfg = config.vim.lsp;
|
||||
usingNvimCmp = config.vim.autocomplete.nvim-cmp.enable;
|
||||
usingBlinkCmp = config.vim.autocomplete.blink-cmp.enable;
|
||||
self = import ./module.nix {inherit config lib pkgs;};
|
||||
conformCfg = config.vim.formatter.conform-nvim;
|
||||
conformFormatOnSave = conformCfg.enable && conformCfg.setupOpts.format_on_save != null;
|
||||
|
||||
augroup = "nvf_lsp";
|
||||
mappingDefinitions = self.options.vim.lsp.mappings;
|
||||
mappingDefinitions = options.vim.lsp.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
mkBinding = binding: action:
|
||||
if binding.value != null
|
||||
then "vim.keymap.set('n', '${binding.value}', ${action}, {buffer=bufnr, noremap=true, silent=true, desc='${binding.description}'})"
|
||||
then "vim.keymap.set('n', ${toLuaObject binding.value}, ${action}, {buffer=bufnr, noremap=true, silent=true, desc=${toLuaObject binding.description}})"
|
||||
else "";
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
|
|
@ -35,20 +36,26 @@ in {
|
|||
|
||||
augroups = [{name = augroup;}];
|
||||
autocmds =
|
||||
(optional cfg.inlayHints.enable {
|
||||
group = augroup;
|
||||
event = ["LspAttach"];
|
||||
desc = "LSP on-attach enable inlay hints autocmd";
|
||||
callback = mkLuaInline ''
|
||||
function(event)
|
||||
local bufnr = event.buf
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
|
||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr })
|
||||
[
|
||||
{
|
||||
group = augroup;
|
||||
event = ["LspAttach"];
|
||||
desc = "LSP on-attach add keybinds, enable inlay hints, and other plugin integrations";
|
||||
callback = mkLuaInline ''
|
||||
function(event)
|
||||
local bufnr = event.buf
|
||||
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||
default_on_attach(client, bufnr)
|
||||
|
||||
${optionalString cfg.inlayHints.enable ''
|
||||
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
|
||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = bufnr }), { bufnr = bufnr })
|
||||
end
|
||||
''}
|
||||
end
|
||||
end
|
||||
'';
|
||||
})
|
||||
'';
|
||||
}
|
||||
]
|
||||
++ (optional (!conformFormatOnSave) {
|
||||
group = augroup;
|
||||
event = ["BufWritePre"];
|
||||
|
|
@ -87,7 +94,7 @@ in {
|
|||
'';
|
||||
});
|
||||
|
||||
pluginRC.lsp-setup = ''
|
||||
pluginRC.lsp-setup = entryBefore ["autocmds"] ''
|
||||
vim.g.formatsave = ${boolToString cfg.formatOnSave};
|
||||
|
||||
local attach_keymaps = function(client, bufnr)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -9,9 +10,8 @@
|
|||
inherit (lib.nvim.lua) toLuaObject;
|
||||
|
||||
cfg = config.vim.lsp.nvim-docs-view;
|
||||
self = import ./nvim-docs-view.nix {inherit lib;};
|
||||
|
||||
mappingDefinitions = self.options.vim.lsp.nvim-docs-view.mappings;
|
||||
mappingDefinitions = options.vim.lsp.nvim-docs-view.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -10,8 +11,7 @@
|
|||
|
||||
cfg = config.vim.lsp;
|
||||
|
||||
self = import ./otter.nix {inherit lib;};
|
||||
mappingDefinitions = self.options.vim.lsp.otter-nvim.mappings;
|
||||
mappingDefinitions = options.vim.lsp.otter-nvim.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.otter-nvim.mappings mappingDefinitions;
|
||||
in {
|
||||
config = mkIf (cfg.enable && cfg.otter-nvim.enable) {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -9,9 +10,7 @@
|
|||
|
||||
cfg = config.vim.minimap.codewindow;
|
||||
|
||||
self = import ./codewindow.nix {inherit lib;};
|
||||
|
||||
mappingDefinitions = self.options.vim.minimap.codewindow.mappings;
|
||||
mappingDefinitions = options.vim.minimap.codewindow.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkMerge mkIf;
|
||||
|
|
@ -9,8 +9,7 @@
|
|||
inherit (lib.nvim.lua) toLuaObject;
|
||||
|
||||
cfg = config.vim.notes.todo-comments;
|
||||
self = import ./todo-comments.nix {inherit pkgs lib;};
|
||||
inherit (self.options.vim.notes.todo-comments) mappings;
|
||||
inherit (options.vim.notes.todo-comments) mappings;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim = {
|
||||
|
|
|
|||
|
|
@ -5,4 +5,5 @@
|
|||
"oxocarbon"
|
||||
"gruvbox"
|
||||
"nord"
|
||||
"mellow"
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -9,8 +10,8 @@
|
|||
inherit (lib.nvim.lua) toLuaObject;
|
||||
|
||||
cfg = config.vim.tabline.nvimBufferline;
|
||||
self = import ./nvim-bufferline.nix {inherit config lib;};
|
||||
inherit (self.options.vim.tabline.nvimBufferline) mappings;
|
||||
|
||||
inherit (options.vim.tabline.nvimBufferline) mappings;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim = {
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ in {
|
|||
then
|
||||
mkLuaInline ''
|
||||
(function()
|
||||
local integration = require("catppuccin.groups.integrations.bufferline")
|
||||
local integration = require("catppuccin.special.bufferline")
|
||||
return (integration.get_theme or integration.get)()
|
||||
end)()
|
||||
''
|
||||
|
|
@ -40,7 +40,7 @@ in {
|
|||
defaultText = literalMD ''
|
||||
```lua
|
||||
(function()
|
||||
local integration = require("catppuccin.groups.integrations.bufferline")
|
||||
local integration = require("catppuccin.special.bufferline")
|
||||
return (integration.get_theme or integration.get)()
|
||||
end)()
|
||||
```
|
||||
|
|
|
|||
|
|
@ -46,6 +46,18 @@ in {
|
|||
}: ''
|
||||
require('tokyonight').setup {
|
||||
transparent = ${boolToString transparent};
|
||||
styles = {
|
||||
sidebars = ${
|
||||
if transparent
|
||||
then ''"transparent"''
|
||||
else ''"dark"''
|
||||
},
|
||||
floats = ${
|
||||
if transparent
|
||||
then ''"transparent"''
|
||||
else ''"dark"''
|
||||
},
|
||||
},
|
||||
}
|
||||
vim.cmd[[colorscheme tokyonight-${style}]]
|
||||
'';
|
||||
|
|
@ -303,4 +315,13 @@ in {
|
|||
|
||||
styles = ["hard" "medium" "soft"];
|
||||
};
|
||||
|
||||
mellow = {
|
||||
setup = {transparent ? false, ...}: ''
|
||||
-- Mellow configuration
|
||||
vim.g.mellow_transparent = ${boolToString transparent}
|
||||
|
||||
vim.cmd.colorscheme("mellow")
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -12,8 +12,7 @@
|
|||
|
||||
cfg = config.vim.treesitter;
|
||||
|
||||
self = import ./treesitter.nix {inherit pkgs lib;};
|
||||
mappingDefinitions = self.options.vim.treesitter.mappings;
|
||||
mappingDefinitions = options.vim.treesitter.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -9,9 +10,7 @@
|
|||
|
||||
cfg = config.vim.gestures.gesture-nvim;
|
||||
|
||||
self = import ./gesture-nvim.nix {inherit lib;};
|
||||
|
||||
mappingDefinitions = self.options.vim.gestures.gesture-nvim.mappings;
|
||||
mappingDefinitions = options.vim.gestures.gesture-nvim.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ in {
|
|||
"flash-nvim" = {
|
||||
package = "flash-nvim";
|
||||
setupModule = "flash";
|
||||
setupOpts = cfg.setupOpts;
|
||||
inherit (cfg) setupOpts;
|
||||
|
||||
lazy = true;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf;
|
||||
|
|
@ -9,9 +10,7 @@
|
|||
|
||||
cfg = config.vim.utility.motion.hop;
|
||||
|
||||
self = import ./hop.nix {inherit lib;};
|
||||
|
||||
mappingDefinitions = self.options.vim.utility.motion.hop.mappings;
|
||||
mappingDefinitions = options.vim.utility.motion.hop.mappings;
|
||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
|
|
@ -9,10 +10,7 @@
|
|||
inherit (lib.nvim.dag) entryAnywhere;
|
||||
|
||||
cfg = config.vim.utility.preview.glow;
|
||||
self = import ./glow.nix {
|
||||
inherit lib config pkgs;
|
||||
};
|
||||
inherit (self.options.vim.utility.preview.glow) mappings;
|
||||
inherit (options.vim.utility.preview.glow) mappings;
|
||||
in {
|
||||
config = mkIf cfg.enable {
|
||||
vim.startPlugins = ["glow-nvim"];
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
# In systems where we only have a package and no module, this can be used
|
||||
# to access the built init.lua
|
||||
initLua = dummyInit;
|
||||
|
||||
mnwConfig = neovim-wrapped.passthru.config;
|
||||
mnwConfigDir = neovim-wrapped.passthru.configDir;
|
||||
};
|
||||
|
||||
meta =
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue