Compare commits

...

31 commits

Author SHA1 Message Date
Victor R
54311277fc
language/php: add initial support for intelephense php lsp (#709)
Some checks are pending
Set up binary cache / cachix (default) (push) Waiting to run
Set up binary cache / cachix (maximal) (push) Waiting to run
Set up binary cache / cachix (nix) (push) Waiting to run
Validate flake & check documentation / Validate Flake Documentation (push) Waiting to run
Validate flake & check documentation / Validate hyperlinks in documentation sources (push) Waiting to run
Validate flake & check formatting / Validate Flake (push) Waiting to run
Validate flake & check formatting / Formatting via Alejandra (push) Waiting to run
Build and deploy documentation / Check latest commit (push) Waiting to run
Build and deploy documentation / publish (push) Blocked by required conditions
Check for typos in the source tree / check-typos (push) Waiting to run
* language/php: add initial support for intelephense php lsp

* docs: update release notes

---------

Co-authored-by: raf <me@notashelf.dev>
2025-03-14 01:42:50 +00:00
Adam M. Szalkowski
0625024869
languages/helm: init (#679) 2025-03-12 23:21:13 +00:00
Thales Menato
bafa6cbf84
languages/cue: initial CUE language support (#704)
* feat: add cue language support

* docs: add changelog information
2025-03-11 10:33:39 +00:00
dependabot[bot]
2f02c47c1b
ci: bump cachix/cachix-action from 15 to 16 (#703)
Bumps [cachix/cachix-action](https://github.com/cachix/cachix-action) from 15 to 16.
- [Release notes](https://github.com/cachix/cachix-action/releases)
- [Commits](https://github.com/cachix/cachix-action/compare/v15...v16)

---
updated-dependencies:
- dependency-name: cachix/cachix-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-10 21:37:32 +00:00
28b48565f0
ci: update typos config 2025-03-10 12:03:48 +03:00
Nikita
3c52dbfd72
dashboard/alpha: configure with nix (#699)
Co-authored-by: raf <me@notashelf.dev>
2025-03-10 08:56:50 +00:00
raf
dd281b78e5
neovim/init: add API for autocmds and autogroups (#656) 2025-03-10 08:46:07 +00:00
Ching Pei Yang
9f276a0c5f
languages/rust: fix unused lsp settings option (#641)
Co-authored-by: raf <me@notashelf.dev>
2025-03-10 08:43:34 +00:00
c8fd6204d0
languages/nix: fully deprecate nixpkgs-fmt 2025-03-09 21:55:04 +03:00
6576509cd5
docs: fix typo in project README
I should hire someone to proofread my writing...
2025-03-09 02:38:15 +03:00
Soliprem
c3b9c979ee
lsp/otter: fix assertion (#696)
* otter: change assert into a warning

* otter: update source and warning
2025-03-07 19:59:28 +00:00
414c92276e
pins: fix github-nvim-theme repository type 2025-03-07 13:51:54 +03:00
Erwin de Vries
4bf2bc9db6
theme/supported-themes: add github-nvim-theme (#688) 2025-03-06 20:53:33 +00:00
Theodor Björkman
4648c3b28f
utility/harpoon: init 2025-03-06 14:40:57 +00:00
alfarel
0e00c41a42 docs/release-notes: fix missing colons and periods
Also fixes a misaligned contributor name.
2025-03-05 03:13:40 +03:00
alfarel
449b943b95 completion/blink-cmp: option to enable friendly-snippets
Just adds it to the environment,
`blink-cmp` will pick up on it automatically.
2025-03-05 03:13:40 +03:00
alfarel
9e35fd8d02 completion/blink-cmp: blink sources options
Use a submodule to allow arbitrary source additions.
Automatically load sources that are enabled.
Automatically add enabled sources via blink-cmp setupOpts.
Prepopulate with a few basic sources, disabled by default.
2025-03-05 03:13:40 +03:00
alfarel
a5d7313abb utility/direnv-vim: init 2025-03-05 03:13:40 +03:00
alfarel
9209a9da37 utility/nix-develop: init 2025-03-05 03:13:40 +03:00
alfarel
85ca2bc11f utility/mkdir-nvim: init 2025-03-05 03:13:40 +03:00
27978c7186
session/nvim-session-manager: fix option descriptions; more explicit library inherits 2025-03-04 23:33:50 +03:00
TheColorman
d12846211b session/nvim-session-manager: fix autoload_mode type
Fixes `Error detected while processing VimEnter Autocommands for "*"` by
using an enum type for "autoload_mode" instead of a string
2025-03-04 23:17:33 +03:00
raf
f24189f1d2
utility/yazi-nvim: add missing dependency (snacks.nvim) (#681)
`:checkhealth yazi` was warning about it. Project `README` recently
 added it to the requirements.
2025-03-02 20:53:56 +03:00
MaxMur
6e35b04e74
languages/yaml: fix enableLSP/enableTreesitter defaults (#680) 2025-03-02 20:51:54 +03:00
alfarel
60ebec1956 utility/yazi-nvim: add missing dependency (snacks.nvim)
`:checkhealth yazi` was warning about it.
Project `README` recently added it to the requirements.
2025-03-02 12:34:44 -05:00
MaxMur
0fdfb9bf3b
languages/yaml: Init (#676) 2025-03-02 13:59:32 +00:00
raf
749cc793e3
plugins/nvim-docs-view: fix default mappings (#677) 2025-03-01 16:54:51 +03:00
Adam Szalkowski
3bf7abd6c9 plugins/nvim-docs-view: fix default mappings (#675) 2025-03-01 14:49:17 +01:00
08be38ab06
docs: update release notes 2025-02-28 03:34:16 +03:00
a3f650e114
ui/illuminate: move to setupOpts format 2025-02-28 03:34:03 +03:00
a4ef5e0f8c
pins: bump vim-illuminate 2025-02-28 03:32:53 +03:00
40 changed files with 1087 additions and 295 deletions

View file

@ -14,7 +14,7 @@ indent_style = space
indent_size = 2 indent_size = 2
trim_trailing_whitespace = false trim_trailing_whitespace = false
[*.{js,json,nix,yml,yaml}] [*.{js,json,nix,yml,yaml,toml}]
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
tab_width = 2 tab_width = 2

2
.github/README.md vendored
View file

@ -237,7 +237,7 @@ customizability of plugin inputs, which is one of our primary features.
an imperative path (e.g., `~/.config/nvim`) for my Neovim configuration instead an imperative path (e.g., `~/.config/nvim`) for my Neovim configuration instead
of a configuration generated from Nix? of a configuration generated from Nix?
**A**: Yes! Add `"~/.config.nvim"` to `vim.additionalRuntimePaths = [ ... ]` and **A**: Yes! Add `"~/.config/nvim"` to `vim.additionalRuntimePaths = [ ... ]` and
any plugins you want to load to `vim.startPlugins`. This will load your any plugins you want to load to `vim.startPlugins`. This will load your
configuration from `~/.config/nvim`. You may still use `vim.*` to modify configuration from `~/.config/nvim`. You may still use `vim.*` to modify
Neovim's behaviour with Nix. Neovim's behaviour with Nix.

11
.github/typos.toml vendored
View file

@ -1,5 +1,10 @@
default.extend-ignore-words-re = ["(?i)(noice)", "befores", "annote", "viw"] files.extend-exclude = ["npins/sources.json"]
files.extend-exclude = [ default.extend-ignore-words-re = [
"npins/sources.json" "(?i)(noice)",
"befores",
"annote",
"viw",
"BA", # somehow "BANanaD3V" is valid, but BA is not...
] ]

View file

@ -36,7 +36,7 @@ jobs:
- name: Install Nix - name: Install Nix
uses: DeterminateSystems/nix-installer-action@main uses: DeterminateSystems/nix-installer-action@main
- uses: cachix/cachix-action@v15 - uses: cachix/cachix-action@v16
with: with:
authToken: ${{ secrets.CACHIX_TOKEN }} authToken: ${{ secrets.CACHIX_TOKEN }}
extraPullNames: nix-community extraPullNames: nix-community

View file

@ -3,7 +3,9 @@
## Breaking changes ## Breaking changes
- `git-conflict` keybinds are now prefixed with `<leader>` to avoid conflicting - `git-conflict` keybinds are now prefixed with `<leader>` to avoid conflicting
with builtins with builtins.
- `alpha` is now configured with nix, default config removed.
[NotAShelf](https://github.com/notashelf): [NotAShelf](https://github.com/notashelf):
@ -18,7 +20,7 @@
- Add a search widget to the options page in the nvf manual. - Add a search widget to the options page in the nvf manual.
- Add [render-markdown.nvim] under - Add [render-markdown.nvim] under
`languages.markdown.extensions.render-markdown-nvim` `languages.markdown.extensions.render-markdown-nvim`.
- Implement [](#opt-vim.git.gitsigns.setupOpts) for user-specified setup table - Implement [](#opt-vim.git.gitsigns.setupOpts) for user-specified setup table
in gitsigns configuration. in gitsigns configuration.
@ -52,6 +54,14 @@
- Add [yazi.nvim] as a companion plugin for Yazi, the terminal file manager. - Add [yazi.nvim] as a companion plugin for Yazi, the terminal file manager.
- Add [](#opt-vim.autocmds) and [](#opt-vim.augroups) to allow declaring
autocommands via Nix.
- Fix plugin `setupOpts` for yanky.nvim and assert if shada is configured as a
backend while shada is disabled in Neovim options.
- Add [yazi.nvim] as a companion plugin for Yazi, the terminal file manager.
[amadaluzia](https://github.com/amadaluzia): [amadaluzia](https://github.com/amadaluzia):
[haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim [haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim
@ -62,7 +72,7 @@
[blink.cmp]: https://github.com/saghen/blink.cmp [blink.cmp]: https://github.com/saghen/blink.cmp
- Add [blink.cmp] support - Add [blink.cmp] support.
[diniamo](https://github.com/diniamo): [diniamo](https://github.com/diniamo):
@ -76,8 +86,8 @@
[aerial.nvim]: (https://github.com/stevearc/aerial.nvim) [aerial.nvim]: (https://github.com/stevearc/aerial.nvim)
[nvim-ufo]: (https://github.com/kevinhwang91/nvim-ufo) [nvim-ufo]: (https://github.com/kevinhwang91/nvim-ufo)
- Add [aerial.nvim] - Add [aerial.nvim].
- Add [nvim-ufo] - Add [nvim-ufo].
[LilleAila](https://github.com/LilleAila): [LilleAila](https://github.com/LilleAila):
@ -149,8 +159,10 @@
[thamenato](https://github.com/thamenato): [thamenato](https://github.com/thamenato):
[ruff]: (https://github.com/astral-sh/ruff) [ruff]: (https://github.com/astral-sh/ruff)
[cue]: (https://cuelang.org/)
- Add [ruff] as a formatter option in `vim.languages.python.format.type`. - Add [ruff] as a formatter option in `vim.languages.python.format.type`.
- Add [cue] support under `vim.languages.cue`.
[ARCIII](https://github.com/ArmandoCIII): [ARCIII](https://github.com/ArmandoCIII):
@ -160,7 +172,7 @@
Inspiration from `vim.languages.clang.dap` implementation. Inspiration from `vim.languages.clang.dap` implementation.
- Add [leetcode.nvim] plugin under `vim.utility.leetcode-nvim`. - Add [leetcode.nvim] plugin under `vim.utility.leetcode-nvim`.
[nezia1](https://github.com/nezia1) [nezia1](https://github.com/nezia1):
- Add support for [nixd](https://github.com/nix-community/nixd) language server. - Add support for [nixd](https://github.com/nix-community/nixd) language server.
@ -170,23 +182,73 @@
available plugins, under `vim.utility.multicursors`. available plugins, under `vim.utility.multicursors`.
- Add [hydra.nvim](https://github.com/nvimtools/hydra.nvim) as dependency for - Add [hydra.nvim](https://github.com/nvimtools/hydra.nvim) as dependency for
`multicursors.nvim` and lazy loads by default. `multicursors.nvim` and lazy loads by default.
[folospior](https://github.com/folospior)
[folospior](https://github.com/folospior):
- Fix plugin name for lsp/lspkind. - Fix plugin name for lsp/lspkind.
[iynaix](https://github.com/iynaix) - Move `vim-illuminate` to `setupOpts format`
[iynaix](https://github.com/iynaix):
- Add lsp options support for [nixd](https://github.com/nix-community/nixd) - Add lsp options support for [nixd](https://github.com/nix-community/nixd)
language server. language server.
[Mr-Helpful](https://github.com/Mr-Helpful) [Mr-Helpful](https://github.com/Mr-Helpful):
- Corrects pin names used for nvim themes - Corrects pin names used for nvim themes.
[Libadoxon](https://github.com/Libadoxon) [Libadoxon](https://github.com/Libadoxon):
- Add [git-conflict](https://github.com/akinsho/git-conflict.nvim) plugin for - Add [git-conflict](https://github.com/akinsho/git-conflict.nvim) plugin for
resolving git conflicts resolving git conflicts.
- Add formatters for go: [gofmt](https://go.dev/blog/gofmt), - Add formatters for go: [gofmt](https://go.dev/blog/gofmt),
[golines](https://github.com/segmentio/golines) and [golines](https://github.com/segmentio/golines) and
[gofumpt](https://github.com/mvdan/gofumpt) [gofumpt](https://github.com/mvdan/gofumpt).
[UltraGhostie](https://github.com/UltraGhostie)
- Add [harpoon](https://github.com/ThePrimeagen/harpoon) plugin for navigation
[MaxMur](https://github.com/TheMaxMur):
- Add YAML support under `vim.languages.yaml`.
[alfarel](https://github.com/alfarelcynthesis):
- Add missing `yazi.nvim` dependency (`snacks.nvim`).
- Add [mkdir.nvim](https://github.com/jghauser/mkdir.nvim) plugin for automatic
creation of parent directories when editing a nested file.
- Add [nix-develop.nvim](https://github.com/figsoda/nix-develop.nvim) plugin for
in-neovim `nix develop`, `nix shell` and more.
- Add [direnv.vim](https://github.com/direnv/direnv.vim) plugin for automatic
syncing of nvim shell environment with direnv's.
- Add [blink.cmp] source options and some default-disabled sources.
- Add [blink.cmp] option to add
[friendly-snippets](https://github.com/rafamadriz/friendly-snippets) so
blink.cmp can source snippets from it.
[TheColorman](https://github.com/TheColorman):
- Fix plugin `setupOpts` for `neovim-session-manager` having an invalid value
for `autoload_mode`.
[esdevries](https://github.com/esdevries):
[projekt0n/github-nvim-theme]: https://github.com/projekt0n/github-nvim-theme
- Add `github-nvim-theme` theme from [projekt0n/github-nvim-theme].
[BANanaD3V](https://github.com/BANanaD3V):
- `alpha` is now configured with nix.
[viicslen](https://github.com/viicslen):
- Add `intelephense` language server support under
`vim.languages.php.lsp.server`
[Butzist](https://github.com/butzist):
- Add Helm chart support under `vim.languages.helm`.

View file

@ -0,0 +1,185 @@
{
config,
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.lists) filter;
inherit (lib.strings) optionalString;
inherit (lib.types) nullOr submodule listOf str bool;
inherit (lib.nvim.types) luaInline;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryAfter;
autocommandType = submodule {
options = {
enable =
mkEnableOption ""
// {
default = true;
description = "Whether to enable this autocommand";
};
event = mkOption {
type = nullOr (listOf str);
default = null;
example = ["BufRead" "BufWritePre"];
description = "The event(s) that trigger the autocommand.";
};
pattern = mkOption {
type = nullOr (listOf str);
default = null;
example = ["*.lua" "*.vim"];
description = "The file pattern(s) that determine when the autocommand applies).";
};
callback = mkOption {
type = nullOr luaInline;
default = null;
example = literalExpression ''
mkLuaInline '''
function()
print("Saving a Lua file...")
end
''''
'';
description = "The file pattern(s) that determine when the autocommand applies.";
};
command = mkOption {
type = nullOr str;
default = null;
description = "Vim command string instead of a Lua function.";
};
group = mkOption {
type = nullOr str;
default = null;
example = "MyAutoCmdGroup";
description = "An optional autocommand group to manage related autocommands.";
};
desc = mkOption {
type = nullOr str;
default = null;
example = "Notify when saving a Lua file";
description = "A description for the autocommand.";
};
once = mkOption {
type = bool;
default = false;
description = "Whether autocommand run only once.";
};
nested = mkOption {
type = bool;
default = false;
description = "Whether to allow nested autocommands to trigger.";
};
};
};
autogroupType = submodule {
options = {
enable =
mkEnableOption ""
// {
default = true;
description = "Whether to enable this autogroup";
};
name = mkOption {
type = str;
example = "MyAutoCmdGroup";
description = "The name of the autocommand group.";
};
clear = mkOption {
type = bool;
default = true;
description = ''
Whether to clear existing autocommands in this group before defining new ones.
This helps avoid duplicate autocommands.
'';
};
};
};
cfg = config.vim;
in {
options.vim = {
augroups = mkOption {
type = listOf autogroupType;
default = [];
description = ''
A list of Neovim autogroups, which are used to organize and manage related
autocommands together. Groups allow multiple autocommands to be cleared
or redefined collectively, preventing duplicate definitions.
Each autogroup consists of a name, a boolean indicating whether to clear
existing autocommands, and a list of associated autocommands.
'';
};
autocmds = mkOption {
type = listOf autocommandType;
default = [];
description = ''
A list of Neovim autocommands to be registered.
Each entry defines an autocommand, specifying events, patterns, optional
callbacks, commands, groups, and execution settings.
'';
};
};
config = {
vim = let
enabledAutocommands = filter (cmd: cmd.enable) cfg.autocmds;
enabledAutogroups = filter (au: au.enable) cfg.augroups;
in {
luaConfigRC = {
augroups = entryAfter ["pluginConfigs"] (optionalString (enabledAutogroups != []) ''
local nvf_autogroups = {}
for _, group in ipairs(${toLuaObject enabledAutogroups}) do
if group.name then
nvf_autogroups[group.name] = { clear = group.clear }
end
end
for group_name, options in pairs(nvf_autogroups) do
vim.api.nvim_create_augroup(group_name, options)
end
'');
autocmds = entryAfter ["pluginConfigs"] (optionalString (enabledAutocommands != []) ''
local nvf_autocommands = ${toLuaObject enabledAutocommands}
for _, autocmd in ipairs(nvf_autocommands) do
vim.api.nvim_create_autocmd(
autocmd.event,
{
group = autocmd.group,
pattern = autocmd.pattern,
buffer = autocmd.buffer,
desc = autocmd.desc,
callback = autocmd.callback,
command = autocmd.command,
once = autocmd.once,
nested = autocmd.nested
}
)
end
'');
};
};
assertions = [
{
assertion = builtins.all (cmd: (cmd.command == null || cmd.callback == null)) cfg.autocmds;
message = "An autocommand cannot have both 'command' and 'callback' defined at the same time.";
}
];
};
}

View file

@ -1,5 +1,6 @@
{ {
imports = [ imports = [
./autocmds.nix
./basic.nix ./basic.nix
./debug.nix ./debug.nix
./highlight.nix ./highlight.nix

View file

@ -2,7 +2,7 @@
inherit (lib.options) mkEnableOption mkOption literalMD; inherit (lib.options) mkEnableOption mkOption literalMD;
inherit (lib.types) listOf str either attrsOf submodule enum anything int nullOr; inherit (lib.types) listOf str either attrsOf submodule enum anything int nullOr;
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.types) mkPluginSetupOption luaInline; inherit (lib.nvim.types) mkPluginSetupOption luaInline pluginType;
inherit (lib.nvim.binds) mkMappingOption; inherit (lib.nvim.binds) mkMappingOption;
inherit (lib.nvim.config) mkBool; inherit (lib.nvim.config) mkBool;
@ -118,5 +118,66 @@ in {
scrollDocsUp = mkMappingOption "Scroll docs up [blink.cmp]" "<C-d>"; scrollDocsUp = mkMappingOption "Scroll docs up [blink.cmp]" "<C-d>";
scrollDocsDown = mkMappingOption "Scroll docs down [blink.cmp]" "<C-f>"; scrollDocsDown = mkMappingOption "Scroll docs down [blink.cmp]" "<C-f>";
}; };
sourcePlugins = let
sourcePluginType = submodule {
options = {
package = mkOption {
type = pluginType;
description = ''
`blink-cmp` source plugin package.
'';
};
module = mkOption {
type = str;
description = ''
Value of {option}`vim.autocomplete.blink-cmp.setupOpts.sources.providers.<name>.module`.
Should be present in the source's documentation.
'';
};
enable = mkEnableOption "this source";
};
};
in
mkOption {
type = submodule {
freeformType = attrsOf sourcePluginType;
options = let
defaultSourcePluginOption = name: package: module: {
package = mkOption {
type = pluginType;
default = package;
description = ''
`blink-cmp` ${name} source plugin package.
'';
};
module = mkOption {
type = str;
default = module;
description = ''
Value of {option}`vim.autocomplete.blink-cmp.setupOpts.sources.providers.${name}.module`.
'';
};
enable = mkEnableOption "${name} source";
};
in {
# emoji completion after :
emoji = defaultSourcePluginOption "emoji" "blink-emoji-nvim" "blink-emoji";
# spelling suggestions as completions
spell = defaultSourcePluginOption "spell" "blink-cmp-spell" "blink-cmp-spell";
# words from nearby files
ripgrep = defaultSourcePluginOption "ripgrep" "blink-ripgrep-nvim" "blink-ripgrep";
};
};
default = {};
description = ''
`blink.cmp` sources.
Attribute names must be source names used in {option}`vim.autocomplete.blink-cmp.setupOpts.sources.default`.
'';
};
friendly-snippets.enable = mkEnableOption "friendly-snippets for blink to source from automatically";
}; };
} }

View file

@ -6,6 +6,8 @@
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.strings) optionalString; inherit (lib.strings) optionalString;
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
inherit (lib.attrsets) attrValues filterAttrs;
inherit (lib.lists) map optional;
inherit (lib.nvim.lua) toLuaObject; inherit (lib.nvim.lua) toLuaObject;
inherit (builtins) concatStringsSep typeOf tryEval attrNames mapAttrs; inherit (builtins) concatStringsSep typeOf tryEval attrNames mapAttrs;
@ -19,9 +21,12 @@
else if (plugin ? pname && (tryEval plugin.pname).success) else if (plugin ? pname && (tryEval plugin.pname).success)
then plugin.pname then plugin.pname
else plugin.name; else plugin.name;
enabledBlinkSources = filterAttrs (_source: definition: definition.enable) cfg.sourcePlugins;
blinkSourcePlugins = map (definition: definition.package) (attrValues enabledBlinkSources);
in { in {
vim = mkIf cfg.enable { vim = mkIf cfg.enable {
startPlugins = ["blink-compat"]; startPlugins = ["blink-compat"] ++ blinkSourcePlugins ++ (optional cfg.friendly-snippets.enable "friendly-snippets");
lazy.plugins = { lazy.plugins = {
blink-cmp = { blink-cmp = {
package = "blink-cmp"; package = "blink-cmp";
@ -32,12 +37,14 @@ in {
# #
# event = ["InsertEnter" "CmdlineEnter"]; # event = ["InsertEnter" "CmdlineEnter"];
after = '' after =
${optionalString config.vim.lazy.enable # lua
(concatStringsSep "\n" (map ''
(package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})") ${optionalString config.vim.lazy.enable
cmpCfg.sourcePlugins))} (concatStringsSep "\n" (map
''; (package: "require('lz.n').trigger_load(${toLuaObject (getPluginName package)})")
cmpCfg.sourcePlugins))}
'';
}; };
}; };
@ -45,13 +52,26 @@ in {
enableSharedCmpSources = true; enableSharedCmpSources = true;
blink-cmp.setupOpts = { blink-cmp.setupOpts = {
sources = { sources = {
default = ["lsp" "path" "snippets" "buffer"] ++ (attrNames cmpCfg.sources); default =
[
"lsp"
"path"
"snippets"
"buffer"
]
++ (attrNames cmpCfg.sources)
++ (attrNames enabledBlinkSources);
providers = providers =
mapAttrs (name: _: { mapAttrs (name: _: {
inherit name; inherit name;
module = "blink.compat.source"; module = "blink.compat.source";
}) })
cmpCfg.sources; cmpCfg.sources
// (mapAttrs (name: definition: {
inherit name;
inherit (definition) module;
})
enabledBlinkSources);
}; };
snippets = mkIf config.vim.snippets.luasnip.enable { snippets = mkIf config.vim.snippets.luasnip.enable {
preset = "luasnip"; preset = "luasnip";
@ -67,16 +87,18 @@ in {
${mappings.next} = [ ${mappings.next} = [
"select_next" "select_next"
"snippet_forward" "snippet_forward"
(mkLuaInline '' (mkLuaInline
function(cmp) # lua
local line, col = unpack(vim.api.nvim_win_get_cursor(0)) ''
has_words_before = col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil function(cmp)
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
has_words_before = col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
if has_words_before then if has_words_before then
return cmp.show() return cmp.show()
end
end end
end '')
'')
"fallback" "fallback"
]; ];
${mappings.previous} = [ ${mappings.previous} = [

View file

@ -1,7 +1,23 @@
{lib, ...}: let {lib, ...}: let
inherit (lib.options) mkEnableOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) listOf attrsOf anything nullOr enum;
in { in {
options.vim.dashboard.alpha = { options.vim.dashboard.alpha = {
enable = mkEnableOption "fast and fully programmable greeter for neovim [alpha.mvim]"; enable = mkEnableOption "fast and fully programmable greeter for neovim [alpha.nvim]";
theme = mkOption {
type = nullOr (enum ["dashboard" "startify" "theta"]);
default = "dashboard";
description = "Alpha default theme to use";
};
layout = mkOption {
type = listOf (attrsOf anything);
default = [];
description = "Alpha dashboard layout";
};
opts = mkOption {
type = attrsOf anything;
default = {};
description = "Optional global options";
};
}; };
} }

View file

@ -5,8 +5,11 @@
}: let }: let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.dashboard.alpha; cfg = config.vim.dashboard.alpha;
themeDefined = cfg.theme != null;
layoutDefined = cfg.layout != [];
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim.startPlugins = [ vim.startPlugins = [
@ -14,207 +17,30 @@ in {
"nvim-web-devicons" "nvim-web-devicons"
]; ];
# the entire credit for this dashboard configuration to https://github.com/Rishabh672003 vim.pluginRC.alpha = let
# honestly, excellent work setupOpts =
vim.pluginRC.alpha = entryAnywhere '' if themeDefined
local alpha = require("alpha") then lib.generators.mkLuaInline "require'alpha.themes.${cfg.theme}'.config"
local plenary_path = require("plenary.path") else {
local dashboard = require("alpha.themes.dashboard") inherit (cfg) layout opts;
local cdir = vim.fn.getcwd() };
local if_nil = vim.F.if_nil in ''
require('alpha').setup(${toLuaObject setupOpts})
local nvim_web_devicons = {
enabled = true,
highlight = true,
}
local function get_extension(fn)
local match = fn:match("^.+(%..+)$")
local ext = ""
if match ~= nil then
ext = match:sub(2)
end
return ext
end
local function icon(fn)
local nwd = require("nvim-web-devicons")
local ext = get_extension(fn)
return nwd.get_icon(fn, ext, { default = true })
end
local function file_button(fn, sc, short_fn)
short_fn = short_fn or fn
local ico_txt
local fb_hl = {}
if nvim_web_devicons.enabled then
local ico, hl = icon(fn)
local hl_option_type = type(nvim_web_devicons.highlight)
if hl_option_type == "boolean" then
if hl and nvim_web_devicons.highlight then
table.insert(fb_hl, { hl, 0, 3 })
end
end
if hl_option_type == "string" then
table.insert(fb_hl, { nvim_web_devicons.highlight, 0, 3 })
end
ico_txt = ico .. " "
else
ico_txt = ""
end
local file_button_el = dashboard.button(sc, ico_txt .. short_fn, "<cmd>e " .. fn .. " <CR>")
local fn_start = short_fn:match(".*[/\\]")
if fn_start ~= nil then
table.insert(fb_hl, { "Comment", #ico_txt - 2, #fn_start + #ico_txt })
end
file_button_el.opts.hl = fb_hl
return file_button_el
end
local default_mru_ignore = { "gitcommit" }
local mru_opts = {
ignore = function(path, ext)
return (string.find(path, "COMMIT_EDITMSG")) or (vim.tbl_contains(default_mru_ignore, ext))
end,
}
--- @param start number
--- @param cwd string optional
--- @param items_number number optional number of items to generate, default = 10
local function mru(start, cwd, items_number, opts)
opts = opts or mru_opts
items_number = if_nil(items_number, 15)
local oldfiles = {}
for _, v in pairs(vim.v.oldfiles) do
if #oldfiles == items_number then
break
end
local cwd_cond
if not cwd then
cwd_cond = true
else
cwd_cond = vim.startswith(v, cwd)
end
local ignore = (opts.ignore and opts.ignore(v, get_extension(v))) or false
if (vim.fn.filereadable(v) == 1) and cwd_cond and not ignore then
oldfiles[#oldfiles + 1] = v
end
end
local target_width = 35
local tbl = {}
for i, fn in ipairs(oldfiles) do
local short_fn
if cwd then
short_fn = vim.fn.fnamemodify(fn, ":.")
else
short_fn = vim.fn.fnamemodify(fn, ":~")
end
if #short_fn > target_width then
short_fn = plenary_path.new(short_fn):shorten(1, { -2, -1 })
if #short_fn > target_width then
short_fn = plenary_path.new(short_fn):shorten(1, { -1 })
end
end
local shortcut = tostring(i + start - 1)
local file_button_el = file_button(fn, shortcut, short_fn)
tbl[i] = file_button_el
end
return {
type = "group",
val = tbl,
opts = {},
}
end
local default_header = {
type = "text",
val = {
[[ ]],
[[ ]],
[[ ]],
[[ ]],
[[ ]],
-- [[ __ ]],
-- [[ ___ ___ ___ __ __ /\_\ ___ ___ ]],
-- [[ / _ `\ / __`\ / __`\/\ \/\ \\/\ \ / __` __`\ ]],
-- [[/\ \/\ \/\ __//\ \_\ \ \ \_/ |\ \ \/\ \/\ \/\ \ ]],
-- [[\ \_\ \_\ \____\ \____/\ \___/ \ \_\ \_\ \_\ \_\]],
-- [[ \/_/\/_/\/____/\/___/ \/__/ \/_/\/_/\/_/\/_/]],
},
opts = {
position = "center",
hl = "Type",
-- wrap = "overflow";
},
}
local section_mru = {
type = "group",
val = {
{
type = "text",
val = "Recent files",
opts = {
hl = "SpecialComment",
shrink_margin = false,
position = "center",
},
},
{ type = "padding", val = 1 },
{
type = "group",
val = function()
return { mru(0, cdir) }
end,
opts = { shrink_margin = false },
},
},
}
local buttons = {
type = "group",
val = {
{ type = "text", val = "Quick links", opts = { hl = "SpecialComment", position = "center" } },
{ type = "padding", val = 1 },
-- TODO: buttons should be added based on whether or not the relevant plugin is available
dashboard.button("e", " New file", "<cmd>ene<CR>"), -- available all the time
dashboard.button("SPC F", "󰈞 Find file"), -- telescope
dashboard.button("SPC ff", "󰊄 Live grep"), -- telescope
dashboard.button("SPC p", " Projects"), -- any project
dashboard.button("q", "󰅚 Quit", "<cmd>qa<CR>"), -- available all the time
},
position = "center",
}
local config = {
layout = {
{ type = "padding", val = 2 },
default_header,
{ type = "padding", val = 2 },
section_mru,
{ type = "padding", val = 2 },
buttons,
},
opts = {
margin = 5,
setup = function()
vim.cmd([[
autocmd alpha_temp DirChanged * lua require('alpha').redraw()
]])
end,
},
}
alpha.setup(config)
''; '';
assertions = [
{
assertion = themeDefined || layoutDefined;
message = ''
One of 'theme' or 'layout' should be defined in Alpha configuration.
'';
}
{
assertion = !(themeDefined && layoutDefined);
message = ''
'theme' and 'layout' cannot be defined at the same time.
'';
}
];
}; };
} }

View file

@ -0,0 +1,51 @@
{
pkgs,
config,
lib,
...
}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.types) package;
inherit (lib.nvim.types) mkGrammarOption;
cfg = config.vim.languages.cue;
in {
options.vim.languages.cue = {
enable = mkEnableOption "CUE language support";
treesitter = {
enable = mkEnableOption "CUE treesitter" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "cue";
};
lsp = {
enable = mkEnableOption "CUE LSP support" // {default = config.vim.languages.enableLSP;};
package = mkOption {
type = package;
default = pkgs.cue;
description = "cue lsp implementation";
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.cue-lsp = ''
lspconfig.cue.setup {
capabilities = capabilities,
on_attach = default_on_attach,
cmd = {"${cfg.lsp.package}/bin/cue", "lsp"},
}
'';
})
]);
}

View file

@ -5,6 +5,7 @@ in {
./asm.nix ./asm.nix
./astro.nix ./astro.nix
./bash.nix ./bash.nix
./cue.nix
./dart.nix ./dart.nix
./clang.nix ./clang.nix
./css.nix ./css.nix
@ -12,6 +13,7 @@ in {
./gleam.nix ./gleam.nix
./go.nix ./go.nix
./hcl.nix ./hcl.nix
./helm.nix
./kotlin.nix ./kotlin.nix
./html.nix ./html.nix
./haskell.nix ./haskell.nix
@ -39,6 +41,7 @@ in {
./nu.nix ./nu.nix
./odin.nix ./odin.nix
./wgsl.nix ./wgsl.nix
./yaml.nix
./ruby.nix ./ruby.nix
]; ];

View file

@ -0,0 +1,89 @@
{
pkgs,
config,
lib,
...
}: let
inherit (builtins) attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua;
cfg = config.vim.languages.helm;
yamlCfg = config.vim.languages.yaml;
helmCmd =
if isList cfg.lsp.package
then cfg.lsp.package
else ["${cfg.lsp.package}/bin/helm_ls" "serve"];
yamlCmd =
if isList yamlCfg.lsp.package
then builtins.elemAt yamlCfg.lsp.package 0
else "${yamlCfg.lsp.package}/bin/yaml-language-server";
defaultServer = "helm-ls";
servers = {
helm-ls = {
package = pkgs.helm-ls;
lspConfig = ''
lspconfig.helm_ls.setup {
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${expToLua helmCmd},
settings = {
['helm-ls'] = {
yamlls = {
path = "${yamlCmd}"
}
}
}
}
'';
};
};
in {
options.vim.languages.helm = {
enable = mkEnableOption "Helm language support";
treesitter = {
enable = mkEnableOption "Helm treesitter" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "helm";
};
lsp = {
enable = mkEnableOption "Helm LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption {
description = "Helm LSP server to use";
type = enum (attrNames servers);
default = defaultServer;
};
package = mkOption {
description = "Helm LSP server package";
type = either package (listOf str);
default = servers.${cfg.lsp.server}.package;
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.helm-lsp = servers.${cfg.lsp.server}.lspConfig;
})
{
# Enables filetype detection
vim.startPlugins = [pkgs.vimPlugins.vim-helm];
}
]);
}

View file

@ -121,8 +121,6 @@
) )
''; '';
}; };
nixpkgs-fmt = null; # removed
}; };
defaultDiagnosticsProvider = ["statix" "deadnix"]; defaultDiagnosticsProvider = ["statix" "deadnix"];
@ -219,7 +217,6 @@ in {
${concatStringsSep ", " (attrNames formats)} ${concatStringsSep ", " (attrNames formats)}
''; '';
} }
{ {
assertion = cfg.lsp.server != "rnix"; assertion = cfg.lsp.server != "rnix";
message = '' message = ''

View file

@ -64,6 +64,26 @@
} }
''; '';
}; };
intelephense = {
package = pkgs.intelephense;
lspConfig = ''
lspconfig.intelephense.setup{
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else ''
{
"${getExe cfg.lsp.package}",
"--stdio"
},
''
}
}
'';
};
}; };
in { in {
options.vim.languages.php = { options.vim.languages.php = {

View file

@ -62,6 +62,15 @@ in {
description = "Options to pass to rust analyzer"; description = "Options to pass to rust analyzer";
type = str; type = str;
default = ""; default = "";
example = ''
['rust-analyzer'] = {
cargo = {allFeature = true},
checkOnSave = true,
procMacro = {
enable = true,
},
},
'';
}; };
}; };
@ -142,6 +151,9 @@ in {
then expToLua cfg.lsp.package then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/rust-analyzer"}'' else ''{"${cfg.lsp.package}/bin/rust-analyzer"}''
}, },
default_settings = {
${cfg.lsp.opts}
},
on_attach = function(client, bufnr) on_attach = function(client, bufnr)
default_on_attach(client, bufnr) default_on_attach(client, bufnr)
local opts = { noremap=true, silent=true, buffer = bufnr } local opts = { noremap=true, silent=true, buffer = bufnr }

View file

@ -0,0 +1,85 @@
{
pkgs,
config,
lib,
...
}: let
inherit (builtins) attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.lists) isList;
inherit (lib.types) enum either listOf package str;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua;
cfg = config.vim.languages.yaml;
onAttach =
if config.vim.languages.helm.lsp.enable
then ''
on_attach = function(client, bufnr)
local filetype = vim.bo[bufnr].filetype
if filetype == "helm" then
client.stop()
end
end''
else "on_attach = default_on_attach";
defaultServer = "yaml-language-server";
servers = {
yaml-language-server = {
package = pkgs.nodePackages.yaml-language-server;
lspConfig = ''
lspconfig.yamlls.setup {
capabilities = capabilities,
${onAttach},
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else ''{"${cfg.lsp.package}/bin/yaml-language-server", "--stdio"}''
},
}
'';
};
};
in {
options.vim.languages.yaml = {
enable = mkEnableOption "YAML language support";
treesitter = {
enable = mkEnableOption "YAML treesitter" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "yaml";
};
lsp = {
enable = mkEnableOption "YAML LSP support" // {default = config.vim.languages.enableLSP;};
server = mkOption {
type = enum (attrNames servers);
default = defaultServer;
description = "YAML LSP server to use";
};
package = mkOption {
type = either package (listOf str);
default = servers.${cfg.lsp.server}.package;
description = "YAML LSP server package";
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.yaml-lsp = servers.${cfg.lsp.server}.lspConfig;
})
]);
}

View file

@ -57,8 +57,8 @@ in {
}; };
mappings = { mappings = {
viewToggle = mkMappingOption "Open or close the docs view panel" "lvt"; viewToggle = mkMappingOption "Open or close the docs view panel" "<leader>lvt";
viewUpdate = mkMappingOption "Manually update the docs view panel" "lvu"; viewUpdate = mkMappingOption "Manually update the docs view panel" "<leader>lvu";
}; };
}; };
} }

View file

@ -15,13 +15,12 @@
mappings = addDescriptionsToMappings cfg.otter-nvim.mappings mappingDefinitions; mappings = addDescriptionsToMappings cfg.otter-nvim.mappings mappingDefinitions;
in { in {
config = mkIf (cfg.enable && cfg.otter-nvim.enable) { config = mkIf (cfg.enable && cfg.otter-nvim.enable) {
assertions = [ warnings = [
{ # TODO: remove warning when we update to nvim 0.11
assertion = !config.vim.utility.ccc.enable; (mkIf config.vim.utility.ccc.enable ''
message = '' ccc and otter occasionally have small conflicts that will disappear with nvim 0.11.
ccc and otter have a breaking conflict. It's been reported upstream. Until it's fixed, disable one of them In the meantime, otter handles it by throwing a warning, but both plugins will work.
''; '')
}
]; ];
vim = { vim = {
startPlugins = ["otter-nvim"]; startPlugins = ["otter-nvim"];

View file

@ -1,6 +1,10 @@
{lib, ...}: let {lib, ...}: let
inherit (lib.types) nullOr str bool; inherit (lib.options) mkOption mkEnableOption;
inherit (lib) mkEnableOption mkOption types mkRenamedOptionModule; inherit (lib.modules) mkRenamedOptionModule;
inherit (lib.strings) isString;
inherit (lib.types) nullOr str bool int enum listOf either;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.types) luaInline mkPluginSetupOption;
in { in {
imports = let imports = let
renameSetupOpt = oldPath: newPath: renameSetupOpt = oldPath: newPath:
@ -50,68 +54,100 @@ in {
usePicker = mkOption { usePicker = mkOption {
type = bool; type = bool;
default = true; default = true;
description = "Whether or not we should use dressing.nvim to build a session picker UI"; description = ''
Whether we should use `dressing.nvim` to build a session picker UI
'';
}; };
setupOpts = { setupOpts = mkPluginSetupOption "which-key" {
path_replacer = mkOption { path_replacer = mkOption {
type = types.str; type = str;
default = "__"; default = "__";
description = "The character to which the path separator will be replaced for session files"; description = ''
The character to which the path separator will be replaced for session files
'';
}; };
colon_replacer = mkOption { colon_replacer = mkOption {
type = types.str; type = str;
default = "++"; default = "++";
description = "The character to which the colon symbol will be replaced for session files"; description = ''
The character to which the colon symbol will be replaced for session files
'';
}; };
autoload_mode = mkOption { autoload_mode = mkOption {
type = types.enum ["Disabled" "CurrentDir" "LastSession"]; type = either (enum ["Disabled" "CurrentDir" "LastSession"]) luaInline;
# Variable 'sm' is defined in the pluginRC of nvim-session-manager. The
# definition is as follows: `local sm = require('session_manager.config')`
apply = val:
if isString val
then mkLuaInline "sm.AutoloadMode.${val}"
else val;
default = "LastSession"; default = "LastSession";
description = "Define what to do when Neovim is started without arguments. Possible values: Disabled, CurrentDir, LastSession"; description = ''
Define what to do when Neovim is started without arguments.
Takes either one of `"Disabled"`, `"CurrentDir"`, `"LastSession` in which case the value
will be inserted into `sm.AutoloadMode.<value>`, or an inline Lua value.
'';
}; };
max_path_length = mkOption { max_path_length = mkOption {
type = types.nullOr types.int; type = nullOr int;
default = 80; default = 80;
description = "Shorten the display path if length exceeds this threshold. Use 0 if don't want to shorten the path at all"; description = ''
Shorten the display path if length exceeds this threshold.
Use `0` if don't want to shorten the path at all
'';
}; };
autosave_last_session = mkOption { autosave_last_session = mkOption {
type = types.bool; type = bool;
default = true; default = true;
description = "Automatically save last session on exit and on session switch"; description = ''
Automatically save last session on exit and on session switch
'';
}; };
autosave_ignore_not_normal = mkOption { autosave_ignore_not_normal = mkOption {
type = types.bool; type = bool;
default = true; default = true;
description = "Plugin will not save a session when no buffers are opened, or all of them aren't writable or listed"; description = ''
Plugin will not save a session when no buffers are opened, or all of them are
not writable or listed
'';
}; };
autosave_ignore_dirs = mkOption { autosave_ignore_dirs = mkOption {
type = types.listOf types.str; type = listOf str;
default = []; default = [];
description = "A list of directories where the session will not be autosaved"; description = "A list of directories where the session will not be autosaved";
}; };
autosave_ignore_filetypes = mkOption { autosave_ignore_filetypes = mkOption {
type = types.listOf types.str; type = listOf str;
default = ["gitcommit"]; default = ["gitcommit"];
description = "All buffers of these file types will be closed before the session is saved"; description = ''
All buffers of these file types will be closed before the session is saved
'';
}; };
autosave_ignore_buftypes = mkOption { autosave_ignore_buftypes = mkOption {
type = types.listOf types.str; type = listOf str;
default = []; default = [];
description = "All buffers of these buffer types will be closed before the session is saved"; description = ''
All buffers of these buffer types will be closed before the session is saved
'';
}; };
autosave_only_in_session = mkOption { autosave_only_in_session = mkOption {
type = types.bool; type = bool;
default = false; default = false;
description = "Always autosaves session. If true, only autosaves after a session is active"; description = ''
Always autosaves session. If `true`, only autosaves after a session is active
'';
}; };
}; };
}; };

View file

@ -21,6 +21,17 @@
"codedark" "codedark"
"dracula" "dracula"
"everforest" "everforest"
"github_dark"
"github_light"
"github_dark_dimmed"
"github_dark_default"
"github_light_default"
"github_dark_high_contrast"
"github_light_high_contrast"
"github_dark_colorblind"
"github_light_colorblind"
"github_dark_tritanopia"
"github_light_tritanopia"
"gruvbox" "gruvbox"
"gruvbox_dark" "gruvbox_dark"
"gruvbox_light" "gruvbox_light"

View file

@ -195,4 +195,20 @@ in {
vim.cmd.colorscheme("nord") vim.cmd.colorscheme("nord")
''; '';
}; };
github = {
setup = {
style ? "dark",
transparent ? false,
...
}: ''
require('github-theme').setup({
options = {
transparent = ${boolToString transparent},
},
})
vim.cmd[[colorscheme github_${style}]]
'';
styles = ["dark" "light" "dark_dimmed" "dark_default" "light_default" "dark_high_contrast" "light_high_contrast" "dark_colorblind" "light_colorblind" "dark_tritanopia" "light_tritanopia"];
};
} }

View file

@ -4,22 +4,20 @@
... ...
}: let }: let
inherit (lib.modules) mkIf; inherit (lib.modules) mkIf;
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
cfg = config.vim.ui.illuminate; cfg = config.vim.ui.illuminate;
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim.startPlugins = ["vim-illuminate"]; vim = {
startPlugins = ["vim-illuminate"];
vim.pluginRC.vim-illuminate = entryAnywhere '' # vim-illuminate does not have a setup function. It is instead called 'configure'
require('illuminate').configure({ # and does what you expect from a setup function. Wild.
filetypes_denylist = { pluginRC.vim-illuminate = entryAnywhere ''
'dirvish', require('illuminate').configure(${toLuaObject cfg.setupOpts})
'fugitive', '';
'NvimTree', };
'TelescopePrompt',
},
})
'';
}; };
} }

View file

@ -1,7 +1,19 @@
{lib, ...}: let {lib, ...}: let
inherit (lib.options) mkEnableOption; inherit (lib.options) mkOption mkEnableOption;
inherit (lib.types) listOf str;
inherit (lib.nvim.types) mkPluginSetupOption;
in { in {
options.vim.ui.illuminate = { options.vim.ui.illuminate = {
enable = mkEnableOption "automatically highlight other uses of the word under the cursor [vim-illuminate]"; enable = mkEnableOption ''
automatically highlight other uses of the word under the cursor [vim-illuminate]
'';
setupOpts = mkPluginSetupOption "vim-illuminate" {
filetypes_denylist = mkOption {
type = listOf str;
default = ["dirvish" "fugitive" "NvimTree" "TelescopePrompt"];
description = "Filetypes to not illuminate, this overrides `filetypes_allowlist`";
};
};
}; };
} }

View file

@ -3,14 +3,18 @@
./binds ./binds
./ccc ./ccc
./diffview ./diffview
./direnv
./fzf-lua ./fzf-lua
./gestures ./gestures
./harpoon
./icon-picker ./icon-picker
./images ./images
./leetcode-nvim ./leetcode-nvim
./mkdir
./motion ./motion
./multicursors ./multicursors
./new-file-template ./new-file-template
./nix-develop
./outline ./outline
./preview ./preview
./surround ./surround

View file

@ -0,0 +1,13 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim.utility.direnv;
in {
vim = mkIf cfg.enable {
startPlugins = ["direnv-vim"];
};
}

View file

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

View file

@ -0,0 +1,5 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
in {
options.vim.utility.direnv.enable = mkEnableOption "syncing nvim shell environment with direnv's using `direnv.vim`";
}

View file

@ -0,0 +1,41 @@
{
options,
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.nvim.binds) pushDownDefault mkKeymap;
cfg = config.vim.navigation.harpoon;
keys = cfg.mappings;
inherit (options.vim.navigation.harpoon) mappings;
in {
config = mkIf cfg.enable {
vim = {
startPlugins = ["plenary-nvim"];
lazy.plugins.harpoon = {
package = "harpoon";
setupModule = "harpoon";
inherit (cfg) setupOpts;
cmd = ["Harpoon"];
keys = [
(mkKeymap "n" keys.markFile "<Cmd>lua require('harpoon'):list():add()<CR>" {desc = mappings.markFile.description;})
(mkKeymap "n" keys.listMarks "<Cmd>lua require('harpoon').ui:toggle_quick_menu(require('harpoon'):list())<CR>" {desc = mappings.listMarks.description;})
(mkKeymap "n" keys.file1 "<Cmd>lua require('harpoon'):list():select(1)<CR>" {desc = mappings.file1.description;})
(mkKeymap "n" keys.file2 "<Cmd>lua require('harpoon'):list():select(2)<CR>" {desc = mappings.file2.description;})
(mkKeymap "n" keys.file3 "<Cmd>lua require('harpoon'):list():select(3)<CR>" {desc = mappings.file3.description;})
(mkKeymap "n" keys.file4 "<Cmd>lua require('harpoon'):list():select(4)<CR>" {desc = mappings.file4.description;})
];
};
binds.whichKey.register = pushDownDefault {
"<leader>a" = "Harpoon Mark";
};
};
};
}

View file

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

View file

@ -0,0 +1,53 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) bool;
inherit (lib.nvim.binds) mkMappingOption;
inherit (lib.nvim.types) mkPluginSetupOption luaInline;
inherit (lib.generators) mkLuaInline;
in {
options.vim.navigation.harpoon = {
mappings = {
markFile = mkMappingOption "Mark file [Harpoon]" "<leader>a";
listMarks = mkMappingOption "List marked files [Harpoon]" "<C-e>";
file1 = mkMappingOption "Go to marked file 1 [Harpoon]" "<C-j>";
file2 = mkMappingOption "Go to marked file 2 [Harpoon]" "<C-k>";
file3 = mkMappingOption "Go to marked file 3 [Harpoon]" "<C-l>";
file4 = mkMappingOption "Go to marked file 4 [Harpoon]" "<C-;>";
};
enable = mkEnableOption "Quick bookmarks on keybinds [Harpoon]";
setupOpts = mkPluginSetupOption "Harpoon" {
defaults = {
save_on_toggle = mkOption {
type = bool;
default = false;
description = ''
Any time the ui menu is closed then we will save the
state back to the backing list, not to the fs
'';
};
sync_on_ui_close = mkOption {
type = bool;
default = false;
description = ''
Any time the ui menu is closed then the state of the
list will be sync'd back to the fs
'';
};
key = mkOption {
type = luaInline;
default = mkLuaInline ''
function()
return vim.loop.cwd()
end
'';
description = ''
How the out list key is looked up. This can be useful
when using worktrees and using git remote instead of file path
'';
};
};
};
};
}

View file

@ -0,0 +1,12 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim.utility.mkdir;
in {
vim = mkIf cfg.enable {
startPlugins = ["mkdir-nvim"];
};
}

View file

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

View file

@ -0,0 +1,7 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
in {
options.vim.utility.mkdir.enable = mkEnableOption ''
parent directory creation when editing a nested path that does not exist using `mkdir.nvim`
'';
}

View file

@ -0,0 +1,12 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim.utility.nix-develop;
in {
vim = mkIf cfg.enable {
startPlugins = ["nix-develop-nvim"];
};
}

View file

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

View file

@ -0,0 +1,5 @@
{lib, ...}: let
inherit (lib.options) mkEnableOption;
in {
options.vim.utility.nix-develop.enable = mkEnableOption "in-neovim `nix develop`, `nix shell`, and more using `nix-develop.nvim`";
}

View file

@ -15,6 +15,7 @@
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim = { vim = {
startPlugins = ["snacks-nvim"];
lazy.plugins."yazi.nvim" = { lazy.plugins."yazi.nvim" = {
package = pkgs.vimPlugins.yazi-nvim; package = pkgs.vimPlugins.yazi-nvim;
setupModule = "yazi"; setupModule = "yazi";

View file

@ -51,6 +51,18 @@
"url": "https://api.github.com/repos/saghen/blink.cmp/tarball/v0.12.4", "url": "https://api.github.com/repos/saghen/blink.cmp/tarball/v0.12.4",
"hash": "0jdifjifxjqa8r80wlqgkn5rm48wziap92340xz228nrgd0c9g69" "hash": "0jdifjifxjqa8r80wlqgkn5rm48wziap92340xz228nrgd0c9g69"
}, },
"blink-cmp-spell": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "ribru17",
"repo": "blink-cmp-spell"
},
"branch": "master",
"revision": "38d6797dea6f72baa6e8b3bfca6da96d8fcac64d",
"url": "https://github.com/ribru17/blink-cmp-spell/archive/38d6797dea6f72baa6e8b3bfca6da96d8fcac64d.tar.gz",
"hash": "19pnasa446iiapgsr3z2fpk0nnrzh8g5wrzrq8n0y4q0z6spc9f6"
},
"blink-compat": { "blink-compat": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -63,6 +75,30 @@
"url": "https://github.com/saghen/blink.compat/archive/4104671562c663d059d91a99da3780bead5bc467.tar.gz", "url": "https://github.com/saghen/blink.compat/archive/4104671562c663d059d91a99da3780bead5bc467.tar.gz",
"hash": "0bsf8kg5s3m1xk9d4n0yl0h5xyk484hip3z8va547f6ibim9ccv4" "hash": "0bsf8kg5s3m1xk9d4n0yl0h5xyk484hip3z8va547f6ibim9ccv4"
}, },
"blink-emoji-nvim": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "moyiz",
"repo": "blink-emoji.nvim"
},
"branch": "master",
"revision": "a77aebc092ebece1eed108f301452ae774d6b67a",
"url": "https://github.com/moyiz/blink-emoji.nvim/archive/a77aebc092ebece1eed108f301452ae774d6b67a.tar.gz",
"hash": "0n4qv2mk7zx910gnwf9ri2w5qxwx8szx99nqqzik4yyvl4axm41d"
},
"blink-ripgrep-nvim": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "mikavilpas",
"repo": "blink-ripgrep.nvim"
},
"branch": "main",
"revision": "305e1ae5363f527abdfd71915a3fe1f42af52824",
"url": "https://github.com/mikavilpas/blink-ripgrep.nvim/archive/305e1ae5363f527abdfd71915a3fe1f42af52824.tar.gz",
"hash": "1hcfyicgf33dlr2hhgnhhzdcxxqw1v8v1yjfbnwvlcsgw0rhjl8w"
},
"bufdelete-nvim": { "bufdelete-nvim": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -315,6 +351,18 @@
"url": "https://github.com/sindrets/diffview.nvim/archive/4516612fe98ff56ae0415a259ff6361a89419b0a.tar.gz", "url": "https://github.com/sindrets/diffview.nvim/archive/4516612fe98ff56ae0415a259ff6361a89419b0a.tar.gz",
"hash": "0brabpd02596hg98bml118bx6z2sly98kf1cr2p0xzybiinb4zs9" "hash": "0brabpd02596hg98bml118bx6z2sly98kf1cr2p0xzybiinb4zs9"
}, },
"direnv-vim": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "direnv",
"repo": "direnv.vim"
},
"branch": "master",
"revision": "ab2a7e08dd630060cd81d7946739ac7442a4f269",
"url": "https://github.com/direnv/direnv.vim/archive/ab2a7e08dd630060cd81d7946739ac7442a4f269.tar.gz",
"hash": "1hhwfnaj9ibz17ggxvhzrkinghfy51fqfa0bs482z484jpvjc31g"
},
"dracula": { "dracula": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -435,6 +483,18 @@
"url": "https://github.com/akinsho/git-conflict.nvim/archive/a1badcd070d176172940eb55d9d59029dad1c5a6.tar.gz", "url": "https://github.com/akinsho/git-conflict.nvim/archive/a1badcd070d176172940eb55d9d59029dad1c5a6.tar.gz",
"hash": "05rnwhm1fmg3yb7j2xc9nmw262jc687qxhwabn97qarrk2da0r0a" "hash": "05rnwhm1fmg3yb7j2xc9nmw262jc687qxhwabn97qarrk2da0r0a"
}, },
"github": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "projekt0n",
"repo": "github-nvim-theme"
},
"branch": "main",
"revision": "c106c9472154d6b2c74b74565616b877ae8ed31d",
"url": "https://github.com/projekt0n/github-nvim-theme/archive/c106c9472154d6b2c74b74565616b877ae8ed31d.tar.gz",
"hash": "/A4hkKTzjzeoR1SuwwklraAyI8oMkhxrwBBV9xb59PA="
},
"gitsigns-nvim": { "gitsigns-nvim": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -471,6 +531,18 @@
"url": "https://github.com/ellisonleao/gruvbox.nvim/archive/089b60e92aa0a1c6fa76ff527837cd35b6f5ac81.tar.gz", "url": "https://github.com/ellisonleao/gruvbox.nvim/archive/089b60e92aa0a1c6fa76ff527837cd35b6f5ac81.tar.gz",
"hash": "0mr8q2xi4s2anibll8lhxax7q1akyg687bp5r58gckkhi04064q4" "hash": "0mr8q2xi4s2anibll8lhxax7q1akyg687bp5r58gckkhi04064q4"
}, },
"harpoon": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "ThePrimeagen",
"repo": "harpoon"
},
"branch": "harpoon2",
"revision": "ed1f853847ffd04b2b61c314865665e1dadf22c7",
"url": "https://github.com/ThePrimeagen/harpoon/archive/ed1f853847ffd04b2b61c314865665e1dadf22c7.tar.gz",
"hash": "1dcpdlna2lff9dlsh6i4v16qmn5r9279wdvn0ry3xg4abqwnzc9g"
},
"haskell-tools-nvim": { "haskell-tools-nvim": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -1205,6 +1277,18 @@
"url": "https://github.com/wfxr/minimap.vim/archive/57287e2dd28fa3e63276a32d11c729df14741d54.tar.gz", "url": "https://github.com/wfxr/minimap.vim/archive/57287e2dd28fa3e63276a32d11c729df14741d54.tar.gz",
"hash": "05k4cgcrz0gj92xy685bd4p6nh2jmaywc2f5sw1lap0v685h7n79" "hash": "05k4cgcrz0gj92xy685bd4p6nh2jmaywc2f5sw1lap0v685h7n79"
}, },
"mkdir-nvim": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "jghauser",
"repo": "mkdir.nvim"
},
"branch": "main",
"revision": "c55d1dee4f099528a1853b28bb28caa802eba217",
"url": "https://github.com/jghauser/mkdir.nvim/archive/c55d1dee4f099528a1853b28bb28caa802eba217.tar.gz",
"hash": "0zpyvkbw7wfqdxfgidr7zfxqb5ldci4pflx50rsm1hbwai0ybv23"
},
"modes-nvim": { "modes-nvim": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -1304,6 +1388,18 @@
"url": "https://github.com/otavioschwanck/new-file-template.nvim/archive/6ac66669dbf2dc5cdee184a4fe76d22465ca67e8.tar.gz", "url": "https://github.com/otavioschwanck/new-file-template.nvim/archive/6ac66669dbf2dc5cdee184a4fe76d22465ca67e8.tar.gz",
"hash": "0c7378c3w6bniclp666rq15c28akb0sjy58ayva0wpyin4k26hl3" "hash": "0c7378c3w6bniclp666rq15c28akb0sjy58ayva0wpyin4k26hl3"
}, },
"nix-develop-nvim": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "figsoda",
"repo": "nix-develop.nvim"
},
"branch": "main",
"revision": "afea026f5c478c000a8af8de87f7b711676387ab",
"url": "https://github.com/figsoda/nix-develop.nvim/archive/afea026f5c478c000a8af8de87f7b711676387ab.tar.gz",
"hash": "0nwjgr19pzdxd7yygz380b388qcfbzp9svs916kh0zayzi9yxc2k"
},
"noice-nvim": { "noice-nvim": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -1708,9 +1804,9 @@
"repo": "otter.nvim" "repo": "otter.nvim"
}, },
"branch": "main", "branch": "main",
"revision": "21f042f4d1a9ff4788634ad76a10033eed13c7f2", "revision": "e37053d2c6a17463e705483122eee04d41e3d4af",
"url": "https://github.com/jmbuhr/otter.nvim/archive/21f042f4d1a9ff4788634ad76a10033eed13c7f2.tar.gz", "url": "https://github.com/jmbuhr/otter.nvim/archive/e37053d2c6a17463e705483122eee04d41e3d4af.tar.gz",
"hash": "1gi603ckyxljbhkg8jhwh2pf5kvgb676ykw3sv9gvi0c2s4fb55r" "hash": "0sq7x2mcxl7z0j4s3a395fy0bzz13h4rxd03lp6674y6hsjxcm55"
}, },
"oxocarbon": { "oxocarbon": {
"type": "Git", "type": "Git",
@ -1880,6 +1976,18 @@
"url": "https://github.com/m4xshen/smartcolumn.nvim/archive/92f3773af80d674f1eb61e112dca79e2fa449fd1.tar.gz", "url": "https://github.com/m4xshen/smartcolumn.nvim/archive/92f3773af80d674f1eb61e112dca79e2fa449fd1.tar.gz",
"hash": "0k1xnyvblshn4fhbxgl0i34j22n55xlwr09sdmb23l57br5rb07q" "hash": "0k1xnyvblshn4fhbxgl0i34j22n55xlwr09sdmb23l57br5rb07q"
}, },
"snacks-nvim": {
"type": "Git",
"repository": {
"type": "GitHub",
"owner": "folke",
"repo": "snacks.nvim"
},
"branch": "main",
"revision": "bc0630e43be5699bb94dadc302c0d21615421d93",
"url": "https://github.com/folke/snacks.nvim/archive/bc0630e43be5699bb94dadc302c0d21615421d93.tar.gz",
"hash": "0a5nw7xa33shag1h12gf930g3vcixbwk8dxv0ji4980ycskh238v"
},
"sqls-nvim": { "sqls-nvim": {
"type": "Git", "type": "Git",
"repository": { "repository": {
@ -2032,9 +2140,9 @@
"repo": "vim-illuminate" "repo": "vim-illuminate"
}, },
"branch": "master", "branch": "master",
"revision": "b5713e6ca3f627b46968386d6d3f24d374d3cb17", "revision": "19cb21f513fc2b02f0c66be70107741e837516a1",
"url": "https://github.com/RRethy/vim-illuminate/archive/b5713e6ca3f627b46968386d6d3f24d374d3cb17.tar.gz", "url": "https://github.com/RRethy/vim-illuminate/archive/19cb21f513fc2b02f0c66be70107741e837516a1.tar.gz",
"hash": "0l16qa2bm4nyimkcjlhajgcv8l9kyqqjpc55jxnny0gy6rycp40n" "hash": "1wfri17br6yqxnci43g69mvbckb7ajhj3c0mlcn1g0s7jkxz4acd"
}, },
"vim-markdown": { "vim-markdown": {
"type": "Git", "type": "Git",
@ -2098,4 +2206,4 @@
} }
}, },
"version": 3 "version": 3
} }