Jump to content

# Nix

2 languages

- 日本語
- 中文（简体）

From ArchWiki

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

## Installation

There are four choices for installing Nix:

- the native Arch Linux package,
- the upstream installation script officially supported by Nix,
- the Zero to Nix script provided by Determinate Systems, a company providing third party support for Nix,
- and the Lix script provided by passionate Nix community members aiming for improvements in Nix ecosystem by providing a hard fork version from the Nix package manager.

### Native

Install the nix package.

### Upstream installation script

This article or section is being considered for removal.

Reason: Upstream instructions are unrelated to Arch, if people want to ignore the official package, we do not need to keep the instructions on our side. (Discuss in Talk:Nix)

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.

### Zero to Nix installation script

This article or section is being considered for removal.

Reason: Curl pipe for an "easier and less complicated setup" without saying what this actually means, and the only other difference that it sends telemetry to a company (Discuss in Talk:Nix)

For an easier and less complicated Nix setup you can use the setup from Determinate Systems. Download the file with `curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix -o nix-install.sh`, view it: `less ./nix-install.sh`, and run the script `sh ./nix-install.sh install` to start the installation.

Warning: Running `curl some-url | sh`, as Determinate Systems 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.
Note: The installer sends telemetry to Determinate Systems by default. To disable it manually, use `sh ./nix-install.sh install --diagnostic-endpoint=""`.

For more information see the manual from Determinate Systems.

### Lix installation script

This article or section is being considered for removal.

Reason: Another unpackaged fork of nix, unrelated to Arch Linux (Discuss in Talk:Nix)

Download the file with `curl --proto '=https' --tlsv1.2 -sSf -L https://install.lix.systems/lix -o lix-install.sh`, view it: `less ./lix-install.sh`, and run the script `sh ./lix-install.sh` to start the installation.

Warning: Running `curl some-url | sh`, as Lix 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.

For more information see the manual from Lix Installer

Note: If you have uninstalled the native nix package, you will still have a few user accounts and groups that will prevent lix from finishing its install because the group will already exist with an unexpected number. Remove them all and the group before running lix as it will re-create them:

    uninstallnix.sh

    #!/bin/sh
    for i in {01..10}; do
      userdel "nixbld$i"
    done
    groupdel nixbld

## 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. Restart your session for the change to have an effect.

Add a channel and update it.

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

## Usage

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

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-shellAUR lets you use Zsh as the default shell in a `nix-shell` environment. Some prompt plugins such as zsh-theme-powerlevel10kAUR and zsh-pure-promptAUR provide a `nix-shell` indicator.

## Command completion

### Zsh

nix-zsh-completionsAUR 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

### User-related Nix search path entry does not exist, ignoring

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

See FS#78828. Alternatively, you can use the #Upstream installation script or #Zero to Nix installation script, which do not exhibit the issue.

### error: file 'nixpkgs' was not found in the Nix search path (add it using $NIX_PATH or -I)

See FS#78828. Alternatively, you can use the #Upstream installation script or #Zero to Nix installation script, which do not exhibit the issue.

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

Category:

- Package manager

Hidden category:

- Sections flagged with Template:Remove