Terms and Definitions in Nix Project: Difference between revisions

From NixOS Wiki
imported>Nix
mNo edit summary
m Minor wording changes and an updated link to the manual page on recursive sets.
 
(9 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== Terms and Definitions ==
If you come across a term or word you don't know, add it here.
If you come across a term or word you don't know, add it here.


Line 7: Line 4:
{| class="wikitable"
{| class="wikitable"
|-  
|-  
! Term || Context || Meaning || Related Links
! scope="col" style="width:50px;" | Term
! scope="col" style="width: 60px;" | Context
! Meaning
! Related Links
|--------
|--------
|| <div id="user_environment"></div>[[User Environment]]
|| <div id="user_environment"></div>[[User Environment]]
|| Nix
|| Nix
|| A set of "active" applications. These applications usually exist in the Nix store. A single Nix user may have multiple User Environments. This is an important concept further explored in [[User Environment]]. ''Profiles'' and ''generations'' are closely related.
|| A set of "active" applications. These applications usually exist in the Nix store. A single Nix user may have multiple ''user environments''. ''Profiles'' and ''generations'' are closely related.
|| {{Nix Manual|name=Nix Manual - Basic Package Management chapter|anchor=#ch-basic-package-mgmt}} <br>{{Nix Manual|name=Nix Manual - Profiles chapter|anchor=#sec-profiles}} <br>{{Nix Manual|name=Nix Manual - nix-env|anchor=#sec-nix-env}}
|| {{Nix Manual|name=Nix Manual - Basic Package Management chapter|anchor=#ch-basic-package-mgmt}} <br>{{Nix Manual|name=Nix Manual - Profiles chapter|anchor=#sec-profiles}} <br>{{Nix Manual|name=Nix Manual - nix-env|anchor=#sec-nix-env}}
|--------
|--------
|| (User) Profile
|| (User) Profile
|| Nix
|| Nix
|| Most generally, a ''profile'' is a link to a ''generation'', and there's a '''profiles''' (note the '''s''') folder which collects types of profiles together so that they form lists of generations. In standalone Nix (e.g. on a different Linux distro), it's primary use is user profiles. In NixOS, there's also the ''system'' profile, which manages system-wide configuration (e.g. ''/etc'', the kernel, ''initrd'', ''systemd''). Tools like [[Home Manager]] also have their own profile (which would also be per-user). The user's ''active profile'' is defined in ''~/.nix-profile'', and is what all '''nix-env''' commands would operate on by default.<code>
|| Profiles simplify managing and switching between ''user environments'', and thus control which applications and system configurations are in active use. Generally, a ''profile'' is a link to a ''generation'', and the corresponding '''profiles''' folder collects a list of generations. A standalone Nix installation (i.e. on a Linux distro that is not NixOS) operates mainly on ''user'' profiles. In NixOS, there is also a ''system'' profile that manages the system-wide configuration (e.g. ''/etc'', the kernel, ''initrd'', ''systemd''). Other tools like [[Home Manager]] may also have their own profiles. By default, a user's active profile is stored at ''~/.nix-profile'':
ls -l ~/.nix-profile<br>
<syntaxHighlight lang=shell>
lrwxrwxrwx 1 username users ... /home/username/.nix-profile -> /nix/var/nix/profiles/per-user/username/profile</code>
$ ls -l ~/.nix-profile
|| [http://nixos.org/nix/manual/#sec-profiles Nix Manual: Profiles]
lrwxrwxrwx ... /home/username/.nix-profile ->
/nix/var/nix/profiles/per-user/username/profile
</syntaxHighlight>
|| [http://nixos.org/nix/manual/#sec-profiles Nix Manual: Profiles]<br>[https://nixos.org/guides/nix-pills/install-on-your-running-system.html#idm140737320787760 Nix Pills - The first profile]
|--------
|--------
|| <div id="generation"></div>Generation
|| <div id="generation"></div>Generation
|| Nix
|| Nix
|| A revision of a ''user environment'', newly created every time the system is updated (with old ones being preserved until manually removed). Technically, each generation is simply a link to a specific ''user environment'' in the Nix store. This term connotes the cloning and modification of an existing user environment. Nix's environment rollback facilities rely on Generations. The ''current generation'' is a user's currently selected ''user environment'', and is generally selected via the ''active profile'' (which is just a symlink, normally in ''/nix/var/nix/profiles/'').  
|| An instance of a ''user environment''. When a user makes any change to their environment, such as installing or removing packages, a new ''generation'' of the environment is created instead of modifying the environment in-place. This ensures that updates are atomic and the user can easily roll-back to any previous generation if something goes wrong. The ''current generation'' is a user's currently active user profile.
|| [http://nixos.org/nix/manual/#sec-profiles Nix Manual: Profiles]
|| [https://nix.dev/manual/nix/stable/package-management/profiles Nix Manual: Profiles]
|--------
|--------
|| Derivation
|| Derivation
|| Nix
|| Nix
|| A Nix expression which describes a build action. High-level derivations (like the ones describing packages in [[Nixpkgs]]), get evaluated into low-level derivations (called ''store derivations'' &mdash; because they wind up in the ''Nix store''). <code>nix-instantiate</code> is the command which translates high-level derivations into low-level ones. <code>nix-store --realise</code> can then check and finish their build for the ''nix store'', producing ''output path(s)''. <code>nix-build</code> is a user-friendly wrapper for the previous commands. Derivations are analogous to package definitions in other package managers.
|| A Nix expression which describes a build action. Derivations are analogous to package definitions in other package managers. High-level derivations, such as the ones describing packages in [[Nixpkgs]], get evaluated into low-level derivations (called ''store derivations''), for instance by using the <code>nix-instantiate</code> command. <code>nix-store --realise</code> runs the build commands described in the low-level derivation, producing one or more ''output paths''. <code>nix-build</code> is a user-friendly wrapper for the previous two commands.
|| [http://nixos.org/nix/manual/#gloss-derivation Nix Manual: Glossary - Derivation] <br> [http://nixos.org/nix/manual/#ssec-derivation Nix Manual: Derivation]
|| [http://nixos.org/nix/manual/#gloss-derivation Nix Manual: Glossary - Derivation] <br> [http://nixos.org/nix/manual/#ssec-derivation Nix Manual: Derivation]
|--------
|--------
Line 34: Line 37:
|| Nix
|| Nix
|| A ''store path'' produced by a derivation. These are generally analogous to built packages, or pieces of them.
|| A ''store path'' produced by a derivation. These are generally analogous to built packages, or pieces of them.
<syntaxHighlight lang=shell>
$ ls -ld /nix/store/*-firefox-9*/
dr-xr-xr-x ... /nix/store/v4b8...3d0w-firefox-92.0/
</syntaxHighlight>
|| [http://nixos.org/nix/manual/#ssec-derivation Nix Manual: Derivation]
|| [http://nixos.org/nix/manual/#ssec-derivation Nix Manual: Derivation]
|--------
|--------
Line 39: Line 46:
|| Nix expressions
|| Nix expressions
|| The <code>{ }</code> block contains "mutually recursive" attributes, which means they can refer to each other.
|| The <code>{ }</code> block contains "mutually recursive" attributes, which means they can refer to each other.
|| [http://nixos.org/nix/manual/#ex-hello-composition Composing the Hello Package]
|| [https://nix.dev/manual/nix/2.24/language/syntax.html#recursive-sets Nix Manual: Syntax and semantics: Recursive sets]
|--------
|--------
|| <code>expression evaluator</code>
|| <code>expression evaluator</code>
Line 58: Line 65:
|--------
|--------
|| attribute path
|| attribute path
|| nix-env takes this if you pass the `-A` flag [http://nixos.org/nix/manual/#opt-attr]  
|| nix-env takes this if you pass the `-A` flag [http://nixos.org/nix/manual/#opt-attr]
|| an unambiguous identifier for a package
|| an unambiguous identifier for a package
||  
||  
Line 74: Line 81:
|| selection path
|| selection path
|| nix-shell error message [https://github.com/NixOS/nix/blob/bdc4a0b54d54146448061dd9a248212f98a9f801/src/libexpr/attr-path.cc#L73]
|| nix-shell error message [https://github.com/NixOS/nix/blob/bdc4a0b54d54146448061dd9a248212f98a9f801/src/libexpr/attr-path.cc#L73]
|| see "attribute path"[http://nixos.org/irc/logs/log.20151103]  
|| see "attribute path"[http://nixos.org/irc/logs/log.20151103]
||  
||  
|--------
|--------
Line 99: Line 106:
-->
-->
|}
|}
{{Bottom whitespace}}

Latest revision as of 15:21, 2 September 2024

If you come across a term or word you don't know, add it here.

Term Context Meaning Related Links
User Environment
Nix A set of "active" applications. These applications usually exist in the Nix store. A single Nix user may have multiple user environments. Profiles and generations are closely related.

Nix Manual - Basic Package Management chapter
Nix Manual - Profiles chapter
Nix Manual - nix-env

(User) Profile Nix Profiles simplify managing and switching between user environments, and thus control which applications and system configurations are in active use. Generally, a profile is a link to a generation, and the corresponding profiles folder collects a list of generations. A standalone Nix installation (i.e. on a Linux distro that is not NixOS) operates mainly on user profiles. In NixOS, there is also a system profile that manages the system-wide configuration (e.g. /etc, the kernel, initrd, systemd). Other tools like Home Manager may also have their own profiles. By default, a user's active profile is stored at ~/.nix-profile:
$ ls -l ~/.nix-profile
lrwxrwxrwx ... /home/username/.nix-profile ->
/nix/var/nix/profiles/per-user/username/profile
Nix Manual: Profiles
Nix Pills - The first profile
Generation
Nix An instance of a user environment. When a user makes any change to their environment, such as installing or removing packages, a new generation of the environment is created instead of modifying the environment in-place. This ensures that updates are atomic and the user can easily roll-back to any previous generation if something goes wrong. The current generation is a user's currently active user profile. Nix Manual: Profiles
Derivation Nix A Nix expression which describes a build action. Derivations are analogous to package definitions in other package managers. High-level derivations, such as the ones describing packages in Nixpkgs, get evaluated into low-level derivations (called store derivations), for instance by using the nix-instantiate command. nix-store --realise runs the build commands described in the low-level derivation, producing one or more output paths. nix-build is a user-friendly wrapper for the previous two commands. Nix Manual: Glossary - Derivation
Nix Manual: Derivation
Output path Nix A store path produced by a derivation. These are generally analogous to built packages, or pieces of them.
$ ls -ld /nix/store/*-firefox-9*/
dr-xr-xr-x ... /nix/store/v4b8...3d0w-firefox-92.0/
Nix Manual: Derivation
rec { } Nix expressions The { } block contains "mutually recursive" attributes, which means they can refer to each other. Nix Manual: Syntax and semantics: Recursive sets
expression evaluator Nix The part of the Nix program which reads and evaluates a Nix expression. Nix Manual: Common Options --arg
Nix Manual: Built-in Functions
stdenv Nix expressions An attribute which contains things expected in the most basic Unix environment. (e.g. Bash shell, gcc, cp, tar, grep, etc.) all-packages.nix: stdenv =]
config.nix or nixpkgs-config.nix NixOS Wiki A Nix expression retrieved by and applied to the all-packages.nix Nix expression. This file enables an end-user to customize the Nix expressions contained in the community-owned NixPkgs list or to define entirely new Nix expressions to use with Nix commands. This file's path can be overridden by the NIXPKGS_CONFIG environment variable. all-packages.nix: config

NixPkgs Release Notes

attribute path nix-env takes this if you pass the `-A` flag [1] an unambiguous identifier for a package
symbolic package name [2] This string represents what you commonly think of as a package. There can be multiple packages with the symbolic name "hello".
selector this term is used in nix-env error messages [3], it seems to be actually a DrvName struct [4] (a derivation name) see "symbolic package name"
selection path nix-shell error message [5] see "attribute path"[6]
derivation name manual[7], source code [8] see "symbolic package name"
package name IRC[9] see "symbolic package name"
attribute selection path source[10] see "attribute path"