For me, the biggest one is that I can't use it at clients running a Windows shop. That's a blocker.
I've found Guix and GuixSD, which are a GNU-blessed Guile Scheme-based reimplementation of Nix and NixOS, more aesthetically pleasing. Quite simple and elegant in fact.
The major differences are that Guix DSLs are implemented on top of Scheme, whereas Nix uses a custom DSL. Furthermore, Guix avoids systemd and uses GNU herd instead.
Herd/Hurd is a kernel, not an init system, although since systemd is Linux only, using a different kernel implies using a non-systemd init system.
herd is the commandname of Shepherd client:
Anyway... :)
https://www.gnu.org/software/guix/manual/html_node/Invoking-...
There’s no good choice here: Nix package definitions and tools are inscrutable and user-hostile; and the alternative Guix is burden with GNU/free software zealotry and GPL.
A somewhat comparable third option is Habitat, from Chef. It also has a pure build system, a package source, and pure, discrete environments. But it’s also got a bunch of service orchestration parts...
Hopefully the Nix redesign will make the tools more palatable for mortals.
The only notable omission is linux, as Guix is based on linux-libre instead. But changing this is a matter of 1 LOC.
And how difficult is it for a new user to find that line?
Guix's use of Scheme is a lot more elegant and powerful, and a lot less hacky than bash.
For a complete explanation of this design, see the "Code Staging in GNU Guix" paper: https://arxiv.org/abs/1709.00833
I'm not sure what you mean by that. Nix packages are Nix expressions.
I guess in guile/scheme the equivalent data structure happens to be an s-expression. Edit: except the paper actually describes that it's a g-expression.
It's over a year that I first read about Nix and they talked about the redesign.
Are there docs for the usage after "nix-shell -p nixUnstable"?
If you just want a solution for your packaging management needs - Nix is definitely not it. Nix is more like a thing to get inspired by to make a package manager.
I keep trying to convince myself that someone's already done it better, and there's no point, but then every solution I look at doesn't seem to be good enough.
No, this is just a side effect of the CLI user experience being garbage.
`nix-env -i <regex>` is almost never what you want, because its semantics are to evaluate everything in nixpkgs, find the set of packages whose `name` attribute is matched by the given regex, and install all of the packages in that set modulo the equivalence relation generated by package `name` equality ignoring version numbers.
Instead, you should use `nix-env -iA <channel>.<attribute-path>`, where `<channel>` is the name of a Nix channel (viewable via `nix-channel --list`, usually it is `nixos` or `nixpkgs`) and `<attribute-path>` is a valid attribute path in the nixpkgs package set (these can be discovered by running `nix-repl '<nixpkgs>'` and tab-completing).
[1] https://www.reddit.com/r/NixOS/comments/64xyd7/nix_package_m...