Compare commits

...

27 commits

Author SHA1 Message Date
raf
0a87f3150e
Merge b3b8d3a86c into bbe04a64ff 2025-01-10 10:36:04 +00:00
raf
bbe04a64ff
ci: build previws for the website on doc changes (#494) 2025-01-10 10:35:14 +00:00
raf
c8dbcde66a
Merge pull request #547 from NotAShelf/deprecate-rnix
languages/nix: deprecate rnix language server option
2025-01-10 13:31:35 +03:00
b3b8d3a86c
statusline/feline: add components
Some checks failed
Check for typos in the source tree / check-typos (push) Has been cancelled
2025-01-10 13:30:27 +03:00
970af589ad
statusline/feline: init 2025-01-10 13:28:57 +03:00
raf
2c54ecd306
Merge pull request #536 from horriblename/telescope-extensions-workaround
telescope: workaround nixpkgs extensions breaking :Telescope
2025-01-10 13:22:26 +03:00
c5f16b96c0
docs: update v0.8 release notes 2025-01-10 12:52:49 +03:00
c734a81e40
languages/nix: deprecate rnix language server option
Abandoned, archived and wildly outdated.
2025-01-10 12:52:29 +03:00
raf
c09ae380f0
Merge pull request #545 from LilleAila/obsidian-remove-dir-default
notes/obsidian: remove default dir-value
2025-01-10 11:12:58 +03:00
raf
4e949b3df8
docs: remove redundant obsidian.nvim link 2025-01-10 08:09:52 +00:00
LilleAila
6852120514
notes/obsidian: add changelog entry 2025-01-10 09:06:11 +01:00
raf
5250f8e771
Merge pull request #480 from NotAShelf/more-option-stuff
neovim: gradually deprecate shorthand `vim.*` aliases to `vim.options` and `vim.globals`
2025-01-10 10:59:44 +03:00
6f1293053c
docs: update v0.8 release notes
Some checks failed
Check for typos in the source tree / check-typos (push) Has been cancelled
2025-01-10 10:45:34 +03:00
8448a6ca0f
wrapper/rc: change vim.options.mouse to a string type
As the mouse option in neovim allows combining those values.
2025-01-10 10:36:01 +03:00
LilleAila
b0fb0a93cb
notes/obsidian: remove default dir-value 2025-01-10 08:26:29 +01:00
raf
dab409685d
Merge branch 'main' into more-option-stuff 2025-01-10 10:08:34 +03:00
Ching Pei Yang
752915e639
telescope: workaround nixpkgs extensions loading early
force a reload when telescope is loaded to workaround #535
2025-01-07 06:46:12 +01:00
356f92053c
neovim/init: merge conditionals in options set
Some checks failed
Check for typos in the source tree / check-typos (push) Has been cancelled
2025-01-07 06:12:13 +03:00
raf
b704a28a12
Merge branch 'main' into more-option-stuff 2025-01-07 05:47:59 +03:00
5749739e4b
wrapper/rc: clean up option documentation
Some checks failed
Check for typos in the source tree / check-typos (push) Has been cancelled
2025-01-04 16:08:53 +03:00
85347de09d
utility/gesture-nvim: convert to vim.options 2025-01-04 16:08:11 +03:00
b67759273b
neovim/spellcheck: convert to vim.options 2025-01-04 15:52:27 +03:00
66005a51c3
wrappr/rc: allow strings in vim.options.signcolumn
Some checks failed
Check for typos in the source tree / check-typos (push) Has been cancelled
2024-12-11 00:08:48 +03:00
c19c925f1d
modules/neovim: avoid interpolating strings for vim.preventJunkFiles 2024-12-11 00:01:51 +03:00
07f50e84eb
modules/neovim: deprecate vim.showSignColumn
Prefer the type-safe `vim.options` equivalent.
2024-12-11 00:01:51 +03:00
5a5f49f85f
lib/languages: re-add toVimBool 2024-12-11 00:01:50 +03:00
0650aa31ac
modules/neovim: deprecate vim.enableEditorconfig option
Deprecate shorthand EditorConfig toggle, and encourage the more powerful `vim.globals` option.
2024-12-11 00:01:49 +03:00
20 changed files with 569 additions and 223 deletions

172
.github/workflows/docs-preview.yml vendored Normal file
View file

@ -0,0 +1,172 @@
name: Build and Preview Manual
on:
workflow_dispatch:
pull_request:
types: [opened, synchronize, reopened, closed]
paths:
- ".github/workflows/docs-preview.yml"
- "modules/**"
- "docs/**"
# Defining permissions here passes it to all workflows.
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token
permissions:
contents: write
pull-requests: write
issues: write
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-preview:
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: Set default git branch (to reduce log spam)
run: git config --global init.defaultBranch main
- name: Build documentation packages
run: nix build .#docs-html --print-build-logs
- name: Deploy to GitHub Pages preview
run: |
PR_NUMBER=${{ github.event.pull_request.number }}
BRANCH_NAME="gh-pages"
PREVIEW_DIR="docs-preview-${PR_NUMBER}"
# Clone the gh-pages branch and move to the preview subdirectory
git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages
cd gh-pages
mkdir -p $PREVIEW_DIR
# Copy the build files to the preview subdirectory
cp -rvf ../result/share/doc/nvf/* ./$PREVIEW_DIR
# Configure git to use the GitHub Actions token for authentication
git config --global user.name "GitHub Actions"
git config --global user.email "actions@github.com"
# Set the GitHub token for authentication
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
# Add and commit the changes
git add --all
git commit -m "Deploy PR #${PR_NUMBER} preview" || echo "No changes to commit"
git push --force origin $BRANCH_NAME
comment-url:
needs: build-preview
runs-on: ubuntu-latest
steps:
- name: Prepare Environment
id: prelude
run: |
PR_NUMBER=${{ github.event.pull_request.number }}
URL="https://${{ github.repository_owner }}.github.io/nvf/docs-preview-${PR_NUMBER}/"
# Propagate non-interpolatable environment vars
echo "URL=$URL" >> "$GITHUB_OUTPUT"
echo "REV=$GITHUB_SHA" >> "$GITHUB_OUTPUT"
echo "ACTOR=$GITHUB_ACTOR" >> "$GITHUB_OUTPUT"
echo "REF=$GITHUB_HEAD_REF" >> "$GITHUB_OUTPUT"
echo "RUNS=$GITHUB_RUN_NUMBER" >> "$GITHUB_OUTPUT"
echo "Live Preview URL: $URL"
echo "Rev: $GITHUB_SHA"
echo "Actor: $GITHUB_ACTOR"
echo "Ref: "$GITHUB_HEAD_REF"
echo "Reruns: "$GITHUB_RUN_NUMBER"
echo "### :rocket: Live Preview Deployed " >> "$GITHUB_STEP_SUMMARY"
echo "Preview can be found at ${URL}" >> "$GITHUB_STEP_SUMMARY"
- name: Find Comment
uses: peter-evans/find-comment@v3
id: fc
with:
comment-author: "github-actions[bot]"
issue-number: ${{ github.event.pull_request.number }}
body-includes: "Live preview deployed"
- name: Post live preview comment
uses: peter-evans/create-or-update-comment@v4
env:
COMMENT_ID: ${{ steps.fc.outputs.comment-id }}
URL: ${{ steps.prelude.outputs.URL }}
GITHUB_SHA: ${{ steps.prelude.outputs.REV }}
ACTOR: ${{ steps.prelude.outputs.ACTOR }}
REF: ${{ steps.prelude.outputs.REF }}
RUNS: ${{ steps.prelude.outputs.RUNS }}
with:
comment-id: ${{ env.COMMENT_ID }}
issue-number: ${{ github.event.pull_request.number }} # issue number also applies to pull requests
edit-mode: replace # replace previous body
body: |
### :rocket: Live preview deployed from ${{ env.GITHUB_SHA }}
View it [here](${{ env.URL }}):
<details>
<summary><strong>Debug Information</strong></summary>
<p>Triggered by: ${{ env.ACTOR }}</p>
<p><code>HEAD</code> at: ${{ env.REF }}</p>
<p>Reruns: ${{ env.RUNS }}</p>
</details>
cleanup:
if: ${{ github.event.pull_request.merged == true || github.event.pull_request.state == 'closed' }}
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Delete preview for closed/merged PR
run: |
PR_NUMBER=${{ github.event.pull_request.number }}
BRANCH_NAME="gh-pages"
PREVIEW_DIR="docs-preview-${PR_NUMBER}"
# Clone the gh-pages branch
git clone --single-branch --branch $BRANCH_NAME https://github.com/${{ github.repository }} gh-pages
cd gh-pages
# Check if the preview directory exists, and delete it if it does
if [ -d "$PREVIEW_DIR" ]; then
echo "Deleting preview directory $PREVIEW_DIR"
rm -rf $PREVIEW_DIR
else
echo "Preview directory $PREVIEW_DIR does not exist. Skipping deletion."
fi
# Configure git to use the GitHub Actions token for authentication
git config --global user.name "GitHub Actions"
git config --global user.email "actions@github.com"
# Set the GitHub token for authentication
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
# Add and commit the changes (only if there's something to delete)
git add .
git diff --quiet || git commit -m "Remove preview for PR #${PR_NUMBER}"
git push origin $BRANCH_NAME
cleanup-comment:
needs: cleanup
runs-on: ubuntu-latest
steps:
- name: Post cleanup verification
uses: peter-evans/create-or-update-comment@v4
with:
issue-number: ${{ github.event.pull_request.number }}
body: |
✅ Preview has been deleted successfully!

View file

@ -28,11 +28,11 @@ configuration formats.
### `vim.maps` rewrite {#sec-vim-maps-rewrite}
Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new
`vim.keymaps` submodule with support for a `mode` option has been introduced. It
can be either a string, or a list of strings, where a string represents the
short-name of the map mode(s), that the mapping should be set for. See
`:help map-modes` for more information.
Instead of specifying map modes using submodules (e.g.: `vim.maps.normal`), a
new `vim.keymaps` submodule with support for a `mode` option has been
introduced. It can be either a string, or a list of strings, where a string
represents the short-name of the map mode(s), that the mapping should be set
for. See `:help map-modes` for more information.
For example:

View file

@ -16,6 +16,16 @@
- Implement [](#opt-vim.git.gitsigns.setupOpts) for user-specified setup table
in gitsigns configuration.
- [](#opt-vim.options.mouse) no longer compares values to an enum of available
mouse modes. This means you can provide any string without the module system
warning you that it is invalid. Do keep in mind that this value is no longer
checked, so you will be responsible for ensuring its validity.
- Deprecate `vim.enableEditorconfig` in favor of
[](#opt-vim.globals.editorconfig).
- Deprecate rnix-lsp as it has been abandoned and archived upstream.
[amadaluzia](https://github.com/amadaluzia):
[haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim
@ -36,3 +46,8 @@
- Add [aerial.nvim]
- Add [nvim-ufo]
[LilleAila](https://github.com/LilleAila):
- Remove `vim.notes.obsidian.setupOpts.dir`, which was set by default. Fixes
issue with setting the workspace directory.

90
flake.lock generated
View file

@ -51,27 +51,6 @@
"type": "github"
}
},
"naersk": {
"inputs": {
"nixpkgs": [
"rnix-lsp",
"nixpkgs"
]
},
"locked": {
"lastModified": 1655042882,
"narHash": "sha256-9BX8Fuez5YJlN7cdPO63InoyBy7dm3VlJkkmTt6fS1A=",
"owner": "nix-community",
"repo": "naersk",
"rev": "cddffb5aa211f50c4b8750adbec0bbbdfb26bb9f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "naersk",
"type": "github"
}
},
"nil": {
"inputs": {
"flake-utils": [
@ -124,22 +103,6 @@
"url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1656753965,
"narHash": "sha256-BCrB3l0qpJokOnIVc3g2lHiGhnjUi0MoXiw6t1o8H1E=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nmd": {
"flake": false,
"locked": {
@ -588,6 +551,22 @@
"type": "github"
}
},
"plugin-feline-nvim": {
"flake": false,
"locked": {
"lastModified": 1731467236,
"narHash": "sha256-/TqgHJo2ej/V5bubTdTlf5S+EZmSpU5F2Mdi0SHCD30=",
"owner": "freddiehaddad",
"repo": "feline.nvim",
"rev": "9f1313f61a75ec5ebe805fedd46bdc130c420963",
"type": "github"
},
"original": {
"owner": "freddiehaddad",
"repo": "feline.nvim",
"type": "github"
}
},
"plugin-fidget-nvim": {
"flake": false,
"locked": {
@ -2110,26 +2089,6 @@
"type": "github"
}
},
"rnix-lsp": {
"inputs": {
"naersk": "naersk",
"nixpkgs": "nixpkgs_2",
"utils": "utils"
},
"locked": {
"lastModified": 1669555118,
"narHash": "sha256-F0s0m62S5bHNVWNHLZD6SeHiLrsDx98VQbRjDyIu+qQ=",
"owner": "nix-community",
"repo": "rnix-lsp",
"rev": "95d40673fe43642e2e1144341e86d0036abd95d9",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "rnix-lsp",
"type": "github"
}
},
"root": {
"inputs": {
"flake-parts": "flake-parts",
@ -2165,6 +2124,7 @@
"plugin-dressing-nvim": "plugin-dressing-nvim",
"plugin-elixir-tools": "plugin-elixir-tools",
"plugin-fastaction-nvim": "plugin-fastaction-nvim",
"plugin-feline-nvim": "plugin-feline-nvim",
"plugin-fidget-nvim": "plugin-fidget-nvim",
"plugin-flutter-tools": "plugin-flutter-tools",
"plugin-friendly-snippets": "plugin-friendly-snippets",
@ -2260,7 +2220,6 @@
"plugin-vim-repeat": "plugin-vim-repeat",
"plugin-vim-startify": "plugin-vim-startify",
"plugin-which-key": "plugin-which-key",
"rnix-lsp": "rnix-lsp",
"systems": "systems_2"
}
},
@ -2314,21 +2273,6 @@
"repo": "default",
"type": "github"
}
},
"utils": {
"locked": {
"lastModified": 1656928814,
"narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",

View file

@ -89,7 +89,6 @@
};
# Language servers (use master instead of nixpkgs)
rnix-lsp.url = "github:nix-community/rnix-lsp";
nil = {
url = "github:oxalica/nil";
inputs.nixpkgs.follows = "nixpkgs";
@ -288,6 +287,12 @@
flake = false;
};
plugin-feline-nvim = {
url = "github:freddiehaddad/feline.nvim";
flake = false;
};
# Completion
plugin-nvim-cmp = {
url = "github:hrsh7th/nvim-cmp";
flake = false;

View file

@ -8,8 +8,10 @@
inherit system;
overlays = [
inputs.self.overlays.default
(_: _: {
rnix-lsp = inputs'.rnix-lsp.defaultPackage;
# Build nil from source to get most recent
# features as they are added.
nil = inputs'.nil.packages.default;
})
];

View file

@ -6,7 +6,12 @@
inherit (lib.nvim.attrsets) mapListToAttrs;
in {
# Converts a boolean to a yes/no string. This is used in lots of
# configuration formats.
# configuration formats, and is not covered by `toLuaObject`
toVimBool = bool:
if bool
then "yes"
else "no";
diagnosticsToLua = {
lang,
config,
@ -30,8 +35,8 @@ in {
mkEnable = desc:
mkOption {
description = "Turn on ${desc} for enabled languages by default";
type = bool;
default = false;
type = bool;
description = "Turn on ${desc} for enabled languages by default";
};
}

View file

@ -14,6 +14,7 @@
splitRight = "splitright";
autoIndent = "autoindent";
wordWrap = "wrap";
showSignColumn = "signcolumn";
};
in {
imports = concatLists [
@ -35,23 +36,28 @@ in {
vim.autopairs.enable has been removed in favor of per-plugin modules.
You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead.
'')
(mkRemovedOptionModule ["vim" "autopairs" "type"] ''
vim.autopairs.type has been removed in favor of per-plugin modules.
You can enable nvim-autopairs with vim.autopairs.nvim-autopairs.enable instead.
'')
(mkRemovedOptionModule ["vim" "autocomplete" "enable"] ''
vim.autocomplete.enable has been removed in favor of per-plugin modules.
You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead.
'')
(mkRemovedOptionModule ["vim" "autocomplete" "type"] ''
vim.autocomplete.type has been removed in favor of per-plugin modules.
You can enable nvim-cmp with vim.autocomplete.nvim-cmp.enable instead.
'')
(mkRemovedOptionModule ["vim" "autocomplete" "sources"] ''
vim.autocomplete.sources has been removed in favor of per-plugin modules.
You can add nvim-cmp sources with vim.autocomplete.nvim-cmp.sources
instead.
'')
(mkRemovedOptionModule ["vim" "snippets" "vsnip" "enable"] ''
vim.snippets.vsnip.enable has been removed in favor of the more modern luasnip.
'')
@ -84,9 +90,12 @@ in {
`tabstop` and `shiftwidth` manually in `vim.options` or per-filetype in a
`ftplugin` directory added to your runtime path.
'')
# 2024-12-02
(mkRenamedOptionModule ["vim" "enableEditorconfig"] ["vim" "globals" "editorconfig"])
]
# 2024-12-1
# 2024-12-01
# Migrated via batchRenameOptions. Further batch renames must be below this line.
renamedVimOpts
];

View file

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

View file

@ -124,7 +124,6 @@ in {
nvim --headless --clean \
--cmd "mkspell $out/spell/$name.add.spl $spellfile" -Es -n
done
'';
in
mkIf (cfg.extraSpellWords != {}) [
@ -133,10 +132,12 @@ in {
compileJoinedSpellfiles.outPath
];
luaConfigRC.spellcheck = entryAfter ["basic"] ''
vim.opt.spell = true
vim.opt.spelllang = ${listToLuaTable cfg.languages}
options = {
spell = true;
spelllang = cfg.languages;
};
luaConfigRC.spellcheck = entryAfter ["basic"] ''
-- Disable spellchecking for certain filetypes
-- as configured by `vim.spellcheck.ignoredFiletypes`
vim.api.nvim_create_augroup("nvf_autocmds", {clear = false})

View file

@ -26,22 +26,6 @@
then expToLua package
else ''{"${package}/bin/${defaultCmd}"}'';
servers = {
rnix = {
package = pkgs.rnix-lsp;
internalFormatter = cfg.format.type == "nixpkgs-fmt";
lspConfig = ''
lspconfig.rnix.setup{
capabilities = capabilities,
${
if (cfg.format.enable && cfg.format.type == "nixpkgs-fmt")
then useFormat
else noFormat
},
cmd = ${packageToCmd cfg.lsp.package "rnix-lsp"},
}
'';
};
nil = {
package = pkgs.nil;
internalFormatter = true;
@ -165,6 +149,7 @@ in {
type = enum (attrNames formats);
default = defaultFormat;
};
package = mkOption {
description = "Nix formatter package";
type = package;
@ -188,7 +173,18 @@ in {
assertions = [
{
assertion = cfg.format.type != "nixpkgs-fmt";
message = "nixpkgs-fmt has been archived upstream. Please use one of the following instead: ${concatStringsSep ", " (attrNames formats)}";
message = ''
nixpkgs-fmt has been archived upstream. Please use one of the following available formatters:
${concatStringsSep ", " (attrNames formats)}
'';
}
{
assertion = cfg.lsp.server != "rnix";
message = ''
rnix-lsp has been archived upstream. Please use one of the following available language servers:
${concatStringsSep ", " (attrNames servers)}
'';
}
];
vim.pluginRC.nix = ''

View file

@ -24,12 +24,6 @@ in {
enable = mkEnableOption "complementary neovim plugins for Obsidian editor";
setupOpts = mkPluginSetupOption "Obsidian.nvim" {
dir = mkOption {
type = str;
default = "~/my-vault";
description = "Obsidian vault directory";
};
daily_notes = {
folder = mkOption {
type = nullOr str;

View file

@ -1,5 +1,6 @@
{
imports = [
./feline
./lualine
];
}

View file

@ -0,0 +1,21 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim.statusline.feline-nvim;
in {
config = mkIf cfg.enable {
vim = {
lazy.plugins.feline-nvim = {
event = "UIEnter";
package = "feline-nvim";
setupModule = "feline";
inherit (cfg) setupOpts;
};
};
};
}

View file

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

View file

@ -0,0 +1,144 @@
{
config,
lib,
...
}: let
inherit (builtins) elem;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) str listOf attrs attrsOf anything either submodule;
inherit (lib.lists) optional;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.types) mkPluginSetupOption;
conditionalRenderers = {
options = {
filetypes = mkOption {
type = listOf str;
default = [
"^NvimTree$"
"^neo-tree$"
"^startify$"
"^fugitive$"
"^fugitiveblame$"
"^qf$"
"^help$"
];
description = "Filetypes in which to force render inactive statusline";
};
buftypes = mkOption {
type = listOf str;
default = ["^terminal$"];
description = "Buffer types in which to force render inactive statusline";
};
bufnames = mkOption {
type = listOf str;
default = [];
description = "Buffer names in which to force render inactive statusline";
};
};
};
in {
options.vim.statusline.feline-nvim = {
enable = mkEnableOption "minimal, stylish and customizable statusline, statuscolumn, and winbar [feline.nvim]";
setupOpts = mkPluginSetupOption "feline-nvim" {
custom_providers = mkOption {
type = attrsOf anything;
default = {};
example = literalExpression ''
{
window_number = mkLuaInline ''''
function()
return tostring(vim.api.nvim_win_get_number(0))
end
'''';
}
'';
description = "User-defined feline provider functions";
};
theme = mkOption {
type = either str (attrsOf str);
default = {};
example = {
fg = "#fff";
bg = "#111";
};
description = ''
Either a string containing the color theme name or an attribute set of
strings, containing the colors.
The themes `fg` and `bg` values also represent the default foreground
and background colors, respectively.
'';
};
separators = mkOption {
type = listOf str;
default = [];
example = ["slant_right_2"];
description = ''
A table containing custom Feline separator prests.
:::{.warning}
This option is not type-checked! Before setting this option, please take
a look at {command}`:help feline-separator-preset` for a list of
available separator presets.
:::
'';
};
force_inactive = mkOption {
default = {};
type = attrsOf (submodule conditionalRenderers);
description = ''
A table that determines which buffers should always have the inactive
statusline, even when they are active.
'';
};
disable = mkOption {
default = {};
type = attrsOf (submodule conditionalRenderers);
description = ''
A table that determines which buffers should always have the statusline
disabled, even when they are active.
'';
};
vi_mode_colors = mkOption {
type = attrsOf str;
default = {};
description = ''
Attribute set containing colors associated with specific Vi modes.
It can later be used to get the color associated with the current Vim
mode using `require('feline.providers.vi_mode').get_mode_color()`.
See `:help feline-vi-mode` for more details on vi mode.
'';
};
# TODO:
# - Check for the number of elements in the list maybe? Can Feline have infinite components per section?
# - type-check contents of `attrsOf anything`? Is there a downside for not doing that?
# - add examples for each one of those components. The option types are necessary, but confusing.
components = {
active = mkOption {
type = listOf (listOf (attrsOf anything));
default = [];
description = "List of components to display for buffers feline will render as 'active'";
};
inactive = mkOption {
type = listOf (listOf (attrsOf anything));
default = [];
description = "List of components to display for buffers feline will render as 'inactive'";
};
};
};
};
}

View file

@ -15,43 +15,47 @@
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
in {
config = mkIf cfg.enable {
vim.startPlugins = ["gesture-nvim"];
vim = {
startPlugins = ["gesture-nvim"];
vim.maps.normal = mkMerge [
(mkSetLuaBinding mappings.draw "require('gesture').draw")
(mkSetLuaBinding mappings.finish "require('gesture').finish")
(mkIf (mappings.draw.value == "<RightDrag>") {
"<RightMouse>" = {action = "<Nop>";};
})
];
maps.normal = mkMerge [
(mkSetLuaBinding mappings.draw "require('gesture').draw")
(mkSetLuaBinding mappings.finish "require('gesture').finish")
(mkIf (mappings.draw.value == "<RightDrag>") {
"<RightMouse>" = {action = "<Nop>";};
})
];
vim.pluginRC.gesture-nvim = entryAnywhere ''
vim.opt.mouse = "a"
options.mouse = "a";
pluginRC.gesture-nvim = entryAnywhere ''
local gesture = require("gesture")
gesture.register({
name = "scroll to bottom",
inputs = { gesture.up(), gesture.down() },
action = "normal! G",
})
local gesture = require("gesture")
gesture.register({
name = "scroll to bottom",
inputs = { gesture.up(), gesture.down() },
action = "normal! G",
})
gesture.register({
name = "next tab",
inputs = { gesture.right() },
action = "tabnext",
})
gesture.register({
name = "previous tab",
inputs = { gesture.left() },
action = function(ctx) -- also can use callable
vim.cmd.tabprevious()
end,
})
gesture.register({
name = "go back",
inputs = { gesture.right(), gesture.left() },
-- map to `<C-o>` keycode
action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-o>", true, false, true), "n", true)]],
})
'';
gesture.register({
name = "next tab",
inputs = { gesture.right() },
action = "tabnext",
})
gesture.register({
name = "previous tab",
inputs = { gesture.left() },
action = function(ctx) -- also can use callable
vim.cmd.tabprevious()
end,
})
gesture.register({
name = "go back",
inputs = { gesture.right(), gesture.left() },
-- map to `<C-o>` keycode
action = [[lua vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<C-o>", true, false, true), "n", true)]],
})
'';
};
};
}

View file

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

View file

@ -22,6 +22,12 @@ in {
package = "telescope";
setupModule = "telescope";
inherit (cfg) setupOpts;
# HACK: workaround until https://github.com/NotAShelf/nvf/issues/535 gets resolved
before = ''
vim.g.loaded_telescope = nil
'';
after = ''
local telescope = require("telescope")
${optionalString config.vim.ui.noice.enable "telescope.load_extension('noice')"}

View file

@ -3,9 +3,11 @@
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption literalMD literalExpression;
inherit (lib.options) mkOption literalMD literalExpression;
inherit (lib.strings) optionalString;
inherit (lib.types) str bool int enum attrsOf lines listOf either path submodule anything;
inherit (lib.trivial) isBool;
inherit (lib.nvim.languages) toVimBool;
inherit (lib.nvim.types) dagOf;
inherit (lib.nvim.lua) listToLuaTable;
@ -17,7 +19,7 @@ in {
default = false;
example = true;
description = ''
[{option}`official documentation`]: https://neovim.io/doc/user/lua.html#vim.loader.enable()
[official documentation]: https://neovim.io/doc/user/lua.html#vim.loader.enable()
the experimental Lua module loader to speed up the start up process
@ -29,7 +31,7 @@ in {
::: {.note}
The Lua module loader is *disabled* by default. Before setting this option, please
take a look at the [{option}`official documentation`]. This option may be enabled by
take a look at the {option}`[official documentation]`. This option may be enabled by
default in the future.
:::
'';
@ -81,7 +83,7 @@ in {
./nvim/my-lua-file.lua
# source type path - pure and reproducible
(builtins.source {
(builtins.path {
path = ./nvim/my-lua-file.lua;
name = "my-lua-file";
})
@ -121,6 +123,21 @@ in {
default = ",";
description = "The key used for `<localleader>` mappings";
};
editorconfig = mkOption {
type = bool;
default = true;
description = ''
Whether to enable EditorConfig integration in Neovim.
This defaults to true as it is enabled by default in stock
Neovim, setting this option to false disables EditorConfig
integration entirely.
See [Neovim documentation](https://neovim.io/doc/user/editorconfig.html)
for more details on configuring EditorConfig behaviour.
'';
};
};
};
@ -150,16 +167,25 @@ in {
};
mouse = mkOption {
type = enum ["a" "n" "v" "i" "c"];
default = "a";
type = str;
default = "nvi";
example = "a";
description = ''
Set modes for mouse support.
* a - all
* n - normal
* v - visual
* i - insert
* c - command
* c - command-line
* h - all modes when editing a help file
* a - all modes
* r - for hit-enter and more-prompt prompt
[neovim documentation]: https://neovim.io/doc/user/options.html#'mouse'"
This option takes a string to ensure proper conversion to the corresponding Lua type.
As such, we do not check the value passed to this option. Please ensure that any value
that is set here is a valid value as per [neovim documentation].
'';
};
@ -211,6 +237,16 @@ in {
description = "Enable word wrapping.";
};
signcolumn = mkOption {
type = either str bool;
default = true;
apply = x:
if isBool x
then toVimBool x # convert to a yes/no str
else x;
description = "Show the sign column";
};
tabstop = mkOption {
type = int;
default = 8; # Neovim default
@ -263,7 +299,11 @@ in {
vim.opt.runtimepath:append(${listToLuaTable cfg.additionalRuntimePaths})
''}
${optionalString cfg.enableLuaLoader "vim.loader.enable()"}
${optionalString cfg.enableLuaLoader ''
if vim.loader then
vim.loader.enable()
end
''}
'';
defaultText = literalMD ''
@ -273,7 +313,7 @@ in {
if [](#opt-vim.enableLuaLoader) is set to true.
'';
example = literalExpression ''"$${builtins.readFile ./my-lua-config-pre.lua}"'';
example = literalExpression ''''${builtins.readFile ./my-lua-config-pre.lua}'';
description = ''
Verbatim lua code that will be inserted **before**