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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, makeWrapper
, cargo
, curl
, fd
, fzf
, git
, gnumake
, gnused
, gnutar
, gzip
, lua-language-server
, neovim
, nodejs
, nodePackages
, ripgrep
, tree-sitter
, unzip
, nvimAlias ? false
, viAlias ? false
, vimAlias ? false
, globalConfig ? ""
}:
stdenv.mkDerivation (finalAttrs: {
inherit nvimAlias viAlias vimAlias globalConfig;
pname = "lunarvim";
version = "1.3.0";
src = fetchFromGitHub {
owner = "LunarVim";
repo = "LunarVim";
rev = "refs/tags/${finalAttrs.version}";
hash = "sha256-z1Cw3wGpFDmlrAIy7rrjlMtzcW7a6HWSjI+asEDcGPA=";
};
# Pull in the fix for Nerd Fonts until the next release
patches = [
(
fetchpatch {
url = "https://github.com/LunarVim/LunarVim/commit/d187cbd03fbc8bd1b59250869e0e325518bf8798.patch";
sha256 = "sha256-ktkQ2GiIOhbVOMjy1u5Bf8dJP4SXHdG4j9OEFa9Fm7w=";
}
)
];
nativeBuildInputs = [
gnused
makeWrapper
];
runtimeDeps = [
stdenv.cc
cargo
curl
fd
fzf
git
gnumake
gnutar
gzip
lua-language-server
neovim
nodejs
nodePackages.neovim
ripgrep
tree-sitter
unzip
];
buildPhase = ''
runHook preBuild
mkdir -p share/lvim
cp init.lua utils/installer/config.example.lua share/lvim
cp -r lua snapshots share/lvim
mkdir bin
cp utils/bin/lvim.template bin/lvim
chmod +x bin/lvim
# LunarVim automatically copies config.example.lua, but we need to make it writable.
sed -i "2 i\\
if [ ! -f \$HOME/.config/lvim/config.lua ]; then \\
cp $out/share/lvim/config.example.lua \$HOME/.config/lvim/config.lua \\
chmod +w \$HOME/.config/lvim/config.lua \\
fi
" bin/lvim
substituteInPlace bin/lvim \
--replace NVIM_APPNAME_VAR lvim \
--replace RUNTIME_DIR_VAR \$HOME/.local/share/lvim \
--replace CONFIG_DIR_VAR \$HOME/.config/lvim \
--replace CACHE_DIR_VAR \$HOME/.cache/lvim \
--replace BASE_DIR_VAR $out/share/lvim \
--replace nvim ${neovim}/bin/nvim
# Allow language servers to be overridden by appending instead of prepending
# the mason.nvim path.
echo "lvim.builtin.mason.PATH = \"append\"" > share/lvim/global.lua
echo ${ lib.strings.escapeShellArg finalAttrs.globalConfig } >> share/lvim/global.lua
sed -i "s/add_to_path()/add_to_path(true)/" share/lvim/lua/lvim/core/mason.lua
sed -i "/Log:set_level/idofile(\"$out/share/lvim/global.lua\")" share/lvim/lua/lvim/config/init.lua
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r bin share $out
for iconDir in utils/desktop/*/; do
install -Dm444 $iconDir/lvim.svg -t $out/share/icons/hicolor/$(basename $iconDir)/apps
done
install -Dm444 utils/desktop/lvim.desktop -t $out/share/applications
wrapProgram $out/bin/lvim --prefix PATH : ${ lib.makeBinPath finalAttrs.runtimeDeps } \
--prefix LD_LIBRARY_PATH : ${stdenv.cc.cc.lib} \
--prefix CC : ${stdenv.cc.targetPrefix}cc
'' + lib.optionalString finalAttrs.nvimAlias ''
ln -s $out/bin/lvim $out/bin/nvim
'' + lib.optionalString finalAttrs.viAlias ''
ln -s $out/bin/lvim $out/bin/vi
'' + lib.optionalString finalAttrs.vimAlias ''
ln -s $out/bin/lvim $out/bin/vim
'' + ''
runHook postInstall
'';
meta = with lib; {
description = "IDE layer for Neovim";
homepage = "https://www.lunarvim.org/";
changelog = "https://github.com/LunarVim/LunarVim/blob/${finalAttrs.src.rev}/CHANGELOG.md";
sourceProvenance = with sourceTypes; [ fromSource ];
license = licenses.gpl3Only;
maintainers = with maintainers; [ prominentretail ];
platforms = platforms.unix;
mainProgram = "lvim";
};
})
|