Compare commits

..

2 commits

Author SHA1 Message Date
NotAShelf
5b8ef42453
Merge f9cec7b4cc into f3817fb4b2 2024-04-20 14:40:28 +00:00
Kalle Jepsen
f9cec7b4cc
assistant/chatgpt: Add jackMort/ChatGPT.nvim 2024-04-20 17:40:22 +03:00
33 changed files with 535 additions and 909 deletions

View file

@ -7,11 +7,9 @@ inputs: let
lib ? pkgs.lib,
check ? true,
extraSpecialArgs ? {},
extraModules ? [],
...
}:
modulesWithInputs {
inherit pkgs lib check extraSpecialArgs extraModules;
inherit pkgs lib check extraSpecialArgs;
configuration.imports = modules;
};
@ -25,14 +23,11 @@ inputs: let
vimAlias = true;
debugMode = {
enable = false;
level = 16;
level = 20;
logFile = "/tmp/nvim.log";
};
spellcheck = {
enable = isMaximal;
programmingWordlist.enable = isMaximal;
};
spellcheck.vim-dirtytalk.enable = true;
lsp = {
formatOnSave = true;

View file

@ -127,12 +127,10 @@
nixos-render-docs -j $NIX_BUILD_CORES options manpage \
--revision ${revision} \
--header ${./man/header.5} \
--footer ${./man/footer.5} \
${nvimModuleDocs.optionsJSON}/share/doc/nixos/options.json \
$out/share/man/man5/neovim-flake.5
cp ${./man/neovim-flake.1} $out/share/man/man1/neovim-flake.1
cp ${./neovim-flake.1} $out/share/man/man1/neovim-flake.1
'';
# Generate the HTML manual pages

View file

@ -9,5 +9,6 @@
neovim-flake configuration specification
.SH "OPTIONS"
.PP
You can use the following options to configure neovim-flake:
You can use the following options in
home\-configuration\&.nix:
.PP

View file

@ -9,17 +9,13 @@
.cflags 4 /
.Sh NAME
.Nm neovim-flake
.Nd A highly modular, extensible and distro-agnostic Neovim distribution for Nix/NixOS.
.Nd a extensible and distro-agonistic Neovim configuration wrapper in Nix
.
.Sh BUGS
.Pp
Please report any bugs that you might encounter on the
Please report any bugs on the
\m[blue]\fBproject issue tracker\fR\m[]\&.
.Sh SEE ALSO
.Pp
\fBneovim-flake\fR(5)
.Sh AUTHOR
.Pp
\fBneovim-flake contributors\fR
@ -29,5 +25,5 @@ Author.
.Sh COPYRIGHT
.br
Copyright \(co 2023\(en2024 neovim-flake contributors
Copyright \(co 2017\(en2022 neovim-flake contributors
.br

View file

@ -41,40 +41,33 @@ vim.api.nvim_set_keymap('n', '<leader>a', ':lua camelToSnake()<CR>', { noremap =
[ksonj](https://github.com/ksonj):
- Added Terraform language support.
- Added `ChatGPT.nvim`, which can be enabled with [`vim.assistant.chatgpt`](vim.assistant.chatgpt). Do
keep in mind that this option requires `OPENAI_API_KEY` environment variable to be set.
- Add Terraform language support
[donnerinoern](https://github.com/donnerinoern):
- Added Gruvbox theme.
- Added Gruvbox theme
- Added marksman LSP for Markdown.
- Added marksman LSP for Markdown
- Fixed markdown preview with Glow not working and added an option for changing the preview keybind.
- Fixed markdown preview with Glow not working and added an option for changing the preview keybind
- colorizer.nvim: switched to a maintained fork.
- colorizer.nvim: switched to a maintained fork
- Added `markdown-preview.nvim`, moved `glow.nvim` to a brand new `vim.utility.preview` category.
[elijahimmer](https://github.com/elijahimmer)
- Added rose-pine theme.
[jacekpoz](https://github.com/jacekpoz):
- Added `vim.autocomplete.alwaysComplete`. Allows users to have the autocomplete window popup only when manually activated.
- Added rose-pine theme
[horriblename](https://github.com/horriblename):
- Fixed empty winbar when breadcrumbs are disabled.
- Fixed empty winbar when breadcrumbs are disabled
- Added custom `setupOpts` for various plugins.
- Added custom `setupOpts` for various plugins
- Removed support for deprecated plugin "nvim-compe".
- Removed support for deprecated plugin "nvim-compe"
- Moved most plugins to `setupOpts` method.
- Moved most plugins to `setupOpts` method
[frothymarrow](https://github.com/frothymarrow):
@ -84,36 +77,35 @@ vim.api.nvim_set_keymap('n', '<leader>a', ':lua camelToSnake()<CR>', { noremap =
been removed in favor of [vim.fidget-nvim.notification.window.align](vim.fidget-nvim.notification.window.align), which now supports
`top` and `bottom` values. `vim.fidget-nvim.align.right` has no longer any equivalent and also has been removed.
- `which-key.nvim` categories can now be customized through [vim.binds.whichKey.register](vim.binds.whichKey.register)
- `which-key.nvim` categories can now be customized through [vim.binds.whichKey.register](vim.binds.whichKey.register).
- Added `magick` to `vim.luaPackages` for `image.nvim`.
- Added `magick` to `vim.luaPackages` for `image.nvim`
- Added `alejandra` to the default devShell.
- Migrated neovim-flake to `makeNeovimUnstable` wrapper.
- Migrated neovim-flake to `makeNeovimUnstable` wrapper
[notashelf](https://github.com/notashelf):
- Finished moving to `nixosOptionsDoc` in the documentation and changelog. All documentation options
and files are fully free of Asciidoc, and will now use Nixpkgs flavored markdown.
- Finished moving to `nixosOptionsDoc` in the documentation and changelog. We are fully free of asciidoc now
- Bumped plugin inputs to their latest versions.
- Bumped plugin inputs to their latest versions
- Deprecated `presence.nvim` in favor of `neocord`. This means `vim.rich-presence.presence-nvim` is removed and will throw
a warning if used. You are recommended to rewrite your neocord configuration from scratch based on the.
a warning if used. You are recommended to rewrite your neocord configuration from scratch based on the
[official documentation](https://github.com/IogaMaster/neocord)
- Removed Tabnine plugin due to the usage of imperative tarball downloads. If you'd like to see it back, please create an issue.
- Removed Tabnine plugin due to the usage of imperative tarball downloads. If you'd like to see it back, please make an issue.
- Added support for css and tailwindcss through vscode-language-servers-extracted & tailwind-language-server.
Those can be enabled through `vim.languages.css` and `vim.languages.tailwind`.
Those can be enabled through `vim.languages.css` and `vim.languages.tailwind`
- Lualine module now allows customizing `always_divide_middle`, `ignore_focus` and `disabled_filetypes` through the new
options: [vim.statusline.lualine.alwaysDivideMiddle](vim.statusline.lualine.alwaysDivideMiddle),
[vim.statusline.lualine.ignoreFocus](vim.statusline.lualine.ignoreFocus) and
[vim.statusline.lualine.disabledFiletypes](vim.statusline.lualine.disabledFiletypes).
[vim.statusline.lualine.disabledFiletypes](vim.statusline.lualine.disabledFiletypes)
- Updated all plugin inputs to their latest versions (**21.04.2024**) - this brought minor color changes to the Catppuccin
- Updated all plugin inputs to their latest versions (**14.04.2024**) - this brought minor color changes to the Catppuccin
theme.
- Moved home-manager module entrypoint to `flake/modules` and added an experimental Nixos module. This requires further testing
@ -130,8 +122,7 @@ vim.api.nvim_set_keymap('n', '<leader>a', ':lua camelToSnake()<CR>', { noremap =
- Changed the tree structure to distinguish between core options and plugin options.
- Added plugin auto-discovery from plugin inputs. This is mostly from
[JordanIsaac's neovim-flake](https://github.com/jordanisaacs/neovim-flake). Allows contributors to add plugin inputs
with the `plugin-` prefix to have them automatically discovered for the `plugin` type in `lib/types`.
[JordanIsaac's neovim-flake](https://github.com/jordanisaacs/neovim-flake)
- Moved internal `wrapLuaConfig` to the extended library, structured its arguments to take `luaBefore`, `luaConfig`
and `luaAfter` as strings, which are then concatted inside a lua block.
@ -140,12 +131,6 @@ vim.api.nvim_set_keymap('n', '<leader>a', ':lua camelToSnake()<CR>', { noremap =
for inserting verbatim Lua configuration before and after the resolved Lua DAG respectively. Both of those options
take strings as the type, so you may read the contents of a Lua file from a given path.
- Added [`vim.spellChecking.ignoredFiletypes`](vim.spellChecking.ignoredFiletypes)
and [`vim.spellChecking.programmingWordlist.enable`](vim.spellChecking.programmingWordlist.enable) for ignoring certain filetypes
in spellchecking and enabling `vim-dirtytalk` respectively. The previously used `vim.spellcheck.vim-dirtytalk` aliases to the latter
option.
[jacekpoz](https://github.com/jacekpoz):
- Exposed `withRuby`, `withNodeJs`, `withPython3`, and `python3Packages` from the `makeNeovimConfig` function under their respective options.
- Added [`vim.extraPackages`](vim.extraPackages) for appending additional packages to the wrapper PATH, making said packages available
while inside the Neovim session.
- Added `vim.autocomplete.alwaysComplete`. Allows users to have the autocomplete window popup only when manually activated.

View file

@ -131,11 +131,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1713537308,
"narHash": "sha256-XtTSSIB2DA6tOv+l0FhvfDMiyCmhoRbNB+0SeInZkbk=",
"lastModified": 1712791164,
"narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "5c24cf2f0a12ad855f444c30b2421d044120c66f",
"rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5",
"type": "github"
},
"original": {
@ -262,11 +262,11 @@
"plugin-catppuccin": {
"flake": false,
"locked": {
"lastModified": 1713105352,
"narHash": "sha256-yTVou/WArEWygBBs2NFPI9Dm9iSGfwVftKFbOAGl8tk=",
"lastModified": 1713033163,
"narHash": "sha256-hmWp/+qFEJ0zZBjR6kz+EuyHswI0T+DhmUneSPZVhkM=",
"owner": "catppuccin",
"repo": "nvim",
"rev": "a1439ad7c584efb3d0ce14ccb835967f030450fe",
"rev": "fc98570d85ae772e56dc42cf8d7d6a497a909bdb",
"type": "github"
},
"original": {
@ -502,11 +502,11 @@
"plugin-dashboard-nvim": {
"flake": false,
"locked": {
"lastModified": 1713420371,
"narHash": "sha256-zcWBgDM409n6rmb06FqVXbC+HU9HJN0+ADoTJDWHvbA=",
"lastModified": 1712210522,
"narHash": "sha256-i/kKj69yeij/aUP3RpIL1opN5tUiy6C1vehSSLYHbgw=",
"owner": "glepnir",
"repo": "dashboard-nvim",
"rev": "6d06924b562de6f0bb136edf1bf549afbf6b7d00",
"rev": "681300934baf36f6184ca41f0b26aed22056d4ee",
"type": "github"
},
"original": {
@ -566,11 +566,11 @@
"plugin-elixir-ls": {
"flake": false,
"locked": {
"lastModified": 1713432893,
"narHash": "sha256-4xIX5j920uKYHvwH+Ftid4UixMa274a/37CZIw6dg6M=",
"lastModified": 1711286188,
"narHash": "sha256-OIB5f+FBOPsTWKGWyoU+/NQDMsJXBdj1v7UclbTP5ZY=",
"owner": "elixir-lsp",
"repo": "elixir-ls",
"rev": "df03608f11700ece5c8f8202ccd4d7f296df54df",
"rev": "3e71900e0d0891f9f95e35d9a52b16c6a773a259",
"type": "github"
},
"original": {
@ -582,11 +582,11 @@
"plugin-elixir-tools": {
"flake": false,
"locked": {
"lastModified": 1713617654,
"narHash": "sha256-pJgtW51FLs+Yr+tlQckRmGkRnSUQNI3fEROn3D51mMs=",
"lastModified": 1710172806,
"narHash": "sha256-pVDeS9oCFzA9t9J/JfYG/RfdMoSmaaERd5nUgL9KHyM=",
"owner": "elixir-tools",
"repo": "elixir-tools.nvim",
"rev": "3c4f8344a341818417b3d75c04eb96d894cb4640",
"rev": "4d003f4b41ab9b4f8b569104fa7818f048ed4e25",
"type": "github"
},
"original": {
@ -614,11 +614,11 @@
"plugin-flutter-tools": {
"flake": false,
"locked": {
"lastModified": 1713525182,
"narHash": "sha256-krcaaDPJsftkrcEov1QdKQUQBH6+PgjNwFamWpmNFkU=",
"lastModified": 1711622317,
"narHash": "sha256-TQRz2MHg6qnzZGUDVFUoaZJiTBwQ3Hjqvc8AAeVS93Y=",
"owner": "akinsho",
"repo": "flutter-tools.nvim",
"rev": "f04131d6b2c82c2a7624a8843642d6269b50b437",
"rev": "4f18033c3b78aa5450e538d81dfbbb3e67aeadec",
"type": "github"
},
"original": {
@ -646,11 +646,11 @@
"plugin-gitsigns-nvim": {
"flake": false,
"locked": {
"lastModified": 1713620636,
"narHash": "sha256-UK3DyvrQ0kLm9wrMQ6tLDoDunoThbY/Yfjn+eCZpuMw=",
"lastModified": 1712937200,
"narHash": "sha256-8pAy6mICiXpUO36ctWXbmRVB7cDSSDIArh9Nq59az9I=",
"owner": "lewis6991",
"repo": "gitsigns.nvim",
"rev": "035da036e68e509ed158414416c827d022d914bd",
"rev": "d96ef3bbff0bdbc3916a220f5c74a04c4db033f2",
"type": "github"
},
"original": {
@ -742,11 +742,11 @@
"plugin-image-nvim": {
"flake": false,
"locked": {
"lastModified": 1713467683,
"narHash": "sha256-qSGtiBl94RJMffoxXEV74fNcmrYcKtfPc3Aw65tzuDM=",
"lastModified": 1712327429,
"narHash": "sha256-usDtW+WnaeTdxx1ALCiZu/gnx2so7QneOjWoEXiChoQ=",
"owner": "3rd",
"repo": "image.nvim",
"rev": "301de7919b2c0378cb7a782663f67abbcb198b17",
"rev": "9be5ede323756d7ee2bbef2bc157767b3972cce6",
"type": "github"
},
"original": {
@ -1015,11 +1015,11 @@
"plugin-nvim-bufferline-lua": {
"flake": false,
"locked": {
"lastModified": 1713525468,
"narHash": "sha256-28ZkN2o6xumhvXGbxRl3/eODhMOgJfOig/+svi/uAZk=",
"lastModified": 1709805539,
"narHash": "sha256-drvgwupiyRAoShL2enXEYUumkYJnG+QtIkBIVqVZK+U=",
"owner": "akinsho",
"repo": "nvim-bufferline.lua",
"rev": "f6f00d9ac1a51483ac78418f9e63126119a70709",
"rev": "64e2c5def50dfd6b6f14d96a45fa3d815a4a1eef",
"type": "github"
},
"original": {
@ -1095,11 +1095,11 @@
"plugin-nvim-dap": {
"flake": false,
"locked": {
"lastModified": 1713432622,
"narHash": "sha256-kEn2INrNMQSLHY3gpSVV+cTx9f1nFeUCM6by9WGn5Sg=",
"lastModified": 1711382674,
"narHash": "sha256-HoLnYeA18TpHM1SJ3NOY53ZAyBo2y2EoUbAIr7TqtQI=",
"owner": "mfussenegger",
"repo": "nvim-dap",
"rev": "6ae8a14828b0f3bff1721a35a1dfd604b6a933bb",
"rev": "405df1dcc2e395ab5173a9c3d00e03942c023074",
"type": "github"
},
"original": {
@ -1159,11 +1159,11 @@
"plugin-nvim-lspconfig": {
"flake": false,
"locked": {
"lastModified": 1713507075,
"narHash": "sha256-/SqLT0PG2RUWyknYpcXlcU/aUyKWZMBs35s1sPRkEmc=",
"lastModified": 1713075103,
"narHash": "sha256-3GS1udfgzbghho1xtwZ5N1MZgWXWrJnW36Gnl/SAzIQ=",
"owner": "neovim",
"repo": "nvim-lspconfig",
"rev": "ed8b8a15acc441aec669f97d75f2c1f2ac8c8aa5",
"rev": "76b1bbaecbe7215498983356d50a16b46c20d6b0",
"type": "github"
},
"original": {
@ -1303,11 +1303,11 @@
"plugin-nvim-treesitter-context": {
"flake": false,
"locked": {
"lastModified": 1713520917,
"narHash": "sha256-AT49dDlwPaV41O+rcUCzzdra8moIg4iDAIhZJb6j0zE=",
"lastModified": 1713029046,
"narHash": "sha256-9r8UjGPAbLFHR3eYReLOR7SmBI+H6l6BeUrzaocq3YU=",
"owner": "nvim-treesitter",
"repo": "nvim-treesitter-context",
"rev": "ba4289ad345ececd335a9cdd7b9616fd0bb6be92",
"rev": "ba05c6b753130d96b284d3e8ba8f54c28c0fb6d1",
"type": "github"
},
"original": {
@ -1335,11 +1335,11 @@
"plugin-nvim-web-devicons": {
"flake": false,
"locked": {
"lastModified": 1713596748,
"narHash": "sha256-yxsKBCP0ICMiH23tcLoTfZJ3VqNMhgkjOzynjPSRb8Q=",
"lastModified": 1712684166,
"narHash": "sha256-v+dhVbAN2OKLdS5YbSLmZsLijO4meSUBG26R+Ivm/BM=",
"owner": "nvim-tree",
"repo": "nvim-web-devicons",
"rev": "31ba3c489e56a7f20881cee013cea1269b6b2f2d",
"rev": "6e355632387a085f15a66ad68cf681c1d7374a04",
"type": "github"
},
"original": {
@ -1351,11 +1351,11 @@
"plugin-obsidian-nvim": {
"flake": false,
"locked": {
"lastModified": 1713538455,
"narHash": "sha256-nIAaQa0DBYBQyfTEJi3Lzqs7QJqyw0Cemq6Hm704K60=",
"lastModified": 1712778222,
"narHash": "sha256-jjsDXGdFMgdalgkw8HSY3+EfiTkYotsNA6txk1/09VY=",
"owner": "epwalsh",
"repo": "obsidian.nvim",
"rev": "ec0f44e1921d2701bd99a542031d280f1e3930b5",
"rev": "1265a1fbfca5979f629ecedb2552f743c70f458f",
"type": "github"
},
"original": {
@ -1383,11 +1383,11 @@
"plugin-orgmode-nvim": {
"flake": false,
"locked": {
"lastModified": 1713539113,
"narHash": "sha256-0Ayu2kVpnsxu/ER0nx+t7nyU9oNN8URLrGQtAKKb7Ls=",
"lastModified": 1712982802,
"narHash": "sha256-zfw3eHBnJPPhsNr8aG8kn3pAchxklvk5aiFm2rys7PQ=",
"owner": "nvim-orgmode",
"repo": "orgmode",
"rev": "389e91f6f935aa845bc0cd13dd80f75431c34751",
"rev": "5875037fa9c7c8e0abf29cd69510150355d248a0",
"type": "github"
},
"original": {
@ -1464,11 +1464,11 @@
"plugin-rose-pine": {
"flake": false,
"locked": {
"lastModified": 1713451685,
"narHash": "sha256-AdPSz5+nCOnLWexBasHuxRxEKbL4WVg+uV78//W5nLs=",
"lastModified": 1712685632,
"narHash": "sha256-A9C5BJiOdT/F6JzWxJw/La77nxCoX3/bND15DM9st6k=",
"owner": "rose-pine",
"repo": "neovim",
"rev": "17b466e79479758b332a3cac12544a3ad2be6241",
"rev": "9cd7d8aad3606a95d733a45d16275eb7a5a836a3",
"type": "github"
},
"original": {
@ -1560,11 +1560,11 @@
"plugin-telescope": {
"flake": false,
"locked": {
"lastModified": 1713586895,
"narHash": "sha256-3mrcol36HmY31pMAadirDdZqJtD0f+m8V0Lz8FnBx0M=",
"lastModified": 1713022073,
"narHash": "sha256-ZktFx77Ukuk1/Qhmf1wUEe0+wODM7f2H+PlXsDDTjcA=",
"owner": "nvim-telescope",
"repo": "telescope.nvim",
"rev": "a4432dfb9b0b960c4cbc8765a42dc4fe2e029e8f",
"rev": "4d4ade7f2b8f403e8816ca50c05ed16e259b21fb",
"type": "github"
},
"original": {
@ -1592,11 +1592,11 @@
"plugin-toggleterm-nvim": {
"flake": false,
"locked": {
"lastModified": 1713526392,
"narHash": "sha256-liy+AE8a+jll1fhROBKpJaTE9YZHQvYosOW4euGZNYc=",
"lastModified": 1707733615,
"narHash": "sha256-FJyDxQm2vs9R4WkqAbh6ryCvEABfrLSKRrAGo/qI5jM=",
"owner": "akinsho",
"repo": "toggleterm.nvim",
"rev": "dca1c80fb8ec41c97e7c3ef308719d8143fbbb05",
"rev": "193786e0371e3286d3bc9aa0079da1cd41beaa62",
"type": "github"
},
"original": {
@ -1672,11 +1672,11 @@
"plugin-vim-illuminate": {
"flake": false,
"locked": {
"lastModified": 1713467568,
"narHash": "sha256-o0D1edrsHkaljrzBFZXjdxiK/5ziCGJxM/kYNJgBI1E=",
"lastModified": 1707016059,
"narHash": "sha256-KNIu4cNyZddZSRS8KZ0U0T8uSSLJu8iqNLQN8e+Bv94=",
"owner": "RRethy",
"repo": "vim-illuminate",
"rev": "e522e0dd742a83506db0a72e1ced68c9c130f185",
"rev": "305bf07b919ac526deb5193280379e2f8b599926",
"type": "github"
},
"original": {
@ -2095,11 +2095,11 @@
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1713572548,
"narHash": "sha256-bYNsY9HwrV8+eJGRYvfLEP6/Sgf2Kr9qNbnB91OYMMM=",
"lastModified": 1713070736,
"narHash": "sha256-FatD7AHSoZGfn2JCOkDt9v04YkJG3PLfC7U7pU6r+bM=",
"owner": "mitchellh",
"repo": "zig-overlay",
"rev": "76bccd85db6a182dfcbf8a5f4b540953f029a12c",
"rev": "1c04fe593ef5124fd84e3d8726d481cba8b527b8",
"type": "github"
},
"original": {

View file

@ -7,9 +7,8 @@ packages: inputs: {
}: let
inherit (lib) maintainers;
inherit (lib.modules) mkIf;
inherit (lib.lists) optional;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) attrsOf anything bool;
inherit (lib.types) attrsOf anything;
cfg = config.programs.neovim-flake;
inherit (import ../../configuration.nix inputs) neovimConfiguration;
@ -22,24 +21,7 @@ in {
meta.maintainers = with maintainers; [NotAShelf];
options.programs.neovim-flake = {
enable = mkEnableOption "neovim-flake, the extensible neovim configuration wrapper";
enableManpages = mkOption {
type = bool;
default = false;
description = "Whether to enable manpages for neovim-flake.";
};
defaultEditor = mkOption {
type = bool;
default = false;
description = ''
Whether to set `neovim-flake` as the default editor.
This will set the `EDITOR` environment variable as `nvim`
if set to true.
'';
};
enable = mkEnableOption "neovim-flake, the extensible neovim-wrapper";
finalPackage = mkOption {
type = anything;
@ -75,13 +57,8 @@ in {
};
config = mkIf cfg.enable {
programs.neovim-flake.finalPackage = neovimConfigured.neovim;
home.packages = [cfg.finalPackage];
home = {
sessionVariables = mkIf cfg.defaultEditor {EDITOR = "nvim";};
packages =
[cfg.finalPackage]
++ optional cfg.enableManpages packages.${pkgs.stdenv.system}.docs-manpages;
};
programs.neovim-flake.finalPackage = neovimConfigured.neovim;
};
}

View file

@ -1,4 +1,4 @@
# NixOS module
# Home Manager module
packages: inputs: {
config,
pkgs,
@ -6,10 +6,9 @@ packages: inputs: {
...
}: let
inherit (lib) maintainers;
inherit (lib.modules) mkIf mkOverride;
inherit (lib.lists) optional;
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) attrsOf anything bool;
inherit (lib.types) attrsOf anything;
cfg = config.programs.neovim-flake;
inherit (import ../../configuration.nix inputs) neovimConfiguration;
@ -22,24 +21,7 @@ in {
meta.maintainers = with maintainers; [NotAShelf];
options.programs.neovim-flake = {
enable = mkEnableOption "neovim-flake, the extensible neovim configuration wrapper";
enableManpages = mkOption {
type = bool;
default = false;
description = "Whether to enable manpages for neovim-flake.";
};
defaultEditor = mkOption {
type = bool;
default = false;
description = ''
Whether to set `neovim-flake` as the default editor.
This will set the `EDITOR` environment variable as `nvim`
if set to true.
'';
};
enable = mkEnableOption "neovim-flake, the extensible neovim-wrapper";
finalPackage = mkOption {
type = anything;
@ -75,13 +57,8 @@ in {
};
config = mkIf cfg.enable {
programs.neovim-flake.finalPackage = neovimConfigured.neovim;
environment.systemPackages = [cfg.finalPackage];
environment = {
variables.EDITOR = mkIf cfg.defaultEditor (mkOverride 900 "nvim");
systemPackages =
[cfg.finalPackage]
++ optional cfg.enableManpages packages.${pkgs.stdenv.system}.docs-manpages;
};
programs.neovim-flake.finalPackage = neovimConfigured.neovim;
};
}

View file

@ -56,11 +56,10 @@ in {
pluginsOpt = {
description,
example,
default ? [],
}:
mkOption {
inherit example description default;
inherit description default;
type = pluginsType;
};

View file

@ -4,13 +4,14 @@
...
}: let
inherit (builtins) map mapAttrs toJSON filter;
inherit (lib.options) mkOption;
inherit (lib.options) mkOption mkEnableOption literalMD literalExpression;
inherit (lib.attrsets) filterAttrs getAttrs attrValues attrNames;
inherit (lib.strings) isString concatStringsSep;
inherit (lib.strings) optionalString isString concatStringsSep;
inherit (lib.misc) mapAttrsFlatten;
inherit (lib.trivial) showWarnings;
inherit (lib.types) str nullOr;
inherit (lib.types) bool str oneOf attrsOf nullOr attrs submodule lines listOf either path;
inherit (lib.generators) mkLuaInline;
inherit (lib.nvim.types) dagOf;
inherit (lib.nvim.dag) entryAnywhere entryAfter topoSort mkLuarcSection mkVimrcSection;
inherit (lib.nvim.lua) toLuaObject wrapLuaConfig;
inherit (lib.nvim.vim) valToVim;
@ -85,7 +86,204 @@
inherit mode;
})
maps);
mapOption = submodule {
options =
mapConfigOptions
// {
action = mkOption {
type = str;
description = "The action to execute.";
};
lua = mkOption {
type = bool;
description = ''
If true, `action` is considered to be lua code.
Thus, it will not be wrapped in `""`.
'';
default = false;
};
};
};
mapOptions = mode:
mkOption {
description = "Mappings for ${mode} mode";
type = attrsOf mapOption;
default = {};
};
in {
options = {
vim = {
enableLuaLoader = mkEnableOption ''
the experimental Lua module loader to speed up the start up process
'';
additionalRuntimePaths = mkOption {
type = listOf (either path str);
default = [];
example = literalExpression ''
[
"~/.config/nvim-extra" # absolute path, as a string - impure
./nvim # relative path, as a path - pure
]
'';
description = ''
Additional runtime paths that will be appended to the
active runtimepath of the Neovim. This can be used to
add additional lookup paths for configs, plugins, spell
languages and other things you would generally place in
your `$HOME/.config/nvim`.
This is meant as a declarative alternative to throwing
files into `~/.config/nvim` and having the Neovim
wrapper pick them up. For more details on
`vim.o.runtimepath`, and what paths to use; please see
[the official documentation](https://neovim.io/doc/user/options.html#'runtimepath')
'';
};
globals = mkOption {
default = {};
type = attrs;
description = "Set containing global variable values";
};
maps = mkOption {
type = submodule {
options = {
normal = mapOptions "normal";
insert = mapOptions "insert";
select = mapOptions "select";
visual = mapOptions "visual and select";
terminal = mapOptions "terminal";
normalVisualOp = mapOptions "normal, visual, select and operator-pending (same as plain 'map')";
visualOnly = mapOptions "visual only";
operator = mapOptions "operator-pending";
insertCommand = mapOptions "insert and command-line";
lang = mapOptions "insert, command-line and lang-arg";
command = mapOptions "command-line";
};
};
default = {};
description = ''
Custom keybindings for any mode.
For plain maps (e.g. just 'map' or 'remap') use `maps.normalVisualOp`.
'';
example = ''
maps = {
normal."<leader>m" = {
silent = true;
action = "<cmd>make<CR>";
}; # Same as nnoremap <leader>m <silent> <cmd>make<CR>
};
'';
};
configRC = mkOption {
type = oneOf [(dagOf lines) str];
default = {};
description = ''
Contents of vimrc, either as a string or a DAG.
If this option is passed as a DAG, it will be resolved
according to the DAG resolution rules (e.g. entryBefore
or entryAfter) as per the neovim-flake library.
'';
example = literalMD ''
```vim
" Set the tab size to 4 spaces
set tabstop=4
set shiftwidth=4
set expandtab
```
'';
};
luaConfigPre = mkOption {
type = str;
default = let
additionalRuntimePaths = concatStringsSep "," cfg.additionalRuntimePaths;
in ''
${optionalString (cfg.additionalRuntimePaths != []) ''
if not vim.o.runtimepath:find('${additionalRuntimePaths}', 1, true) then
vim.o.runtimepath = vim.o.runtimepath .. ',' .. '${additionalRuntimePaths}'
end
''}
${optionalString cfg.enableLuaLoader "vim.loader.enable()"}
'';
defaultText = literalMD ''
By default, this option will **append** paths in
[vim.additionalRuntimePaths](#opt-vim.additionalRuntimePaths)
to the `runtimepath` and enable the experimental Lua module loader
if [vim.enableLuaLoader](#opt-vim.enableLuaLoader) is set to true.
'';
description = ''
Verbatim lua code that will be inserted **before**
the result of `luaConfigRc` DAG has been resolved.
This option **does not** take a DAG set, but a string
instead. Useful when you'd like to insert contents
of lua configs after the DAG result.
::: {.warning}
You do not want to override this option. It is used
internally to set certain options as early as possible
and should be avoided unless you know what you're doing.
:::
'';
};
luaConfigRC = mkOption {
type = oneOf [(dagOf lines) str];
default = {};
description = ''
Lua configuration, either as a string or a DAG.
If this option is passed as a DAG, it will be resolved
according to the DAG resolution rules (e.g. entryBefore
or entryAfter) as per the neovim-flake library.
'';
example = literalMD ''
```lua
-- Set the tab size to 4 spaces
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
```
'';
};
luaConfigPost = mkOption {
type = str;
default = "";
description = ''
Verbatim lua code that will be inserted after
the result of the `luaConfigRc` DAG has been resolved
This option **does not** take a DAG set, but a string
instead. Useful when you'd like to insert contents
of lua configs after the DAG result.
'';
};
builtConfigRC = mkOption {
internal = true;
type = lines;
description = "The built config for neovim after resolving the DAG";
};
};
};
config = let
filterNonNull = mappings: filterAttrs (_name: value: value != null) mappings;
globalsScript =
@ -130,6 +328,7 @@ in {
result;
in {
vim = {
startPlugins = map (x: x.package) (attrValues cfg.extraPlugins);
configRC = {
globalsScript = entryAnywhere (concatStringsSep "\n" globalsScript);

View file

@ -0,0 +1,87 @@
{
pkgs,
lib,
...
}: let
inherit (lib.options) mkEnableOption mkOption literalExpression;
inherit (lib.types) path int package bool str listOf attrsOf;
inherit (lib.nvim.types) pluginsOpt extraPluginType;
in {
options.vim = {
package = mkOption {
type = package;
default = pkgs.neovim-unwrapped;
description = ''
The neovim package to use.
You will need to use an unwrapped package for this option to work as intended.
'';
};
debugMode = {
enable = mkEnableOption "debug mode";
level = mkOption {
type = int;
default = 20;
description = "Set the debug level";
};
logFile = mkOption {
type = path;
default = "/tmp/nvim.log";
description = "Set the log file";
};
};
viAlias = mkOption {
description = "Enable vi alias";
type = bool;
default = true;
};
vimAlias = mkOption {
description = "Enable vim alias";
type = bool;
default = true;
};
startPlugins = pluginsOpt {
default = [];
description = "List of plugins to startup.";
};
optPlugins = pluginsOpt {
default = [];
description = "List of plugins to optionally load";
};
extraPlugins = mkOption {
type = attrsOf extraPluginType;
default = {};
description = ''
List of plugins and related config.
Note that these are setup after builtin plugins.
'';
example = literalExpression ''
with pkgs.vimPlugins; {
aerial = {
package = aerial-nvim;
setup = "require('aerial').setup {}";
};
harpoon = {
package = harpoon;
setup = "require('harpoon').setup {}";
after = ["aerial"];
};
}'';
};
luaPackages = mkOption {
type = listOf str;
default = [];
description = ''
List of lua packages to install.
'';
};
};
}

6
modules/core/default.nix Normal file
View file

@ -0,0 +1,6 @@
{
imports = [
./build
./warnings
];
}

View file

@ -4,44 +4,30 @@ inputs: {
lib ? pkgs.lib,
check ? true,
extraSpecialArgs ? {},
extraModules ? [],
}: let
inherit (builtins) map filter isString toString getAttr;
inherit (pkgs) wrapNeovimUnstable vimPlugins;
inherit (pkgs.vimUtils) buildVimPlugin;
inherit (pkgs.neovimUtils) makeNeovimConfig;
inherit (lib.strings) makeBinPath escapeShellArgs concatStringsSep;
inherit (lib.lists) concatLists optional;
inherit (lib.attrsets) recursiveUpdate;
inherit (lib.asserts) assertMsg;
# call the extedended library with `lib` and `inputs` as arguments
# lib is used to provide the standard library functions to the extended library
# but it can be overridden while this file is being called
# inputs is used to pass inputs to the plugin autodiscovery function
extendedLib = import ../lib/stdlib-extended.nix lib inputs;
# import modules.nix with `check`, `pkgs` and `lib` as arguments
# check can be disabled while calling this file is called
# to avoid checking in all modules
nvimModules = import ./modules.nix {
inherit check pkgs;
lib = extendedLib;
};
# evaluate the extended library with the modules
# optionally with any additional modules passed by the user
module = extendedLib.evalModules {
modules = [configuration] ++ nvimModules;
specialArgs = recursiveUpdate {modulesPath = toString ./.;} extraSpecialArgs;
modules = concatLists [[configuration] nvimModules extraModules];
};
# alias to the internal configuration
vimOptions = module.config.vim;
# build a vim plugin with the given name and arguments
# if the plugin is nvim-treesitter, warn the user to use buildTreesitterPlug
# instead
extraLuaPackages = ps: map (x: ps.${x}) vimOptions.luaPackages;
buildPlug = {pname, ...} @ args:
assert assertMsg (pname != "nvim-treesitter") "Use buildTreesitterPlug for building nvim-treesitter.";
buildVimPlugin (args
@ -74,51 +60,24 @@ inputs: {
(f: f != null)
plugins);
# built (or "normalized") plugins that are modified
builtStartPlugins = buildConfigPlugins vimOptions.startPlugins;
builtOptPlugins = map (package: {
plugin = package;
optional = false;
}) (buildConfigPlugins vimOptions.optPlugins);
plugins =
(buildConfigPlugins vimOptions.startPlugins)
++ (map (package: {
plugin = package;
optional = false;
})
(buildConfigPlugins
vimOptions.optPlugins));
# combine built start and optional plugins
# into a single list
plugins = builtStartPlugins ++ builtOptPlugins;
# additional Lua and Python3 packages, mapped to their respective functions
# to conform to the format makeNeovimConfig expects. end user should
# only ever need to pass a list of packages, which are modified
# here
extraLuaPackages = ps: map (x: ps.${x}) vimOptions.luaPackages;
extraPython3Packages = ps: map (x: ps.${x}) vimOptions.python3Packages;
extraWrapperArgs =
concatStringsSep " " (optional (vimOptions.extraPackages != []) ''--prefix PATH : "${makeBinPath vimOptions.extraPackages}"'');
# wrap user's desired neovim package with the desired neovim configuration
# using wrapNeovimUnstable and makeNeovimConfig from nixpkgs.
# the makeNeovimConfig function takes the following arguments:
# - withPython (bool)
# - extraPython3Packages (lambda)
# - withNodeJs (bool)
# - withRuby (bool)
# - extraLuaPackages (lambda)
# - plugins (list)
# - customRC (string)
# and returns the wrapped package
neovimConfigured = makeNeovimConfig {
inherit (vimOptions) viAlias vimAlias withRuby withNodeJs withPython3;
inherit plugins extraLuaPackages extraPython3Packages;
neovim = wrapNeovimUnstable vimOptions.package (makeNeovimConfig {
inherit (vimOptions) viAlias;
inherit (vimOptions) vimAlias;
inherit extraLuaPackages;
inherit plugins;
customRC = vimOptions.builtConfigRC;
};
neovim-wrapped = wrapNeovimUnstable vimOptions.package (recursiveUpdate neovimConfigured {
wrapperArgs = escapeShellArgs neovimConfigured.wrapperArgs + " " + extraWrapperArgs;
});
in {
inherit (module) options config;
inherit (module._module.args) pkgs;
# expose wrapped neovim-package
neovim = neovim-wrapped;
inherit neovim;
}

View file

@ -6,17 +6,16 @@
inherit (lib.modules) mkDefault;
inherit (lib.lists) concatLists;
# The core neovim modules.
# Contains configuration for core neovim features
# such as spellchecking, mappings, and the init script (init.vim).
core = map (p: ./core + "/${p}") [
"build"
"warnings"
];
neovim = map (p: ./neovim + "/${p}") [
"init"
"basic"
"mappings"
];
# Individual plugin modules, separated by the type of plugin.
# While adding a new type, you must make sure your type is
# included in the list below.
plugins = map (p: ./plugins + "/${p}") [
"assistant"
"autopairs"
@ -45,15 +44,7 @@
"visuals"
];
# The neovim wrapper, used to build a wrapped neovim package
# using the configuration passed in `neovim` and `plugins` modules.
wrapper = map (p: ./wrapper + "/${p}") [
"build"
"rc"
"warnings"
];
allModules = concatLists [neovim plugins wrapper];
allModules = concatLists [core neovim plugins];
pkgsModule = {config, ...}: {
config = {

View file

@ -145,7 +145,6 @@ in {
default = true;
description = "New splits will open to the right";
};
enableEditorconfig = mkOption {
type = bool;
default = true;
@ -168,19 +167,25 @@ in {
config.vim.configRC.basic = entryAfter ["globalsScript"] ''
" Settings that are set for everything
set encoding=utf-8
set hidden
set shortmess+=c
set expandtab
set mouse=${cfg.mouseSupport}
set tabstop=${toString cfg.tabWidth}
set shiftwidth=${toString cfg.tabWidth}
set softtabstop=${toString cfg.tabWidth}
set expandtab
set cmdheight=${toString cfg.cmdHeight}
set updatetime=${toString cfg.updateTime}
set shortmess+=c
set tm=${toString cfg.mapTimeout}
set hidden
set cursorlineopt=${toString cfg.cursorlineOpt}
set scrolloff=${toString cfg.scrollOffset}
${optionalString cfg.debugMode.enable ''
" Debug mode settings
set verbose=${toString cfg.debugMode.level}
set verbosefile=${cfg.debugMode.logFile}
''}
${optionalString cfg.splitBelow ''
set splitbelow
''}

View file

@ -1,7 +1,6 @@
{
imports = [
./basic.nix
./debug.nix
./configrc.nix
./spellcheck.nix
];
}

View file

@ -0,0 +1,34 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.options) mkEnableOption literalExpression mkOption;
inherit (lib.strings) concatStringsSep;
inherit (lib.lists) optionals;
inherit (lib.types) listOf str;
inherit (lib.nvim.dag) entryAfter;
cfg = config.vim.spellChecking;
in {
options.vim.spellChecking = {
enable = mkEnableOption "neovim's built-in spellchecking";
languages = mkOption {
type = listOf str;
default = ["en"];
example = literalExpression ''["en" "de"]'';
description = "The languages to be used for spellchecking";
};
};
config = mkIf cfg.enable {
vim = {
configRC.spellchecking = entryAfter ["basic"] ''
" Spellchecking
set spell
set spelllang=${concatStringsSep "," cfg.languages}
'';
};
};
}

View file

@ -0,0 +1,5 @@
{
config = {
vim.startPlugins = ["plenary-nvim"];
};
}

View file

@ -1,6 +1,8 @@
{
imports = [
./basic
./mappings
./config.nix
./options.nix
];
}

View file

@ -1,50 +0,0 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.strings) optionalString;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) path enum nullOr;
inherit (lib.nvim.dag) entryAfter;
cfg = config.vim.debugMode;
in {
options.vim = {
debugMode = {
enable = mkEnableOption "debug mode";
level = mkOption {
type = enum [2 3 4 5 8 9 11 12 13 14 15 16];
default = 16;
description = ''
Set verbosity level of Neovim while debug mode is enabled.
Value must be be one of the levels expected by Neovim's
[`verbose` option](https://neovim.io/doc/user/options.html#'verbose')
'';
};
logFile = mkOption {
type = nullOr path;
default = null;
description = ''
Set the log file that will be used to store verbose messages
set by the `verbose` option.
'';
};
};
};
config.vim = mkIf cfg.enable {
luaConfigRC.debug-mode = entryAfter ["basic"] ''
-- Debug mode settings
vim.o.verbose = ${toString cfg.level},
${optionalString (cfg.logFile != null) ''
-- Set verbose log file
vim.o.verbosefile = ${cfg.logFile},
''}
'';
};
}

View file

@ -1,70 +0,0 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf mkRenamedOptionModule;
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) listOf str;
inherit (lib.nvim.lua) listToLuaTable;
inherit (lib.nvim.dag) entryAfter;
cfg = config.vim.spellcheck;
in {
imports = [
(mkRenamedOptionModule ["vim" "spellChecking"] ["vim" "spellcheck"])
];
options.vim.spellcheck = {
enable = mkEnableOption "neovim's built-in spellchecking";
languages = mkOption {
type = listOf str;
default = ["en"];
example = literalExpression ''["en" "de"]'';
description = ''
A list of languages that should be used for spellchecking.
To add your own language files, you may place your `spell`
directory in either `~/.config/nvim` or the
[additionalRuntimePaths](#opt-vim.additionalRuntimePaths)
directory provided by neovim-flake.
'';
};
ignoredFiletypes = mkOption {
type = listOf str;
default = ["toggleterm"];
example = literalExpression ''["markdown" "gitcommit"]'';
description = ''
A list of filetypes for which spellchecking will be disabled.
You may use `echo &filetype` in neovim to find out the
filetype for a specific buffer.
'';
};
programmingWordlist.enable = mkEnableOption ''
vim-dirtytalk, a wordlist for programmers containing
common programming terms.
Setting this value as `true` has the same effect
as setting {option}`vim.spellCheck.enable`
'';
};
config = mkIf cfg.enable {
vim.luaConfigRC.spellcheck = entryAfter ["basic"] ''
vim.opt.spell = true
vim.opt.spelllang = ${listToLuaTable cfg.languages}
-- Disable spellchecking for certain filetypes
-- as configured by `vim.spellcheck.ignoredFiletypes`
vim.api.nvim_create_autocmd({ "FileType" }, {
pattern = ${listToLuaTable cfg.ignoredFiletypes},
callback = function()
vim.opt_local.spell = false
end,
})
'';
};
}

View file

@ -1,59 +0,0 @@
{
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim;
in {
config = {
vim.maps = {
normal =
mkIf cfg.disableArrows {
"<up>" = {
action = "<nop>";
noremap = false;
};
"<down>" = {
action = "<nop>";
noremap = false;
};
"<left>" = {
action = "<nop>";
noremap = false;
};
"<right>" = {
action = "<nop>";
noremap = false;
};
}
// mkIf cfg.mapLeaderSpace {
"<space>" = {
action = "<nop>";
};
};
insert = mkIf cfg.disableArrows {
"<up>" = {
action = "<nop>";
noremap = false;
};
"<down>" = {
action = "<nop>";
noremap = false;
};
"<left>" = {
action = "<nop>";
noremap = false;
};
"<right>" = {
action = "<nop>";
noremap = false;
};
};
};
};
}

View file

@ -1,6 +1,57 @@
{
imports = [
./config.nix
./options.nix
];
config,
lib,
...
}: let
inherit (lib.modules) mkIf;
cfg = config.vim;
in {
vim.maps = {
normal =
mkIf cfg.disableArrows {
"<up>" = {
action = "<nop>";
noremap = false;
};
"<down>" = {
action = "<nop>";
noremap = false;
};
"<left>" = {
action = "<nop>";
noremap = false;
};
"<right>" = {
action = "<nop>";
noremap = false;
};
}
// mkIf cfg.mapLeaderSpace {
"<space>" = {
action = "<nop>";
};
};
insert = mkIf cfg.disableArrows {
"<up>" = {
action = "<nop>";
noremap = false;
};
"<down>" = {
action = "<nop>";
noremap = false;
};
"<left>" = {
action = "<nop>";
noremap = false;
};
"<right>" = {
action = "<nop>";
noremap = false;
};
};
};
}

View file

@ -1,101 +0,0 @@
{lib, ...}: let
inherit (lib.options) mkOption;
inherit (lib.types) bool str attrsOf nullOr submodule;
inherit (lib.nvim.config) mkBool;
# Most of the keybindings code is highly inspired by pta2002/nixvim.
# Thank you!
mapConfigOptions = {
silent =
mkBool false
"Whether this mapping should be silent. Equivalent to adding <silent> to a map.";
nowait =
mkBool false
"Whether to wait for extra input on ambiguous mappings. Equivalent to adding <nowait> to a map.";
script =
mkBool false
"Equivalent to adding <script> to a map.";
expr =
mkBool false
"Means that the action is actually an expression. Equivalent to adding <expr> to a map.";
unique =
mkBool false
"Whether to fail if the map is already defined. Equivalent to adding <unique> to a map.";
noremap =
mkBool true
"Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default.";
desc = mkOption {
type = nullOr str;
default = null;
description = "A description of this keybind, to be shown in which-key, if you have it enabled.";
};
};
mapOption = submodule {
options =
mapConfigOptions
// {
action = mkOption {
type = str;
description = "The action to execute.";
};
lua = mkOption {
type = bool;
description = ''
If true, `action` is considered to be lua code.
Thus, it will not be wrapped in `""`.
'';
default = false;
};
};
};
mapOptions = mode:
mkOption {
description = "Mappings for ${mode} mode";
type = attrsOf mapOption;
default = {};
};
in {
options.vim = {
maps = mkOption {
type = submodule {
options = {
normal = mapOptions "normal";
insert = mapOptions "insert";
select = mapOptions "select";
visual = mapOptions "visual and select";
terminal = mapOptions "terminal";
normalVisualOp = mapOptions "normal, visual, select and operator-pending (same as plain 'map')";
visualOnly = mapOptions "visual only";
operator = mapOptions "operator-pending";
insertCommand = mapOptions "insert and command-line";
lang = mapOptions "insert, command-line and lang-arg";
command = mapOptions "command-line";
};
};
default = {};
description = ''
Custom keybindings for any mode.
For plain maps (e.g. just 'map' or 'remap') use `maps.normalVisualOp`.
'';
example = ''
maps = {
normal."<leader>m" = {
silent = true;
action = "<cmd>make<CR>";
}; # Same as nnoremap <leader>m <silent> <cmd>make<CR>
};
'';
};
};
}

View file

@ -31,7 +31,7 @@ in {
vim.luaConfigRC.nvimtreelua = entryAnywhere ''
${
optionalString cfg.setupOpts.disable_netrw ''
optionalString cfg.disableNetrw ''
-- disable netrew completely
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1

View file

@ -7,7 +7,7 @@
inherit (lib.nvim.dag) entryAfter;
cfg = config.vim.spellcheck;
in {
config = mkIf (cfg.enable && cfg.programmingWordlist.enable) {
config = mkIf cfg.vim-dirtytalk.enable {
vim = {
startPlugins = ["vim-dirtytalk"];

View file

@ -1,7 +1,7 @@
{lib, ...}: let
inherit (lib.modules) mkAliasOptionModule;
inherit (lib.options) mkEnableOption;
in {
imports = [
(mkAliasOptionModule ["vim" "spellcheck" "vim-dirtytalk" "enable"] ["vim" "spellcheck" "programmingWordlist" "enable"])
];
options.vim.spellcheck.vim-dirtytalk = {
enable = mkEnableOption "vim-dirtytalk, a wordlist for programmers, that includes programming words";
};
}

View file

@ -1,13 +0,0 @@
{
config,
lib,
...
}: let
inherit (lib.attrsets) attrValues;
cfg = config.vim;
in {
config = {
vim.startPlugins = map (x: x.package) (attrValues cfg.extraPlugins);
};
}

View file

@ -1,144 +0,0 @@
{
pkgs,
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption literalExpression;
inherit (lib.types) package bool str listOf attrsOf;
inherit (lib.nvim.types) pluginsOpt extraPluginType;
in {
options.vim = {
package = mkOption {
type = package;
default = pkgs.neovim-unwrapped;
description = ''
The neovim package to use.
::: {.warning}
You will need to use an unwrapped package for this
option to work as intended.
:::
'';
};
viAlias = mkOption {
type = bool;
default = true;
description = "Enable the `vi` alias for `nvim`";
};
vimAlias = mkOption {
type = bool;
default = true;
description = "Enable the `vim` alias for `nvim`";
};
startPlugins = pluginsOpt {
default = ["plenary-nvim"];
example = literalExpression ''
[pkgs.vimPlugins.telescope-nvim]
'';
description = ''
List of plugins to load on startup. This is used
internally to add plugins to Neovim's runtime.
To add additional plugins to your configuration, consider
using the [{option}`vim.extraPlugins`](#opt-vim.optPlugins)
option.
'';
};
optPlugins = pluginsOpt {
default = [];
example = literalExpression ''
[pkgs.vimPlugins.vim-ghost]
'';
description = ''
List of plugins to optionally load on startup.
This option has the same type definition as {option}`vim.startPlugins`
and plugins in this list are appended to {option}`vim.startPlugins` by
the wrapper during the build process.
To avoid overriding packages and dependencies provided by startPlugins, you
are recommended to use this option or {option}`vim.extraPlugins` option.
'';
};
extraPlugins = mkOption {
type = attrsOf extraPluginType;
default = {};
description = ''
A list of plugins and their configurations that will be
set up after builtin plugins.
This option takes a special type that allows you to order
your custom plugins using neovim-flake's modified DAG
library.
'';
example = literalExpression ''
with pkgs.vimPlugins; {
aerial = {
package = aerial-nvim;
setup = "require('aerial').setup {}";
};
harpoon = {
package = harpoon;
setup = "require('harpoon').setup {}";
after = ["aerial"]; # place harpoon configuration after aerial
};
}
'';
};
extraPackages = mkOption {
type = listOf package;
default = [];
example = literalExpression ''[pkgs.fzf pkgs.ripgrep]'';
description = ''
List of additional packages to make available to the Neovim
wrapper.
'';
};
# this defaults to `true` in the wrapper
# and since we passs this value to the wrapper
# with an inherit, it should be `true` here as well
withRuby =
mkEnableOption ''
Ruby support in the Neovim wrapper.
''
// {
default = true;
};
withNodeJs = mkEnableOption ''
NodeJs support in the Neovim wrapper.
'';
luaPackages = mkOption {
type = listOf str;
default = [];
example = literalExpression ''["magick" "serpent"]'';
description = ''
List of lua packages to install.
'';
};
withPython3 = mkEnableOption ''
Python3 support in the Neovim wrapper.
'';
python3Packages = mkOption {
type = listOf str;
default = [];
example = literalExpression ''["pynvim"]'';
description = ''
List of python packages to install.
'';
};
};
}

View file

@ -1,203 +0,0 @@
{
config,
lib,
...
}: let
inherit (lib.options) mkOption mkEnableOption literalMD literalExpression;
inherit (lib.strings) optionalString;
inherit (lib.types) str oneOf attrs lines listOf either path bool;
inherit (lib.nvim.types) dagOf;
inherit (lib.nvim.lua) listToLuaTable;
cfg = config.vim;
in {
options.vim = {
enableLuaLoader = mkEnableOption ''
the experimental Lua module loader to speed up the start up process
If `true`, this will enable the experimental Lua module loader which:
- overrides loadfile
- adds the lua loader using the byte-compilation cache
- adds the libs loader
- removes the default Neovim loader
This is disabled by default. Before setting this option, please
take a look at the [{option}`official documentation`](https://neovim.io/doc/user/lua.html#vim.loader.enable()).
'';
disableDefaultRuntimePaths = mkOption {
type = bool;
default = true;
example = false;
description = ''
Disables the default runtime paths that are set by Neovim
when it starts up. This is useful when you want to have
full control over the runtime paths that are set by Neovim.
::: {.note}
To avoid leaking imperative user configuration into your
configuration, this is enabled by default. If you wish
to load configuration from user configuration directories
(e.g. `$HOME/.config/nvim`, `$HOME/.config/nvim/after`
and `$HOME/.local/share/nvim/site`) you may set this
option to true.
:::
'';
};
additionalRuntimePaths = mkOption {
type = listOf (either path str);
default = [];
example = literalExpression ''
[
"$HOME/.config/nvim-extra" # absolute path, as a string - impure
./nvim # relative path, as a path - pure
]
'';
description = ''
Additional runtime paths that will be appended to the
active runtimepath of the Neovim. This can be used to
add additional lookup paths for configs, plugins, spell
languages and other things you would generally place in
your `$HOME/.config/nvim`.
This is meant as a declarative alternative to throwing
files into `~/.config/nvim` and having the Neovim
wrapper pick them up. For more details on
`vim.o.runtimepath`, and what paths to use; please see
[the official documentation](https://neovim.io/doc/user/options.html#'runtimepath')
'';
};
globals = mkOption {
type = attrs;
default = {};
description = ''
An attribute set containing global variable values
for storing vim variables as early as possible. If
populated, this soption will set vim variables in the
built configRC as the first item.
E.g. {foo = "bar"} will set `g:foo` to "bar" where
the type of `bar` in the resulting vimscript will be
infered from the type of the value in the `{name = value}`
pair.
'';
};
configRC = mkOption {
type = oneOf [(dagOf lines) str];
default = {};
description = ''
Contents of vimrc, either as a string or a DAG.
If this option is passed as a DAG, it will be resolved
according to the DAG resolution rules (e.g. entryBefore
or entryAfter) as per the neovim-flake library.
'';
example = literalMD ''
```vim
" Set the tab size to 4 spaces
set tabstop=4
set shiftwidth=4
set expandtab
```
'';
};
luaConfigPre = mkOption {
type = str;
default = ''
${optionalString (cfg.additionalRuntimePaths != []) ''
-- The following list is generated from `vim.additionalRuntimePaths`
-- and is used to append additional runtime paths to the
-- `runtimepath` option.
local additionalRuntimePaths = ${listToLuaTable cfg.additionalRuntimePaths};
for _, path in ipairs(additionalRuntimePaths) do
vim.opt.runtimepath:append(path)
end
''}
${optionalString cfg.disableDefaultRuntimePaths ''
-- Remove default user runtime paths from the
-- `runtimepath` option to avoid leaking user configuration
-- into the final neovim wrapper
vim.opt.runtimepath:remove(vim.fn.stdpath('config')) -- $HOME/.config/nvim
vim.opt.runtimepath:remove(vim.fn.stdpath('config') .. "/after") -- $HOME/.config/nvim/after
vim.opt.runtimepath:remove(vim.fn.stdpath('data') .. "/site") -- $HOME/.local/share/nvim/site
''}
${optionalString cfg.enableLuaLoader "vim.loader.enable()"}
'';
defaultText = literalMD ''
By default, this option will **append** paths in
[vim.additionalRuntimePaths](#opt-vim.additionalRuntimePaths)
to the `runtimepath` and enable the experimental Lua module loader
if [vim.enableLuaLoader](#opt-vim.enableLuaLoader) is set to true.
'';
example = literalExpression ''"$${builtins.readFile ./my-lua-config-pre.lua}"'';
description = ''
Verbatim lua code that will be inserted **before**
the result of `luaConfigRc` DAG has been resolved.
This option **does not** take a DAG set, but a string
instead. Useful when you'd like to insert contents
of lua configs after the DAG result.
::: {.warning}
You do not want to override this option with mkForce
It is used internally to set certain options as early
as possible and should be avoided unless you know what
you're doing. Passing a string to this option will
merge it with the default contents.
:::
'';
};
luaConfigRC = mkOption {
type = oneOf [(dagOf lines) str];
default = {};
description = ''
Lua configuration, either as a string or a DAG.
If this option is passed as a DAG, it will be resolved
according to the DAG resolution rules (e.g. entryBefore
or entryAfter) as per the neovim-flake library.
'';
example = literalMD ''
```lua
-- Set the tab size to 4 spaces
vim.opt.tabstop = 4
vim.opt.shiftwidth = 4
vim.opt.expandtab = true
```
'';
};
luaConfigPost = mkOption {
type = str;
default = "";
example = literalExpression ''"$${builtins.readFile ./my-lua-config-post.lua}"'';
description = ''
Verbatim lua code that will be inserted **after**
the result of the `luaConfigRc` DAG has been resolved
This option **does not** take a DAG set, but a string
instead. Useful when you'd like to insert contents
of lua configs after the DAG result.
'';
};
builtConfigRC = mkOption {
internal = true;
type = lines;
description = "The built config for neovim after resolving the DAG";
};
};
}