Nix Installation Guide: Difference between revisions

Klinger (talk | contribs)
Removed outdated and incorrect information, and updated it accordingly
 
(8 intermediate revisions by 3 users not shown)
Line 3: Line 3:
Please take a look at https://nixos.org/download.html first for basic installation instructions and read the relevant section in the Nix manual if you want to know more about how the install process works: https://nixos.org/manual/nix/stable/#ch-installing-binary.
Please take a look at https://nixos.org/download.html first for basic installation instructions and read the relevant section in the Nix manual if you want to know more about how the install process works: https://nixos.org/manual/nix/stable/#ch-installing-binary.


== Single-user install ==
== Installation ==
Nix package manager can be installed as either:


=== Stable Nix ===
* Multi User Installation (recommended)
* Single User Installation


To install stable Nix from any Linux distribution, use the following two commands. (Note: This assumes you have the permission to use <code>sudo</code>, and you are logged in as the user you want to install Nix for.)
=== Multi User Installation ===
<syntaxhighlight lang="console">
$ bash <(curl -L https://nixos.org/nix/install) --daemon
</syntaxhighlight>


<syntaxHighlight lang="console">
=== Single User Installation ===
$ sudo install -d -m755 -o $(id -u) -g $(id -g) /nix
<syntaxhighlight lang="console">
$ curl -L https://nixos.org/nix/install | sh
$ bash <(curl -L https://nixos.org/nix/install) --no-daemon
</syntaxHighlight>
</syntaxhighlight>


Then don't forget to reboot or run the command provided at the end of the installation script to make nix available in your system:
=== Stable Nix ===
<syntaxHighlight lang="console">
$ source $HOME/.nix-profile/etc/profile.d/nix.sh
</syntaxHighlight>


You may want to put this file directly in your ~/.bashrc or similar, so Nix would be available in any newly created shell.
By default, the rolling Nix package manager will be installed using one of the above commands and thus the <code>nixpkgs-unstable</code> [[Channel Branches|channel]] will be used.


When using another shell like [https://fishshell.com Fish], you should ignore the previous procedure and use the [https://github.com/jorgebucaran/fisher Fisher] plugin [https://github.com/lilyball/nix-env.fish Nix-env].
Follow the below to switch to the stable channel:<syntaxhighlight lang="console">
 
$ sudo su
After that being done, you can use all Nix commands as a normal user without any special permissions (for example by using <code>sudo</code>).
$ nix-channel --remove nixpkgs
$ nix-channel --add https://nixos.org/channel/nixos-25.11 nixpkgs
$ nix-channel --update
</syntaxhighlight>Then run the following command to verify that you are using the stable channel:<syntaxhighlight lang="console">
$ nix-shell -p nix-info --run "nix-info -m"
</syntaxhighlight>


==== Troubleshooting ====  
==== Troubleshooting ====  
Line 37: Line 44:
enabled by default on Linux which requires user namespaces.
enabled by default on Linux which requires user namespaces.
If possible enable them; the procedure depends on the distribution. In last resort, you can disable the sandbox: create the file <code>~/.config/nix/nix.conf</code> and include the line <code>sandbox = false</code>.
If possible enable them; the procedure depends on the distribution. In last resort, you can disable the sandbox: create the file <code>~/.config/nix/nix.conf</code> and include the line <code>sandbox = false</code>.
=== Unstable Nix ===
To install unstable Nix, you can use the [https://github.com/numtide/nix-unstable-installer unofficial installer by @numtide]. Instructions are available in the README of the repository.


== Nix store on an unusual filesystem ==
== Nix store on an unusual filesystem ==
Line 172: Line 175:
You can make all nix commands use the alternate store by specifying it in `~/.config/nix/nix.conf` as <code>store = /home/USERNAME/my-nix</code>.
You can make all nix commands use the alternate store by specifying it in `~/.config/nix/nix.conf` as <code>store = /home/USERNAME/my-nix</code>.


== Installing on Debian Using APT ==
If you are using Debian (or a Debian-based distro) you can install Nix with the APT package manager. Some users may prefer using APT when modifying their system. The package named <code>nix-setup-systemd</code> will set up a multi-user Nix installation and run <code>nix-daemon</code> via <code>systemd</code>. To install:
<syntaxHighlight lang="console">
$ sudo apt install nix-setup-systemd
</syntaxHighlight>
After installing, you should read <code>/usr/share/doc/nix-bin/README.Debian</code>. In particular, you will need to add your user to the <code>nix-users</code> group in order to use the daemon:
<syntaxHighlight lang="console">
$ sudo /sbin/adduser $USER nix-users
</syntaxHighlight>
Note that in Debian [https://packages.debian.org/bookworm/nix-setup-systemd Bookworm] <code>/etc/nix/nix.conf</code> will contain <code>sandbox = false</code>, but in Debian [https://packages.debian.org/trixie/nix-setup-systemd Trixie], sandbox mode is enabled by default. (See the Changelog for details.)
=== Configure user and/or desktop ===
To start installed nix applications from the command line, add the <code>~/.nix-profile/bin</code> to <code>PATH</code>.
To give the Desktop access the nix application data add the <code>~/.nix-profile/share</code> to <code>XDG_DATA_DIRS</code>.
For example include the following snippet in <code>~/.profile</code> of the user:
<syntaxHighlight lang="console">
### set PATH so it includes user's nix bin if it exists
if [ -d "$HOME/.nix-profile/bin" ] ; then
    PATH="$HOME/.nix-profile/bin:$PATH"
fi
### set XDG_DATA_DIR so it includes user's nix share if it exists
if [ -d "$HOME/.nix-profile/share" ] ; then
    XDG_DATA_DIRS="$HOME/.nix-profile/share:$XDG_DATA_DIRS"
fi
</syntaxHighlight>
Used source: https://imranmustafa.net/nix-on-debian/


=== Troubleshooting ===
During the <code>nix-build</code> command following the https://nix.dev/tutorials/nixos/nixos-configuration-on-vm#creating-a-qemu-based-virtual-machine-from-a-nixos-configuration
an error could occur like:
<code>...linux-6.12.39-modules-shrunk/lib' is not in the Nix store</code> whilst the directory is present in the <code>/nix/store/</code> directory.
A possible solution is to upgrade nix and nix-daemon applications because the distributed nix version is older, quite older with Debian [https://packages.debian.org/bookworm/nix-setup-systemd Bookworm], than the current nix version:
1) Define the config at <code>~/.config/nixpkgs/config.nix</code>:
<syntaxHighlight lang="console">
with (import <nixpkgs> {});
{
  packageOverrides = pkgs: with pkgs; {
    userPackages = buildEnv {
      extraOutputsToInstall = [ "doc" "info" "man" ];
      name = "user-packages";
      paths = [
        nix
      ];
    };
  };
}
</syntaxHighlight>
To upgrade nix:
<syntaxHighlight lang="console">
nix-env --install --attr nixpkgs.userPackages --remove-all
</syntaxHighlight>
Logout and login the user to see the effects.
2) To use the upgraded <code>nix-daemon</code> application from the previous step in the <code>nix-daemon.service</code>, add a drop-in config file <code>override.conf</code> in <code>/etc/systemd/system/nix-daemon.service.d/</code>:
<syntaxHighlight lang="console">
[Service]
ExecStart=
ExecStart=@/home/myuser/.nix-profile/bin/nix-daemon nix-daemon --daemon
</syntaxHighlight>
Restart the <code>nix-daemon.service</code>
Used source: https://blog.koch.ro/posts/2024-01-16-using-nix-package-manager-in-debian.html
== Windows Subsystem for Linux (WSL) ==
== Windows Subsystem for Linux (WSL) ==


Line 199: Line 278:


Because there is no officially produced ARMv7l installer, this page describes how to build your own: [[Nix_on_ARM]].
Because there is no officially produced ARMv7l installer, this page describes how to build your own: [[Nix_on_ARM]].
== Further reading ==
* [https://nixcademy.com/posts/nix-on-macos/ Setting up Nix on macOS, Nixcademy]


[[Category:nix]]
[[Category:nix]]
[[Category:Cookbook]]
[[Category:Cookbook]]