Nix

Nix
is a purely functional package manager that aims to make package management
reproducible, declarative and reliable
.
Installation
Install
the
nix
package.
Configuration
To have the Nix daemon launched at boot time,
enable
nix-daemon.service
.
Add a
channel
and update it.
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ nix-channel --update
Usage
With the shell configured, the following should install
hello
into your updated PATH:
$ nix-env -iA nixpkgs.hello
The binary itself will be located at
/nix/store/[hash]-hello-[version]/bin/hello
.
Run
hello
and make sure it is in the right PATH. If it works, you can remove it:
$ nix-env --uninstall hello
Or you can check the list of installed programs:
$ nix-env --query
You can also list generations:
$ nix-env --list-generations
See
nix-env(1)
for more detailed information.
Tips and tricks
Max jobs
By default, nix only uses one builder. The following will allow nix to use as many jobs as the number of CPUs:
/etc/nix/nix.conf
max-jobs = auto
Graphical acceleration
To run OpenGL and Vulkan applications, use
NixGL
.
Desktop integration
For integrating Nix applications with your desktop environment, add the
~/.nix-profile/share
directory to your
$XDG_DATA_DIRS
, for instance using
export XDG_DATA_DIRS=$HOME/.nix-profile/share:$XDG_DATA_DIRS
.
Zsh integration for nix-shell
nix-shell
starts
Bash
by default.
zsh-nix-shell
AUR
lets you use
Zsh
as the default shell in a
nix-shell
environment. Some prompt plugins such as
zsh-theme-powerlevel10k
AUR
and
zsh-pure-prompt
AUR
provide a
nix-shell
indicator.
Command completion
Zsh
nix-zsh-completions
AUR
provides Zsh completions for nix commands such as
nix-env
and
nix-shell
.
Troubleshooting
Too many open files
Some builds may run into an error such as:
error: opening directory '/nix/store/...': Too many open files
Edit
nix-daemon.service
and increase the file limit:
[Service]
LimitNOFILE=65536
Warning message about root user channels
If you get this error while using Nix:
warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring
The root user will need to update their channels:
# nix-channel --update
Sandbox build issues
Other sandbox issues
error: while setting up the build environment: mounting /proc: Operation not permitted
error: program '/usr/bin/nix-env' failed with exit code 1

1: package 'utils' in options("defaultPackages") was not found
2: package 'stats' in options("defaultPackages") was not found
Error: .onLoad failed in loadNamespace() for 'utils', details:
 call: system(paste(which, shQuote(names[i])), intern = TRUE, ignore.stderr = TRUE)
 error: cannot popen '/nix/store/fnkvlbls29d01jcx3wsdnhykyrl7087r-which-2.21/bin/which 'uname' 2>/dev/null', probable reason 'Cannot allocate memory'
The issue is known upstream:
#2311
,
#3000
, and
#4636
.
Warning
It is generally not recommended to disable sandboxing as it pollutes the build environment and could possibly cause more build errors. Anything from
nixpkgs
expects to be built with the sandbox on.
The most common fix is to disable sandboxing in the configuration file:
/etc/nix/nix.conf
# disable sandboxing
sandbox = false
Then
restart
the
nix-daemon.service
.
Locale warnings
The
Nixos wiki
recommends running
export LOCALE_ARCHIVE=/usr/lib/locale/locale-archive
. Alternatively, export the environment variable
LC_ALL=C
.
See also
Upstream Wiki
Nix Package Manager Guide