-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwrapper.nix
78 lines (67 loc) · 1.82 KB
/
wrapper.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{ lib
, pkgs
, neovim-unwrapped
, wrapNeovimUnstable
, neovimUtils
, callPackage
, ...
}:
let
all-plugins = callPackage ./plugins.nix { };
lua-config = callPackage ./lua/config.nix { };
extra-packages = with pkgs; [
tree-sitter
pyright
black
clang-tools
rust-analyzer
rustfmt
haskell-language-server
shellcheck
yamllint
];
extra-make-wrapper-args = ''--suffix PATH : "${lib.makeBinPath extra-packages}"'';
default-plugin = {
type = "viml";
plugin = null;
config = "";
optional = false;
runtime = { };
};
# Plugins can be either a package or a Neovim plugin attribute set.
# We need to normalize them such that they are all plugin attribute sets.
normalized-plugins =
builtins.map
(plugin: default-plugin // (if (plugin ? plugin) then plugin else { inherit plugin; }))
(all-plugins);
suppress-not-viml-config = plugin:
if plugin.type != "viml" then
plugin // { config = ""; }
else
plugin;
custom-rc = ''
lua <<EOF
-- Allow imports from common locations for some packages.
-- This is required for things like lua_ls to work.
local runtime_path = vim.split(package.path, ";")
table.insert(runtime_path, "lua/?.lua")
table.insert(runtime_path, "lua/?/init.lua")
EOF
" Custom Lua Config.
${lua-config}
'';
neovim-config = neovimUtils.makeNeovimConfig {
viAlias = true;
vimAlias = true;
plugins = builtins.map suppress-not-viml-config normalized-plugins;
customRC = custom-rc;
};
neovim-config-with-wrapper-args = neovim-config // {
wrapRc = true;
wrapperArgs =
(lib.escapeShellArgs neovim-config.wrapperArgs) + " "
+ extra-make-wrapper-args;
};
wrapped-neovim = wrapNeovimUnstable neovim-unwrapped neovim-config-with-wrapper-args;
in
wrapped-neovim