One problem I ran into as a ruby guy was building gems that needed to link against a C lib. Part of the beauty of the Nix approach is that it isolates everything. The "proper" solution I guess would be to package gems as Nix packages, but it seems like there probably should be some way to let a utility know the proper build flags for a given lib.
For each language they have an adapter that exports the language-specific package manager to nix expressions. cabal, perl, python and ruby are all supported (maybe more). In the case of ruby there is `nix` ruby gem that you can use to generate a .nix expression. Ideally you could amend it to say that nokogiri depends on libxml2 and such. Then your project could have a deps.nix file that you can install. `nix-env -f deps.nix -i`
I'm also exploring different ways to work with my projects. For example creating a custom profile per project that's derived from a project-specific derivation.
I'd rather we collectively agree on a protocol for installing, updating, querying packages etc, such that each language-specific package manager can talk to others through a daemon and install foreign packages that are required for the projects. It would require a fair amount of work to update each package manager to talk it (optionally), and agree on the semantics and policies of the protocol, but I think the benefits could be huge.
Using Nix/Guix as the basis for such protocol would probably be ideal due to the immutable nature of packages and ability to install side-by-side versions, and that you can specify an identity of a dependency, rather than rely on fuzzy matching of name and version.
Honestly, the first one (of Nix vs. Guix) that can replace dpkg on my (non-NixOS) system is welcome! For now, having this "unstable" in the default nix channel (http://nixos.org/channels/nixpkgs-unstable) is scary.
Also, the selection of packages in Guix is way too small. 600 advertized, vs. nearly 10000 for nix. Is Firefox even in? (no. Icecat is, whatever that is. Don't ask if Chrome is in.)
Another thing: Guix seems to default to per-user package installation, unlike Nix. http://xkcd.com/1200/ comes to mind. In the case of Nix, "you can steal my cookies, but you cannot list Nix packages I can install!"
This is a 0.5 release because there's a lot left to do. There are tons of packages left to write in order to have a good selection of free software. We would love some help.
>Is Firefox even in? (no. Icecat is, whatever that is. Don't ask if Chrome is in.)
GNU Icecat is a fork of Firefox with the nonfree bits removed. Chrome is proprietary so it will absolutely not be part of the GNU distribution. Chromium has licensing issues (and is a nightmare to package, btw: https://twitter.com/spotrh/status/410479218791706624). I don't know of any fully free distro that packages it so I don't think it will be available in Guix.
However, if you do want to use proprietary software, you could always pull packages from other sources that package such things.
Why would I use one and not the other?
If you like this approach to package management, you might want to consider trying NixOS[2], which is a distro that uses Nix as its primary package manager. NixOS has a disproportionately high uptake in the Haskell community, so it has a very good selection of Haskell packages--if you're playing around with or actively using Haskell, that could be another bonus for NixOS.
Personally, I think the idea is very cool. I will probably at least try using NixOS for my next laptop--I generally switch distros every time I get a new computer.
[1]: http://nixos.org/nix/ [2]: http://nixos.org/