Hacker News new | past | comments | ask | show | jobs | submit login

Is there good explanation anywhere of the syntax of those files? I tried getting into nix multiple times and was always put off by the lack of understandability of this.

Nix is a bit like JSON + functions.

An object (called attrset in nix):

    { a = 3; b = 4; }
A list:

    [ 1 2 3 4 ];
A string:

A multi-line string:

This defines a lambda with two arguments:

    a: b: a + b;
It's possible to pattern-match arguments. This accepts an attrset with keys a and b, and maps them to local variables:

    { a, b }: a + b;
There are some variations around that like `{ a ? 3 }:` `{ a }@attrs:` and `{ a, ... }`

One special type is the path, which has it's own literal that starts with `./`

To load a file, the `import` keyword is being used. In most cases the whole file is a big lambda function, which gets returned by the import.

Once you know that you can start reading nixpkgs and learn about the building blocks to constructs packages.

Also, for convenience, nested objects/attrsets can be shortened. For instance:

        a = {
            b = {
                c = 3;
can be shortened to:

        a.b.c = 3;
This is used quite often in NixOS system configuration files. There you'll find lines like:

    services.openssh.enable = true;
For a list of all system configuration options that NixOS supports by default see (NixOS options)[https://nixos.org/nixos/options.html].

I read Nix Pills and they were very informative -- https://nixos.org/nixos/nix-pills/

The syntax is, by far, the most painful part. Change the drop-down to Nix then click on the manual. The website is hard to navigate in that way.


Also includes links to the only other resources I found.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact