Each section should be run as the user or as root, pay attention to which one!
As $USER
curl https://nixos.org/nix/install | sh
nix-channel
and ~/.nix-defexpr
are gone. We'll use $NIX_PATH
(or user environment specific overrides configured via nix set-path
) to look up packages. Since $NIX_PATH
supports URLs nowadays, this removes the need for channels: you can just set $NIX_PATH
to e.g. https://nixos.org/channels/nixos-15.09/nixexprs.tar.xz
and stay up to date automatically.
By default, packages are selected by attribute name, rather than the name
attribute. Thus nix install hello
is basically equivalent to nix-env -iA hello
. The attribute name is recorded in the user environment manifest and used in upgrades. Thus (at least by default) hello
won't be upgraded to helloVariant
.
@vcunat suggested making this an arbitrary Nix expression rather than an attrpath, e.g. firefox.override { enableFoo = true; }
. However, such an expression would not have a key in the user environment, unlike an attrpath. Better to require an explicit flag for this.
TBD: How to deal with search path clashes.