Nix

Nix is a purely functional package manager that aims to make package management reliable and reproducible.

Installation

There are two choices for a Nix installation, one is supported by Arch Linux, and the other is officially supported by Nix.

Native

Install the nix package.

Upstream installation script

Download the file with curl --proto '=https' --tlsv1.2 -sSfL https://nixos.org/nix/install -o nix-install.sh, view it: less ./nix-install.sh, and run the script ./nix-install.sh --daemon to start Nix installation.

Warning: Running curl some-url | sh, as the Nix documentation suggests, is considered as a security risk, because it executes unknown code. Therefore it is recommended to manually download the script and check it, before executing it.

Configuration

To have the Nix daemon launched at boot time, enable nix-daemon.service.

Add required users to the nix-users group in order to access the daemon socket.

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/store/[hash]-hello-[version]/bin/hello.

If you installed Nix from the official repositories, you must add the ~/.nix-profile/bin directory to your PATH manually.

$ nix-env -iA nixpkgs.hello

Run hello and make sure it is in the right PATH. If it works, you can remove it simply by

$ nix-env --uninstall hello

Or you can check the list of installed program by (q stands for query)

$ nix-env -q

You can also check generations by

$ nix-env --list-generations

Check more details in the nix-env(1) manual.

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:

Graphical acceleration

To run OpenGL and Vulkan applications, use NixGL.

Desktop integration

For integrating Nix applications with your desktop environment, add the directory to your , for instance using .

Zsh integration for nix-shell

nix-shell starts Bash by default. zsh-nix-shell lets you use zsh as the default shell in a nix-shell environment. Some prompt plugins such as powerlevel10k and pure provide a nix-shell indicator.

Command completion

Zsh

nix-zsh-completions provides Zsh completions for nix commands such as nix-env and nix-shell.

Troubleshooting

Permission denied

Running nix repl or as user produces

cannot connect to daemon at '/nix/var/nix/daemon-socket/socket: permission denied

If you just installed nix, you need to reboot.

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

warning: Nix search path entry '/nix/var/nix/profiles/per-user/root/channels' does not exist, ignoring

If the above message shows up when using Nix, the root user will need to update their channels.

# nix-channel --update

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.

The most common fix is to disable sandboxing in the configuration file, then Restart the service.

Locale warnings

The Nix wiki recommends running . Alternatively, export the environment variable .

gollark: COMMUNISM MUST BE ERADICATED¡!!!!!!!!!
gollark: Clearly I should convert my TS project to Scratch.
gollark: Rule by ineffable space bees please.
gollark: Yep!
gollark: I imagine we'll get an increase in "no-code" tools, and thus also problems.

See also

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.