FAQ: Difference between revisions

Qyriad (talk | contribs)
note lib.fakeHash
Klinger (talk | contribs)
m changed link from redirect to article
(16 intermediate revisions by 7 users not shown)
Line 4: Line 4:


== Why is there a new wiki? What is with nixos.wiki? ==
== Why is there a new wiki? What is with nixos.wiki? ==
The old wiki has some problems:


* many components (mediawiki, php, icu) are severly outdated
The old wiki at nixos.wiki has several problems:


   - MediaWiki 1.29 (EOL 2018), now 1.35 (EOL 2023-12)
* Many components (mediawiki, php, icu) are severely outdated.
** MediaWiki 1.29 (EOL 2018), now 1.35 (EOL 2023-12)
** PHP 7.3.33 (EOL 2021-12)
** ICU 64.2
* Cloudflare DDOS protection makes wiki edits fail sometimes.
* There is no WYSIWYG editor.
* The wiki infrastructure, which was supposed to be made public after launch, never ended-up being made public.


   - PHP 7.3.33 (EOL 2021-12)
We tried to address these issues multiple times over multiple years across multiple channels (email, matrix). We never got a direct answer. The last point of contact was made through zimbatm representing the NixOS foundation, asking the maintainer about possible cooperation on a new wiki. The answer was no. With the old wiki deteriorating and the maintainer unresponsive, forking the content into a new wiki remained the only way forward.


   - ICU 64.2
Also see:
* https://nixos.wiki/wiki/User:Winny/WikiRisks
* https://greasyfork.org/en/scripts/495011-redirect-to-wiki-nixos-org (trivial userscript to redirect nixos.wiki links here)


* we had issues with the cloudflare DDOS protection making wiki edits fail sometimes
== Why is Nix written in C++ rather than a functional language like Haskell? ==
 
* no WYSIWYG editor
 
* the infra, which was supposed to be made public close to the start, never ended-up being public
 
 
We addressed most of the issues multiple times over multiple years over multiple channels (email, matrix). We never got a direct answer. The last point of contact was made through zimbatm to represent the foundation and ask fadenb if he wants to cooperate on a new wiki. The answer was no. With the old wiki deteriorating and the admin non responsive we sadly saw forking as the only way forward.
 
references:
 
- <nowiki>https://nixos.wiki/wiki/User:Winny/WikiRisks</nowiki>


== Why is Nix written in C++ rather than a functional language like Haskell? ==
Mainly because Nix is intended to be lightweight, easy to learn, and portable (zero dependencies).


Mainly because Nix is intended to be lightweight, easy to learn and portable (zero dependencies). Since 24. April 2017 thanks to [https://github.com/shlevy Shea Levy] and the [https://www.gofundme.com/htuafwrg/ crowdfunding of 54 community members], nix does not have Perl as dependency anymore.
{{:FAQ/Libraries}}
{{:FAQ/nix-env -iA}}
{{:FAQ/stateVersion}}
== How to keep build-time dependencies around / be able to rebuild while being offline? ==
== How to keep build-time dependencies around / be able to rebuild while being offline? ==


Line 38: Line 30:
{ config, pkgs, lib, ... }:
{ config, pkgs, lib, ... }:
{
{
   nix.extraOptions = ''
   nix.settings = {
     keep-outputs = true
     keep-outputs = true;
     keep-derivations = true
     keep-derivations = true;
   '';
    # See https://nixos.org/manual/nix/stable/command-ref/conf-file.html
    # for a complete list of Nix configuration options.
   };
}</syntaxhighlight>
}</syntaxhighlight>
Check 'man configuration.nix' for these options. Rebuild for these options to take effect:
Check 'man configuration.nix' for these options. Rebuild for these options to take effect:
Line 158: Line 152:


If you are in a hurry and just want to get shit running, continue reading:<br />
If you are in a hurry and just want to get shit running, continue reading:<br />
Compiled binaries have hard-coded interpreter and require certain dynamic libraries. You can use [https://nixos.org/patchelf.html patchelf] to set the library path and dynamic linker appropriately:
 
You can use [https://github.com/Mic92/nix-ld nix-ld] to run compiled binaries. For example, if your binary needs zlib and openssl:
 
<syntaxhighlight lang="nix">
programs.nix-ld = {
  enable = true;
  libraries = [ pkgs.zlib pkgs.openssl ];
};</syntaxhighlight>
 
Log out and back in to apply the environment variables it sets, and you can then directly run the binary.
 
If you don't want to configure the list of libraries manually, a quick and dirty way to run nearly any precompiled binary is the following:
 
<syntaxhighlight lang="nix">
programs.nix-ld = {
  enable = true;
  libraries = pkgs.steam-run.fhsenv.args.multiPkgs pkgs;
};</syntaxhighlight>
 
This uses the libraries that are used by [[Steam]] to simulate a traditional Linux FHS environment to run games in. It's a [https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/games/steam/fhsenv.nix big list] that usually contains all the libraries your binary needs to run.
 
Another possibility is to use [https://nixos.org/patchelf.html patchelf] to set the library path and dynamic linker appropriately, since compiled binaries have hard-coded interpreter and require certain dynamic libraries.


<syntaxhighlight lang="nix">
<syntaxhighlight lang="nix">
Line 216: Line 231:


== What are channels and how do they get updated? ==
== What are channels and how do they get updated? ==
{{main|Nix Channels}}
{{main|Channel branches}}


[https://github.com/NixOS/nixpkgs Nixpkgs] is the git repository containing all packages and NixOS modules/expressions. Installing packages directly from Nixpkgs master branch is possible but a bit risky as git commits are merged into master before being heavily tested. That's where channels are useful.
[https://github.com/NixOS/nixpkgs Nixpkgs] is the git repository containing all packages and NixOS modules/expressions. Installing packages directly from Nixpkgs master branch is possible but a bit risky as git commits are merged into master before being heavily tested. That's where channels are useful.
Line 260: Line 275:


== Nixpkgs branches ==
== Nixpkgs branches ==
Branches on the nixpkgs repo have a relationship with [[channels]], but that relationship is not 1:1.
Branches on the nixpkgs repo have a relationship with channels, but that relationship is not 1:1.


Some branches are reified as channels (e.g. the <code>nixos-XX.YY</code> branches, or <code>nix(os|pkgs)-unstable</code>), whereas others are the starting point for those branches (e.g. the <code>master</code> or <code>release-XX.YY</code> branches). For example:
Some branches are reified as channels (e.g. the <code>nixos-XX.YY</code> branches, or <code>nix(os|pkgs)-unstable</code>), whereas others are the starting point for those branches (e.g. the <code>master</code> or <code>release-XX.YY</code> branches). For example:


* When a change in master needs to be backported to the current NixOS release, it is cherry-picked into the current <code>release-XX.YY</code> branch
* When a change in master needs to be backported to the current NixOS release, it is cherry-picked into the current <code>release-XX.YY</code> branch
* [[Nix_channels#Channel_update_process|Hydra]] picks up this change, runs tests, and if those tests pass, updates the corresponding <code>nixos-XX.YY</code> branch, which is then reified as a channel.
* [[Channel branches#Channel_update_process|Hydra]] picks up this change, runs tests, and if those tests pass, updates the corresponding <code>nixos-XX.YY</code> branch, which is then reified as a channel.


So in short, the <code>relase-XX.YY</code> branches have not been run through Hydra yet, whereas the <code>nixos-XX.YY</code> ones have.
So in short, the <code>relase-XX.YY</code> branches have not been run through Hydra yet, whereas the <code>nixos-XX.YY</code> ones have.
Line 350: Line 365:
</syntaxhighlight>
</syntaxhighlight>


See [[Nix Package Manager#Sandbox_builds]] for more details.
See [[Nix package manager#Sandbox_builds]] for more details.
 
{{:FAQ/notfound}}
{{:FAQ/unfree}}


== How can I install a package from unstable while remaining on the stable channel? ==
== How can I install a package from unstable while remaining on the stable channel? ==
Line 415: Line 427:
Restart NixOS.
Restart NixOS.


== What is the origin of the name "Nix" ==


== What is the origin of the name <code>Nix</code> ==
The name <code>Nix</code> comes from the Dutch word [https://en.wiktionary.org/wiki/nix niks] which means ''nothing''. It reflects the fact that Nix derivations do not have access to anything that has not been explicitly declared as an input.<ref>Eelco Dolstra et al. “Nix: A Safe and Policy-Free System for Software Deployment.” LiSA (2004), https://pdfs.semanticscholar.org/5fd8/8f89bd8738816e62808a1b7fb12d3ab14a2f.pdf</ref>


<blockquote>The name <code>Nix</code> is derived from the Dutch word [https://en.wiktionary.org/wiki/nix niks], meaning ''nothing'';build actions do not see anything that has not been explicitly declared as an input > [https://pdfs.semanticscholar.org/5fd8/8f89bd8738816e62808a1b7fb12d3ab14a2f.pdf Nix: A Safe and Policy-Free System for Software Deployment, page 2]
== What does it mean to say that NixOS is "immutable" ==
</blockquote>
Immutability is a property of data, in general, which means that the data cannot be modified after it is created. In the context of an operating system, it really means that certain parts of the system have this property. In the case of Nix and NixOS, that includes the Nix store, where files can be created but not modified after the time they are created. It does not apply to every part of the operating system, in that users can still modify their own files in their home directory, for example.


<hr />
{{:FAQ/Libraries}}
{{:FAQ/nix-env -iA}}
{{:FAQ/stateVersion}}
{{:FAQ/notfound}}
{{:FAQ/unfree}}
<!-- Transclude subpages -->


== References ==
== References ==


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