summary refs log tree commit diff
path: root/doc/meta.xml
blob: 09252410d80724228ff88e7bb12633dc0d1cb5ee (plain) (blame)
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
<chapter xmlns="http://docbook.org/ns/docbook"
         xmlns:xlink="http://www.w3.org/1999/xlink"
         xml:id="chap-meta">

<title>Meta-attributes</title>

<para>Nix packages can declare <emphasis>meta-attributes</emphasis>
that contain information about a package such as a description, its
homepage, its license, and so on.  For instance, the GNU Hello package
has a <varname>meta</varname> declaration like this:

<programlisting>
meta = {
  description = "A program that produces a familiar, friendly greeting";
  longDescription = ''
    GNU Hello is a program that prints "Hello, world!" when you run it.
    It is fully customizable.
  '';
  homepage = http://www.gnu.org/software/hello/manual/;
  license = "GPLv3+";
};
</programlisting>

</para>

<para>Meta-attributes are not passed to the builder of the package.
Thus, a change to a meta-attribute doesn’t trigger a recompilation of
the package.  The value of a meta-attribute must a string.</para>

<para>The meta-attributes of a package can be queried from the
command-line using <command>nix-env</command>:

<screen>
$ nix-env -qa hello --meta --xml
&lt;?xml version='1.0' encoding='utf-8'?>
&lt;items>
  &lt;item attrPath="hello" name="hello-2.3" system="i686-linux">
    &lt;meta name="description" value="A program that produces a familiar, friendly greeting" />
    &lt;meta name="homepage" value="http://www.gnu.org/software/hello/manual/" />
    &lt;meta name="license" value="GPLv3+" />
    &lt;meta name="longDescription" value="GNU Hello is a program that prints &amp;quot;Hello, world!&amp;quot; when you run it.&amp;#xA;It is fully customizable.&amp;#xA;" />
  &lt;/item>
&lt;/items>
</screen>

<command>nix-env</command> knows about the
<varname>description</varname> field specifically:

<screen>
$ nix-env -qa hello --description
hello-2.3  A program that produces a familiar, friendly greeting
</screen>

</para>


<section><title>Standard meta-attributes</title>

<para>The following meta-attributes have a standard
interpretation:</para>

<variablelist>

  <varlistentry>
    <term><varname>description</varname></term>
    <listitem><para>A short (one-line) description of the package.
    This is shown by <command>nix-env -q --description</command> and
    also on the Nixpkgs release pages.</para>

    <para>Don’t include a period at the end.  Don’t include newline
    characters.  Capitalise the first character.  For brevity, don’t
    repeat the name of package  just describe what it does.</para>

    <para>Wrong: <literal>"libpng is a library that allows you to decode PNG images."</literal></para>

    <para>Right: <literal>"A library for decoding PNG images"</literal></para>

    </listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>longDescription</varname></term>
    <listitem><para>An arbitrarily long description of the
    package.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>homepage</varname></term>
    <listitem><para>The package’s homepage.  Example:
    <literal>http://www.gnu.org/software/hello/manual/</literal></para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>license</varname></term>
    <listitem><para>The license for the package.  See below for the
    allowed values.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>maintainers</varname></term>
    <listitem><para>A list of names and e-mail addresses of the
    maintainers of this Nix expression, e.g. <literal>["Alice
    &lt;alice@example.org>" "Bob &lt;bob@example.com>"]</literal>.  If
    you are the maintainer of multiple packages, you may want to add
    yourself to <link
    xlink:href="https://github.com/NixOS/nixpkgs/blob/master/pkgs/lib/maintainers.nix"><filename>pkgs/lib/maintainers.nix</filename></link>
    and write something like <literal>[stdenv.lib.maintainers.alice
    stdenv.lib.maintainers.bob]</literal>.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>priority</varname></term>
    <listitem><para>The <emphasis>priority</emphasis> of the package,
    used by <command>nix-env</command> to resolve file name conflicts
    between packages.  See the Nix manual page for
    <command>nix-env</command> for details.  Example:
    <literal>"10"</literal> (a low-priority
    package).</para></listitem>
  </varlistentry>

</variablelist>


</section>


<section xml:id="sec-meta-license"><title>Licenses</title>

<note><para>This is just a first attempt at standardising the license
attribute.</para></note>

<para>The <varname>meta.license</varname> attribute must be one of the
following:

<variablelist>

  <varlistentry>
    <term><varname>GPL</varname></term>
    <listitem><para>GNU General Public License; version not
    specified.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>GPLv2</varname></term>
    <listitem><para>GNU General Public License, version
    2.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>GPLv2+</varname></term>
    <listitem><para>GNU General Public License, version
    2 or higher.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>GPLv3</varname></term>
    <listitem><para>GNU General Public License, version
    3.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>GPLv3+</varname></term>
    <listitem><para>GNU General Public License, version
    3 or higher.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>bsd</varname></term>
    <listitem><para>Catch-all for licenses that are essentially
    similar to <link
    xlink:href="http://www.gnu.org/licenses/license-list.html#ModifiedBSD">the
    original BSD license with the advertising clause removed</link>,
    i.e. permissive non-copyleft free software licenses.  This
    includes the <link
    xlink:href="http://www.gnu.org/licenses/license-list.html#X11License">X11
    (“MIT”) License</link>.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>perl5</varname></term>
    <listitem><para>The Perl 5 license (Artistic License, version 1
    and GPL, version 1 or later).</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>free</varname></term>
    <listitem><para>Catch-all for free software licenses not listed
    above.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>free-copyleft</varname></term>
    <listitem><para>Catch-all for free, copyleft software licenses not
    listed above.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>free-non-copyleft</varname></term>
    <listitem><para>Catch-all for free, non-copyleft software licenses
    not listed above.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>unfree-redistributable</varname></term>
    <listitem><para>Unfree package that can be redistributed in binary
    form.  That is, it’s legal to redistribute the
    <emphasis>output</emphasis> of the derivation.  This means that
    the package can be included in the Nixpkgs
    channel.</para>

    <para>Sometimes proprietary software can only be redistributed
    unmodified.  Make sure the builder doesn’t actually modify the
    original binaries; otherwise we’re breaking the license.  For
    instance, the NVIDIA X11 drivers can be redistributed unmodified,
    but our builder applies <command>patchelf</command> to make them
    work.  Thus, its license is <varname>unfree</varname> and it
    cannot be included in the Nixpkgs channel.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>unfree</varname></term>
    <listitem><para>Unfree package that cannot be redistributed.  You
    can build it yourself, but you cannot redistribute the output of
    the derivation.  Thus it cannot be included in the Nixpkgs
    channel.</para></listitem>
  </varlistentry>

  <varlistentry>
    <term><varname>unfree-redistributable-firmware</varname></term>
    <listitem><para>This package supplies unfree, redistributable
    firmware.  This is a separate value from
    <varname>unfree-redistributable</varname> because not everybody
    cares whether firmware is free.</para></listitem>
  </varlistentry>

</variablelist>

</para>
  

</section>
  

</chapter>