News for hackers. Stuff that matters.
Re:NixOps – Declarative cloud provisioning and deployment wi... by zimbatm on Sunday September 17, 2017 @11:05AM (#15269934)
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:

     "hello"
A multi-line string:

    ''
      multine
      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.

Re:NixOps – Declarative cloud provisioning and deployment wi... by FrozenCow on Sunday September 17, 2017 @12:05PM (#15270238)
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].