[Nix-dev] With-expressions question

Guillaume Maudoux (Layus) layus.on at gmail.com
Thu Mar 23 13:54:56 CET 2017


Yep, there has been previous ML discussions about this.

Short story is that local variables always take precedence over 
variables from "with" expressions.

This is kind of a security feature, otherwise the following expression 
could change its meaning when an "outer" package is added/removed from 
the "pkgs" set.

`let outer = "5"; in with pkgs; [ outer ];`


That being said, a warning would be a nice idea.

-- Layus.


On 22/03/17 16:12, José Luis Lafuente wrote:
> Recently I was having a weird error running nixos-rebuild. I added 
> some packages to systemPackages and I was getting this error:
>
> cannot coerce a set to a string, at 
> /etc/nixos/nixpkgs/lib/strings.nix:442:44
>
> After some debugging I found that the guilty was the boot package, but 
> I needed some time to understand why. In my configuration.nix I have this:
>
> environment.systemPackages = with pkgs; [
>   .....
>   boot
> ];
>
> But 'boot' refers to the option 'boot', not the package 'boot'. For 
> me, that behavior is confusing (at least in the programming languages 
> I know the inner scope variables shadow the ones on the outer scope).
> In my example, is there a way to make 'boot' refer to 'pkgs.boot'? or 
> a way of getting a warning on this case?
>
> Regards,
> Jose Luis
>
>
> _______________________________________________
> nix-dev mailing list
> nix-dev at lists.science.uu.nl
> http://lists.science.uu.nl/mailman/listinfo/nix-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.science.uu.nl/pipermail/nix-dev/attachments/20170323/5eb96962/attachment.html>


More information about the nix-dev mailing list