[Nix-dev] NixOS channel

Kevin Quick quick at sparq.org
Tue Jun 19 17:08:44 CEST 2012


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.dolstra at 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 we may get rid of manifests, in which case the Right  
> Thing
> would happen magically.
>
> tl;dr
>


-- 
-KQ


More information about the nix-dev mailing list