Nix (package manager): Difference between revisions

imported>Leo248
m updated stable channel to 23.11
Remove mentions of `nix-env` and `nix-channel`
Line 6: Line 6:
=== Installation ===
=== Installation ===


The [https://nixos.org/nix/manual/#chap-installation installation section of the Nix manual] describes how to install Nix from binary or source on Linux and Mac systems for a user with root privileges; it is easiest to install Nix for a single user, but steps are also included for setting up a multiuser installation. For an extensive guide on various methods for installing Nix - including how to install Nix without root privileges - see the [[Nix Installation Guide]].
The [https://nixos.org/nix/manual/#chap-installation installation section of the Nix manual] describes how to install standalone Nix from binary or source on Linux and Mac systems. NixOS ships with Nix pre-installed.


=== Nix commands ===
=== Nix commands ===


Since nix 2.0 there is a new style of commands. Those are [https://nixos.org/manual/nix/stable/command-ref/experimental-commands.html documented in the official manual].
Since Nix 2.0 there is a new style of commands. Those are [https://nixos.org/manual/nix/stable/command-ref/experimental-commands.html documented in the Nix reference manual]. See [[Nix command]] for additional information.
See [[Nix command]] for additional information.


=== Declarative Configuration ===
=== Configuration ===
The only configuration file officially associated with Nix is <code>nix.conf</code> (usually found in <code>/etc/nix/</code>), which defines a number of settings relating to how Nix, including build, garbage collection, sandboxing, and user permissions. Details on the available options are [https://nixos.org/manual/nix/stable/command-ref/conf-file found in the manual].  
On NixOS, Nix is configured through the [https://search.nixos.org/options?query=nix. <code>nix</code> option].  


Since most scenarios involve using [[Nixpkgs]], configuration of <code>~/.config/nixpkgs/config.nix</code> is often also helpful; here package overrides can be specified.  
Standalone Nix is configured through <code>nix.conf</code> (usually found in <code>/etc/nix/</code>), which defines a number of settings relating to evaluation, builds, garbage collection, sandboxing, and user permissions. Details on the available options are [https://nixos.org/manual/nix/stable/command-ref/conf-file found in the Nix reference manual].  


[[Home Manager]] is the preferred way to manage declarative environments for a single user.
Outside of NixOS, [[Home Manager]] is the preferred way to manage declarative environments for a single user. For system-wide configuration on Linux, use [https://github.com/numtide/system-manager System Manager]. For system-wide configuration on macOS, [https://github.com/LnL7/nix-darwin nix-darwin] is the preferred solution.
For system configuration on macOS [https://github.com/LnL7/nix-darwin nix-darwin] is the preferred solution.
 
=== Imperative Operations ===
 
To a large extent, package and environment management in Nix is imperative; user environments - including package installation and removal - is managed with the <code>nix-env</code> command, while <code>nix-channels</code> determine which version of [[Nixpkgs]] is used, and thus which version your packages will have.
 
====  User Environments ====
 
Nix offers an imperative package management command line tool - <code>nix-env</code> - which can be used to install packages at the user level. Packages installed using <code>nix-env</code> are only available to the given user, and do not change system state.
 
{|  class="wikitable"
|+ Common <code>nix-env</code> Commands
|-
|Searching for packages
|<code>nix search nixpkgs packagename</code>
|-
|Installing a package
|<code>nix-env -iA packagename</code>
|-
|List installed packages
|<code>nix-env -q</code>
|-
|Uninstall packages
|<code>nix-env -e packagename</code>
|-
|Upgrade packages
|<code>nix-env -u</code>
|}
 
==== Channels ====
 
Nix packages are distributed through a number of Nix channels: mechanisms for distributing Nix expressions as well as the associated binary caches for them. These channels are what determine which versions your packages have, and they can be broadly categorized into ''stable'' and ''unstable'' channels. Most users will want the stable channel, currently <code>nixos-23.11</code>. For more information on channels and how to choose them, see the [[Nix Channels]] article.
 
{| class="wikitable"
|+ Common nix-channel commands
|-
|Listing current channels
|<code>nix-channel --list</code>
|-
| Adding a primary channel
|<code><nowiki>nix-channel --add https://nixos.org/channels/channel-name nixos</nowiki></code>
|-
| Adding other channels
|<code><nowiki>nix-channel --add https://some.channel/url my-alias</nowiki></code>
|-
| Remove a channel
|<code>nix-channel --remove channel-alias</code>
|-
| Updating a channel
|<code>nix-channel --update channel-alias</code>
|-
| Updating all channels
|<code>nix-channel --update</code>
|}


== Internals ==
== Internals ==