+287
LICENSE
+287
LICENSE
···
1
+
EUROPEAN UNION PUBLIC LICENCE v. 1.2
2
+
EUPL © the European Union 2007, 2016
3
+
4
+
This European Union Public Licence (the ‘EUPL’) applies to the Work (as defined
5
+
below) which is provided under the terms of this Licence. Any use of the Work,
6
+
other than as authorised under this Licence is prohibited (to the extent such
7
+
use is covered by a right of the copyright holder of the Work).
8
+
9
+
The Work is provided under the terms of this Licence when the Licensor (as
10
+
defined below) has placed the following notice immediately following the
11
+
copyright notice for the Work:
12
+
13
+
Licensed under the EUPL
14
+
15
+
or has expressed by any other means his willingness to license under the EUPL.
16
+
17
+
1. Definitions
18
+
19
+
In this Licence, the following terms have the following meaning:
20
+
21
+
- ‘The Licence’: this Licence.
22
+
23
+
- ‘The Original Work’: the work or software distributed or communicated by the
24
+
Licensor under this Licence, available as Source Code and also as Executable
25
+
Code as the case may be.
26
+
27
+
- ‘Derivative Works’: the works or software that could be created by the
28
+
Licensee, based upon the Original Work or modifications thereof. This Licence
29
+
does not define the extent of modification or dependence on the Original Work
30
+
required in order to classify a work as a Derivative Work; this extent is
31
+
determined by copyright law applicable in the country mentioned in Article 15.
32
+
33
+
- ‘The Work’: the Original Work or its Derivative Works.
34
+
35
+
- ‘The Source Code’: the human-readable form of the Work which is the most
36
+
convenient for people to study and modify.
37
+
38
+
- ‘The Executable Code’: any code which has generally been compiled and which is
39
+
meant to be interpreted by a computer as a program.
40
+
41
+
- ‘The Licensor’: the natural or legal person that distributes or communicates
42
+
the Work under the Licence.
43
+
44
+
- ‘Contributor(s)’: any natural or legal person who modifies the Work under the
45
+
Licence, or otherwise contributes to the creation of a Derivative Work.
46
+
47
+
- ‘The Licensee’ or ‘You’: any natural or legal person who makes any usage of
48
+
the Work under the terms of the Licence.
49
+
50
+
- ‘Distribution’ or ‘Communication’: any act of selling, giving, lending,
51
+
renting, distributing, communicating, transmitting, or otherwise making
52
+
available, online or offline, copies of the Work or providing access to its
53
+
essential functionalities at the disposal of any other natural or legal
54
+
person.
55
+
56
+
2. Scope of the rights granted by the Licence
57
+
58
+
The Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
59
+
sublicensable licence to do the following, for the duration of copyright vested
60
+
in the Original Work:
61
+
62
+
- use the Work in any circumstance and for all usage,
63
+
- reproduce the Work,
64
+
- modify the Work, and make Derivative Works based upon the Work,
65
+
- communicate to the public, including the right to make available or display
66
+
the Work or copies thereof to the public and perform publicly, as the case may
67
+
be, the Work,
68
+
- distribute the Work or copies thereof,
69
+
- lend and rent the Work or copies thereof,
70
+
- sublicense rights in the Work or copies thereof.
71
+
72
+
Those rights can be exercised on any media, supports and formats, whether now
73
+
known or later invented, as far as the applicable law permits so.
74
+
75
+
In the countries where moral rights apply, the Licensor waives his right to
76
+
exercise his moral right to the extent allowed by law in order to make effective
77
+
the licence of the economic rights here above listed.
78
+
79
+
The Licensor grants to the Licensee royalty-free, non-exclusive usage rights to
80
+
any patents held by the Licensor, to the extent necessary to make use of the
81
+
rights granted on the Work under this Licence.
82
+
83
+
3. Communication of the Source Code
84
+
85
+
The Licensor may provide the Work either in its Source Code form, or as
86
+
Executable Code. If the Work is provided as Executable Code, the Licensor
87
+
provides in addition a machine-readable copy of the Source Code of the Work
88
+
along with each copy of the Work that the Licensor distributes or indicates, in
89
+
a notice following the copyright notice attached to the Work, a repository where
90
+
the Source Code is easily and freely accessible for as long as the Licensor
91
+
continues to distribute or communicate the Work.
92
+
93
+
4. Limitations on copyright
94
+
95
+
Nothing in this Licence is intended to deprive the Licensee of the benefits from
96
+
any exception or limitation to the exclusive rights of the rights owners in the
97
+
Work, of the exhaustion of those rights or of other applicable limitations
98
+
thereto.
99
+
100
+
5. Obligations of the Licensee
101
+
102
+
The grant of the rights mentioned above is subject to some restrictions and
103
+
obligations imposed on the Licensee. Those obligations are the following:
104
+
105
+
Attribution right: The Licensee shall keep intact all copyright, patent or
106
+
trademarks notices and all notices that refer to the Licence and to the
107
+
disclaimer of warranties. The Licensee must include a copy of such notices and a
108
+
copy of the Licence with every copy of the Work he/she distributes or
109
+
communicates. The Licensee must cause any Derivative Work to carry prominent
110
+
notices stating that the Work has been modified and the date of modification.
111
+
112
+
Copyleft clause: If the Licensee distributes or communicates copies of the
113
+
Original Works or Derivative Works, this Distribution or Communication will be
114
+
done under the terms of this Licence or of a later version of this Licence
115
+
unless the Original Work is expressly distributed only under this version of the
116
+
Licence — for example by communicating ‘EUPL v. 1.2 only’. The Licensee
117
+
(becoming Licensor) cannot offer or impose any additional terms or conditions on
118
+
the Work or Derivative Work that alter or restrict the terms of the Licence.
119
+
120
+
Compatibility clause: If the Licensee Distributes or Communicates Derivative
121
+
Works or copies thereof based upon both the Work and another work licensed under
122
+
a Compatible Licence, this Distribution or Communication can be done under the
123
+
terms of this Compatible Licence. For the sake of this clause, ‘Compatible
124
+
Licence’ refers to the licences listed in the appendix attached to this Licence.
125
+
Should the Licensee's obligations under the Compatible Licence conflict with
126
+
his/her obligations under this Licence, the obligations of the Compatible
127
+
Licence shall prevail.
128
+
129
+
Provision of Source Code: When distributing or communicating copies of the Work,
130
+
the Licensee will provide a machine-readable copy of the Source Code or indicate
131
+
a repository where this Source will be easily and freely available for as long
132
+
as the Licensee continues to distribute or communicate the Work.
133
+
134
+
Legal Protection: This Licence does not grant permission to use the trade names,
135
+
trademarks, service marks, or names of the Licensor, except as required for
136
+
reasonable and customary use in describing the origin of the Work and
137
+
reproducing the content of the copyright notice.
138
+
139
+
6. Chain of Authorship
140
+
141
+
The original Licensor warrants that the copyright in the Original Work granted
142
+
hereunder is owned by him/her or licensed to him/her and that he/she has the
143
+
power and authority to grant the Licence.
144
+
145
+
Each Contributor warrants that the copyright in the modifications he/she brings
146
+
to the Work are owned by him/her or licensed to him/her and that he/she has the
147
+
power and authority to grant the Licence.
148
+
149
+
Each time You accept the Licence, the original Licensor and subsequent
150
+
Contributors grant You a licence to their contributions to the Work, under the
151
+
terms of this Licence.
152
+
153
+
7. Disclaimer of Warranty
154
+
155
+
The Work is a work in progress, which is continuously improved by numerous
156
+
Contributors. It is not a finished work and may therefore contain defects or
157
+
‘bugs’ inherent to this type of development.
158
+
159
+
For the above reason, the Work is provided under the Licence on an ‘as is’ basis
160
+
and without warranties of any kind concerning the Work, including without
161
+
limitation merchantability, fitness for a particular purpose, absence of defects
162
+
or errors, accuracy, non-infringement of intellectual property rights other than
163
+
copyright as stated in Article 6 of this Licence.
164
+
165
+
This disclaimer of warranty is an essential part of the Licence and a condition
166
+
for the grant of any rights to the Work.
167
+
168
+
8. Disclaimer of Liability
169
+
170
+
Except in the cases of wilful misconduct or damages directly caused to natural
171
+
persons, the Licensor will in no event be liable for any direct or indirect,
172
+
material or moral, damages of any kind, arising out of the Licence or of the use
173
+
of the Work, including without limitation, damages for loss of goodwill, work
174
+
stoppage, computer failure or malfunction, loss of data or any commercial
175
+
damage, even if the Licensor has been advised of the possibility of such damage.
176
+
However, the Licensor will be liable under statutory product liability laws as
177
+
far such laws apply to the Work.
178
+
179
+
9. Additional agreements
180
+
181
+
While distributing the Work, You may choose to conclude an additional agreement,
182
+
defining obligations or services consistent with this Licence. However, if
183
+
accepting obligations, You may act only on your own behalf and on your sole
184
+
responsibility, not on behalf of the original Licensor or any other Contributor,
185
+
and only if You agree to indemnify, defend, and hold each Contributor harmless
186
+
for any liability incurred by, or claims asserted against such Contributor by
187
+
the fact You have accepted any warranty or additional liability.
188
+
189
+
10. Acceptance of the Licence
190
+
191
+
The provisions of this Licence can be accepted by clicking on an icon ‘I agree’
192
+
placed under the bottom of a window displaying the text of this Licence or by
193
+
affirming consent in any other similar way, in accordance with the rules of
194
+
applicable law. Clicking on that icon indicates your clear and irrevocable
195
+
acceptance of this Licence and all of its terms and conditions.
196
+
197
+
Similarly, you irrevocably accept this Licence and all of its terms and
198
+
conditions by exercising any rights granted to You by Article 2 of this Licence,
199
+
such as the use of the Work, the creation by You of a Derivative Work or the
200
+
Distribution or Communication by You of the Work or copies thereof.
201
+
202
+
11. Information to the public
203
+
204
+
In case of any Distribution or Communication of the Work by means of electronic
205
+
communication by You (for example, by offering to download the Work from a
206
+
remote location) the distribution channel or media (for example, a website) must
207
+
at least provide to the public the information requested by the applicable law
208
+
regarding the Licensor, the Licence and the way it may be accessible, concluded,
209
+
stored and reproduced by the Licensee.
210
+
211
+
12. Termination of the Licence
212
+
213
+
The Licence and the rights granted hereunder will terminate automatically upon
214
+
any breach by the Licensee of the terms of the Licence.
215
+
216
+
Such a termination will not terminate the licences of any person who has
217
+
received the Work from the Licensee under the Licence, provided such persons
218
+
remain in full compliance with the Licence.
219
+
220
+
13. Miscellaneous
221
+
222
+
Without prejudice of Article 9 above, the Licence represents the complete
223
+
agreement between the Parties as to the Work.
224
+
225
+
If any provision of the Licence is invalid or unenforceable under applicable
226
+
law, this will not affect the validity or enforceability of the Licence as a
227
+
whole. Such provision will be construed or reformed so as necessary to make it
228
+
valid and enforceable.
229
+
230
+
The European Commission may publish other linguistic versions or new versions of
231
+
this Licence or updated versions of the Appendix, so far this is required and
232
+
reasonable, without reducing the scope of the rights granted by the Licence. New
233
+
versions of the Licence will be published with a unique version number.
234
+
235
+
All linguistic versions of this Licence, approved by the European Commission,
236
+
have identical value. Parties can take advantage of the linguistic version of
237
+
their choice.
238
+
239
+
14. Jurisdiction
240
+
241
+
Without prejudice to specific agreement between parties,
242
+
243
+
- any litigation resulting from the interpretation of this License, arising
244
+
between the European Union institutions, bodies, offices or agencies, as a
245
+
Licensor, and any Licensee, will be subject to the jurisdiction of the Court
246
+
of Justice of the European Union, as laid down in article 272 of the Treaty on
247
+
the Functioning of the European Union,
248
+
249
+
- any litigation arising between other parties and resulting from the
250
+
interpretation of this License, will be subject to the exclusive jurisdiction
251
+
of the competent court where the Licensor resides or conducts its primary
252
+
business.
253
+
254
+
15. Applicable Law
255
+
256
+
Without prejudice to specific agreement between parties,
257
+
258
+
- this Licence shall be governed by the law of the European Union Member State
259
+
where the Licensor has his seat, resides or has his registered office,
260
+
261
+
- this licence shall be governed by Belgian law if the Licensor has no seat,
262
+
residence or registered office inside a European Union Member State.
263
+
264
+
Appendix
265
+
266
+
‘Compatible Licences’ according to Article 5 EUPL are:
267
+
268
+
- GNU General Public License (GPL) v. 2, v. 3
269
+
- GNU Affero General Public License (AGPL) v. 3
270
+
- Open Software License (OSL) v. 2.1, v. 3.0
271
+
- Eclipse Public License (EPL) v. 1.0
272
+
- CeCILL v. 2.0, v. 2.1
273
+
- Mozilla Public Licence (MPL) v. 2
274
+
- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
275
+
- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) for
276
+
works other than software
277
+
- European Union Public Licence (EUPL) v. 1.1, v. 1.2
278
+
- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong
279
+
Reciprocity (LiLiQ-R+).
280
+
281
+
The European Commission may update this Appendix to later versions of the above
282
+
licences without producing a new version of the EUPL, as long as they provide
283
+
the rights granted in Article 2 of this Licence and protect the covered Source
284
+
Code from exclusive appropriation.
285
+
286
+
All other changes or additions to this Appendix require the production of a new
287
+
EUPL version.
+12
default.nix
+12
default.nix
+24
flake.lock
+24
flake.lock
···
1
+
{
2
+
"nodes": {
3
+
"nixpkgs": {
4
+
"locked": {
5
+
"lastModified": 315532800,
6
+
"narHash": "sha256-X5WIcIkFxPhw7mS219TbEOgrugbMx/2cin09OlWobT8=",
7
+
"rev": "dab3a6e781554f965bde3def0aa2fda4eb8f1708",
8
+
"type": "tarball",
9
+
"url": "https://releases.nixos.org/nixpkgs/nixpkgs-25.11pre830668.dab3a6e78155/nixexprs.tar.xz"
10
+
},
11
+
"original": {
12
+
"type": "tarball",
13
+
"url": "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz"
14
+
}
15
+
},
16
+
"root": {
17
+
"inputs": {
18
+
"nixpkgs": "nixpkgs"
19
+
}
20
+
}
21
+
},
22
+
"root": "root",
23
+
"version": 7
24
+
}
+83
flake.nix
+83
flake.nix
···
1
+
{
2
+
inputs = {
3
+
nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
4
+
};
5
+
6
+
outputs =
7
+
{
8
+
self,
9
+
nixpkgs,
10
+
}:
11
+
let
12
+
inherit (nixpkgs) lib;
13
+
14
+
forAllSystems =
15
+
f: lib.genAttrs lib.systems.flakeExposed (system: f nixpkgs.legacyPackages.${system});
16
+
17
+
mkPkgs = pkgs: import ./default.nix { inherit pkgs; };
18
+
in
19
+
{
20
+
formatter = forAllSystems (
21
+
pkgs:
22
+
pkgs.treefmt.withConfig {
23
+
runtimeInputs = with pkgs; [
24
+
# keep-sorted start
25
+
deadnix
26
+
keep-sorted
27
+
nixfmt-rfc-style
28
+
statix
29
+
stylua
30
+
taplo
31
+
# keep-sorted end
32
+
33
+
(writeShellScriptBin "statix-fix" ''
34
+
for file in "$@"; do
35
+
${lib.getExe statix} fix "$file"
36
+
done
37
+
'')
38
+
];
39
+
40
+
settings = {
41
+
on-unmatched = "info";
42
+
tree-root-file = "flake.nix";
43
+
44
+
formatter = {
45
+
# keep-sorted start block=yes newline_separated=yes
46
+
deadnix = {
47
+
command = "deadnix";
48
+
includes = [ "*.nix" ];
49
+
};
50
+
51
+
keep-sorted = {
52
+
command = "keep-sorted";
53
+
includes = [ "*" ];
54
+
};
55
+
56
+
nixfmt = {
57
+
command = "nixfmt";
58
+
includes = [ "*.nix" ];
59
+
};
60
+
61
+
statix = {
62
+
command = "statix-fix";
63
+
includes = [ "*.nix" ];
64
+
};
65
+
# keep-sorted end
66
+
};
67
+
};
68
+
}
69
+
);
70
+
71
+
legacyPackages = forAllSystems mkPkgs;
72
+
packages = forAllSystems mkPkgs;
73
+
overlays.default = _: mkPkgs;
74
+
75
+
devShells = forAllSystems (pkgs: {
76
+
default = pkgs.mkShellNoCC {
77
+
inputsFrom = [
78
+
self.formatter.${pkgs.stdenv.hostPlatform.system}
79
+
];
80
+
};
81
+
});
82
+
};
83
+
}
+207
wrapper.nix
+207
wrapper.nix
···
1
+
{
2
+
lib,
3
+
lndir,
4
+
stdenvNoCC,
5
+
makeBinaryWrapper,
6
+
neovim-unwrapped,
7
+
}:
8
+
9
+
let
10
+
inherit (lib)
11
+
getExe
12
+
makeBinPath
13
+
getVersion
14
+
unique
15
+
subtractLists
16
+
concatLists
17
+
optionalString
18
+
concatMapStrings
19
+
;
20
+
21
+
inherit (builtins) typeOf baseNameOf;
22
+
in
23
+
24
+
lib.extendMkDerivation {
25
+
constructDrv = stdenvNoCC.mkDerivation;
26
+
27
+
extendDrvArgs =
28
+
_:
29
+
{
30
+
# neovim
31
+
pname ? "neovim",
32
+
versionSuffix ? "wrapped",
33
+
34
+
# you can choose the base, i choose neovim-unwrapped
35
+
basePackage ? neovim-unwrapped,
36
+
37
+
# extra lua packages
38
+
extraLuaPackages ? _: [ ],
39
+
40
+
# path, see there explanation below
41
+
extraPackages ? [ ],
42
+
43
+
# plugins
44
+
startPlugins ? [ ],
45
+
optPlugins ? [ ],
46
+
47
+
# our config
48
+
userConfig,
49
+
50
+
# other customisation
51
+
aliases ? [ ],
52
+
keepDesktopFiles ? false,
53
+
}@args:
54
+
let
55
+
inherit (basePackage) lua;
56
+
luaEnv = lua.withPackages extraLuaPackages;
57
+
inherit (lua.pkgs) luaLib;
58
+
59
+
# find deps
60
+
# see https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/utils/vim-utils.nix#L159-L164
61
+
transitiveClosure =
62
+
plugin: [ plugin ] ++ (lib.unique (concatLists (map transitiveClosure plugin.dependencies or [ ])));
63
+
findDependenciesRecursively = plugins: lib.concatMap transitiveClosure plugins;
64
+
65
+
depsOfOptionalPlugins = subtractLists optPlugins (findDependenciesRecursively optPlugins);
66
+
startWithDeps = findDependenciesRecursively startPlugins;
67
+
startPlugins' = unique (startWithDeps ++ depsOfOptionalPlugins);
68
+
69
+
mkResultingPath =
70
+
subdir: p:
71
+
"pack/${pname}/${subdir}/${if typeOf p == "path" then baseNameOf p else (p.pname or p.name)}";
72
+
73
+
config = stdenvNoCC.mkDerivation {
74
+
name = "neovim-config";
75
+
__structuredAttrs = true;
76
+
77
+
plugins = startPlugins' ++ optPlugins;
78
+
resultingPaths =
79
+
map (mkResultingPath "start") startPlugins' ++ map (mkResultingPath "opt") optPlugins;
80
+
81
+
# didn't know you could do this. thanks getchiee
82
+
buildCommand =
83
+
# bash
84
+
''
85
+
mkdir -pv $out/parser
86
+
mkdir -pv $out/pack/${pname}/{start,opt}
87
+
88
+
echo "generating init.lua"
89
+
cat > $out/init.lua <<EOF
90
+
package.path = "${luaLib.genLuaPathAbsStr luaEnv};$LUA_PATH" .. package.path
91
+
package.cpath = "${luaLib.genLuaCPathAbsStr luaEnv};$LUA_CPATH" .. package.cpath
92
+
vim.env.PATH = vim.env.PATH .. ":${makeBinPath extraPackages}"
93
+
vim.g.snippets_path = "$out/pack/${pname}/start/init-plugin/snippets"
94
+
vim.opt.packpath:append('$out')
95
+
vim.opt.runtimepath:append('$out')
96
+
97
+
vim.loader.enable()
98
+
vim.g.loaded_node_provider = 0
99
+
vim.g.loaded_perl_provider = 0
100
+
vim.g.loaded_python_provider = 0
101
+
vim.g.loaded_python3_provider = 0
102
+
vim.g.loaded_ruby_provider = 0
103
+
EOF
104
+
105
+
shopt -s extglob
106
+
for (( i = 0; i < "''${#plugins[@]}"; i++ )); do
107
+
source="''${plugins[$i]}"
108
+
path="''${resultingPaths[$i]}"
109
+
dest="$out/$path"
110
+
111
+
mkdir -p "$dest"
112
+
113
+
tolink=("$source/"!(parser))
114
+
if (( "''${#tolink[@]}" )); then
115
+
ln -ns "''${tolink[@]}" -t "$dest"
116
+
fi
117
+
118
+
if [[ -d "$source/parser" && -n "$(ls -A "$source/parser")" ]]; then
119
+
mkdir -p "$out/parser"
120
+
ln -nsf "$source/parser/"* -t "$out/parser"
121
+
fi
122
+
done
123
+
shopt -u extglob
124
+
125
+
${getExe basePackage} \
126
+
-n -u NONE -i NONE \
127
+
--headless \
128
+
-c "set packpath=$out" \
129
+
-c "packloadall" \
130
+
-c "helptags ALL" \
131
+
+"quit!"
132
+
133
+
find "$out/pack/${pname}" -type d -empty -print -delete
134
+
135
+
ln -sfT ${userConfig} $out/pack/${pname}/start/init-plugin
136
+
137
+
mkdir "$out/nix-support"
138
+
for i in $(find -L "$out" -name 'propagated-build-inputs'); do
139
+
cat "$i" >> "$out/nix-support/propagated-build-inputs"
140
+
done
141
+
'';
142
+
};
143
+
in
144
+
{
145
+
inherit pname;
146
+
version = "${args.version or (getVersion basePackage)}${
147
+
if versionSuffix != "" then "-${versionSuffix}" else ""
148
+
}";
149
+
150
+
# don't allow for simple arugments here these **should** remain this way
151
+
# so the wrapper works correctly
152
+
__structuredAttrs = true;
153
+
strictDeps = true;
154
+
155
+
# this won't really remove anything since we still are running fixup on basePackage and the config
156
+
# but it does speed up the build speed
157
+
dontUnpack = true;
158
+
dontFixup = true;
159
+
dontConfigure = true;
160
+
dontRewriteSymlinks = true;
161
+
162
+
nativeBuildInputs = args.nativeBuildInputs or [ ] ++ [
163
+
makeBinaryWrapper
164
+
lndir
165
+
];
166
+
167
+
wrapperArgs = [
168
+
"--set-default"
169
+
"VIMINIT"
170
+
"source ${config}/init.lua"
171
+
172
+
"--set-default"
173
+
"NVIM_APPNAME"
174
+
pname
175
+
]
176
+
++ args.wrapperArgs or [ ];
177
+
178
+
installPhase = ''
179
+
runHook preInstall
180
+
181
+
mkdir -p $out
182
+
lndir -silent ${basePackage} $out
183
+
184
+
${optionalString (!keepDesktopFiles) "rm -rf $out/share/applications"}
185
+
186
+
wrapProgram $out/bin/nvim "''${wrapperArgs[@]}"
187
+
188
+
${concatMapStrings (alias: ''
189
+
ln -s $out/bin/nvim $out/bin/${alias}
190
+
'') aliases}
191
+
192
+
runHook postInstall
193
+
'';
194
+
195
+
passthru = {
196
+
inherit config;
197
+
}
198
+
// args.passthru or { };
199
+
200
+
meta =
201
+
basePackage.meta
202
+
// {
203
+
priority = (basePackage.meta.priority or lib.meta.defaultPriority) - 1;
204
+
}
205
+
// args.meta or { };
206
+
};
207
+
}