The Nix language

Yesterday, I wrote about Nix the package manager.

To use it, you need to write code in the Nix language in .nix files.

To see an example, you can see my dotfiles on GitHub as well as lots of other people's that they've published.

It's a functional language so some of the concepts were new to me, but I picked it up fairly quickly and learned some of the paradigms and conventions.

This is the code that installs Nginx on my server:

services.nginx = {
enable = true;
serverNamesHashBucketSize = 256;
};

These are some of the packages I have installed on my laptop:

environment.systemPackages = with pkgs: {
devenv
dog
git
go
jq
php
phpPackages.composer
pv
tldr
}

And this is how to configure processes in a devenv configuration, which is built with Nix:

processes = {
tailwind.exec = ''
cd ${drupal.theme.path}
watchexec --exts css,twig tailwindcss --config assets/tailwind.config.ts \
--output dist/tailwind.css
'';
};

Once you have written the configuration, you can run it and install what you've specified, and it will do it the same way every time.

For a crash course in the Nix language, take a look at https://zero-to-nix.com/concepts/nix-language or one of the many open-sourced configurations on GitHub.