Hi Eelco,
Very interesting information regarding the channels. Can you give some
additional advice on how this relates to existing /etc/nixos/* checkouts?
* If I specify the channel and the nixos-rebuild you summarized below,
will it use the channel or my checkouts or both (and if the latter, which
has priority)?
* I currently have local packages in ~/.nix-defexpr. Specifically I have:
~/.nix-defexpr/localnix:
{}:
let
stdpkgs = import
/etc/nixos/nixpkgs/pkgs/top-level/all-packages.nix{};
mypkgs = builtins.getEnv HOME + /my_nixexprs;
in
import mypkgs { inherit stdpkgs };
I can then populate personal packages in the mypkgs tree and they are
smoothly integrated for nix-env. Is it still possible to do this somehow
with the channel setup?
* As a corollary, is there documentation I could use that would provide
information on how to create a new channel containing mypkgs?
* Can you --add multiple channels?
* Can multiple channels cross-reference packages? Total
cross-referencing or backward-only?
* How are conflicts resolved with multiple channels?
Many Thanks,
-Kevin
On Tue, 15 May 2012 11:11:43 -0700, Eelco Dolstra
eelco.dols...@logicblox.com wrote:
Hi all,
Since a few weeks there is a NixOS channel, which is now the default
mechanism
for keeping NixOS up to date. (A channel is a Nix mechanism for
distributing a
consistent set of Nix expressions and binaries.) A quick summary on how
to use it:
$ nix-channel --add
http://nixos.org/releases/nixos/channels/nixos-unstable
$ nix-channel --update
$ nixos-rebuild switch
The NixOS channel contains a copy of Nixpkgs (but only the binaries for
i686-linux and x86_64-linux), so after nix-channel --update you can
install
packages via nix-env:
$ nix-env -i thunderbird
or, if you prefer the -A option:
$ nix-env -iA nixos.pkgs.thunderbird
The advantages of using a channel over the previous way (doing svn up
/etc/nixos/* a.k.a. nixos-checkout) are:
- Correctness: The channel is only updated to a new revision of
NixOS/Nixpkgs if
it passes certain tests - specifically, if all jobs in the
nixos:tested view
succeed (http://hydra.nixos.org/view/nixos/tested). So you have a
reasonable
certainty that the new version will actually work. By contrast, if you
update
to the latest revision using nixos-checkout, it's quite possible that
somebody
just committed something that broke the entire system.
- Efficiency: The channel is only updated after all Hydra builds in that
revision have finished, *and* all binaries have been mirrored. (Binary
patches
are generated asynchronously, however, since they can take much longer to
produce.) So you don't have to worry about somebody just having
committed
something that causes a huge recompilation.
This makes keeping NixOS up to date a rather more pleasant activity,
IMHO.
Some things to note:
- The downloaded channel sources are stored in
/nix/var/nix/profiles/per-user/root/channels/nixos (which is actually in
the Nix
store). The $NIX_PATH environment variable contains this directory, so
nixos
and nixpkgs in Nix expressions resolve there unless overriden through
$NIX_PATH or the -I flag.
- In principle, you can do rollbacks on the channels profile (nix-env -p
/nix/var/nix/profiles/per-user/root/channels --rollback) if you don't
like the
result of a nix-channel --update. However, this doesn't roll back the
corresponding binaries manifest in /nix/var/nix/manifest so its utility
is
limited [1].
- The NixOS installation CD no longer contains or installs
/etc/nixos/{nixos,nixpkgs} but instead uses the NixOS channel. You can
of
course run nixos-checkout if you want a working tree for development.
(In
other news, nixos-checkout now accepts a argument to specify the
desired
location of the working trees, e.g. nixos-checkout /home/eelco/Dev.
The
default location /etc/nixos may eventually go away since it's a weird
location
for keeping large source trees.)
- To use a development tree in nixos-rebuild, just use the -I flag, e.g.
nixos-rebuild switch -I /home/eelco/Dev.
- The nixpkgs_sys link in ~/.nix-defexpr is no longer created.
Instead you
can use nixos.pkgs in nix-env -iA calls, as shown above.
nixos.pkgs is
the Nixpkgs in the NixOS channel, so it's guaranteed to have binaries
available.
- The command nixos-version prints out the NixOS version you're
currently
running, e.g. 0.1pre34067-34075. The version string include the NixOS
and
Nixpkgs revisions, respectively. If you install from SVN it just prints
0.1pre-svn.
- Old versions can be installed from http://nixos.org/releases/nixos/.
These
are periodically deleted because they take up a lot of space. (Note
that the
nixos-unstable channel is really just a link to the latest NixOS
release.)
[1] In the future