Nix - ArchWiki

Jump to content

# Nix

From ArchWiki

This article or section is out of date.

Reason: Installation procedures in the AUR do not work. (Discuss in Talk:Nix)

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

## Installation

There are three choices for a Nix installation, one is supported by Arch Linux, the next officially supported by Nix, and the last not being supported at all.

### 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, that might even be corrupted during the download. Therefore it is recommended to manually download the script and check it, before executing it.

### archlinux-nix

archlinux-nixAUR can be used to 'bootstrap' an Arch Linux compatible Nix system by setting up the required groups and permissions.

After installing nix and archlinux-nixAUR, list the available commands:

    $ archlinux-nix

To complete the installation, follow all of these steps:

Prepare Arch for the Nix installation:

    # archlinux-nix setup-build-group  # setup build groups
    # archlinux-nix bootstrap          # bootstrap the system

Configure a default Nix channel and update it:

    $ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
    $ nix-channel --update
    $ nix-env -u

After first install, and before rebooting, activate Nix in each new shell:

    $ source /etc/profile.d/nix{,-daemon}.sh

This makes Nix's daemon (and package manager) functional without rebooting. It updates your PATH to Nix's liking. Check it by `echo $PATH`. Run this in each new shell session until you have restarted.

## 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

## Tips and tricks

With the shell configured, the following should install hello into your updated PATH: `/nix/store/[hash]-hello-[version]/bin/hello`.

    $ 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.

## Troubleshooting

### Permission denied

Running `nix repl` or `nix-env -u` 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.

### 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

### Sandbox build issues

    error: while setting up the build environment: executing '/usr/bin/bash': No such file or directory
    error: builder for '/nix/store/mh8hl6c7gyyqrnzrln4j2jxg79n32slf-nixpkgs-21.11pre300283.f930ea227ce.drv' failed with exit code 1
    error: build of '/nix/store/mh8hl6c7gyyqrnzrln4j2jxg79n32slf-nixpkgs-21.11pre300283.f930ea227ce.drv' failed
    error: program '/usr/bin/nix-env' failed with exit code 100

    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 `nix-daemon` service.

    /etc/nix/nix.conf

    # disable sandboxing
    sandbox = false

## See also

- Homepage
- Upstream wiki
- Nix Package Manager Guide
- Wikipedia:Nix package manager

Category:

- Package manager

Hidden category:

- Pages or sections flagged with Template:Out of date