Go to file
Eelco Dolstra 0dbd4638e0 * Two primops: builtins.intersectAttrs and builtins.functionArgs.
intersectAttrs returns the (right-biased) intersection between two
  attribute sets, e.g. every attribute from the second set that also
  exists in the first.  functionArgs returns the set of attributes
  expected by a function.

  The main goal of these is to allow the elimination of most of
  all-packages.nix.  Most package instantiations in all-packages.nix
  have this form:

    foo = import ./foo.nix {
      inherit a b c;
    };

  With intersectAttrs and functionArgs, this can be written as:

    foo = callPackage (import ./foo.nix) { };

  where

   callPackage = f: args:
     f ((builtins.intersectAttrs (builtins.functionArgs f) pkgs) // args);

  I.e., foo.nix is called with all attributes from "pkgs" that it
  actually needs (e.g., pkgs.a, pkgs.b and pkgs.c).  (callPackage can
  do any other generic package-level stuff we might want, such as
  applying makeOverridable.)  Of course, the automatically supplied
  arguments can be overriden if needed, e.g.

    foo = callPackage (import ./foo.nix) {
      c = c_version_2;
    };

  but for the vast majority of packages, this won't be needed.

  The advantages are to reduce the amount of typing needed to add a
  dependency (from three sites to two), and to reduce the number of
  trivial commits to all-packages.nix.  For the former, there have
  been two previous attempts:

    - Use "args: with args;" in the package's function definition.
      This however obscures the actual expected arguments of a
      function, which is very bad.

    - Use "{ arg1, arg2, ... }:" in the package's function definition
      (i.e. use the ellipis "..." to allow arbitrary additional
      arguments), and then call the function with all of "pkgs" as an
      argument.  But this inhibits error detection if you call it with
      an misspelled (or obsolete) argument.
2009-09-15 13:01:46 +00:00
blacklisting * This is a better location to keep the blacklist, since it can evolve 2005-03-24 14:07:02 +00:00
corepkgs * Allow the channel to declare a name for itself. 2009-03-03 14:47:39 +00:00
doc * Remove the redundant <sections> around refentries. 2009-07-14 14:58:12 +00:00
externals * Removed reference to losser.st-lab.cs.uu.nl, which is RIP after 9 2009-01-05 12:14:43 +00:00
make * `dependencyClosure' now allows a search path, e.g., 2005-08-14 14:00:39 +00:00
misc * Highlight URLs containing "=" properly. 2009-06-18 10:04:14 +00:00
scripts * nix-build: pass the --show-trace flag. 2009-07-15 09:10:38 +00:00
src * Two primops: builtins.intersectAttrs and builtins.functionArgs. 2009-09-15 13:01:46 +00:00
tests * Two primops: builtins.intersectAttrs and builtins.functionArgs. 2009-09-15 13:01:46 +00:00
AUTHORS * Put something in here. 2004-11-07 20:30:02 +00:00
COPYING * Change this to LGPL to keep the government happy. 2006-04-25 16:41:06 +00:00
ChangeLog * Autoconf / Automake configuration and building. 2003-04-04 16:14:56 +00:00
INSTALL * Autoconf / Automake configuration and building. 2003-04-04 16:14:56 +00:00
Makefile.am * Include the version file. 2009-05-07 11:34:08 +00:00
README * Install documentation in $(docdir) (i.e. share/doc/nix). 2008-11-19 13:19:09 +00:00
aterm-gc.supp * Extend the ATerm suppressions to 64-bit. 2008-08-29 14:38:04 +00:00
bootstrap.sh * Build dynamic libraries. 2005-07-22 14:52:45 +00:00
configure.ac * Typo. 2009-05-07 11:33:57 +00:00
nix.conf.example * Undocument the "system" option. No sane person would use it :-) 2009-03-29 18:08:32 +00:00
nix.spec.in * Urgh. 2008-11-20 16:42:52 +00:00
release.nix 2009-08-03 13:32:13 +00:00
substitute.mk --proxy=proxy:3128 2008-05-07 14:18:28 +00:00
version * Make the version available to release.nix. 2009-03-09 15:05:08 +00:00

README

Nix is a purely functional package manager.  For installation and
usage instructions, please read the manual, which can be found in
`docs/manual/manual.html', and additionally at the Nix website at
<http://nixos.org/>.


Acknowledgments

This product includes software developed by the OpenSSL Project for
use in the OpenSSL Toolkit (http://www.OpenSSL.org/).