# Nix language

Date: 2021-06-30 13:30:19 +08:00Date modified: 2021-12-28 00:17:58 +08:00

Nix can be aptly described as JSON but with functions. While you can make Nix work with basic configurations, you need to know the details if you're creating packages.

You can actively play with the language by running `nix repl`. This is just a personal reference note, the recommended resource for learning the language is the beloved Nix pills.

# What is it for?

- most importantly, writing packages, specifically Nix derivations

- mostly used for configuring operating systems and create servers quickly with its variety of services

- configuring Nix package manager

# Builtins

- `builtins.toString ./.` will print out the current directory.

- `builtins.getFlake $PATH`

## Imports

- the `import` builtin will simply import the Nix expression given a path.

- because of the functional paradigm, you'll often see the builtin used with the parameters in one go — e.g., `import <nixpkgs> { }` which will import nixpkgs from one of the module paths with the default attribute set.

# TODO Standard library

- nixpkgs has a standard library that comes with functions mitigating against the verbosity for packaging or simply convenience

## Backlinks

- Neovim Lua modules
- Nix packages
- Nix derivations
- Nix package manager