Meta-attributes Nix packages can declare meta-attributes 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 meta declaration like this: 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 = stdenv.lib.licenses.gpl3Plus; maintainers = [ stdenv.lib.maintainers.eelco ]; platforms = stdenv.lib.platforms.all; }; 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. The meta-attributes of a package can be queried from the command-line using nix-env: $ nix-env -qa hello --meta --json { "hello": { "meta": { "description": "A program that produces a familiar, friendly greeting", "homepage": "http://www.gnu.org/software/hello/manual/", "license": { "fullName": "GNU General Public License version 3 or later", "shortName": "GPLv3+", "url": "http://www.fsf.org/licensing/licenses/gpl.html" }, "longDescription": "GNU Hello is a program that prints \"Hello, world!\" when you run it.\nIt is fully customizable.\n", "maintainers": [ "Ludovic Court\u00e8s <ludo@gnu.org>" ], "platforms": [ "i686-linux", "x86_64-linux", "armv5tel-linux", "armv7l-linux", "mips64el-linux", "x86_64-darwin", "i686-cygwin", "i686-freebsd", "x86_64-freebsd", "i686-openbsd", "x86_64-openbsd" ], "position": "/home/user/dev/nixpkgs/pkgs/applications/misc/hello/ex-2/default.nix:14" }, "name": "hello-2.9", "system": "x86_64-linux" } } nix-env knows about the description field specifically: $ nix-env -qa hello --description hello-2.3 A program that produces a familiar, friendly greeting
Standard meta-attributes The following meta-attributes have a standard interpretation: description A short (one-line) description of the package. This is shown by nix-env -q --description and also on the Nixpkgs release pages. 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. Wrong: "libpng is a library that allows you to decode PNG images." Right: "A library for decoding PNG images" longDescription An arbitrarily long description of the package. homepage The package’s homepage. Example: http://www.gnu.org/software/hello/manual/ license The license for the package. One from attribute set defined in nixpkgs/lib/licenses.nix. Example: stdenv.lib.licenses.gpl3. See details in , maintainers A list of names and e-mail addresses of the maintainers of this Nix expression. If you would like to be a maintainer of a package, you may want to add yourself to nixpkgs/lib/maintainers.nix and write something like [ stdenv.lib.maintainers.alice stdenv.lib.maintainers.bob ]. priority The priority of the package, used by nix-env to resolve file name conflicts between packages. See the Nix manual page for nix-env for details. Example: "10" (a low-priority package). platforms The list of Nix platform types on which the package is supported. Hydra builds packages according to the platform specified. If no platform is specified, the package does not have prebuilt binaries. An example is: meta.platforms = stdenv.lib.platforms.linux; Attribute Set stdenv.lib.platforms in nixpkgs/lib/platforms.nix defines various common lists of platforms types. hydraPlatforms The list of Nix platform types for which the Hydra instance at hydra.nixos.org will build the package. (Hydra is the Nix-based continuous build system.) It defaults to the value of meta.platforms. Thus, the only reason to set meta.hydraPlatforms is if you want hydra.nixos.org to build the package on a subset of meta.platforms, or not at all, e.g. meta.platforms = stdenv.lib.platforms.linux; meta.hydraPlatforms = []; broken If set to true, the package is marked as “broken”, meaning that it won’t show up in nix-env -qa, and cannot be built or installed. Such packages should be removed from Nixpkgs eventually unless they are fixed.
Licenses The meta.license attribute should preferrably contain a value from stdenv.lib.licenses defined in nixpkgs/lib/licenses.nix, or in-place license description of the same format if the license is unlikely to be useful in another expression. A few generic options are available, although it's typically better to indicate the specific license: free Catch-all for free software licenses not listed above. unfree-redistributable Unfree package that can be redistributed in binary form. That is, it’s legal to redistribute the output of the derivation. This means that the package can be included in the Nixpkgs channel. 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 patchelf to make them work. Thus, its license is unfree and it cannot be included in the Nixpkgs channel. unfree 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. unfree-redistributable-firmware This package supplies unfree, redistributable firmware. This is a separate value from unfree-redistributable because not everybody cares whether firmware is free.