diff --git a/.clang-format b/.clang-format deleted file mode 100644 index 1ee475b7a..000000000 --- a/.clang-format +++ /dev/null @@ -1,50 +0,0 @@ ---- -BasedOnStyle: LLVM -AccessModifierOffset: -4 -AlignAfterOpenBracket: BlockIndent -AlignEscapedNewlines: Left -AlignOperands: DontAlign -AllowShortBlocksOnASingleLine: Always -AllowShortFunctionsOnASingleLine: Empty -AllowShortIfStatementsOnASingleLine: WithoutElse -AlwaysBreakBeforeMultilineStrings: true -AlwaysBreakTemplateDeclarations: Yes -BinPackArguments: false -BinPackParameters: false -BitFieldColonSpacing: None -BraceWrapping: - AfterCaseLabel: false - AfterClass: true - AfterControlStatement: MultiLine - AfterEnum: false - AfterFunction: true - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: true - AfterUnion: true - AfterExternBlock: false - BeforeCatch: false - BeforeElse: false - BeforeLambdaBody: false - BeforeWhile: false - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: false - SplitEmptyNamespace: true -BreakAfterAttributes: Always -BreakBeforeBinaryOperators: NonAssignment -BreakBeforeBraces: Custom -BreakConstructorInitializers: BeforeComma -ColumnLimit: 100 -EmptyLineAfterAccessModifier: Leave -EmptyLineBeforeAccessModifier: Leave -FixNamespaceComments: false -IndentWidth: 4 -InsertBraces: true -InsertTrailingCommas: Wrapped -LambdaBodyIndentation: Signature -PackConstructorInitializers: CurrentLine -PointerAlignment: Middle -SortIncludes: Never -SpaceAfterCStyleCast: true -SpaceAfterTemplateKeyword: false diff --git a/.clang-tidy b/.clang-tidy deleted file mode 100644 index 3b5dcd91a..000000000 --- a/.clang-tidy +++ /dev/null @@ -1,18 +0,0 @@ -UseColor: true -Checks: - - -* - - bugprone-* - # too many warnings - - -bugprone-assignment-in-if-condition - # too many warnings - - -bugprone-narrowing-conversions - # kind of nonsense - - -bugprone-easily-swappable-parameters - # too many warnings for now - - -bugprone-implicit-widening-of-multiplication-result - # Lix's exception handling is Questionable - - -bugprone-empty-catch - # many warnings - - -bugprone-unchecked-optional-access - # many warnings, seems like a questionable lint - - -bugprone-branch-clone diff --git a/.dir-locals.el b/.dir-locals.el deleted file mode 100644 index a2d1dc48d..000000000 --- a/.dir-locals.el +++ /dev/null @@ -1,18 +0,0 @@ -((c++-mode . ( - (c-file-style . "k&r") - (c-basic-offset . 4) - (c-block-comment-prefix . " ") - (indent-tabs-mode . nil) - (tab-width . 4) - (show-trailing-whitespace . t) - (indicate-empty-lines . t) - (eval . (c-set-offset 'innamespace 0)) - (eval . (c-set-offset 'defun-open 0)) - (eval . (c-set-offset 'inline-open 0)) - (eval . (c-set-offset 'arglist-intro '+)) - (eval . (c-set-offset 'arglist-cont 0)) - (eval . (c-set-offset 'arglist-cont-nonempty '+)) - (eval . (c-set-offset 'substatement-open 0)) - (eval . (c-set-offset 'access-label '-)) - (eval . (c-set-offset 'inlambda 0)) - ))) diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index bcee9cfce..000000000 --- a/.editorconfig +++ /dev/null @@ -1,31 +0,0 @@ -# EditorConfig configuration for nix -# http://EditorConfig.org - -# Top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file, utf-8 charset -[*] -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -charset = utf-8 - -# Match nix files, set indent to spaces with width of two -[*.nix] -indent_style = space -indent_size = 2 - -# Match c++/shell/perl, set indent to spaces with width of four -[*.{hpp,cc,hh,sh,pl}] -indent_style = space -indent_size = 4 - -# Match diffs, avoid to trim trailing whitespace -[*.{diff,patch}] -trim_trailing_whitespace = false - -[*.md] -indent_style = space -indent_size = 2 -max_line_length = 0 diff --git a/.envrc b/.envrc deleted file mode 100644 index e6505ace6..000000000 --- a/.envrc +++ /dev/null @@ -1,9 +0,0 @@ -# shellcheck shell=bash -source_env_if_exists .envrc.local -# TODO: `use flake .#native-clangStdenvPackages` on macOS? -use flake ".#${LIX_SHELL_VARIANT:-default}" "${LIX_SHELL_EXTRA_ARGS[@]}" -export MAKEFLAGS="$MAKEFLAGS -e" -if [[ -n "$NIX_BUILD_CORES" ]]; then - export MAKEFLAGS="$MAKEFLAGS -j $NIX_BUILD_CORES" -fi -export GTEST_BRIEF=1 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 50ee41b91..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -## Describe the bug - -A clear and concise description of what the bug is. - -If you have a problem with a specific package or NixOS, -you probably want to file an issue at https://github.com/NixOS/nixpkgs/issues. - -## Steps To Reproduce - -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -## Expected behavior - -A clear and concise description of what you expected to happen. - -## `nix --version` output - -## Additional context - -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index c7f0d842b..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: feature -assignees: '' - ---- - -## Is your feature request related to a problem? Please describe. - -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -## Describe the solution you'd like - -A clear and concise description of what you want to happen. - -## Describe alternatives you've considered - -A clear and concise description of any alternative solutions or features you've considered. - -## Additional context - -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/installer.md b/.github/ISSUE_TEMPLATE/installer.md deleted file mode 100644 index 9e4189fa3..000000000 --- a/.github/ISSUE_TEMPLATE/installer.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -name: Installer issue -about: Report problems with installation -title: '' -labels: installer -assignees: '' - ---- - -## Platform - - - -- [ ] Linux: -- [ ] macOS -- [ ] WSL - -## Additional information - - - -## Output - -
Output - -```log - - - -``` - -
diff --git a/.github/ISSUE_TEMPLATE/missing_documentation.md b/.github/ISSUE_TEMPLATE/missing_documentation.md deleted file mode 100644 index fa3a5137a..000000000 --- a/.github/ISSUE_TEMPLATE/missing_documentation.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -name: Missing or incorrect documentation -about: Help us improve the reference manual -title: '' -labels: documentation -assignees: '' - ---- - -## Problem - - - -## Proposal - - - -## Checklist - - - -- [ ] checked [latest Lix manual] \([source]\) -- [ ] checked [documentation issues] and [recent documentation changes] for possible duplicates - -[latest Nix manual]: https://docs.lix.systems/manual/lix/nightly -[source]: https://git.lix.systems/lix-project/lix/src/main/doc/manual/src -[documentation issues]: https://git.lix.systems/lix-project/lix/issues?labels=151&state=all -[recent documentation changes]: https://gerrit.lix.systems/q/p:lix+path:%22%5Edoc/manual/.*%22 diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 529af0f37..000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,11 +0,0 @@ -# Motivation - - -# Context - - - - - - - diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 55e6e5c8b..000000000 --- a/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -outputs/ - -# GNU Global -GPATH -GRTAGS -GSYMS -GTAGS - -# ccls -/.ccls-cache - -result -result-* - -.vscode/ -.direnv/ - -# clangd and possibly more -.cache/ - -# Mac OS -.DS_Store - -# ClangBuildAnalyzer output, see maintainers/buildtime_report.sh -buildtime.bin - -.envrc.local -# We generate this with a Nix shell hook -/.pre-commit-config.yaml -/.nocontribmsg -/release diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 4a4c81cb2..000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,53 +0,0 @@ -# Contributing to Lix - -Welcome and thank you for considering contributing to Lix! We're currently in a soft release phase, and your support means a lot to us. - -To ensure a smooth and effective contribution process, here is a summary of our guidelines: - -## Getting help? - -If you have any question regarding getting started or reporting bugs, feel free -to reach out to us. - -On Matrix, we have a space at `#space:lix.systems`, composed of: - -- [`#discuss:lix.systems`](https://matrix.to/#/#discuss:lix.systems) for discussions on Lix. -- [`#dev:lix.systems`](https://matrix.to/#/#dev:lix.systems) for the development channel on Lix. - -## Report a bug - -- Check if your bug has already been reported in the [issue tracker](https://git.lix.systems/lix-project/lix/issues). -- If you can't find the bug or feature, please open a new issue. - -We maintain a copy of the upstream Nix bugs. Their organisation can be read about [here](https://wiki.lix.systems/books/lix-contributors/page/bug-tracker-organisation). - -## Report a security vulnerability - -For security vulnerabilities, reach out by email at `security at lix dot systems`. - -## Making changes to Lix - -Before diving into making changes, we want to engage with you and your ideas. - -We have a few policies in effect; please take the time to familiarize yourself: - -- [Style guide on code](https://wiki.lix.systems/books/lix-contributors/page/code) -- [Freeze policy and recommended contributions](https://wiki.lix.systems/books/lix-contributors/page/freezes-and-recommended-contributions) - -To avoid duplication of effort, it may be a good idea to check out the list of -[pending pull requests](https://gerrit.lix.systems/q/status:open+-is:wip) (or "change lists", as Gerrit calls them). Once you have -an idea of what you might want to do, we recommend dropping a message on our -Matrix to ensure your contribution fits with our current schedule and plans - -When you're ready and your changes are ready to go: - -- Submit your code. - - Submitting a GitHub PR [on our mirror](https://github.com/lix-project/lix) is totally ok if that's easier for you and your change is relatively small (300 lines or so). - - We may ask you to resubmit it as a Gerrit CL if it is necessary for the change you're making. - - Our primary code review system is [our Gerrit instance](https://gerrit.lix.systems), where you can open a change list (CL). - If you're new to Gerrit, check out [our wiki page about Gerrit](https://wiki.lix.systems/books/lix-contributors/page/gerrit). -- Make sure to link any related issues. -- If needed, indicate that the change is 'work in progress'. - -You can obtain an account on our platforms by clicking "Sign In with GitHub" on the sign-in page. diff --git a/COPYING b/COPYING deleted file mode 100644 index 9c6a6cc38..000000000 --- a/COPYING +++ /dev/null @@ -1,502 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard. To achieve this, non-free programs must be -allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded. In such case, this License incorporates the limitation as if -written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/README.md b/README.md deleted file mode 100644 index 609dd7199..000000000 --- a/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Lix - -**Lix** is an implementation of **Nix**, a powerful package management system for Linux and other Unix systems that makes package management reliable and reproducible. - -Read more about us at https://lix.systems. - -## Installation - -On Linux and macOS the easiest way to install Lix is to run the following shell command -(as a user other than root): - -```console -$ curl -sSf -L https://install.lix.systems/lix | sh -s -- install -``` - -For systems that **already have a Nix implementation installed**, such as NixOS systems, read our [install page](https://lix.systems/install) - -## Building And Developing - -See our [Hacking guide](https://git.lix.systems/lix-project/lix/src/branch/main/doc/manual/src/contributing/hacking.md) in our manual for instruction on how to to set up a development environment and build Lix from source. - -## Additional Resources - -- [Our wiki](https://wiki.lix.systems) -- [Matrix - #space:lix.systems](https://matrix.to/#/#space:lix.systems) - -## License - -Lix is released under the [LGPL v2.1](./COPYING). diff --git a/bench/.gitignore b/bench/.gitignore deleted file mode 100644 index 8115aa6f2..000000000 --- a/bench/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bench-*.json -bench-*.md -nixpkgs diff --git a/bench/README.md b/bench/README.md deleted file mode 100644 index 4aefcd7a8..000000000 --- a/bench/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# Benchmarking scripts for Lix - -These are very much WIP, and have a few clumsy assumptions that we would -somewhat rather be fixed, but we have committed them to let others be able to -do benchmarking in the mean time. - -## Benchmarking procedure - -Build some Lixes you want to compare, by whichever means you wish. - -Get a computer that is not busy and *strongly preferably* is bare-metal or at -least not a cloud VM (e.g. go make coffee when running benchmarks). - -From the root of a Lix checkout, run `./bench/bench.sh resultlink-one -resultlink-two`, where `resultlink-one` and `resultlink-two` are the result -links from the builds you want to test (they can be any directory with bin/nix -in it, however). - -To get the summary again, run `./bench/summarize.jq bench/bench-*.json`. - -## Example results - -(vim tip: `:r !bench/summarize.jq bench/bench-*.json` to dump it directly into -your editor) - -``` -result-asserts/bin/nix --extra-experimental-features 'nix-command flakes' search --no-eval-cache github:nixos/nixpkgs/e1fa12d4f6 -c6fe19ccb59cac54b5b3f25e160870 hello - mean: 15.993s ± 0.081s - user: 13.321s | system: 1.865s - median: 15.994s - range: 15.829s ... 16.096s - relative: 1 -result/bin/nix --extra-experimental-features 'nix-command flakes' search --no-eval-cache github:nixos/nixpkgs/e1fa12d4f6c6fe19cc -b59cac54b5b3f25e160870 hello - mean: 15.897s ± 0.075s - user: 13.248s | system: 1.843s - median: 15.88s - range: 15.807s ... 16.047s - relative: 0.994 - ---- - -result/bin/nix --extra-experimental-features 'nix-command flakes' eval -f bench/nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix - mean: 0.4s ± 0.024s - user: 0.335s | system: 0.046s - median: 0.386s - range: 0.379s ... 0.43s - relative: 1 - -result-asserts/bin/nix --extra-experimental-features 'nix-command flakes' eval -f bench/nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix - mean: 0.404s ± 0.024s - user: 0.338s | system: 0.046s - median: 0.386s - range: 0.384s ... 0.436s - relative: 1.008 - ---- - -result-asserts/bin/nix --extra-experimental-features 'nix-command flakes' eval --raw --impure --expr 'with import {}; system' - mean: 5.838s ± 0.023s - user: 5.083s | system: 0.464s - median: 5.845s - range: 5.799s ... 5.867s - relative: 1 - -result/bin/nix --extra-experimental-features 'nix-command flakes' eval --raw --impure --expr 'with import {}; system' - mean: 5.788s ± 0.044s - user: 5.056s | system: 0.439s - median: 5.79s - range: 5.715s ... 5.876s - relative: 0.991 - ---- - -GC_INITIAL_HEAP_SIZE=10g result-asserts/bin/nix eval --extra-experimental-features 'nix-command flakes' --raw --impure --expr 'with import {}; system' - mean: 4.147s ± 0.021s - user: 3.457s | system: 0.487s - median: 4.147s - range: 4.123s ... 4.195s - relative: 1 - -GC_INITIAL_HEAP_SIZE=10g result/bin/nix eval --extra-experimental-features 'nix-command flakes' --raw --impure --expr 'with import {}; system' - mean: 4.149s ± 0.027s - user: 3.483s | system: 0.456s - median: 4.142s - range: 4.126s ... 4.215s - relative: 1 - ---- -``` diff --git a/bench/bench.sh b/bench/bench.sh deleted file mode 100755 index 70acd4640..000000000 --- a/bench/bench.sh +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail -shopt -s inherit_errexit - -scriptdir=$(cd "$(dirname -- "$0")" ; pwd -P) -cd "$scriptdir/.." - -if [[ $# -lt 2 ]]; then - # FIXME(jade): it is a reasonable use case to want to run a benchmark run - # on just one build. However, since we are using hyperfine in comparison - # mode, we would have to combine the JSON ourselves to support that, which - # would probably be better done by writing a benchmarking script in - # not-bash. - echo "Fewer than two result dirs given, nothing to compare!" >&2 - echo "Pass some directories (with names indicating which alternative they are) with bin/nix in them" >&2 - echo "Usage: ./bench/bench.sh result-1 result-2 [result-3...]" >&2 - exit 1 -fi - -_exit="" -trap "$_exit" EXIT - -# XXX: yes this is very silly. flakes~!! -nix build --impure --expr '(builtins.getFlake "git+file:.").inputs.nixpkgs.outPath' -o bench/nixpkgs - -export NIX_REMOTE="$(mktemp -d)" -_exit='rm -rfv "$NIX_REMOTE"; $_exit' -export NIX_PATH="nixpkgs=bench/nixpkgs:nixos-config=bench/configuration.nix" - -builds=("$@") - -flake_args="--extra-experimental-features 'nix-command flakes'" - -hyperfineArgs=( - --parameter-list BUILD "$(IFS=,; echo "${builds[*]}")" - --warmup 2 --runs 10 -) - -declare -A cases -cases=( - [search]="{BUILD}/bin/nix $flake_args search --no-eval-cache github:nixos/nixpkgs/e1fa12d4f6c6fe19ccb59cac54b5b3f25e160870 hello" - [rebuild]="{BUILD}/bin/nix $flake_args eval --raw --impure --expr 'with import {}; system'" - [rebuild-lh]="GC_INITIAL_HEAP_SIZE=10g {BUILD}/bin/nix eval $flake_args --raw --impure --expr 'with import {}; system'" - [parse]="{BUILD}/bin/nix $flake_args eval -f bench/nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix" -) - -benches=( - rebuild - rebuild-lh - search - parse -) - -for k in "${benches[@]}"; do - taskset -c 2,3 \ - chrt -f 50 \ - hyperfine "${hyperfineArgs[@]}" --export-json="bench/bench-${k}.json" --export-markdown="bench/bench-${k}.md" "${cases[$k]}" -done - -echo "Benchmarks summary (from ./bench/summarize.jq bench/bench-*.json)" -bench/summarize.jq bench/*.json diff --git a/bench/configuration.nix b/bench/configuration.nix deleted file mode 100644 index 54782a1d3..000000000 --- a/bench/configuration.nix +++ /dev/null @@ -1,325 +0,0 @@ -{ - config, - pkgs, - lib, - ... -}: - -{ - boot = { - initrd = { - availableKernelModules = [ - "xhci_pci" - "ahci" - ]; - kernelModules = [ "dm-snapshot" ]; - luks.devices = { - croot = { - device = "/dev/sdb"; - allowDiscards = true; - }; - }; - }; - kernelModules = [ "kvm-intel" ]; - kernelPackages = pkgs.linuxPackages_latest; - - loader = { - systemd-boot.enable = true; - efi.canTouchEfiVariables = true; - }; - }; - - hardware = { - enableRedistributableFirmware = true; - cpu.intel.updateMicrocode = true; - opengl.driSupport32Bit = true; - opengl.extraPackages = with pkgs; [ - vaapiIntel - intel-media-driver - intel-compute-runtime - ]; - }; - - fileSystems = { - "/" = { - device = "/dev/sda2"; - fsType = "xfs"; - options = [ "noatime" ]; - }; - - "/boot" = { - device = "/dev/sda1"; - fsType = "vfat"; - }; - - "/nas" = { - device = "nas:/"; - fsType = "nfs4"; - options = [ - "ro" - "x-systemd.automount" - ]; - }; - }; - swapDevices = [ { device = "/dev/swap"; } ]; - - networking = { - useDHCP = false; - hostName = "host"; - wireless = { - enable = true; - interfaces = [ "eth1" ]; - }; - interfaces = { - eth0.useDHCP = true; - eth1.useDHCP = true; - }; - wg-quick.interfaces = { - wg0 = { - address = [ "2001:db8::1" ]; - privateKeyFile = "/etc/secrets/wg0.key"; - peers = [ - { - publicKey = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="; - endpoint = "[2001:db8::2]:61021"; - allowedIPs = [ "2001::db8:1::/64" ]; - } - ]; - }; - }; - - firewall.allowedUDPPorts = [ 4567 ]; - }; - - i18n = { - defaultLocale = "en_US.UTF-8"; - inputMethod.enabled = "ibus"; - }; - - services = { - xserver = { - enable = true; - layout = "us"; - xkbVariant = "altgr-intl"; - xkbOptions = "ctrl:nocaps"; - libinput.enable = true; - wacom.enable = true; - videoDrivers = [ "modesetting" ]; - modules = [ pkgs.xf86_input_wacom ]; - - displayManager.sx.enable = true; - windowManager.i3.enable = true; - }; - - udev.extraHwdb = '' - # not like this mattered at all - # we're not running udev from here - ''; - - udev.extraRules = '' - # ACTION=="add", SUBSYSTEM=="input", ... - ''; - }; - - sound.enable = true; - hardware.pulseaudio = { - enable = true; - package = pkgs.pulseaudioFull; - daemon.config = { - lock-memory = "yes"; - realtime-scheduling = "yes"; - rlimit-rtprio = "-1"; - }; - }; - - programs = { - light.enable = true; - wireshark = { - enable = true; - package = pkgs.wireshark-qt; - }; - gnupg.agent = { - enable = true; - }; - }; - - fonts.packages = with pkgs; [ - font-awesome - noto-fonts - noto-fonts-cjk - noto-fonts-emoji - noto-fonts-extra - dejavu_fonts - powerline-fonts - source-code-pro - cantarell-fonts - ]; - - users = { - mutableUsers = false; - - users = { - user = { - isNormalUser = true; - group = "user"; - extraGroups = [ - "wheel" - "video" - "audio" - "dialout" - "users" - "kvm" - "wireshark" - ]; - password = "unimportant"; - }; - }; - - groups = { - user = { }; - }; - }; - - security = { - pam.loginLimits = [ - { - domain = "@audio"; - item = "memlock"; - type = "-"; - value = "unlimited"; - } - { - domain = "@audio"; - item = "rtprio"; - type = "-"; - value = "99"; - } - { - domain = "@audio"; - item = "nofile"; - type = "soft"; - value = "99999"; - } - { - domain = "@audio"; - item = "nofile"; - type = "hard"; - value = "99999"; - } - ]; - - sudo.extraRules = [ - { - users = [ "user" ]; - commands = [ - { - command = "${pkgs.linuxPackages.cpupower}/bin/cpupower"; - options = [ "NOPASSWD" ]; - } - ]; - } - ]; - }; - - environment.systemPackages = with pkgs; [ - a2jmidid - age - ardour - bemenu - blender - breeze-icons - breeze-qt5 - bubblewrap - calf - claws-mail - darktable - duperemove - emacs - feh - file - firefox - fluidsynth - gnome3.adwaita-icon-theme - gnuplot - graphviz - helm - i3status-rust - inkscape - jack2 - jq - krita - ldns - libqalculate - libreoffice - man-pages - nheko - nix-diff - nix-index - nix-output-monitor - open-music-kontrollers.patchmatrix - pamixer - pavucontrol - pciutils - picom - pwgen - redshift - ripgrep - rlwrap - silver-searcher - soundfont-fluid - whois - wol - xclip - xdot - xdotool - xorg.xkbcomp - yt-dlp - zathura - borgbackup - linuxPackages.cpupower - mtr - kitty - xf86_input_wacom - ]; - - environment.pathsToLink = [ "/share/soundfonts" ]; - - systemd.user.services.run-python = { - after = [ "network-online.target" ]; - script = '' - exec ${pkgs.python3}/bin/python - ''; - serviceConfig = { - CapabilityBoundingSet = [ "" ]; - KeyringMode = "private"; - LockPersonality = true; - MemoryDenyWriteExecute = true; - NoNewPrivileges = true; - PrivateDevices = true; - PrivateTmp = true; - PrivateUsers = true; - ProcSubset = "pid"; - ProtectClock = true; - ProtectControlGroups = true; - ProtectHome = true; - ProtectHostname = true; - ProtectKernelLogs = true; - ProtectKernelModules = true; - ProtectKernelTunables = true; - ProtectProc = "invisible"; - ProtectSystem = "strict"; - RestrictAddressFamilies = "AF_INET AF_INET6"; - RestrictNamespaces = true; - RestrictRealtime = true; - RestrictSUIDSGID = true; - SystemCallArchitectures = "native"; - SystemCallFilter = [ - "@system-service" - "~ @resources @privileged" - ]; - UMask = "077"; - }; - }; - - system.stateVersion = "23.11"; -} diff --git a/bench/summarize.jq b/bench/summarize.jq deleted file mode 100755 index 5d1449108..000000000 --- a/bench/summarize.jq +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env -S jq -Mrf - -def round3: - . * 1000 | round | . / 1000 - ; - -def stats($first): - [ - " mean: \(.mean | round3)s ± \(.stddev | round3)s", - " user: \(.user | round3)s | system: \(.system | round3)s", - " median: \(.median | round3)s", - " range: \(.min | round3)s ... \(.max | round3)s", - " relative: \(.mean / $first.mean | round3)" - ] - | join("\n") - ; - -def fmt($first): - "\(.command)\n" + (. | stats($first)) - ; - -[.results | .[0] as $first | .[] | fmt($first)] | join("\n\n") | (. + "\n\n---\n") diff --git a/boehmgc-coroutine-sp-fallback.diff b/boehmgc-coroutine-sp-fallback.diff deleted file mode 100644 index a53b7f1f5..000000000 --- a/boehmgc-coroutine-sp-fallback.diff +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/pthread_stop_world.c b/pthread_stop_world.c -index 2b45489..0e6d8ef 100644 ---- a/pthread_stop_world.c -+++ b/pthread_stop_world.c -@@ -776,6 +776,8 @@ STATIC void GC_restart_handler(int sig) - /* world is stopped. Should not fail if it isn't. */ - GC_INNER void GC_push_all_stacks(void) - { -+ size_t stack_limit; -+ pthread_attr_t pattr; - GC_bool found_me = FALSE; - size_t nthreads = 0; - int i; -@@ -868,6 +870,40 @@ GC_INNER void GC_push_all_stacks(void) - hi = p->altstack + p->altstack_size; - # endif - /* FIXME: Need to scan the normal stack too, but how ? */ -+ } else { -+ #ifdef HAVE_PTHREAD_ATTR_GET_NP -+ if (pthread_attr_init(&pattr) != 0) { -+ ABORT("GC_push_all_stacks: pthread_attr_init failed!"); -+ } -+ if (pthread_attr_get_np(p->id, &pattr) != 0) { -+ ABORT("GC_push_all_stacks: pthread_attr_get_np failed!"); -+ } -+ #else -+ if (pthread_getattr_np(p->id, &pattr)) { -+ ABORT("GC_push_all_stacks: pthread_getattr_np failed!"); -+ } -+ #endif -+ if (pthread_attr_getstacksize(&pattr, &stack_limit)) { -+ ABORT("GC_push_all_stacks: pthread_attr_getstacksize failed!"); -+ } -+ if (pthread_attr_destroy(&pattr)) { -+ ABORT("GC_push_all_stacks: pthread_attr_destroy failed!"); -+ } -+ // When a thread goes into a coroutine, we lose its original sp until -+ // control flow returns to the thread. -+ // While in the coroutine, the sp points outside the thread stack, -+ // so we can detect this and push the entire thread stack instead, -+ // as an approximation. -+ // We assume that the coroutine has similarly added its entire stack. -+ // This could be made accurate by cooperating with the application -+ // via new functions and/or callbacks. -+ #ifndef STACK_GROWS_UP -+ if (lo >= hi || lo < hi - stack_limit) { // sp outside stack -+ lo = hi - stack_limit; -+ } -+ #else -+ #error "STACK_GROWS_UP not supported in boost_coroutine2 (as of june 2021), so we don't support it in Nix." -+ #endif - } - # ifdef STACKPTR_CORRECTOR_AVAILABLE - if (GC_sp_corrector != 0) diff --git a/clang-tidy/.clang-format b/clang-tidy/.clang-format deleted file mode 100644 index cd8995543..000000000 --- a/clang-tidy/.clang-format +++ /dev/null @@ -1 +0,0 @@ -BasedOnStyle: llvm diff --git a/clang-tidy/.editorconfig b/clang-tidy/.editorconfig deleted file mode 100644 index 19ee09eec..000000000 --- a/clang-tidy/.editorconfig +++ /dev/null @@ -1,4 +0,0 @@ -# LLVM style code is 2-space indented -[*.{cc,hh}] -indent_style = space -indent_size = 2 diff --git a/clang-tidy/FixIncludes.cc b/clang-tidy/FixIncludes.cc deleted file mode 100644 index 602d3d355..000000000 --- a/clang-tidy/FixIncludes.cc +++ /dev/null @@ -1,90 +0,0 @@ -#include "FixIncludes.hh" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace nix::clang_tidy { - -using namespace clang; -using namespace clang::tidy; - -class FixIncludesCallbacks : public PPCallbacks { -public: - ClangTidyCheck &Check; - Preprocessor &PP; - FixIncludesCallbacks(ClangTidyCheck &Check, Preprocessor &PP) - : Check(Check), PP(PP) {} - -private: - bool Ignore = false; - virtual void LexedFileChanged(FileID FID, LexedFileChangeReason Reason, - SrcMgr::CharacteristicKind FileType, - FileID PrevFID, SourceLocation Loc) override; - - virtual void InclusionDirective(SourceLocation HashLoc, - const Token &IncludeTok, StringRef FileName, - bool IsAngled, CharSourceRange FilenameRange, - OptionalFileEntryRef File, - StringRef SearchPath, StringRef RelativePath, - const Module *Imported, - SrcMgr::CharacteristicKind FileType) override; -}; - -void FixIncludesCallbacks::LexedFileChanged(FileID, LexedFileChangeReason, - SrcMgr::CharacteristicKind FileType, - FileID, SourceLocation) { - Ignore = FileType != SrcMgr::C_User; -} - -void FixIncludesCallbacks::InclusionDirective( - SourceLocation, const Token &, StringRef FileName, bool IsAngled, - CharSourceRange FilenameRange, OptionalFileEntryRef File, StringRef, - StringRef, const Module *, SrcMgr::CharacteristicKind) { - if (Ignore) - return; - - // FIXME: this is kinda evil, but this is a one-time fixup - const std::vector SourceDirs = {"src/", "include/lix/"}; - - const auto Bracketize = [IsAngled](StringRef s) { - return IsAngled ? ("<" + s + ">").str() : ("\"" + s + "\"").str(); - }; - - for (const auto &SourceDir : SourceDirs) { - const bool IsAlreadyFixed = FileName.starts_with("lix/lib"); - if (File && File->getNameAsRequested().contains(SourceDir) && - !IsAlreadyFixed) { - StringRef Name = File->getNameAsRequested(); - auto Idx = Name.find(SourceDir); - assert(Idx != std::string::npos); - std::string Suffix = Name.drop_front(Idx + SourceDir.length()).str(); - - if (!Suffix.starts_with("lib")) { - llvm::dbgs() << "ignored: " << Suffix << "\n"; - return; - } - - Suffix = "lix/" + Suffix; - - auto Diag = Check.diag(FilenameRange.getBegin(), - "include needs to specify the source subdir"); - - Diag << FilenameRange - << FixItHint::CreateReplacement(FilenameRange, Bracketize(Suffix)); - } - } -} - -void FixIncludesCheck::registerPPCallbacks(const SourceManager &, - Preprocessor *PP, Preprocessor *) { - PP->addPPCallbacks(std::make_unique(*this, *PP)); -} - -}; // namespace nix::clang_tidy diff --git a/clang-tidy/FixIncludes.hh b/clang-tidy/FixIncludes.hh deleted file mode 100644 index ea890cd39..000000000 --- a/clang-tidy/FixIncludes.hh +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once -///@file - -#include -#include -#include - -namespace nix::clang_tidy { - -using namespace clang; -using namespace clang::tidy; - -class FixIncludesCheck : public ClangTidyCheck { - public: - FixIncludesCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} - - void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) override; -}; - -}; diff --git a/clang-tidy/HasPrefixSuffix.cc b/clang-tidy/HasPrefixSuffix.cc deleted file mode 100644 index e29b67e7c..000000000 --- a/clang-tidy/HasPrefixSuffix.cc +++ /dev/null @@ -1,80 +0,0 @@ -#include "HasPrefixSuffix.hh" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace nix::clang_tidy { -using namespace clang::ast_matchers; -using namespace clang; - -void HasPrefixSuffixCheck::registerMatchers(ast_matchers::MatchFinder *Finder) { - Finder->addMatcher( - traverse(clang::TK_AsIs, - callExpr(callee(functionDecl(anyOf(hasName("hasPrefix"), - hasName("hasSuffix"))) - .bind("callee-decl")), - optionally(hasArgument( - 0, cxxConstructExpr( - hasDeclaration(functionDecl(hasParameter( - 0, parmVarDecl(hasType( - asString("const char *"))))))) - .bind("implicit-cast")))) - .bind("call")), - this); -} - -void HasPrefixSuffixCheck::check( - const ast_matchers::MatchFinder::MatchResult &Result) { - - const auto *CalleeDecl = Result.Nodes.getNodeAs("callee-decl"); - auto FuncName = std::string(CalleeDecl->getName()); - std::string NewName; - if (FuncName == "hasPrefix") { - NewName = "starts_with"; - } else if (FuncName == "hasSuffix") { - NewName = "ends_with"; - } else { - llvm_unreachable("nix-has-prefix: invalid callee"); - } - - const auto *MatchedDecl = Result.Nodes.getNodeAs("call"); - const auto *ImplicitConvertArg = - Result.Nodes.getNodeAs("implicit-cast"); - - const auto *Lhs = MatchedDecl->getArg(0); - const auto *Rhs = MatchedDecl->getArg(1); - auto Diag = diag(MatchedDecl->getExprLoc(), FuncName + " is deprecated"); - - std::string Text = ""; - - // Form possible cast to string_view, or nothing. - if (ImplicitConvertArg) { - Text = "std::string_view("; - Text.append(tooling::getText(*Lhs, *Result.Context)); - Text.append(")."); - } else { - Text.append(*tooling::buildAccess(*Lhs, *Result.Context)); - } - - // Call .starts_with. - Text.append(NewName); - Text.push_back('('); - Text.append(tooling::getText(*Rhs, *Result.Context)); - Text.push_back(')'); - - Diag << FixItHint::CreateReplacement(MatchedDecl->getSourceRange(), Text); - - // for (const auto *arg : MatchedDecl->arguments()) { - // arg->dumpColor(); - // arg->getType().dump(); - // } -} -}; // namespace nix::clang_tidy diff --git a/clang-tidy/HasPrefixSuffix.hh b/clang-tidy/HasPrefixSuffix.hh deleted file mode 100644 index 8693b6767..000000000 --- a/clang-tidy/HasPrefixSuffix.hh +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -///@file -/// This is an example of a clang-tidy automated refactoring against the Nix -/// codebase. The refactoring has been completed in -/// https://gerrit.lix.systems/c/lix/+/565 so this code is around as -/// an example. - -#include -#include -#include - -namespace nix::clang_tidy { - -using namespace clang; -using namespace clang::tidy; -using namespace llvm; - -class HasPrefixSuffixCheck : public ClangTidyCheck { -public: - HasPrefixSuffixCheck(StringRef Name, ClangTidyContext *Context) - : ClangTidyCheck(Name, Context) {} - void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void check(const ast_matchers::MatchFinder::MatchResult &Result) override; -}; -}; // namespace nix::clang_tidy diff --git a/clang-tidy/LixClangTidyChecks.cc b/clang-tidy/LixClangTidyChecks.cc deleted file mode 100644 index b3503dd3a..000000000 --- a/clang-tidy/LixClangTidyChecks.cc +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include -#include "FixIncludes.hh" -#include "HasPrefixSuffix.hh" - -namespace nix::clang_tidy { -using namespace clang; -using namespace clang::tidy; - -class NixClangTidyChecks : public ClangTidyModule { - public: - void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { - CheckFactories.registerCheck("lix-hasprefixsuffix"); - CheckFactories.registerCheck("lix-fixincludes"); - } -}; - -static ClangTidyModuleRegistry::Add X("lix-module", "Adds lix specific checks"); -}; diff --git a/clang-tidy/README.md b/clang-tidy/README.md deleted file mode 100644 index c2d1cb258..000000000 --- a/clang-tidy/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# Clang tidy lints for Lix - -This is a skeleton of a clang-tidy lints library for Lix. - -Currently there is one check (which is already obsolete as it has served its -goal and is there as an example), `HasPrefixSuffixCheck`. - -## Running fixes/checks - -One file: - -``` -ninja -C build && clang-tidy --checks='-*,lix-*' --load=build/liblix-clang-tidy.so -p ../compile_commands.json -header-filter '\.\./src/.*\.h' --fix ../src/libcmd/installables.cc -``` - -Several files, in parallel: - -``` -ninja -C build && run-clang-tidy -checks='-*,lix-*' -load=build/liblix-clang-tidy.so -p .. -header-filter '\.\./src/.*\.h' -fix ../src | tee -a clang-tidy-result -``` - -## Resources - -* https://firefox-source-docs.mozilla.org/code-quality/static-analysis/writing-new/clang-query.html -* https://clang.llvm.org/docs/LibASTMatchersReference.html -* https://devblogs.microsoft.com/cppblog/exploring-clang-tooling-part-3-rewriting-code-with-clang-tidy/ - -## Developing new checks - -Put something like so in `myquery.txt`: - -``` -set traversal IgnoreUnlessSpelledInSource -# ^ Ignore implicit AST nodes. May need to use AsIs depending on how you are -# working. -set bind-root true -# ^ true unless you use any .bind("foo") commands -set print-matcher true -enable output dump -match callExpr(callee(functionDecl(hasName("hasPrefix"))), optionally(hasArgument( 0, cxxConstructExpr(hasDeclaration(functionDecl(hasParameter(0, parmVarDecl(hasType(asString("const char *"))).bind("meow2")))))))) -``` - -Then run, e.g. `clang-query --preload hasprefix.query -p compile_commands.json src/libcmd/installables.cc`. - -With this you can iterate a query before writing it in C++ and suffering from -C++. - -### Tips and tricks for the C++ - -There is a function `dump()` on many things that will dump to stderr. Also -`llvm::errs()` lets you print to stderr. - -When I wrote `HasPrefixSuffixCheck`, I was not really able to figure out how -the structured replacement system was supposed to work. In principle you can -describe the replacement with a nice DSL. Look up the Stencil system in Clang -for details. diff --git a/clang-tidy/meson.build b/clang-tidy/meson.build deleted file mode 100644 index c59164a72..000000000 --- a/clang-tidy/meson.build +++ /dev/null @@ -1,13 +0,0 @@ -project('lix-clang-tidy', ['cpp', 'c'], - version : '0.1', - default_options : ['warning_level=3', 'cpp_std=c++20']) - -llvm = dependency('Clang', version: '>= 14', modules: ['libclang']) -sources = files( - 'HasPrefixSuffix.cc', - 'LixClangTidyChecks.cc', - 'FixIncludes.cc', -) - -shared_module('lix-clang-tidy', sources, - dependencies: llvm) diff --git a/contrib/stack-collapse.py b/contrib/stack-collapse.py deleted file mode 100755 index f5602c95c..000000000 --- a/contrib/stack-collapse.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i python3 -p python3 --pure - -# To be used with `--trace-function-calls` and `flamegraph.pl`. -# -# For example: -# -# nix-instantiate --trace-function-calls '' -A hello 2> nix-function-calls.trace -# ./contrib/stack-collapse.py nix-function-calls.trace > nix-function-calls.folded -# nix-shell -p flamegraph --run "flamegraph.pl nix-function-calls.folded > nix-function-calls.svg" - -import sys -from pprint import pprint -import fileinput - -stack = [] -timestack = [] - -for line in fileinput.input(): - components = line.strip().split(" ", 2) - if components[0] != "function-trace": - continue - - direction = components[1] - components = components[2].rsplit(" ", 2) - - loc = components[0] - _at = components[1] - time = int(components[2]) - - if direction == "entered": - stack.append(loc) - timestack.append(time) - elif direction == "exited": - dur = time - timestack.pop() - vst = ";".join(stack) - print(f"{vst} {dur}") - stack.pop() diff --git a/default.nix b/default.nix deleted file mode 100644 index 6466507b7..000000000 --- a/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -(import ( - let - lock = builtins.fromJSON (builtins.readFile ./flake.lock); - in - fetchTarball { - url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; - sha256 = lock.nodes.flake-compat.locked.narHash; - } -) { src = ./.; }).defaultNix diff --git a/doc/internal-api/.gitignore b/doc/internal-api/.gitignore deleted file mode 100644 index dab28b6b0..000000000 --- a/doc/internal-api/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/doxygen.cfg -/html -/latex diff --git a/doc/internal-api/doxygen.cfg.in b/doc/internal-api/doxygen.cfg.in deleted file mode 100644 index 55bccebd7..000000000 --- a/doc/internal-api/doxygen.cfg.in +++ /dev/null @@ -1,99 +0,0 @@ -# Doxyfile 1.9.5 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = "Nix" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = @PACKAGE_VERSION@ - -OUTPUT_DIRECTORY = @docdir@ - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "Nix, the purely functional package manager; unstable internal interfaces" - -# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. -# The default value is: YES. - -GENERATE_LATEX = NO - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -# FIXME Make this list more maintainable somehow. We could maybe generate this -# in the Makefile, but we would need to change how `.in` files are preprocessed -# so they can expand variables despite configure variables. - -INPUT = \ - src/libcmd \ - src/libexpr \ - src/libexpr/flake \ - tests/unit/libexpr \ - tests/unit/libexpr/value \ - tests/unit/libexpr/test \ - tests/unit/libexpr/test/value \ - src/libexpr/value \ - src/libfetchers \ - src/libmain \ - src/libstore \ - src/libstore/build \ - src/libstore/builtins \ - tests/unit/libstore \ - tests/unit/libstore/test \ - src/libutil \ - tests/unit/libutil \ - tests/unit/libutil/test \ - src/nix \ - src/nix-env \ - src/nix-store - -# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names -# in the source code. If set to NO, only conditional compilation will be -# performed. Macro expansion can be done in a controlled way by setting -# EXPAND_ONLY_PREDEF to YES. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -MACRO_EXPANSION = YES - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then -# the macro expansion is limited to the macros specified with the PREDEFINED and -# EXPAND_AS_DEFINED tags. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_ONLY_PREDEF = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by the -# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of -# RECURSIVE has no effect here. -# This tag requires that the tag SEARCH_INCLUDES is set to YES. - -INCLUDE_PATH = @RAPIDCHECK_HEADERS@ - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this -# tag can be used to specify a list of macro names that should be expanded. The -# macro definition that is found in the sources will be used. Use the PREDEFINED -# tag if you want to use a different macro definition that overrules the -# definition found in the source code. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_AS_DEFINED = \ - DECLARE_COMMON_SERIALISER \ - DECLARE_WORKER_SERIALISER \ - DECLARE_SERVE_SERIALISER \ - LENGTH_PREFIXED_PROTO_HELPER diff --git a/doc/internal-api/meson.build b/doc/internal-api/meson.build deleted file mode 100644 index faa30f194..000000000 --- a/doc/internal-api/meson.build +++ /dev/null @@ -1,34 +0,0 @@ -doxygen_cfg = configure_file( - input : 'doxygen.cfg.in', - output : 'doxygen.cfg', - configuration : { - 'PACKAGE_VERSION': meson.project_version(), - 'RAPIDCHECK_HEADERS': rapidcheck_meson.get_variable('includedir'), - 'docdir' : meson.current_build_dir(), - }, -) - -internal_api_docs = custom_target( - 'internal-api-docs', - command : [ - bash, - # Meson can you please just give us a `workdir` argument to custom targets... - '-c', - # We have to prefix the doxygen_cfg path with the project build root - # because of the cd in front. - 'cd @0@ && @1@ @2@/@INPUT0@'.format( - meson.project_source_root(), - doxygen.full_path(), - meson.project_build_root(), - ), - ], - input : [ - doxygen_cfg, - ], - output : 'html', - install : true, - install_dir : datadir / 'doc/nix/internal-api', - build_always_stale : true, -) - -alias_target('internal-api-html', internal_api_docs) diff --git a/doc/manual/anchors.jq b/doc/manual/anchors.jq deleted file mode 100644 index 72309779c..000000000 --- a/doc/manual/anchors.jq +++ /dev/null @@ -1,31 +0,0 @@ -"\\[\\]\\{#(?[^\\}]+?)\\}" as $empty_anchor_regex | -"\\[(?[^\\]]+?)\\]\\{#(?[^\\}]+?)\\}" as $anchor_regex | - - -def transform_anchors_html: - . | gsub($empty_anchor_regex; "") - | gsub($anchor_regex; "" + .text + ""); - - -def transform_anchors_strip: - . | gsub($empty_anchor_regex; "") - | gsub($anchor_regex; .text); - - -def map_contents_recursively(transformer): - . + { - Chapter: (.Chapter + { - content: .Chapter.content | transformer, - sub_items: .Chapter.sub_items | map(map_contents_recursively(transformer)), - }), - }; - - -def process_command: - .[0] as $context | - .[1] as $body | - $body + { - sections: $body.sections | map(map_contents_recursively(if $context.renderer == "html" then transform_anchors_html else transform_anchors_strip end)), - }; - -process_command diff --git a/doc/manual/book.toml b/doc/manual/book.toml deleted file mode 100644 index 27c6c4637..000000000 --- a/doc/manual/book.toml +++ /dev/null @@ -1,42 +0,0 @@ -[book] -title = "Lix Reference Manual" - -[build] -create-missing = false - -[output.html] -additional-css = ["custom.css"] -additional-js = ["redirects.js"] -# Using our GitHub mirror enables easier typo fixes since there is no easy way -# to just submit a Gerrit CL by the web for trivial stuff. -edit-url-template = "https://github.com/lix-project/lix/tree/main/doc/manual/{path}" -git-repository-url = "https://git.lix.systems/lix-project/lix" -# Folding by default would prevent things like "Ctrl+F for nix-env" from working -# trivially, but the user should be able to fold if they want to. -fold.enable = true -fold.level = 30 - -# Handles replacing @docroot@ with a path to ./src relative to that markdown file, -# {{#include handlebars}}, and the @generated@ syntax used within these. it mostly -# but not entirely replaces the links preprocessor (which we cannot simply use due -# to @generated@ files living in a different directory to make meson happy). we do -# not want to disable the links preprocessor entirely though because that requires -# disabling *all* built-in preprocessors and selectively reenabling those we want. -[preprocessor.substitute] -command = "python3 doc/manual/substitute.py" -before = ["anchors", "links"] - -[preprocessor.anchors] -renderers = ["html"] -command = "jq --from-file doc/manual/anchors.jq" - -[output.markdown] - -[output.linkcheck] -# no Internet during the build (in the sandbox) -follow-web-links = false - -# mdbook-linkcheck does not understand [foo]{#bar} style links, resulting in -# excessive "Potential incomplete link" warnings. No other kind of warning was -# produced at the time of writing. -warning-policy = "ignore" diff --git a/doc/manual/change-authors.yml b/doc/manual/change-authors.yml deleted file mode 100644 index c56f588ca..000000000 --- a/doc/manual/change-authors.yml +++ /dev/null @@ -1,115 +0,0 @@ -# This file is a mapping of metadata for change authors, sort of like -# maintainer-list.nix in nixpkgs. -# -# It's used for crediting people accurately in release notes. The release notes -# script will link to forgejo, then to GitHub if forgejo is not present. -9999years: - display_name: wiggles - forgejo: rbt - github: 9999years - -Artturin: - github: Artturin - -DavHau: - github: DavHau - -Kha: - github: Kha - -Lunaphied: - forgejo: Lunaphied - github: Lunaphied - -Qyriad: - forgejo: Qyriad - github: Qyriad - -SharzyL: - github: SharzyL - -alois31: - forgejo: alois31 - github: alois31 - -artemist: - display_name: Artemis Tosini - forgejo: artemist - -cole-h: - display_name: Cole Helbling - github: cole-h - -edolstra: - display_name: Eelco Dolstra - github: edolstra - -ericson: - display_name: John Ericson - github: ericson2314 - -horrors: - display_name: eldritch horrors - forgejo: pennae - github: pennae - -iFreilicht: - github: iFreilicht - -jade: - forgejo: jade - github: lf- - -lovesegfault: - github: lovesegfault - -ma27: - forgejo: ma27 - github: ma27 - -matthewbauer: - github: matthewbauer - -midnightveil: - display_name: julia - forgejo: midnightveil - github: midnightveil - -ncfavier: - github: ncfavier - -puck: - display_name: puck - forgejo: puck - github: puckipedia - -r-vdp: - github: r-vdp - -raito: - display_name: Raito Bezarius - forgejo: raito - github: RaitoBezarius - -roberth: - display_name: Robert Hensing - github: roberth - -thufschmitt: - display_name: Théophane Hufschmitt - github: thufschmitt - -tomberek: - display_name: Tom Bereknyei - github: tomberek - -valentin: - display_name: Valentin Gagarin - github: fricklerhandwerk - -winter: - forgejo: winter - github: winterqt - -yshui: - github: yshui diff --git a/doc/manual/custom.css b/doc/manual/custom.css deleted file mode 100644 index b90f5423f..000000000 --- a/doc/manual/custom.css +++ /dev/null @@ -1,11 +0,0 @@ -h1:not(:first-of-type) { - margin-top: 1.3em; -} - -h2 { - margin-top: 1em; -} - -.hljs-meta { - user-select: none; -} diff --git a/doc/manual/generate-builtin-constants.nix b/doc/manual/generate-builtin-constants.nix deleted file mode 100644 index 23ec2cb55..000000000 --- a/doc/manual/generate-builtin-constants.nix +++ /dev/null @@ -1,37 +0,0 @@ -let - inherit (builtins) concatStringsSep attrValues mapAttrs; - inherit (import ./utils.nix) optionalString squash; -in - -builtinsInfo: -let - showBuiltin = - name: - { - doc, - type, - impure-only, - }: - let - type' = optionalString (type != null) " (${type})"; - - impureNotice = optionalString impure-only '' - > **Note** - > - > Not available in [pure evaluation mode](@docroot@/command-ref/conf-file.md#conf-pure-eval). - ''; - in - squash '' -
- ${name}${type'} -
-
- - ${doc} - - ${impureNotice} - -
- ''; -in -concatStringsSep "\n" (attrValues (mapAttrs showBuiltin builtinsInfo)) diff --git a/doc/manual/generate-builtins.nix b/doc/manual/generate-builtins.nix deleted file mode 100644 index 60cba266b..000000000 --- a/doc/manual/generate-builtins.nix +++ /dev/null @@ -1,35 +0,0 @@ -let - inherit (builtins) concatStringsSep attrValues mapAttrs; - inherit (import ./utils.nix) optionalString squash; -in - -builtinsInfo: -let - showBuiltin = - name: - { - doc, - args, - arity, - experimental-feature, - }: - let - experimentalNotice = optionalString (experimental-feature != null) '' - This function is only available if the [${experimental-feature}](@docroot@/contributing/experimental-features.md#xp-feature-${experimental-feature}) experimental feature is enabled. - ''; - in - squash '' -
- ${name} ${listArgs args} -
-
- - ${doc} - - ${experimentalNotice} - -
- ''; - listArgs = args: concatStringsSep " " (map (s: "${s}") args); -in -concatStringsSep "\n" (attrValues (mapAttrs showBuiltin builtinsInfo)) diff --git a/doc/manual/generate-deps.py b/doc/manual/generate-deps.py deleted file mode 100755 index 297bd3939..000000000 --- a/doc/manual/generate-deps.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python3 - -import glob -import sys - -# meson expects makefile-style dependency declarations, i.e. -# -# target: dependency... -# -# meson seems to pass depfiles straight on to ninja even though -# it also parses the file itself (or at least has code to do so -# in its tree), so we must live by ninja's rules: only slashes, -# spaces and octothorpes can be escaped, anything else is taken -# literally. since the rules for these aren't even the same for -# all three we will just fail when we encounter any of them (if -# asserts are off for some reason the depfile will likely point -# to nonexistant paths, making everything phony and thus fine.) -for path in glob.glob(sys.argv[1] + '/**', recursive=True): - assert '\\' not in path - assert ' ' not in path - assert '#' not in path - print("ignored:", path) diff --git a/doc/manual/generate-manpage.nix b/doc/manual/generate-manpage.nix deleted file mode 100644 index 5c6a2a48a..000000000 --- a/doc/manual/generate-manpage.nix +++ /dev/null @@ -1,224 +0,0 @@ -let - inherit (builtins) - attrNames - attrValues - fromJSON - listToAttrs - mapAttrs - concatStringsSep - concatMap - length - lessThan - replaceStrings - sort - ; - inherit (import ./utils.nix) - concatStrings - optionalString - filterAttrs - trim - squash - unique - showSettings - ; -in - -inlineHTML: commandDump: - -let - - commandInfo = fromJSON commandDump; - - showCommand = - { - command, - details, - filename, - toplevel, - }: - let - - result = '' - > **Warning** \ - > This program is - > [**experimental**](@docroot@/contributing/experimental-features.md#xp-feature-nix-command) - > and its interface is subject to change. - - # Name - - `${command}` - ${details.description} - - # Synopsis - - ${showSynopsis command details.args} - - ${maybeSubcommands} - - ${maybeStoreDocs} - - ${maybeOptions} - ''; - - showSynopsis = - command: args: - let - showArgument = arg: "*${arg.label}*" + optionalString (!arg ? arity) "..."; - arguments = concatStringsSep " " (map showArgument args); - in - '' - `${command}` [*option*...] ${arguments} - ''; - - maybeSubcommands = optionalString (details ? commands && details.commands != { }) '' - where *subcommand* is one of the following: - - ${subcommands} - ''; - - subcommands = if length categories > 1 then listCategories else listSubcommands details.commands; - - categories = sort (x: y: x.id < y.id) ( - unique (map (cmd: cmd.category) (attrValues details.commands)) - ); - - listCategories = concatStrings (map showCategory categories); - - showCategory = cat: '' - **${toString cat.description}:** - - ${listSubcommands (filterAttrs (n: v: v.category == cat) details.commands)} - ''; - - listSubcommands = cmds: concatStrings (attrValues (mapAttrs showSubcommand cmds)); - - showSubcommand = name: subcmd: '' - * [`${command} ${name}`](./${appendName filename name}.md) - ${subcmd.description} - ''; - - # TODO: move this confusing special case out of here when implementing #8496 - maybeStoreDocs = optionalString (details ? doc) ( - replaceStrings [ "@stores@" ] [ storeDocs ] details.doc - ); - - maybeOptions = optionalString (details.flags != { }) '' - # Options - - ${showOptions details.flags toplevel.flags} - - > **Note** - > - > See [`man nix.conf`](@docroot@/command-ref/conf-file.md#command-line-flags) for overriding configuration settings with command line flags. - ''; - - showOptions = - options: commonOptions: - let - allOptions = options // commonOptions; - showCategory = cat: '' - ${optionalString (cat != "") "**${cat}:**"} - - ${listOptions (filterAttrs (n: v: v.category == cat) allOptions)} - ''; - listOptions = opts: concatStringsSep "\n" (attrValues (mapAttrs showOption opts)); - showOption = - name: option: - let - result = trim '' - - ${item} - ${option.description} - ''; - item = - if inlineHTML then - ''[`--${name}`](#opt-${name}) ${shortName} ${labels}'' - else - "`--${name}` ${shortName} ${labels}"; - shortName = optionalString (option ? shortName) ("/ `-${option.shortName}`"); - labels = optionalString (option ? labels) (concatStringsSep " " (map (s: "*${s}*") option.labels)); - in - result; - categories = sort lessThan (unique (map (cmd: cmd.category) (attrValues allOptions))); - in - concatStrings (map showCategory categories); - in - squash result; - - appendName = filename: name: (if filename == "nix" then "nix3" else filename) + "-" + name; - - processCommand = - { - command, - details, - filename, - toplevel, - }: - let - cmd = { - inherit command; - name = filename + ".md"; - value = showCommand { - inherit - command - details - filename - toplevel - ; - }; - }; - subcommand = - subCmd: - processCommand { - command = command + " " + subCmd; - details = details.commands.${subCmd}; - filename = appendName filename subCmd; - inherit toplevel; - }; - in - [ cmd ] ++ concatMap subcommand (attrNames details.commands or { }); - - manpages = processCommand { - command = "nix"; - details = commandInfo.args; - filename = "nix"; - toplevel = commandInfo.args; - }; - - storeDocs = - let - showStore = - name: - { - settings, - doc, - experimentalFeature, - }: - let - experimentalFeatureNote = optionalString (experimentalFeature != null) '' - > **Warning** - > This store is part of an - > [experimental feature](@docroot@/contributing/experimental-features.md). - - To use this store, you need to make sure the corresponding experimental feature, - [`${experimentalFeature}`](@docroot@/contributing/experimental-features.md#xp-feature-${experimentalFeature}), - is enabled. - For example, include the following in [`nix.conf`](@docroot@/command-ref/conf-file.md): - - ``` - extra-experimental-features = ${experimentalFeature} - ``` - ''; - in - '' - ## ${name} - - ${doc} - - ${experimentalFeatureNote} - - **Settings**: - - ${showSettings { inherit inlineHTML; } settings} - ''; - in - concatStrings (attrValues (mapAttrs showStore commandInfo.stores)); -in -listToAttrs manpages diff --git a/doc/manual/generate-xp-features-shortlist.nix b/doc/manual/generate-xp-features-shortlist.nix deleted file mode 100644 index ea8bf8d49..000000000 --- a/doc/manual/generate-xp-features-shortlist.nix +++ /dev/null @@ -1,9 +0,0 @@ -with builtins; -with import ./utils.nix; - -let - showExperimentalFeature = name: doc: '' - - [`${name}`](@docroot@/contributing/experimental-features.md#xp-feature-${name}) - ''; -in -xps: indent " " (concatStrings (attrValues (mapAttrs showExperimentalFeature xps))) diff --git a/doc/manual/generate-xp-features.nix b/doc/manual/generate-xp-features.nix deleted file mode 100644 index c56ddeea1..000000000 --- a/doc/manual/generate-xp-features.nix +++ /dev/null @@ -1,13 +0,0 @@ -with builtins; -with import ./utils.nix; - -let - showExperimentalFeature = - name: doc: - squash '' - ## [`${name}`]{#xp-feature-${name}} - - ${doc} - ''; -in -xps: (concatStringsSep "\n" (attrValues (mapAttrs showExperimentalFeature xps))) diff --git a/doc/manual/json-to-tree.py b/doc/manual/json-to-tree.py deleted file mode 100755 index 27c8e417c..000000000 --- a/doc/manual/json-to-tree.py +++ /dev/null @@ -1,61 +0,0 @@ -#!/usr/bin/env python3 - -""" -This script is a helper for this project's Meson buildsystem, to replace its -usage of `nix eval --write-to`. Writing a JSON object as a nested directory -tree is more generic, easier to maintain, and far, far less cursed. Nix -has 'good' support for JSON output. Let's just use it. -""" - -import argparse -from pathlib import Path -import json -import sys - -name = 'json-to-tree.py' - -def log(*args, **kwargs): - kwargs['file'] = sys.stderr - return print(f'{name}:', *args, **kwargs) - -def write_dict_to_directory(current_directory: Path, data: dict, files_written=0): - current_directory.mkdir(parents=True, exist_ok=True) - for key, value in data.items(): - nested_path = current_directory / key - match value: - case dict(nested_data): - files_written += write_dict_to_directory(nested_path, nested_data) - - case str(content): - nested_path.write_text(content) - files_written += 1 - - case rest: - assert False, \ - f'should have been called on a dict or string, not {type(rest)=}\n\t{rest=}' - - return files_written - -def main(): - parser = argparse.ArgumentParser(name) - parser.add_argument('-i', '--input', type=argparse.FileType('r'), default='-', - help='The JSON input to operate on and output as a directory tree', - ) - parser.add_argument('-o', '--output', type=Path, required=True, - help='The place to put the directory tree', - ) - args = parser.parse_args() - - json_string = args.input.read() - - try: - data = json.loads(json_string) - except json.JSONDecodeError: - log(f'could not decode JSON from input: {json_string}') - raise - - - files_written = write_dict_to_directory(args.output, data) - log(f'wrote {files_written} files') - -sys.exit(main()) diff --git a/doc/manual/meson.build b/doc/manual/meson.build deleted file mode 100644 index 673c86149..000000000 --- a/doc/manual/meson.build +++ /dev/null @@ -1,353 +0,0 @@ -nix_env_for_docs = { - 'HOME': '/dummy', - 'NIX_CONF_DIR': '/dummy', - 'NIX_SSL_CERT_FILE': '/dummy/no-ca-bundle.crt', - 'NIX_STATE_DIR': '/dummy', - 'NIX_CONFIG': 'cores = 0', -} - -nix_for_docs = [ nix, '--experimental-features', 'nix-command' ] -nix_eval_for_docs_common = nix_for_docs + [ - 'eval', - '-I', 'nix/corepkgs=corepkgs', - '--store', 'dummy://', - '--impure', -] -nix_eval_for_docs = nix_eval_for_docs_common + '--raw' - -conf_file_json = custom_target( - command : nix_for_docs + [ 'show-config', '--json' ], - capture : true, - output : 'conf-file.json', - env : nix_env_for_docs, -) - -nix_conf_file_md_body = custom_target( - command : nix_eval_for_docs + [ - '--expr', - '(import @INPUT0@).showSettings { inlineHTML = true; } (builtins.fromJSON (builtins.readFile @INPUT1@))', - ], - capture : true, - input : [ - 'utils.nix', - conf_file_json, - ], - output : 'conf-file.md.body', - env : nix_env_for_docs, -) - -nix_conf_file_md = custom_target( - command : [ 'cat', '@INPUT@' ], - capture : true, - input : [ - 'src/command-ref/conf-file.md', - nix_conf_file_md_body, - ], - output : 'conf-file.md', -) - -nix_exp_features_json = custom_target( - command : [ nix, '__dump-xp-features' ], - capture : true, - output : 'xp-features.json', -) - -language_json = custom_target( - command: [nix, '__dump-language'], - output : 'language.json', - capture : true, - env : nix_env_for_docs, -) - -nix3_cli_json = custom_target( - command : [ nix, '__dump-cli' ], - capture : true, - output : 'nix.json', - env : nix_env_for_docs, -) - -generate_manual_deps = files( - 'generate-deps.py', -) - -# Generates builtins.md and builtin-constants.md. -subdir('src/language') -# Generates new-cli pages, experimental-features-shortlist.md, and conf-file.md. -subdir('src/command-ref') -# Generates experimental-feature-descriptions.md. -subdir('src/contributing') -# Generates rl-next-generated.md. -subdir('src/release-notes') - -manual = custom_target( - 'manual', - command : [ - bash, - '-euo', 'pipefail', - '-c', - ''' - @0@ @INPUT0@ @CURRENT_SOURCE_DIR@ > @DEPFILE@ - cd @SOURCE_ROOT@ - @1@ build doc/manual -d @2@ | { grep -Fv "because fragment resolution isn't implemented" || :; } - rm -rf @2@/manual - mv @2@/html @2@/manual - find @2@/manual -iname meson.build -delete - '''.format( - python.full_path(), - mdbook.full_path(), - meson.current_build_dir(), - ), - ], - input : [ - generate_manual_deps, - 'book.toml', - 'anchors.jq', - 'custom.css', - nix3_cli_files, - experimental_features_shortlist_md, - experimental_feature_descriptions_md, - conf_file_md, - builtins_md, - builtin_constants_md, - rl_next_generated, - nix, - ], - output : [ - 'manual', - 'markdown', - ], - depfile : 'manual.d', - env : { - 'RUST_LOG': 'info', - 'MDBOOK_SUBSTITUTE_SEARCH': meson.current_build_dir() / 'src', - }, -) -manual_html = manual[0] -manual_md = manual[1] - -install_subdir( - manual_html.full_path(), - install_dir : datadir / 'doc/nix', -) - -nix_nested_manpages = [ - [ 'nix-env', - [ - 'delete-generations', - 'install', - 'list-generations', - 'query', - 'rollback', - 'set-flag', - 'set', - 'switch-generation', - 'switch-profile', - 'uninstall', - 'upgrade', - ], - ], - [ 'nix-store', - [ - 'add-fixed', - 'add', - 'delete', - 'dump-db', - 'dump', - 'export', - 'gc', - 'generate-binary-cache-key', - 'import', - 'load-db', - 'optimise', - 'print-env', - 'query', - 'read-log', - 'realise', - 'repair-path', - 'restore', - 'serve', - 'verify', - 'verify-path', - ], - ], -] - -foreach command : nix_nested_manpages - foreach page : command[1] - title = command[0] + ' --' + page - section = '1' - custom_target( - command : [ - './render-manpage.sh', - '--out-no-smarty', - title, - section, - '@INPUT0@/command-ref' / command[0] / (page + '.md'), - '@OUTPUT0@', - ], - input : [ - manual_md, - nix, - ], - output : command[0] + '-' + page + '.1', - install : true, - install_dir : mandir / 'man1', - ) - endforeach -endforeach - -nix3_manpages = [ - 'nix3-build', - 'nix3-bundle', - 'nix3-config', - 'nix3-config-show', - 'nix3-copy', - 'nix3-daemon', - 'nix3-derivation-add', - 'nix3-derivation', - 'nix3-derivation-show', - 'nix3-develop', - 'nix3-doctor', - 'nix3-edit', - 'nix3-eval', - 'nix3-flake-archive', - 'nix3-flake-check', - 'nix3-flake-clone', - 'nix3-flake-info', - 'nix3-flake-init', - 'nix3-flake-lock', - 'nix3-flake', - 'nix3-flake-metadata', - 'nix3-flake-new', - 'nix3-flake-prefetch', - 'nix3-flake-show', - 'nix3-flake-update', - 'nix3-fmt', - 'nix3-hash-file', - 'nix3-hash', - 'nix3-hash-path', - 'nix3-hash-to-base16', - 'nix3-hash-to-base32', - 'nix3-hash-to-base64', - 'nix3-hash-to-sri', - 'nix3-help', - 'nix3-help-stores', - 'nix3-key-convert-secret-to-public', - 'nix3-key-generate-secret', - 'nix3-key', - 'nix3-log', - 'nix3-nar-cat', - 'nix3-nar-dump-path', - 'nix3-nar-ls', - 'nix3-nar', - 'nix3-path-info', - 'nix3-print-dev-env', - 'nix3-profile-diff-closures', - 'nix3-profile-history', - 'nix3-profile-install', - 'nix3-profile-list', - 'nix3-profile', - 'nix3-profile-remove', - 'nix3-profile-rollback', - 'nix3-profile-upgrade', - 'nix3-profile-wipe-history', - 'nix3-realisation-info', - 'nix3-realisation', - 'nix3-registry-add', - 'nix3-registry-list', - 'nix3-registry', - 'nix3-registry-pin', - 'nix3-registry-remove', - 'nix3-repl', - 'nix3-run', - 'nix3-search', - 'nix3-shell', - 'nix3-store-add-file', - 'nix3-store-add-path', - 'nix3-store-cat', - 'nix3-store-copy-log', - 'nix3-store-copy-sigs', - 'nix3-store-delete', - 'nix3-store-diff-closures', - 'nix3-store-dump-path', - 'nix3-store-gc', - 'nix3-store-ls', - 'nix3-store-make-content-addressed', - 'nix3-store', - 'nix3-store-optimise', - 'nix3-store-path-from-hash-part', - 'nix3-store-ping', - 'nix3-store-prefetch-file', - 'nix3-store-repair', - 'nix3-store-sign', - 'nix3-store-verify', - 'nix3-upgrade-nix', - 'nix3-why-depends', - 'nix', -] - -foreach page : nix3_manpages - section = '1' - custom_target( - command : [ - bash, - '@INPUT0@', - page, - section, - '@INPUT1@/command-ref/new-cli/@0@.md'.format(page), - '@OUTPUT@', - ], - input : [ - 'render-manpage.sh', - manual_md, - nix, - ], - output : page + '.1', - install : true, - install_dir : mandir / 'man1', - ) -endforeach - -nix_manpages = [ - [ 'nix-env', 1 ], - [ 'nix-store', 1 ], - [ 'nix-build', 1 ], - [ 'nix-shell', 1 ], - [ 'nix-instantiate', 1 ], - [ 'nix-collect-garbage', 1 ], - [ 'nix-prefetch-url', 1 ], - [ 'nix-channel', 1 ], - [ 'nix-hash', 1 ], - [ 'nix-copy-closure', 1 ], - [ 'nix.conf', 5, 'conf-file.md' ], - [ 'nix-daemon', 8 ], - [ 'nix-profiles', 5, 'files/profiles.md' ], -] - -foreach entry : nix_manpages - title = entry[0] - # nix.conf.5 and nix-profiles.5 are based off of conf-file.md and files/profiles.md, - # rather than a stem identical to its mdbook source. - # Therefore we use an optional third element of this array to override the name pattern - md_file = entry.get(2, title + '.md') - section = entry[1].to_string() - custom_target( - command : [ - bash, - '@INPUT0@', - title, - section, - '@INPUT1@/command-ref/@0@'.format(md_file), - '@OUTPUT@', - ], - input : [ - 'render-manpage.sh', - manual_md, - entry.get(3, []), - nix, - ], - output : '@0@.@1@'.format(entry[0], entry[1]), - install : true, - install_dir : mandir / 'man@0@'.format(entry[1]), - ) -endforeach diff --git a/doc/manual/process-includes.sh b/doc/manual/process-includes.sh deleted file mode 100755 index 51ac67acb..000000000 --- a/doc/manual/process-includes.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh - -set -euo pipefail - -infile="$1" -outfile="$2" -shift 2 - -# set a search path for includes. the old makefile-based system splorked -# everything into the source tree and was thus able to not have a search -# path, but the meson system generates intermediate files into dedicated -# directories separate from the source. we still retain the implicit old -# behavior for now as the base search path, once meson is the default we -# can revisit this and remove the implicit search path entry. it's fine. -set -- "$(dirname "$infile")" "$@" - -# re-implement mdBook's include directive to make it usable for terminal output and for proper @docroot@ substitution -(grep '{{#include' "$infile" || true) | while read -r line; do - found=false - include="$(printf "$line" | sed 's/{{#include \(.*\)}}/\1/')" - for path in "$@"; do - filename="$path/$include" - if [ -e "$filename" ]; then - found=true - matchline="$(printf "$line" | sed 's|/|\\/|g')" - sed -i "/$matchline/r $filename" "$outfile" - sed -i "s/$matchline//" "$outfile" - break - fi - done - $found || ( echo "#include-d file '$filename' does not exist." >&2; exit 1; ) -done diff --git a/doc/manual/quote-literals.xsl b/doc/manual/quote-literals.xsl deleted file mode 100644 index 5002643db..000000000 --- a/doc/manual/quote-literals.xsl +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - `' - - - - - - - - - -
- - - -
-
- - - - - - - - - - - - - -
diff --git a/doc/manual/rclone.conf b/doc/manual/rclone.conf deleted file mode 100644 index c37c12638..000000000 --- a/doc/manual/rclone.conf +++ /dev/null @@ -1,8 +0,0 @@ -[lix-docs] -type = s3 -provider = Other -env_auth = true -endpoint = https://s3.lix.systems -location_constraint = garage -region = garage -acl = private diff --git a/doc/manual/redirects.js b/doc/manual/redirects.js deleted file mode 100644 index f270d31a4..000000000 --- a/doc/manual/redirects.js +++ /dev/null @@ -1,440 +0,0 @@ -// redirect rules for URL fragments (client-side) to prevent link rot. -// this must be done on the client side, as web servers do not see the fragment part of the URL. -// it will only work with JavaScript enabled in the browser, but this is the best we can do here. -// see ./_redirects for path redirects (client-side) - -// redirects are declared as follows: -// each entry has as its key a path matching the requested URL path, relative to the mdBook document root. -// -// IMPORTANT: it must specify the full path with file name and suffix -// -// each entry is itself a set of key-value pairs, where -// - keys are anchors on the matched path. -// - values are redirection targets relative to the current path. - -const redirects = { - "index.html": { - "part-advanced-topics": "advanced-topics/advanced-topics.html", - "chap-tuning-cores-and-jobs": "advanced-topics/cores-vs-jobs.html", - "chap-diff-hook": "advanced-topics/diff-hook.html", - "check-dirs-are-unregistered": "advanced-topics/diff-hook.html#check-dirs-are-unregistered", - "chap-distributed-builds": "advanced-topics/distributed-builds.html", - "chap-post-build-hook": "advanced-topics/post-build-hook.html", - "chap-post-build-hook-caveats": "advanced-topics/post-build-hook.html#implementation-caveats", - "chap-writing-nix-expressions": "language/index.html", - "part-command-ref": "command-ref/command-ref.html", - "conf-allow-import-from-derivation": "command-ref/conf-file.html#conf-allow-import-from-derivation", - "conf-allowed-uris": "command-ref/conf-file.html#conf-allowed-uris", - "conf-allowed-users": "command-ref/conf-file.html#conf-allowed-users", - "conf-auto-optimise-store": "command-ref/conf-file.html#conf-auto-optimise-store", - "conf-binary-cache-public-keys": "command-ref/conf-file.html#conf-binary-cache-public-keys", - "conf-binary-caches": "command-ref/conf-file.html#conf-binary-caches", - "conf-build-compress-log": "command-ref/conf-file.html#conf-build-compress-log", - "conf-build-cores": "command-ref/conf-file.html#conf-build-cores", - "conf-build-extra-chroot-dirs": "command-ref/conf-file.html#conf-build-extra-chroot-dirs", - "conf-build-extra-sandbox-paths": "command-ref/conf-file.html#conf-build-extra-sandbox-paths", - "conf-build-fallback": "command-ref/conf-file.html#conf-build-fallback", - "conf-build-max-jobs": "command-ref/conf-file.html#conf-build-max-jobs", - "conf-build-max-log-size": "command-ref/conf-file.html#conf-build-max-log-size", - "conf-build-max-silent-time": "command-ref/conf-file.html#conf-build-max-silent-time", - "conf-build-timeout": "command-ref/conf-file.html#conf-build-timeout", - "conf-build-use-chroot": "command-ref/conf-file.html#conf-build-use-chroot", - "conf-build-use-sandbox": "command-ref/conf-file.html#conf-build-use-sandbox", - "conf-build-use-substitutes": "command-ref/conf-file.html#conf-build-use-substitutes", - "conf-build-users-group": "command-ref/conf-file.html#conf-build-users-group", - "conf-builders": "command-ref/conf-file.html#conf-builders", - "conf-builders-use-substitutes": "command-ref/conf-file.html#conf-builders-use-substitutes", - "conf-compress-build-log": "command-ref/conf-file.html#conf-compress-build-log", - "conf-connect-timeout": "command-ref/conf-file.html#conf-connect-timeout", - "conf-cores": "command-ref/conf-file.html#conf-cores", - "conf-diff-hook": "command-ref/conf-file.html#conf-diff-hook", - "conf-env-keep-derivations": "command-ref/conf-file.html#conf-env-keep-derivations", - "conf-extra-binary-caches": "command-ref/conf-file.html#conf-extra-binary-caches", - "conf-extra-platforms": "command-ref/conf-file.html#conf-extra-platforms", - "conf-extra-sandbox-paths": "command-ref/conf-file.html#conf-extra-sandbox-paths", - "conf-extra-substituters": "command-ref/conf-file.html#conf-extra-substituters", - "conf-fallback": "command-ref/conf-file.html#conf-fallback", - "conf-fsync-metadata": "command-ref/conf-file.html#conf-fsync-metadata", - "conf-gc-keep-derivations": "command-ref/conf-file.html#conf-gc-keep-derivations", - "conf-gc-keep-outputs": "command-ref/conf-file.html#conf-gc-keep-outputs", - "conf-hashed-mirrors": "command-ref/conf-file.html#conf-hashed-mirrors", - "conf-http-connections": "command-ref/conf-file.html#conf-http-connections", - "conf-keep-build-log": "command-ref/conf-file.html#conf-keep-build-log", - "conf-keep-derivations": "command-ref/conf-file.html#conf-keep-derivations", - "conf-keep-env-derivations": "command-ref/conf-file.html#conf-keep-env-derivations", - "conf-keep-outputs": "command-ref/conf-file.html#conf-keep-outputs", - "conf-max-build-log-size": "command-ref/conf-file.html#conf-max-build-log-size", - "conf-max-free": "command-ref/conf-file.html#conf-max-free", - "conf-max-jobs": "command-ref/conf-file.html#conf-max-jobs", - "conf-max-silent-time": "command-ref/conf-file.html#conf-max-silent-time", - "conf-min-free": "command-ref/conf-file.html#conf-min-free", - "conf-narinfo-cache-negative-ttl": "command-ref/conf-file.html#conf-narinfo-cache-negative-ttl", - "conf-narinfo-cache-positive-ttl": "command-ref/conf-file.html#conf-narinfo-cache-positive-ttl", - "conf-netrc-file": "command-ref/conf-file.html#conf-netrc-file", - "conf-plugin-files": "command-ref/conf-file.html#conf-plugin-files", - "conf-post-build-hook": "command-ref/conf-file.html#conf-post-build-hook", - "conf-pre-build-hook": "command-ref/conf-file.html#conf-pre-build-hook", - "conf-require-sigs": "command-ref/conf-file.html#conf-require-sigs", - "conf-restrict-eval": "command-ref/conf-file.html#conf-restrict-eval", - "conf-run-diff-hook": "command-ref/conf-file.html#conf-run-diff-hook", - "conf-sandbox": "command-ref/conf-file.html#conf-sandbox", - "conf-sandbox-dev-shm-size": "command-ref/conf-file.html#conf-sandbox-dev-shm-size", - "conf-sandbox-paths": "command-ref/conf-file.html#conf-sandbox-paths", - "conf-secret-key-files": "command-ref/conf-file.html#conf-secret-key-files", - "conf-show-trace": "command-ref/conf-file.html#conf-show-trace", - "conf-stalled-download-timeout": "command-ref/conf-file.html#conf-stalled-download-timeout", - "conf-substitute": "command-ref/conf-file.html#conf-substitute", - "conf-substituters": "command-ref/conf-file.html#conf-substituters", - "conf-system": "command-ref/conf-file.html#conf-system", - "conf-system-features": "command-ref/conf-file.html#conf-system-features", - "conf-tarball-ttl": "command-ref/conf-file.html#conf-tarball-ttl", - "conf-timeout": "command-ref/conf-file.html#conf-timeout", - "conf-trace-function-calls": "command-ref/conf-file.html#conf-trace-function-calls", - "conf-trusted-binary-caches": "command-ref/conf-file.html#conf-trusted-binary-caches", - "conf-trusted-public-keys": "command-ref/conf-file.html#conf-trusted-public-keys", - "conf-trusted-substituters": "command-ref/conf-file.html#conf-trusted-substituters", - "conf-trusted-users": "command-ref/conf-file.html#conf-trusted-users", - "extra-sandbox-paths": "command-ref/conf-file.html#extra-sandbox-paths", - "sec-conf-file": "command-ref/conf-file.html", - "env-NIX_PATH": "command-ref/env-common.html#env-NIX_PATH", - "env-common": "command-ref/env-common.html", - "envar-remote": "command-ref/env-common.html#env-NIX_REMOTE", - "sec-common-env": "command-ref/env-common.html", - "ch-files": "command-ref/files.html", - "ch-main-commands": "command-ref/main-commands.html", - "opt-out-link": "command-ref/nix-build.html#opt-out-link", - "sec-nix-build": "command-ref/nix-build.html", - "sec-nix-channel": "command-ref/nix-channel.html", - "sec-nix-collect-garbage": "command-ref/nix-collect-garbage.html", - "sec-nix-copy-closure": "command-ref/nix-copy-closure.html", - "sec-nix-daemon": "command-ref/nix-daemon.html", - "refsec-nix-env-install-examples": "command-ref/nix-env.html#examples", - "rsec-nix-env-install": "command-ref/nix-env.html#operation---install", - "rsec-nix-env-set": "command-ref/nix-env.html#operation---set", - "rsec-nix-env-set-flag": "command-ref/nix-env.html#operation---set-flag", - "rsec-nix-env-upgrade": "command-ref/nix-env.html#operation---upgrade", - "sec-nix-env": "command-ref/nix-env.html", - "ssec-version-comparisons": "command-ref/nix-env.html#versions", - "sec-nix-hash": "command-ref/nix-hash.html", - "sec-nix-instantiate": "command-ref/nix-instantiate.html", - "sec-nix-prefetch-url": "command-ref/nix-prefetch-url.html", - "sec-nix-shell": "command-ref/nix-shell.html", - "ssec-nix-shell-shebang": "command-ref/nix-shell.html#use-as-a--interpreter", - "nixref-queries": "command-ref/nix-store.html#queries", - "opt-add-root": "command-ref/nix-store.html#opt-add-root", - "refsec-nix-store-dump": "command-ref/nix-store.html#operation---dump", - "refsec-nix-store-export": "command-ref/nix-store.html#operation---export", - "refsec-nix-store-import": "command-ref/nix-store.html#operation---import", - "refsec-nix-store-query": "command-ref/nix-store.html#operation---query", - "refsec-nix-store-verify": "command-ref/nix-store.html#operation---verify", - "rsec-nix-store-gc": "command-ref/nix-store.html#operation---gc", - "rsec-nix-store-generate-binary-cache-key": "command-ref/nix-store.html#operation---generate-binary-cache-key", - "rsec-nix-store-realise": "command-ref/nix-store.html#operation---realise", - "rsec-nix-store-serve": "command-ref/nix-store.html#operation---serve", - "sec-nix-store": "command-ref/nix-store.html", - "opt-I": "command-ref/opt-common.html#opt-I", - "opt-attr": "command-ref/opt-common.html#opt-attr", - "opt-common": "command-ref/opt-common.html", - "opt-cores": "command-ref/opt-common.html#opt-cores", - "opt-log-format": "command-ref/opt-common.html#opt-log-format", - "opt-max-jobs": "command-ref/opt-common.html#opt-max-jobs", - "opt-max-silent-time": "command-ref/opt-common.html#opt-max-silent-time", - "opt-timeout": "command-ref/opt-common.html#opt-timeout", - "sec-common-options": "command-ref/opt-common.html", - "ch-utilities": "command-ref/utilities.html", - "chap-hacking": "contributing/hacking.html", - "adv-attr-allowSubstitutes": "language/advanced-attributes.html#adv-attr-allowSubstitutes", - "adv-attr-allowedReferences": "language/advanced-attributes.html#adv-attr-allowedReferences", - "adv-attr-allowedRequisites": "language/advanced-attributes.html#adv-attr-allowedRequisites", - "adv-attr-disallowedReferences": "language/advanced-attributes.html#adv-attr-disallowedReferences", - "adv-attr-disallowedRequisites": "language/advanced-attributes.html#adv-attr-disallowedRequisites", - "adv-attr-exportReferencesGraph": "language/advanced-attributes.html#adv-attr-exportReferencesGraph", - "adv-attr-impureEnvVars": "language/advanced-attributes.html#adv-attr-impureEnvVars", - "adv-attr-outputHash": "language/advanced-attributes.html#adv-attr-outputHash", - "adv-attr-outputHashAlgo": "language/advanced-attributes.html#adv-attr-outputHashAlgo", - "adv-attr-outputHashMode": "language/advanced-attributes.html#adv-attr-outputHashMode", - "adv-attr-passAsFile": "language/advanced-attributes.html#adv-attr-passAsFile", - "adv-attr-preferLocalBuild": "language/advanced-attributes.html#adv-attr-preferLocalBuild", - "fixed-output-drvs": "language/advanced-attributes.html#adv-attr-outputHash", - "sec-advanced-attributes": "language/advanced-attributes.html", - "builtin-abort": "language/builtins.html#builtins-abort", - "builtin-add": "language/builtins.html#builtins-add", - "builtin-all": "language/builtins.html#builtins-all", - "builtin-any": "language/builtins.html#builtins-any", - "builtin-attrNames": "language/builtins.html#builtins-attrNames", - "builtin-attrValues": "language/builtins.html#builtins-attrValues", - "builtin-baseNameOf": "language/builtins.html#builtins-baseNameOf", - "builtin-bitAnd": "language/builtins.html#builtins-bitAnd", - "builtin-bitOr": "language/builtins.html#builtins-bitOr", - "builtin-bitXor": "language/builtins.html#builtins-bitXor", - "builtin-builtins": "language/builtins.html#builtins-builtins", - "builtin-compareVersions": "language/builtins.html#builtins-compareVersions", - "builtin-concatLists": "language/builtins.html#builtins-concatLists", - "builtin-concatStringsSep": "language/builtins.html#builtins-concatStringsSep", - "builtin-currentSystem": "language/builtins.html#builtins-currentSystem", - "builtin-deepSeq": "language/builtins.html#builtins-deepSeq", - "builtin-derivation": "language/builtins.html#builtins-derivation", - "builtin-dirOf": "language/builtins.html#builtins-dirOf", - "builtin-div": "language/builtins.html#builtins-div", - "builtin-elem": "language/builtins.html#builtins-elem", - "builtin-elemAt": "language/builtins.html#builtins-elemAt", - "builtin-fetchGit": "language/builtins.html#builtins-fetchGit", - "builtin-fetchTarball": "language/builtins.html#builtins-fetchTarball", - "builtin-fetchurl": "language/builtins.html#builtins-fetchurl", - "builtin-filterSource": "language/builtins.html#builtins-filterSource", - "builtin-foldl-prime": "language/builtins.html#builtins-foldl-prime", - "builtin-fromJSON": "language/builtins.html#builtins-fromJSON", - "builtin-functionArgs": "language/builtins.html#builtins-functionArgs", - "builtin-genList": "language/builtins.html#builtins-genList", - "builtin-getAttr": "language/builtins.html#builtins-getAttr", - "builtin-getEnv": "language/builtins.html#builtins-getEnv", - "builtin-hasAttr": "language/builtins.html#builtins-hasAttr", - "builtin-hashFile": "language/builtins.html#builtins-hashFile", - "builtin-hashString": "language/builtins.html#builtins-hashString", - "builtin-head": "language/builtins.html#builtins-head", - "builtin-import": "language/builtins.html#builtins-import", - "builtin-intersectAttrs": "language/builtins.html#builtins-intersectAttrs", - "builtin-isAttrs": "language/builtins.html#builtins-isAttrs", - "builtin-isBool": "language/builtins.html#builtins-isBool", - "builtin-isFloat": "language/builtins.html#builtins-isFloat", - "builtin-isFunction": "language/builtins.html#builtins-isFunction", - "builtin-isInt": "language/builtins.html#builtins-isInt", - "builtin-isList": "language/builtins.html#builtins-isList", - "builtin-isNull": "language/builtins.html#builtins-isNull", - "builtin-isString": "language/builtins.html#builtins-isString", - "builtin-length": "language/builtins.html#builtins-length", - "builtin-lessThan": "language/builtins.html#builtins-lessThan", - "builtin-listToAttrs": "language/builtins.html#builtins-listToAttrs", - "builtin-map": "language/builtins.html#builtins-map", - "builtin-match": "language/builtins.html#builtins-match", - "builtin-mul": "language/builtins.html#builtins-mul", - "builtin-parseDrvName": "language/builtins.html#builtins-parseDrvName", - "builtin-path": "language/builtins.html#builtins-path", - "builtin-pathExists": "language/builtins.html#builtins-pathExists", - "builtin-placeholder": "language/builtins.html#builtins-placeholder", - "builtin-readDir": "language/builtins.html#builtins-readDir", - "builtin-readFile": "language/builtins.html#builtins-readFile", - "builtin-removeAttrs": "language/builtins.html#builtins-removeAttrs", - "builtin-replaceStrings": "language/builtins.html#builtins-replaceStrings", - "builtin-seq": "language/builtins.html#builtins-seq", - "builtin-sort": "language/builtins.html#builtins-sort", - "builtin-split": "language/builtins.html#builtins-split", - "builtin-splitVersion": "language/builtins.html#builtins-splitVersion", - "builtin-stringLength": "language/builtins.html#builtins-stringLength", - "builtin-sub": "language/builtins.html#builtins-sub", - "builtin-substring": "language/builtins.html#builtins-substring", - "builtin-tail": "language/builtins.html#builtins-tail", - "builtin-throw": "language/builtins.html#builtins-throw", - "builtin-toFile": "language/builtins.html#builtins-toFile", - "builtin-toJSON": "language/builtins.html#builtins-toJSON", - "builtin-toPath": "language/builtins.html#builtins-toPath", - "builtin-toString": "language/builtins.html#builtins-toString", - "builtin-toXML": "language/builtins.html#builtins-toXML", - "builtin-trace": "language/builtins.html#builtins-trace", - "builtin-tryEval": "language/builtins.html#builtins-tryEval", - "builtin-typeOf": "language/builtins.html#builtins-typeOf", - "ssec-builtins": "language/builtins.html", - "attr-system": "language/derivations.html#attr-system", - "ssec-derivation": "language/derivations.html", - "ch-expression-language": "language/index.html", - "sec-constructs": "language/constructs.html", - "sect-let-language": "language/constructs.html#let-language", - "ss-functions": "language/constructs.html#functions", - "sec-language-operators": "language/operators.html", - "table-operators": "language/operators.html", - "ssec-values": "language/values.html", - "gloss-closure": "glossary.html#gloss-closure", - "gloss-derivation": "glossary.html#gloss-derivation", - "gloss-deriver": "glossary.html#gloss-deriver", - "gloss-nar": "glossary.html#gloss-nar", - "gloss-output-path": "glossary.html#gloss-output-path", - "gloss-profile": "glossary.html#gloss-profile", - "gloss-reachable": "glossary.html#gloss-reachable", - "gloss-reference": "glossary.html#gloss-reference", - "gloss-substitute": "glossary.html#gloss-substitute", - "gloss-user-env": "glossary.html#gloss-user-env", - "gloss-validity": "glossary.html#gloss-validity", - "part-glossary": "glossary.html", - "sec-building-source": "installation/building-source.html", - "ch-env-variables": "installation/env-variables.html", - "sec-installer-proxy-settings": "installation/env-variables.html#proxy-environment-variables", - "sec-nix-ssl-cert-file": "installation/env-variables.html#nix_ssl_cert_file", - "sec-nix-ssl-cert-file-with-nix-daemon-and-macos": "installation/env-variables.html#nix_ssl_cert_file-with-macos-and-the-nix-daemon", - "chap-installation": "installation/installation.html", - "ch-installing-binary": "installation/installing-binary.html", - "sect-macos-installation": "installation/installing-binary.html#macos-installation", - "sect-macos-installation-change-store-prefix": "installation/installing-binary.html#macos-installation", - "sect-macos-installation-encrypted-volume": "installation/installing-binary.html#macos-installation", - "sect-macos-installation-recommended-notes": "installation/installing-binary.html#macos-installation", - "sect-macos-installation-symlink": "installation/installing-binary.html#macos-installation", - "sect-multi-user-installation": "installation/installing-binary.html#multi-user-installation", - "sect-nix-install-binary-tarball": "installation/installing-binary.html#installing-from-a-binary-tarball", - "sect-nix-install-pinned-version-url": "installation/installing-binary.html#installing-a-pinned-nix-version-from-a-url", - "sect-single-user-installation": "installation/installing-binary.html#single-user-installation", - "ch-installing-source": "installation/installing-source.html", - "ssec-multi-user": "installation/multi-user.html", - "ch-nix-security": "installation/nix-security.html", - "sec-obtaining-source": "installation/obtaining-source.html", - "sec-prerequisites-source": "installation/prerequisites-source.html", - "sec-single-user": "installation/single-user.html", - "ch-supported-platforms": "installation/supported-platforms.html", - "ch-upgrading-nix": "installation/upgrading.html", - "ch-about-nix": "introduction.html", - "chap-introduction": "introduction.html", - "ch-basic-package-mgmt": "package-management/basic-package-mgmt.html", - "ssec-binary-cache-substituter": "package-management/binary-cache-substituter.html", - "sec-channels": "command-ref/nix-channel.html", - "ssec-copy-closure": "package-management/copy-closure.html", - "sec-garbage-collection": "package-management/garbage-collection.html", - "ssec-gc-roots": "package-management/garbage-collector-roots.html", - "chap-package-management": "package-management/package-management.html", - "sec-profiles": "package-management/profiles.html", - "ssec-s3-substituter": "package-management/s3-substituter.html", - "ssec-s3-substituter-anonymous-reads": "package-management/s3-substituter.html#anonymous-reads-to-your-s3-compatible-binary-cache", - "ssec-s3-substituter-authenticated-reads": "package-management/s3-substituter.html#authenticated-reads-to-your-s3-binary-cache", - "ssec-s3-substituter-authenticated-writes": "package-management/s3-substituter.html#authenticated-writes-to-your-s3-compatible-binary-cache", - "sec-sharing-packages": "package-management/sharing-packages.html", - "ssec-ssh-substituter": "package-management/ssh-substituter.html", - "chap-quick-start": "quick-start.html", - "sec-relnotes": "release-notes/release-notes.html", - "ch-relnotes-0.10.1": "release-notes/rl-0.10.1.html", - "ch-relnotes-0.10": "release-notes/rl-0.10.html", - "ssec-relnotes-0.11": "release-notes/rl-0.11.html", - "ssec-relnotes-0.12": "release-notes/rl-0.12.html", - "ssec-relnotes-0.13": "release-notes/rl-0.13.html", - "ssec-relnotes-0.14": "release-notes/rl-0.14.html", - "ssec-relnotes-0.15": "release-notes/rl-0.15.html", - "ssec-relnotes-0.16": "release-notes/rl-0.16.html", - "ch-relnotes-0.5": "release-notes/rl-0.5.html", - "ch-relnotes-0.6": "release-notes/rl-0.6.html", - "ch-relnotes-0.7": "release-notes/rl-0.7.html", - "ch-relnotes-0.8.1": "release-notes/rl-0.8.1.html", - "ch-relnotes-0.8": "release-notes/rl-0.8.html", - "ch-relnotes-0.9.1": "release-notes/rl-0.9.1.html", - "ch-relnotes-0.9.2": "release-notes/rl-0.9.2.html", - "ch-relnotes-0.9": "release-notes/rl-0.9.html", - "ssec-relnotes-1.0": "release-notes/rl-1.0.html", - "ssec-relnotes-1.1": "release-notes/rl-1.1.html", - "ssec-relnotes-1.10": "release-notes/rl-1.10.html", - "ssec-relnotes-1.11.10": "release-notes/rl-1.11.10.html", - "ssec-relnotes-1.11": "release-notes/rl-1.11.html", - "ssec-relnotes-1.2": "release-notes/rl-1.2.html", - "ssec-relnotes-1.3": "release-notes/rl-1.3.html", - "ssec-relnotes-1.4": "release-notes/rl-1.4.html", - "ssec-relnotes-1.5.1": "release-notes/rl-1.5.1.html", - "ssec-relnotes-1.5.2": "release-notes/rl-1.5.2.html", - "ssec-relnotes-1.5": "release-notes/rl-1.5.html", - "ssec-relnotes-1.6.1": "release-notes/rl-1.6.1.html", - "ssec-relnotes-1.6.0": "release-notes/rl-1.6.html", - "ssec-relnotes-1.7": "release-notes/rl-1.7.html", - "ssec-relnotes-1.8": "release-notes/rl-1.8.html", - "ssec-relnotes-1.9": "release-notes/rl-1.9.html", - "ssec-relnotes-2.0": "release-notes/rl-2.0.html", - "ssec-relnotes-2.1": "release-notes/rl-2.1.html", - "ssec-relnotes-2.2": "release-notes/rl-2.2.html", - "ssec-relnotes-2.3": "release-notes/rl-2.3.html", - }, - "language/values.html": { - "simple-values": "#primitives", - "lists": "#list", - "strings": "#string", - "lists": "#list", - "attribute-sets": "#attribute-set", - }, - "installation/installing-binary.html": { - "linux": "uninstall.html#linux", - "macos": "uninstall.html#macos", - "uninstalling": "uninstall.html", - } - "contributing/hacking.html": { - "nix-with-flakes": "#building-nix-with-flakes", - "classic-nix": "#building-nix", - "running-tests": "testing.html#running-tests", - "unit-tests": "testing.html#unit-tests", - "functional-tests": "testing.html#functional-tests", - "debugging-failing-functional-tests": "testing.html#debugging-failing-functional-tests", - "integration-tests": "testing.html#integration-tests", - "installer-tests": "testing.html#installer-tests", - "one-time-setup": "testing.html#one-time-setup", - "using-the-ci-generated-installer-for-manual-testing": "testing.html#using-the-ci-generated-installer-for-manual-testing", - } -}; - -// the following code matches the current page's URL against the set of redirects. -// -// it is written to minimize the latency between page load and redirect. -// therefore we avoid function calls, copying data, and unnecessary loops. -// IMPORTANT: we use stateful array operations and their order matters! -// -// matching URLs is more involved than it should be: -// -// 1. `document.location.pathname` can have an arbitrary prefix. -// -// 2. `path_to_root` is set by mdBook. it consists only of `../`s and -// determines the depth of `` relative to the prefix: -// -// `document.location.pathname` -// |------------------------------| -// ///[[.html]][#] -// |----| -// `path_to_root` has same number of path segments -// -// source: https://phaiax.github.io/mdBook/format/theme/index-hbs.html#data -// -// 3. the following paths are equivalent: -// -// /foo/bar/ -// /foo/bar/index.html -// /foo/bar/index -// -// 4. the following paths are also equivalent: -// -// /foo/bar/baz -// /foo/bar/baz.html -// - -let segments = document.location.pathname.split('/'); - -let file = segments.pop(); - -// normalize file name -if (file === '') { file = "index.html"; } -else if (!file.endsWith('.html')) { file = file + '.html'; } - -segments.push(file); - -// use `path_to_root` to discern prefix from path. -const depth = path_to_root.split('/').length; - -// remove segments containing prefix. the following works because -// 1. the original `document.location.pathname` is absolute, -// hence first element of `segments` is always empty. -// 2. last element of splitting `path_to_root` is also always empty. -// 3. last element of `segments` is the file name. -// -// visual example: -// -// '/foo/bar/baz.html'.split('/') -> [ '', 'foo', 'bar', 'baz.html' ] -// '../'.split('/') -> [ '..', '' ] -// -// the following operations will then result in -// -// path = 'bar/baz.html' -// -segments.splice(0, segments.length - depth); -const path = segments.join('/'); - -// anchor starts with the hash character (`#`), -// but our redirect declarations don't, so we strip it. -// example: -// document.location.hash -> '#foo' -// document.location.hash.substring(1) -> 'foo' -const anchor = document.location.hash.substring(1); - -const redirect = redirects[path]; -if (redirect) { - const target = redirect[anchor]; - if (target) { - document.location.href = target; - } -} diff --git a/doc/manual/render-manpage.sh b/doc/manual/render-manpage.sh deleted file mode 100755 index 7d83253cb..000000000 --- a/doc/manual/render-manpage.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh - -set -euo pipefail - -lowdown_args= - -if [ "$1" = --out-no-smarty ]; then - lowdown_args=--out-no-smarty - shift -fi - -[ "$#" = 4 ] || { - echo "wrong number of args passed" >&2 - exit 1 -} - -title="$1" -section="$2" -infile="$3" -outfile="$4" - -( - printf "Title: %s\n\n" "$title" - cat "$infile" -) | lowdown -sT man --nroff-nolinks $lowdown_args -M section="$section" -o "$outfile" diff --git a/doc/manual/rl-next/.gitkeep b/doc/manual/rl-next/.gitkeep deleted file mode 100644 index e69de29bb..000000000 diff --git a/doc/manual/rl-next/repl-complete-colon.md b/doc/manual/rl-next/repl-complete-colon.md deleted file mode 100644 index 19733575b..000000000 --- a/doc/manual/rl-next/repl-complete-colon.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -synopsis: "`nix repl` now allows tab-completing the special repl :colon commands" -cls: 1367 -credits: Qyriad -category: Improvements ---- - -The REPL (`nix repl`) supports pressing `` to complete a partial expression, but now also supports completing the special :colon commands as well (`:b`, `:edit`, `:doc`, etc), if the line starts with a colon. diff --git a/doc/manual/src/SUMMARY.md b/doc/manual/src/SUMMARY.md deleted file mode 100644 index 5090c78c0..000000000 --- a/doc/manual/src/SUMMARY.md +++ /dev/null @@ -1,250 +0,0 @@ -# Table of Contents - -- [Introduction](introduction.md) -- [Quick Start](quick-start.md) -- [Installation](installation/installation.md) - - [Supported Platforms](installation/supported-platforms.md) - - [Installing a Binary Distribution](installation/installing-binary.md) - - [Installing Lix from Source](installation/installing-source.md) - - [Prerequisites](installation/prerequisites-source.md) - - [Obtaining a Source Distribution](installation/obtaining-source.md) - - [Building Lix from Source](installation/building-source.md) - - [Using Lix within Docker](installation/installing-docker.md) - - [Security](installation/nix-security.md) - - [Single-User Mode](installation/single-user.md) - - [Multi-User Mode](installation/multi-user.md) - - [Environment Variables](installation/env-variables.md) - - [Upgrading Lix](installation/upgrading.md) - - [Uninstalling Lix](installation/uninstall.md) -- [Package Management](package-management/package-management.md) - - [Basic Package Management](package-management/basic-package-mgmt.md) - - [Profiles](package-management/profiles.md) - - [Garbage Collection](package-management/garbage-collection.md) - - [Garbage Collector Roots](package-management/garbage-collector-roots.md) - - [Sharing Packages Between Machines](package-management/sharing-packages.md) - - [Serving a Nix store via HTTP](package-management/binary-cache-substituter.md) - - [Copying Closures via SSH](package-management/copy-closure.md) - - [Serving a Nix store via SSH](package-management/ssh-substituter.md) - - [Serving a Nix store via S3](package-management/s3-substituter.md) -- [Nix Language](language/index.md) - - [Data Types](language/values.md) - - [Language Constructs](language/constructs.md) - - [String interpolation](language/string-interpolation.md) - - [Operators](language/operators.md) - - [Derivations](language/derivations.md) - - [Advanced Attributes](language/advanced-attributes.md) - - [Built-in Constants](language/builtin-constants.md) - - [Built-in Functions](language/builtins.md) -- [Advanced Topics](advanced-topics/advanced-topics.md) - - [Remote Builds](advanced-topics/distributed-builds.md) - - [Tuning Cores and Jobs](advanced-topics/cores-vs-jobs.md) - - [Verifying Build Reproducibility](advanced-topics/diff-hook.md) - - [Using the `post-build-hook`](advanced-topics/post-build-hook.md) -- [Command Reference](command-ref/command-ref.md) - - [Common Options](command-ref/opt-common.md) - - [Common Environment Variables](command-ref/env-common.md) - - [Main Commands](command-ref/main-commands.md) - - [nix-build](command-ref/nix-build.md) - - [nix-shell](command-ref/nix-shell.md) - - [nix-store](command-ref/nix-store.md) - - [nix-store --add-fixed](command-ref/nix-store/add-fixed.md) - - [nix-store --add](command-ref/nix-store/add.md) - - [nix-store --delete](command-ref/nix-store/delete.md) - - [nix-store --dump-db](command-ref/nix-store/dump-db.md) - - [nix-store --dump](command-ref/nix-store/dump.md) - - [nix-store --export](command-ref/nix-store/export.md) - - [nix-store --gc](command-ref/nix-store/gc.md) - - [nix-store --generate-binary-cache-key](command-ref/nix-store/generate-binary-cache-key.md) - - [nix-store --import](command-ref/nix-store/import.md) - - [nix-store --load-db](command-ref/nix-store/load-db.md) - - [nix-store --optimise](command-ref/nix-store/optimise.md) - - [nix-store --print-env](command-ref/nix-store/print-env.md) - - [nix-store --query](command-ref/nix-store/query.md) - - [nix-store --read-log](command-ref/nix-store/read-log.md) - - [nix-store --realise](command-ref/nix-store/realise.md) - - [nix-store --repair-path](command-ref/nix-store/repair-path.md) - - [nix-store --restore](command-ref/nix-store/restore.md) - - [nix-store --serve](command-ref/nix-store/serve.md) - - [nix-store --verify-path](command-ref/nix-store/verify-path.md) - - [nix-store --verify](command-ref/nix-store/verify.md) - - [nix-env](command-ref/nix-env.md) - - [nix-env --delete-generations](command-ref/nix-env/delete-generations.md) - - [nix-env --install](command-ref/nix-env/install.md) - - [nix-env --list-generations](command-ref/nix-env/list-generations.md) - - [nix-env --query](command-ref/nix-env/query.md) - - [nix-env --rollback](command-ref/nix-env/rollback.md) - - [nix-env --set-flag](command-ref/nix-env/set-flag.md) - - [nix-env --set](command-ref/nix-env/set.md) - - [nix-env --switch-generation](command-ref/nix-env/switch-generation.md) - - [nix-env --switch-profile](command-ref/nix-env/switch-profile.md) - - [nix-env --uninstall](command-ref/nix-env/uninstall.md) - - [nix-env --upgrade](command-ref/nix-env/upgrade.md) - - [Utilities](command-ref/utilities.md) - - [nix-channel](command-ref/nix-channel.md) - - [nix-collect-garbage](command-ref/nix-collect-garbage.md) - - [nix-copy-closure](command-ref/nix-copy-closure.md) - - [nix-daemon](command-ref/nix-daemon.md) - - [nix-hash](command-ref/nix-hash.md) - - [nix-instantiate](command-ref/nix-instantiate.md) - - [nix-prefetch-url](command-ref/nix-prefetch-url.md) - - [Experimental Commands](command-ref/experimental-commands.md) - - [nix](command-ref/new-cli/nix.md) - - [nix build](command-ref/new-cli/nix3-build.md) - - [nix bundle](command-ref/new-cli/nix3-bundle.md) - - [nix config](command-ref/new-cli/nix3-config.md) - - [nix config show](command-ref/new-cli/nix3-config-show.md) - - [nix copy](command-ref/new-cli/nix3-copy.md) - - [nix daemon](command-ref/new-cli/nix3-daemon.md) - - [nix derivation](command-ref/new-cli/nix3-derivation.md) - - [nix derivation add](command-ref/new-cli/nix3-derivation-add.md) - - [nix derivation show](command-ref/new-cli/nix3-derivation-show.md) - - [nix develop](command-ref/new-cli/nix3-develop.md) - - [nix doctor](command-ref/new-cli/nix3-doctor.md) - - [nix edit](command-ref/new-cli/nix3-edit.md) - - [nix eval](command-ref/new-cli/nix3-eval.md) - - [nix flake](command-ref/new-cli/nix3-flake.md) - - [nix flake archive](command-ref/new-cli/nix3-flake-archive.md) - - [nix flake check](command-ref/new-cli/nix3-flake-check.md) - - [nix flake clone](command-ref/new-cli/nix3-flake-clone.md) - - [nix flake info](command-ref/new-cli/nix3-flake-info.md) - - [nix flake init](command-ref/new-cli/nix3-flake-init.md) - - [nix flake lock](command-ref/new-cli/nix3-flake-lock.md) - - [nix flake metadata](command-ref/new-cli/nix3-flake-metadata.md) - - [nix flake new](command-ref/new-cli/nix3-flake-new.md) - - [nix flake prefetch](command-ref/new-cli/nix3-flake-prefetch.md) - - [nix flake show](command-ref/new-cli/nix3-flake-show.md) - - [nix flake update](command-ref/new-cli/nix3-flake-update.md) - - [nix fmt](command-ref/new-cli/nix3-fmt.md) - - [nix hash](command-ref/new-cli/nix3-hash.md) - - [nix hash file](command-ref/new-cli/nix3-hash-file.md) - - [nix hash path](command-ref/new-cli/nix3-hash-path.md) - - [nix hash to-base16](command-ref/new-cli/nix3-hash-to-base16.md) - - [nix hash to-base32](command-ref/new-cli/nix3-hash-to-base32.md) - - [nix hash to-base64](command-ref/new-cli/nix3-hash-to-base64.md) - - [nix hash to-sri](command-ref/new-cli/nix3-hash-to-sri.md) - - [nix help](command-ref/new-cli/nix3-help.md) - - [nix help-stores](command-ref/new-cli/nix3-help-stores.md) - - [nix key](command-ref/new-cli/nix3-key.md) - - [nix key convert-secret-to-public](command-ref/new-cli/nix3-key-convert-secret-to-public.md) - - [nix key generate-secret](command-ref/new-cli/nix3-key-generate-secret.md) - - [nix log](command-ref/new-cli/nix3-log.md) - - [nix nar](command-ref/new-cli/nix3-nar.md) - - [nix nar cat](command-ref/new-cli/nix3-nar-cat.md) - - [nix nar dump-path](command-ref/new-cli/nix3-nar-dump-path.md) - - [nix nar ls](command-ref/new-cli/nix3-nar-ls.md) - - [nix path-info](command-ref/new-cli/nix3-path-info.md) - - [nix print-dev-env](command-ref/new-cli/nix3-print-dev-env.md) - - [nix profile](command-ref/new-cli/nix3-profile.md) - - [nix profile diff-closures](command-ref/new-cli/nix3-profile-diff-closures.md) - - [nix profile history](command-ref/new-cli/nix3-profile-history.md) - - [nix profile install](command-ref/new-cli/nix3-profile-install.md) - - [nix profile list](command-ref/new-cli/nix3-profile-list.md) - - [nix profile remove](command-ref/new-cli/nix3-profile-remove.md) - - [nix profile rollback](command-ref/new-cli/nix3-profile-rollback.md) - - [nix profile upgrade](command-ref/new-cli/nix3-profile-upgrade.md) - - [nix profile wipe-history](command-ref/new-cli/nix3-profile-wipe-history.md) - - [nix realisation](command-ref/new-cli/nix3-realisation.md) - - [nix realisation info](command-ref/new-cli/nix3-realisation-info.md) - - [nix registry](command-ref/new-cli/nix3-registry.md) - - [nix registry add](command-ref/new-cli/nix3-registry-add.md) - - [nix registry list](command-ref/new-cli/nix3-registry-list.md) - - [nix registry pin](command-ref/new-cli/nix3-registry-pin.md) - - [nix registry remove](command-ref/new-cli/nix3-registry-remove.md) - - [nix repl](command-ref/new-cli/nix3-repl.md) - - [nix run](command-ref/new-cli/nix3-run.md) - - [nix search](command-ref/new-cli/nix3-search.md) - - [nix shell](command-ref/new-cli/nix3-shell.md) - - [nix store](command-ref/new-cli/nix3-store.md) - - [nix store add-file](command-ref/new-cli/nix3-store-add-file.md) - - [nix store add-path](command-ref/new-cli/nix3-store-add-path.md) - - [nix store cat](command-ref/new-cli/nix3-store-cat.md) - - [nix store copy-log](command-ref/new-cli/nix3-store-copy-log.md) - - [nix store copy-sigs](command-ref/new-cli/nix3-store-copy-sigs.md) - - [nix store delete](command-ref/new-cli/nix3-store-delete.md) - - [nix store diff-closures](command-ref/new-cli/nix3-store-diff-closures.md) - - [nix store dump-path](command-ref/new-cli/nix3-store-dump-path.md) - - [nix store gc](command-ref/new-cli/nix3-store-gc.md) - - [nix store ls](command-ref/new-cli/nix3-store-ls.md) - - [nix store make-content-addressed](command-ref/new-cli/nix3-store-make-content-addressed.md) - - [nix store optimise](command-ref/new-cli/nix3-store-optimise.md) - - [nix store path-from-hash-part](command-ref/new-cli/nix3-store-path-from-hash-part.md) - - [nix store ping](command-ref/new-cli/nix3-store-ping.md) - - [nix store prefetch-file](command-ref/new-cli/nix3-store-prefetch-file.md) - - [nix store repair](command-ref/new-cli/nix3-store-repair.md) - - [nix store sign](command-ref/new-cli/nix3-store-sign.md) - - [nix store verify](command-ref/new-cli/nix3-store-verify.md) - - [nix upgrade-nix](command-ref/new-cli/nix3-upgrade-nix.md) - - [nix why-depends](command-ref/new-cli/nix3-why-depends.md) - - [Files](command-ref/files.md) - - [nix.conf](command-ref/conf-file.md) - - [Profiles](command-ref/files/profiles.md) - - [manifest.nix](command-ref/files/manifest.nix.md) - - [manifest.json](command-ref/files/manifest.json.md) - - [Channels](command-ref/files/channels.md) - - [Default Nix expression](command-ref/files/default-nix-expression.md) -- [Architecture and Design](architecture/architecture.md) - - [File System Object](architecture/file-system-object.md) -- [Protocols](protocols/protocols.md) - - [Serving Tarball Flakes](protocols/tarball-fetcher.md) - - [Derivation "ATerm" file format](protocols/derivation-aterm.md) -- [Glossary](glossary.md) -- [Contributing](contributing/contributing.md) - - [Hacking](contributing/hacking.md) - - [Testing](contributing/testing.md) - - [Experimental Features](contributing/experimental-features.md) - - [CLI guideline](contributing/cli-guideline.md) - - [C++ style guide](contributing/cxx.md) -- [Release Notes](release-notes/release-notes.md) - - [Upcoming release](release-notes/rl-next.md) - - - [Lix 2.90 (FIXME date)](release-notes/rl-2.90.md) - - [Nix 2.18 (2023-09-20)](release-notes/rl-2.18.md) - - [Nix 2.17 (2023-07-24)](release-notes/rl-2.17.md) - - [Nix 2.16 (2023-05-31)](release-notes/rl-2.16.md) - - [Nix 2.15 (2023-04-11)](release-notes/rl-2.15.md) - - [Nix 2.14 (2023-02-28)](release-notes/rl-2.14.md) - - [Nix 2.13 (2023-01-17)](release-notes/rl-2.13.md) - - [Nix 2.12 (2022-12-06)](release-notes/rl-2.12.md) - - [Nix 2.11 (2022-08-25)](release-notes/rl-2.11.md) - - [Nix 2.10 (2022-07-11)](release-notes/rl-2.10.md) - - [Nix 2.9 (2022-05-30)](release-notes/rl-2.9.md) - - [Nix 2.8 (2022-04-19)](release-notes/rl-2.8.md) - - [Nix 2.7 (2022-03-07)](release-notes/rl-2.7.md) - - [Nix 2.6 (2022-01-24)](release-notes/rl-2.6.md) - - [Nix 2.5 (2021-12-13)](release-notes/rl-2.5.md) - - [Nix 2.4 (2021-11-01)](release-notes/rl-2.4.md) - - [Nix 2.3 (2019-09-04)](release-notes/rl-2.3.md) - - [Nix 2.2 (2019-01-11)](release-notes/rl-2.2.md) - - [Nix 2.1 (2018-09-02)](release-notes/rl-2.1.md) - - [Nix 2.0 (2018-02-22)](release-notes/rl-2.0.md) - - [Nix 1.11.10 (2017-06-12)](release-notes/rl-1.11.10.md) - - [Nix 1.11 (2016-01-19)](release-notes/rl-1.11.md) - - [Nix 1.10 (2015-09-03)](release-notes/rl-1.10.md) - - [Nix 1.9 (2015-06-12)](release-notes/rl-1.9.md) - - [Nix 1.8 (2014-12-14)](release-notes/rl-1.8.md) - - [Nix 1.7 (2014-04-11)](release-notes/rl-1.7.md) - - [Nix 1.6.1 (2013-10-28)](release-notes/rl-1.6.1.md) - - [Nix 1.6 (2013-09-10)](release-notes/rl-1.6.md) - - [Nix 1.5.2 (2013-05-13)](release-notes/rl-1.5.2.md) - - [Nix 1.5 (2013-02-27)](release-notes/rl-1.5.md) - - [Nix 1.4 (2013-02-26)](release-notes/rl-1.4.md) - - [Nix 1.3 (2013-01-04)](release-notes/rl-1.3.md) - - [Nix 1.2 (2012-12-06)](release-notes/rl-1.2.md) - - [Nix 1.1 (2012-07-18)](release-notes/rl-1.1.md) - - [Nix 1.0 (2012-05-11)](release-notes/rl-1.0.md) - - [Nix 0.16 (2010-08-17)](release-notes/rl-0.16.md) - - [Nix 0.15 (2010-03-17)](release-notes/rl-0.15.md) - - [Nix 0.14 (2010-02-04)](release-notes/rl-0.14.md) - - [Nix 0.13 (2009-11-05)](release-notes/rl-0.13.md) - - [Nix 0.12 (2008-11-20)](release-notes/rl-0.12.md) - - [Nix 0.11 (2007-12-31)](release-notes/rl-0.11.md) - - [Nix 0.10.1 (2006-10-11)](release-notes/rl-0.10.1.md) - - [Nix 0.10 (2006-10-06)](release-notes/rl-0.10.md) - - [Nix 0.9.2 (2005-09-21)](release-notes/rl-0.9.2.md) - - [Nix 0.9.1 (2005-09-20)](release-notes/rl-0.9.1.md) - - [Nix 0.9 (2005-09-16)](release-notes/rl-0.9.md) - - [Nix 0.8.1 (2005-04-13)](release-notes/rl-0.8.1.md) - - [Nix 0.8 (2005-04-11)](release-notes/rl-0.8.md) - - [Nix 0.7 (2005-01-12)](release-notes/rl-0.7.md) - - [Nix 0.6 (2004-11-14)](release-notes/rl-0.6.md) - - [Nix 0.5 and earlier](release-notes/rl-0.5.md) diff --git a/doc/manual/src/_redirects b/doc/manual/src/_redirects deleted file mode 100644 index 8ae5d06c1..000000000 --- a/doc/manual/src/_redirects +++ /dev/null @@ -1,29 +0,0 @@ -# redirect rules for paths (server-side) to prevent link rot. -# see ./redirects.js for redirects based on URL fragments (client-side) -# -# concrete user story this supports: -# - user finds URL to the manual for Nix x.y -# - Nix x.z (z > y) is the most recent release -# - updating the version in the URL will show the right thing -# -# format documentation: -# - https://docs.netlify.com/routing/redirects/#syntax-for-the-redirects-file -# - https://docs.netlify.com/routing/redirects/redirect-options/ -# -# conventions: -# - always force (!) since this allows re-using file names -# - group related paths to ease readability -# - always append new redirects to the end of the file -# - redirects that should have been there but are missing can be inserted where they belong - -/expressions/expression-language /language/ 301! -/expressions/language-values /language/values 301! -/expressions/language-constructs /language/constructs 301! -/expressions/language-operators /language/operators 301! -/expressions/* /language/:splat 301! - -/package-management/basic-package-mgmt /command-ref/nix-env 301! - -/package-management/channels* /command-ref/nix-channel 301! - -/package-management/s3-substituter* /command-ref/new-cli/nix3-help-stores#s3-binary-cache-store 301! diff --git a/doc/manual/src/advanced-topics/advanced-topics.md b/doc/manual/src/advanced-topics/advanced-topics.md deleted file mode 100644 index 9a4d12a33..000000000 --- a/doc/manual/src/advanced-topics/advanced-topics.md +++ /dev/null @@ -1 +0,0 @@ -This section lists advanced topics related to builds and builds performance diff --git a/doc/manual/src/advanced-topics/cores-vs-jobs.md b/doc/manual/src/advanced-topics/cores-vs-jobs.md deleted file mode 100644 index 5a2e2ab0e..000000000 --- a/doc/manual/src/advanced-topics/cores-vs-jobs.md +++ /dev/null @@ -1,39 +0,0 @@ -# Tuning Cores and Jobs - -Lix has two relevant settings with regards to how your CPU cores will -be utilized: `cores` and `max-jobs`. This chapter will talk about what -they are, how they interact, and their configuration trade-offs. - - - `max-jobs`\ - Dictates how many separate derivations will be built at the same - time. If you set this to zero, the local machine will do no - builds. Lix will still substitute from binary caches, and build - remotely if remote builders are configured. - - - `cores`\ - Suggests how many cores each derivation should use. Similar to - `make -j`. - -The `cores` setting determines the value of -`NIX_BUILD_CORES`. `NIX_BUILD_CORES` is equal to `cores`, unless -`cores` equals `0`, in which case `NIX_BUILD_CORES` will be the total -number of cores in the system. - -The maximum number of consumed cores is a simple multiplication, -`max-jobs` \* `NIX_BUILD_CORES`. - -The balance on how to set these two independent variables depends upon -each builder's workload and hardware. Here are a few example scenarios -on a machine with 24 cores: - -| `max-jobs` | `cores` | `NIX_BUILD_CORES` | Maximum Processes | Result | -| --------------------- | ------------------ | ----------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 1 | 24 | 24 | 24 | One derivation will be built at a time, each one can use 24 cores. Undersold if a job can’t use 24 cores. | -| 4 | 6 | 6 | 24 | Four derivations will be built at once, each given access to six cores. | -| 12 | 6 | 6 | 72 | 12 derivations will be built at once, each given access to six cores. This configuration is over-sold. If all 12 derivations being built simultaneously try to use all six cores, the machine's performance will be degraded due to extensive context switching between the 12 builds. | -| 24 | 1 | 1 | 24 | 24 derivations can build at the same time, each using a single core. Never oversold, but derivations which require many cores will be very slow to compile. | -| 24 | 0 | 24 | 576 | 24 derivations can build at the same time, each using all the available cores of the machine. Very likely to be oversold, and very likely to suffer context switches. | - -It is up to the derivations' build script to respect host's requested -cores-per-build by following the value of the `NIX_BUILD_CORES` -environment variable. diff --git a/doc/manual/src/advanced-topics/diff-hook.md b/doc/manual/src/advanced-topics/diff-hook.md deleted file mode 100644 index 367de6d6d..000000000 --- a/doc/manual/src/advanced-topics/diff-hook.md +++ /dev/null @@ -1,123 +0,0 @@ -# Verifying Build Reproducibility - -You can use Lix's `diff-hook` setting to compare build results. Note -that this hook is only executed if the results differ; it is not used -for determining if the results are the same. - -For purposes of demonstration, we'll use the following Nix file, -`deterministic.nix` for testing: - -```nix -let - inherit (import {}) runCommand; -in { - stable = runCommand "stable" {} '' - touch $out - ''; - - unstable = runCommand "unstable" {} '' - echo $RANDOM > $out - ''; -} -``` - -Additionally, `nix.conf` contains: - - diff-hook = /etc/nix/my-diff-hook - run-diff-hook = true - -where `/etc/nix/my-diff-hook` is an executable file containing: - -```bash -#!/bin/sh -exec >&2 -echo "For derivation $3:" -/run/current-system/sw/bin/diff -r "$1" "$2" -``` - -The diff hook is executed by the same user and group who ran the build. -However, the diff hook does not have write access to the store path just -built. - -# Spot-Checking Build Determinism - -Verify a path which already exists in the Nix store by passing `--check` -to the build command. - -If the build passes and is deterministic, Lix will exit with a status -code of 0: - -```console -$ nix-build ./deterministic.nix --attr stable -this derivation will be built: - /nix/store/z98fasz2jqy9gs0xbvdj939p27jwda38-stable.drv -building '/nix/store/z98fasz2jqy9gs0xbvdj939p27jwda38-stable.drv'... -/nix/store/yyxlzw3vqaas7wfp04g0b1xg51f2czgq-stable - -$ nix-build ./deterministic.nix --attr stable --check -checking outputs of '/nix/store/z98fasz2jqy9gs0xbvdj939p27jwda38-stable.drv'... -/nix/store/yyxlzw3vqaas7wfp04g0b1xg51f2czgq-stable -``` - -If the build is not deterministic, Lix will exit with a status code of -1: - -```console -$ nix-build ./deterministic.nix --attr unstable -this derivation will be built: - /nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv -building '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv'... -/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable - -$ nix-build ./deterministic.nix --attr unstable --check -checking outputs of '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv'... -error: derivation '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv' may -not be deterministic: output '/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable' differs -``` - -In the Lix daemon's log, we will now see: - -``` -For derivation /nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv: -1c1 -< 8108 ---- -> 30204 -``` - -Using `--check` with `--keep-failed` will cause Lix to keep the second -build's output in a special, `.check` path: - -```console -$ nix-build ./deterministic.nix --attr unstable --check --keep-failed -checking outputs of '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv'... -note: keeping build directory '/tmp/nix-build-unstable.drv-0' -error: derivation '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv' may -not be deterministic: output '/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable' differs -from '/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable.check' -``` - -In particular, notice the -`/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable.check` output. Lix -has copied the build results to that directory where you can examine it. - -> []{#check-dirs-are-unregistered} **Note** -> -> Check paths are not protected against garbage collection, and this -> path will be deleted on the next garbage collection. -> -> The path is guaranteed to be alive for the duration of -> the `diff-hook`'s execution, but may be deleted any time after. -> -> If the comparison is performed as part of automated tooling, please -> use the diff-hook or author your tooling to handle the case where the -> build was not deterministic and also a check path does not exist. - -`--check` is only usable if the derivation has been built on the system -already. If the derivation has not been built Lix will fail with the -error: - - error: some outputs of '/nix/store/hzi1h60z2qf0nb85iwnpvrai3j2w7rr6-unstable.drv' - are not valid, so checking is not possible - -Run the build without `--check`, and then try with `--check` again. diff --git a/doc/manual/src/advanced-topics/distributed-builds.md b/doc/manual/src/advanced-topics/distributed-builds.md deleted file mode 100644 index 80443b53e..000000000 --- a/doc/manual/src/advanced-topics/distributed-builds.md +++ /dev/null @@ -1,159 +0,0 @@ -# Remote Builds - -Lix supports remote builds, where a local Lix installation can forward -Nix builds to other machines. This allows multiple builds to be -performed in parallel and allows Lix to perform multi-platform builds in -a semi-transparent way. For instance, if you perform a build for a -`x86_64-darwin` on an `i686-linux` machine, Lix can automatically -forward the build to a `x86_64-darwin` machine, if available. - -To forward a build to a remote machine, it’s required that the remote -machine is accessible via SSH and that it has Nix installed. You can -test whether connecting to the remote Nix instance works, e.g. - -```console -$ nix store ping --store ssh://mac -``` - -will try to connect to the machine named `mac`. It is possible to -specify an SSH identity file as part of the remote store URI, e.g. - -```console -$ nix store ping --store ssh://mac?ssh-key=/home/alice/my-key -``` - -Since builds should be non-interactive, the key should not have a -passphrase. Alternatively, you can load identities ahead of time into -`ssh-agent` or `gpg-agent`. - -If you get the error - -```console -bash: nix-store: command not found -error: cannot connect to 'mac' -``` - -then you need to ensure that the `PATH` of non-interactive login shells -contains Nix. - -> **Warning** -> -> If you are building via the Lix daemon (default on Linux and macOS), it is the Lix daemon user account (that is, `root`) that should have SSH access to a user (not necessarily `root`) on the remote machine. -> -> Furthermore, `root` needs to have the public host keys for the remote system in its `.ssh/known_hosts`. -> To add them to `known_hosts` for root, do `ssh-keyscan USER@HOST | sudo tee -a ~root/.ssh/known_hosts`. -> -> If you can’t or don’t want to configure `root` to be able to access the remote machine, you can use a private Nix store instead by passing e.g. `--store ~/my-nix` when running a Nix command from the local machine. - -The list of remote machines can be specified on the command line or in -the Lix configuration file. The former is convenient for testing. For -example, the following command allows you to build a derivation for -`x86_64-darwin` on a Linux machine: - -```console -$ uname -Linux - -$ nix build --impure \ - --expr '(with import { system = "x86_64-darwin"; }; runCommand "foo" {} "uname > $out")' \ - --builders 'ssh://mac x86_64-darwin' -[1/0/1 built, 0.0 MiB DL] building foo on ssh://mac - -$ cat ./result -Darwin -``` - -It is possible to specify multiple builders separated by a semicolon or -a newline, e.g. - -```console - --builders 'ssh://mac x86_64-darwin ; ssh://beastie x86_64-freebsd' -``` - -Each machine specification consists of the following elements, separated -by spaces. Only the first element is required. To leave a field at its -default, set it to `-`. - -1. The URI of the remote store in the format - `ssh://[username@]hostname`, e.g. `ssh://nix@mac` or `ssh://mac`. - For backward compatibility, `ssh://` may be omitted. The hostname - may be an alias defined in your `~/.ssh/config`. - -2. A comma-separated list of Nix platform type identifiers, such as - `x86_64-darwin`. It is possible for a machine to support multiple - platform types, e.g., `i686-linux,x86_64-linux`. If omitted, this - defaults to the local platform type. - -3. The SSH identity file to be used to log in to the remote machine. If - omitted, SSH will use its regular identities. - -4. The maximum number of builds that Lix will execute in parallel on - the machine. Typically this should be equal to the number of CPU - cores. For instance, the machine `itchy` in the example will execute - up to 8 builds in parallel. - -5. The “speed factor”, indicating the relative speed of the machine. If - there are multiple machines of the right type, Lix will prefer the - fastest, taking load into account. - -6. A comma-separated list of *supported features*. If a derivation has - the `requiredSystemFeatures` attribute, then Lix will only perform - the derivation on a machine that has the specified features. For - instance, the attribute - - ```nix - requiredSystemFeatures = [ "kvm" ]; - ``` - - will cause the build to be performed on a machine that has the `kvm` - feature. - -7. A comma-separated list of *mandatory features*. A machine will only - be used to build a derivation if all of the machine’s mandatory - features appear in the derivation’s `requiredSystemFeatures` - attribute. - -8. The (base64-encoded) public host key of the remote machine. If omitted, SSH - will use its regular known-hosts file. Specifically, the field is calculated - via `base64 -w0 /etc/ssh/ssh_host_ed25519_key.pub`. - -For example, the machine specification - - nix@scratchy.labs.cs.uu.nl i686-linux /home/nix/.ssh/id_scratchy_auto 8 1 kvm - nix@itchy.labs.cs.uu.nl i686-linux /home/nix/.ssh/id_scratchy_auto 8 2 - nix@poochie.labs.cs.uu.nl i686-linux /home/nix/.ssh/id_scratchy_auto 1 2 kvm benchmark - -specifies several machines that can perform `i686-linux` builds. -However, `poochie` will only do builds that have the attribute - -```nix -requiredSystemFeatures = [ "benchmark" ]; -``` - -or - -```nix -requiredSystemFeatures = [ "benchmark" "kvm" ]; -``` - -`itchy` cannot do builds that require `kvm`, but `scratchy` does support -such builds. For regular builds, `itchy` will be preferred over -`scratchy` because it has a higher speed factor. - -Remote builders can also be configured in `nix.conf`, e.g. - - builders = ssh://mac x86_64-darwin ; ssh://beastie x86_64-freebsd - -Finally, remote builders can be configured in a separate configuration -file included in `builders` via the syntax `@file`. For example, - - builders = @/etc/nix/machines - -causes the list of machines in `/etc/nix/machines` to be included. (This -is the default.) - -If you want the builders to use caches, you likely want to set the -option `builders-use-substitutes` in your local `nix.conf`. - -To build only on remote builders and disable building on the local -machine, you can use the option `--max-jobs 0`. diff --git a/doc/manual/src/advanced-topics/post-build-hook.md b/doc/manual/src/advanced-topics/post-build-hook.md deleted file mode 100644 index 508d945ae..000000000 --- a/doc/manual/src/advanced-topics/post-build-hook.md +++ /dev/null @@ -1,126 +0,0 @@ -# Using the `post-build-hook` - -# Implementation Caveats - -Here we use the post-build hook to upload to a binary cache. This is a -simple and working example, but it is not suitable for all use cases. - -The post build hook program runs after each executed build, and blocks -the build loop. The build loop exits if the hook program fails. - -Concretely, this implementation will make Lix slow or unusable when the -internet is slow or unreliable. - -A more advanced implementation might pass the store paths to a -user-supplied daemon or queue for processing the store paths outside of -the build loop. - -# Prerequisites - -This tutorial assumes you have [configured an S3-compatible binary -cache](../package-management/s3-substituter.md), and that the `root` -user's default AWS profile can upload to the bucket. - -# Set up a Signing Key - -Use `nix-store --generate-binary-cache-key` to create our public and -private signing keys. We will sign paths with the private key, and -distribute the public key for verifying the authenticity of the paths. - -```console -# nix-store --generate-binary-cache-key example-nix-cache-1 /etc/nix/key.private /etc/nix/key.public -# cat /etc/nix/key.public -example-nix-cache-1:1/cKDz3QCCOmwcztD2eV6Coggp6rqc9DGjWv7C0G+rM= -``` - -Then update [`nix.conf`](../command-ref/conf-file.md) on any machine that will access the cache. -Add the cache URL to [`substituters`](../command-ref/conf-file.md#conf-substituters) and the public key to [`trusted-public-keys`](../command-ref/conf-file.md#conf-trusted-public-keys): - - substituters = https://cache.nixos.org/ s3://example-nix-cache - trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= example-nix-cache-1:1/cKDz3QCCOmwcztD2eV6Coggp6rqc9DGjWv7C0G+rM= - -Machines that build for the cache must sign derivations using the private key. -On those machines, add the path to the key file to the [`secret-key-files`](../command-ref/conf-file.md#conf-secret-key-files) field in their [`nix.conf`](../command-ref/conf-file.md): - - secret-key-files = /etc/nix/key.private - -We will restart the Nix daemon in a later step. - -# Implementing the build hook - -Write the following script to `/etc/nix/upload-to-cache.sh`: - -```bash -#!/bin/sh - -set -eu -set -f # disable globbing -export IFS=' ' - -echo "Uploading paths" $OUT_PATHS -exec nix copy --to "s3://example-nix-cache" $OUT_PATHS -``` - -> **Note** -> -> The `$OUT_PATHS` variable is a space-separated list of Nix store -> paths. In this case, we expect and want the shell to perform word -> splitting to make each output path its own argument to `nix -> store sign`. Nix guarantees the paths will not contain any spaces, -> however a store path might contain glob characters. The `set -f` -> disables globbing in the shell. - -Then make sure the hook program is executable by the `root` user: - -```console -# chmod +x /etc/nix/upload-to-cache.sh -``` - -# Updating Lix Configuration - -Edit `/etc/nix/nix.conf` to run our hook, by adding the following -configuration snippet at the end: - - post-build-hook = /etc/nix/upload-to-cache.sh - -Then, restart the `nix-daemon`. - -# Testing - -Build any derivation, for example: - -```console -$ nix-build --expr '(import {}).writeText "example" (builtins.toString builtins.currentTime)' -this derivation will be built: - /nix/store/s4pnfbkalzy5qz57qs6yybna8wylkig6-example.drv -building '/nix/store/s4pnfbkalzy5qz57qs6yybna8wylkig6-example.drv'... -running post-build-hook '/home/grahamc/projects/github.com/NixOS/nix/post-hook.sh'... -post-build-hook: Signing paths /nix/store/ibcyipq5gf91838ldx40mjsp0b8w9n18-example -post-build-hook: Uploading paths /nix/store/ibcyipq5gf91838ldx40mjsp0b8w9n18-example -/nix/store/ibcyipq5gf91838ldx40mjsp0b8w9n18-example -``` - -Then delete the path from the store, and try substituting it from the -binary cache: - -```console -$ rm ./result -$ nix-store --delete /nix/store/ibcyipq5gf91838ldx40mjsp0b8w9n18-example -``` - -Now, copy the path back from the cache: - -```console -$ nix-store --realise /nix/store/ibcyipq5gf91838ldx40mjsp0b8w9n18-example -copying path '/nix/store/m8bmqwrch6l3h8s0k3d673xpmipcdpsa-example from 's3://example-nix-cache'... -warning: you did not specify '--add-root'; the result might be removed by the garbage collector -/nix/store/m8bmqwrch6l3h8s0k3d673xpmipcdpsa-example -``` - -# Conclusion - -We now have a Lix installation configured to automatically sign and -upload every local build to a remote binary cache. - -Before deploying this to production, be sure to consider the -[implementation caveats](#implementation-caveats). diff --git a/doc/manual/src/architecture/architecture.md b/doc/manual/src/architecture/architecture.md deleted file mode 100644 index 9fc232ea9..000000000 --- a/doc/manual/src/architecture/architecture.md +++ /dev/null @@ -1,114 +0,0 @@ -# Architecture - -This chapter describes how Nix works. -It should help users understand why Lix behaves as it does, and it should help developers understand how to modify Lix and how to write similar tools. - -## Overview - -Nix consists of [hierarchical layers]. - -[hierarchical layers]: https://en.wikipedia.org/wiki/Multitier_architecture#Layers - -The following [concept map] shows its main components (rectangles), the objects they operate on (rounded rectangles), and their interactions (connecting phrases): - -[concept map]: https://en.wikipedia.org/wiki/Concept_map - -``` - - .----------------. - | Nix expression |----------. - '----------------' | - | passed to - | | -+----------|-------------------|--------------------------------+ -| Nix impl.| V | -| (Lix) | +-------------------------+ | -| | | commmand line interface |------. | -| | +-------------------------+ | | -| | | | | -| evaluated by calls manages | -| | | | | -| | V | | -| | +--------------------+ | | -| '-------->| language evaluator | | | -| +--------------------+ | | -| | | | -| produces | | -| | V | -| +----------------------------|------------------------------+ | -| | store | | | -| | referenced by V builds | | -| | .-------------. .------------. .--------------. | | -| | | build input |----->| build plan |----->| build result | | | -| | '-------------' '------------' '--------------' | | -| +-------------------------------------------------|---------+ | -+---------------------------------------------------|-----------+ - | - represented as - | - V - .---------------. - | file | - '---------------' -``` - -At the top is the [command line interface](../command-ref/command-ref.md) that drives the underlying layers. - -The [Nix language](../language/index.md) evaluator transforms Nix expressions into self-contained *build plans*, which are used to derive *build results* from referenced *build inputs*. - -The command line interface and Nix expressions are what users deal with most. - -> **Note** -> The Nix language itself does not have a notion of *packages* or *configurations*. -> As far as we are concerned here, the inputs and results of a build plan are just data. - -Underlying the command line interface and the Nix language evaluator is the [Nix store](../glossary.md#gloss-store), a mechanism to keep track of build plans, data, and references between them. -It can also execute build plans to produce new data, which are made available to the operating system as files. - -A build plan itself is a series of *build tasks*, together with their build inputs. - -> **Important** -> A build task in Nix is called [derivation](../glossary.md#gloss-derivation). - -Each build task has a special build input executed as *build instructions* in order to perform the build. -The result of a build task can be input to another build task. - -The following [data flow diagram] shows a build plan for illustration. -Build inputs used as instructions to a build task are marked accordingly: - -[data flow diagram]: https://en.wikipedia.org/wiki/Data-flow_diagram - -``` -+--------------------------------------------------------------------+ -| build plan | -| | -| .-------------. | -| | build input |---------. | -| '-------------' | | -| instructions | -| | | -| v | -| .-------------. .----------. | -| | build input |-->( build task )-------. | -| '-------------' '----------' | | -| instructions | -| | | -| v | -| .-------------. .----------. .--------------. | -| | build input |---------. ( build task )--->| build result | | -| '-------------' | '----------' '--------------' | -| instructions ^ | -| | | | -| v | | -| .-------------. .----------. | | -| | build input |-->( build task )-------' | -| '-------------' '----------' | -| ^ | -| | | -| | | -| .-------------. | | -| | build input |---------' | -| '-------------' | -| | -+--------------------------------------------------------------------+ -``` diff --git a/doc/manual/src/architecture/file-system-object.md b/doc/manual/src/architecture/file-system-object.md deleted file mode 100644 index 8bc02de09..000000000 --- a/doc/manual/src/architecture/file-system-object.md +++ /dev/null @@ -1,64 +0,0 @@ -# File System Object - -Nix implementations use a simplified model of the file system, which consists of file system objects. -Every file system object is one of the following: - - - File - - - A possibly empty sequence of bytes for contents - - A single boolean representing the [executable](https://en.m.wikipedia.org/wiki/File-system_permissions#Permissions) permission - - - Directory - - Mapping of names to child file system objects - - - [Symbolic link](https://en.m.wikipedia.org/wiki/Symbolic_link) - - An arbitrary string. - Nix implementations do not assign any semantics to symbolic links. - -File system objects and their children form a tree. -A bare file or symlink can be a root file system object. - -Nix does not encode any other file system notions such as [hard links](https://en.m.wikipedia.org/wiki/Hard_link), [permissions](https://en.m.wikipedia.org/wiki/File-system_permissions), timestamps, or other metadata. - -## Examples of file system objects - -A plain file: - -``` -50 B, executable: false -``` - -An executable file: - -``` -122 KB, executable: true -``` - -A symlink: - -``` --> /usr/bin/sh -``` - -A directory with contents: - -``` -├── bin -│   └── hello: 35 KB, executable: true -└── share - ├── info - │   └── hello.info: 36 KB, executable: false - └── man - └── man1 - └── hello.1.gz: 790 B, executable: false -``` - -A directory that contains a symlink and other directories: - -``` -├── bin -> share/go/bin -├── nix-support/ -└── share/ -``` diff --git a/doc/manual/src/command-ref/command-ref.md b/doc/manual/src/command-ref/command-ref.md deleted file mode 100644 index c79f8e0ba..000000000 --- a/doc/manual/src/command-ref/command-ref.md +++ /dev/null @@ -1,2 +0,0 @@ -This section lists commands and options that you can use when you work -with Lix. diff --git a/doc/manual/src/command-ref/conf-file.md b/doc/manual/src/command-ref/conf-file.md deleted file mode 100644 index fda6ebde7..000000000 --- a/doc/manual/src/command-ref/conf-file.md +++ /dev/null @@ -1,71 +0,0 @@ -# Name - -`nix.conf` - Lix configuration file - -# Description - -Lix supports a variety of configuration settings, which are read from configuration files or taken as command line flags. - -## Configuration file - -By default Lix reads settings from the following places, in that order: - -1. The system-wide configuration file `sysconfdir/nix/nix.conf` (i.e. `/etc/nix/nix.conf` on most systems), or `$NIX_CONF_DIR/nix.conf` if [`NIX_CONF_DIR`](./env-common.md#env-NIX_CONF_DIR) is set. - - Values loaded in this file are not forwarded to the Nix daemon. - The client assumes that the daemon has already loaded them. - -1. If [`NIX_USER_CONF_FILES`](./env-common.md#env-NIX_USER_CONF_FILES) is set, then each path separated by `:` will be loaded in reverse order. - - Otherwise it will look for `nix/nix.conf` files in `XDG_CONFIG_DIRS` and `XDG_CONFIG_HOME`. - If unset, `XDG_CONFIG_DIRS` defaults to `/etc/xdg`, and `XDG_CONFIG_HOME` defaults to `$HOME/.config` as per [XDG Base Directory Specification](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html). - -1. If [`NIX_CONFIG`](./env-common.md#env-NIX_CONFIG) is set, its contents are treated as the contents of a configuration file. - -### File format - -Configuration files consist of `name = value` pairs, one per line. -Comments start with a `#` character. - -Example: - -``` -keep-outputs = true # Nice for developers -keep-derivations = true # Idem -``` - -Other files can be included with a line like `include `, where `` is interpreted relative to the current configuration file. -A missing file is an error unless `!include` is used instead. - -A configuration setting usually overrides any previous value. -However, for settings that take a list of items, you can prefix the name of the setting by `extra-` to *append* to the previous value. - -For instance, - -``` -substituters = a b -extra-substituters = c d -``` - -defines the `substituters` setting to be `a b c d`. - -Unknown option names are not an error, and are simply ignored with a warning. - -## Command line flags - -Configuration options can be set on the command line, overriding the values set in the [configuration file](#configuration-file): - -- Every configuration setting has corresponding command line flag (e.g. `--max-jobs 16`). - Boolean settings do not need an argument, and can be explicitly disabled with the `no-` prefix (e.g. `--keep-failed` and `--no-keep-failed`). - - Unknown option names are invalid flags (unless there is already a flag with that name), and are rejected with an error. - -- The flag `--option ` is interpreted exactly like a ` = ` in a setting file. - - Unknown option names are ignored with a warning. - -The `extra-` prefix is supported for settings that take a list of items (e.g. `--extra-trusted users alice` or `--option extra-trusted-users alice`). - -# Available settings - -{{#include @generated@/command-ref/conf-file.md}} diff --git a/doc/manual/src/command-ref/env-common.md b/doc/manual/src/command-ref/env-common.md deleted file mode 100644 index ea8420c72..000000000 --- a/doc/manual/src/command-ref/env-common.md +++ /dev/null @@ -1,124 +0,0 @@ -# Common Environment Variables - -Most commands in Lix interpret the following environment variables: - - - [`IN_NIX_SHELL`](#env-IN_NIX_SHELL)\ - Indicator that tells if the current environment was set up by - `nix-shell`. It can have the values `pure` or `impure`. - - - [`NIX_PATH`](#env-NIX_PATH)\ - A colon-separated list of directories used to look up the location of Nix - expressions using [paths](@docroot@/language/values.md#type-path) - enclosed in angle brackets (i.e., ``), - e.g. `/home/eelco/Dev:/etc/nixos`. It can be extended using the - [`-I` option](@docroot@/command-ref/opt-common.md#opt-I). - - If `NIX_PATH` is not set at all, Lix will fall back to the following list in [impure](@docroot@/command-ref/conf-file.md#conf-pure-eval) and [unrestricted](@docroot@/command-ref/conf-file.md#conf-restrict-eval) evaluation mode: - - 1. `$HOME/.nix-defexpr/channels` - 2. `nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixpkgs` - 3. `/nix/var/nix/profiles/per-user/root/channels` - - If `NIX_PATH` is set to an empty string, resolving search paths will always fail. - For example, attempting to use `` will produce: - - error: file 'nixpkgs' was not found in the Nix search path - - - [`NIX_IGNORE_SYMLINK_STORE`](#env-NIX_IGNORE_SYMLINK_STORE)\ - Normally, the Nix store directory (typically `/nix/store`) is not - allowed to contain any symlink components. This is to prevent - “impure” builds. Builders sometimes “canonicalise” paths by - resolving all symlink components. Thus, builds on different machines - (with `/nix/store` resolving to different locations) could yield - different results. This is generally not a problem, except when - builds are deployed to machines where `/nix/store` resolves - differently. If you are sure that you’re not going to do that, you - can set `NIX_IGNORE_SYMLINK_STORE` to `1`. - - Note that if you’re symlinking the Nix store so that you can put it - on another file system than the root file system, on Linux you’re - better off using `bind` mount points, e.g., - - ```console - $ mkdir /nix - $ mount -o bind /mnt/otherdisk/nix /nix - ``` - - Consult the mount 8 manual page for details. - - - [`NIX_STORE_DIR`](#env-NIX_STORE_DIR)\ - Overrides the location of the Nix store (default `prefix/store`). - - - [`NIX_DATA_DIR`](#env-NIX_DATA_DIR)\ - Overrides the location of the Lix static data directory (default - `prefix/share`). - - - [`NIX_LOG_DIR`](#env-NIX_LOG_DIR)\ - Overrides the location of the Lix log directory (default - `prefix/var/log/nix`). - - - [`NIX_STATE_DIR`](#env-NIX_STATE_DIR)\ - Overrides the location of the Lix state directory (default - `prefix/var/nix`). - - - [`NIX_CONF_DIR`](#env-NIX_CONF_DIR)\ - Overrides the location of the system Lix configuration directory - (default `prefix/etc/nix`). - - - [`NIX_CONFIG`](#env-NIX_CONFIG)\ - Applies settings from Lix configuration from the environment. - The content is treated as if it was read from a Lix configuration file. - Settings are separated by the newline character. - - - [`NIX_USER_CONF_FILES`](#env-NIX_USER_CONF_FILES)\ - Overrides the location of the Lix user configuration files to load from. - - The default are the locations according to the [XDG Base Directory Specification]. - See the [XDG Base Directories](#xdg-base-directories) sub-section for details. - - The variable is treated as a list separated by the `:` token. - - - [`TMPDIR`](#env-TMPDIR)\ - Use the specified directory to store temporary files. In particular, - this includes temporary build directories; these can take up - substantial amounts of disk space. The default is `/tmp`. - - - [`NIX_REMOTE`](#env-NIX_REMOTE)\ - This variable should be set to `daemon` if you want to use the Lix - daemon to execute Nix operations. This is necessary in [multi-user - Nix installations](@docroot@/installation/multi-user.md). If the Lix - daemon's Unix socket is at some non-standard path, this variable - should be set to `unix://path/to/socket`. Otherwise, it should be - left unset. - - - [`NIX_SHOW_STATS`](#env-NIX_SHOW_STATS)\ - If set to `1`, Lix will print some evaluation statistics, such as - the number of values allocated. - - - [`NIX_COUNT_CALLS`](#env-NIX_COUNT_CALLS)\ - If set to `1`, Lix will print how often functions were called during - Nix expression evaluation. This is useful for profiling your Nix - expressions. - - - [`GC_INITIAL_HEAP_SIZE`](#env-GC_INITIAL_HEAP_SIZE)\ - If Nix has been configured to use the Boehm garbage collector, this - variable sets the initial size of the heap in bytes. It defaults to - 384 MiB. Setting it to a low value reduces memory consumption, but - will increase runtime due to the overhead of garbage collection. - -## XDG Base Directories - -Lix follows the [XDG Base Directory Specification]. - -For backwards compatibility, commands in Lix will follow the standard only when [`use-xdg-base-directories`] is enabled. -[New Nix commands](@docroot@/command-ref/new-cli/nix.md) (experimental) conform to the standard by default. - -The following environment variables are used to determine locations of various state and configuration files: - -- `XDG_CONFIG_HOME` (default `~/.config`) -- `XDG_STATE_HOME` (default `~/.local/state`) -- `XDG_CACHE_HOME` (default `~/.cache`) - - -[XDG Base Directory Specification]: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html -[`use-xdg-base-directories`]: @docroot@/command-ref/conf-file.md#conf-use-xdg-base-directories diff --git a/doc/manual/src/command-ref/experimental-commands.md b/doc/manual/src/command-ref/experimental-commands.md deleted file mode 100644 index 286ddc6d6..000000000 --- a/doc/manual/src/command-ref/experimental-commands.md +++ /dev/null @@ -1,8 +0,0 @@ -# Experimental Commands - -This section lists [experimental commands](@docroot@/contributing/experimental-features.md#xp-feature-nix-command). - -> **Warning** -> -> These commands may be removed in the future, or their syntax may -> change in incompatible ways. diff --git a/doc/manual/src/command-ref/files.md b/doc/manual/src/command-ref/files.md deleted file mode 100644 index e2d08923b..000000000 --- a/doc/manual/src/command-ref/files.md +++ /dev/null @@ -1,4 +0,0 @@ -# Files - -This section lists configuration files that you can use when you work -with Lix. diff --git a/doc/manual/src/command-ref/files/channels.md b/doc/manual/src/command-ref/files/channels.md deleted file mode 100644 index 7b1f27128..000000000 --- a/doc/manual/src/command-ref/files/channels.md +++ /dev/null @@ -1,26 +0,0 @@ -## Channels - -A directory containing symlinks to Nix channels, managed by [`nix-channel`]: - -- `$XDG_STATE_HOME/nix/profiles/channels` for regular users -- `$NIX_STATE_DIR/profiles/per-user/root/channels` for `root` - -[`nix-channel`] uses a [profile](@docroot@/command-ref/files/profiles.md) to store channels. -This profile contains symlinks to the contents of those channels. - -## Subscribed channels - -The list of subscribed channels is stored in - -- `~/.nix-channels` -- `$XDG_STATE_HOME/nix/channels` if [`use-xdg-base-directories`] is set to `true` - -in the following format: - -``` - -... -``` - -[`nix-channel`]: @docroot@/command-ref/nix-channel.md -[`use-xdg-base-directories`]: @docroot@/command-ref/conf-file.md#conf-use-xdg-base-directories diff --git a/doc/manual/src/command-ref/files/default-nix-expression.md b/doc/manual/src/command-ref/files/default-nix-expression.md deleted file mode 100644 index 620f7035c..000000000 --- a/doc/manual/src/command-ref/files/default-nix-expression.md +++ /dev/null @@ -1,52 +0,0 @@ -## Default Nix expression - -The source for the default [Nix expressions](@docroot@/language/index.md) used by [`nix-env`]: - -- `~/.nix-defexpr` -- `$XDG_STATE_HOME/nix/defexpr` if [`use-xdg-base-directories`] is set to `true`. - -It is loaded as follows: - -- If the default expression is a file, it is loaded as a Nix expression. -- If the default expression is a directory containing a `default.nix` file, that `default.nix` file is loaded as a Nix expression. -- If the default expression is a directory without a `default.nix` file, then its contents (both files and subdirectories) are loaded as Nix expressions. - The expressions are combined into a single attribute set, each expression under an attribute with the same name as the original file or subdirectory. - Subdirectories without a `default.nix` file are traversed recursively in search of more Nix expressions, but the names of these intermediate directories are not added to the attribute paths of the default Nix expression. - -Then, the resulting expression is interpreted like this: - -- If the expression is an attribute set, it is used as the default Nix expression. -- If the expression is a function, an empty set is passed as argument and the return value is used as the default Nix expression. - - -For example, if the default expression contains two files, `foo.nix` and `bar.nix`, then the default Nix expression will be equivalent to - -```nix -{ - foo = import ~/.nix-defexpr/foo.nix; - bar = import ~/.nix-defexpr/bar.nix; -} -``` - -The file [`manifest.nix`](@docroot@/command-ref/files/manifest.nix.md) is always ignored. - -The command [`nix-channel`] places a symlink to the user's current [channels profile](@docroot@/command-ref/files/channels.md) in this directory. -This makes all subscribed channels available as attributes in the default expression. - -## User channel link - -A symlink that ensures that [`nix-env`] can find your channels: - -- `~/.nix-defexpr/channels` -- `$XDG_STATE_HOME/defexpr/channels` if [`use-xdg-base-directories`] is set to `true`. - -This symlink points to: - -- `$XDG_STATE_HOME/profiles/channels` for regular users -- `$NIX_STATE_DIR/profiles/per-user/root/channels` for `root` - -In a multi-user installation, you may also have `~/.nix-defexpr/channels_root`, which links to the channels of the root user.[`nix-env`]: ../nix-env.md - -[`nix-env`]: @docroot@/command-ref/nix-env.md -[`nix-channel`]: @docroot@/command-ref/nix-channel.md -[`use-xdg-base-directories`]: @docroot@/command-ref/conf-file.md#conf-use-xdg-base-directories diff --git a/doc/manual/src/command-ref/files/manifest.json.md b/doc/manual/src/command-ref/files/manifest.json.md deleted file mode 100644 index bcfe7373d..000000000 --- a/doc/manual/src/command-ref/files/manifest.json.md +++ /dev/null @@ -1,45 +0,0 @@ -## `manifest.json` - -The manifest file records the provenance of the packages that are installed in a [profile](./profiles.md) managed by [`nix profile`](@docroot@/command-ref/new-cli/nix3-profile.md) (experimental). - -Here is an example of what the file might look like after installing `zoom-us` from Nixpkgs: - -```json -{ - "version": 1, - "elements": [ - { - "active": true, - "attrPath": "legacyPackages.x86_64-linux.zoom-us", - "originalUrl": "flake:nixpkgs", - "storePaths": [ - "/nix/store/wbhg2ga8f3h87s9h5k0slxk0m81m4cxl-zoom-us-5.3.469451.0927" - ], - "uri": "github:NixOS/nixpkgs/13d0c311e3ae923a00f734b43fd1d35b47d8943a" - }, - … - ] -} -``` - -Each object in the array `elements` denotes an installed package and -has the following fields: - -* `originalUrl`: The [flake reference](@docroot@/command-ref/new-cli/nix3-flake.md) specified by - the user at the time of installation (e.g. `nixpkgs`). This is also - the flake reference that will be used by `nix profile upgrade`. - -* `uri`: The locked flake reference to which `originalUrl` resolved. - -* `attrPath`: The flake output attribute that provided this - package. Note that this is not necessarily the attribute that the - user specified, but the one resulting from applying the default - attribute paths and prefixes; for instance, `hello` might resolve to - `packages.x86_64-linux.hello` and the empty string to - `packages.x86_64-linux.default`. - -* `storePath`: The paths in the Nix store containing the package. - -* `active`: Whether the profile contains symlinks to the files of this - package. If set to false, the package is kept in the Nix store, but - is not "visible" in the profile's symlink tree. diff --git a/doc/manual/src/command-ref/files/manifest.nix.md b/doc/manual/src/command-ref/files/manifest.nix.md deleted file mode 100644 index d7d1b605b..000000000 --- a/doc/manual/src/command-ref/files/manifest.nix.md +++ /dev/null @@ -1,128 +0,0 @@ -## `manifest.nix` - -The manifest file records the provenance of the packages that are installed in a [profile](./profiles.md) managed by [`nix-env`](@docroot@/command-ref/nix-env.md). - -Here is an example of how this file might look like after installing `hello` from Nixpkgs: - -```nix -[{ - meta = { - available = true; - broken = false; - changelog = - "https://git.savannah.gnu.org/cgit/hello.git/plain/NEWS?h=v2.12.1"; - description = "A program that produces a familiar, friendly greeting"; - homepage = "https://www.gnu.org/software/hello/manual/"; - insecure = false; - license = { - deprecated = false; - free = true; - fullName = "GNU General Public License v3.0 or later"; - redistributable = true; - shortName = "gpl3Plus"; - spdxId = "GPL-3.0-or-later"; - url = "https://spdx.org/licenses/GPL-3.0-or-later.html"; - }; - longDescription = '' - GNU Hello is a program that prints "Hello, world!" when you run it. - It is fully customizable. - ''; - maintainers = [{ - email = "edolstra+nixpkgs@gmail.com"; - github = "edolstra"; - githubId = 1148549; - name = "Eelco Dolstra"; - }]; - name = "hello-2.12.1"; - outputsToInstall = [ "out" ]; - platforms = [ - "i686-cygwin" - "x86_64-cygwin" - "x86_64-darwin" - "i686-darwin" - "aarch64-darwin" - "armv7a-darwin" - "i686-freebsd13" - "x86_64-freebsd13" - "aarch64-genode" - "i686-genode" - "x86_64-genode" - "x86_64-solaris" - "js-ghcjs" - "aarch64-linux" - "armv5tel-linux" - "armv6l-linux" - "armv7a-linux" - "armv7l-linux" - "i686-linux" - "m68k-linux" - "microblaze-linux" - "microblazeel-linux" - "mipsel-linux" - "mips64el-linux" - "powerpc64-linux" - "powerpc64le-linux" - "riscv32-linux" - "riscv64-linux" - "s390-linux" - "s390x-linux" - "x86_64-linux" - "mmix-mmixware" - "aarch64-netbsd" - "armv6l-netbsd" - "armv7a-netbsd" - "armv7l-netbsd" - "i686-netbsd" - "m68k-netbsd" - "mipsel-netbsd" - "powerpc-netbsd" - "riscv32-netbsd" - "riscv64-netbsd" - "x86_64-netbsd" - "aarch64_be-none" - "aarch64-none" - "arm-none" - "armv6l-none" - "avr-none" - "i686-none" - "microblaze-none" - "microblazeel-none" - "msp430-none" - "or1k-none" - "m68k-none" - "powerpc-none" - "powerpcle-none" - "riscv32-none" - "riscv64-none" - "rx-none" - "s390-none" - "s390x-none" - "vc4-none" - "x86_64-none" - "i686-openbsd" - "x86_64-openbsd" - "x86_64-redox" - "wasm64-wasi" - "wasm32-wasi" - "x86_64-windows" - "i686-windows" - ]; - position = - "/nix/store/7niq32w715567hbph0q13m5lqna64c1s-nixos-unstable.tar.gz/nixos-unstable.tar.gz/pkgs/applications/misc/hello/default.nix:34"; - unfree = false; - unsupported = false; - }; - name = "hello-2.12.1"; - out = { - outPath = "/nix/store/260q5867crm1xjs4khgqpl6vr9kywql1-hello-2.12.1"; - }; - outPath = "/nix/store/260q5867crm1xjs4khgqpl6vr9kywql1-hello-2.12.1"; - outputs = [ "out" ]; - system = "x86_64-linux"; - type = "derivation"; -}] -``` - -Each element in this list corresponds to an installed package. -It incorporates some attributes of the original derivation, including `meta`, `name`, `out`, `outPath`, `outputs`, `system`. -This information is used by Nix for querying and updating the package. diff --git a/doc/manual/src/command-ref/files/profiles.md b/doc/manual/src/command-ref/files/profiles.md deleted file mode 100644 index a6b679e34..000000000 --- a/doc/manual/src/command-ref/files/profiles.md +++ /dev/null @@ -1,74 +0,0 @@ -## Profiles - -A directory that contains links to profiles managed by [`nix-env`] and [`nix profile`]: - -- `$XDG_STATE_HOME/nix/profiles` for regular users -- `$NIX_STATE_DIR/profiles/per-user/root` if the user is `root` - -A profile is a directory of symlinks to files in the Nix store. - -### Filesystem layout - -Profiles are versioned as follows. When using a profile named *path*, *path* is a symlink to *path*`-`*N*`-link`, where *N* is the version of the profile. -In turn, *path*`-`*N*`-link` is a symlink to a path in the Nix store. -For example: - -```console -$ ls -l ~alice/.local/state/nix/profiles/profile* -lrwxrwxrwx 1 alice users 14 Nov 25 14:35 /home/alice/.local/state/nix/profiles/profile -> profile-7-link -lrwxrwxrwx 1 alice users 51 Oct 28 16:18 /home/alice/.local/state/nix/profiles/profile-5-link -> /nix/store/q69xad13ghpf7ir87h0b2gd28lafjj1j-profile -lrwxrwxrwx 1 alice users 51 Oct 29 13:20 /home/alice/.local/state/nix/profiles/profile-6-link -> /nix/store/6bvhpysd7vwz7k3b0pndn7ifi5xr32dg-profile -lrwxrwxrwx 1 alice users 51 Nov 25 14:35 /home/alice/.local/state/nix/profiles/profile-7-link -> /nix/store/mp0x6xnsg0b8qhswy6riqvimai4gm677-profile -``` - -Each of these symlinks is a root for the Lix garbage collector. - -The contents of the store path corresponding to each version of the -profile is a tree of symlinks to the files of the installed packages, -e.g. - -```console -$ ll -R ~eelco/.local/state/nix/profiles/profile-7-link/ -/home/eelco/.local/state/nix/profiles/profile-7-link/: -total 20 -dr-xr-xr-x 2 root root 4096 Jan 1 1970 bin --r--r--r-- 2 root root 1402 Jan 1 1970 manifest.nix -dr-xr-xr-x 4 root root 4096 Jan 1 1970 share - -/home/eelco/.local/state/nix/profiles/profile-7-link/bin: -total 20 -lrwxrwxrwx 5 root root 79 Jan 1 1970 chromium -> /nix/store/ijm5k0zqisvkdwjkc77mb9qzb35xfi4m-chromium-86.0.4240.111/bin/chromium -lrwxrwxrwx 7 root root 87 Jan 1 1970 spotify -> /nix/store/w9182874m1bl56smps3m5zjj36jhp3rn-spotify-1.1.26.501.gbe11e53b-15/bin/spotify -lrwxrwxrwx 3 root root 79 Jan 1 1970 zoom-us -> /nix/store/wbhg2ga8f3h87s9h5k0slxk0m81m4cxl-zoom-us-5.3.469451.0927/bin/zoom-us - -/home/eelco/.local/state/nix/profiles/profile-7-link/share/applications: -total 12 -lrwxrwxrwx 4 root root 120 Jan 1 1970 chromium-browser.desktop -> /nix/store/4cf803y4vzfm3gyk3vzhzb2327v0kl8a-chromium-unwrapped-86.0.4240.111/share/applications/chromium-browser.desktop -lrwxrwxrwx 7 root root 110 Jan 1 1970 spotify.desktop -> /nix/store/w9182874m1bl56smps3m5zjj36jhp3rn-spotify-1.1.26.501.gbe11e53b-15/share/applications/spotify.desktop -lrwxrwxrwx 3 root root 107 Jan 1 1970 us.zoom.Zoom.desktop -> /nix/store/wbhg2ga8f3h87s9h5k0slxk0m81m4cxl-zoom-us-5.3.469451.0927/share/applications/us.zoom.Zoom.desktop - -… -``` - -Each profile version contains a manifest file: -- [`manifest.nix`](@docroot@/command-ref/files/manifest.nix.md) used by [`nix-env`](@docroot@/command-ref/nix-env.md). -- [`manifest.json`](@docroot@/command-ref/files/manifest.json.md) used by [`nix profile`](@docroot@/command-ref/new-cli/nix3-profile.md) (experimental). - -## User profile link - -A symbolic link to the user's current profile: - -- `~/.nix-profile` -- `$XDG_STATE_HOME/nix/profile` if [`use-xdg-base-directories`] is set to `true`. - -By default, this symlink points to: - -- `$XDG_STATE_HOME/nix/profiles/profile` for regular users -- `$NIX_STATE_DIR/profiles/per-user/root/profile` for `root` - -The `PATH` environment variable should include `/bin` subdirectory of the profile link (e.g. `~/.nix-profile/bin`) for the user environment to be visible to the user. -The [installer](@docroot@/installation/installing-binary.md) sets this up by default, unless you enable [`use-xdg-base-directories`]. - -[`nix-env`]: @docroot@/command-ref/nix-env.md -[`nix profile`]: @docroot@/command-ref/new-cli/nix3-profile.md -[`use-xdg-base-directories`]: @docroot@/command-ref/conf-file.md#conf-use-xdg-base-directories diff --git a/doc/manual/src/command-ref/main-commands.md b/doc/manual/src/command-ref/main-commands.md deleted file mode 100644 index 0c1ca4fa1..000000000 --- a/doc/manual/src/command-ref/main-commands.md +++ /dev/null @@ -1,4 +0,0 @@ -# Main Commands - -This section lists commands and options that you can use when you work -with Lix. diff --git a/doc/manual/src/command-ref/meson.build b/doc/manual/src/command-ref/meson.build deleted file mode 100644 index 03d5f0a9c..000000000 --- a/doc/manual/src/command-ref/meson.build +++ /dev/null @@ -1,66 +0,0 @@ -xp_features_json = custom_target( - command : [nix, '__dump-xp-features'], - capture : true, - output : 'xp-features.json', -) - -experimental_features_shortlist_md = custom_target( - command : nix_eval_for_docs + [ - '--expr', - 'import @INPUT0@ (builtins.fromJSON (builtins.readFile @INPUT1@))', - ], - input : [ - '../../generate-xp-features-shortlist.nix', - xp_features_json, - ], - capture : true, - output : 'experimental-features-shortlist.md', - env : nix_env_for_docs, -) - -# Intermediate step for manpage generation. -# This splorks the output of generate-manpage.nix as JSON, -# which gets written as a directory tree below. -nix3_cli_files_json = custom_target( - command : nix_eval_for_docs_common + [ - '--json', - '--expr', - 'import @INPUT0@ true (builtins.readFile @INPUT1@)', - ], - input : [ - '../../generate-manpage.nix', - nix3_cli_json, - ], - capture : true, - output : 'new-cli.json', - env : nix_env_for_docs, -) -nix3_cli_files = custom_target( - command : [ - python, - '@INPUT0@', - '-i', '@INPUT1@', - '-o', '@OUTPUT@', - ], - input : [ - '../../json-to-tree.py', - nix3_cli_files_json, - ], - output : 'new-cli', -) - -conf_file_md = custom_target( - command : [ - nix_eval_for_docs, - '--expr', - '(import @INPUT0@).showSettings { inlineHTML = true; } (builtins.fromJSON (builtins.readFile @INPUT1@))', - ], - capture : true, - input : [ - '../../utils.nix', - conf_file_json, - experimental_features_shortlist_md, - ], - output : 'conf-file.md', - env : nix_env_for_docs, -) diff --git a/doc/manual/src/command-ref/new-cli/nix.md b/doc/manual/src/command-ref/new-cli/nix.md deleted file mode 100644 index 586800c40..000000000 --- a/doc/manual/src/command-ref/new-cli/nix.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-build.md b/doc/manual/src/command-ref/new-cli/nix3-build.md deleted file mode 100644 index 08d067501..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-build.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-build.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-bundle.md b/doc/manual/src/command-ref/new-cli/nix3-bundle.md deleted file mode 100644 index ebfcca2f4..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-bundle.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-bundle.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-config-show.md b/doc/manual/src/command-ref/new-cli/nix3-config-show.md deleted file mode 100644 index a39cd13e9..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-config-show.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-config-show.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-config.md b/doc/manual/src/command-ref/new-cli/nix3-config.md deleted file mode 100644 index ba824c7bc..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-config.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-config.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-copy.md b/doc/manual/src/command-ref/new-cli/nix3-copy.md deleted file mode 100644 index 29fefff59..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-copy.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-copy.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-daemon.md b/doc/manual/src/command-ref/new-cli/nix3-daemon.md deleted file mode 100644 index a0c0fd02e..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-daemon.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-daemon.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-derivation-add.md b/doc/manual/src/command-ref/new-cli/nix3-derivation-add.md deleted file mode 100644 index 4ec3ff16c..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-derivation-add.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-derivation-add.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-derivation-show.md b/doc/manual/src/command-ref/new-cli/nix3-derivation-show.md deleted file mode 100644 index 8cf5dbe0a..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-derivation-show.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-derivation-show.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-derivation.md b/doc/manual/src/command-ref/new-cli/nix3-derivation.md deleted file mode 100644 index 3a80ebbb5..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-derivation.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-derivation.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-develop.md b/doc/manual/src/command-ref/new-cli/nix3-develop.md deleted file mode 100644 index 55cb03987..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-develop.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-develop.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-doctor.md b/doc/manual/src/command-ref/new-cli/nix3-doctor.md deleted file mode 100644 index f6e0b401a..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-doctor.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-doctor.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-edit.md b/doc/manual/src/command-ref/new-cli/nix3-edit.md deleted file mode 100644 index a841f2456..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-edit.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-edit.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-eval.md b/doc/manual/src/command-ref/new-cli/nix3-eval.md deleted file mode 100644 index 16ac2517e..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-eval.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-eval.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-archive.md b/doc/manual/src/command-ref/new-cli/nix3-flake-archive.md deleted file mode 100644 index 5e4cdb1b2..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-archive.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-archive.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-check.md b/doc/manual/src/command-ref/new-cli/nix3-flake-check.md deleted file mode 100644 index 677c964aa..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-check.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-check.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-clone.md b/doc/manual/src/command-ref/new-cli/nix3-flake-clone.md deleted file mode 100644 index be53e26ce..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-clone.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-clone.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-info.md b/doc/manual/src/command-ref/new-cli/nix3-flake-info.md deleted file mode 100644 index 118e09b23..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-info.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-info.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-init.md b/doc/manual/src/command-ref/new-cli/nix3-flake-init.md deleted file mode 100644 index 48cc0f3ef..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-init.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-init.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-lock.md b/doc/manual/src/command-ref/new-cli/nix3-flake-lock.md deleted file mode 100644 index 9d6845653..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-lock.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-lock.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-metadata.md b/doc/manual/src/command-ref/new-cli/nix3-flake-metadata.md deleted file mode 100644 index 8930bb5e1..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-metadata.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-metadata.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-new.md b/doc/manual/src/command-ref/new-cli/nix3-flake-new.md deleted file mode 100644 index 5b7d9ebdf..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-new.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-new.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-prefetch.md b/doc/manual/src/command-ref/new-cli/nix3-flake-prefetch.md deleted file mode 100644 index 69b41faae..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-prefetch.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-prefetch.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-show.md b/doc/manual/src/command-ref/new-cli/nix3-flake-show.md deleted file mode 100644 index 59755e960..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-show.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-show.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake-update.md b/doc/manual/src/command-ref/new-cli/nix3-flake-update.md deleted file mode 100644 index f897e504f..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake-update.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake-update.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-flake.md b/doc/manual/src/command-ref/new-cli/nix3-flake.md deleted file mode 100644 index 97d38f1bb..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-flake.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-flake.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-fmt.md b/doc/manual/src/command-ref/new-cli/nix3-fmt.md deleted file mode 100644 index ed31de3f7..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-fmt.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-fmt.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-hash-file.md b/doc/manual/src/command-ref/new-cli/nix3-hash-file.md deleted file mode 100644 index b81754594..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-hash-file.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-hash-file.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-hash-path.md b/doc/manual/src/command-ref/new-cli/nix3-hash-path.md deleted file mode 100644 index 9928928f2..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-hash-path.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-hash-path.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-hash-to-base16.md b/doc/manual/src/command-ref/new-cli/nix3-hash-to-base16.md deleted file mode 100644 index fb04ccee8..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-hash-to-base16.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-hash-to-base16.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-hash-to-base32.md b/doc/manual/src/command-ref/new-cli/nix3-hash-to-base32.md deleted file mode 100644 index 2e40c1077..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-hash-to-base32.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-hash-to-base32.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-hash-to-base64.md b/doc/manual/src/command-ref/new-cli/nix3-hash-to-base64.md deleted file mode 100644 index 8ec8ecbc6..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-hash-to-base64.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-hash-to-base64.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-hash-to-sri.md b/doc/manual/src/command-ref/new-cli/nix3-hash-to-sri.md deleted file mode 100644 index 00298dff0..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-hash-to-sri.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-hash-to-sri.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-hash.md b/doc/manual/src/command-ref/new-cli/nix3-hash.md deleted file mode 100644 index 68ab9862e..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-hash.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-hash.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-help-stores.md b/doc/manual/src/command-ref/new-cli/nix3-help-stores.md deleted file mode 100644 index f397cc046..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-help-stores.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-help-stores.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-help.md b/doc/manual/src/command-ref/new-cli/nix3-help.md deleted file mode 100644 index 306f1ea7a..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-help.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-help.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-key-convert-secret-to-public.md b/doc/manual/src/command-ref/new-cli/nix3-key-convert-secret-to-public.md deleted file mode 100644 index 9f6e1be3a..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-key-convert-secret-to-public.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-key-convert-secret-to-public.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-key-generate-secret.md b/doc/manual/src/command-ref/new-cli/nix3-key-generate-secret.md deleted file mode 100644 index 28225d3c8..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-key-generate-secret.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-key-generate-secret.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-key.md b/doc/manual/src/command-ref/new-cli/nix3-key.md deleted file mode 100644 index 7df72030b..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-key.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-key.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-log.md b/doc/manual/src/command-ref/new-cli/nix3-log.md deleted file mode 100644 index 8e590bfde..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-log.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-log.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-nar-cat.md b/doc/manual/src/command-ref/new-cli/nix3-nar-cat.md deleted file mode 100644 index 21e137cc5..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-nar-cat.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-nar-cat.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-nar-dump-path.md b/doc/manual/src/command-ref/new-cli/nix3-nar-dump-path.md deleted file mode 100644 index 39d4a0f8d..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-nar-dump-path.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-nar-dump-path.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-nar-ls.md b/doc/manual/src/command-ref/new-cli/nix3-nar-ls.md deleted file mode 100644 index 60c75831a..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-nar-ls.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-nar-ls.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-nar.md b/doc/manual/src/command-ref/new-cli/nix3-nar.md deleted file mode 100644 index 91217904d..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-nar.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-nar.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-path-info.md b/doc/manual/src/command-ref/new-cli/nix3-path-info.md deleted file mode 100644 index 8db34e0f1..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-path-info.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-path-info.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-print-dev-env.md b/doc/manual/src/command-ref/new-cli/nix3-print-dev-env.md deleted file mode 100644 index 7754780eb..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-print-dev-env.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-print-dev-env.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-diff-closures.md b/doc/manual/src/command-ref/new-cli/nix3-profile-diff-closures.md deleted file mode 100644 index eba30aa16..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-diff-closures.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-diff-closures.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-history.md b/doc/manual/src/command-ref/new-cli/nix3-profile-history.md deleted file mode 100644 index 85e8afc44..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-history.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-history.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-install.md b/doc/manual/src/command-ref/new-cli/nix3-profile-install.md deleted file mode 100644 index bb530cd9a..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-install.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-install.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-list.md b/doc/manual/src/command-ref/new-cli/nix3-profile-list.md deleted file mode 100644 index 7f6e7a3fa..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-list.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-list.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-remove.md b/doc/manual/src/command-ref/new-cli/nix3-profile-remove.md deleted file mode 100644 index 3651cb086..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-remove.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-remove.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-rollback.md b/doc/manual/src/command-ref/new-cli/nix3-profile-rollback.md deleted file mode 100644 index 9c73cf2f0..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-rollback.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-rollback.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-upgrade.md b/doc/manual/src/command-ref/new-cli/nix3-profile-upgrade.md deleted file mode 100644 index 1b498cfd0..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-upgrade.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-upgrade.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile-wipe-history.md b/doc/manual/src/command-ref/new-cli/nix3-profile-wipe-history.md deleted file mode 100644 index 662169dbe..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile-wipe-history.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile-wipe-history.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-profile.md b/doc/manual/src/command-ref/new-cli/nix3-profile.md deleted file mode 100644 index c98b611a3..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-profile.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-profile.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-realisation-info.md b/doc/manual/src/command-ref/new-cli/nix3-realisation-info.md deleted file mode 100644 index 20d172987..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-realisation-info.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-realisation-info.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-realisation.md b/doc/manual/src/command-ref/new-cli/nix3-realisation.md deleted file mode 100644 index 7c176f1c6..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-realisation.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-realisation.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-registry-add.md b/doc/manual/src/command-ref/new-cli/nix3-registry-add.md deleted file mode 100644 index 9bb491fb3..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-registry-add.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-registry-add.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-registry-list.md b/doc/manual/src/command-ref/new-cli/nix3-registry-list.md deleted file mode 100644 index 42c595eaf..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-registry-list.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-registry-list.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-registry-pin.md b/doc/manual/src/command-ref/new-cli/nix3-registry-pin.md deleted file mode 100644 index 256f95cab..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-registry-pin.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-registry-pin.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-registry-remove.md b/doc/manual/src/command-ref/new-cli/nix3-registry-remove.md deleted file mode 100644 index 4e2dda4f7..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-registry-remove.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-registry-remove.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-registry.md b/doc/manual/src/command-ref/new-cli/nix3-registry.md deleted file mode 100644 index 5551d19b3..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-registry.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-registry.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-repl.md b/doc/manual/src/command-ref/new-cli/nix3-repl.md deleted file mode 100644 index da82694fd..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-repl.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-repl.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-run.md b/doc/manual/src/command-ref/new-cli/nix3-run.md deleted file mode 100644 index 1114efd9c..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-run.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-run.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-search.md b/doc/manual/src/command-ref/new-cli/nix3-search.md deleted file mode 100644 index b72a5add5..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-search.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-search.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-shell.md b/doc/manual/src/command-ref/new-cli/nix3-shell.md deleted file mode 100644 index 82f0af1e2..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-shell.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-shell.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-add-file.md b/doc/manual/src/command-ref/new-cli/nix3-store-add-file.md deleted file mode 100644 index fa30cf660..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-add-file.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-add-file.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-add-path.md b/doc/manual/src/command-ref/new-cli/nix3-store-add-path.md deleted file mode 100644 index 88ccd4b51..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-add-path.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-add-path.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-cat.md b/doc/manual/src/command-ref/new-cli/nix3-store-cat.md deleted file mode 100644 index de617fc4e..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-cat.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-cat.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-copy-log.md b/doc/manual/src/command-ref/new-cli/nix3-store-copy-log.md deleted file mode 100644 index 44998311f..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-copy-log.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-copy-log.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-copy-sigs.md b/doc/manual/src/command-ref/new-cli/nix3-store-copy-sigs.md deleted file mode 100644 index cc03ab44e..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-copy-sigs.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-copy-sigs.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-delete.md b/doc/manual/src/command-ref/new-cli/nix3-store-delete.md deleted file mode 100644 index 42a05162d..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-delete.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-delete.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-diff-closures.md b/doc/manual/src/command-ref/new-cli/nix3-store-diff-closures.md deleted file mode 100644 index fe6bcd235..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-diff-closures.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-diff-closures.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-dump-path.md b/doc/manual/src/command-ref/new-cli/nix3-store-dump-path.md deleted file mode 100644 index c4f34f450..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-dump-path.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-dump-path.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-gc.md b/doc/manual/src/command-ref/new-cli/nix3-store-gc.md deleted file mode 100644 index da79527ab..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-gc.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-gc.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-ls.md b/doc/manual/src/command-ref/new-cli/nix3-store-ls.md deleted file mode 100644 index fb64bcb21..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-ls.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-ls.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-make-content-addressed.md b/doc/manual/src/command-ref/new-cli/nix3-store-make-content-addressed.md deleted file mode 100644 index 0a4b6c93a..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-make-content-addressed.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-make-content-addressed.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-optimise.md b/doc/manual/src/command-ref/new-cli/nix3-store-optimise.md deleted file mode 100644 index cc84844d7..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-optimise.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-optimise.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-path-from-hash-part.md b/doc/manual/src/command-ref/new-cli/nix3-store-path-from-hash-part.md deleted file mode 100644 index c9f4d4f1c..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-path-from-hash-part.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-path-from-hash-part.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-ping.md b/doc/manual/src/command-ref/new-cli/nix3-store-ping.md deleted file mode 100644 index e199e904e..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-ping.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-ping.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-prefetch-file.md b/doc/manual/src/command-ref/new-cli/nix3-store-prefetch-file.md deleted file mode 100644 index c72742413..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-prefetch-file.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-prefetch-file.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-repair.md b/doc/manual/src/command-ref/new-cli/nix3-store-repair.md deleted file mode 100644 index 7ad9058d8..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-repair.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-repair.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-sign.md b/doc/manual/src/command-ref/new-cli/nix3-store-sign.md deleted file mode 100644 index ec28f973b..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-sign.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-sign.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store-verify.md b/doc/manual/src/command-ref/new-cli/nix3-store-verify.md deleted file mode 100644 index 1d115da04..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store-verify.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store-verify.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-store.md b/doc/manual/src/command-ref/new-cli/nix3-store.md deleted file mode 100644 index 1a4c3b350..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-store.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-store.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-upgrade-nix.md b/doc/manual/src/command-ref/new-cli/nix3-upgrade-nix.md deleted file mode 100644 index 39f095573..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-upgrade-nix.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-upgrade-nix.md}} diff --git a/doc/manual/src/command-ref/new-cli/nix3-why-depends.md b/doc/manual/src/command-ref/new-cli/nix3-why-depends.md deleted file mode 100644 index c6629ffcd..000000000 --- a/doc/manual/src/command-ref/new-cli/nix3-why-depends.md +++ /dev/null @@ -1 +0,0 @@ -{{#include @generated@/command-ref/new-cli/nix3-why-depends.md}} diff --git a/doc/manual/src/command-ref/nix-build.md b/doc/manual/src/command-ref/nix-build.md deleted file mode 100644 index 24714b2b4..000000000 --- a/doc/manual/src/command-ref/nix-build.md +++ /dev/null @@ -1,124 +0,0 @@ -# Name - -`nix-build` - build a Nix expression - -# Synopsis - -`nix-build` [*paths…*] - [`--arg` *name* *value*] - [`--argstr` *name* *value*] - [{`--attr` | `-A`} *attrPath*] - [`--no-out-link`] - [`--dry-run`] - [{`--out-link` | `-o`} *outlink*] - -# Disambiguation - -This man page describes the command `nix-build`, which is distinct from [`nix build`](./new-cli/nix3-build.md). -For documentation on the latter, run `nix build --help` or see `man nix3-build`. - -# Description - -The `nix-build` command builds the derivations described by the Nix -expressions in *paths*. If the build succeeds, it places a symlink to -the result in the current directory. The symlink is called `result`. If -there are multiple Nix expressions, or the Nix expressions evaluate to -multiple derivations, multiple sequentially numbered symlinks are -created (`result`, `result-2`, and so on). - -If no *paths* are specified, then `nix-build` will use `default.nix` in -the current directory, if it exists. - -If an element of *paths* starts with `http://` or `https://`, it is -interpreted as the URL of a tarball that will be downloaded and unpacked -to a temporary location. The tarball must include a single top-level -directory containing at least a file named `default.nix`. - -`nix-build` is essentially a wrapper around -[`nix-instantiate`](nix-instantiate.md) (to translate a high-level Nix -expression to a low-level [store derivation]) and [`nix-store ---realise`](@docroot@/command-ref/nix-store/realise.md) (to build the store -derivation). - -[store derivation]: ../glossary.md#gloss-store-derivation - -> **Warning** -> -> The result of the build is automatically registered as a root of the -> Nix garbage collector. This root disappears automatically when the -> `result` symlink is deleted or renamed. So don’t rename the symlink. - -# Options - -All options not listed here are passed to -[`nix-store --realise`](nix-store/realise.md), -except for `--arg` and `--attr` / `-A` which are passed to [`nix-instantiate`](nix-instantiate.md). - - - [`--no-out-link`](#opt-no-out-link) - - Do not create a symlink to the output path. Note that as a result - the output does not become a root of the garbage collector, and so - might be deleted by `nix-store --gc`. - - - [`--dry-run`](#opt-dry-run) - - Show what store paths would be built or downloaded. - - - [`--out-link`](#opt-out-link) / `-o` *outlink* - - Change the name of the symlink to the output path created from - `result` to *outlink*. - -{{#include ./status-build-failure.md}} - -{{#include ./opt-common.md}} - -{{#include ./env-common.md}} - -# Examples - -```console -$ nix-build '' --attr firefox -store derivation is /nix/store/qybprl8sz2lc...-firefox-1.5.0.7.drv -/nix/store/d18hyl92g30l...-firefox-1.5.0.7 - -$ ls -l result -lrwxrwxrwx ... result -> /nix/store/d18hyl92g30l...-firefox-1.5.0.7 - -$ ls ./result/bin/ -firefox firefox-config -``` - -If a derivation has multiple outputs, `nix-build` will build the default -(first) output. You can also build all outputs: - -```console -$ nix-build '' --attr openssl.all -``` - -This will create a symlink for each output named `result-outputname`. -The suffix is omitted if the output name is `out`. So if `openssl` has -outputs `out`, `bin` and `man`, `nix-build` will create symlinks -`result`, `result-bin` and `result-man`. It’s also possible to build a -specific output: - -```console -$ nix-build '' --attr openssl.man -``` - -This will create a symlink `result-man`. - -Build a Nix expression given on the command line: - -```console -$ nix-build --expr 'with import { }; runCommand "foo" { } "echo bar > $out"' -$ cat ./result -bar -``` - -Build the GNU Hello package from the latest revision of the master -branch of Nixpkgs: - -```console -$ nix-build https://github.com/NixOS/nixpkgs/archive/master.tar.gz --attr hello -``` diff --git a/doc/manual/src/command-ref/nix-channel.md b/doc/manual/src/command-ref/nix-channel.md deleted file mode 100644 index cebbc7b00..000000000 --- a/doc/manual/src/command-ref/nix-channel.md +++ /dev/null @@ -1,106 +0,0 @@ -# Name - -`nix-channel` - manage Nix channels - -# Synopsis - -`nix-channel` {`--add` url [*name*] | `--remove` *name* | `--list` | `--update` [*names…*] | `--list-generations` | `--rollback` [*generation*] } - -# Description - -Channels are a mechanism for referencing remote Nix expressions and conveniently retrieving their latest version. - -The moving parts of channels are: -- The official channels listed at -- The user-specific list of [subscribed channels](#subscribed-channels) -- The [downloaded channel contents](#channels) -- The [Nix expression search path](@docroot@/command-ref/conf-file.md#conf-nix-path), set with the [`-I` option](#opt-i) or the [`NIX_PATH` environment variable](#env-NIX_PATH) - -> **Note** -> -> The state of a subscribed channel is external to the Nix expressions relying on it. -> This may limit reproducibility. -> -> Dependencies on other Nix expressions can be declared explicitly with: -> - [`fetchurl`](@docroot@/language/builtins.md#builtins-fetchurl), [`fetchTarball`](@docroot@/language/builtins.md#builtins-fetchTarball), or [`fetchGit`](@docroot@/language/builtins.md#builtins-fetchGit) in Nix expressions -> - the [`-I` option](@docroot@/command-ref/opt-common.md#opt-I) in command line invocations - -This command has the following operations: - - - `--add` *url* \[*name*\]\ - Add a channel *name* located at *url* to the list of subscribed channels. - If *name* is omitted, default to the last component of *url*, with the suffixes `-stable` or `-unstable` removed. - - > **Note** - > - > `--add` does not automatically perform an update. - > Use `--update` explicitly. - - A channel URL must point to a directory containing a file `nixexprs.tar.gz`. - At the top level, that tarball must contain a single directory with a `default.nix` file that serves as the channel’s entry point. - - - `--remove` *name*\ - Remove the channel *name* from the list of subscribed channels. - - - `--list`\ - Print the names and URLs of all subscribed channels on standard output. - - - `--update` \[*names*…\]\ - Download the Nix expressions of subscribed channels and create a new generation. - Update all channels if none is specified, and only those included in *names* otherwise. - - - `--list-generations`\ - Prints a list of all the current existing generations for the - channel profile. - - Works the same way as - ``` - nix-env --profile /nix/var/nix/profiles/per-user/$USER/channels --list-generations - ``` - - - `--rollback` \[*generation*\]\ - Revert channels to the state before the last call to `nix-channel --update`. - Optionally, you can specify a specific channel *generation* number to restore. - -{{#include ./opt-common.md}} - -{{#include ./env-common.md}} - -# Files - -`nix-channel` operates on the following files. - -{{#include ./files/channels.md}} - -# Examples - -Subscribe to the Nixpkgs channel and run `hello` from the GNU Hello package: - -```console -$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable -$ nix-channel --list -nixpkgs https://nixos.org/channels/nixpkgs -$ nix-channel --update -$ nix-shell -p hello --run hello -hello -``` - -Revert channel updates using `--rollback`: - -```console -$ nix-instantiate --eval '' --attr lib.version -"22.11pre296212.530a53dcbc9" - -$ nix-channel --rollback -switching from generation 483 to 482 - -$ nix-instantiate --eval '' --attr lib.version -"22.11pre281526.d0419badfad" -``` - -Remove a channel: - -```console -$ nix-channel --remove nixpkgs -$ nix-channel --list -``` diff --git a/doc/manual/src/command-ref/nix-collect-garbage.md b/doc/manual/src/command-ref/nix-collect-garbage.md deleted file mode 100644 index f9a3f1940..000000000 --- a/doc/manual/src/command-ref/nix-collect-garbage.md +++ /dev/null @@ -1,79 +0,0 @@ -# Name - -`nix-collect-garbage` - delete unreachable [store objects] - -# Synopsis - -`nix-collect-garbage` [`--delete-old`] [`-d`] [`--delete-older-than` *period*] [`--max-freed` *bytes*] [`--dry-run`] - -# Description - -The command `nix-collect-garbage` is mostly an alias of [`nix-store --gc`](@docroot@/command-ref/nix-store/gc.md). -That is, it deletes all unreachable [store objects] in the Nix store to clean up your system. - -However, it provides two additional options, -[`--delete-old`](#opt-delete-old) and [`--delete-older-than`](#opt-delete-older-than), -which also delete old [profiles], allowing potentially more [store objects] to be deleted because profiles are also garbage collection roots. -These options are the equivalent of running -[`nix-env --delete-generations`](@docroot@/command-ref/nix-env/delete-generations.md) -with various augments on multiple profiles, -prior to running `nix-collect-garbage` (or just `nix-store --gc`) without any flags. - -> **Note** -> -> Deleting previous configurations makes rollbacks to them impossible. - -These flags should be used with care, because they potentially delete generations of profiles used by other users on the system. - -## Locations searched for profiles - -`nix-collect-garbage` cannot know about all profiles; that information doesn't exist. -Instead, it looks in a few locations, and acts on all profiles it finds there: - -1. The default profile locations as specified in the [profiles] section of the manual. - -2. > **NOTE** - > - > Not stable; subject to change - > - > Do not rely on this functionality; it just exists for migration purposes and is may change in the future. - > These deprecated paths remain a private implementation detail of Lix. - - - - `$NIX_STATE_DIR/profiles` and `$NIX_STATE_DIR/profiles/per-user`. - - With the exception of `$NIX_STATE_DIR/profiles/per-user/root` and `$NIX_STATE_DIR/profiles/default`, these directories are no longer used by other commands. - `nix-collect-garbage` looks there anyways in order to clean up profiles from older versions of Nix. - -# Options - -These options are for deleting old [profiles] prior to deleting unreachable [store objects]. - -- [`--delete-old`](#opt-delete-old) / `-d`\ - Delete all old generations of profiles. - - This is the equivalent of invoking `nix-env --delete-generations old` on each found profile. - -- [`--delete-older-than`](#opt-delete-older-than) *period*\ - Delete all generations of profiles older than the specified amount (except for the generations that were active at that point in time). - *period* is a value such as `30d`, which would mean 30 days. - - This is the equivalent of invoking [`nix-env --delete-generations `](@docroot@/command-ref/nix-env/delete-generations.md#generations-time) on each found profile. - See the documentation of that command for additional information about the *period* argument. - -{{#include ./opt-common.md}} - -{{#include ./env-common.md}} - -# Example - -To delete from the Nix store everything that is not used by the current -generations of each profile, do - -```console -$ nix-collect-garbage -d -``` - -[profiles]: @docroot@/command-ref/files/profiles.md -[store objects]: @docroot@/glossary.md#gloss-store-object diff --git a/doc/manual/src/command-ref/nix-copy-closure.md b/doc/manual/src/command-ref/nix-copy-closure.md deleted file mode 100644 index fbf6828da..000000000 --- a/doc/manual/src/command-ref/nix-copy-closure.md +++ /dev/null @@ -1,91 +0,0 @@ -# Name - -`nix-copy-closure` - copy a closure to or from a remote machine via SSH - -# Synopsis - -`nix-copy-closure` - [`--to` | `--from`] - [`--gzip`] - [`--include-outputs`] - [`--use-substitutes` | `-s`] - [`-v`] - _user@machine_ _paths_ - -# Description - -`nix-copy-closure` gives you an easy and efficient way to exchange -software between machines. Given one or more Nix store _paths_ on the -local machine, `nix-copy-closure` computes the closure of those paths -(i.e. all their dependencies in the Nix store), and copies all paths -in the closure to the remote machine via the `ssh` (Secure Shell) -command. With the `--from` option, the direction is reversed: the -closure of _paths_ on a remote machine is copied to the Nix store on -the local machine. - -This command is efficient because it only sends the store paths -that are missing on the target machine. - -Since `nix-copy-closure` calls `ssh`, you may be asked to type in the -appropriate password or passphrase. In fact, you may be asked _twice_ -because `nix-copy-closure` currently connects twice to the remote -machine, first to get the set of paths missing on the target machine, -and second to send the dump of those paths. When using public key -authentication, you can avoid typing the passphrase with `ssh-agent`. - -# Options - - - `--to`\ - Copy the closure of _paths_ from the local Nix store to the Nix - store on _machine_. This is the default. - - - `--from`\ - Copy the closure of _paths_ from the Nix store on _machine_ to the - local Nix store. - - - `--gzip`\ - Enable compression of the SSH connection. - - - `--include-outputs`\ - Also copy the outputs of [store derivation]s included in the closure. - - [store derivation]: ../glossary.md#gloss-store-derivation - - - `--use-substitutes` / `-s`\ - Attempt to download missing paths on the target machine using Nix’s - substitute mechanism. Any paths that cannot be substituted on the - target are still copied normally from the source. This is useful, - for instance, if the connection between the source and target - machine is slow, but the connection between the target machine and - `nixos.org` (the default binary cache server) is - fast. - - - `-v`\ - Show verbose output. - -{{#include ./opt-common.md}} - -# Environment variables - - - `NIX_SSHOPTS`\ - Additional options to be passed to `ssh` on the command - line. - -{{#include ./env-common.md}} - -# Examples - -Copy Firefox with all its dependencies to a remote machine: - -```console -$ nix-copy-closure --to alice@itchy.labs $(type -tP firefox) -``` - -Copy Subversion from a remote machine and then install it into a user -environment: - -```console -$ nix-copy-closure --from alice@itchy.labs \ - /nix/store/0dj0503hjxy5mbwlafv1rsbdiyx1gkdy-subversion-1.4.4 -$ nix-env --install /nix/store/0dj0503hjxy5mbwlafv1rsbdiyx1gkdy-subversion-1.4.4 -``` diff --git a/doc/manual/src/command-ref/nix-daemon.md b/doc/manual/src/command-ref/nix-daemon.md deleted file mode 100644 index 268bbc558..000000000 --- a/doc/manual/src/command-ref/nix-daemon.md +++ /dev/null @@ -1,13 +0,0 @@ -# Name - -`nix-daemon` - Lix multi-user support daemon - -# Synopsis - -`nix-daemon` - -# Description - -The Lix daemon is necessary in multi-user Lix installations. It runs -build tasks and other operations on the Nix store on behalf of -unprivileged users. diff --git a/doc/manual/src/command-ref/nix-env.md b/doc/manual/src/command-ref/nix-env.md deleted file mode 100644 index 5a9e05fed..000000000 --- a/doc/manual/src/command-ref/nix-env.md +++ /dev/null @@ -1,90 +0,0 @@ -# Name - -`nix-env` - manipulate or query Nix user environments - -# Synopsis - -`nix-env` *operation* [*options*] [*arguments…*] - [`--option` *name* *value*] - [`--arg` *name* *value*] - [`--argstr` *name* *value*] - [{`--file` | `-f`} *path*] - [{`--profile` | `-p`} *path*] - [`--system-filter` *system*] - [`--dry-run`] - -# Description - -The command `nix-env` is used to manipulate Nix user environments. User -environments are sets of software packages available to a user at some -point in time. In other words, they are a synthesised view of the -programs available in the Nix store. There may be many user -environments: different users can have different environments, and -individual users can switch between different environments. - -`nix-env` takes exactly one *operation* flag which indicates the -subcommand to be performed. The following operations are available: - -- [`--install`](./nix-env/install.md) - add packages to user environment -- [`--upgrade`](./nix-env/upgrade.md) - upgrade packages in user environment -- [`--uninstall`](./nix-env/uninstall.md) - remove packages from user environment -- [`--set`](./nix-env/set.md) - set profile to contain a specified derivation -- [`--set-flag`](./nix-env/set-flag.md) - modify meta attributes of installed packages -- [`--query`](./nix-env/query.md) - display information about packages -- [`--switch-profile`](./nix-env/switch-profile.md) - set user environment to a given profile -- [`--list-generations`](./nix-env/list-generations.md) - list profile generations -- [`--delete-generations`](./nix-env/delete-generations.md) - delete profile generations -- [`--switch-generation`](./nix-env/switch-generation.md) - set user environment to a given profile generation -- [`--rollback`](./nix-env/rollback.md) - set user environment to previous generation - -These pages can be viewed offline: - -- `man nix-env-`. - - Example: `man nix-env-install` - -- `nix-env --help --` - - Example: `nix-env --help --install` - -# Selectors - -Several commands, such as `nix-env --query ` and `nix-env --install `, take a list of -arguments that specify the packages on which to operate. These are -extended regular expressions that must match the entire name of the -package. (For details on regular expressions, see **regex**(7).) The match is -case-sensitive. The regular expression can optionally be followed by a -dash and a version number; if omitted, any version of the package will -match. Here are some examples: - - - `firefox`\ - Matches the package name `firefox` and any version. - - - `firefox-32.0`\ - Matches the package name `firefox` and version `32.0`. - - - `gtk\\+`\ - Matches the package name `gtk+`. The `+` character must be escaped - using a backslash to prevent it from being interpreted as a - quantifier, and the backslash must be escaped in turn with another - backslash to ensure that the shell passes it on. - - - `.\*`\ - Matches any package name. This is the default for most commands. - - - `'.*zip.*'`\ - Matches any package name containing the string `zip`. Note the dots: - `'*zip*'` does not work, because in a regular expression, the - character `*` is interpreted as a quantifier. - - - `'.*(firefox|chromium).*'`\ - Matches any package name containing the strings `firefox` or - `chromium`. - -# Files - -`nix-env` operates on the following files. - -{{#include ./files/default-nix-expression.md}} - -{{#include ./files/profiles.md}} diff --git a/doc/manual/src/command-ref/nix-env/delete-generations.md b/doc/manual/src/command-ref/nix-env/delete-generations.md deleted file mode 100644 index adc6fc219..000000000 --- a/doc/manual/src/command-ref/nix-env/delete-generations.md +++ /dev/null @@ -1,95 +0,0 @@ -# Name - -`nix-env --delete-generations` - delete profile generations - -# Synopsis - -`nix-env` `--delete-generations` *generations* - -# Description - -This operation deletes the specified generations of the current profile. - -*generations* can be a one of the following: - -- `...`:\ - A list of generation numbers, each one a separate command-line argument. - - Delete exactly the profile generations given by their generation number. - Deleting the current generation is not allowed. - -- The special value `old` - - Delete all generations except the current one. - - > **WARNING** - > - > Older *and newer* generations will be deleted by this operation. - > - > One might expect this to just delete older generations than the curent one, but that is only true if the current generation is also the latest. - > Because one can roll back to a previous generation, it is possible to have generations newer than the current one. - > They will also be deleted. - -- `d`:\ - The last *number* days - - *Example*: `30d` - - Delete all generations created more than *number* days ago, except the most recent one of them. - This allows rolling back to generations that were available within the specified period. - -- `+`:\ - The last *number* generations up to the present - - *Example*: `+5` - - Keep the last *number* generations, along with any newer than current. - -Periodically deleting old generations is important to make garbage collection -effective. -The is because profiles are also garbage collection roots — any [store object] reachable from a profile is "alive" and ineligible for deletion. - -[store object]: @docroot@/glossary.md#gloss-store-object - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -## Delete explicit generation numbers - -```console -$ nix-env --delete-generations 3 4 8 -``` - -Delete the generations numbered 3, 4, and 8, so long as the current active generation is not any of those. - -## Keep most-recent by count (number of generations) - -```console -$ nix-env --delete-generations +5 -``` - -Suppose `30` is the current generation, and we currently have generations numbered `20` through `32`. - -Then this command will delete generations `20` through `25` (`<= 30 - 5`), -and keep generations `26` through `31` (`> 30 - 5`). - -## Keep most-recent by time (number of days) - -```console -$ nix-env --delete-generations 30d -``` - -This command will delete all generations older than 30 days, except for the generation that was active 30 days ago (if it currently exists). - -## Delete all older - -```console -$ nix-env --profile other_profile --delete-generations old -``` diff --git a/doc/manual/src/command-ref/nix-env/env-common.md b/doc/manual/src/command-ref/nix-env/env-common.md deleted file mode 100644 index 735817959..000000000 --- a/doc/manual/src/command-ref/nix-env/env-common.md +++ /dev/null @@ -1,6 +0,0 @@ -# Environment variables - -- `NIX_PROFILE`\ - Location of the Nix profile. Defaults to the target of the symlink - `~/.nix-profile`, if it exists, or `/nix/var/nix/profiles/default` - otherwise. diff --git a/doc/manual/src/command-ref/nix-env/install.md b/doc/manual/src/command-ref/nix-env/install.md deleted file mode 100644 index 5c532b856..000000000 --- a/doc/manual/src/command-ref/nix-env/install.md +++ /dev/null @@ -1,186 +0,0 @@ -# Name - -`nix-env --install` - add packages to user environment - -# Synopsis - -`nix-env` {`--install` | `-i`} *args…* - [{`--prebuilt-only` | `-b`}] - [{`--attr` | `-A`}] - [`--from-expression`] [`-E`] - [`--from-profile` *path*] - [`--preserve-installed` | `-P`] - [`--remove-all` | `-r`] - -# Description - -The install operation creates a new user environment, based on the -current generation of the active profile, to which a set of store paths -described by *args* is added. The arguments *args* map to store paths in -a number of possible ways: - - - By default, *args* is a set of derivation names denoting derivations - in the active Nix expression. These are realised, and the resulting - output paths are installed. Currently installed derivations with a - name equal to the name of a derivation being added are removed - unless the option `--preserve-installed` is specified. - - If there are multiple derivations matching a name in *args* that - have the same name (e.g., `gcc-3.3.6` and `gcc-4.1.1`), then the - derivation with the highest *priority* is used. A derivation can - define a priority by declaring the `meta.priority` attribute. This - attribute should be a number, with a higher value denoting a lower - priority. The default priority is `5`. - - If there are multiple matching derivations with the same priority, - then the derivation with the highest version will be installed. - - You can force the installation of multiple derivations with the same - name by being specific about the versions. For instance, `nix-env --install - gcc-3.3.6 gcc-4.1.1` will install both version of GCC (and will - probably cause a user environment conflict\!). - - - If `--attr` (`-A`) is specified, the arguments are *attribute - paths* that select attributes from the top-level Nix - expression. This is faster than using derivation names and - unambiguous. To find out the attribute paths of available - packages, use `nix-env --query --available --attr-path `. - - - If `--from-profile` *path* is given, *args* is a set of names - denoting installed store paths in the profile *path*. This is an - easy way to copy user environment elements from one profile to - another. - - - If `--from-expression` is given, *args* are Nix - [functions](@docroot@/language/constructs.md#functions) - that are called with the active Nix expression as their single - argument. The derivations returned by those function calls are - installed. This allows derivations to be specified in an - unambiguous way, which is necessary if there are multiple - derivations with the same name. - - - If *args* are [store derivations](@docroot@/glossary.md#gloss-store-derivation), then these are - [realised](@docroot@/command-ref/nix-store/realise.md), and the resulting output paths - are installed. - - - If *args* are store paths that are not store derivations, then these - are [realised](@docroot@/command-ref/nix-store/realise.md) and installed. - - - By default all outputs are installed for each derivation. That can - be reduced by setting `meta.outputsToInstall`. - -# Flags - - - `--prebuilt-only` / `-b`\ - Use only derivations for which a substitute is registered, i.e., - there is a pre-built binary available that can be downloaded in lieu - of building the derivation. Thus, no packages will be built from - source. - - - `--preserve-installed` / `-P`\ - Do not remove derivations with a name matching one of the - derivations being installed. Usually, trying to have two versions of - the same package installed in the same generation of a profile will - lead to an error in building the generation, due to file name - clashes between the two versions. However, this is not the case for - all packages. - - - `--remove-all` / `-r`\ - Remove all previously installed packages first. This is equivalent - to running `nix-env --uninstall '.*'` first, except that everything happens - in a single transaction. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -To install a package using a specific attribute path from the active Nix expression: - -```console -$ nix-env --install --attr gcc40mips -installing `gcc-4.0.2' -$ nix-env --install --attr xorg.xorgserver -installing `xorg-server-1.2.0' -``` - -To install a specific version of `gcc` using the derivation name: - -```console -$ nix-env --install gcc-3.3.2 -installing `gcc-3.3.2' -uninstalling `gcc-3.1' -``` - -Using attribute path for selecting a package is preferred, -as it is much faster and there will not be multiple matches. - -Note the previously installed version is removed, since -`--preserve-installed` was not specified. - -To install an arbitrary version: - -```console -$ nix-env --install gcc -installing `gcc-3.3.2' -``` - -To install all derivations in the Nix expression `foo.nix`: - -```console -$ nix-env --file ~/foo.nix --install '.*' -``` - -To copy the store path with symbolic name `gcc` from another profile: - -```console -$ nix-env --install --from-profile /nix/var/nix/profiles/foo gcc -``` - -To install a specific [store derivation] (typically created by -`nix-instantiate`): - -```console -$ nix-env --install /nix/store/fibjb1bfbpm5mrsxc4mh2d8n37sxh91i-gcc-3.4.3.drv -``` - -To install a specific output path: - -```console -$ nix-env --install /nix/store/y3cgx0xj1p4iv9x0pnnmdhr8iyg741vk-gcc-3.4.3 -``` - -To install from a Nix expression specified on the command-line: - -```console -$ nix-env --file ./foo.nix --install --expr \ - 'f: (f {system = "i686-linux";}).subversionWithJava' -``` - -I.e., this evaluates to `(f: (f {system = -"i686-linux";}).subversionWithJava) (import ./foo.nix)`, thus selecting -the `subversionWithJava` attribute from the set returned by calling the -function defined in `./foo.nix`. - -A dry-run tells you which paths will be downloaded or built from source: - -```console -$ nix-env --file '' --install --attr hello --dry-run -(dry run; not doing anything) -installing ‘hello-2.10’ -this path will be fetched (0.04 MiB download, 0.19 MiB unpacked): - /nix/store/wkhdf9jinag5750mqlax6z2zbwhqb76n-hello-2.10 - ... -``` - -To install Firefox from the latest revision in the Nixpkgs/NixOS 14.12 -channel: - -```console -$ nix-env --file https://github.com/NixOS/nixpkgs/archive/nixos-14.12.tar.gz --install --attr firefox -``` diff --git a/doc/manual/src/command-ref/nix-env/list-generations.md b/doc/manual/src/command-ref/nix-env/list-generations.md deleted file mode 100644 index ab04122cf..000000000 --- a/doc/manual/src/command-ref/nix-env/list-generations.md +++ /dev/null @@ -1,32 +0,0 @@ -# Name - -`nix-env --list-generations` - list profile generations - -# Synopsis - -`nix-env` `--list-generations` - -# Description - -This operation print a list of all the currently existing generations -for the active profile. These may be switched to using the -`--switch-generation` operation. It also prints the creation date of the -generation, and indicates the current generation. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -```console -$ nix-env --list-generations - 95 2004-02-06 11:48:24 - 96 2004-02-06 11:49:01 - 97 2004-02-06 16:22:45 - 98 2004-02-06 16:24:33 (current) -``` diff --git a/doc/manual/src/command-ref/nix-env/opt-common.md b/doc/manual/src/command-ref/nix-env/opt-common.md deleted file mode 100644 index 636281b6d..000000000 --- a/doc/manual/src/command-ref/nix-env/opt-common.md +++ /dev/null @@ -1,35 +0,0 @@ -# Options - -The following options are allowed for all `nix-env` operations, but may not always have an effect. - - - `--file` / `-f` *path*\ - Specifies the Nix expression (designated below as the *active Nix - expression*) used by the `--install`, `--upgrade`, and `--query - --available` operations to obtain derivations. The default is - `~/.nix-defexpr`. - - If the argument starts with `http://` or `https://`, it is - interpreted as the URL of a tarball that will be downloaded and - unpacked to a temporary location. The tarball must include a single - top-level directory containing at least a file named `default.nix`. - - - `--profile` / `-p` *path*\ - Specifies the profile to be used by those operations that operate on - a profile (designated below as the *active profile*). A profile is a - sequence of user environments called *generations*, one of which is - the *current generation*. - - - `--dry-run`\ - For the `--install`, `--upgrade`, `--uninstall`, - `--switch-generation`, `--delete-generations` and `--rollback` - operations, this flag will cause `nix-env` to print what *would* be - done if this flag had not been specified, without actually doing it. - - `--dry-run` also prints out which paths will be - [substituted](@docroot@/glossary.md) (i.e., downloaded) and which paths - will be built from source (because no substitute is available). - - - `--system-filter` *system*\ - By default, operations such as `--query - --available` show derivations matching any platform. This option - allows you to use derivations for the specified platform *system*. diff --git a/doc/manual/src/command-ref/nix-env/query.md b/doc/manual/src/command-ref/nix-env/query.md deleted file mode 100644 index 3fbb30839..000000000 --- a/doc/manual/src/command-ref/nix-env/query.md +++ /dev/null @@ -1,214 +0,0 @@ -# Name - -`nix-env --query` - display information about packages - -# Synopsis - -`nix-env` {`--query` | `-q`} *names…* - [`--installed` | `--available` | `-a`] - [{`--status` | `-s`}] - [{`--attr-path` | `-P`}] - [`--no-name`] - [{`--compare-versions` | `-c`}] - [`--system`] - [`--drv-path`] - [`--out-path`] - [`--description`] - [`--meta`] - [`--xml`] - [`--json`] - [{`--prebuilt-only` | `-b`}] - [{`--attr` | `-A`} *attribute-path*] - -# Description - -The query operation displays information about either the store paths -that are installed in the current generation of the active profile -(`--installed`), or the derivations that are available for installation -in the active Nix expression (`--available`). It only prints information -about derivations whose symbolic name matches one of *names*. - -The derivations are sorted by their `name` attributes. - -# Source selection - -The following flags specify the set of things on which the query -operates. - - - `--installed`\ - The query operates on the store paths that are installed in the - current generation of the active profile. This is the default. - - - `--available`; `-a`\ - The query operates on the derivations that are available in the - active Nix expression. - -# Queries - -The following flags specify what information to display about the -selected derivations. Multiple flags may be specified, in which case the -information is shown in the order given here. Note that the name of the -derivation is shown unless `--no-name` is specified. - - - `--xml`\ - Print the result in an XML representation suitable for automatic - processing by other tools. The root element is called `items`, which - contains a `item` element for each available or installed - derivation. The fields discussed below are all stored in attributes - of the `item` elements. - - - `--json`\ - Print the result in a JSON representation suitable for automatic - processing by other tools. - - - `--prebuilt-only` / `-b`\ - Show only derivations for which a substitute is registered, i.e., - there is a pre-built binary available that can be downloaded in lieu - of building the derivation. Thus, this shows all packages that - probably can be installed quickly. - - - `--status`; `-s`\ - Print the *status* of the derivation. The status consists of three - characters. The first is `I` or `-`, indicating whether the - derivation is currently installed in the current generation of the - active profile. This is by definition the case for `--installed`, - but not for `--available`. The second is `P` or `-`, indicating - whether the derivation is present on the system. This indicates - whether installation of an available derivation will require the - derivation to be built. The third is `S` or `-`, indicating whether - a substitute is available for the derivation. - - - `--attr-path`; `-P`\ - Print the *attribute path* of the derivation, which can be used to - unambiguously select it using the `--attr` option available in - commands that install derivations like `nix-env --install`. This - option only works together with `--available` - - - `--no-name`\ - Suppress printing of the `name` attribute of each derivation. - - - `--compare-versions` / `-c`\ - Compare installed versions to available versions, or vice versa (if - `--available` is given). This is useful for quickly seeing whether - upgrades for installed packages are available in a Nix expression. A - column is added with the following meaning: - - - `<` *version*\ - A newer version of the package is available or installed. - - - `=` *version*\ - At most the same version of the package is available or - installed. - - - `>` *version*\ - Only older versions of the package are available or installed. - - - `- ?`\ - No version of the package is available or installed. - - - `--system`\ - Print the `system` attribute of the derivation. - - - `--drv-path`\ - Print the path of the [store derivation](@docroot@/glossary.md#gloss-store-derivation). - - - `--out-path`\ - Print the output path of the derivation. - - - `--description`\ - Print a short (one-line) description of the derivation, if - available. The description is taken from the `meta.description` - attribute of the derivation. - - - `--meta`\ - Print all of the meta-attributes of the derivation. This option is - only available with `--xml` or `--json`. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -To show installed packages: - -```console -$ nix-env --query -bison-1.875c -docbook-xml-4.2 -firefox-1.0.4 -MPlayer-1.0pre7 -ORBit2-2.8.3 -… -``` - -To show available packages: - -```console -$ nix-env --query --available -firefox-1.0.7 -GConf-2.4.0.1 -MPlayer-1.0pre7 -ORBit2-2.8.3 -… -``` - -To show the status of available packages: - -```console -$ nix-env --query --available --status --P- firefox-1.0.7 (not installed but present) ---S GConf-2.4.0.1 (not present, but there is a substitute for fast installation) ---S MPlayer-1.0pre3 (i.e., this is not the installed MPlayer, even though the version is the same!) -IP- ORBit2-2.8.3 (installed and by definition present) -… -``` - -To show available packages in the Nix expression `foo.nix`: - -```console -$ nix-env --file ./foo.nix --query --available -foo-1.2.3 -``` - -To compare installed versions to what’s available: - -```console -$ nix-env --query --compare-versions -... -acrobat-reader-7.0 - ? (package is not available at all) -autoconf-2.59 = 2.59 (same version) -firefox-1.0.4 < 1.0.7 (a more recent version is available) -... -``` - -To show all packages with “`zip`” in the name: - -```console -$ nix-env --query --available '.*zip.*' -bzip2-1.0.6 -gzip-1.6 -zip-3.0 -… -``` - -To show all packages with “`firefox`” or “`chromium`” in the name: - -```console -$ nix-env --query --available '.*(firefox|chromium).*' -chromium-37.0.2062.94 -chromium-beta-38.0.2125.24 -firefox-32.0.3 -firefox-with-plugins-13.0.1 -… -``` - -To show all packages in the latest revision of the Nixpkgs repository: - -```console -$ nix-env --file https://github.com/NixOS/nixpkgs/archive/master.tar.gz --query --available -``` diff --git a/doc/manual/src/command-ref/nix-env/rollback.md b/doc/manual/src/command-ref/nix-env/rollback.md deleted file mode 100644 index 1e3958cfc..000000000 --- a/doc/manual/src/command-ref/nix-env/rollback.md +++ /dev/null @@ -1,34 +0,0 @@ -# Name - -`nix-env --rollback` - set user environment to previous generation - -# Synopsis - -`nix-env` `--rollback` - -# Description - -This operation switches to the “previous” generation of the active -profile, that is, the highest numbered generation lower than the current -generation, if it exists. It is just a convenience wrapper around -`--list-generations` and `--switch-generation`. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -```console -$ nix-env --rollback -switching from generation 92 to 91 -``` - -```console -$ nix-env --rollback -error: no generation older than the current (91) exists -``` diff --git a/doc/manual/src/command-ref/nix-env/set-flag.md b/doc/manual/src/command-ref/nix-env/set-flag.md deleted file mode 100644 index 68a88d288..000000000 --- a/doc/manual/src/command-ref/nix-env/set-flag.md +++ /dev/null @@ -1,81 +0,0 @@ -# Name - -`nix-env --set-flag` - modify meta attributes of installed packages - -# Synopsis - -`nix-env` `--set-flag` *name* *value* *drvnames* - -# Description - -The `--set-flag` operation allows meta attributes of installed packages -to be modified. There are several attributes that can be usefully -modified, because they affect the behaviour of `nix-env` or the user -environment build script: - - - `priority` can be changed to resolve filename clashes. The user - environment build script uses the `meta.priority` attribute of - derivations to resolve filename collisions between packages. Lower - priority values denote a higher priority. For instance, the GCC - wrapper package and the Binutils package in Nixpkgs both have a file - `bin/ld`, so previously if you tried to install both you would get a - collision. Now, on the other hand, the GCC wrapper declares a higher - priority than Binutils, so the former’s `bin/ld` is symlinked in the - user environment. - - - `keep` can be set to `true` to prevent the package from being - upgraded or replaced. This is useful if you want to hang on to an - older version of a package. - - - `active` can be set to `false` to “disable” the package. That is, no - symlinks will be generated to the files of the package, but it - remains part of the profile (so it won’t be garbage-collected). It - can be set back to `true` to re-enable the package. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Examples - -To prevent the currently installed Firefox from being upgraded: - -```console -$ nix-env --set-flag keep true firefox -``` - -After this, `nix-env --upgrade ` will ignore Firefox. - -To disable the currently installed Firefox, then install a new Firefox -while the old remains part of the profile: - -```console -$ nix-env --query -firefox-2.0.0.9 (the current one) - -$ nix-env --preserve-installed --install firefox-2.0.0.11 -installing `firefox-2.0.0.11' -building path(s) `/nix/store/myy0y59q3ig70dgq37jqwg1j0rsapzsl-user-environment' -collision between `/nix/store/...-firefox-2.0.0.11/bin/firefox' - and `/nix/store/...-firefox-2.0.0.9/bin/firefox'. -(i.e., can’t have two active at the same time) - -$ nix-env --set-flag active false firefox -setting flag on `firefox-2.0.0.9' - -$ nix-env --preserve-installed --install firefox-2.0.0.11 -installing `firefox-2.0.0.11' - -$ nix-env --query -firefox-2.0.0.11 (the enabled one) -firefox-2.0.0.9 (the disabled one) -``` - -To make files from `binutils` take precedence over files from `gcc`: - -```console -$ nix-env --set-flag priority 5 binutils -$ nix-env --set-flag priority 10 gcc -``` diff --git a/doc/manual/src/command-ref/nix-env/set.md b/doc/manual/src/command-ref/nix-env/set.md deleted file mode 100644 index dc2765217..000000000 --- a/doc/manual/src/command-ref/nix-env/set.md +++ /dev/null @@ -1,29 +0,0 @@ -# Name - -`nix-env --set` - set profile to contain a specified derivation - -## Synopsis - -`nix-env` `--set` *drvname* - -## Description - -The `--set` operation modifies the current generation of a profile so -that it contains exactly the specified derivation, and nothing else. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -## Examples - -The following updates a profile such that its current generation will -contain just Firefox: - -```console -$ nix-env --profile /nix/var/nix/profiles/browser --set firefox -``` diff --git a/doc/manual/src/command-ref/nix-env/switch-generation.md b/doc/manual/src/command-ref/nix-env/switch-generation.md deleted file mode 100644 index d211c5f85..000000000 --- a/doc/manual/src/command-ref/nix-env/switch-generation.md +++ /dev/null @@ -1,32 +0,0 @@ -# Name - -`nix-env --switch-generation` - set user environment to given profile generation - -# Synopsis - -`nix-env` {`--switch-generation` | `-G`} *generation* - -# Description - -This operation makes generation number *generation* the current -generation of the active profile. That is, if the `profile` is the path -to the active profile, then the symlink `profile` is made to point to -`profile-generation-link`, which is in turn a symlink to the actual user -environment in the Nix store. - -Switching will fail if the specified generation does not exist. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -```console -$ nix-env --switch-generation 42 -switching from generation 50 to 42 -``` diff --git a/doc/manual/src/command-ref/nix-env/switch-profile.md b/doc/manual/src/command-ref/nix-env/switch-profile.md deleted file mode 100644 index 5ae2fdced..000000000 --- a/doc/manual/src/command-ref/nix-env/switch-profile.md +++ /dev/null @@ -1,26 +0,0 @@ -# Name - -`nix-env --switch-profile` - set user environment to given profile - -# Synopsis - -`nix-env` {`--switch-profile` | `-S`} *path* - -# Description - -This operation makes *path* the current profile for the user. That is, -the symlink `~/.nix-profile` is made to point to *path*. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -```console -$ nix-env --switch-profile ~/my-profile -``` diff --git a/doc/manual/src/command-ref/nix-env/uninstall.md b/doc/manual/src/command-ref/nix-env/uninstall.md deleted file mode 100644 index 734cc7675..000000000 --- a/doc/manual/src/command-ref/nix-env/uninstall.md +++ /dev/null @@ -1,28 +0,0 @@ -# Name - -`nix-env --uninstall` - remove packages from user environment - -# Synopsis - -`nix-env` {`--uninstall` | `-e`} *drvnames…* - -# Description - -The uninstall operation creates a new user environment, based on the -current generation of the active profile, from which the store paths -designated by the symbolic names *drvnames* are removed. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -```console -$ nix-env --uninstall gcc -$ nix-env --uninstall '.*' (remove everything) -``` diff --git a/doc/manual/src/command-ref/nix-env/upgrade.md b/doc/manual/src/command-ref/nix-env/upgrade.md deleted file mode 100644 index 11e0eddbe..000000000 --- a/doc/manual/src/command-ref/nix-env/upgrade.md +++ /dev/null @@ -1,140 +0,0 @@ -# Name - -`nix-env --upgrade` - upgrade packages in user environment - -# Synopsis - -`nix-env` {`--upgrade` | `-u`} *args* - [`--lt` | `--leq` | `--eq` | `--always`] - [{`--prebuilt-only` | `-b`}] - [{`--attr` | `-A`}] - [`--from-expression`] [`-E`] - [`--from-profile` *path*] - [`--preserve-installed` | `-P`] - -# Description - -The upgrade operation creates a new user environment, based on the -current generation of the active profile, in which all store paths are -replaced for which there are newer versions in the set of paths -described by *args*. Paths for which there are no newer versions are -left untouched; this is not an error. It is also not an error if an -element of *args* matches no installed derivations. - -For a description of how *args* is mapped to a set of store paths, see -[`--install`](#operation---install). If *args* describes multiple -store paths with the same symbolic name, only the one with the highest -version is installed. - -# Flags - - - `--lt`\ - Only upgrade a derivation to newer versions. This is the default. - - - `--leq`\ - In addition to upgrading to newer versions, also “upgrade” to - derivations that have the same version. Version are not a unique - identification of a derivation, so there may be many derivations - that have the same version. This flag may be useful to force - “synchronisation” between the installed and available derivations. - - - `--eq`\ - *Only* “upgrade” to derivations that have the same version. This may - not seem very useful, but it actually is, e.g., when there is a new - release of Nixpkgs and you want to replace installed applications - with the same versions built against newer dependencies (to reduce - the number of dependencies floating around on your system). - - - `--always`\ - In addition to upgrading to newer versions, also “upgrade” to - derivations that have the same or a lower version. I.e., derivations - may actually be downgraded depending on what is available in the - active Nix expression. - - - `--prebuilt-only` / `-b`\ - Use only derivations for which a substitute is registered, i.e., - there is a pre-built binary available that can be downloaded in lieu - of building the derivation. Thus, no packages will be built from - source. - - - `--preserve-installed` / `-P`\ - Do not remove derivations with a name matching one of the - derivations being installed. Usually, trying to have two versions of - the same package installed in the same generation of a profile will - lead to an error in building the generation, due to file name - clashes between the two versions. However, this is not the case for - all packages. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ./env-common.md}} - -{{#include ../env-common.md}} - -# Examples - -```console -$ nix-env --upgrade --attr nixpkgs.gcc -upgrading `gcc-3.3.1' to `gcc-3.4' -``` - -When there are no updates available, nothing will happen: - -```console -$ nix-env --upgrade --attr nixpkgs.pan -``` - -Using `-A` is preferred when possible, as it is faster and unambiguous but -it is also possible to upgrade to a specific version by matching the derivation name: - -```console -$ nix-env --upgrade gcc-3.3.2 --always -upgrading `gcc-3.4' to `gcc-3.3.2' -``` - -To try to upgrade everything -(matching packages based on the part of the derivation name without version): - -```console -$ nix-env --upgrade -upgrading `hello-2.1.2' to `hello-2.1.3' -upgrading `mozilla-1.2' to `mozilla-1.4' -``` - -# Versions - -The upgrade operation determines whether a derivation `y` is an upgrade -of a derivation `x` by looking at their respective `name` attributes. -The names (e.g., `gcc-3.3.1` are split into two parts: the package name -(`gcc`), and the version (`3.3.1`). The version part starts after the -first dash not followed by a letter. `y` is considered an upgrade of `x` -if their package names match, and the version of `y` is higher than that -of `x`. - -The versions are compared by splitting them into contiguous components -of numbers and letters. E.g., `3.3.1pre5` is split into `[3, 3, 1, -"pre", 5]`. These lists are then compared lexicographically (from left -to right). Corresponding components `a` and `b` are compared as follows. -If they are both numbers, integer comparison is used. If `a` is an empty -string and `b` is a number, `a` is considered less than `b`. The special -string component `pre` (for *pre-release*) is considered to be less than -other components. String components are considered less than number -components. Otherwise, they are compared lexicographically (i.e., using -case-sensitive string comparison). - -This is illustrated by the following examples: - - 1.0 < 2.3 - 2.1 < 2.3 - 2.3 = 2.3 - 2.5 > 2.3 - 3.1 > 2.3 - 2.3.1 > 2.3 - 2.3.1 > 2.3a - 2.3pre1 < 2.3 - 2.3pre3 < 2.3pre12 - 2.3a < 2.3c - 2.3pre1 < 2.3c - 2.3pre1 < 2.3q diff --git a/doc/manual/src/command-ref/nix-hash.md b/doc/manual/src/command-ref/nix-hash.md deleted file mode 100644 index 37c8facec..000000000 --- a/doc/manual/src/command-ref/nix-hash.md +++ /dev/null @@ -1,138 +0,0 @@ -# Name - -`nix-hash` - compute the cryptographic hash of a path - -# Synopsis - -`nix-hash` [`--flat`] [`--base32`] [`--truncate`] [`--type` *hashAlgo*] *path…* - -`nix-hash` [`--to-base16`|`--to-base32`|`--to-base64`|`--to-sri`] [`--type` *hashAlgo*] *hash…* - -# Description - -The command `nix-hash` computes the cryptographic hash of the contents -of each *path* and prints it on standard output. By default, it computes -an MD5 hash, but other hash algorithms are available as well. The hash -is printed in hexadecimal. To generate the same hash as -`nix-prefetch-url` you have to specify multiple arguments, see below for -an example. - -The hash is computed over a *serialisation* of each path: a dump of -the file system tree rooted at the path. This allows directories and -symlinks to be hashed as well as regular files. The dump is in the -*NAR format* produced by [`nix-store ---dump`](@docroot@/command-ref/nix-store/dump.md). Thus, `nix-hash path` -yields the same cryptographic hash as `nix-store --dump path | -md5sum`. - -# Options - - - `--flat`\ - Print the cryptographic hash of the contents of each regular file - *path*. That is, do not compute the hash over the dump of *path*. - The result is identical to that produced by the GNU commands - `md5sum` and `sha1sum`. - - - `--base16`\ - Print the hash in a hexadecimal representation (default). - - - `--base32`\ - Print the hash in a base-32 representation rather than hexadecimal. - This base-32 representation is more compact and can be used in Nix - expressions (such as in calls to `fetchurl`). - - - `--base64`\ - Similar to --base32, but print the hash in a base-64 representation, - which is more compact than the base-32 one. - - - `--sri`\ - Print the hash in SRI format with base-64 encoding. - The type of hash algorithm will be prepended to the hash string, - followed by a hyphen (-) and the base-64 hash body. - - - `--truncate`\ - Truncate hashes longer than 160 bits (such as SHA-256) to 160 bits. - - - `--type` *hashAlgo*\ - Use the specified cryptographic hash algorithm, which can be one of - `md5`, `sha1`, `sha256`, and `sha512`. - - - `--to-base16`\ - Don’t hash anything, but convert the base-32 hash representation - *hash* to hexadecimal. - - - `--to-base32`\ - Don’t hash anything, but convert the hexadecimal hash representation - *hash* to base-32. - - - `--to-base64`\ - Don’t hash anything, but convert the hexadecimal hash representation - *hash* to base-64. - - - `--to-sri`\ - Don’t hash anything, but convert the hexadecimal hash representation - *hash* to SRI. - -# Examples - -Computing the same hash as `nix-prefetch-url`: - -```console -$ nix-prefetch-url file://<(echo test) -1lkgqb6fclns49861dwk9rzb6xnfkxbpws74mxnx01z9qyv1pjpj -$ nix-hash --type sha256 --flat --base32 <(echo test) -1lkgqb6fclns49861dwk9rzb6xnfkxbpws74mxnx01z9qyv1pjpj -``` - -Computing hashes: - -```console -$ mkdir test -$ echo "hello" > test/world - -$ nix-hash test/ (MD5 hash; default) -8179d3caeff1869b5ba1744e5a245c04 - -$ nix-store --dump test/ | md5sum (for comparison) -8179d3caeff1869b5ba1744e5a245c04 - - -$ nix-hash --type sha1 test/ -e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6 - -$ nix-hash --type sha1 --base16 test/ -e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6 - -$ nix-hash --type sha1 --base32 test/ -nvd61k9nalji1zl9rrdfmsmvyyjqpzg4 - -$ nix-hash --type sha1 --base64 test/ -5P2Lpfe76upazon+ECVVNs1g2rY= - -$ nix-hash --type sha1 --sri test/ -sha1-5P2Lpfe76upazon+ECVVNs1g2rY= - -$ nix-hash --type sha256 --flat test/ -error: reading file `test/': Is a directory - -$ nix-hash --type sha256 --flat test/world -5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 -``` - -Converting between hexadecimal, base-32, base-64, and SRI: - -```console -$ nix-hash --type sha1 --to-base32 e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6 -nvd61k9nalji1zl9rrdfmsmvyyjqpzg4 - -$ nix-hash --type sha1 --to-base16 nvd61k9nalji1zl9rrdfmsmvyyjqpzg4 -e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6 - -$ nix-hash --type sha1 --to-base64 e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6 -5P2Lpfe76upazon+ECVVNs1g2rY= - -$ nix-hash --type sha1 --to-sri nvd61k9nalji1zl9rrdfmsmvyyjqpzg4 -sha1-5P2Lpfe76upazon+ECVVNs1g2rY= - -$ nix-hash --to-base16 sha1-5P2Lpfe76upazon+ECVVNs1g2rY= -e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6 -``` diff --git a/doc/manual/src/command-ref/nix-instantiate.md b/doc/manual/src/command-ref/nix-instantiate.md deleted file mode 100644 index 479c9abcf..000000000 --- a/doc/manual/src/command-ref/nix-instantiate.md +++ /dev/null @@ -1,194 +0,0 @@ -# Name - -`nix-instantiate` - instantiate store derivations from Nix expressions - -# Synopsis - -`nix-instantiate` - [`--parse` | `--eval` [`--strict`] [`--json`] [`--xml`] ] - [`--read-write-mode`] - [`--arg` *name* *value*] - [{`--attr`| `-A`} *attrPath*] - [`--add-root` *path*] - [`--expr` | `-E`] - *files…* - -`nix-instantiate` `--find-file` *files…* - -# Description - -The command `nix-instantiate` produces [store derivation]s from (high-level) Nix expressions. -It evaluates the Nix expressions in each of *files* (which defaults to -*./default.nix*). Each top-level expression should evaluate to a -derivation, a list of derivations, or a set of derivations. The paths -of the resulting store derivations are printed on standard output. - -[store derivation]: ../glossary.md#gloss-store-derivation - -If *files* is the character `-`, then a Nix expression will be read from -standard input. - -# Options - - - `--add-root` *path*\ - See the [corresponding option](nix-store.md) in `nix-store`. - - - `--parse`\ - Just parse the input files, and print their abstract syntax trees on - standard output as a Nix expression. - - - `--eval`\ - Just parse and evaluate the input files, and print the resulting - values on standard output. No instantiation of store derivations - takes place. - - > **Warning** - > - > This option produces output which can be parsed as a Nix expression which - > will produce a different result than the input expression when evaluated. - > For example, these two Nix expressions print the same result despite - > having different meaning: - > - > ```console - > $ nix-instantiate --eval --expr '{ a = {}; }' - > { a = ; } - > $ nix-instantiate --eval --expr '{ a = ; }' - > { a = ; } - > ``` - > - > For human-readable output, `nix eval` (experimental) is more informative: - > - > ```console - > $ nix-instantiate --eval --expr 'a: a' - > - > $ nix eval --expr 'a: a' - > «lambda @ «string»:1:1» - > ``` - > - > For machine-readable output, the `--xml` option produces unambiguous - > output: - > - > ```console - > $ nix-instantiate --eval --xml --expr '{ foo = ; }' - > - > - > - > - > - > - > - > - > ``` - - - `--find-file`\ - Look up the given files in Nix’s search path (as specified by the - `NIX_PATH` environment variable). If found, print the corresponding - absolute paths on standard output. For instance, if `NIX_PATH` is - `nixpkgs=/home/alice/nixpkgs`, then `nix-instantiate --find-file - nixpkgs/default.nix` will print `/home/alice/nixpkgs/default.nix`. - - - `--strict`\ - When used with `--eval`, recursively evaluate list elements and - attributes. Normally, such sub-expressions are left unevaluated - (since the Nix language is lazy). - - > **Warning** - > - > This option can cause non-termination, because lazy data - > structures can be infinitely large. - - - `--json`\ - When used with `--eval`, print the resulting value as an JSON - representation of the abstract syntax tree rather than as a Nix expression. - - - `--xml`\ - When used with `--eval`, print the resulting value as an XML - representation of the abstract syntax tree rather than as a Nix expression. - The schema is the same as that used by the [`toXML` - built-in](../language/builtins.md). - - - `--read-write-mode`\ - When used with `--eval`, perform evaluation in read/write mode so - nix language features that require it will still work (at the cost - of needing to do instantiation of every evaluated derivation). If - this option is not enabled, there may be uninstantiated store paths - in the final output. - -{{#include ./opt-common.md}} - -{{#include ./env-common.md}} - -# Examples - -Instantiate [store derivation]s from a Nix expression, and build them using `nix-store`: - -```console -$ nix-instantiate test.nix (instantiate) -/nix/store/cigxbmvy6dzix98dxxh9b6shg7ar5bvs-perl-BerkeleyDB-0.26.drv - -$ nix-store --realise $(nix-instantiate test.nix) (build) -... -/nix/store/qhqk4n8ci095g3sdp93x7rgwyh9rdvgk-perl-BerkeleyDB-0.26 (output path) - -$ ls -l /nix/store/qhqk4n8ci095g3sdp93x7rgwyh9rdvgk-perl-BerkeleyDB-0.26 -dr-xr-xr-x 2 eelco users 4096 1970-01-01 01:00 lib -... -``` - -You can also give a Nix expression on the command line: - -```console -$ nix-instantiate --expr 'with import { }; hello' -/nix/store/j8s4zyv75a724q38cb0r87rlczaiag4y-hello-2.8.drv -``` - -This is equivalent to: - -```console -$ nix-instantiate '' --attr hello -``` - -Parsing and evaluating Nix expressions: - -```console -$ nix-instantiate --parse --expr '1 + 2' -1 + 2 -``` - -```console -$ nix-instantiate --eval --expr '1 + 2' -3 -``` - -```console -$ nix-instantiate --eval --xml --expr '1 + 2' - - - - -``` - -The difference between non-strict and strict evaluation: - -```console -$ nix-instantiate --eval --xml --expr '{ x = {}; }' - - - - - - - - - -$ nix-instantiate --eval --xml --strict --expr '{ x = {}; }' - - - - - - - - - -``` diff --git a/doc/manual/src/command-ref/nix-prefetch-url.md b/doc/manual/src/command-ref/nix-prefetch-url.md deleted file mode 100644 index 45ef01e02..000000000 --- a/doc/manual/src/command-ref/nix-prefetch-url.md +++ /dev/null @@ -1,81 +0,0 @@ -# Name - -`nix-prefetch-url` - copy a file from a URL into the store and print its hash - -# Synopsis - -`nix-prefetch-url` *url* [*hash*] - [`--type` *hashAlgo*] - [`--print-path`] - [`--unpack`] - [`--name` *name*] - -# Description - -The command `nix-prefetch-url` downloads the file referenced by the URL -*url*, prints its cryptographic hash, and copies it into the Nix store. -The file name in the store is `hash-baseName`, where *baseName* is -everything following the final slash in *url*. - -This command is just a convenience for Nix expression writers. Often a -Nix expression fetches some source distribution from the network using -the `fetchurl` expression contained in Nixpkgs. However, `fetchurl` -requires a cryptographic hash. If you don't know the hash, you would -have to download the file first, and then `fetchurl` would download it -again when you build your Nix expression. Since `fetchurl` uses the same -name for the downloaded file as `nix-prefetch-url`, the redundant -download can be avoided. - -If *hash* is specified, then a download is not performed if the Nix -store already contains a file with the same hash and base name. -Otherwise, the file is downloaded, and an error is signaled if the -actual hash of the file does not match the specified hash. - -This command prints the hash on standard output. -The hash is printed using base-32 unless `--type md5` is specified, -in which case it's printed using base-16. -Additionally, if the option `--print-path` is used, -the path of the downloaded file in the Nix store is also printed. - -# Options - - - `--type` *hashAlgo*\ - Use the specified cryptographic hash algorithm, - which can be one of `md5`, `sha1`, `sha256`, and `sha512`. - The default is `sha256`. - - - `--print-path`\ - Print the store path of the downloaded file on standard output. - - - `--unpack`\ - Unpack the archive (which must be a tarball or zip file) and add the - result to the Nix store. The resulting hash can be used with - functions such as Nixpkgs’s `fetchzip` or `fetchFromGitHub`. - - - `--executable`\ - Set the executable bit on the downloaded file. - - - `--name` *name*\ - Override the name of the file in the Nix store. By default, this is - `hash-basename`, where *basename* is the last component of *url*. - Overriding the name is necessary when *basename* contains characters - that are not allowed in Nix store paths. - -# Examples - -```console -$ nix-prefetch-url ftp://ftp.gnu.org/pub/gnu/hello/hello-2.10.tar.gz -0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i -``` - -```console -$ nix-prefetch-url --print-path mirror://gnu/hello/hello-2.10.tar.gz -0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i -/nix/store/3x7dwzq014bblazs7kq20p9hyzz0qh8g-hello-2.10.tar.gz -``` - -```console -$ nix-prefetch-url --unpack --print-path https://github.com/NixOS/patchelf/archive/0.8.tar.gz -079agjlv0hrv7fxnx9ngipx14gyncbkllxrp9cccnh3a50fxcmy7 -/nix/store/19zrmhm3m40xxaw81c8cqm6aljgrnwj2-0.8.tar.gz -``` diff --git a/doc/manual/src/command-ref/nix-shell.md b/doc/manual/src/command-ref/nix-shell.md deleted file mode 100644 index 1eaf3c36a..000000000 --- a/doc/manual/src/command-ref/nix-shell.md +++ /dev/null @@ -1,291 +0,0 @@ -# Name - -`nix-shell` - start an interactive shell based on a Nix expression - -# Synopsis - -`nix-shell` - [`--arg` *name* *value*] - [`--argstr` *name* *value*] - [{`--attr` | `-A`} *attrPath*] - [`--command` *cmd*] - [`--run` *cmd*] - [`--exclude` *regexp*] - [`--pure`] - [`--keep` *name*] - {{`--packages` | `-p`} {*packages* | *expressions*} … | [*path*]} - -# Disambiguation - -This man page describes the command `nix-shell`, which is distinct from `nix -shell`. For documentation on the latter, run `nix shell --help` or see `man -nix3-shell`. - -# Description - -The command `nix-shell` will build the dependencies of the specified -derivation, but not the derivation itself. It will then start an -interactive shell in which all environment variables defined by the -derivation *path* have been set to their corresponding values, and the -script `$stdenv/setup` has been sourced. This is useful for reproducing -the environment of a derivation for development. - -If *path* is not given, `nix-shell` defaults to `shell.nix` if it -exists, and `default.nix` otherwise. - -If *path* starts with `http://` or `https://`, it is interpreted as the -URL of a tarball that will be downloaded and unpacked to a temporary -location. The tarball must include a single top-level directory -containing at least a file named `default.nix`. - -If the derivation defines the variable `shellHook`, it will be run -after `$stdenv/setup` has been sourced. Since this hook is not executed -by regular Nix builds, it allows you to perform initialisation specific -to `nix-shell`. For example, the derivation attribute - -```nix -shellHook = - '' - echo "Hello shell" - export SOME_API_TOKEN="$(cat ~/.config/some-app/api-token)" - ''; -``` - -will cause `nix-shell` to print `Hello shell` and set the `SOME_API_TOKEN` -environment variable to a user-configured value. - -# Options - -All options not listed here are passed to `nix-store ---realise`, except for `--arg` and `--attr` / `-A` which are passed to -`nix-instantiate`. - - - `--command` *cmd*\ - In the environment of the derivation, run the shell command *cmd*. - This command is executed in an interactive shell. (Use `--run` to - use a non-interactive shell instead.) However, a call to `exit` is - implicitly added to the command, so the shell will exit after - running the command. To prevent this, add `return` at the end; - e.g. `--command "echo Hello; return"` will print `Hello` and then - drop you into the interactive shell. This can be useful for doing - any additional initialisation. - - - `--run` *cmd*\ - Like `--command`, but executes the command in a non-interactive - shell. This means (among other things) that if you hit Ctrl-C while - the command is running, the shell exits. - - - `--exclude` *regexp*\ - Do not build any dependencies whose store path matches the regular - expression *regexp*. This option may be specified multiple times. - - - `--pure`\ - If this flag is specified, the environment is almost entirely - cleared before the interactive shell is started, so you get an - environment that more closely corresponds to the “real” Nix build. A - few variables, in particular `HOME`, `USER` and `DISPLAY`, are - retained. - - - `--packages` / `-p` *packages*…\ - Set up an environment in which the specified packages are present. - The command line arguments are interpreted as attribute names inside - the Nix Packages collection. Thus, `nix-shell --packages libjpeg openjdk` - will start a shell in which the packages denoted by the attribute - names `libjpeg` and `openjdk` are present. - - - `-i` *interpreter*\ - The chained script interpreter to be invoked by `nix-shell`. Only - applicable in `#!`-scripts (described below). - - - `--keep` *name*\ - When a `--pure` shell is started, keep the listed environment - variables. - -{{#include ./opt-common.md}} - -# Environment variables - - - `NIX_BUILD_SHELL`\ - Shell used to start the interactive environment. Defaults to the - `bash` found in ``, falling back to the `bash` found in - `PATH` if not found. - -{{#include ./env-common.md}} - -# Examples - -To build the dependencies of the package Pan, and start an interactive -shell in which to build it: - -```console -$ nix-shell '' --attr pan -[nix-shell]$ eval ${unpackPhase:-unpackPhase} -[nix-shell]$ cd $sourceRoot -[nix-shell]$ eval ${patchPhase:-patchPhase} -[nix-shell]$ eval ${configurePhase:-configurePhase} -[nix-shell]$ eval ${buildPhase:-buildPhase} -[nix-shell]$ ./pan/gui/pan -``` - -The reason we use form `eval ${configurePhase:-configurePhase}` here is because -those packages that override these phases do so by exporting the overridden -values in the environment variable of the same name. -Here bash is being told to either evaluate the contents of 'configurePhase', -if it exists as a variable, otherwise evaluate the configurePhase function. - -To clear the environment first, and do some additional automatic -initialisation of the interactive shell: - -```console -$ nix-shell '' --attr pan --pure \ - --command 'export NIX_DEBUG=1; export NIX_CORES=8; return' -``` - -Nix expressions can also be given on the command line using the `-E` and -`-p` flags. For instance, the following starts a shell containing the -packages `sqlite` and `libX11`: - -```console -$ nix-shell --expr 'with import { }; runCommand "dummy" { buildInputs = [ sqlite xorg.libX11 ]; } ""' -``` - -A shorter way to do the same is: - -```console -$ nix-shell --packages sqlite xorg.libX11 -[nix-shell]$ echo $NIX_LDFLAGS -… -L/nix/store/j1zg5v…-sqlite-3.8.0.2/lib -L/nix/store/0gmcz9…-libX11-1.6.1/lib … -``` - -Note that `-p` accepts multiple full nix expressions that are valid in -the `buildInputs = [ ... ]` shown above, not only package names. So the -following is also legal: - -```console -$ nix-shell --packages sqlite 'git.override { withManual = false; }' -``` - -The `-p` flag looks up Nixpkgs in the Nix search path. You can override -it by passing `-I` or setting `NIX_PATH`. For example, the following -gives you a shell containing the Pan package from a specific revision of -Nixpkgs: - -```console -$ nix-shell --packages pan -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/8a3eea054838b55aca962c3fbde9c83c102b8bf2.tar.gz - -[nix-shell:~]$ pan --version -Pan 0.139 -``` - -# Use as a `#!`-interpreter - -You can use `nix-shell` as a script interpreter to allow scripts written -in arbitrary languages to obtain their own dependencies via Nix. This is -done by starting the script with the following lines: - -```bash -#! /usr/bin/env nix-shell -#! nix-shell -i real-interpreter --packages packages -``` - -where *real-interpreter* is the “real” script interpreter that will be -invoked by `nix-shell` after it has obtained the dependencies and -initialised the environment, and *packages* are the attribute names of -the dependencies in Nixpkgs. - -The lines starting with `#! nix-shell` specify `nix-shell` options (see -above). Note that you cannot write `#! /usr/bin/env nix-shell -i ...` -because many operating systems only allow one argument in `#!` lines. - -For example, here is a Python script that depends on Python and the -`prettytable` package: - -```python -#! /usr/bin/env nix-shell -#! nix-shell -i python --packages python pythonPackages.prettytable - -import prettytable - -# Print a simple table. -t = prettytable.PrettyTable(["N", "N^2"]) -for n in range(1, 10): t.add_row([n, n * n]) -print t -``` - -Similarly, the following is a Perl script that specifies that it -requires Perl and the `HTML::TokeParser::Simple` and `LWP` packages: - -```perl -#! /usr/bin/env nix-shell -#! nix-shell -i perl --packages perl perlPackages.HTMLTokeParserSimple perlPackages.LWP - -use HTML::TokeParser::Simple; - -# Fetch nixos.org and print all hrefs. -my $p = HTML::TokeParser::Simple->new(url => 'http://nixos.org/'); - -while (my $token = $p->get_tag("a")) { - my $href = $token->get_attr("href"); - print "$href\n" if $href; -} -``` - -Sometimes you need to pass a simple Nix expression to customize a -package like Terraform: - -```bash -#! /usr/bin/env nix-shell -#! nix-shell -i bash --packages 'terraform.withPlugins (plugins: [ plugins.openstack ])' - -terraform apply -``` - -> **Note** -> -> You must use single or double quotes (`'`, `"`) when passing a simple Nix expression -> in a nix-shell shebang. - -Finally, using the merging of multiple nix-shell shebangs the following -Haskell script uses a specific branch of Nixpkgs/NixOS (the 20.03 stable -branch): - -```haskell -#! /usr/bin/env nix-shell -#! nix-shell -i runghc --packages 'haskellPackages.ghcWithPackages (ps: [ps.download-curl ps.tagsoup])' -#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/nixos-20.03.tar.gz - -import Network.Curl.Download -import Text.HTML.TagSoup -import Data.Either -import Data.ByteString.Char8 (unpack) - --- Fetch nixos.org and print all hrefs. -main = do - resp <- openURI "https://nixos.org/" - let tags = filter (isTagOpenName "a") $ parseTags $ unpack $ fromRight undefined resp - let tags' = map (fromAttrib "href") tags - mapM_ putStrLn $ filter (/= "") tags' -``` - -If you want to be even more precise, you can specify a specific revision -of Nixpkgs: - - #! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/0672315759b3e15e2121365f067c1c8c56bb4722.tar.gz - -The examples above all used `-p` to get dependencies from Nixpkgs. You -can also use a Nix expression to build your own dependencies. For -example, the Python example could have been written as: - -```python -#! /usr/bin/env nix-shell -#! nix-shell deps.nix -i python -``` - -where the file `deps.nix` in the same directory as the `#!`-script -contains: - -```nix -with import {}; - -runCommand "dummy" { buildInputs = [ python pythonPackages.prettytable ]; } "" -``` diff --git a/doc/manual/src/command-ref/nix-store.md b/doc/manual/src/command-ref/nix-store.md deleted file mode 100644 index c7c5fdd2f..000000000 --- a/doc/manual/src/command-ref/nix-store.md +++ /dev/null @@ -1,47 +0,0 @@ -# Name - -`nix-store` - manipulate or query the Nix store - -# Synopsis - -`nix-store` *operation* [*options…*] [*arguments…*] - [`--option` *name* *value*] - [`--add-root` *path*] - -# Description - -The command `nix-store` performs primitive operations on the Nix store. -You generally do not need to run this command manually. - -`nix-store` takes exactly one *operation* flag which indicates the subcommand to be performed. The following operations are available: - -- [`--realise`](./nix-store/realise.md) -- [`--serve`](./nix-store/serve.md) -- [`--gc`](./nix-store/gc.md) -- [`--delete`](./nix-store/delete.md) -- [`--query`](./nix-store/query.md) -- [`--add`](./nix-store/add.md) -- [`--add-fixed`](./nix-store/add-fixed.md) -- [`--verify`](./nix-store/verify.md) -- [`--verify-path`](./nix-store/verify-path.md) -- [`--repair-path`](./nix-store/repair-path.md) -- [`--dump`](./nix-store/dump.md) -- [`--restore`](./nix-store/restore.md) -- [`--export`](./nix-store/export.md) -- [`--import`](./nix-store/import.md) -- [`--optimise`](./nix-store/optimise.md) -- [`--read-log`](./nix-store/read-log.md) -- [`--dump-db`](./nix-store/dump-db.md) -- [`--load-db`](./nix-store/load-db.md) -- [`--print-env`](./nix-store/print-env.md) -- [`--generate-binary-cache-key`](./nix-store/generate-binary-cache-key.md) - -These pages can be viewed offline: - -- `man nix-store-`. - - Example: `man nix-store-realise` - -- `nix-store --help --` - - Example: `nix-store --help --realise` diff --git a/doc/manual/src/command-ref/nix-store/add-fixed.md b/doc/manual/src/command-ref/nix-store/add-fixed.md deleted file mode 100644 index 3f02e3155..000000000 --- a/doc/manual/src/command-ref/nix-store/add-fixed.md +++ /dev/null @@ -1,34 +0,0 @@ -# Name - -`nix-store --add-fixed` - add paths to store using given hashing algorithm - -## Synopsis - -`nix-store` `--add-fixed` [`--recursive`] *algorithm* *paths…* - -## Description - -The operation `--add-fixed` adds the specified paths to the Nix store. -Unlike `--add` paths are registered using the specified hashing -algorithm, resulting in the same output path as a fixed-output -derivation. This can be used for sources that are not available from a -public url or broke since the download expression was written. - -This operation has the following options: - - - `--recursive`\ - Use recursive instead of flat hashing mode, used when adding - directories to the store. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -## Example - -```console -$ nix-store --add-fixed sha256 ./hello-2.10.tar.gz -/nix/store/3x7dwzq014bblazs7kq20p9hyzz0qh8g-hello-2.10.tar.gz -``` diff --git a/doc/manual/src/command-ref/nix-store/add.md b/doc/manual/src/command-ref/nix-store/add.md deleted file mode 100644 index 87d504cd3..000000000 --- a/doc/manual/src/command-ref/nix-store/add.md +++ /dev/null @@ -1,25 +0,0 @@ -# Name - -`nix-store --add` - add paths to Nix store - -# Synopsis - -`nix-store` `--add` *paths…* - -# Description - -The operation `--add` adds the specified paths to the Nix store. It -prints the resulting paths in the Nix store on standard output. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Example - -```console -$ nix-store --add ./foo.c -/nix/store/m7lrha58ph6rcnv109yzx1nk1cj7k7zf-foo.c -``` diff --git a/doc/manual/src/command-ref/nix-store/delete.md b/doc/manual/src/command-ref/nix-store/delete.md deleted file mode 100644 index 550c5ea29..000000000 --- a/doc/manual/src/command-ref/nix-store/delete.md +++ /dev/null @@ -1,33 +0,0 @@ -# Name - -`nix-store --delete` - delete store paths - -# Synopsis - -`nix-store` `--delete` [`--ignore-liveness`] *paths…* - -# Description - -The operation `--delete` deletes the store paths *paths* from the Nix -store, but only if it is safe to do so; that is, when the path is not -reachable from a root of the garbage collector. This means that you can -only delete paths that would also be deleted by `nix-store --gc`. Thus, -`--delete` is a more targeted version of `--gc`. - -With the option `--ignore-liveness`, reachability from the roots is -ignored. However, the path still won’t be deleted if there are other -paths in the store that refer to it (i.e., depend on it). - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Example - -```console -$ nix-store --delete /nix/store/zq0h41l75vlb4z45kzgjjmsjxvcv1qk7-mesa-6.4 -0 bytes freed (0.00 MiB) -error: cannot delete path `/nix/store/zq0h41l75vlb4z45kzgjjmsjxvcv1qk7-mesa-6.4' since it is still alive -``` diff --git a/doc/manual/src/command-ref/nix-store/dump-db.md b/doc/manual/src/command-ref/nix-store/dump-db.md deleted file mode 100644 index b2c77ced0..000000000 --- a/doc/manual/src/command-ref/nix-store/dump-db.md +++ /dev/null @@ -1,26 +0,0 @@ -# Name - -`nix-store --dump-db` - export Nix database - -# Synopsis - -`nix-store` `--dump-db` [*paths…*] - -# Description - -The operation `--dump-db` writes a dump of the Nix database to standard -output. It can be loaded into an empty Nix store using `--load-db`. This -is useful for making backups and when migrating to different database -schemas. - -By default, `--dump-db` will dump the entire Nix database. When one or -more store paths is passed, only the subset of the Nix database for -those store paths is dumped. As with `--export`, the user is responsible -for passing all the store paths for a closure. See `--export` for an -example. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} diff --git a/doc/manual/src/command-ref/nix-store/dump.md b/doc/manual/src/command-ref/nix-store/dump.md deleted file mode 100644 index c2f3c42ef..000000000 --- a/doc/manual/src/command-ref/nix-store/dump.md +++ /dev/null @@ -1,40 +0,0 @@ -# Name - -`nix-store --dump` - write a single path to a Nix Archive - -## Synopsis - -`nix-store` `--dump` *path* - -## Description - -The operation `--dump` produces a NAR (Nix ARchive) file containing the -contents of the file system tree rooted at *path*. The archive is -written to standard output. - -A NAR archive is like a TAR or Zip archive, but it contains only the -information that Nix considers important. For instance, timestamps are -elided because all files in the Nix store have their timestamp set to 0 -anyway. Likewise, all permissions are left out except for the execute -bit, because all files in the Nix store have 444 or 555 permission. - -Also, a NAR archive is *canonical*, meaning that “equal” paths always -produce the same NAR archive. For instance, directory entries are -always sorted so that the actual on-disk order doesn’t influence the -result. This means that the cryptographic hash of a NAR dump of a -path is usable as a fingerprint of the contents of the path. Indeed, -the hashes of store paths stored in Nix’s database (see `nix-store --query ---hash`) are SHA-256 hashes of the NAR dump of each store path. - -NAR archives support filenames of unlimited length and 64-bit file -sizes. They can contain regular files, directories, and symbolic links, -but not other types of files (such as device nodes). - -A Nix archive can be unpacked using `nix-store ---restore`. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} diff --git a/doc/manual/src/command-ref/nix-store/export.md b/doc/manual/src/command-ref/nix-store/export.md deleted file mode 100644 index 1bc46f53b..000000000 --- a/doc/manual/src/command-ref/nix-store/export.md +++ /dev/null @@ -1,41 +0,0 @@ -# Name - -`nix-store --export` - export store paths to a Nix Archive - -## Synopsis - -`nix-store` `--export` *paths…* - -## Description - -The operation `--export` writes a serialisation of the specified store -paths to standard output in a format that can be imported into another -Nix store with `nix-store --import`. This is like `nix-store ---dump`, except that the NAR archive produced by that command doesn’t -contain the necessary meta-information to allow it to be imported into -another Nix store (namely, the set of references of the path). - -This command does not produce a *closure* of the specified paths, so if -a store path references other store paths that are missing in the target -Nix store, the import will fail. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Examples - -To copy a whole closure, do something -like: - -```console -$ nix-store --export $(nix-store --query --requisites paths) > out -``` - -To import the whole closure again, run: - -```console -$ nix-store --import < out -``` diff --git a/doc/manual/src/command-ref/nix-store/gc.md b/doc/manual/src/command-ref/nix-store/gc.md deleted file mode 100644 index 4d7b41db2..000000000 --- a/doc/manual/src/command-ref/nix-store/gc.md +++ /dev/null @@ -1,71 +0,0 @@ -# Name - -`nix-store --gc` - run garbage collection - -# Synopsis - -`nix-store` `--gc` [`--print-roots` | `--print-live` | `--print-dead`] [`--max-freed` *bytes*] - -# Description - -Without additional flags, the operation `--gc` performs a garbage -collection on the Nix store. That is, all paths in the Nix store not -reachable via file system references from a set of “roots”, are deleted. - -The following suboperations may be specified: - - - `--print-roots`\ - This operation prints on standard output the set of roots used by - the garbage collector. - - - `--print-live`\ - This operation prints on standard output the set of “live” store - paths, which are all the store paths reachable from the roots. Live - paths should never be deleted, since that would break consistency — - it would become possible that applications are installed that - reference things that are no longer present in the store. - - - `--print-dead`\ - This operation prints out on standard output the set of “dead” store - paths, which is just the opposite of the set of live paths: any path - in the store that is not live (with respect to the roots) is dead. - -By default, all unreachable paths are deleted. The following options -control what gets deleted and in what order: - - - `--max-freed` *bytes*\ - Keep deleting paths until at least *bytes* bytes have been deleted, - then stop. The argument *bytes* can be followed by the - multiplicative suffix `K`, `M`, `G` or `T`, denoting KiB, MiB, GiB - or TiB units. - -The behaviour of the collector is also influenced by the -`keep-outputs` and `keep-derivations` settings in the Nix -configuration file. - -By default, the collector prints the total number of freed bytes when it -finishes (or when it is interrupted). With `--print-dead`, it prints the -number of bytes that would be freed. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Examples - -To delete all unreachable paths, just do: - -```console -$ nix-store --gc -deleting `/nix/store/kq82idx6g0nyzsp2s14gfsc38npai7lf-cairo-1.0.4.tar.gz.drv' -... -8825586 bytes freed (8.42 MiB) -``` - -To delete at least 100 MiBs of unreachable paths: - -```console -$ nix-store --gc --max-freed $((100 * 1024 * 1024)) -``` diff --git a/doc/manual/src/command-ref/nix-store/generate-binary-cache-key.md b/doc/manual/src/command-ref/nix-store/generate-binary-cache-key.md deleted file mode 100644 index 8085d877b..000000000 --- a/doc/manual/src/command-ref/nix-store/generate-binary-cache-key.md +++ /dev/null @@ -1,29 +0,0 @@ -# Name - -`nix-store --generate-binary-cache-key` - generate key pair to use for a binary cache - -## Synopsis - -`nix-store` `--generate-binary-cache-key` *key-name* *secret-key-file* *public-key-file* - -## Description - -This command generates an [Ed25519 key pair](http://ed25519.cr.yp.to/) -that can be used to create a signed binary cache. It takes three -mandatory parameters: - -1. A key name, such as `cache.example.org-1`, that is used to look up - keys on the client when it verifies signatures. It can be anything, - but it’s suggested to use the host name of your cache (e.g. - `cache.example.org`) with a suffix denoting the number of the key - (to be incremented every time you need to revoke a key). - -2. The file name where the secret key is to be stored. - -3. The file name where the public key is to be stored. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} diff --git a/doc/manual/src/command-ref/nix-store/import.md b/doc/manual/src/command-ref/nix-store/import.md deleted file mode 100644 index 2711316a7..000000000 --- a/doc/manual/src/command-ref/nix-store/import.md +++ /dev/null @@ -1,21 +0,0 @@ -# Name - -`nix-store --import` - import Nix Archive into the store - -# Synopsis - -`nix-store` `--import` - -# Description - -The operation `--import` reads a serialisation of a set of store paths -produced by `nix-store --export` from standard input and adds those -store paths to the Nix store. Paths that already exist in the Nix store -are ignored. If a path refers to another path that doesn’t exist in the -Nix store, the import fails. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} diff --git a/doc/manual/src/command-ref/nix-store/load-db.md b/doc/manual/src/command-ref/nix-store/load-db.md deleted file mode 100644 index e2f438ed6..000000000 --- a/doc/manual/src/command-ref/nix-store/load-db.md +++ /dev/null @@ -1,18 +0,0 @@ -# Name - -`nix-store --load-db` - import Nix database - -# Synopsis - -`nix-store` `--load-db` - -# Description - -The operation `--load-db` reads a dump of the Nix database created by -`--dump-db` from standard input and loads it into the Nix database. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} diff --git a/doc/manual/src/command-ref/nix-store/opt-common.md b/doc/manual/src/command-ref/nix-store/opt-common.md deleted file mode 100644 index 04092ab45..000000000 --- a/doc/manual/src/command-ref/nix-store/opt-common.md +++ /dev/null @@ -1,35 +0,0 @@ -# Options - -The following options are allowed for all `nix-store` operations, but may not always have an effect. - -- [`--add-root`](#opt-add-root) *path* - - Causes the result of a realisation (`--realise` and - `--force-realise`) to be registered as a root of the garbage - collector. *path* will be created as a symlink to the resulting - store path. In addition, a uniquely named symlink to *path* will - be created in `/nix/var/nix/gcroots/auto/`. For instance, - - ```console - $ nix-store --add-root /home/eelco/bla/result --realise ... - - $ ls -l /nix/var/nix/gcroots/auto - lrwxrwxrwx 1 ... 2005-03-13 21:10 dn54lcypm8f8... -> /home/eelco/bla/result - - $ ls -l /home/eelco/bla/result - lrwxrwxrwx 1 ... 2005-03-13 21:10 /home/eelco/bla/result -> /nix/store/1r11343n6qd4...-f-spot-0.0.10 - ``` - - Thus, when `/home/eelco/bla/result` is removed, the GC root in the - `auto` directory becomes a dangling symlink and will be ignored by - the collector. - - > **Warning** - > - > Note that it is not possible to move or rename GC roots, since - > the symlink in the `auto` directory will still point to the old - > location. - - If there are multiple results, then multiple symlinks will be - created by sequentially numbering symlinks beyond the first one - (e.g., `foo`, `foo-2`, `foo-3`, and so on). diff --git a/doc/manual/src/command-ref/nix-store/optimise.md b/doc/manual/src/command-ref/nix-store/optimise.md deleted file mode 100644 index 2a0b583c8..000000000 --- a/doc/manual/src/command-ref/nix-store/optimise.md +++ /dev/null @@ -1,39 +0,0 @@ -# Name - -`nix-store --optimise` - reduce disk space usage - -## Synopsis - -`nix-store` `--optimise` - -## Description - -The operation `--optimise` reduces Nix store disk space usage by finding -identical files in the store and hard-linking them to each other. It -typically reduces the size of the store by something like 25-35%. Only -regular files and symlinks are hard-linked in this manner. Files are -considered identical when they have the same NAR archive serialisation: -that is, regular files must have the same contents and permission -(executable or non-executable), and symlinks must have the same -contents. - -After completion, or when the command is interrupted, a report on the -achieved savings is printed on standard error. - -Use `-vv` or `-vvv` to get some progress indication. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -## Example - -```console -$ nix-store --optimise -hashing files in `/nix/store/qhqx7l2f1kmwihc9bnxs7rc159hsxnf3-gcc-4.1.1' -... -541838819 bytes (516.74 MiB) freed by hard-linking 54143 files; -there are 114486 files with equal contents out of 215894 files in total -``` diff --git a/doc/manual/src/command-ref/nix-store/print-env.md b/doc/manual/src/command-ref/nix-store/print-env.md deleted file mode 100644 index a02fcb7a3..000000000 --- a/doc/manual/src/command-ref/nix-store/print-env.md +++ /dev/null @@ -1,30 +0,0 @@ -# Name - -`nix-store --print-env` - print the build environment of a derivation - -## Synopsis - -`nix-store` `--print-env` *drvpath* - -## Description - -The operation `--print-env` prints out the environment of a derivation -in a format that can be evaluated by a shell. The command line arguments -of the builder are placed in the variable `_args`. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -## Example - -```console -$ nix-store --print-env $(nix-instantiate '' -A firefox) -… -export src; src='/nix/store/plpj7qrwcz94z2psh6fchsi7s8yihc7k-firefox-12.0.source.tar.bz2' -export stdenv; stdenv='/nix/store/7c8asx3yfrg5dg1gzhzyq2236zfgibnn-stdenv' -export system; system='x86_64-linux' -export _args; _args='-e /nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25c-default-builder.sh' -``` diff --git a/doc/manual/src/command-ref/nix-store/query.md b/doc/manual/src/command-ref/nix-store/query.md deleted file mode 100644 index 37f1b63a9..000000000 --- a/doc/manual/src/command-ref/nix-store/query.md +++ /dev/null @@ -1,227 +0,0 @@ -# Name - -`nix-store --query` - display information about store paths - -# Synopsis - -`nix-store` {`--query` | `-q`} - {`--outputs` | `--requisites` | `-R` | `--references` | `--referrers` | - `--referrers-closure` | `--deriver` | `-d` | `--valid-derivers` | - `--graph` | `--tree` | `--binding` *name* | `-b` *name* | `--hash` | - `--size` | `--roots`} - [`--use-output`] [`-u`] [`--force-realise`] [`-f`] - *paths…* - -# Description - -The operation `--query` displays various bits of information about the -store paths . The queries are described below. At most one query can be -specified. The default query is `--outputs`. - -The paths *paths* may also be symlinks from outside of the Nix store, to -the Nix store. In that case, the query is applied to the target of the -symlink. - -# Common query options - - - `--use-output`; `-u`\ - For each argument to the query that is a [store derivation], apply the - query to the output path of the derivation instead. - - - `--force-realise`; `-f`\ - Realise each argument to the query first (see [`nix-store --realise`](./realise.md)). - -[store derivation]: @docroot@/glossary.md#gloss-store-derivation - -# Queries - - - `--outputs`\ - Prints out the [output paths] of the store - derivations *paths*. These are the paths that will be produced when - the derivation is built. - - [output paths]: ../../glossary.md#gloss-output-path - - - `--requisites`; `-R`\ - Prints out the [closure] of the store path *paths*. - - [closure]: ../../glossary.md#gloss-closure - - This query has one option: - - - `--include-outputs` - Also include the existing output paths of [store derivation]s, - and their closures. - - This query can be used to implement various kinds of deployment. A - *source deployment* is obtained by distributing the closure of a - store derivation. A *binary deployment* is obtained by distributing - the closure of an output path. A *cache deployment* (combined - source/binary deployment, including binaries of build-time-only - dependencies) is obtained by distributing the closure of a store - derivation and specifying the option `--include-outputs`. - - - `--references`\ - Prints the set of [references] of the store paths - *paths*, that is, their immediate dependencies. (For *all* - dependencies, use `--requisites`.) - - [references]: ../../glossary.md#gloss-reference - - - `--referrers`\ - Prints the set of *referrers* of the store paths *paths*, that is, - the store paths currently existing in the Nix store that refer to - one of *paths*. Note that contrary to the references, the set of - referrers is not constant; it can change as store paths are added or - removed. - - - `--referrers-closure`\ - Prints the closure of the set of store paths *paths* under the - referrers relation; that is, all store paths that directly or - indirectly refer to one of *paths*. These are all the path currently - in the Nix store that are dependent on *paths*. - - - `--deriver`; `-d`\ - Prints the [deriver] that was used to build the store paths *paths*. If - the path has no deriver (e.g., if it is a source file), or if the - deriver is not known (e.g., in the case of a binary-only - deployment), the string `unknown-deriver` is printed. - The returned deriver is not guaranteed to exist in the local store, for - example when *paths* were substituted from a binary cache. - Use `--valid-derivers` instead to obtain valid paths only. - - [deriver]: ../../glossary.md#gloss-deriver - - - `--valid-derivers`\ - Prints a set of derivation files (`.drv`) which are supposed produce - said paths when realized. Might print nothing, for example for source paths - or paths subsituted from a binary cache. - - - `--graph`\ - Prints the references graph of the store paths *paths* in the format - of the `dot` tool of AT\&T's [Graphviz - package](http://www.graphviz.org/). This can be used to visualise - dependency graphs. To obtain a build-time dependency graph, apply - this to a store derivation. To obtain a runtime dependency graph, - apply it to an output path. - - - `--tree`\ - Prints the references graph of the store paths *paths* as a nested - ASCII tree. References are ordered by descending closure size; this - tends to flatten the tree, making it more readable. The query only - recurses into a store path when it is first encountered; this - prevents a blowup of the tree representation of the graph. - - - `--graphml`\ - Prints the references graph of the store paths *paths* in the - [GraphML](http://graphml.graphdrawing.org/) file format. This can be - used to visualise dependency graphs. To obtain a build-time - dependency graph, apply this to a [store derivation]. To obtain a - runtime dependency graph, apply it to an output path. - - - `--binding` *name*; `-b` *name*\ - Prints the value of the attribute *name* (i.e., environment - variable) of the [store derivation]s *paths*. It is an error for a - derivation to not have the specified attribute. - - - `--hash`\ - Prints the SHA-256 hash of the contents of the store paths *paths* - (that is, the hash of the output of `nix-store --dump` on the given - paths). Since the hash is stored in the Nix database, this is a fast - operation. - - - `--size`\ - Prints the size in bytes of the contents of the store paths *paths* - — to be precise, the size of the output of `nix-store --dump` on - the given paths. Note that the actual disk space required by the - store paths may be higher, especially on filesystems with large - cluster sizes. - - - `--roots`\ - Prints the garbage collector roots that point, directly or - indirectly, at the store paths *paths*. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Examples - -Print the closure (runtime dependencies) of the `svn` program in the -current user environment: - -```console -$ nix-store --query --requisites $(which svn) -/nix/store/5mbglq5ldqld8sj57273aljwkfvj22mc-subversion-1.1.4 -/nix/store/9lz9yc6zgmc0vlqmn2ipcpkjlmbi51vv-glibc-2.3.4 -... -``` - -Print the build-time dependencies of `svn`: - -```console -$ nix-store --query --requisites $(nix-store --query --deriver $(which svn)) -/nix/store/02iizgn86m42q905rddvg4ja975bk2i4-grep-2.5.1.tar.bz2.drv -/nix/store/07a2bzxmzwz5hp58nf03pahrv2ygwgs3-gcc-wrapper.sh -/nix/store/0ma7c9wsbaxahwwl04gbw3fcd806ski4-glibc-2.3.4.drv -... lots of other paths ... -``` - -The difference with the previous example is that we ask the closure of -the derivation (`-qd`), not the closure of the output path that contains -`svn`. - -Show the build-time dependencies as a tree: - -```console -$ nix-store --query --tree $(nix-store --query --deriver $(which svn)) -/nix/store/7i5082kfb6yjbqdbiwdhhza0am2xvh6c-subversion-1.1.4.drv -+---/nix/store/d8afh10z72n8l1cr5w42366abiblgn54-builder.sh -+---/nix/store/fmzxmpjx2lh849ph0l36snfj9zdibw67-bash-3.0.drv -| +---/nix/store/570hmhmx3v57605cqg9yfvvyh0nnb8k8-bash -| +---/nix/store/p3srsbd8dx44v2pg6nbnszab5mcwx03v-builder.sh -... -``` - -Show all paths that depend on the same OpenSSL library as `svn`: - -```console -$ nix-store --query --referrers $(nix-store --query --binding openssl $(nix-store --query --deriver $(which svn))) -/nix/store/23ny9l9wixx21632y2wi4p585qhva1q8-sylpheed-1.0.0 -/nix/store/5mbglq5ldqld8sj57273aljwkfvj22mc-subversion-1.1.4 -/nix/store/dpmvp969yhdqs7lm2r1a3gng7pyq6vy4-subversion-1.1.3 -/nix/store/l51240xqsgg8a7yrbqdx1rfzyv6l26fx-lynx-2.8.5 -``` - -Show all paths that directly or indirectly depend on the Glibc (C -library) used by `svn`: - -```console -$ nix-store --query --referrers-closure $(ldd $(which svn) | grep /libc.so | awk '{print $3}') -/nix/store/034a6h4vpz9kds5r6kzb9lhh81mscw43-libgnomeprintui-2.8.2 -/nix/store/15l3yi0d45prm7a82pcrknxdh6nzmxza-gawk-3.1.4 -... -``` - -Note that `ldd` is a command that prints out the dynamic libraries used -by an ELF executable. - -Make a picture of the runtime dependency graph of the current user -environment: - -```console -$ nix-store --query --graph ~/.nix-profile | dot -Tps > graph.ps -$ gv graph.ps -``` - -Show every garbage collector root that points to a store path that -depends on `svn`: - -```console -$ nix-store --query --roots $(which svn) -/nix/var/nix/profiles/default-81-link -/nix/var/nix/profiles/default-82-link -/home/eelco/.local/state/nix/profiles/profile-97-link -``` diff --git a/doc/manual/src/command-ref/nix-store/read-log.md b/doc/manual/src/command-ref/nix-store/read-log.md deleted file mode 100644 index f68de4c8c..000000000 --- a/doc/manual/src/command-ref/nix-store/read-log.md +++ /dev/null @@ -1,37 +0,0 @@ -# Name - -`nix-store --read-log` - print build log - -# Synopsis - -`nix-store` {`--read-log` | `-l`} *paths…* - -# Description - -The operation `--read-log` prints the build log of the specified store -paths on standard output. The build log is whatever the builder of a -derivation wrote to standard output and standard error. If a store path -is not a derivation, the deriver of the store path is used. - -Build logs are kept in `/nix/var/log/nix/drvs`. However, there is no -guarantee that a build log is available for any particular store path. -For instance, if the path was downloaded as a pre-built binary through a -substitute, then the log is unavailable. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Example - -```console -$ nix-store --read-log $(which ktorrent) -building /nix/store/dhc73pvzpnzxhdgpimsd9sw39di66ph1-ktorrent-2.2.1 -unpacking sources -unpacking source archive /nix/store/p8n1jpqs27mgkjw07pb5269717nzf5f8-ktorrent-2.2.1.tar.gz -ktorrent-2.2.1/ -ktorrent-2.2.1/NEWS -... -``` diff --git a/doc/manual/src/command-ref/nix-store/realise.md b/doc/manual/src/command-ref/nix-store/realise.md deleted file mode 100644 index a421a4220..000000000 --- a/doc/manual/src/command-ref/nix-store/realise.md +++ /dev/null @@ -1,87 +0,0 @@ -# Name - -`nix-store --realise` - build or fetch store objects - -# Synopsis - -`nix-store` {`--realise` | `-r`} *paths…* [`--dry-run`] - -# Description - - -Each of *paths* is processed as follows: - -- If the path leads to a [store derivation]: - 1. If it is not [valid], substitute the store derivation file itself. - 2. Realise its [output paths]: - - Try to fetch from [substituters] the [store objects] associated with the output paths in the store derivation's [closure]. - - With [content-addressed derivations] (experimental): Determine the output paths to realise by querying content-addressed realisation entries in the [Nix database]. - - For any store paths that cannot be substituted, produce the required store objects. This involves first realising all outputs of the derivation's dependencies and then running the derivation's [`builder`](@docroot@/language/derivations.md#attr-builder) executable. -- Otherwise, and if the path is not already valid: Try to fetch the associated [store objects] in the path's [closure] from [substituters]. - -If no substitutes are available and no store derivation is given, realisation fails. - -[store paths]: @docroot@/glossary.md#gloss-store-path -[valid]: @docroot@/glossary.md#gloss-validity -[store derivation]: @docroot@/glossary.md#gloss-store-derivation -[output paths]: @docroot@/glossary.md#gloss-output-path -[store objects]: @docroot@/glossary.md#gloss-store-object -[closure]: @docroot@/glossary.md#gloss-closure -[substituters]: @docroot@/command-ref/conf-file.md#conf-substituters -[content-addressed derivations]: @docroot@/contributing/experimental-features.md#xp-feature-ca-derivations -[Nix database]: @docroot@/glossary.md#gloss-nix-database - -The resulting paths are printed on standard output. -For non-derivation arguments, the argument itself is printed. - -{{#include ../status-build-failure.md}} - -# Options - - - `--dry-run`\ - Print on standard error a description of what packages would be - built or downloaded, without actually performing the operation. - - - `--ignore-unknown`\ - If a non-derivation path does not have a substitute, then silently - ignore it. - - - `--check`\ - This option allows you to check whether a derivation is - deterministic. It rebuilds the specified derivation and checks - whether the result is bitwise-identical with the existing outputs, - printing an error if that’s not the case. The outputs of the - specified derivation must already exist. When used with `-K`, if an - output path is not identical to the corresponding output from the - previous build, the new output path is left in - `/nix/store/name.check.` - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Examples - -This operation is typically used to build [store derivation]s produced by -[`nix-instantiate`](@docroot@/command-ref/nix-instantiate.md): - -```console -$ nix-store --realise $(nix-instantiate ./test.nix) -/nix/store/31axcgrlbfsxzmfff1gyj1bf62hvkby2-aterm-2.3.1 -``` - -This is essentially what [`nix-build`](@docroot@/command-ref/nix-build.md) does. - -To test whether a previously-built derivation is deterministic: - -```console -$ nix-build '' --attr hello --check -K -``` - -Use [`nix-store --read-log`](./read-log.md) to show the stderr and stdout of a build: - -```console -$ nix-store --read-log $(nix-instantiate ./test.nix) -``` diff --git a/doc/manual/src/command-ref/nix-store/repair-path.md b/doc/manual/src/command-ref/nix-store/repair-path.md deleted file mode 100644 index 4e4b6a67c..000000000 --- a/doc/manual/src/command-ref/nix-store/repair-path.md +++ /dev/null @@ -1,34 +0,0 @@ -# Name - -`nix --repair-path` - re-download path from substituter - -# Synopsis - -`nix-store` `--repair-path` *paths…* - -# Description - -The operation `--repair-path` attempts to “repair” the specified paths -by redownloading them using the available substituters. If no -substitutes are available, then repair is not possible. - -> **Warning** -> -> During repair, there is a very small time window during which the old -> path (if it exists) is moved out of the way and replaced with the new -> path. If repair is interrupted in between, then the system may be left -> in a broken state (e.g., if the path contains a critical system -> component like the GNU C Library). - -# Example - -```console -$ nix-store --verify-path /nix/store/dj7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13 -path `/nix/store/dj7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13' was modified! - expected hash `2db57715ae90b7e31ff1f2ecb8c12ec1cc43da920efcbe3b22763f36a1861588', - got `481c5aa5483ebc97c20457bb8bca24deea56550d3985cda0027f67fe54b808e4' - -$ nix-store --repair-path /nix/store/dj7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13 -fetching path `/nix/store/d7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13'... -… -``` diff --git a/doc/manual/src/command-ref/nix-store/restore.md b/doc/manual/src/command-ref/nix-store/restore.md deleted file mode 100644 index fcba43df4..000000000 --- a/doc/manual/src/command-ref/nix-store/restore.md +++ /dev/null @@ -1,18 +0,0 @@ -# Name - -`nix-store --restore` - extract a Nix archive - -## Synopsis - -`nix-store` `--restore` *path* - -## Description - -The operation `--restore` unpacks a NAR archive to *path*, which must -not already exist. The archive is read from standard input. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} diff --git a/doc/manual/src/command-ref/nix-store/serve.md b/doc/manual/src/command-ref/nix-store/serve.md deleted file mode 100644 index 3ef5a64e2..000000000 --- a/doc/manual/src/command-ref/nix-store/serve.md +++ /dev/null @@ -1,37 +0,0 @@ -# Name - -`nix-store --serve` - serve local Nix store over SSH - -# Synopsis - -`nix-store` `--serve` [`--write`] - -# Description - -The operation `--serve` provides access to the Nix store over stdin and -stdout, and is intended to be used as a means of providing Nix store -access to a restricted ssh user. - -The following flags are available: - - - `--write`\ - Allow the connected client to request the realization of - derivations. In effect, this can be used to make the host act as a - remote builder. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -# Examples - -To turn a host into a build server, the `authorized_keys` file can be -used to provide build access to a given SSH public key: - -```console -$ cat <>/root/.ssh/authorized_keys -command="nice -n20 nix-store --serve --write" ssh-rsa AAAAB3NzaC1yc2EAAAA... -EOF -``` diff --git a/doc/manual/src/command-ref/nix-store/verify-path.md b/doc/manual/src/command-ref/nix-store/verify-path.md deleted file mode 100644 index 77e8fb222..000000000 --- a/doc/manual/src/command-ref/nix-store/verify-path.md +++ /dev/null @@ -1,28 +0,0 @@ -# Name - -`nix-store --verify-path` - check path contents against Nix database - -## Synopsis - -`nix-store` `--verify-path` *paths…* - -## Description - -The operation `--verify-path` compares the contents of the given store -paths to their cryptographic hashes stored in Nix’s database. For every -changed path, it prints a warning message. The exit status is 0 if no -path has changed, and 1 otherwise. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} - -## Example - -To verify the integrity of the `svn` command and all its dependencies: - -```console -$ nix-store --verify-path $(nix-store --query --requisites $(which svn)) -``` diff --git a/doc/manual/src/command-ref/nix-store/verify.md b/doc/manual/src/command-ref/nix-store/verify.md deleted file mode 100644 index 2695b3361..000000000 --- a/doc/manual/src/command-ref/nix-store/verify.md +++ /dev/null @@ -1,36 +0,0 @@ -# Name - -`nix-store --verify` - check Nix database for consistency - -# Synopsis - -`nix-store` `--verify` [`--check-contents`] [`--repair`] - -# Description - -The operation `--verify` verifies the internal consistency of the Nix -database, and the consistency between the Nix database and the Nix -store. Any inconsistencies encountered are automatically repaired. -Inconsistencies are generally the result of the Nix store or database -being modified by non-Nix tools, or of bugs in Nix itself. - -This operation has the following options: - - - `--check-contents`\ - Checks that the contents of every valid store path has not been - altered by computing a SHA-256 hash of the contents and comparing it - with the hash stored in the Nix database at build time. Paths that - have been modified are printed out. For large stores, - `--check-contents` is obviously quite slow. - - - `--repair`\ - If any valid path is missing from the store, or (if - `--check-contents` is given) the contents of a valid path has been - modified, then try to repair the path by redownloading it. See - `nix-store --repair-path` for details. - -{{#include ./opt-common.md}} - -{{#include ../opt-common.md}} - -{{#include ../env-common.md}} diff --git a/doc/manual/src/command-ref/opt-common-syn.md b/doc/manual/src/command-ref/opt-common-syn.md deleted file mode 100644 index b66d318c2..000000000 --- a/doc/manual/src/command-ref/opt-common-syn.md +++ /dev/null @@ -1,57 +0,0 @@ -\--help - -\--version - -\--verbose - -\-v - -\--quiet - -\--log-format - -format - -\--no-build-output - -\-Q - -\--max-jobs - -\-j - -number - -\--cores - -number - -\--max-silent-time - -number - -\--timeout - -number - -\--keep-going - -\-k - -\--keep-failed - -\-K - -\--fallback - -\--readonly-mode - -\-I - -path - -\--option - -name - -value diff --git a/doc/manual/src/command-ref/opt-common.md b/doc/manual/src/command-ref/opt-common.md deleted file mode 100644 index cd289b7ea..000000000 --- a/doc/manual/src/command-ref/opt-common.md +++ /dev/null @@ -1,215 +0,0 @@ -# Common Options - -Most commands in Lix accept the following command-line options: - -- [`--help`](#opt-help) - - Prints out a summary of the command syntax and exits. - -- [`--version`](#opt-version) - - Prints out the Lix version number on standard output and exits. - -- [`--verbose`](#opt-verbose) / `-v` - - Increases the level of verbosity of diagnostic messages printed on standard error. - For each Lix operation, the information printed on standard output is well-defined; - any diagnostic information is printed on standard error, never on standard output. - - This option may be specified repeatedly. - Currently, the following verbosity levels exist: - - - `0` “Errors only” - - Only print messages explaining why the Lix invocation failed. - - - `1` “Informational” - - Print *useful* messages about what Lix is doing. - This is the default. - - - `2` “Talkative” - - Print more informational messages. - - - `3` “Chatty” - - Print even more informational messages. - - - `4` “Debug” - - Print debug information. - - - `5` “Vomit” - - Print vast amounts of debug information. - -- [`--quiet`](#opt-quiet) - - Decreases the level of verbosity of diagnostic messages printed on standard error. - This is the inverse option to `-v` / `--verbose`. - - This option may be specified repeatedly. - See the previous verbosity levels list. - -- [`--log-format`](#opt-log-format) *format* - - This option can be used to change the output of the log format, with *format* being one of: - - - `raw` - - This is the raw format, as outputted by nix-build. - - - `internal-json` - - Outputs the logs in a structured manner. - - > **Warning** - > - > While the schema itself is relatively stable, the format of - > the error-messages (namely of the `msg`-field) can change - > between releases. - - - `bar` - - Only display a progress bar during the builds. - - - `bar-with-logs` - - Display the raw logs, with the progress bar at the bottom. - -- [`--no-build-output`](#opt-no-build-output) / `-Q` - - By default, output written by builders to standard output and standard error is echoed to the Lix command's standard error. - This option suppresses this behaviour. - Note that the builder's standard output and error are always written to a log file in `prefix/nix/var/log/nix`. - -- [`--max-jobs`](#opt-max-jobs) / `-j` *number* - - Sets the maximum number of build jobs that Lix will perform in parallel to the specified number. - Specify `auto` to use the number of CPUs in the system. - The default is specified by the `max-jobs` configuration setting, which itself defaults to `1`. - A higher value is useful on SMP systems or to exploit I/O latency. - - Setting it to `0` disallows building on the local machine, which is useful when you want builds to happen only on remote builders. - -- [`--cores`](#opt-cores) - - Sets the value of the `NIX_BUILD_CORES` environment variable in the invocation of builders. - Builders can use this variable at their discretion to control the maximum amount of parallelism. - For instance, in Nixpkgs, if the derivation attribute `enableParallelBuilding` is set to `true`, the builder passes the `-jN` flag to GNU Make. - It defaults to the value of the `cores` configuration setting, if set, or `1` otherwise. - The value `0` means that the builder should use all available CPU cores in the system. - -- [`--max-silent-time`](#opt-max-silent-time) - - Sets the maximum number of seconds that a builder can go without producing any data on standard output or standard error. - The default is specified by the `max-silent-time` configuration setting. - `0` means no time-out. - -- [`--timeout`](#opt-timeout) - - Sets the maximum number of seconds that a builder can run. - The default is specified by the `timeout` configuration setting. - `0` means no timeout. - -- [`--keep-going`](#opt-keep-going) / `-k` - - Keep going in case of failed builds, to the greatest extent possible. - That is, if building an input of some derivation fails, Lix will still build the other inputs, but not the derivation itself. - Without this option, Lix stops if any build fails (except for builds of substitutes), possibly killing builds in progress (in case of parallel or distributed builds). - -- [`--keep-failed`](#opt-keep-failed) / `-K` - - Specifies that in case of a build failure, the temporary directory (usually in `/tmp`) in which the build takes place should not be deleted. - The path of the build directory is printed as an informational message. - -- [`--fallback`](#opt-fallback) - - Whenever Lix attempts to build a derivation for which substitutes are known for each output path, but realising the output paths through the substitutes fails, fall back on building the derivation. - - The most common scenario in which this is useful is when we have registered substitutes in order to perform binary distribution from, say, a network repository. - If the repository is down, the realisation of the derivation will fail. - When this option is specified, Lix will build the derivation instead. - Thus, installation from binaries falls back on installation from source. - This option is not the default since it is generally not desirable for a transient failure in obtaining the substitutes to lead to a full build from source (with the related consumption of resources). - -- [`--readonly-mode`](#opt-readonly-mode) - - When this option is used, no attempt is made to open the Lix database. - Most Lix operations do need database access, so those operations will fail. - -
- - FIXME(Lix): sometimes you want `--store dummy` instead, because this option sometimes doesn't work. Document why this is. - -
- -- [`--arg`](#opt-arg) *name* *value* - - This option is accepted by `nix-env`, `nix-instantiate`, `nix-shell` and `nix-build`. - When evaluating Nix expressions, the expression evaluator will automatically try to call functions that it encounters. - It can automatically call functions for which every argument has a [default value](@docroot@/language/constructs.md#functions) (e.g., `{ argName ? defaultValue }: ...`). - - With `--arg`, you can also call functions that have arguments without a default value (or override a default value). - That is, if the evaluator encounters a function with an argument named *name*, it will call it with value *value*. - - For instance, the top-level `default.nix` in Nixpkgs is actually a function: - - ```nix - { # The system (e.g., `i686-linux') for which to build the packages. - system ? builtins.currentSystem - ... - }: ... - ``` - - So if you call this Nix expression (e.g., when you do `nix-env --install --attr pkgname`), the function will be called automatically using the value [`builtins.currentSystem`](@docroot@/language/builtins.md) for the `system` argument. - You can override this using `--arg`, e.g., `nix-env --install --attr pkgname --arg system \"i686-freebsd\"`. - (Note that since the argument is a Nix string literal, you have to escape the quotes.) - -- [`--argstr`](#opt-argstr) *name* *value* - - This option is like `--arg`, only the value is not a Nix expression but a string. - So instead of `--arg system \"i686-linux\"` (the outer quotes are to keep the shell happy) you can say `--argstr system i686-linux`. - -- [`--attr`](#opt-attr) / `-A` *attrPath* - - Select an attribute from the top-level Nix expression being evaluated. - (`nix-env`, `nix-instantiate`, `nix-build` and `nix-shell` only.) - The *attribute path* *attrPath* is a sequence of attribute names separated by dots. - For instance, given a top-level Nix expression *e*, the attribute path `xorg.xorgserver` would cause the expression `e.xorg.xorgserver` to be used. - See [`nix-env --install`](@docroot@/command-ref/nix-env/install.md) for some concrete examples. - - In addition to attribute names, you can also specify array indices. - For instance, the attribute path `foo.3.bar` selects the `bar` - attribute of the fourth element of the array in the `foo` attribute - of the top-level expression. - -- [`--expr`](#opt-expr) / `-E` - - Interpret the command line arguments as a list of Nix expressions to be parsed and evaluated, rather than as a list of file names of Nix expressions. - (`nix-instantiate`, `nix-build` and `nix-shell` only.) - - For `nix-shell`, this option is commonly used to give you a shell in which you can build the packages returned by the expression. - If you want to get a shell which contain the *built* packages ready for use, give your expression to the `nix-shell --packages ` convenience flag instead. - -- [`-I`](#opt-I) *path* - - Add an entry to the [Nix expression search path](@docroot@/command-ref/conf-file.md#conf-nix-path). - This option may be given multiple times. - Paths added through `-I` take precedence over [`NIX_PATH`](@docroot@/command-ref/env-common.md#env-NIX_PATH). - -- [`--option`](#opt-option) *name* *value* - - Set the Lix configuration option *name* to *value*. - This overrides settings in the Lix configuration file (see nix.conf(5)). - -- [`--repair`](#opt-repair) - - Fix corrupted or missing store paths by redownloading or rebuilding them. - Note that this is slow because it requires computing a cryptographic hash of the contents of every path in the closure of the build. - Also note the warning under `nix-store --repair-path`. - -> **Note** -> -> See [`man nix.conf`](@docroot@/command-ref/conf-file.md#command-line-flags) for overriding configuration settings with command line flags. diff --git a/doc/manual/src/command-ref/opt-inst-syn.md b/doc/manual/src/command-ref/opt-inst-syn.md deleted file mode 100644 index 1703c40e3..000000000 --- a/doc/manual/src/command-ref/opt-inst-syn.md +++ /dev/null @@ -1,15 +0,0 @@ -\--prebuilt-only - -\-b - -\--attr - -\-A - -\--from-expression - -\-E - -\--from-profile - -path diff --git a/doc/manual/src/command-ref/status-build-failure.md b/doc/manual/src/command-ref/status-build-failure.md deleted file mode 100644 index 06114eb29..000000000 --- a/doc/manual/src/command-ref/status-build-failure.md +++ /dev/null @@ -1,34 +0,0 @@ -# Special exit codes for build failure - -1xx status codes are used when requested builds failed. -The following codes are in use: - -- `100` Generic build failure - - The builder process returned with a non-zero exit code. - -- `101` Build timeout - - The build was aborted because it did not complete within the specified `timeout`. - -- `102` Hash mismatch - - The build output was rejected because it does not match the - [`outputHash` attribute of the derivation](@docroot@/language/advanced-attributes.md). - -- `104` Not deterministic - - The build succeeded in check mode but the resulting output is not binary reproducible. - -With the `--keep-going` flag it's possible for multiple failures to occur. -In this case the 1xx status codes are or combined using -[bitwise OR](https://en.wikipedia.org/wiki/Bitwise_operation#OR). - -``` -0b1100100 - ^^^^ - |||`- timeout - ||`-- output hash mismatch - |`--- build failure - `---- not deterministic -``` diff --git a/doc/manual/src/command-ref/utilities.md b/doc/manual/src/command-ref/utilities.md deleted file mode 100644 index 3ee09ea6c..000000000 --- a/doc/manual/src/command-ref/utilities.md +++ /dev/null @@ -1,3 +0,0 @@ -# Utilities - -This section lists utilities that you can use when you work with Lix. diff --git a/doc/manual/src/contributing/cli-guideline.md b/doc/manual/src/contributing/cli-guideline.md deleted file mode 100644 index f170e5e8f..000000000 --- a/doc/manual/src/contributing/cli-guideline.md +++ /dev/null @@ -1,671 +0,0 @@ -# CLI guideline - -## Goals - -Purpose of this document is to provide a clear direction to **help design -delightful command line** experience. This document contains guidelines to -follow to ensure a consistent and approachable user experience. - -## Overview - -`nix` command provides a single entry to a number of sub-commands that help -**developers and system administrators** in the life-cycle of a software -project. We particularly need to pay special attention to help and assist new -users of Lix. - -# Naming the `COMMANDS` - -Words matter. Naming is an important part of the usability. Users will be -interacting with Lix on a regular basis so we should **name things for ease of -understanding**. - -We recommend following the [Principle of Least -Astonishment](https://en.wikipedia.org/wiki/Principle_of_least_astonishment). -This means that you should **never use acronyms or abbreviations** unless they -are commonly used in other tools (e.g. `nix init`). And if the command name is -too long (> 10-12 characters) then shortening it makes sense (e.g. -“prioritization” → “priority”). - -Commands should **follow a noun-verb dialogue**. Although noun-verb formatting -seems backwards from a speaking perspective (i.e. `nix store copy` vs. `nix -copy store`) it allows us to organize commands the same way users think about -completing an action (the group first, then the command). - -## Naming rules - -Rules are there to guide you by limiting your options. But not everything can -fit the rules all the time. In those cases document the exceptions in [Appendix -1: Commands naming exceptions](#appendix-1-commands-naming-exceptions) and -provide reason. The rules want to force a Nix developer to look, not just at -the command at hand, but also the command in a full context alongside other -`nix` commands. - -```shell -$ nix [] [] [] -``` - -- `GROUP`, `COMMAND`, `ARGUMENTS` and `OPTIONS` should be lowercase and in a - singular form. -- `GROUP` should be a **NOUN**. -- `COMMAND` should be a **VERB**. -- `ARGUMENTS` and `OPTIONS` are discussed in [*Input* section](#input). - -## Classification - -Some commands are more important, some less. While we want all of our commands -to be perfect we can only spend limited amount of time testing and improving -them. - -This classification tries to separate commands in 3 categories in terms of -their importance in regards to the new users. Users who are likely to be -impacted the most by bad user experience. - -- **Main commands** - - Commands used for our main use cases and most likely used by new users. We - expect attention to details, such as: - - - Proper use of [colors](#colors), [emojis](#special-unicode-characters) - and [aligning of text](#text-alignment). - - [Autocomplete](#shell-completion) of options. - - Show [next possible steps](#next-steps). - - Showing some [“tips”](#educate-the-user) when running logs running tasks - (eg. building / downloading) in order to teach users interesting bits of - Nix ecosystem. - - [Help pages](#help-is-essential) to be as good as we can write them - pointing to external documentation and tutorials for more. - - Examples of such commands: `nix init`, `nix develop`, `nix build`, `nix run`, - ... - -- **Infrequently used commands** - - From infrequently used commands we expect less attention to details, but - still some: - - - Proper use of [colors](#colors), [emojis](#special-unicode-characters) - and [aligning of text](#text-alignment). - - [Autocomplete](#shell-completion) of options. - - Examples of such commands: `nix doctor`, `nix edit`, `nix eval`, ... - -- **Utility and scripting commands** - - Commands that expose certain internal functionality of `nix`, mostly used by - other scripts. - - - [Autocomplete](#shell-completion) of options. - - Examples of such commands: `nix store copy`, `nix hash base16`, `nix store - ping`, ... - - -# Help is essential - -Help should be built into your command line so that new users can gradually -discover new features when they need them. - -## Looking for help - -Since there is no standard way how user will look for help we rely on ways help -is provided by commonly used tools. As a guide for this we took `git` and -whenever in doubt look at it as a preferred direction. - -The rules are: - -- Help is shown by using `--help` or `help` command (eg `nix` `--``help` or - `nix help`). -- For non-COMMANDs (eg. `nix` `--``help` and `nix store` `--``help`) we **show - a summary** of most common use cases. Summary is presented on the STDOUT - without any use of PAGER. -- For COMMANDs (eg. `nix init` `--``help` or `nix help init`) we display the - man page of that command. By default the PAGER is used (as in `git`). -- At the end of either summary or man page there should be an URL pointing to - an online version of more detailed documentation. -- The structure of summaries and man pages should be the same as in `git`. - -## Anticipate where help is needed - -Even better then requiring the user to search for help is to anticipate and -predict when user might need it. Either because the lack of discoverability, -typo in the input or simply taking the opportunity to teach the user of -interesting - but less visible - details. - -### Shell completion - -This type of help is most common and almost expected by users. We need to -**provide the best shell completion** for `bash`, `zsh` and `fish`. - -Completion needs to be **context aware**, this mean when a user types: - -```shell -$ nix build n -``` - -we need to display a list of flakes starting with `n`. - -### Wrong input - -As we all know we humans make mistakes, all the time. When a typo - intentional -or unintentional - is made, we should prompt for closest possible options or -point to the documentation which would educate user to not make the same -errors. Here are few examples: - -In first example we prompt the user for typing wrong command name: - - -```shell -$ nix int ------------------------------------------------------------------------- - Error! Command `int` not found. ------------------------------------------------------------------------- - Did you mean: - |> nix init - |> nix input -``` - -Sometimes users will make mistake either because of a typo or simply because of -lack of discoverability. Our handling of this cases needs to be context -sensitive. - - -```shell -$ nix init --template=template#pyton ------------------------------------------------------------------------- - Error! Template `template#pyton` not found. ------------------------------------------------------------------------- -Initializing Nix project at `/path/to/here`. - Select a template for you new project: - |> template#python - template#python-pip - template#python-poetry -``` - -### Next steps - -It can be invaluable to newcomers to show what a possible next steps and what -is the usual development workflow with Lix. For example: - - -```shell -$ nix init --template=template#python -Initializing project `template#python` - in `/home/USER/dev/new-project` - - Next steps - |> nix develop -- to enter development environment - |> nix build -- to build your project -``` - -### Educate the user - -We should take any opportunity to **educate users**, but at the same time we -must **be very very careful to not annoy users**. There is a thin line between -being helpful and being annoying. - -An example of educating users might be to provide *Tips* in places where they -are waiting. - -```shell -$ nix build - Started building my-project 1.2.3 - Downloaded python3.8-poetry 1.2.3 in 5.3 seconds - Downloaded python3.8-requests 1.2.3 in 5.3 seconds ------------------------------------------------------------------------- - Press `v` to increase logs verbosity - |> `?` to see other options ------------------------------------------------------------------------- - Learn something new with every build... - |> See last logs of a build with `nix log --last` command. ------------------------------------------------------------------------- - Evaluated my-project 1.2.3 in 14.43 seconds -Downloading [12 / 200] - |> firefox 1.2.3 [#########> ] 10Mb/s | 2min left - Building [2 / 20] - |> glibc 1.2.3 -> buildPhase: ------------------------------------------------------------------------- -``` - -Now **Learn** part of the output is where you educate users. You should only -show it when you know that a build will take some time and not annoy users of -the builds that take only few seconds. - -Every feature like this should go through an intensive review and testing to -collect as much feedback as possible and to fine tune every little detail. If -done right this can be an awesome features beginners and advance users will -love, but if not done perfectly it will annoy users and leave bad impression. - -# Input - -Input to a command is provided via `ARGUMENTS` and `OPTIONS`. - -`ARGUMENTS` represent a required input for a function. When choosing to use -`ARGUMENTS` over `OPTIONS` please be aware of the downsides that come with it: - -- User will need to remember the order of `ARGUMENTS`. This is not a problem if - there is only one `ARGUMENT`. -- With `OPTIONS` it is possible to provide much better auto completion. -- With `OPTIONS` it is possible to provide much better error message. -- Using `OPTIONS` it will mean there is a little bit more typing. - -We don’t discourage the use of `ARGUMENTS`, but simply want to make every -developer consider the downsides and choose wisely. - -## Naming the `OPTIONS` - -The only naming convention - apart from the ones mentioned in Naming the -`COMMANDS` section is how flags are named. - -Flags are a type of `OPTION` that represent an option that can be turned ON of -OFF. We can say **flags are boolean type of** `**OPTION**`. - -Here are few examples of flag `OPTIONS`: - -- `--colors` vs. `--no-colors` (showing colors in the output) -- `--emojis` vs. `--no-emojis` (showing emojis in the output) - -## Prompt when input not provided - -For *main commands* (as [per classification](#classification)) we want command -to improve the discoverability of possible input. A new user will most likely -not know which `ARGUMENTS` and `OPTIONS` are required or which values are -possible for those options. - -In case the user does not provide the input or they provide wrong input, -rather than show the error, prompt a user with an option to find and select -correct input (see examples). - -Prompting is of course not required when TTY is not attached to STDIN. This -would mean that scripts won't need to handle prompt, but rather handle errors. - -A place to use prompt and provide user with interactive select - - -```shell -$ nix init -Initializing Nix project at `/path/to/here`. - Select a template for you new project: - |> py - template#python-pip - template#python-poetry - [ Showing 2 templates from 1345 templates ] -``` - -Another great place to add prompts are **confirmation dialogues for dangerous -actions**. For example when adding new substitutor via `OPTIONS` or via -`flake.nix` we should prompt - for the first time - and let user review what is -going to happen. - - -```shell -$ nix build --option substitutors https://cache.example.org ------------------------------------------------------------------------- - Warning! A security related question needs to be answered. ------------------------------------------------------------------------- - The following substitutors will be used to in `my-project`: - - https://cache.example.org - - Do you allow `my-project` to use above mentioned substitutors? - [y/N] |> y -``` - -# Output - -Terminal output can be quite limiting in many ways. Which should force us to -think about the experience even more. As with every design the output is a -compromise between being terse and being verbose, between showing help to -beginners and annoying advance users. For this it is important that we know -what are the priorities. - -Lix command line should be first and foremost written with beginners in mind. -But users won't stay beginners for long and what was once useful might quickly -become annoying. There is no golden rule that we can give in this guideline -that would make it easier how to draw a line and find best compromise. - -What we would encourage is to **build prototypes**, do some **user testing** -and collect **feedback**. Then repeat the cycle few times. - -First design the *happy path* and only after your iron it out, continue to work -on **edge cases** (handling and displaying errors, changes of the output by -certain `OPTIONS`, etc…) - -## Follow best practices - -Needless to say we Lix must be a good citizen and follow best practices in -command line. - -In short: **STDOUT is for output, STDERR is for (human) messaging.** - -STDOUT and STDERR provide a way for you to output messages to the user while -also allowing them to redirect content to a file. For example: - -```shell -$ nix build > build.txt ------------------------------------------------------------------------- - Error! Attribute `bin` missing at (1:94) from string. ------------------------------------------------------------------------- - - 1| with import { }; (pkgs.runCommandCC or pkgs.runCommand) "shell" { buildInputs = [ (surge.bin) ]; } "" -``` - -Because this warning is on STDERR, it doesn’t end up in the file. - -But not everything on STDERR is an error though. For example, you can run `nix -build` and collect logs in a file while still seeing the progress. - -``` -$ nix build > build.txt - Evaluated 1234 files in 1.2 seconds - Downloaded python3.8-poetry 1.2.3 in 5.3 seconds - Downloaded python3.8-requests 1.2.3 in 5.3 seconds ------------------------------------------------------------------------- - Press `v` to increase logs verbosity - |> `?` to see other options ------------------------------------------------------------------------- - Learn something new with every build... - |> See last logs of a build with `nix log --last` command. ------------------------------------------------------------------------- - Evaluated my-project 1.2.3 in 14.43 seconds -Downloading [12 / 200] - |> firefox 1.2.3 [#########> ] 10Mb/s | 2min left - Building [2 / 20] - |> glibc 1.2.3 -> buildPhase: ------------------------------------------------------------------------- -``` - -## Errors (WIP) - -**TODO**: Once we have implementation for the *happy path* then we will think -how to present errors. - -## Not only for humans - -Terse, machine-readable output formats can also be useful but shouldn’t get in -the way of making beautiful CLI output. When needed, commands should offer a -`--json` flag to allow users to easily parse and script the CLI. - -When TTY is not detected on STDOUT we should remove all design elements (no -colors, no emojis and using ASCII instead of Unicode symbols). The same should -happen when TTY is not detected on STDERR. We should not display progress / -status section, but only print warnings and errors. - -## Returning future proof JSON - -The schema of JSON output should allow for backwards compatible extension. This section explains how to achieve this. - -Two definitions are helpful here, because while JSON only defines one "key-value" -object type, we use it to cover two use cases: - - - **dictionary**: a map from names to value that all have the same type. In - C++ this would be a `std::map` with string keys. - - **record**: a fixed set of attributes each with their own type. In C++, this - would be represented by a `struct`. - -It is best not to mix these use cases, as that may lead to incompatibilities when the schema changes. For example, adding a record field to a dictionary breaks consumers that assume all JSON object fields to have the same meaning and type. - -This leads to the following guidelines: - - - The top-level (root) value must be a record. - - Otherwise, one can not change the structure of a command's output. - - - The value of a dictionary item must be a record. - - Otherwise, the item type can not be extended. - - - List items should be records. - - Otherwise, one can not change the structure of the list items. - - If the order of the items does not matter, and each item has a unique key that is a string, consider representing the list as a dictionary instead. If the order of the items needs to be preserved, return a list of records. - - - Streaming JSON should return records. - - An example of a streaming JSON format is [JSON lines](https://jsonlines.org/), where each line represents a JSON value. These JSON values can be considered top-level values or list items, and they must be records. - -### Examples - - -This is bad, because all keys must be assumed to be store implementations: - -```json -{ - "local": { ... }, - "remote": { ... }, - "http": { ... } -} -``` - -This is good, because the it is extensible at the root, and is somewhat self-documenting: - -```json -{ - "storeTypes": { "local": { ... }, ... }, - "pluginSupport": true -} -``` - -While the dictionary of store types seems like a very complete response at first, a use case may arise that warrants returning additional information. -For example, the presence of plugin support may be crucial information for a client to proceed when their desired store type is missing. - - - -The following representation is bad because it is not extensible: - -```json -{ "outputs": [ "out" "bin" ] } -``` - -However, simply converting everything to records is not enough, because the order of outputs must be preserved: - -```json -{ "outputs": { "bin": {}, "out": {} } } -``` - -The first item is the default output. Deriving this information from the outputs ordering is not great, but this is how Lix currently happens to work. -While it is possible for a JSON parser to preserve the order of fields, we can not rely on this capability to be present in all JSON libraries. - -This representation is extensible and preserves the ordering: - -```json -{ "outputs": [ { "outputName": "out" }, { "outputName": "bin" } ] } -``` - -## Dialog with the user - -CLIs don't always make it clear when an action has taken place. For every -action a user performs, your CLI should provide an equal and appropriate -reaction, clearly highlighting the what just happened. For example: - -```shell -$ nix build - Downloaded python3.8-poetry 1.2.3 in 5.3 seconds - Downloaded python3.8-requests 1.2.3 in 5.3 seconds -... - Success! You have successfully built my-project. -$ -``` - -Above command clearly states that command successfully completed. And in case -of `nix build`, which is a command that might take some time to complete, it is -equally important to also show that a command started. - -## Text alignment - -Text alignment is the number one design element that will present all of the -Nix commands as a family and not as separate tools glued together. - -The format we should follow is: - -```shell -$ nix COMMAND - VERB_1 NOUN and other words - VERB__1 NOUN and other words - |> Some details -``` - -Few rules that we can extract from above example: - -- Each line should start at least with one space. -- First word should be a VERB and must be aligned to the right. -- Second word should be a NOUN and must be aligned to the left. -- If you can not find a good VERB / NOUN pair, don’t worry make it as - understandable to the user as possible. -- More details of each line can be provided by `|>` character which is serving - as the first word when aligning the text - -Don’t forget you should also test your terminal output with colors and emojis -off (`--no-colors --no-emojis`). - -## Dim / Bright - -After comparing few terminals with different color schemes we would **recommend -to avoid using dimmed text**. The difference from the rest of the text is very -little in many terminal and color scheme combinations. Sometimes the difference -is not even notable, therefore relying on it wouldn’t make much sense. - -**The bright text is much better supported** across terminals and color -schemes. Most of the time the difference is perceived as if the bright text -would be bold. - -## Colors - -Humans are already conditioned by society to attach certain meaning to certain -colors. While the meaning is not universal, a simple collection of colors is -used to represent basic emotions. - -Colors that can be used in output - -- Red = error, danger, stop -- Green = success, good -- Yellow/Orange = proceed with caution, warning, in progress -- Blue/Magenta = stability, calm - -While colors are nice, when command line is used by machines (in automation -scripts) you want to remove the colors. There should be a global `--no-colors` -option that would remove the colors. - -## Special (Unicode) characters - -Most of the terminal have good support for Unicode characters and you should -use them in your output by default. But always have a backup solution that is -implemented only with ASCII characters and will be used when `--ascii` option -is going to be passed in. Please make sure that you test your output also -without Unicode characters - -More they showing all the different Unicode characters it is important to -**establish common set of characters** that we use for certain situations. - -## Emojis - -Emojis help channel emotions even better than text, colors and special -characters. - -We recommend **keeping the set of emojis to a minimum**. This will enable each -emoji to stand out more. - -As not everybody is happy about emojis we should provide an `--no-emojis` -option to disable them. Please make sure that you test your output also without -emojis. - -## Tables - -All commands that are listing certain data can be implemented in some sort of a -table. It’s important that each row of your output is a single ‘entry’ of data. -Never output table borders. It’s noisy and a huge pain for parsing using other -tools such as `grep`. - -Be mindful of the screen width. Only show a few columns by default with the -table header, for more the table can be manipulated by the following options: - -- `--no-headers`: Show column headers by default but allow to hide them. -- `--columns`: Comma-separated list of column names to add. -- `--sort`: Allow sorting by column. Allow inverse and multi-column sort as well. - -## Interactive output - -Interactive output was selected to be able to strike the balance between -beginners and advance users. While the default output will target beginners it -can, with a few key strokes, be changed into and advance introspection tool. - -### Progress - -For longer running commands we should provide and overview the progress. -This is shown best in `nix build` example: - -```shell -$ nix build - Started building my-project 1.2.3 - Downloaded python3.8-poetry 1.2.3 in 5.3 seconds - Downloaded python3.8-requests 1.2.3 in 5.3 seconds ------------------------------------------------------------------------- - Press `v` to increase logs verbosity - |> `?` to see other options ------------------------------------------------------------------------- - Learn something new with every build... - |> See last logs of a build with `nix log --last` command. ------------------------------------------------------------------------- - Evaluated my-project 1.2.3 in 14.43 seconds -Downloading [12 / 200] - |> firefox 1.2.3 [#########> ] 10Mb/s | 2min left - Building [2 / 20] - |> glibc 1.2.3 -> buildPhase: ------------------------------------------------------------------------- -``` - -### Search - -Use a `fzf` like fuzzy search when there are multiple options to choose from. - -```shell -$ nix init -Initializing Nix project at `/path/to/here`. - Select a template for you new project: - |> py - template#python-pip - template#python-poetry - [ Showing 2 templates from 1345 templates ] -``` - -### Prompt - -In some situations we need to prompt the user and inform the user about what is -going to happen. - -```shell -$ nix build --option substitutors https://cache.example.org ------------------------------------------------------------------------- - Warning! A security related question needs to be answered. ------------------------------------------------------------------------- - The following substitutors will be used to in `my-project`: - - https://cache.example.org - - Do you allow `my-project` to use above mentioned substitutors? - [y/N] |> y -``` - -## Verbosity - -There are many ways that you can control verbosity. - -Verbosity levels are: - -- `ERROR` (level 0) -- `WARN` (level 1) -- `NOTICE` (level 2) -- `INFO` (level 3) -- `TALKATIVE` (level 4) -- `CHATTY` (level 5) -- `DEBUG` (level 6) -- `VOMIT` (level 7) - -The default level that the command starts is `ERROR`. The simplest way to -increase the verbosity by stacking `-v` option (eg: `-vvv == level 3 == INFO`). -There are also two shortcuts, `--debug` to run in `DEBUG` verbosity level and -`--quiet` to run in `ERROR` verbosity level. - ----------- - -# Appendix 1: Commands naming exceptions - -`nix init` and `nix repl` are well established diff --git a/doc/manual/src/contributing/contributing.md b/doc/manual/src/contributing/contributing.md deleted file mode 100644 index 854139a31..000000000 --- a/doc/manual/src/contributing/contributing.md +++ /dev/null @@ -1 +0,0 @@ -# Contributing diff --git a/doc/manual/src/contributing/cxx.md b/doc/manual/src/contributing/cxx.md deleted file mode 100644 index ff9297158..000000000 --- a/doc/manual/src/contributing/cxx.md +++ /dev/null @@ -1,28 +0,0 @@ -# C++ style guide - -Some miscellaneous notes on how we write C++. -Formatting we hope to eventually normalize automatically, so this section is free to just discuss higher-level concerns. - -## The `*-impl.hh` pattern - -Let's start with some background info first. -Headers, are supposed to contain declarations, not definitions. -This allows us to change a definition without changing the declaration, and have a very small rebuild during development. -Templates, however, need to be specialized to use-sites. -Absent fancier techniques, templates require that the definition, not just mere declaration, must be available at use-sites in order to make that specialization on the fly as part of compiling those use-sites. -Making definitions available like that means putting them in headers, but that is unfortunately means we get all the extra rebuilds we want to avoid by just putting declarations there as described above. - -The `*-impl.hh` pattern is a ham-fisted partial solution to this problem. -It constitutes: - -- Declaring items only in the main `foo.hh`, including templates. - -- Putting template definitions in a companion `foo-impl.hh` header. - -Most C++ developers would accompany this by having `foo.hh` include `foo-impl.hh`, to ensure any file getting the template declarations also got the template definitions. -But we've found not doing this has some benefits and fewer than imagined downsides. -The fact remains that headers are rarely as minimal as they could be; -there is often code that needs declarations from the headers but not the templates within them. -With our pattern where `foo.hh` doesn't include `foo-impl.hh`, that means they can just include `foo.hh` -Code that needs both just includes `foo.hh` and `foo-impl.hh`. -This does make linking error possible where something forgets to include `foo-impl.hh` that needs it, but those are build-time only as easy to fix. diff --git a/doc/manual/src/contributing/experimental-features.md b/doc/manual/src/contributing/experimental-features.md deleted file mode 100644 index c27ba5da0..000000000 --- a/doc/manual/src/contributing/experimental-features.md +++ /dev/null @@ -1,102 +0,0 @@ -This section describes the notion of *experimental features*, and how it fits into the big picture of the development of Lix. - -
- -This section has not been updated for Lix *development practices* and should not be considered authoritative with respect to those; see the Lix wiki for more up-to-date information as it gets written . The technical content on this page is correct. - -
- - -# What are experimental features? - -Experimental features are considered unstable, which means that they can be changed or removed at any time. -Users must explicitly enable them by toggling the associated [experimental feature flags](@docroot@/command-ref/conf-file.md#conf-experimental-features). -This allows accessing unstable functionality without unwittingly relying on it. - -Experimental feature flags were first introduced in [Nix 2.4](@docroot@/release-notes/rl-2.4.md). -Before that, Nix did have experimental features, but they were not guarded by flags and were merely documented as unstable. -This was a source of confusion and controversy. - -# When should a new feature be marked experimental? - -A change in the Lix codebase should be guarded by an experimental feature flag if it is considered likely to be reverted or adapted in a backwards-incompatible manner after gathering more experience with it in practice. - -Examples: - -- Changes to the Nix language, such as new built-ins, syntactic or semantic changes, etc. -- Changes to the command-line interface - -# Lifecycle of an experimental feature - -Experimental features have to be treated on a case-by-case basis. -However, the standard workflow for an experimental feature is as follows: - -- A new feature is implemented in a *pull request* - - It is guarded by an experimental feature flag that is disabled by default -- The pull request is merged, the *experimental* feature ends up in a release - - Using the feature requires explicitly enabling it, signifying awareness of the potential risks - - Being experimental, the feature can still be changed arbitrarily -- The feature can be *removed* - - The associated experimental feature flag is also removed -- The feature can be declared *stable* - - The associated experimental feature flag is removed - - There should be enough evidence of users having tried the feature, such as feedback, fixed bugs, demonstrations of how it is put to use - - Maintainers must feel confident that: - - The feature is designed and implemented sensibly, that it is fit for purpose - - Potential interactions are well-understood - - Stabilising the feature will not incur an outsized maintenance burden in the future - -The following diagram illustrates the process: - -``` - .------. - | idea | - '------' - | - discussion, design, implementation - | - | .-------. - | | | - v v | - .--------------. review - | pull request | | - '--------------' | - | ^ | | - | | '-------' - .---' '----. - | | - merge user feedback, - | (breaking) changes - | | - '---. .----' - | | - v | - +--------------+ - .---| experimental |----. - | +--------------+ | - | | -decision to stabilise decision against - | keeping the feature - | | - v v - +--------+ +---------+ - | stable | | removed | - +--------+ +---------+ -``` - -# Relation to the RFC process - -Experimental features and [RFCs](https://github.com/NixOS/rfcs/) both allow approaching substantial changes while minimizing the risk. -However they serve different purposes: - -- An experimental feature enables developers to iterate on and deliver a new idea without committing to it or requiring a costly long-running fork. - It is primarily an issue of *implementation*, targeting Nix developers and early testers. -- The goal of an RFC is to make explicit all the implications of a change: - Explain why it is wanted, which new use-cases it enables, which interface changes it requires, etc. - It is primarily an issue of *design* and *communication*, targeting the broader community. - -This means that experimental features and RFCs are orthogonal mechanisms, and can be used independently or together as needed. - -# Currently available experimental features - -{{#include @generated@/contributing/experimental-feature-descriptions.md}} diff --git a/doc/manual/src/contributing/hacking.md b/doc/manual/src/contributing/hacking.md deleted file mode 100644 index 781aa75c1..000000000 --- a/doc/manual/src/contributing/hacking.md +++ /dev/null @@ -1,352 +0,0 @@ -# Hacking - -This section provides some notes on how to hack on Lix. To get the latest version of Lix from Forgejo: - -```console -$ git clone https://git.lix.systems/lix-project/lix -$ cd lix -``` - -The following instructions assume you already have some version of Nix or Lix installed locally, so that you can use it to set up the development environment. If you don't have it installed, follow the [installation instructions]. - -[installation instructions]: ../installation/installation.md - -## Building Lix in a development shell - -### Setting up the development shell - -If you are using Lix or Nix with the [`flakes`] and [`nix-command`] experimental features enabled, the following command will build all dependencies and start a shell in which all environment variables are setup for those dependencies to be found: - -```bash -$ nix develop -``` - -That will use the default stdenv for your system. To get a shell with one of the other [supported compilation environments](#compilation-environments), specify its attribute name after a hash (which you may need to quote, depending on your shell): - -```bash -$ nix develop ".#native-clangStdenvPackages" -``` - -For classic Nix, use: - -```bash -$ nix-shell -A native-clangStdenvPackages -``` - -[`flakes`]: @docroot@/contributing/experimental-features.md#xp-feature-flakes -[`nix-command`]: @docroot@/contributing/experimental-features.md#xp-nix-command - - -### Building from the development shell - -As always you may run [stdenv's phases by name](https://nixos.org/manual/nixpkgs/unstable/#sec-building-stdenv-package-in-nix-shell), e.g.: - -```bash -$ configurePhase -$ buildPhase -$ checkPhase -$ installPhase -$ installCheckPhase -``` - -To build manually, however, use the following: - -```bash -$ meson setup ./build "--prefix=$out" $mesonFlags -``` - -(A simple `meson setup ./build` will also build, but will do a different thing, not having the settings from package.nix applied). - -```bash -$ meson compile -C build -$ meson test -C build --suite=check -$ meson install -C build -$ meson test -C build --suite=installcheck -``` - -(Check and installcheck may both be done after install, allowing you to omit the --suite argument entirely, but this is the order package.nix runs them in.) - -This will install Lix to `$PWD/outputs`, the `/bin` of which is prepended to PATH in the development shells. - -If the tests fail and Meson helpfully has no output for why, use the `--print-error-logs` option to `meson test`. - -If you change a setting in the buildsystem (i.e., any of the `meson.build` files), most cases will automatically regenerate the Meson configuration just before compiling. -Some cases, however, like trying to build a specific target whose name is new to the buildsystem (e.g. `meson compile -C build src/libmelt/libmelt.dylib`, when `libmelt.dylib` did not exist as a target the last time the buildsystem was generated), then you can reconfigure using new settings but existing options, and only recompiling stuff affected by the changes: - -```bash -$ meson setup --reconfigure build -``` - -Note that changes to the default values in `meson.options` or in the `default_options :` argument to `project()` are **not** propagated with `--reconfigure`. - -If you want a totally clean build, you can use: - -```bash -$ meson setup --wipe build -``` - -That will work regardless of if `./build` exists or not. - -Specific, named targets may be addressed in `meson build -C build `, with the "target ID", if there is one, which is the first string argument passed to target functions that have one, and unrelated to the variable name, e.g.: - -```meson -libexpr_dylib = library('nixexpr', …) -``` - -can be addressed with: - -```bash -$ meson compile -C build nixexpr -``` - -All targets may be addressed as their output, relative to the build directory, e.g.: - -```bash -$ meson compile -C build src/libexpr/liblixexpr.so -``` - -But Meson does not consider intermediate files like object files targets. -To build a specific object file, use Ninja directly and specify the output file relative to the build directory: - -```bash -$ ninja -C build src/libexpr/liblixexpr.so.p/nixexpr.cc.o -``` - -To inspect the canonical source of truth on what the state of the buildsystem configuration is, use: - -```bash -$ meson introspect -``` - -## Building Lix outside of development shells - -To build a release version of Lix for the current operating system and CPU architecture: - -```console -$ nix build -``` - -You can also build Lix for one of the [supported platforms](#platforms). - -> **Note** -> -> You can use `native-ccacheStdenvPackages` to drastically improve rebuild time. -> By default, [ccache](https://ccache.dev) keeps artifacts in `~/.cache/ccache/`. - -## Platforms - -Lix can be built for various platforms, as specified in [`flake.nix`]: - -[`flake.nix`]: https://git.lix.systems/lix-project/lix/src/branch/main/flake.nix - -- `x86_64-linux` -- `x86_64-darwin` -- `i686-linux` -- `aarch64-linux` -- `aarch64-darwin` -- `armv6l-linux` -- `armv7l-linux` - -In order to build Lix for a different platform than the one you're currently -on, you need a way for your current Nix installation to build code for that -platform. Common solutions include [remote builders] and [binary format emulation] -(only supported on NixOS). - -[remote builders]: ../advanced-topics/distributed-builds.md -[binary format emulation]: https://nixos.org/manual/nixos/stable/options.html#opt-boot.binfmt.emulatedSystems - -Given such a setup, executing the build only requires selecting the respective attribute. -For example, to compile for `aarch64-linux`: - -```console -$ nix-build --attr packages.aarch64-linux.default -``` - -or for Nix with the [`flakes`] and [`nix-command`] experimental features enabled: - -```console -$ nix build .#packages.aarch64-linux.default -``` - -Cross-compiled builds are available for ARMv6 (`armv6l-linux`) and ARMv7 (`armv7l-linux`). -Add more [system types](#system-type) to `crossSystems` in `flake.nix` to bootstrap Nix on unsupported platforms. - -### Building for multiple platforms at once - -It is useful to perform multiple cross and native builds on the same source tree, for example to ensure that better support for one platform doesn't break the build for another. -As Lix now uses Meson, out-of-tree builds are supported first class. In the invocation - -```bash -$ meson setup build -``` - -the argument after `setup` specifies the directory for this build, conventionally simply called "build", but it may be called anything, and you may run `meson setup ` for as many different directories as you want. -To compile the configuration for a given build directory, pass that build directory to the `-C` argument of `meson compile`: - -```bash -$ meson setup some-custom-build -$ meson compile -C some-custom-build -``` - -## System type - -Lix uses a string with the following format to identify the *system type* or *platform* it runs on: - -``` --[-] -``` - -It is set when Lix is compiled for the given system, and determined by [Meson's `host_machine.cpu_family()` and `host_machine.system()` values](https://mesonbuild.com/Reference-manual_builtin_host_machine.html). - -For historic reasons and backward-compatibility, some CPU and OS identifiers are translated from the GNU Autotools naming convention in [`meson.build`](https://git.lix.systems/lix-project/lix/blob/main/meson.build) as follows: - -| `host_machine.cpu_family()` | Nix | -|----------------------------|---------------------| -| `x86` | `i686` | -| `i686` | `i686` | -| `i686` | `i686` | -| `arm6` | `arm6l` | -| `arm7` | `arm7l` | -| `linux-gnu*` | `linux` | -| `linux-musl*` | `linux` | - -## Compilation environments - -Lix can be compiled using multiple environments: - -- `stdenv`: default; -- `gccStdenv`: force the use of `gcc` compiler; -- `clangStdenv`: force the use of `clang` compiler; -- `ccacheStdenv`: enable [ccache], a compiler cache to speed up compilation. - -To build with one of those environments, you can use - -```console -$ nix build .#nix-ccacheStdenv -``` - -for flake-enabled Nix, or - -```console -$ nix-build --attr nix-ccacheStdenv -``` - -for classic Nix. - -You can use any of the other supported environments in place of `nix-ccacheStdenv`. - -## Editor integration - -The `clangd` LSP server is installed by default in each development shell. -See [supported compilation environments](#compilation-environments) and instructions how to set up a shell [with flakes](#nix-with-flakes) or in [classic Nix](#classic-nix). - -Clangd requires a compilation database, which Meson generates by default. After running `meson setup`, there will already be a `compile_commands.json` file in the build directory. -Some editor configurations may prefer that file to be in the root directory, which you can accomplish with a simple: - -```bash -$ ln -sf ./build/compile_commands.json ./compile_commands.json -``` - -Configure your editor to use the `clangd` from the shell, either by running it inside the development shell, or by using [nix-direnv](https://github.com/nix-community/nix-direnv) and [the appropriate editor plugin](https://github.com/direnv/direnv/wiki#editor-integration). - -> **Note** -> -> For some editors (e.g. Visual Studio Code), you may need to install a [special extension](https://open-vsx.org/extension/llvm-vs-code-extensions/vscode-clangd) for the editor to interact with `clangd`. -> Some other editors (e.g. Emacs, Vim) need a plugin to support LSP servers in general (e.g. [lsp-mode](https://github.com/emacs-lsp/lsp-mode) for Emacs and [vim-lsp](https://github.com/prabirshrestha/vim-lsp) for vim). -> Editor-specific setup is typically opinionated, so we will not cover it here in more detail. - -### Checking links in the manual - -The build checks for broken internal links. -This happens late in the process, so `nix build` is not suitable for iterating. -To build the manual incrementally, run: - -```console -meson compile -C build manual -``` - -[`mdbook-linkcheck`] does not implement checking [URI fragments] yet. - -[`mdbook-linkcheck`]: https://github.com/Michael-F-Bryan/mdbook-linkcheck -[URI fragments]: https://en.wikipedia.org/wiki/URI_fragment - -#### `@docroot@` variable - -`@docroot@` provides a base path for links that occur in reusable snippets or other documentation that doesn't have a base path of its own. - -If a broken link occurs in a snippet that was inserted into multiple generated files in different directories, use `@docroot@` to reference the `doc/manual/src` directory. - -If the `@docroot@` literal appears in an error message from the `mdbook-linkcheck` tool, the `@docroot@` replacement needs to be applied to the generated source file that mentions it. -See existing `@docroot@` logic in the [Makefile]. -Regular markdown files used for the manual have a base path of their own and they can use relative paths instead of `@docroot@`. - -## API documentation - -Doxygen API documentation is [available -online](https://hydra.nixos.org/job/nix/master/internal-api-docs/latest/download-by-type/doc/internal-api-docs). You -can also build and view it yourself: - -```console -# nix build .#hydraJobs.internal-api-docs -# xdg-open ./result/share/doc/nix/internal-api/html/index.html -``` - -or inside a `nix develop` shell by running: - -```bash -$ meson compile -C build internal-api-docs -$ xdg-open ./outputs/doc/share/doc/nix/internal-api/html/index.html -``` - -## Coverage analysis - -A coverage analysis report is [available -online](https://hydra.nixos.org/job/nix/master/coverage/latest/download-by-type/report/coverage). You -can build it yourself: - -``` -# nix build .#hydraJobs.coverage -# xdg-open ./result/coverage/index.html -``` - -Metrics about the change in line/function coverage over time are also -[available](https://hydra.nixos.org/job/nix/master/coverage#tabs-charts). - -## Add a release note - -`doc/manual/rl-next` contains release notes entries for all unreleased changes. - -User-visible changes should come with a release note. - -### Add an entry - -Here's what a complete entry looks like. The file name is not incorporated in the document. - -``` ---- -synopsis: Basically a title -# 1234 or gh#1234 will refer to CppNix GitHub, fj#1234 will refer to a Lix forgejo issue. -issues: [1234, fj#1234] -# Use this *only* if there is a CppNix pull request associated with this change -prs: 1238 -# List of Lix Gerrit changelist numbers; if there is an associated Lix GitHub -# PR, just put in the Gerrit CL number. -cls: [123] ---- - -Here's one or more paragraphs that describe the change. - -- It's markdown -- Add references to the manual using @docroot@ -``` - -Significant changes should add the following header, which moves them to the top. - -``` -significance: significant -``` - -### Build process - -Releases have a precomputed `rl-MAJOR.MINOR.md`, and no `rl-next.md`. -Set `buildUnreleasedNotes = true;` in `flake.nix` to build the release notes on the fly. diff --git a/doc/manual/src/contributing/meson.build b/doc/manual/src/contributing/meson.build deleted file mode 100644 index 2929578c8..000000000 --- a/doc/manual/src/contributing/meson.build +++ /dev/null @@ -1,15 +0,0 @@ -# Intermediate step for experimental-feature-descriptions.md. -# This splorks the output of generate-xp-features.nix as JSON, -# which gets written as a directory tree below. -experimental_feature_descriptions_md = custom_target( - command : nix_eval_for_docs + [ - '--expr', - 'import @INPUT0@ (builtins.fromJSON (builtins.readFile @INPUT1@))', - ], - input : [ - '../../generate-xp-features.nix', - xp_features_json, - ], - capture : true, - output : 'experimental-feature-descriptions.md', -) diff --git a/doc/manual/src/contributing/testing.md b/doc/manual/src/contributing/testing.md deleted file mode 100644 index 84836b891..000000000 --- a/doc/manual/src/contributing/testing.md +++ /dev/null @@ -1,464 +0,0 @@ -# Running tests - -## Unit-tests - -The unit tests are defined using the [googletest] and [rapidcheck] frameworks. - -[googletest]: https://google.github.io/googletest/ -[rapidcheck]: https://github.com/emil-e/rapidcheck - -### Source and header layout - -> An example of some files, demonstrating much of what is described below -> -> ``` -> … -> ├── src -> │   ├── libexpr -> │   │   ├── … -> │   │   ├── value -> │   │   │   ├── context.cc -> │   │   │   └── context.hh -> │ … … -> ├── tests -> │   … -> │   └── unit -> │   ├── libcmd -> │   │   └── args.cc -> │   ├── libexpr -> │   │   ├── … -> │   │   └── value -> │   │   ├── context.cc -> │   │   └── print.cc -> │   ├── libexpr-support -> │   │   └── tests -> │   │   ├── libexpr.hh -> │   │   └── value -> │   │   ├── context.cc -> │   │   └── context.hh -> │   ├── libstore -> │   │   ├── common-protocol.cc -> │   │   ├── data -> │   │   │   ├── libstore -> │   │   │   │   ├── common-protocol -> │   │   │   │   │   ├── content-address.bin -> │   │   │   │   │   ├── drv-output.bin -> … … … … … … -> ``` - -The unit tests for each Lix library (`liblixexpr`, `liblixstore`, etc..) live inside a directory `src/${library_shortname}/tests` within the directory for the library (`src/${library_shortname}`). - -The data is in `tests/unit/LIBNAME/data/LIBNAME`, with one subdir per library, with the same name as where the code goes. -For example, `liblixstore` code is in `src/libstore`, and its test data is in `tests/unit/libstore/data/libstore`. -The path to the unit test data directory is passed to the unit test executable with the environment variable `_NIX_TEST_UNIT_DATA`. - -### Running tests - -You can run the whole testsuite with `just test` (see justfile for exact invocation of meson), and if you want to run just one test suite, use `just test --suite installcheck functional-init` where `installcheck` is the name of the test suite in this case and `functional-init` is the name of the test. - -To get a list of tests, use `meson test -C build --list` (or `just test --list` for short). - -For `installcheck` specifically, first run `just install` before running the test suite (this is due to meson limitations that don't let us put a dependency on installing before doing the test). - -Finer-grained filtering within a test suite is also possible using the [--gtest_filter](https://google.github.io/googletest/advanced.html#running-a-subset-of-the-tests) command-line option to a test suite executable, or the `GTEST_FILTER` environment variable. - -### Unit test support libraries - -There are headers and code which are not just used to test the library in question, but also downstream libraries. -For example, we do [property testing] with the [rapidcheck] library. -This requires writing `Arbitrary` "instances", which are used to describe how to generate values of a given type for the sake of running property tests. -Because types contain other types, `Arbitrary` "instances" for some type are not just useful for testing that type, but also any other type that contains it. -Downstream types frequently contain upstream types, so it is very important that we share arbitrary instances so that downstream libraries' property tests can also use them. - -It is important that these testing libraries don't contain any actual tests themselves. -On some platforms they would be run as part of every test executable that uses them, which is redundant. -On other platforms they wouldn't be run at all. - -### Characterization testing - -See [below](#characterization-testing-1) for a broader discussion of characterization testing. - -Like with the functional characterization, `_NIX_TEST_ACCEPT=1` is also used. -For example: -```shell-session -$ _NIX_TEST_ACCEPT=1 just test --suite check libstore-unit-tests -... -../tests/unit/libstore/common-protocol.cc:27: Skipped -Cannot read golden master because another test is also updating it - -../tests/unit/libstore/common-protocol.cc:62: Skipped -Updating golden master - -../tests/unit/libstore/common-protocol.cc:27: Skipped -Cannot read golden master because another test is also updating it - -../tests/unit/libstore/common-protocol.cc:62: Skipped -Updating golden master -... -``` -will regenerate the "golden master" expected result for the `liblixstore` characterization tests. -The characterization tests will mark themselves "skipped" since they regenerated the expected result instead of actually testing anything. - -## Functional tests - -The functional tests reside under the `tests/functional` directory and are listed in `tests/functional/meson.build`. -Each test is a bash script. - -### Running the whole test suite - -
-FIXME(meson): this section is wrong for meson and commented out accordingly. See "Running Tests" above, and ask the Lix team if you need further clarification. -
- - - -### Debugging failing functional tests - -When a functional test fails, it usually does so somewhere in the middle of the script. - -To figure out what's wrong, it is convenient to run the test regularly up to the failing `nix` command, and then run that command with a debugger like GDB. - -For example, if the script looks like: - -```bash -foo -nix blah blub -bar -``` -edit it like so: - -```diff - foo --nix blah blub -+gdb --args nix blah blub - bar -``` - -
-FIXME(meson): the command here is incorrect for meson and this whole functionality may need rebuilding. -
- -Then, running the test with `./mk/debug-test.sh` will drop you into GDB once the script reaches that point: - -```shell-session -$ ./mk/debug-test.sh tests/functional/${testName}.sh -... -+ gdb blash blub -GNU gdb (GDB) 12.1 -... -(gdb) -``` - -One can debug the Nix invocation in all the usual ways. -For example, enter `run` to start the Nix invocation. - -### Characterization testing - -Occasionally, Lix utilizes a technique called [Characterization Testing](https://en.wikipedia.org/wiki/Characterization_test) as part of the functional tests. -This technique is to include the exact output/behavior of a former version of Nix in a test in order to check that Lix continues to produce the same behavior going forward. - -For example, this technique is used for the language tests, to check both the printed final value if evaluation was successful, and any errors and warnings encountered. - -It is frequently useful to regenerate the expected output. -To do that, rerun the failed test(s) with `_NIX_TEST_ACCEPT=1`. -For example: -```bash -_NIX_TEST_ACCEPT=1 just test --suite installcheck -v functional-lang -``` - -An interesting situation to document is the case when these tests are "overfitted". -The language tests are, again, an example of this. -The expected successful output of evaluation is supposed to be highly stable – we do not intend to make breaking changes to (the stable parts of) the Nix language. -However, the errors and warnings during evaluation (successful or not) are not stable in this way. -We are free to change how they are displayed at any time. - -It may be surprising that we would test non-normative behavior like diagnostic outputs. -Diagnostic outputs are indeed not a stable interface, but they still are important to users. -By recording the expected output, the test suite guards against accidental changes, and ensure the *result* (not just the code that implements it) of the diagnostic code paths are under code review. -Regressions are caught, and improvements always show up in code review. - -To ensure that characterization testing doesn't make it harder to intentionally change these interfaces, there always must be an easy way to regenerate the expected output, as we do with `_NIX_TEST_ACCEPT=1`. - -## Integration tests - -The integration tests are defined in the Nix flake under the `hydraJobs.tests` attribute. -These tests include everything that needs to interact with external services or run Lix in a non-trivial distributed setup. -Because these tests are expensive and require more than what the standard github-actions setup provides, they only run on the master branch (on ). - -You can run them manually with `nix build .#hydraJobs.tests.{testName}` or `nix-build -A hydraJobs.tests.{testName}` - -
- -Installer tests section is outdated and commented out, see https://git.lix.systems/lix-project/lix/issues/33 - -
- - - -## Magic environment variables - -FIXME: maybe this section should be moved elsewhere or turned partially into user docs, but I just need a complete index for now. -I actually want to ban people calling getenv without writing documentation, and produce a comprehensive list of env-vars used by Lix and enforce it. - -This is a non-exhaustive list of almost all environment variables, magic or not, accepted or used by various parts of the test suite as well as Lix itself. -Please add more if you find them. - -I looked for these in the testsuite with the following bad regexes: - -``` -rg '(?:[^A-Za-z]|^)(_[A-Z][^-\[ }/:");$(]+)' -r '$1' --no-filename --only-matching tests | sort -u > vars.txt -rg '\$\{?([A-Z][^-\[ }/:");]+)' -r '$1' --no-filename --only-matching tests | sort -u > vars.txt -``` - -I grepped `src/` for `get[eE]nv\("` to find the mentions in Lix code. - -### Used by Lix testing support code - -- `_NIX_TEST_ACCEPT` (optional) - Writes out the result of a characterization test as the new expected value. - **Expected value**: 1 - -- `_NIX_TEST_UNIT_DATA` - The path to the directory for the data for a given unit test suite. - - **Expected value**: `tests/unit/libstore/data/libstore` or similar - - -### Used by Lix - -- `_NIX_FORCE_HTTP` - Forces file URIs to be treated as remote ones. - - Used by `src/libfetchers/git.cc`, `src/libstore/http-binary-cache-store.cc`, - `src/libstore/local-binary-cache-store.cc`. Seems to be for forcing Git - clones of `git+file://` URLs, making the HTTP binary - cache store accept `file://` URLs (presumably passing them to curl?), and - unknown reasons for the local binary cache. - - FIXME(jade): is this obscuring a bug in https://git.lix.systems/lix-project/lix/issues/200? - - **Expected value**: 1 -- `NIX_ATTRS_SH_FILE`, `NIX_ATTRS_JSON_FILE` (output) - Set by Lix builders; see - `structuredAttrs` documentation. -- `NIX_BIN_DIR`, `NIX_STORE_DIR` (or its inconsistently-used old alias `NIX_STORE`), `NIX_DATA_DIR`, - `NIX_LOG_DIR`, `NIX_LOG_DIR`, `NIX_STATE_DIR`, `NIX_CONF_DIR` - - Overrides compile-time configuration of various locations used by Lix. See `src/libstore/globals.cc`. - - **Expected value**: a directory -- `NIX_DAEMON_SOCKET_PATH` (optional) - Overrides the daemon socket path from `$NIX_STATE_DIR/daemon-socket/socket`. - - **Expected value**: path to a socket -- `NIX_LOG_FD` (output) - An FD number for logs in `internal-json` format to be sent to. - Used for, mostly, "setPhase" in nixpkgs setup.sh, but can also be creatively used to print verbose log messages from derivations. - - **Provided value**: number corresponding to an FD in the builder -- `NIX_PATH` - Search path for ``. Documented elsewhere in the manual. - - **Expected value**: `:` separated list of things that are not necessarily pointing to filesystem paths -- `NIX_REMOTE` - The default value of the Lix setting `store`. - - **Expected value**: "daemon", usually. Could be "auto" or any other value acceptable in `store`. -- `NIX_BUILD_SHELL` - Documented elsewhere; the shell to invoke with `nix-shell` but not `nix develop`/`nix shell`. - The latter ignoring it altogether seems like a bug. - - **Expected value**: the path to an executable shell -- `PRINT_PATH` - Undocumented. Used by `nix-prefetch-url` as an alternative form of `--print-path`. Why??? -- `_NIX_IN_TEST` - If present with any value, makes `fetchClosure` accept file URLs in addition to HTTP ones. Why is this not `_NIX_FORCE_HTTP`?? - - Not used anywhere else. -- `NIX_ALLOW_EVAL` - Used by eval-cache tests to block evaluation if set to `0`. - - **Expected value**: 1 or 0 -- `EDITOR` - Used by `editorFor()`, which has some extremely sketchy editor-detection code for jumping to line numbers. -- `LISTEN_FDS` and `LISTEN_PID` - Used for systemd socket activation using the systemd socket activation protocol. -- `NIX_PAGER` (alternatively, `PAGER`) - Used to select a pager for Lix output. Why does this not use libutil `getEnv()`? -- `LESS` (output) - Sets the pager settings for `less` when invoked by Lix. -- `NIX_IGNORE_SYMLINK_STORE` - When set, Lix allows the store to be a symlink. Why do we support this? - - Apparently [someone was using it enough to fix it](https://github.com/NixOS/nix/pull/4038). -- `NIX_SSL_CERT_FILE` (alternatively, `SSL_CERT_FILE`) - Used to set CA certificates for libcurl. - - **Expected value**: "/etc/ssl/certs/ca-certificates.crt" or similar -- `NIX_REMOTE_SYSTEMS` - Used to set `builders`. Can we please deprecate this? -- `NIX_USER_CONF_FILES` - `:` separated list of config files to load before - `/nix/nix.conf` under each of `XDG_CONFIG_DIRS`. -- `NIX_CONFIG` - Newline separated configuration to load into Lix. -- `NIX_GET_COMPLETIONS` - Returns completions. - Unsure of the exact format, someone should document it; either way my shell never had any completions. - - **Expected value**: number of completions to return. -- `IN_SYSTEMD` - Used to switch the logging format so that systemd gets the correct log levels. I think. -- `NIX_HELD_LOCKS` - Not used, what is this for?? We should surely remove it right after searching github? -- `GC_INITIAL_HEAP_SIZE` - Used to set the initial heap size, processed by boehmgc. -- `NIX_COUNT_CALLS` - Documented elsewhere; prints call counts for profiling purposes. -- `NIX_SHOW_STATS` - Documented elsewhere; prints various evaluation statistics like function calls, gc info, and similar. -- `NIX_SHOW_STATS_PATH` - Writes those statistics into a file at the given path instead of stdout. Undocumented. -- `NIX_SHOW_SYMBOLS` - Dumps the symbol table into the show-stats json output. -- `TERM` - If `dumb` or unset, disables ANSI colour output. -- `NO_COLOR`, `NOCOLOR` - Disables ANSI colour output. -- `_NIX_DEVELOPER_SHOW_UNKNOWN_LOCATIONS` - Highlights unknown locations in errors. -- `NIX_PROFILE` - Selects which profile `nix-env` will operate on. Documented elsewhere. -- `NIX_SSHOPTS` - Options passed to `ssh(1)` when using a ssh remote store. - Incorrectly documented on `nix-copy-closure` which is *surely* not the only place they are used?? -- `_NIX_TEST_NO_LSOF` - Used on non-Linux, non-macOS platforms to disable using `lsof` when finding gc roots. - - Since https://git.lix.systems/lix-project/lix/issues/156 was fixed, this should probably just be removed as it was a bad workaround for a macOS issue. -- `_NIX_TEST_GC_SYNC_1` - Path to a pipe that is used to block the GC briefly to validate invariants from the test suite. -- `_NIX_TEST_GC_SYNC_2` - Path to a pipe that is used to block the GC briefly to validate invariants from the test suite. -- `_NIX_TEST_FREE_SPACE_FILE` - Path to a file containing a decimal number with the free space that the GC is to believe it has. -- Various XDG vars -- `NIX_DEBUG_SQLITE_TRACES` - Dump all sqlite queries to the log at `notice` level. -- `_NIX_TEST_NO_SANDBOX` - Disables actually setting up the sandbox on macOS while leaving other logic the same. Unused on other platforms. -- `_NIX_TRACE_BUILT_OUTPUTS` - Dumps all the derivation paths alongside their outputs as lines into a file of the given name. - -### Used by the functional test framework - -- `NIX_DAEMON_PACKAGE` - Runs the test suite against an alternate Nix daemon with the current client. - - **Expected value**: something like `/nix/store/...-nix-2.18.2` -- `NIX_CLIENT_PACKAGE` - Runs the test suite against an alternate Nix client with the current daemon. - - **Expected value**: something like `/nix/store/...-nix-2.18.2` -- `NIX_TESTS_CA_BY_DEFAULT` - Pass `__contentAddressed`, `outputHashMode` and `outputHashAlgo` to builds of some input-addressed derivations in the test suite. - - **Expected value**: 1 -- `TEST_DATA` - Not an environment variable! This is used in repl characterization tests to refer to `tests/functional/repl_characterization/data`. - More specifically, that path is replaced with the string `$TEST_DATA` in output for reproducibility. -- `TEST_HOME` (output) - Set to the temporary directory that is set as `$HOME` inside the tests, underneath `$TEST_ROOT`. -- `TEST_ROOT` (output) - Set to the temporary directory that is created for each test to mess with. -- `_NIX_TEST_DAEMON_PID` (output) - Used to track the daemon pid to be able to kill it. - - **Provided value**: Daemon pid as a base-10 integer, e.g. 2345 diff --git a/doc/manual/src/figures/user-environments.png b/doc/manual/src/figures/user-environments.png deleted file mode 100644 index 1f781cf23..000000000 Binary files a/doc/manual/src/figures/user-environments.png and /dev/null differ diff --git a/doc/manual/src/figures/user-environments.sxd b/doc/manual/src/figures/user-environments.sxd deleted file mode 100644 index bc661b640..000000000 Binary files a/doc/manual/src/figures/user-environments.sxd and /dev/null differ diff --git a/doc/manual/src/glossary.md b/doc/manual/src/glossary.md deleted file mode 100644 index caf740724..000000000 --- a/doc/manual/src/glossary.md +++ /dev/null @@ -1,275 +0,0 @@ -# Glossary - -- [derivation]{#gloss-derivation} - - A description of a build task. The result of a derivation is a - store object. Derivations are typically specified in Nix expressions - using the [`derivation` primitive](./language/derivations.md). These are - translated into low-level *store derivations* (implicitly by - `nix-env` and `nix-build`, or explicitly by `nix-instantiate`). - - [derivation]: #gloss-derivation - -- [store derivation]{#gloss-store-derivation} - - A [derivation] represented as a `.drv` file in the [store]. - It has a [store path], like any [store object]. - - Example: `/nix/store/g946hcz4c8mdvq2g8vxx42z51qb71rvp-git-2.38.1.drv` - - See [`nix derivation show`](./command-ref/new-cli/nix3-derivation-show.md) (experimental) for displaying the contents of store derivations. - - [store derivation]: #gloss-store-derivation - -- [instantiate]{#gloss-instantiate}, instantiation - - Translate a [derivation] into a [store derivation]. - - See [`nix-instantiate`](./command-ref/nix-instantiate.md). - - [instantiate]: #gloss-instantiate - -- [realise]{#gloss-realise}, realisation - - Ensure a [store path] is [valid][validity]. - - This means either running the [`builder`](@docroot@/language/derivations.md#attr-builder) executable as specified in the corresponding [derivation], or fetching a pre-built [store object] from a [substituter], or delegating to a [remote builder](@docroot@/advanced-topics/distributed-builds.html) and retrieving the outputs. - - See [`nix-build`](./command-ref/nix-build.md) and [`nix-store --realise`](@docroot@/command-ref/nix-store/realise.md). - - See [`nix build`](./command-ref/new-cli/nix3-build.md) (experimental). - - [realise]: #gloss-realise - -- [content-addressed derivation]{#gloss-content-addressed-derivation} - - A derivation which has the - [`__contentAddressed`](./language/advanced-attributes.md#adv-attr-__contentAddressed) - attribute set to `true`. - -- [fixed-output derivation]{#gloss-fixed-output-derivation} - - A derivation which includes the - [`outputHash`](./language/advanced-attributes.md#adv-attr-outputHash) attribute. - -- [store]{#gloss-store} - - The location in the file system where store objects live. Typically - `/nix/store`. - - From the perspective of the location where Lix is - invoked, the Nix store can be referred to - as a "_local_" or a "_remote_" one: - - + A [local store]{#gloss-local-store} exists on the filesystem of - the machine where Lix is invoked. You can use other - local stores by passing the `--store` flag to the - `nix` command. Local stores can be used for building derivations. - - + A *remote store* exists anywhere other than the - local filesystem. One example is the `/nix/store` - directory on another machine, accessed via `ssh` or - served by the `nix-serve` Perl script. - - [store]: #gloss-store - [local store]: #gloss-local-store - -- [chroot store]{#gloss-chroot-store} - - A [local store] whose canonical path is anything other than `/nix/store`. - -- [binary cache]{#gloss-binary-cache} - - A *binary cache* is a Nix store which uses a different format: its - metadata and signatures are kept in `.narinfo` files rather than in a - [Nix database]. This different format simplifies serving store objects - over the network, but cannot host builds. Examples of binary caches - include S3 buckets and the [NixOS binary cache](https://cache.nixos.org). - -- [store path]{#gloss-store-path} - - The location of a [store object] in the file system, i.e., an - immediate child of the Nix store directory. - - Example: `/nix/store/a040m110amc4h71lds2jmr8qrkj2jhxd-git-2.38.1` - - [store path]: #gloss-store-path - -- [file system object]{#gloss-store-object} - - The Nix data model for representing simplified file system data. - - See [File System Object](@docroot@/architecture/file-system-object.md) for details. - - [file system object]: #gloss-file-system-object - -- [store object]{#gloss-store-object} - - - A store object consists of a [file system object], [reference]s to other store objects, and other metadata. - It can be referred to by a [store path]. - - [store object]: #gloss-store-object - -- [input-addressed store object]{#gloss-input-addressed-store-object} - - A store object produced by building a - non-[content-addressed](#gloss-content-addressed-derivation), - non-[fixed-output](#gloss-fixed-output-derivation) - derivation. - -- [output-addressed store object]{#gloss-output-addressed-store-object} - - A [store object] whose [store path] is determined by its contents. - This includes derivations, the outputs of [content-addressed derivations](#gloss-content-addressed-derivation), and the outputs of [fixed-output derivations](#gloss-fixed-output-derivation). - -- [substitute]{#gloss-substitute} - - A substitute is a command invocation stored in the [Nix database] that - describes how to build a store object, bypassing the normal build - mechanism (i.e., derivations). Typically, the substitute builds the - store object by downloading a pre-built version of the store object - from some server. - -- [substituter]{#gloss-substituter} - - An additional [store]{#gloss-store} from which Lix can obtain store objects instead of building them. - Often the substituter is a [binary cache](#gloss-binary-cache), but any store can serve as substituter. - - See the [`substituters` configuration option](./command-ref/conf-file.md#conf-substituters) for details. - - [substituter]: #gloss-substituter - -- [purity]{#gloss-purity} - - The assumption that equal Nix derivations when run always produce - the same output. This cannot be guaranteed in general (e.g., a - builder can rely on external inputs such as the network or the - system time) but the Nix model assumes it. - -- [Nix database]{#gloss-nix-database} - - An SQlite database to track [reference]s between [store object]s. - This is an implementation detail of the [local store]. - - Default location: `/nix/var/nix/db`. - - [Nix database]: #gloss-nix-database - -- [Nix expression]{#gloss-nix-expression} - - A high-level description of software packages and compositions - thereof. Deploying software using Lix entails writing Nix - expressions for your packages. Nix expressions are translated to - derivations that are stored in the Nix store. These derivations can - then be built. - -- [reference]{#gloss-reference} - - A [store object] `O` is said to have a *reference* to a store object `P` if a [store path] to `P` appears in the contents of `O`. - - Store objects can refer to both other store objects and themselves. - References from a store object to itself are called *self-references*. - References other than a self-reference must not form a cycle. - - [reference]: #gloss-reference - -- [reachable]{#gloss-reachable} - - A store path `Q` is reachable from another store path `P` if `Q` - is in the *closure* of the *references* relation. - -- [closure]{#gloss-closure} - - The closure of a store path is the set of store paths that are - directly or indirectly “reachable” from that store path; that is, - it’s the closure of the path under the *references* relation. For - a package, the closure of its derivation is equivalent to the - build-time dependencies, while the closure of its output path is - equivalent to its runtime dependencies. For correct deployment it - is necessary to deploy whole closures, since otherwise at runtime - files could be missing. The command `nix-store --query --requisites ` prints out - closures of store paths. - - As an example, if the [store object] at path `P` contains a [reference] - to a store object at path `Q`, then `Q` is in the closure of `P`. Further, if `Q` - references `R` then `R` is also in the closure of `P`. - - [closure]: #gloss-closure - -- [output]{#gloss-output} - - A [store object] produced by a [derivation]. - - [output]: #gloss-output - -- [output path]{#gloss-output-path} - - The [store path] to the [output] of a [derivation]. - - [output path]: #gloss-output-path - -- [deriver]{#gloss-deriver} - - The [store derivation] that produced an [output path]. - -- [validity]{#gloss-validity} - - A store path is valid if all [store object]s in its [closure] can be read from the [store]. - - For a [local store], this means: - - The store path leads to an existing [store object] in that [store]. - - The store path is listed in the [Nix database] as being valid. - - All paths in the store path's [closure] are valid. - - [validity]: #gloss-validity - -- [user environment]{#gloss-user-env} - - An automatically generated store object that consists of a set of - symlinks to “active” applications, i.e., other store paths. These - are generated automatically by - [`nix-env`](./command-ref/nix-env.md). See *profiles*. - -- [profile]{#gloss-profile} - - A symlink to the current *user environment* of a user, e.g., - `/nix/var/nix/profiles/default`. - -- [installable]{#gloss-installable} - - Something that can be realised in the Nix store. - - See [installables](./command-ref/new-cli/nix.md#installables) for [`nix` commands](./command-ref/new-cli/nix.md) (experimental) for details. - -- [NAR]{#gloss-nar} - - A *N*ix *AR*chive. This is a serialisation of a path in the Nix - store. It can contain regular files, directories and symbolic - links. NARs are generated and unpacked using `nix-store --dump` - and `nix-store --restore`. - -- [`∅`]{#gloss-emtpy-set} - - The empty set symbol. In the context of profile history, this denotes a package is not present in a particular version of the profile. - -- [`ε`]{#gloss-epsilon} - - The epsilon symbol. In the context of a package, this means the version is empty. More precisely, the derivation does not have a version attribute. - -- [string interpolation]{#gloss-string-interpolation} - - Expanding expressions enclosed in `${ }` within a [string], [path], or [attribute name]. - - See [String interpolation](./language/string-interpolation.md) for details. - - [string]: ./language/values.md#type-string - [path]: ./language/values.md#type-path - [attribute name]: ./language/values.md#attribute-set - -- [experimental feature]{#gloss-experimental-feature} - - Not yet stabilized functionality guarded by named experimental feature flags. - These flags are enabled or disabled with the [`experimental-features`](./command-ref/conf-file.html#conf-experimental-features) setting. - - See the contribution guide on the [purpose and lifecycle of experimental feaures](@docroot@/contributing/experimental-features.md). diff --git a/doc/manual/src/installation/building-source.md b/doc/manual/src/installation/building-source.md deleted file mode 100644 index 83c645ae7..000000000 --- a/doc/manual/src/installation/building-source.md +++ /dev/null @@ -1,39 +0,0 @@ -# Building Lix from Source - -
- -FIXME(meson): This section is outdated for meson and has been commented out. See https://git.lix.systems/lix-project/lix/issues/258 - -
- - diff --git a/doc/manual/src/installation/env-variables.md b/doc/manual/src/installation/env-variables.md deleted file mode 100644 index fb6f02e41..000000000 --- a/doc/manual/src/installation/env-variables.md +++ /dev/null @@ -1,71 +0,0 @@ -# Environment Variables - -To use Lix, some environment variables should be set. In particular, -`PATH` should contain the directories `prefix/bin` and -`~/.nix-profile/bin`. The first directory contains the Nix tools -themselves, while `~/.nix-profile` is a symbolic link to the current -*user environment* (an automatically generated package consisting of -symlinks to installed packages). The simplest way to set the required -environment variables is to include the file -`prefix/etc/profile.d/nix.sh` in your `~/.profile` (or similar), like -this: - -```bash -source prefix/etc/profile.d/nix.sh -``` - -# `NIX_SSL_CERT_FILE` - -
- -FIXME(Lix): This section is undoubtedly wrong due to the Lix installer being replaced. The definitely-wrong install section has been commented out. - -
- -If you need to specify a custom certificate bundle to account for an -HTTPS-intercepting man in the middle proxy, you must specify the path to -the certificate bundle in the environment variable `NIX_SSL_CERT_FILE`. - -If you don't specify a `NIX_SSL_CERT_FILE` manually, Lix will install -and use its own certificate bundle. - - - -In the shell profile and rc files (for example, `/etc/bashrc`, -`/etc/zshrc`), add the following line: - -```bash -export NIX_SSL_CERT_FILE=/etc/ssl/my-certificate-bundle.crt -``` - -> **Note** -> -> You must not add the export and then do the install, as the Lix -> installer will detect the presence of Nix configuration, and abort. - -If you use the Lix daemon, you should also add the following to -`/etc/nix/nix.conf`: - -``` -ssl-cert-file = /etc/ssl/my-certificate-bundle.crt -``` - -## Proxy Environment Variables - -The Lix installer has special handling for these proxy-related -environment variables: `http_proxy`, `https_proxy`, `ftp_proxy`, -`no_proxy`, `HTTP_PROXY`, `HTTPS_PROXY`, `FTP_PROXY`, `NO_PROXY`. - -If any of these variables are set when running the Lix installer, then -the installer will create an override file at -`/etc/systemd/system/nix-daemon.service.d/override.conf` so `nix-daemon` -will use them. diff --git a/doc/manual/src/installation/installation.md b/doc/manual/src/installation/installation.md deleted file mode 100644 index d05445eab..000000000 --- a/doc/manual/src/installation/installation.md +++ /dev/null @@ -1,15 +0,0 @@ -# Installation - -See https://lix.systems/install/ for more details. - - diff --git a/doc/manual/src/installation/installing-binary.md b/doc/manual/src/installation/installing-binary.md deleted file mode 100644 index c2edc0dc2..000000000 --- a/doc/manual/src/installation/installing-binary.md +++ /dev/null @@ -1,166 +0,0 @@ -# Installing a Binary Distribution - -See https://lix.systems/install/ for more details. - - diff --git a/doc/manual/src/installation/installing-docker.md b/doc/manual/src/installation/installing-docker.md deleted file mode 100644 index 3a5e6ef77..000000000 --- a/doc/manual/src/installation/installing-docker.md +++ /dev/null @@ -1,62 +0,0 @@ -# Using Lix within Docker - -Lix is available on the following two container registries: -- [ghcr.io/lix-project/lix](https://ghcr.io/lix-project/lix) -- [git.lix.systems/lix-project/lix](https://git.lix.systems/lix-project/-/packages/container/lix) - -To run the latest stable release of Lix with Docker run the following command: - -```console -~ » sudo podman run -it ghcr.io/lix-project/lix:latest -Trying to pull ghcr.io/lix-project/lix:latest... - -bash-5.2# nix --version -nix (Lix, like Nix) 2.90.0 -``` - -# What is included in Lix's Docker image? - -The official Docker image is created using [nix2container] -(and not with `Dockerfile` as it is usual with Docker images). You can still -base your custom Docker image on it as you would do with any other Docker -image. - -[nix2container]: https://github.com/nlewo/nix2container - -The Docker image is also not based on any other image and includes the nixpkgs -that Lix was built with along with a minimal set of tools in the system profile: - -- bashInteractive -- cacert.out -- coreutils-full -- curl -- findutils -- gitMinimal -- gnugrep -- gnutar -- gzip -- iana-etc -- less -- libxml2 -- lix -- man -- openssh -- sqlite -- wget -- which - -# Docker image with the latest development version of Lix - -FIXME: There are not currently images of development versions of Lix. Tracking issue: https://git.lix.systems/lix-project/lix/issues/381 - -You can build a Docker image from source yourself and copy it to either: - -Podman: `nix run '.#dockerImage.copyTo' containers-storage:lix` - -Docker: `nix run '.#dockerImage.copyToDockerDaemon'` - -Then: - -```console -$ docker run -ti lix -``` diff --git a/doc/manual/src/installation/installing-source.md b/doc/manual/src/installation/installing-source.md deleted file mode 100644 index 06d070610..000000000 --- a/doc/manual/src/installation/installing-source.md +++ /dev/null @@ -1,4 +0,0 @@ -# Installing Lix from Source - -If no binary package is available or if you want to hack on Lix, you -can build Lix from its Git repository. diff --git a/doc/manual/src/installation/multi-user.md b/doc/manual/src/installation/multi-user.md deleted file mode 100644 index 87c956071..000000000 --- a/doc/manual/src/installation/multi-user.md +++ /dev/null @@ -1,135 +0,0 @@ -# Multi-User Mode - -To allow a Nix store to be shared safely among multiple users, it is important that users cannot meaningfully influence the execution of derivation builds such that they could inject malicious code into them without changing their (either input- or output- addressed) hash. -If they could do so, they could install a Trojan horse in some package and compromise the accounts of other users. - -To prevent this, the Nix store and database are owned by some privileged user (usually `root`) and builders are executed under unprivileged system user accounts (usually named `nixbld1`, `nixbld2`, etc.). -When an unprivileged user runs a Nix command, actions that operate on the Nix store (such as builds) are forwarded to a *Nix daemon* running under the owner of the Nix store/database that performs the operation. - -The buried lede in the above sentence is that *currently*, even in multi-user mode using a daemon, if executing as the user that owns the store, Lix directly manipulates the store unless `--store daemon` is specified. -[We intend to change this in the future][multi-user-should-not-be-root]. - -
-The Lix team considers the goal of the sandbox to be primarily for preventing reproducibility mistakes, and does not consider multi-user mode to be a strong security boundary between users. - -Do not evaluate or build untrusted, potentially-malicious, Nix language code on machines that you care deeply about maintaining user isolation on. - -Although we would consider any sandbox escapes to be serious security bugs and we intend to fix them, we are not confident enough in the daemon's security to call the daemon a security boundary. -
- -[multi-user-should-not-be-root]: https://git.lix.systems/lix-project/lix/issues/18 - -## Trust model - -There are two categories of users of the Lix daemon: trusted users and untrusted users. -The Lix daemon only allows connections from users that are either trusted users, or are specified in, or are members of groups specified in, [`allowed-users`](../command-ref/conf-file.md#conf-allowed-users) in `nix.conf`. -Trusted users are users and users of groups specified in [`trusted-users`](../command-ref/conf-file.md#conf-trusted-users) in `nix.conf`. - -All users of the Lix daemon may do the following to bring things into the Nix store: - -- Users may load derivations and output-addressed files into the store with `nix-store --add` or through Nix language code. -- Users may locally build derivations, either of the output-addressed or input-addressed variety, creating output paths. - - Note that [fixed-output derivations only consider name and hash](https://github.com/NixOS/nix/issues/969), so it is possible to write a fixed-output derivation for something important with a bogus hash and have it resolve to something else already built in the store. - - On systems with `sandbox` enabled (default on Linux; [not *yet* on macOS][sandbox-enable-macos]), derivations are either: - - Input-addressed, so they are run in the sandbox with no network access, with the following exceptions: - - - The (poorly named, since it is not *just* about chroot) property `__noChroot` is set on the derivation and `sandbox` is set to `relaxed`. - - On macOS, the derivation property `__darwinAllowLocalNetworking` allows network access to localhost from input-addressed derivations regardless of the `sandbox` setting value. This property exists with such semantics because macOS has no network namespace equivalent to isolate individual processes' localhost networking. - - Output-addressed, so they are run with network access but their result must match an expected hash. - - Trusted users may set any setting, including `sandbox = false`, so the sandbox state can be different at runtime from what is described in `nix.conf` for builds invoked with such settings. -- Users may copy appropriately-signed derivation outputs into the store. - - By default, any paths *copied into a store* (such as by substitution) must have signatures from [`trusted-public-keys`](../command-ref/conf-file.md#conf-trusted-public-keys) unless they are [output-addressed](../glossary.md#gloss-output-addressed-store-object). - - Unsigned paths may be copied into a store if [`require-sigs`](../command-ref/conf-file.md#conf-require-sigs) is disabled in the daemon's configuration (not default), or if the client is a trusted user and passed `--no-check-sigs` to `nix copy`. -- Users may request that the daemon substitutes appropriately-signed derivation outputs from a binary cache in the daemon's [`substituters`](../command-ref/conf-file.md#conf-substituters) list. - - Untrusted clients may also specify additional values for `substituters` (via e.g. `--extra-substituters` on a Nix command) that are listed in [`trusted-substituters`](../command-ref/conf-file.md#conf-trusted-substituters). - - A client could in principle substitute such paths itself then copy them to the daemon (see clause above) if they are appropriately signed but are *not* from a trusted substituter, however this is not implemented in the current Lix client to our knowledge, at the time of writing. - This probably means that `trusted-substituters` is a redundant setting except insofar as such substitution would have to be done on the client rather than as root on the daemon; and it is highly defensible to not allow random usage of our HTTP client running as root. - -[sandbox-enable-macos]: https://git.lix.systems/lix-project/lix/issues/386 - -### The Lix daemon as a security non-boundary - -The Lix team and wider community does not consider the Lix daemon to be a *security boundary* against malicious Nix language code. - -Although we do our best to make it secure, we do not recommend sharing a Lix daemon with potentially malicious users. -That means that public continuous integration (CI) builds of untrusted Nix code should not share builders with CI that writes into a cache used by trusted infrastructure. - -For example, [hydra.nixos.org], which is the builder for [cache.nixos.org], does not execute untrusted Nix language code; a separate system, [ofborg] is used for CI of nixpkgs pull requests. -The build output of pull request CI is never pushed to [cache.nixos.org], and those systems are considered entirely untrusted. - -This is because, among other things, the Lix sandbox is *more* susceptible to kernel exploits than Docker, which, unlike Lix, blocks nested user namespaces via `seccomp` in its default policy, and there have been many kernel bugs only exposed to unprivileged users via user namespaces allowing otherwise-root-only system calls. -In general, the Lix sandbox is set up to be relatively unrestricted while maintaining its goals of building useful, reproducible software; security is not its primary goal. - -The Lix sandbox is a custom *non-rootless* Linux container implementation that has not been audited to nearly the same degree as Docker and similar systems. -Also, the Lix daemon is a complex and historied C++ executable running as root with very little privilege separation. -All of this means that a security hole in the Lix daemon gives immediate root access. -Systems like Docker (especially non-rootless Docker) should *themselves* probably not be used in a multi-tenant manner with mutually distrusting tenants, but the Lix daemon *especially* should not be used as such as of this writing. - -The primary purpose of the sandbox is to strongly encourage packages to be reproducible, a goal which it is generally quite successful at. - -[hydra.nixos.org]: https://hydra.nixos.org -[ofborg]: https://github.com/NixOS/ofborg -[cache.nixos.org]: https://cache.nixos.org - -### Trusted users - -Trusted users are permitted to set any setting and bypass security restrictions on the daemon. -They are currently in widespread use for a couple of reasons such as remote builds (which we [intend to fix](https://git.lix.systems/lix-project/lix/issues/171)). - -Trusted users are effectively root on Nix daemons running as root (the default configuration) for *at least* the following reasons, and should be thus thought of as equivalent to passwordless sudo. -This is not a comprehensive list. - -- They may copy an unsigned malicious built output into the store for `systemd` or anything else that will run as root, then when the system is upgraded, that path will be used from the local store rather than substituted. -- They may set the following settings that are commands the daemon will run as root: - - `build-hook` - - `diff-hook` - - `pre-build-hook` - - `post-build-hook` -- They may set `build-users-group`. - - In particular, they may set it to empty string, which runs builds as root with respect to the rest of the system (!!). - We, too, [think that is absurd and intend to not accept such a configuration](https://git.lix.systems/lix-project/lix/issues/242). - It is then simply an exercise to the reader to find a daemon that does `SCM_CREDENTIALS` over a `unix(7)` socket and lets you run commands as root, and mount it into the sandbox with `extra-sandbox-paths`. - - At the very least, the Lix daemon itself (since `root` is a trusted user by default) and probably `systemd` qualify for this. -- They may set the `builders` list, which will have ssh run as root. - We aren't sure if there is a way to abuse this for command execution but it's plausible. - -Note that setting `accept-flake-config` allows arbitrary Nix flakes to set Nix settings in the `nixConfig` stanza. -Do not set this setting or pass `--accept-flake-config` while executing untrusted Nix language code as a trusted user for the reasons above! - -## Build users - -The *build users* are the special UIDs under which builds are performed. -A build user is selected for a build by looking in the group specified by [`build-users-group`](../command-ref/conf-file.md#conf-build-users-group), by default, `nixbld`, then a member of that group not currently executing a build is selected for the build. -The build users should not be members of any other group. - -There can never be more concurrent builds than the number of build users, unless using [`auto-allocate-uids`](../command-ref/conf-file.md#conf-auto-allocate-uids) ([tracking issue][auto-allocate-uids-issue]). - -[auto-allocate-uids-issue]: https://git.lix.systems/lix-project/lix/issues/387 - -If, for some reason, you need to create such users manually, the following command will create 10 build users on Linux: - -```console -$ groupadd -r nixbld -$ for n in $(seq 1 10); do useradd -c "Nix build user $n" \ - -d /var/empty -g nixbld -G nixbld -M -N -r -s "$(which nologin)" \ - nixbld$n; done -``` - -## Running the daemon - -The [Nix daemon](../command-ref/nix-daemon.md) can be started manually as follows (as `root`): - -```console -# nix-daemon -``` - -In standard installations of Lix, the daemon is started by a `systemd` unit (Linux) or `launchd` service (macOS). diff --git a/doc/manual/src/installation/nix-security.md b/doc/manual/src/installation/nix-security.md deleted file mode 100644 index 66febe907..000000000 --- a/doc/manual/src/installation/nix-security.md +++ /dev/null @@ -1,14 +0,0 @@ -# Security - -Lix has two basic security models. First, it can be used in “single-user -mode”, which is similar to what most other package management tools do: -there is a single user (typically root) who performs all package -management operations. All other users can then use the installed -packages, but they cannot perform package management operations -themselves. - -Alternatively, you can configure Lix in “multi-user mode”. In this model, all users can perform package management operations — for instance, every user can install software for themselves without requiring root privileges. -Lix does its best to ensure that this is secure. -For instance, it would be considered a serious security bug for one untrusted user to be able to overwrite a package used by another user with a Trojan horse. - -Nevertheless, the Lix team does not consider multi-user mode a strong security boundary, and does not recommend running untrusted user-supplied Nix language code on privileged machines, even if it is secure to the best of our knowledge at any moment in time. diff --git a/doc/manual/src/installation/obtaining-source.md b/doc/manual/src/installation/obtaining-source.md deleted file mode 100644 index 9c88942c3..000000000 --- a/doc/manual/src/installation/obtaining-source.md +++ /dev/null @@ -1,13 +0,0 @@ -# Obtaining the Source - -The most recent sources of Lix can be obtained from its [Git -repository](https://git.lix.systems/lix-project/lix). For example, the following -command will check out the latest revision into a directory called -`nix`: - -```console -$ git clone https://git.lix.systems/lix-project/lix -``` - -Likewise, specific releases can be obtained from the -[tags](https://git.lix.systems/lix-project/lix/tags) of the repository. diff --git a/doc/manual/src/installation/prerequisites-source.md b/doc/manual/src/installation/prerequisites-source.md deleted file mode 100644 index 88a411b7a..000000000 --- a/doc/manual/src/installation/prerequisites-source.md +++ /dev/null @@ -1,87 +0,0 @@ -# Prerequisites - -
- -FIXME(meson): This section is very wrong with respect to meson and we have commented it out. -We are sorry. -The most current alternative to this section is to read `package.nix` and see which things are being depended on. - -
- - diff --git a/doc/manual/src/installation/single-user.md b/doc/manual/src/installation/single-user.md deleted file mode 100644 index f9a3b26ed..000000000 --- a/doc/manual/src/installation/single-user.md +++ /dev/null @@ -1,9 +0,0 @@ -# Single-User Mode - -In single-user mode, all Nix operations that access the database in -`prefix/var/nix/db` or modify the Nix store in `prefix/store` must be -performed under the user ID that owns those directories. This is -typically root. (If you install from RPM packages, that’s in fact the -default ownership.) However, on single-user machines, it is often -convenient to `chown` those directories to your normal user account so -that you don’t have to `su` to root all the time. diff --git a/doc/manual/src/installation/supported-platforms.md b/doc/manual/src/installation/supported-platforms.md deleted file mode 100644 index 3b07ce48a..000000000 --- a/doc/manual/src/installation/supported-platforms.md +++ /dev/null @@ -1,11 +0,0 @@ -# Supported Platforms - -Lix is currently supported on the following platforms: - - - Linux (i686 (tier 2), x86\_64 (tier 1), aarch64 (tier 1)). - - - macOS (x86\_64 (tier 2 [(issue to make tier 1)](https://git.lix.systems/lix-project/lix/issues/269)), aarch64 (tier 1)). - - -Tier 2 platforms aren't checked in CI, so may break without notice; such breakage *is* however considered a bug. -We would like for them to work but they are a secondary priority. diff --git a/doc/manual/src/installation/uninstall.md b/doc/manual/src/installation/uninstall.md deleted file mode 100644 index 5fb8b56e4..000000000 --- a/doc/manual/src/installation/uninstall.md +++ /dev/null @@ -1,158 +0,0 @@ -# Uninstalling Lix - -
- -FIXME(Lix): This section is outdated and commented out due to the Lix installer being replaced such that it has an actual uninstaller. - -See https://git.lix.systems/lix-project/lix-installer#uninstalling for up-to-date uninstallation instructions using the installer. - -
- - diff --git a/doc/manual/src/installation/upgrading.md b/doc/manual/src/installation/upgrading.md deleted file mode 100644 index 2cdbf9683..000000000 --- a/doc/manual/src/installation/upgrading.md +++ /dev/null @@ -1,23 +0,0 @@ -# Upgrading Lix - -
- -FIXME(Lix): does Lix forward to the installer for `nix upgrade-nix`? Should it, if present? Lix *should* restart the daemon for you [but currently doesn't (issue)](https://git.lix.systems/lix-project/lix/issues/267). - -
- -**For instructions to switch to Lix**, see . - -Lix may be upgraded by running `nix upgrade-nix` and then restarting the Nix daemon. - -## Restarting daemon on Linux - -`sudo systemctl daemon-reload && sudo systemctl restart nix-daemon` - -## Restarting daemon on macOS - -
- -FIXME(Lix): Write instructions that, according to the [beta installation guide](https://wiki.lix.systems/link/1) do not sometimes crash macOS (?!) - -
diff --git a/doc/manual/src/introduction.md b/doc/manual/src/introduction.md deleted file mode 100644 index 9fbc429f8..000000000 --- a/doc/manual/src/introduction.md +++ /dev/null @@ -1,186 +0,0 @@ -# Introduction - -Lix is an implementation of Nix, a powerful, _purely functional_ package management system. -This means that it treats packages like values in purely functional programming languages such as Haskell — they are built by functions that don’t have side-effects, and they never change after they have been built. -Lix stores packages in the _Nix store_, usually the directory `/nix/store`, where each package has its own unique subdirectory such as - - /nix/store/b6gvzjyb2pg0kjfwrjmg1vfhh54ad73z-firefox-33.1/ - -where `b6gvzjyb2pg0…` is a unique identifier for the package that -captures all its dependencies (it’s a cryptographic hash of the -package’s build dependency graph). This enables many powerful -features. - -## Multiple versions - -You can have multiple versions or variants of a package -installed at the same time. This is especially important when -different applications have dependencies on different versions of the -same package — it prevents the “DLL hell”. Because of the hashing -scheme, different versions of a package end up in different paths in -the Nix store, so they don’t interfere with each other. - -An important consequence is that operations like upgrading or -uninstalling an application cannot break other applications, since -these operations never “destructively” update or delete files that are -used by other packages. - -## Complete dependencies - -Lix helps you make sure that package dependency specifications are -complete. In general, when you’re making a package for a package -management system like RPM, you have to specify for each package what -its dependencies are, but there are no guarantees that this -specification is complete. If you forget a dependency, then the -package will build and work correctly on _your_ machine if you have -the dependency installed, but not on the end user's machine if it's -not there. - -Since Lix on the other hand doesn’t install packages in “global” -locations like `/usr/bin` but in package-specific directories, the -risk of incomplete dependencies is greatly reduced. This is because -tools such as compilers don’t search in per-packages directories such -as `/nix/store/5lbfaxb722zp…-openssl-0.9.8d/include`, so if a package -builds correctly on your system, this is because you specified the -dependency explicitly. This takes care of the build-time dependencies. - -Once a package is built, runtime dependencies are found by scanning -binaries for the hash parts of Nix store paths (such as `r8vvq9kq…`). -This sounds risky, but it works extremely well. - -## Multi-user support - -Lix has multi-user support. -This means that non-privileged users can securely install software, and it is considered a bug if users can trample on each other. -Each user can have a different _profile_, a set of packages in the Nix store that appear in the user’s `PATH`. -If a user installs a package that another user has already installed previously, the package won’t be built or downloaded a second time. -At the same time, it is not possible for one user to inject a Trojan horse into a package that might be used by another user. - -## Atomic upgrades and rollbacks - -Since package management operations never overwrite packages in the -Nix store but just add new versions in different paths, they are -_atomic_. So during a package upgrade, there is no time window in -which the package has some files from the old version and some files -from the new version — which would be bad because a program might well -crash if it’s started during that period. - -And since packages aren’t overwritten, the old versions are still -there after an upgrade. This means that you can _roll back_ to the -old version: - -```console -$ nix-env --upgrade --attr nixpkgs.some-package -$ nix-env --rollback -``` - -## Garbage collection - -When you uninstall a package like this… - -```console -$ nix-env --uninstall firefox -``` - -the package isn’t deleted from the system right away (after all, you -might want to do a rollback, or it might be in the profiles of other -users). Instead, unused packages can be deleted safely by running the -_garbage collector_: - -```console -$ nix-collect-garbage -``` - -This deletes all packages that aren’t in use by any user profile or by -a currently running program. - -## Functional package language - -Packages are built from _Nix expressions_, which is a simple -functional language. A Nix expression describes everything that goes -into a package build task (a “derivation”): other packages, sources, -the build script, environment variables for the build script, etc. -Lix tries very hard to ensure that Nix expressions are -_deterministic_: building a Nix expression twice should yield the same -result. - -Because it’s a functional language, it’s easy to support -building variants of a package: turn the Nix expression into a -function and call it any number of times with the appropriate -arguments. Due to the hashing scheme, variants don’t conflict with -each other in the Nix store. - -## Transparent source/binary deployment - -Nix expressions generally describe how to build a package from -source, so an installation action like - -```console -$ nix-env --install --attr nixpkgs.firefox -``` - -_could_ cause quite a bit of build activity, as not only Firefox but -also all its dependencies (all the way up to the C library and the -compiler) would have to be built, at least if they are not already in the -Nix store. This is a _source deployment model_. For most users, -building from source is not very pleasant as it takes far too long. -However, Lix can automatically skip building from source and instead -use a _binary cache_, a web server that provides pre-built -binaries. For instance, when asked to build -`/nix/store/b6gvzjyb2pg0…-firefox-33.1` from source, Lix would first -check if the file `https://cache.nixos.org/b6gvzjyb2pg0….narinfo` -exists, and if so, fetch the pre-built binary referenced from there; -otherwise, it would fall back to building from source. - -## Nix Packages collection - -We provide a large set of Nix expressions containing tens of thousands of existing Unix packages, the _Nix Packages collection_ (Nixpkgs). - -## Managing build environments - -Lix is extremely useful for developers as it makes it easy to -automatically set up the build environment for a package. Given a Nix -expression that describes the dependencies of your package, the -command `nix-shell` will build or download those dependencies if -they’re not already in your Nix store, and then start a Bash shell in -which all necessary environment variables (such as compiler search -paths) are set. - -For example, the following command gets all dependencies of the -Pan newsreader, as described by [its -Nix expression](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/newsreaders/pan/default.nix): - -```console -$ nix-shell '' --attr pan -``` - -You’re then dropped into a shell where you can edit, build and test -the package: - -```console -[nix-shell]$ unpackPhase -[nix-shell]$ cd pan-* -[nix-shell]$ configurePhase -[nix-shell]$ buildPhase -[nix-shell]$ ./pan/gui/pan -``` - -## Portability - -Lix runs on Linux and macOS. - -## NixOS - -NixOS is a Linux distribution based on Nix technology. It uses Nix not just for -package management but also to manage the system configuration (e.g., -to build configuration files in `/etc`). This means, among other -things, that it is easy to roll back the entire configuration of the -system to an earlier state. Also, users can install software without -root privileges. For more information and downloads, see the [NixOS -homepage](https://nixos.org/). - -## License - -Lix is released under the terms of the [GNU LGPLv2.1 or (at your -option) any later -version](http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html). diff --git a/doc/manual/src/language/advanced-attributes.md b/doc/manual/src/language/advanced-attributes.md deleted file mode 100644 index ec21b9990..000000000 --- a/doc/manual/src/language/advanced-attributes.md +++ /dev/null @@ -1,343 +0,0 @@ -# Advanced Attributes - -Derivations can declare some infrequently used optional attributes. - - - [`allowedReferences`]{#adv-attr-allowedReferences}\ - The optional attribute `allowedReferences` specifies a list of legal - references (dependencies) of the output of the builder. For example, - - ```nix - allowedReferences = []; - ``` - - enforces that the output of a derivation cannot have any runtime - dependencies on its inputs. To allow an output to have a runtime - dependency on itself, use `"out"` as a list item. This is used in - NixOS to check that generated files such as initial ramdisks for - booting Linux don’t have accidental dependencies on other paths in - the Nix store. - - - [`allowedRequisites`]{#adv-attr-allowedRequisites}\ - This attribute is similar to `allowedReferences`, but it specifies - the legal requisites of the whole closure, so all the dependencies - recursively. For example, - - ```nix - allowedRequisites = [ foobar ]; - ``` - - enforces that the output of a derivation cannot have any other - runtime dependency than `foobar`, and in addition it enforces that - `foobar` itself doesn't introduce any other dependency itself. - - - [`disallowedReferences`]{#adv-attr-disallowedReferences}\ - The optional attribute `disallowedReferences` specifies a list of - illegal references (dependencies) of the output of the builder. For - example, - - ```nix - disallowedReferences = [ foo ]; - ``` - - enforces that the output of a derivation cannot have a direct - runtime dependencies on the derivation `foo`. - - - [`disallowedRequisites`]{#adv-attr-disallowedRequisites}\ - This attribute is similar to `disallowedReferences`, but it - specifies illegal requisites for the whole closure, so all the - dependencies recursively. For example, - - ```nix - disallowedRequisites = [ foobar ]; - ``` - - enforces that the output of a derivation cannot have any runtime - dependency on `foobar` or any other derivation depending recursively - on `foobar`. - - - [`exportReferencesGraph`]{#adv-attr-exportReferencesGraph}\ - This attribute allows builders access to the references graph of - their inputs. The attribute is a list of inputs in the Nix store - whose references graph the builder needs to know. The value of - this attribute should be a list of pairs `[ name1 path1 name2 - path2 ... ]`. The references graph of each *pathN* will be stored - in a text file *nameN* in the temporary build directory. The text - files have the format used by `nix-store --register-validity` - (with the deriver fields left empty). For example, when the - following derivation is built: - - ```nix - derivation { - ... - exportReferencesGraph = [ "libfoo-graph" libfoo ]; - }; - ``` - - the references graph of `libfoo` is placed in the file - `libfoo-graph` in the temporary build directory. - - `exportReferencesGraph` is useful for builders that want to do - something with the closure of a store path. Examples include the - builders in NixOS that generate the initial ramdisk for booting - Linux (a `cpio` archive containing the closure of the boot script) - and the ISO-9660 image for the installation CD (which is populated - with a Nix store containing the closure of a bootable NixOS - configuration). - - - [`impureEnvVars`]{#adv-attr-impureEnvVars}\ - This attribute allows you to specify a list of environment variables - that should be passed from the environment of the calling user to - the builder. Usually, the environment is cleared completely when the - builder is executed, but with this attribute you can allow specific - environment variables to be passed unmodified. For example, - `fetchurl` in Nixpkgs has the line - - ```nix - impureEnvVars = [ "http_proxy" "https_proxy" ... ]; - ``` - - to make it use the proxy server configuration specified by the user - in the environment variables `http_proxy` and friends. - - This attribute is only allowed in *fixed-output derivations* (see - below), where impurities such as these are okay since (the hash - of) the output is known in advance. It is ignored for all other - derivations. - - > **Warning** - > - > `impureEnvVars` implementation takes environment variables from - > the current builder process. When a daemon is building its - > environmental variables are used. Without the daemon, the - > environmental variables come from the environment of the - > `nix-build`. - - - [`outputHash`]{#adv-attr-outputHash}; [`outputHashAlgo`]{#adv-attr-outputHashAlgo}; [`outputHashMode`]{#adv-attr-outputHashMode}\ - These attributes declare that the derivation is a so-called - *fixed-output derivation*, which means that a cryptographic hash of - the output is already known in advance. When the build of a - fixed-output derivation finishes, Lix computes the cryptographic - hash of the output and compares it to the hash declared with these - attributes. If there is a mismatch, the build fails. - - The rationale for fixed-output derivations is derivations such as - those produced by the `fetchurl` function. This function downloads a - file from a given URL. To ensure that the downloaded file has not - been modified, the caller must also specify a cryptographic hash of - the file. For example, - - ```nix - fetchurl { - url = "http://ftp.gnu.org/pub/gnu/hello/hello-2.1.1.tar.gz"; - sha256 = "1md7jsfd8pa45z73bz1kszpp01yw6x5ljkjk2hx7wl800any6465"; - } - ``` - - It sometimes happens that the URL of the file changes, e.g., because - servers are reorganised or no longer available. We then must update - the call to `fetchurl`, e.g., - - ```nix - fetchurl { - url = "ftp://ftp.nluug.nl/pub/gnu/hello/hello-2.1.1.tar.gz"; - sha256 = "1md7jsfd8pa45z73bz1kszpp01yw6x5ljkjk2hx7wl800any6465"; - } - ``` - - If a `fetchurl` derivation was treated like a normal derivation, the - output paths of the derivation and *all derivations depending on it* - would change. For instance, if we were to change the URL of the - Glibc source distribution in Nixpkgs (a package on which almost all - other packages depend) massive rebuilds would be needed. This is - unfortunate for a change which we know cannot have a real effect as - it propagates upwards through the dependency graph. - - For fixed-output derivations, on the other hand, the name of the - output path only depends on the `outputHash*` and `name` attributes, - while all other attributes are ignored for the purpose of computing - the output path. (The `name` attribute is included because it is - part of the path.) - - As an example, here is the (simplified) Nix expression for - `fetchurl`: - - ```nix - { stdenv, curl }: # The curl program is used for downloading. - - { url, sha256 }: - - stdenv.mkDerivation { - name = baseNameOf (toString url); - builder = ./builder.sh; - buildInputs = [ curl ]; - - # This is a fixed-output derivation; the output must be a regular - # file with SHA256 hash sha256. - outputHashMode = "flat"; - outputHashAlgo = "sha256"; - outputHash = sha256; - - inherit url; - } - ``` - - The `outputHashAlgo` attribute specifies the hash algorithm used to - compute the hash. It can currently be `"sha1"`, `"sha256"` or - `"sha512"`. - - The `outputHashMode` attribute determines how the hash is computed. - It must be one of the following two values: - - - `"flat"`\ - The output must be a non-executable regular file. If it isn’t, - the build fails. The hash is simply computed over the contents - of that file (so it’s equal to what Unix commands like - `sha256sum` or `sha1sum` produce). - - This is the default. - - - `"recursive"`\ - The hash is computed over the NAR archive dump of the output - (i.e., the result of [`nix-store --dump`](@docroot@/command-ref/nix-store/dump.md)). In - this case, the output can be anything, including a directory - tree. - - The `outputHash` attribute, finally, must be a string containing - the hash in either hexadecimal or base-32 notation. (See the - [`nix-hash` command](../command-ref/nix-hash.md) for information - about converting to and from base-32 notation.) - - - [`__contentAddressed`]{#adv-attr-__contentAddressed} - > **Warning** - > This attribute is part of an [experimental feature](@docroot@/contributing/experimental-features.md). - > - > To use this attribute, you must enable the - > [`ca-derivations`](@docroot@/contributing/experimental-features.md#xp-feature-ca-derivations) experimental feature. - > For example, in [nix.conf](../command-ref/conf-file.md) you could add: - > - > ``` - > extra-experimental-features = ca-derivations - > ``` - - If this attribute is set to `true`, then the derivation - outputs will be stored in a content-addressed location rather than the - traditional input-addressed one. - - Setting this attribute also requires setting - [`outputHashMode`](#adv-attr-outputHashMode) - and - [`outputHashAlgo`](#adv-attr-outputHashAlgo) - like for *fixed-output derivations* (see above). - - - [`passAsFile`]{#adv-attr-passAsFile}\ - A list of names of attributes that should be passed via files rather - than environment variables. For example, if you have - - ```nix - passAsFile = ["big"]; - big = "a very long string"; - ``` - - then when the builder runs, the environment variable `bigPath` - will contain the absolute path to a temporary file containing `a - very long string`. That is, for any attribute *x* listed in - `passAsFile`, Lix will pass an environment variable `xPath` - holding the path of the file containing the value of attribute - *x*. This is useful when you need to pass large strings to a - builder, since most operating systems impose a limit on the size - of the environment (typically, a few hundred kilobyte). - - - [`preferLocalBuild`]{#adv-attr-preferLocalBuild}\ - If this attribute is set to `true` and [distributed building is - enabled](../advanced-topics/distributed-builds.md), then, if - possible, the derivation will be built locally instead of forwarded - to a remote machine. This is appropriate for trivial builders - where the cost of doing a download or remote build would exceed - the cost of building locally. - - - [`allowSubstitutes`]{#adv-attr-allowSubstitutes}\ - If this attribute is set to `false`, then Lix will always build this - derivation; it will not try to substitute its outputs. This is - useful for very trivial derivations (such as `writeText` in Nixpkgs) - that are cheaper to build than to substitute from a binary cache. - - You may disable the effects of this attibute by enabling the - `always-allow-substitutes` configuration option in Lix. - - > **Note** - > - > You need to have a builder configured which satisfies the - > derivation’s `system` attribute, since the derivation cannot be - > substituted. Thus it is usually a good idea to align `system` with - > `builtins.currentSystem` when setting `allowSubstitutes` to - > `false`. For most trivial derivations this should be the case. - - - [`__structuredAttrs`]{#adv-attr-structuredAttrs}\ - If the special attribute `__structuredAttrs` is set to `true`, the other derivation - attributes are serialised into a file in JSON format. The environment variable - `NIX_ATTRS_JSON_FILE` points to the exact location of that file both in a build - and a [`nix-shell`](../command-ref/nix-shell.md). This obviates the need for - [`passAsFile`](#adv-attr-passAsFile) since JSON files have no size restrictions, - unlike process environments. - - It also makes it possible to tweak derivation settings in a structured way; see - [`outputChecks`](#adv-attr-outputChecks) for example. - - As a convenience to Bash builders, - Lix writes a script that initialises shell variables - corresponding to all attributes that are representable in Bash. The - environment variable `NIX_ATTRS_SH_FILE` points to the exact - location of the script, both in a build and a - [`nix-shell`](../command-ref/nix-shell.md). This includes non-nested - (associative) arrays. For example, the attribute `hardening.format = true` - ends up as the Bash associative array element `${hardening[format]}`. - - - [`outputChecks`]{#adv-attr-outputChecks}\ - When using [structured attributes](#adv-attr-structuredAttrs), the `outputChecks` - attribute allows defining checks per-output. - - In addition to - [`allowedReferences`](#adv-attr-allowedReferences), [`allowedRequisites`](#adv-attr-allowedRequisites), - [`disallowedReferences`](#adv-attr-disallowedReferences) and [`disallowedRequisites`](#adv-attr-disallowedRequisites), - the following attributes are available: - - - `maxSize` defines the maximum size of the resulting [store object](../glossary.md#gloss-store-object). - - `maxClosureSize` defines the maximum size of the output's closure. - - `ignoreSelfRefs` controls whether self-references should be considered when - checking for allowed references/requisites. - - Example: - - ```nix - __structuredAttrs = true; - - outputChecks.out = { - # The closure of 'out' must not be larger than 256 MiB. - maxClosureSize = 256 * 1024 * 1024; - - # It must not refer to the C compiler or to the 'dev' output. - disallowedRequisites = [ stdenv.cc "dev" ]; - }; - - outputChecks.dev = { - # The 'dev' output must not be larger than 128 KiB. - maxSize = 128 * 1024; - }; - ``` - - - [`unsafeDiscardReferences`]{#adv-attr-unsafeDiscardReferences}\ - - When using [structured attributes](#adv-attr-structuredAttrs), the - attribute `unsafeDiscardReferences` is an attribute set with a boolean value for each output name. - If set to `true`, it disables scanning the output for runtime dependencies. - - Example: - - ```nix - __structuredAttrs = true; - unsafeDiscardReferences.out = true; - ``` - - This is useful, for example, when generating self-contained filesystem images with - their own embedded Nix store: hashes found inside such an image refer - to the embedded store and not to the host's Nix store. diff --git a/doc/manual/src/language/builtin-constants.md b/doc/manual/src/language/builtin-constants.md deleted file mode 100644 index 970bf6c5a..000000000 --- a/doc/manual/src/language/builtin-constants.md +++ /dev/null @@ -1,20 +0,0 @@ -# Built-in Constants - -These constants are built into the Nix language evaluator: - -
- -{{#include @generated@/language/builtin-constants.md}} - -
- -## Things which might be mistaken for constants - -
-
__curPos
-
- -This is not a constant but a [context-dependent keyword](@docroot@/language/constructs.md#keywords-__curPos) - -
-
diff --git a/doc/manual/src/language/builtins.md b/doc/manual/src/language/builtins.md deleted file mode 100644 index 2a3972f05..000000000 --- a/doc/manual/src/language/builtins.md +++ /dev/null @@ -1,20 +0,0 @@ -# Built-in Functions - -This section lists the functions built into the Nix language evaluator. -All built-in functions are available through the global [`builtins`](./builtin-constants.md#builtins-builtins) constant. - -For convenience, some built-ins can be accessed directly: - -- [`derivation`](#builtins-derivation) -- [`import`](#builtins-import) -- [`abort`](#builtins-abort) -- [`throw`](#builtins-throw) - -
-
derivation attrs
-

derivation is described in - its own section.

- -{{#include @generated@/language/builtins.md}} - -
diff --git a/doc/manual/src/language/constructs.md b/doc/manual/src/language/constructs.md deleted file mode 100644 index 67fd0126d..000000000 --- a/doc/manual/src/language/constructs.md +++ /dev/null @@ -1,449 +0,0 @@ -# Language Constructs - -## Recursive sets - -Recursive sets are like normal [attribute sets](./values.md#attribute-set), but the attributes can refer to each other. - -> *rec-attrset* = `rec {` [ *name* `=` *expr* `;` `]`... `}` - -Example: - -```nix -rec { - x = y; - y = 123; -}.x -``` - -This evaluates to `123`. - -Note that without `rec` the binding `x = y;` would -refer to the variable `y` in the surrounding scope, if one exists, and -would be invalid if no such variable exists. That is, in a normal -(non-recursive) set, attributes are not added to the lexical scope; in a -recursive set, they are. - -Recursive sets of course introduce the danger of infinite recursion. For -example, the expression - -```nix -rec { - x = y; - y = x; -}.x -``` - -will crash with an `infinite recursion encountered` error message. - -## Let-expressions - -A let-expression allows you to define local variables for an expression. - -> *let-in* = `let` [ *identifier* = *expr* ]... `in` *expr* - -Example: - -```nix -let - x = "foo"; - y = "bar"; -in x + y -``` - -This evaluates to `"foobar"`. - -## Inheriting attributes - -When defining an [attribute set](./values.md#attribute-set) or in a [let-expression](#let-expressions) it is often convenient to copy variables from the surrounding lexical scope (e.g., when you want to propagate attributes). -This can be shortened using the `inherit` keyword. - -Example: - -```nix -let x = 123; in -{ - inherit x; - y = 456; -} -``` - -is equivalent to - -```nix -let x = 123; in -{ - x = x; - y = 456; -} -``` - -and both evaluate to `{ x = 123; y = 456; }`. - -> **Note** -> -> This works because `x` is added to the lexical scope by the `let` construct. - -It is also possible to inherit attributes from another attribute set. - -Example: - -In this fragment from `all-packages.nix`, - -```nix -graphviz = (import ../tools/graphics/graphviz) { - inherit fetchurl stdenv libpng libjpeg expat x11 yacc; - inherit (xorg) libXaw; -}; - -xorg = { - libX11 = ...; - libXaw = ...; - ... -} - -libpng = ...; -libjpg = ...; -... -``` - -the set used in the function call to the function defined in -`../tools/graphics/graphviz` inherits a number of variables from the -surrounding scope (`fetchurl` ... `yacc`), but also inherits `libXaw` -(the X Athena Widgets) from the `xorg` set. - -Summarizing the fragment - -```nix -... -inherit x y z; -inherit (src-set) a b c; -... -``` - -is equivalent to - -```nix -... -x = x; y = y; z = z; -a = src-set.a; b = src-set.b; c = src-set.c; -... -``` - -when used while defining local variables in a let-expression or while -defining a set. - -## Functions - -Functions have the following form: - -```nix -pattern: body -``` - -The pattern specifies what the argument of the function must look like, -and binds variables in the body to (parts of) the argument. There are -three kinds of patterns: - - - If a pattern is a single identifier, then the function matches any - argument. Example: - - ```nix - let negate = x: !x; - concat = x: y: x + y; - in if negate true then concat "foo" "bar" else "" - ``` - - Note that `concat` is a function that takes one argument and returns - a function that takes another argument. This allows partial - parameterisation (i.e., only filling some of the arguments of a - function); e.g., - - ```nix - map (concat "foo") [ "bar" "bla" "abc" ] - ``` - - evaluates to `[ "foobar" "foobla" "fooabc" ]`. - - - A *set pattern* of the form `{ name1, name2, …, nameN }` matches a - set containing the listed attributes, and binds the values of those - attributes to variables in the function body. For example, the - function - - ```nix - { x, y, z }: z + y + x - ``` - - can only be called with a set containing exactly the attributes `x`, - `y` and `z`. No other attributes are allowed. If you want to allow - additional arguments, you can use an ellipsis (`...`): - - ```nix - { x, y, z, ... }: z + y + x - ``` - - This works on any set that contains at least the three named - attributes. - - It is possible to provide *default values* for attributes, in - which case they are allowed to be missing. A default value is - specified by writing `name ? e`, where *e* is an arbitrary - expression. For example, - - ```nix - { x, y ? "foo", z ? "bar" }: z + y + x - ``` - - specifies a function that only requires an attribute named `x`, but - optionally accepts `y` and `z`. - - - An `@`-pattern provides a means of referring to the whole value - being matched: - - ```nix - args@{ x, y, z, ... }: z + y + x + args.a - ``` - - but can also be written as: - - ```nix - { x, y, z, ... } @ args: z + y + x + args.a - ``` - - Here `args` is bound to the argument *as passed*, which is further - matched against the pattern `{ x, y, z, ... }`. - The `@`-pattern makes mainly sense with an ellipsis(`...`) as - you can access attribute names as `a`, using `args.a`, which was - given as an additional attribute to the function. - - > **Warning** - > - > `args@` binds the name `args` to the attribute set that is passed to the function. - > In particular, `args` does *not* include any default values specified with `?` in the function's set pattern. - > - > For instance - > - > ```nix - > let - > f = args@{ a ? 23, ... }: [ a args ]; - > in - > f {} - > ``` - > - > is equivalent to - > - > ```nix - > let - > f = args @ { ... }: [ (args.a or 23) args ]; - > in - > f {} - > ``` - > - > and both expressions will evaluate to: - > - > ```nix - > [ 23 {} ] - > ``` - -Note that functions do not have names. If you want to give them a name, -you can bind them to an attribute, e.g., - -```nix -let concat = { x, y }: x + y; -in concat { x = "foo"; y = "bar"; } -``` - -## Conditionals - -Conditionals look like this: - -```nix -if e1 then e2 else e3 -``` - -where *e1* is an expression that should evaluate to a Boolean value -(`true` or `false`). - -## Assertions - -Assertions are generally used to check that certain requirements on or -between features and dependencies hold. They look like this: - -```nix -assert e1; e2 -``` - -where *e1* is an expression that should evaluate to a Boolean value. If -it evaluates to `true`, *e2* is returned; otherwise expression -evaluation is aborted and a backtrace is printed. - -Here is a Nix expression for the Subversion package that shows how -assertions can be used:. - -```nix -{ localServer ? false -, httpServer ? false -, sslSupport ? false -, pythonBindings ? false -, javaSwigBindings ? false -, javahlBindings ? false -, stdenv, fetchurl -, openssl ? null, httpd ? null, db4 ? null, expat, swig ? null, j2sdk ? null -}: - -assert localServer -> db4 != null; ① -assert httpServer -> httpd != null && httpd.expat == expat; ② -assert sslSupport -> openssl != null && (httpServer -> httpd.openssl == openssl); ③ -assert pythonBindings -> swig != null && swig.pythonSupport; -assert javaSwigBindings -> swig != null && swig.javaSupport; -assert javahlBindings -> j2sdk != null; - -stdenv.mkDerivation { - name = "subversion-1.1.1"; - ... - openssl = if sslSupport then openssl else null; ④ - ... -} -``` - -The points of interest are: - -1. This assertion states that if Subversion is to have support for - local repositories, then Berkeley DB is needed. So if the Subversion - function is called with the `localServer` argument set to `true` but - the `db4` argument set to `null`, then the evaluation fails. - - Note that `->` is the [logical - implication](https://en.wikipedia.org/wiki/Truth_table#Logical_implication) - Boolean operation. - -2. This is a more subtle condition: if Subversion is built with Apache - (`httpServer`) support, then the Expat library (an XML library) used - by Subversion should be same as the one used by Apache. This is - because in this configuration Subversion code ends up being linked - with Apache code, and if the Expat libraries do not match, a build- - or runtime link error or incompatibility might occur. - -3. This assertion says that in order for Subversion to have SSL support - (so that it can access `https` URLs), an OpenSSL library must be - passed. Additionally, it says that *if* Apache support is enabled, - then Apache's OpenSSL should match Subversion's. (Note that if - Apache support is not enabled, we don't care about Apache's - OpenSSL.) - -4. The conditional here is not really related to assertions, but is - worth pointing out: it ensures that if SSL support is disabled, then - the Subversion derivation is not dependent on OpenSSL, even if a - non-`null` value was passed. This prevents an unnecessary rebuild of - Subversion if OpenSSL changes. - -## With-expressions - -A *with-expression*, - -```nix -with e1; e2 -``` - -introduces the set *e1* into the lexical scope of the expression *e2*. -For instance, - -```nix -let as = { x = "foo"; y = "bar"; }; -in with as; x + y -``` - -evaluates to `"foobar"` since the `with` adds the `x` and `y` attributes -of `as` to the lexical scope in the expression `x + y`. The most common -use of `with` is in conjunction with the `import` function. E.g., - -```nix -with (import ./definitions.nix); ... -``` - -makes all attributes defined in the file `definitions.nix` available as -if they were defined locally in a `let`-expression. - -The bindings introduced by `with` do not shadow bindings introduced by -other means, e.g. - -```nix -let a = 3; in with { a = 1; }; let a = 4; in with { a = 2; }; ... -``` - -establishes the same scope as - -```nix -let a = 1; in let a = 2; in let a = 3; in let a = 4; in ... -``` - -## Comments - -Comments can be single-line, started with a `#` character, or -inline/multi-line, enclosed within `/* ... */`. - -## Context-dependent keywords - -
-
- __curPos -
-
- -A quasi-constant which will be replaced with an attribute set describing -the location where `__curPos` was used, with attributes `file`, `line`, -and `column`. For example, `import ./file.nix` will result in - -```nix -{ - column = 1; - file = "/path/to/some/file.nix"; - line = 1; -} -``` - -assuming `file.nix` contains nothing but `__curPos`. - -In context without a source file (such as `nix-repl`), it will always -be replaced with `null`: - -```nix-repl -nix-repl> __curPos -null -``` - -While it may vaguely look like a builtin, this is a very different beast -that is handled directly by the parser. It thus cannot be shadowed, -bound to a different name, and is also not available under -[`builtins`](@docroot@/language/builtin-constants.md#builtins-builtins). - -```nix-repl -nix-repl> let __curPos = "no"; in __curPos -null -``` - -Despite this `__curPos`, much like `or`, may still be used as an identifier, -it is only treated specially when it appears as an unqualified name: - -```nix-repl -nix-repl> { __curPos = 1; }.__curPos -1 -``` - -
- -
- or -
-
- -`or` is used in [Attribute selection](@docroot@/language/operators.html#attribute-selection), -where it is a keyword. - -However, it is not a keyword in some other contexts, and can be used as -a binding name in attribute sets, let-bindings, non-initial function -application position, and as a label in attribute paths. - -Its use as anything other than a keyword is discouraged. - -
-
diff --git a/doc/manual/src/language/derivations.md b/doc/manual/src/language/derivations.md deleted file mode 100644 index 28e686889..000000000 --- a/doc/manual/src/language/derivations.md +++ /dev/null @@ -1,166 +0,0 @@ -# Derivations - -The most important built-in function is `derivation`, which is used to -describe a single derivation (a build task). It takes as input a set, -the attributes of which specify the inputs of the build. - - - There must be an attribute named [`system`]{#attr-system} whose value must be a - string specifying a Nix system type, such as `"i686-linux"` or - `"x86_64-darwin"`. (To figure out your system type, run `nix -vv - --version`.) The build can only be performed on a machine and - operating system matching the system type. (Nix can automatically - [forward builds for other - platforms](../advanced-topics/distributed-builds.md) by forwarding - them to other machines.) - - - There must be an attribute named `name` whose value must be a - string. This is used as a symbolic name for the package by - `nix-env`, and it is appended to the output paths of the derivation. - - - There must be an attribute named [`builder`]{#attr-builder} that identifies the - program that is executed to perform the build. It can be either a - derivation or a source (a local file reference, e.g., - `./builder.sh`). - - - Every attribute is passed as an environment variable to the builder. - Attribute values are translated to environment variables as follows: - - - Strings and numbers are just passed verbatim. - - - A *path* (e.g., `../foo/sources.tar`) causes the referenced file - to be copied to the store; its location in the store is put in - the environment variable. The idea is that all sources should - reside in the Nix store, since all inputs to a derivation should - reside in the Nix store. - - - A *derivation* causes that derivation to be built prior to the - present derivation; its default output path is put in the - environment variable. - - - Lists of the previous types are also allowed. They are simply - concatenated, separated by spaces. - - - `true` is passed as the string `1`, `false` and `null` are - passed as an empty string. - - - The optional attribute `args` specifies command-line arguments to be - passed to the builder. It should be a list. - - - The optional attribute `outputs` specifies a list of symbolic - outputs of the derivation. By default, a derivation produces a - single output path, denoted as `out`. However, derivations can - produce multiple output paths. This is useful because it allows - outputs to be downloaded or garbage-collected separately. For - instance, imagine a library package that provides a dynamic library, - header files, and documentation. A program that links against the - library doesn’t need the header files and documentation at runtime, - and it doesn’t need the documentation at build time. Thus, the - library package could specify: - - ```nix - outputs = [ "lib" "headers" "doc" ]; - ``` - - This will cause Lix to pass environment variables `lib`, `headers` - and `doc` to the builder containing the intended store paths of each - output. The builder would typically do something like - - ```bash - ./configure \ - --libdir=$lib/lib \ - --includedir=$headers/include \ - --docdir=$doc/share/doc - ``` - - for an Autoconf-style package. You can refer to each output of a - derivation by selecting it as an attribute, e.g. - - ```nix - buildInputs = [ pkg.lib pkg.headers ]; - ``` - - The first element of `outputs` determines the *default output*. - Thus, you could also write - - ```nix - buildInputs = [ pkg pkg.headers ]; - ``` - - since `pkg` is equivalent to `pkg.lib`. - -The function `mkDerivation` in the Nixpkgs standard environment is a -wrapper around `derivation` that adds a default value for `system` and -always uses Bash as the builder, to which the supplied builder is passed -as a command-line argument. See the Nixpkgs manual for details. - -The builder is executed as follows: - - - A temporary directory is created under the directory specified by - `TMPDIR` (default `/tmp`) where the build will take place. The - current directory is changed to this directory. - - - The environment is cleared and set to the derivation attributes, as - specified above. - - - In addition, the following variables are set: - - - `NIX_BUILD_TOP` contains the path of the temporary directory for - this build. - - - Also, `TMPDIR`, `TEMPDIR`, `TMP`, `TEMP` are set to point to the - temporary directory. This is to prevent the builder from - accidentally writing temporary files anywhere else. Doing so - might cause interference by other processes. - - - `PATH` is set to `/path-not-set` to prevent shells from - initialising it to their built-in default value. - - - `HOME` is set to `/homeless-shelter` to prevent programs from - using `/etc/passwd` or the like to find the user's home - directory, which could cause impurity. Usually, when `HOME` is - set, it is used as the location of the home directory, even if - it points to a non-existent path. - - - `NIX_STORE` is set to the path of the top-level Nix store - directory (typically, `/nix/store`). - - - `NIX_ATTRS_JSON_FILE` & `NIX_ATTRS_SH_FILE` if `__structuredAttrs` - is set to `true` for the derivation. A detailed explanation of this - behavior can be found in the - [section about structured attrs](./advanced-attributes.md#adv-attr-structuredAttrs). - - - For each output declared in `outputs`, the corresponding - environment variable is set to point to the intended path in the - Nix store for that output. Each output path is a concatenation - of the cryptographic hash of all build inputs, the `name` - attribute and the output name. (The output name is omitted if - it’s `out`.) - - - If an output path already exists, it is removed. Also, locks are - acquired to prevent multiple Lix instances from performing the same - build at the same time. - - - A log of the combined standard output and error is written to - `/nix/var/log/nix`. - - - The builder is executed with the arguments specified by the - attribute `args`. If it exits with exit code 0, it is considered to - have succeeded. - - - The temporary directory is removed (unless the `-K` option was - specified). - - - If the build was successful, Lix scans each output path for - references to input paths by looking for the hash parts of the input - paths. Since these are potential runtime dependencies, Lix registers - them as dependencies of the output paths. - - - After the build, Lix sets the last-modified timestamp on all files - in the build result to 1 (00:00:01 1/1/1970 UTC), sets the group to - the default group, and sets the mode of the file to 0444 or 0555 - (i.e., read-only, with execute permission enabled if the file was - originally executable). Note that possible `setuid` and `setgid` - bits are cleared. Setuid and setgid programs are not currently - supported by Lix. This is because the Lix archives used in - deployment have no concept of ownership information, and because it - makes the build result dependent on the user performing the build. diff --git a/doc/manual/src/language/index.md b/doc/manual/src/language/index.md deleted file mode 100644 index 29950a52d..000000000 --- a/doc/manual/src/language/index.md +++ /dev/null @@ -1,580 +0,0 @@ -# Nix Language - -The Nix language is designed for conveniently creating and composing *derivations* – precise descriptions of how contents of existing files are used to derive new files. -It is: - -- *domain-specific* - - It comes with [built-in functions](@docroot@/language/builtins.md) to integrate with the Nix store, which manages files and performs the derivations declared in the Nix language. - -- *declarative* - - There is no notion of executing sequential steps. - Dependencies between operations are established only through data. - -- *pure* - - Values cannot change during computation. - Functions always produce the same output if their input does not change. - -- *functional* - - Functions are like any other value. - Functions can be assigned to names, taken as arguments, or returned by functions. - -- *lazy* - - Values are only computed when they are needed. - -- *dynamically typed* - - Type errors are only detected when expressions are evaluated. - -# Overview - -This is an incomplete overview of language features, by example. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Example - - Description -
- - - *Basic values* - - - - - - -
- - `"hello world"` - - - - A string - -
- - ``` - '' - multi - line - string - '' - ``` - - - - A multi-line string. Strips common prefixed whitespace. Evaluates to `"multi\n line\n string"`. - -
- - `"hello ${ { a = "world"; }.a }"` - - `"1 2 ${toString 3}"` - - `"${pkgs.bash}/bin/sh"` - - - - String interpolation (expands to `"hello world"`, `"1 2 3"`, `"/nix/store/-bash-/bin/sh"`) - -
- - `true`, `false` - - - - Booleans - -
- - `null` - - - - Null value - -
- - `123` - - - - An integer - -
- - `3.141` - - - - A floating point number - -
- - `/etc` - - - - An absolute path - -
- - `./foo.png` - - - - A path relative to the file containing this Nix expression - -
- - `~/.config` - - - - A home path. Evaluates to the `"/.config"`. - -
- - `` - - - - Search path for Nix files. Value determined by [`$NIX_PATH` environment variable](../command-ref/env-common.md#env-NIX_PATH). - -
- - *Compound values* - - - - - -
- - `{ x = 1; y = 2; }` - - - - A set with attributes named `x` and `y` - -
- - `{ foo.bar = 1; }` - - - - A nested set, equivalent to `{ foo = { bar = 1; }; }` - -
- - `rec { x = "foo"; y = x + "bar"; }` - - - - A recursive set, equivalent to `{ x = "foo"; y = "foobar"; }` - -
- - `[ "foo" "bar" "baz" ]` - - `[ 1 2 3 ]` - - `[ (f 1) { a = 1; b = 2; } [ "c" ] ]` - - - - Lists with three elements. - -
- - *Operators* - - - - - -
- - `"foo" + "bar"` - - - - String concatenation - -
- - `1 + 2` - - - - Integer addition - -
- - `"foo" == "f" + "oo"` - - - - Equality test (evaluates to `true`) - -
- - `"foo" != "bar"` - - - - Inequality test (evaluates to `true`) - -
- - `!true` - - - - Boolean negation - -
- - `{ x = 1; y = 2; }.x` - - - - Attribute selection (evaluates to `1`) - -
- - `{ x = 1; y = 2; }.z or 3` - - - - Attribute selection with default (evaluates to `3`) - -
- - `{ x = 1; y = 2; } // { z = 3; }` - - - - Merge two sets (attributes in the right-hand set taking precedence) - -
- - *Control structures* - - - - - -
- - `if 1 + 1 == 2 then "yes!" else "no!"` - - - - Conditional expression - -
- - `assert 1 + 1 == 2; "yes!"` - - - - Assertion check (evaluates to `"yes!"`). - -
- - `let x = "foo"; y = "bar"; in x + y` - - - - Variable definition - -
- - `with builtins; head [ 1 2 3 ]` - - - - Add all attributes from the given set to the scope (evaluates to `1`) - -
- - *Functions (lambdas)* - - - - - -
- - `x: x + 1` - - - - A function that expects an integer and returns it increased by 1 - -
- - `x: y: x + y` - - - - Curried function, equivalent to `x: (y: x + y)`. Can be used like a function that takes two arguments and returns their sum. - -
- - `(x: x + 1) 100` - - - - A function call (evaluates to 101) - -
- - `let inc = x: x + 1; in inc (inc (inc 100))` - - - - A function bound to a variable and subsequently called by name (evaluates to 103) - -
- - `{ x, y }: x + y` - - - - A function that expects a set with required attributes `x` and `y` and concatenates them - -
- - `{ x, y ? "bar" }: x + y` - - - - A function that expects a set with required attribute `x` and optional `y`, using `"bar"` as default value for `y` - -
- - `{ x, y, ... }: x + y` - - - - A function that expects a set with required attributes `x` and `y` and ignores any other attributes - -
- - `{ x, y } @ args: x + y` - - `args @ { x, y }: x + y` - - - - A function that expects a set with required attributes `x` and `y`, and binds the whole set to `args` - -
- - *Built-in functions* - - - - - -
- - `import ./foo.nix` - - - - Load and return Nix expression in given file - -
- - `map (x: x + x) [ 1 2 3 ]` - - - - Apply a function to every element of a list (evaluates to `[ 2 4 6 ]`) - -
diff --git a/doc/manual/src/language/meson.build b/doc/manual/src/language/meson.build deleted file mode 100644 index bc0d147f3..000000000 --- a/doc/manual/src/language/meson.build +++ /dev/null @@ -1,27 +0,0 @@ -builtins_md = custom_target( - command : nix_eval_for_docs + [ - '--expr', - 'import @INPUT0@ (builtins.fromJSON (builtins.readFile @INPUT1@)).builtins', - ], - capture : true, - input : [ - '../../generate-builtins.nix', - language_json, - ], - output : 'builtins.md', - env : nix_env_for_docs, -) - -builtin_constants_md = custom_target( - command : nix_eval_for_docs + [ - '--expr', - 'import @INPUT0@ (builtins.fromJSON (builtins.readFile @INPUT1@)).constants', - ], - capture : true, - input : [ - '../../generate-builtin-constants.nix', - language_json, - ], - output : 'builtin-constants.md', - env : nix_env_for_docs, -) diff --git a/doc/manual/src/language/operators.md b/doc/manual/src/language/operators.md deleted file mode 100644 index 418d0349f..000000000 --- a/doc/manual/src/language/operators.md +++ /dev/null @@ -1,163 +0,0 @@ -# Operators - -| Name | Syntax | Associativity | Precedence | -|----------------------------------------|--------------------------------------------|---------------|------------| -| [Attribute selection] | *attrset* `.` *attrpath* \[ `or` *expr* \] | none | 1 | -| Function application | *func* *expr* | left | 2 | -| [Arithmetic negation][arithmetic] | `-` *number* | none | 3 | -| [Has attribute] | *attrset* `?` *attrpath* | none | 4 | -| List concatenation | *list* `++` *list* | right | 5 | -| [Multiplication][arithmetic] | *number* `*` *number* | left | 6 | -| [Division][arithmetic] | *number* `/` *number* | left | 6 | -| [Subtraction][arithmetic] | *number* `-` *number* | left | 7 | -| [Addition][arithmetic] | *number* `+` *number* | left | 7 | -| [String concatenation] | *string* `+` *string* | left | 7 | -| [Path concatenation] | *path* `+` *path* | left | 7 | -| [Path and string concatenation] | *path* `+` *string* | left | 7 | -| [String and path concatenation] | *string* `+` *path* | left | 7 | -| Logical negation (`NOT`) | `!` *bool* | none | 8 | -| [Update] | *attrset* `//` *attrset* | right | 9 | -| [Less than][Comparison] | *expr* `<` *expr* | none | 10 | -| [Less than or equal to][Comparison] | *expr* `<=` *expr* | none | 10 | -| [Greater than][Comparison] | *expr* `>` *expr* | none | 10 | -| [Greater than or equal to][Comparison] | *expr* `>=` *expr* | none | 10 | -| [Equality] | *expr* `==` *expr* | none | 11 | -| Inequality | *expr* `!=` *expr* | none | 11 | -| Logical conjunction (`AND`) | *bool* `&&` *bool* | left | 12 | -| Logical disjunction (`OR`) | *bool* \|\| *bool* | left | 13 | -| [Logical implication] | *bool* `->` *bool* | none | 14 | - -[string]: ./values.md#type-string -[path]: ./values.md#type-path -[number]: ./values.md#type-number -[list]: ./values.md#list -[attribute set]: ./values.md#attribute-set - -## Attribute selection - -> *attrset* `.` *attrpath* \[ `or` *expr* \] - -Select the attribute denoted by attribute path *attrpath* from [attribute set] *attrset*. -If the attribute doesn’t exist, return the *expr* after `or` if provided, otherwise abort evaluation. - -An attribute path is a dot-separated list of [attribute names](./values.md#attribute-set). - -> *attrpath* = *name* [ `.` *name* ]... - -[Attribute selection]: #attribute-selection - -## Has attribute - -> *attrset* `?` *attrpath* - -Test whether [attribute set] *attrset* contains the attribute denoted by *attrpath*. -The result is a [Boolean] value. - -[Boolean]: ./values.md#type-boolean - -[Has attribute]: #has-attribute - -## Arithmetic - -Numbers are type-compatible: -Pure integer operations will always return integers, whereas any operation involving at least one floating point number return a floating point number. - -See also [Comparison] and [Equality]. - -The `+` operator is overloaded to also work on strings and paths. - -[arithmetic]: #arithmetic - -## String concatenation - -> *string* `+` *string* - -Concatenate two [string]s and merge their string contexts. - -[String concatenation]: #string-concatenation - -## Path concatenation - -> *path* `+` *path* - -Concatenate two [path]s. -The result is a path. - -[Path concatenation]: #path-concatenation - -## Path and string concatenation - -> *path* + *string* - -Concatenate *[path]* with *[string]*. -The result is a path. - -> **Note** -> -> The string must not have a string context that refers to a [store path]. - -[Path and string concatenation]: #path-and-string-concatenation - -## String and path concatenation - -> *string* + *path* - -Concatenate *[string]* with *[path]*. -The result is a string. - -> **Important** -> -> The file or directory at *path* must exist and is copied to the [store]. -> The path appears in the result as the corresponding [store path]. - -[store path]: ../glossary.md#gloss-store-path -[store]: ../glossary.md#gloss-store - -[String and path concatenation]: #string-and-path-concatenation - -## Update - -> *attrset1* // *attrset2* - -Update [attribute set] *attrset1* with names and values from *attrset2*. - -The returned attribute set will have of all the attributes in *attrset1* and *attrset2*. -If an attribute name is present in both, the attribute value from the latter is taken. - -[Update]: #update - -## Comparison - -Comparison is - -- [arithmetic] for [number]s -- lexicographic for [string]s and [path]s -- item-wise lexicographic for [list]s: - elements at the same index in both lists are compared according to their type and skipped if they are equal. - -All comparison operators are implemented in terms of `<`, and the following equivalencies hold: - -| comparison | implementation | -|--------------|-----------------------| -| *a* `<=` *b* | `! (` *b* `<` *a* `)` | -| *a* `>` *b* | *b* `<` *a* | -| *a* `>=` *b* | `! (` *a* `<` *b* `)` | - -[Comparison]: #comparison-operators - -## Equality - -- [Attribute sets][attribute set] and [list]s are compared recursively, and therefore are fully evaluated. -- Comparison of [function]s always returns `false`. -- Numbers are type-compatible, see [arithmetic] operators. -- Floating point numbers only differ up to a limited precision. - -[function]: ./constructs.md#functions - -[Equality]: #equality - -## Logical implication - -Equivalent to `!`*b1* `||` *b2*. - -[Logical implication]: #logical-implication diff --git a/doc/manual/src/language/string-interpolation.md b/doc/manual/src/language/string-interpolation.md deleted file mode 100644 index ddc6b8230..000000000 --- a/doc/manual/src/language/string-interpolation.md +++ /dev/null @@ -1,82 +0,0 @@ -# String interpolation - -String interpolation is a language feature where a [string], [path], or [attribute name] can contain expressions enclosed in `${ }` (dollar-sign with curly brackets). - -Such a string is an *interpolated string*, and an expression inside is an *interpolated expression*. - -Interpolated expressions must evaluate to one of the following: - -- a [string] -- a [path] -- a [derivation] - -[string]: ./values.md#type-string -[path]: ./values.md#type-path -[attribute name]: ./values.md#attribute-set -[derivation]: ../glossary.md#gloss-derivation - -## Examples - -### String - -Rather than writing - -```nix -"--with-freetype2-library=" + freetype + "/lib" -``` - -(where `freetype` is a [derivation]), you can instead write - -```nix -"--with-freetype2-library=${freetype}/lib" -``` - -The latter is automatically translated to the former. - -A more complicated example (from the Nix expression for [Qt](http://www.trolltech.com/products/qt)): - -```nix -configureFlags = " - -system-zlib -system-libpng -system-libjpeg - ${if openglSupport then "-dlopen-opengl - -L${mesa}/lib -I${mesa}/include - -L${libXmu}/lib -I${libXmu}/include" else ""} - ${if threadSupport then "-thread" else "-no-thread"} -"; -``` - -Note that Nix expressions and strings can be arbitrarily nested; -in this case the outer string contains various interpolated expressions that themselves contain strings (e.g., `"-thread"`), some of which in turn contain interpolated expressions (e.g., `${mesa}`). - -### Path - -Rather than writing - -```nix -./. + "/" + foo + "-" + bar + ".nix" -``` - -or - -```nix -./. + "/${foo}-${bar}.nix" -``` - -you can instead write - -```nix -./${foo}-${bar}.nix -``` - -### Attribute name - -Attribute names can be created dynamically with string interpolation: - -```nix -let name = "foo"; in -{ - ${name} = "bar"; -} -``` - - { foo = "bar"; } diff --git a/doc/manual/src/language/values.md b/doc/manual/src/language/values.md deleted file mode 100644 index 2ae3e143a..000000000 --- a/doc/manual/src/language/values.md +++ /dev/null @@ -1,267 +0,0 @@ -# Data Types - -## Primitives - -- String - - *Strings* can be written in three ways. - - The most common way is to enclose the string between double quotes, - e.g., `"foo bar"`. Strings can span multiple lines. The special - characters `"` and `\` and the character sequence `${` must be - escaped by prefixing them with a backslash (`\`). Newlines, carriage - returns and tabs can be written as `\n`, `\r` and `\t`, - respectively. - - You can include the results of other expressions into a string by enclosing them in `${ }`, a feature known as [string interpolation]. - - [string interpolation]: ./string-interpolation.md - - The second way to write string literals is as an *indented string*, - which is enclosed between pairs of *double single-quotes*, like so: - - ```nix - '' - This is the first line. - This is the second line. - This is the third line. - '' - ``` - - This kind of string literal intelligently strips indentation from - the start of each line. To be precise, it strips from each line a - number of spaces equal to the minimal indentation of the string as a - whole (disregarding the indentation of empty lines). For instance, - the first and second line are indented two spaces, while the third - line is indented four spaces. Thus, two spaces are stripped from - each line, so the resulting string is - - ```nix - "This is the first line.\nThis is the second line.\n This is the third line.\n" - ``` - - Note that the whitespace and newline following the opening `''` is - ignored if there is no non-whitespace text on the initial line. - - Indented strings support [string interpolation]. - - Since `${` and `''` have special meaning in indented strings, you - need a way to quote them. `$` can be escaped by prefixing it with - `''` (that is, two single quotes), i.e., `''$`. `''` can be escaped - by prefixing it with `'`, i.e., `'''`. `$` removes any special - meaning from the following `$`. Linefeed, carriage-return and tab - characters can be written as `''\n`, `''\r`, `''\t`, and `''\` - escapes any other character. - - Indented strings are primarily useful in that they allow multi-line - string literals to follow the indentation of the enclosing Nix - expression, and that less escaping is typically necessary for - strings representing languages such as shell scripts and - configuration files because `''` is much less common than `"`. - Example: - - ```nix - stdenv.mkDerivation { - ... - postInstall = - '' - mkdir $out/bin $out/etc - cp foo $out/bin - echo "Hello World" > $out/etc/foo.conf - ${if enableBar then "cp bar $out/bin" else ""} - ''; - ... - } - ``` - - Finally, as a convenience, *URIs* as defined in appendix B of - [RFC 2396](http://www.ietf.org/rfc/rfc2396.txt) can be written *as - is*, without quotes. For instance, the string - `"http://example.org/foo.tar.bz2"` can also be written as - `http://example.org/foo.tar.bz2`. - -- Number - - Numbers, which can be *integers* (like `123`) or *floating point* - (like `123.43` or `.27e13`). - - See [arithmetic] and [comparison] operators for semantics. - - [arithmetic]: ./operators.md#arithmetic - [comparison]: ./operators.md#comparison - -- Path - - *Paths*, e.g., `/bin/sh` or `./builder.sh`. A path must contain at - least one slash to be recognised as such. For instance, `builder.sh` - is not a path: it's parsed as an expression that selects the - attribute `sh` from the variable `builder`. If the file name is - relative, i.e., if it does not begin with a slash, it is made - absolute at parse time relative to the directory of the Nix - expression that contained it. For instance, if a Nix expression in - `/foo/bar/bla.nix` refers to `../xyzzy/fnord.nix`, the absolute path - is `/foo/xyzzy/fnord.nix`. - - If the first component of a path is a `~`, it is interpreted as if - the rest of the path were relative to the user's home directory. - e.g. `~/foo` would be equivalent to `/home/edolstra/foo` for a user - whose home directory is `/home/edolstra`. - - Paths can also be specified between angle brackets, e.g. - ``. This means that the directories listed in the - environment variable `NIX_PATH` will be searched for the given file - or directory name. - - When an [interpolated string][string interpolation] evaluates to a path, the path is first copied into the Nix store and the resulting string is the [store path] of the newly created [store object]. - - [store path]: ../glossary.md#gloss-store-path - [store object]: ../glossary.md#gloss-store-object - - For instance, evaluating `"${./foo.txt}"` will cause `foo.txt` in the current directory to be copied into the Nix store and result in the string `"/nix/store/-foo.txt"`. - - Note that the Nix language assumes that all input files will remain _unchanged_ while evaluating a Nix expression. - For example, assume you used a file path in an interpolated string during a `nix repl` session. - Later in the same session, after having changed the file contents, evaluating the interpolated string with the file path again might not return a new store path, since Nix might not re-read the file contents. - - Paths themselves, except those in angle brackets (`< >`), support [string interpolation]. - - At least one slash (`/`) must appear *before* any interpolated expression for the result to be recognized as a path. - - `a.${foo}/b.${bar}` is a syntactically valid division operation. - `./a.${foo}/b.${bar}` is a path. - -- Boolean - - *Booleans* with values `true` and `false`. - -- Null - - The null value, denoted as `null`. - -## List - -Lists are formed by enclosing a whitespace-separated list of values -between square brackets. For example, - -```nix -[ 123 ./foo.nix "abc" (f { x = y; }) ] -``` - -defines a list of four elements, the last being the result of a call to -the function `f`. Note that function calls have to be enclosed in -parentheses. If they had been omitted, e.g., - -```nix -[ 123 ./foo.nix "abc" f { x = y; } ] -``` - -the result would be a list of five elements, the fourth one being a -function and the fifth being a set. - -Note that lists are only lazy in values, and they are strict in length. - -## Attribute Set - -An attribute set is a collection of name-value-pairs (called *attributes*) enclosed in curly brackets (`{ }`). - -An attribute name can be an identifier or a [string](#string). -An identifier must start with a letter (`a-z`, `A-Z`) or underscore (`_`), and can otherwise contain letters (`a-z`, `A-Z`), numbers (`0-9`), underscores (`_`), apostrophes (`'`), or dashes (`-`). - -> *name* = *identifier* | *string* \ -> *identifier* ~ `[a-zA-Z_][a-zA-Z0-9_'-]*` - -Names and values are separated by an equal sign (`=`). -Each value is an arbitrary expression terminated by a semicolon (`;`). - -> *attrset* = `{` [ *name* `=` *expr* `;` `]`... `}` - -Attributes can appear in any order. -An attribute name may only occur once. - -Example: - -```nix -{ - x = 123; - text = "Hello"; - y = f { bla = 456; }; -} -``` - -This defines a set with attributes named `x`, `text`, `y`. - -Attributes can be accessed with the [`.` operator](./operators.md#attribute-selection). - -Example: - -```nix -{ a = "Foo"; b = "Bar"; }.a -``` - -This evaluates to `"Foo"`. - -It is possible to provide a default value in an attribute selection using the `or` keyword. - -Example: - -```nix -{ a = "Foo"; b = "Bar"; }.c or "Xyzzy" -``` - -```nix -{ a = "Foo"; b = "Bar"; }.c.d.e.f.g or "Xyzzy" -``` - -will both evaluate to `"Xyzzy"` because there is no `c` attribute in the set. - -You can use arbitrary double-quoted strings as attribute names: - -```nix -{ "$!@#?" = 123; }."$!@#?" -``` - -```nix -let bar = "bar"; in -{ "foo ${bar}" = 123; }."foo ${bar}" -``` - -Both will evaluate to `123`. - -Attribute names support [string interpolation]: - -```nix -let bar = "foo"; in -{ foo = 123; }.${bar} -``` - -```nix -let bar = "foo"; in -{ ${bar} = 123; }.foo -``` - -Both will evaluate to `123`. - -In the special case where an attribute name inside of a set declaration -evaluates to `null` (which is normally an error, as `null` cannot be coerced to -a string), that attribute is simply not added to the set: - -```nix -{ ${if foo then "bar" else null} = true; } -``` - -This will evaluate to `{}` if `foo` evaluates to `false`. - -A set that has a `__functor` attribute whose value is callable (i.e. is -itself a function or a set with a `__functor` attribute whose value is -callable) can be applied as if it were a function, with the set itself -passed in first , e.g., - -```nix -let add = { __functor = self: x: x + self.x; }; - inc = add // { x = 1; }; -in inc 1 -``` - -evaluates to `2`. This can be used to attach metadata to a function -without the caller needing to treat it specially, or to implement a form -of object-oriented programming, for example. diff --git a/doc/manual/src/package-management/basic-package-mgmt.md b/doc/manual/src/package-management/basic-package-mgmt.md deleted file mode 100644 index 0d94ea231..000000000 --- a/doc/manual/src/package-management/basic-package-mgmt.md +++ /dev/null @@ -1,188 +0,0 @@ -# Basic Package Management - -
- -FIXME(Lix): This section does not document the most common modern practices in terms of avoiding channels, pinning, declarative software installation (see flakey-profile or home-manager or NixOS), or using flakes, etc. -It is, however, likely correct at a technical level. - -For more information on modern practices, see the [resources](https://lix.systems/resources) page on the Lix site. - -
- -The main command for package management is -[`nix-env`](../command-ref/nix-env.md). You can use it to install, -upgrade, and erase packages, and to query what packages are installed -or are available for installation. - -In Nix systems, different users can have different “views” on the set of -installed applications. That is, there might be lots of applications -present on the system (possibly in many different versions), but users -can have a specific selection of those active — where “active” just -means that it appears in a directory in the user’s `PATH`. Such a view -on the set of installed applications is called a *user environment*, -which is just a directory tree consisting of symlinks to the files of -the active applications. - -Components are installed from a set of *Nix expressions* that tell Lix -how to build those packages, including, if necessary, their -dependencies. There is a very large collection of Nix expressions called the -Nixpkgs package collection that contains packages ranging from basic -development stuff such as GCC and Glibc, to end-user applications like -Mozilla Firefox. (Lix is however not tied to the Nixpkgs package -collection; you could write your own Nix expressions based on Nixpkgs, -or completely new ones.) - -You can manually download the latest version of Nixpkgs from -. However, it’s much more -convenient to use the Nixpkgs [*channel*](../command-ref/nix-channel.md), since it makes -it easy to stay up to date with new versions of Nixpkgs. Nixpkgs is -automatically added to your list of “subscribed” channels when you -install Lix. If this is not the case for some reason, you can add it -as follows: - -```console -$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable -$ nix-channel --update -``` - -> **Note** -> -> On NixOS, you’re automatically subscribed to a NixOS channel -> corresponding to your NixOS major release (e.g. -> ). A NixOS channel is identical -> to the Nixpkgs channel, except that it contains only Linux binaries -> and is updated only if a set of regression tests succeed. - -You can view the set of available packages in Nixpkgs: - -```console -$ nix-env --query --available --attr-path -nixpkgs.aterm aterm-2.2 -nixpkgs.bash bash-3.0 -nixpkgs.binutils binutils-2.15 -nixpkgs.bison bison-1.875d -nixpkgs.blackdown blackdown-1.4.2 -nixpkgs.bzip2 bzip2-1.0.2 -… -``` - -The flag `-q` specifies a query operation, `-a` means that you want -to show the “available” (i.e., installable) packages, as opposed to the -installed packages, and `-P` prints the attribute paths that can be used -to unambiguously select a package for installation (listed in the first column). -If you downloaded Nixpkgs yourself, or if you checked it out from GitHub, -then you need to pass the path to your Nixpkgs tree using the `-f` flag: - -```console -$ nix-env --query --available --attr-path --file /path/to/nixpkgs -aterm aterm-2.2 -bash bash-3.0 -… -``` - -where */path/to/nixpkgs* is where you’ve unpacked or checked out -Nixpkgs. - -You can filter the packages by name: - -```console -$ nix-env --query --available --attr-path firefox -nixpkgs.firefox-esr firefox-91.3.0esr -nixpkgs.firefox firefox-94.0.1 -``` - -and using regular expressions: - -```console -$ nix-env --query --available --attr-path 'firefox.*' -``` - -It is also possible to see the *status* of available packages, i.e., -whether they are installed into the user environment and/or present in -the system: - -```console -$ nix-env --query --available --attr-path --status -… --PS nixpkgs.bash bash-3.0 ---S nixpkgs.binutils binutils-2.15 -IPS nixpkgs.bison bison-1.875d -… -``` - -The first character (`I`) indicates whether the package is installed in -your current user environment. The second (`P`) indicates whether it is -present on your system (in which case installing it into your user -environment would be a very quick operation). The last one (`S`) -indicates whether there is a so-called *substitute* for the package, -which is Nix’s mechanism for doing binary deployment. It just means that -Lix knows that it can fetch a pre-built package from somewhere -(typically a network server) instead of building it locally. - -You can install a package using `nix-env --install --attr `. For instance, - -```console -$ nix-env --install --attr nixpkgs.subversion -``` - -will install the package called `subversion` from `nixpkgs` channel (which is, of course, the -[Subversion version management system](http://subversion.tigris.org/)). - -> **Note** -> -> When you ask Lix to install a package, it will first try to get it in -> pre-compiled form from a *binary cache*. By default, Lix will use the -> binary cache ; it contains binaries for most -> packages in Nixpkgs. Only if no binary is available in the binary -> cache, Lix will build the package from source. So if `nix-env -> -iA nixpkgs.subversion` results in Lix building stuff from source, then either -> the package is not built for your platform by the Nixpkgs build -> servers, or your version of Nixpkgs is too old or too new. For -> instance, if you have a very recent checkout of Nixpkgs, then the -> Nixpkgs build servers may not have had a chance to build everything -> and upload the resulting binaries to . The -> Nixpkgs channel is only updated after all binaries have been uploaded -> to the cache, so if you stick to the Nixpkgs channel (rather than -> using a Git checkout of the Nixpkgs tree), you will get binaries for -> most packages. - -Naturally, packages can also be uninstalled. Unlike when installing, you will -need to use the derivation name (though the version part can be omitted), -instead of the attribute path, as `nix-env` does not record which attribute -was used for installing: - -```console -$ nix-env --uninstall subversion -``` - -Upgrading to a new version is just as easy. If you have a new release of -nixpkgs, you can do: - -```console -$ nix-env --upgrade --attr nixpkgs.subversion -``` - -This will *only* upgrade Subversion if there is a “newer” version in the -new set of Nix expressions, as defined by some pretty arbitrary rules -regarding ordering of version numbers (which generally do what you’d -expect of them). To just unconditionally replace Subversion with -whatever version is in the Nix expressions, use `-i` instead of `-u`; -`-i` will remove whatever version is already installed. - -You can also upgrade all packages for which there are newer versions: - -```console -$ nix-env --upgrade -``` - -Sometimes it’s useful to be able to ask what `nix-env` would do, without -actually doing it. For instance, to find out what packages would be -upgraded by `nix-env --upgrade `, you can do - -```console -$ nix-env --upgrade --dry-run -(dry run; not doing anything) -upgrading `libxslt-1.1.0' to `libxslt-1.1.10' -upgrading `graphviz-1.10' to `graphviz-1.12' -upgrading `coreutils-5.0' to `coreutils-5.2.1' -``` diff --git a/doc/manual/src/package-management/binary-cache-substituter.md b/doc/manual/src/package-management/binary-cache-substituter.md deleted file mode 100644 index 4dcf2ca3f..000000000 --- a/doc/manual/src/package-management/binary-cache-substituter.md +++ /dev/null @@ -1,62 +0,0 @@ -# Serving a Nix store via HTTP - -
- -FIXME(Lix): This section documents outdated practices. - -In particular, the Lix developers would *not* recommend using `nix-serve` as it is relatively-unmaintained Perl. -The Lix developers would recommend instead using an s3 based cache (which is what https://cache.nixos.org is), and if it is desired to self-host it, use something like [garage](https://garagehq.deuxfleurs.fr/). - -See the following projects: -- [attic](https://github.com/zhaofengli/attic) - multi-tenant cache for larger deployments, using s3 as a backend. -- [harmonia](https://github.com/nix-community/harmonia) - closer to a drop in replacement for use cases served by nix-serve - -
- -You can easily share the Nix store of a machine via HTTP. This allows -other machines to fetch store paths from that machine to speed up -installations. It uses the same *binary cache* mechanism that Lix -usually uses to fetch pre-built binaries from . - -The daemon that handles binary cache requests via HTTP, `nix-serve`, is -not part of the Nix distribution, but you can install it from Nixpkgs: - -```console -$ nix-env --install --attr nixpkgs.nix-serve -``` - -You can then start the server, listening for HTTP connections on -whatever port you like: - -```console -$ nix-serve -p 8080 -``` - -To check whether it works, try the following on the client: - -```console -$ curl http://avalon:8080/nix-cache-info -``` - -which should print something like: - - StoreDir: /nix/store - WantMassQuery: 1 - Priority: 30 - -On the client side, you can tell Lix to use your binary cache using `--substituters` (assuming you are a trusted user, see `trusted-users` in nix.conf), e.g.: - -```console -$ nix-env --install --attr nixpkgs.firefox --substituters http://avalon:8080/ -``` - -The option `substituters` tells Lix to use this binary cache in -addition to your default caches, such as . -Thus, for any path in the closure of Firefox, Lix will first check if -the path is available on the server `avalon` or another binary caches. -If not, it will fall back to building from source. - -You can also tell Lix to always use your binary cache by adding a line -to the `nix.conf` configuration file like this: - - substituters = http://avalon:8080/ https://cache.nixos.org/ diff --git a/doc/manual/src/package-management/copy-closure.md b/doc/manual/src/package-management/copy-closure.md deleted file mode 100644 index 14326298b..000000000 --- a/doc/manual/src/package-management/copy-closure.md +++ /dev/null @@ -1,34 +0,0 @@ -# Copying Closures via SSH - -The command `nix-copy-closure` copies a Nix store path along with all -its dependencies to or from another machine via the SSH protocol. It -doesn’t copy store paths that are already present on the target machine. -For example, the following command copies Firefox with all its -dependencies: - - $ nix-copy-closure --to alice@itchy.example.org $(type -p firefox) - -See the [manpage for `nix-copy-closure`](../command-ref/nix-copy-closure.md) for details. - -With `nix-store ---export` and `nix-store --import` you can write the closure of a store -path (that is, the path and all its dependencies) to a file, and then -unpack that file into another Nix store. For example, - - $ nix-store --export $(nix-store --query --requisites $(type -p firefox)) > firefox.closure - -writes the closure of Firefox to a file. You can then copy this file to -another machine and install the closure: - - $ nix-store --import < firefox.closure - -Any store paths in the closure that are already present in the target -store are ignored. It is also possible to pipe the export into another -command, e.g. to copy and install a closure directly to/on another -machine: - - $ nix-store --export $(nix-store --query --requisites $(type -p firefox)) | bzip2 | \ - ssh alice@itchy.example.org "bunzip2 | nix-store --import" - -However, `nix-copy-closure` is generally more efficient because it only -copies paths that are not already present in the target Nix store. diff --git a/doc/manual/src/package-management/garbage-collection.md b/doc/manual/src/package-management/garbage-collection.md deleted file mode 100644 index 07ca29365..000000000 --- a/doc/manual/src/package-management/garbage-collection.md +++ /dev/null @@ -1,73 +0,0 @@ -# Garbage Collection - -`nix-env` operations such as upgrades (`-u`) and uninstall (`-e`) never -actually delete packages from the system. All they do (as shown above) -is to create a new user environment that no longer contains symlinks to -the “deleted” packages. - -Of course, since disk space is not infinite, unused packages should be -removed at some point. You can do this by running the Lix garbage -collector. It will remove from the Nix store any package not used -(directly or indirectly) by any generation of any profile. - -Note however that as long as old generations reference a package, it -will not be deleted. After all, we wouldn’t be able to do a rollback -otherwise. So in order for garbage collection to be effective, you -should also delete (some) old generations. Of course, this should only -be done if you are certain that you will not need to roll back. - -To delete all old (non-current) generations of your current profile: - -```console -$ nix-env --delete-generations old -``` - -Instead of `old` you can also specify a list of generations, e.g., - -```console -$ nix-env --delete-generations 10 11 14 -``` - -To delete all generations older than a specified number of days (except -the current generation), use the `d` suffix. For example, - -```console -$ nix-env --delete-generations 14d -``` - -deletes all generations older than two weeks. - -After removing appropriate old generations you can run the garbage -collector as follows: - -```console -$ nix-store --gc -``` - -The behaviour of the garbage collector is affected by the -`keep-derivations` (default: true) and `keep-outputs` (default: false) -options in the Nix configuration file. The defaults will ensure that all -derivations that are build-time dependencies of garbage collector roots -will be kept and that all output paths that are runtime dependencies -will be kept as well. All other derivations or paths will be collected. -(This is usually what you want, but while you are developing it may make -sense to keep outputs to ensure that rebuild times are quick.) If you -are feeling uncertain, you can also first view what files would be -deleted: - -```console -$ nix-store --gc --print-dead -``` - -Likewise, the option `--print-live` will show the paths that *won’t* be -deleted. - -There is also a convenient little utility `nix-collect-garbage`, which -when invoked with the `-d` (`--delete-old`) switch deletes all old -generations of all profiles in `/nix/var/nix/profiles`. So - -```console -$ nix-collect-garbage -d -``` - -is a quick and easy way to clean up your system. diff --git a/doc/manual/src/package-management/garbage-collector-roots.md b/doc/manual/src/package-management/garbage-collector-roots.md deleted file mode 100644 index 30c5b7f8d..000000000 --- a/doc/manual/src/package-management/garbage-collector-roots.md +++ /dev/null @@ -1,18 +0,0 @@ -# Garbage Collector Roots - -The roots of the garbage collector are all store paths to which there -are symlinks in the directory `prefix/nix/var/nix/gcroots`. For -instance, the following command makes the path -`/nix/store/d718ef...-foo` a root of the collector: - -```console -$ ln -s /nix/store/d718ef...-foo /nix/var/nix/gcroots/bar -``` - -That is, after this command, the garbage collector will not remove -`/nix/store/d718ef...-foo` or any of its dependencies. - -Subdirectories of `prefix/nix/var/nix/gcroots` are also searched for -symlinks. Symlinks to non-store paths are followed and searched for -roots, but symlinks to non-store paths *inside* the paths reached in -that way are not followed to prevent infinite recursion. diff --git a/doc/manual/src/package-management/package-management.md b/doc/manual/src/package-management/package-management.md deleted file mode 100644 index 274986663..000000000 --- a/doc/manual/src/package-management/package-management.md +++ /dev/null @@ -1,4 +0,0 @@ -This chapter discusses how to do package management with Lix, i.e., -how to obtain, install, upgrade, and erase packages. This is the -“user’s” perspective of the Nix system — people who want to *create* -packages should consult the chapter on the [Nix language](../language/index.md). diff --git a/doc/manual/src/package-management/profiles.md b/doc/manual/src/package-management/profiles.md deleted file mode 100644 index 1d9e672a8..000000000 --- a/doc/manual/src/package-management/profiles.md +++ /dev/null @@ -1,133 +0,0 @@ -# Profiles - -Profiles and user environments are Nix’s mechanism for implementing the -ability to allow different users to have different configurations, and -to do atomic upgrades and rollbacks. To understand how they work, it’s -useful to know a bit about how Nix works. In Nix, packages are stored in -unique locations in the *Nix store* (typically, `/nix/store`). For -instance, a particular version of the Subversion package might be stored -in a directory -`/nix/store/dpmvp969yhdqs7lm2r1a3gng7pyq6vy4-subversion-1.1.3/`, while -another version might be stored in -`/nix/store/5mq2jcn36ldlmh93yj1n8s9c95pj7c5s-subversion-1.1.2`. The long -strings prefixed to the directory names are cryptographic hashes (to be -precise, 160-bit truncations of SHA-256 hashes encoded in a base-32 -notation) of *all* inputs involved in building the package — sources, -dependencies, compiler flags, and so on. So if two packages differ in -any way, they end up in different locations in the file system, so they -don’t interfere with each other. Here is what a part of a typical Nix -store looks like: - -![](../figures/user-environments.png) - -Of course, you wouldn’t want to type - -```console -$ /nix/store/dpmvp969yhdq...-subversion-1.1.3/bin/svn -``` - -every time you want to run Subversion. Of course we could set up the -`PATH` environment variable to include the `bin` directory of every -package we want to use, but this is not very convenient since changing -`PATH` doesn’t take effect for already existing processes. The solution -Nix uses is to create directory trees of symlinks to *activated* -packages. These are called *user environments* and they are packages -themselves (though automatically generated by `nix-env`), so they too -reside in the Nix store. For instance, in the figure above, the user -environment `/nix/store/0c1p5z4kda11...-user-env` contains a symlink to -just Subversion 1.1.2 (arrows in the figure indicate symlinks). This -would be what we would obtain if we had done - -```console -$ nix-env --install --attr nixpkgs.subversion -``` - -on a set of Nix expressions that contained Subversion 1.1.2. - -This doesn’t in itself solve the problem, of course; you wouldn’t want -to type `/nix/store/0c1p5z4kda11...-user-env/bin/svn` either. That’s why -there are symlinks outside of the store that point to the user -environments in the store; for instance, the symlinks `default-42-link` -and `default-43-link` in the example. These are called *generations* -since every time you perform a `nix-env` operation, a new user -environment is generated based on the current one. For instance, -generation 43 was created from generation 42 when we did - -```console -$ nix-env --install --attr nixpkgs.subversion nixpkgs.firefox -``` - -on a set of Nix expressions that contained Firefox and a new version of -Subversion. - -Generations are grouped together into *profiles* so that different users -don’t interfere with each other if they don’t want to. For example: - -```console -$ ls -l /nix/var/nix/profiles/ -... -lrwxrwxrwx 1 eelco ... default-42-link -> /nix/store/0c1p5z4kda11...-user-env -lrwxrwxrwx 1 eelco ... default-43-link -> /nix/store/3aw2pdyx2jfc...-user-env -lrwxrwxrwx 1 eelco ... default -> default-43-link -``` - -This shows a profile called `default`. The file `default` itself is -actually a symlink that points to the current generation. When we do a -`nix-env` operation, a new user environment and generation link are -created based on the current one, and finally the `default` symlink is -made to point at the new generation. This last step is atomic on Unix, -which explains how we can do atomic upgrades. (Note that the -building/installing of new packages doesn’t interfere in any way with -old packages, since they are stored in different locations in the Nix -store.) - -If you find that you want to undo a `nix-env` operation, you can just do - -```console -$ nix-env --rollback -``` - -which will just make the current generation link point at the previous -link. E.g., `default` would be made to point at `default-42-link`. You -can also switch to a specific generation: - -```console -$ nix-env --switch-generation 43 -``` - -which in this example would roll forward to generation 43 again. You can -also see all available generations: - -```console -$ nix-env --list-generations -``` - -You generally wouldn’t have `/nix/var/nix/profiles/some-profile/bin` in -your `PATH`. Rather, there is a symlink `~/.nix-profile` that points to -your current profile. This means that you should put -`~/.nix-profile/bin` in your `PATH` (and indeed, that’s what the -initialisation script `/nix/etc/profile.d/nix.sh` does). This makes it -easier to switch to a different profile. You can do that using the -command `nix-env --switch-profile`: - -```console -$ nix-env --switch-profile /nix/var/nix/profiles/my-profile - -$ nix-env --switch-profile /nix/var/nix/profiles/default -``` - -These commands switch to the `my-profile` and default profile, -respectively. If the profile doesn’t exist, it will be created -automatically. You should be careful about storing a profile in another -location than the `profiles` directory, since otherwise it might not be -used as a root of the [garbage collector](garbage-collection.md). - -All `nix-env` operations work on the profile pointed to by -`~/.nix-profile`, but you can override this using the `--profile` option -(abbreviation `-p`): - -```console -$ nix-env --profile /nix/var/nix/profiles/other-profile --install --attr nixpkgs.subversion -``` - -This will *not* change the `~/.nix-profile` symlink. diff --git a/doc/manual/src/package-management/s3-substituter.md b/doc/manual/src/package-management/s3-substituter.md deleted file mode 100644 index 55182128b..000000000 --- a/doc/manual/src/package-management/s3-substituter.md +++ /dev/null @@ -1,126 +0,0 @@ -# Serving a Nix store via S3 - -Lix has [built-in support](@docroot@/command-ref/new-cli/nix3-help-stores.md#s3-binary-cache-store) -for storing and fetching store paths from Amazon S3 and S3-compatible services. - -
- -FIXME(Lix): document the correct setup to fetch from a s3 cache via HTTP rather than just through `s3://` (which works, but forces you to remain s3-like on the client side) - -
- - - -In this example we will use the bucket named `example-nix-cache`. - -## Anonymous Reads to your S3-compatible binary cache - -If your binary cache is publicly accessible and does not require -authentication, the simplest and easiest way to use Lix with your S3 -compatible binary cache is to use the HTTP URL for that cache. - -For AWS S3 the binary cache URL for example bucket will be exactly - or -. For S3 compatible binary caches, consult that -cache's documentation. - -Your bucket will need the following bucket policy: - -```json -{ - "Id": "DirectReads", - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "AllowDirectReads", - "Action": [ - "s3:GetObject", - "s3:GetBucketLocation" - ], - "Effect": "Allow", - "Resource": [ - "arn:aws:s3:::example-nix-cache", - "arn:aws:s3:::example-nix-cache/*" - ], - "Principal": "*" - } - ] -} -``` - -## Authenticated Reads to your S3 binary cache - -For AWS S3 the binary cache URL for example bucket will be exactly -. - -Lix will use the [default credential provider -chain](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/credentials.html) -for authenticating requests to Amazon S3. - -Lix supports authenticated reads from Amazon S3 and S3 compatible binary -caches. - -Your bucket will need a bucket policy allowing the desired users to -perform the `s3:GetObject` and `s3:GetBucketLocation` action on all -objects in the bucket. The [anonymous policy given -above](#anonymous-reads-to-your-s3-compatible-binary-cache) can be -updated to have a restricted `Principal` to support this. - -## Authenticated Writes to your S3-compatible binary cache - -Lix support fully supports writing to Amazon S3 and S3 compatible -buckets. The binary cache URL for our example bucket will be -. - -Lix will use the [default credential provider -chain](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/credentials.html) -for authenticating requests to Amazon S3. - -Your account will need the following IAM policy to upload to the cache: - -```json -{ - "Version": "2012-10-17", - "Statement": [ - { - "Sid": "UploadToCache", - "Effect": "Allow", - "Action": [ - "s3:AbortMultipartUpload", - "s3:GetBucketLocation", - "s3:GetObject", - "s3:ListBucket", - "s3:ListBucketMultipartUploads", - "s3:ListMultipartUploadParts", - "s3:PutObject" - ], - "Resource": [ - "arn:aws:s3:::example-nix-cache", - "arn:aws:s3:::example-nix-cache/*" - ] - } - ] -} -``` - -## Examples - -To upload with a specific credential profile for Amazon S3: - -```console -$ nix copy nixpkgs.hello \ - --to 's3://example-nix-cache?profile=cache-upload®ion=eu-west-2' -``` - -To upload to an S3-compatible binary cache: - -```console -$ nix copy nixpkgs.hello --to \ - 's3://example-nix-cache?profile=cache-upload&scheme=https&endpoint=minio.example.com' -``` diff --git a/doc/manual/src/package-management/sharing-packages.md b/doc/manual/src/package-management/sharing-packages.md deleted file mode 100644 index 846ca6934..000000000 --- a/doc/manual/src/package-management/sharing-packages.md +++ /dev/null @@ -1,6 +0,0 @@ -# Sharing Packages Between Machines - -Sometimes you want to copy a package from one machine to another. Or, -you want to install some packages and you know that another machine -already has some or all of those packages or their dependencies. In that -case there are mechanisms to quickly copy packages between machines. diff --git a/doc/manual/src/package-management/ssh-substituter.md b/doc/manual/src/package-management/ssh-substituter.md deleted file mode 100644 index 44dc3ef84..000000000 --- a/doc/manual/src/package-management/ssh-substituter.md +++ /dev/null @@ -1,62 +0,0 @@ -# Serving a Nix store via SSH - -You can tell Lix to automatically fetch needed binaries from a remote -Nix store via SSH. For example, the following installs Firefox, -automatically fetching any store paths in Firefox’s closure if they are -available on the server `avalon`: - -```console -$ nix-env --install --attr nixpkgs.firefox --substituters ssh://alice@avalon -``` - -This works similar to the binary cache substituter that Lix usually -uses, only using SSH instead of HTTP: if a store path `P` is needed, Lix -will first check if it’s available in the Nix store on `avalon`. If not, -it will fall back to using the binary cache substituter, and then to -building from source. - -> **Note** -> -> The SSH substituter currently does not allow you to enter an SSH -> passphrase interactively. Therefore, you should use `ssh-add` to load -> the decrypted private key into `ssh-agent`. - -You can also copy the closure of some store path, without installing it -into your profile, e.g. - -```console -$ nix-store --realise /nix/store/m85bxg…-firefox-34.0.5 --substituters -ssh://alice@avalon -``` - -This is essentially equivalent to doing - -```console -$ nix-copy-closure --from alice@avalon -/nix/store/m85bxg…-firefox-34.0.5 -``` - -You can use SSH’s *forced command* feature to set up a restricted user -account for SSH substituter access, allowing read-only access to the -local Nix store, but nothing more. For example, add the following lines -to `sshd_config` to restrict the user `nix-ssh`: - - Match User nix-ssh - AllowAgentForwarding no - AllowTcpForwarding no - PermitTTY no - PermitTunnel no - X11Forwarding no - ForceCommand nix-store --serve - Match All - -On NixOS, you can accomplish the same by adding the following to your -`configuration.nix`: - -```nix -nix.sshServe.enable = true; -nix.sshServe.keys = [ "ssh-dss AAAAB3NzaC1k... bob@example.org" ]; -``` - -where the latter line lists the public keys of users that are allowed to -connect. diff --git a/doc/manual/src/protocols/derivation-aterm.md b/doc/manual/src/protocols/derivation-aterm.md deleted file mode 100644 index e58b602a3..000000000 --- a/doc/manual/src/protocols/derivation-aterm.md +++ /dev/null @@ -1,19 +0,0 @@ -# Derivation "ATerm" file format - -For historical reasons, [derivations](@docroot@/glossary.md#gloss-store-derivation) are stored on-disk in [ATerm](https://homepages.cwi.nl/~daybuild/daily-books/technology/aterm-guide/aterm-guide.html) format. - -Derivations are serialised in one of the following formats: - -- ``` - Derive(...) - ``` - - For all stable derivations. - -- ``` - DrvWithVersion(, ...) - ``` - - The only `version-string`s that are in use today are for [experimental features](@docroot@/contributing/experimental-features.md): - - - `"xp-dyn-drv"` for the [`dynamic-derivations`](@docroot@/contributing/experimental-features.md#xp-feature-dynamic-derivations) experimental feature. diff --git a/doc/manual/src/protocols/protocols.md b/doc/manual/src/protocols/protocols.md deleted file mode 100644 index 1f77f98a2..000000000 --- a/doc/manual/src/protocols/protocols.md +++ /dev/null @@ -1,4 +0,0 @@ -# Protocols - -This chapter documents various developer-facing interfaces provided by -Lix. diff --git a/doc/manual/src/protocols/tarball-fetcher.md b/doc/manual/src/protocols/tarball-fetcher.md deleted file mode 100644 index 3527333f2..000000000 --- a/doc/manual/src/protocols/tarball-fetcher.md +++ /dev/null @@ -1,42 +0,0 @@ -# Lockable HTTP Tarball Protocol - -Tarball flakes can be served as regular tarballs via HTTP or the file -system (for `file://` URLs). Unless the server implements the Lockable -HTTP Tarball protocol, it is the responsibility of the user to make sure that -the URL always produces the same tarball contents. - -An HTTP server can return an "immutable" HTTP URL appropriate for lock -files. This allows users to specify a tarball flake input in -`flake.nix` that requests the latest version of a flake -(e.g. `https://example.org/hello/latest.tar.gz`), while `flake.lock` -will record a URL whose contents will not change -(e.g. `https://example.org/hello/.tar.gz`). To do so, the -server must return an [HTTP `Link` header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) with the `rel` attribute set to -`immutable`, as follows: - -``` -Link: ; rel="immutable" -``` - -(Note the required `<` and `>` characters around *flakeref*.) - -*flakeref* must be a tarball flakeref. It can contain the tarball flake attributes -`narHash`, `rev`, `revCount` and `lastModified`. If `narHash` is included, its -value must be the NAR hash of the unpacked tarball (as computed via -`nix hash path`). Lix checks the contents of the returned tarball -against the `narHash` attribute. The `rev` and `revCount` attributes -are useful when the tarball flake is a mirror of a fetcher type that -has those attributes, such as Git or GitHub. They are not checked by -Lix. - -``` -Link: ; rel="immutable" -``` - -(The linebreaks in this example are for clarity and must not be included in the actual response.) - -For tarball flakes, the value of the `lastModified` flake attribute is -defined as the timestamp of the newest file inside the tarball. diff --git a/doc/manual/src/quick-start.md b/doc/manual/src/quick-start.md deleted file mode 100644 index bcca9857d..000000000 --- a/doc/manual/src/quick-start.md +++ /dev/null @@ -1,114 +0,0 @@ -# Quick Start - -
- -FIXME(Lix): This chapter is quite outdated with respect to recommended practices in 2024 and needs updating. -The commands in here will work, however, and the installation section is up to date. - -For more updated guidance, see the links on - -
- -This chapter is for impatient people who don't like reading -documentation. For more in-depth information you are kindly referred -to subsequent chapters. - -1. Install Lix: - - On Linux and macOS the easiest way to install Lix is to run the following shell command - (as a user other than root): - - ```console - $ curl -sSf -L https://install.lix.systems/lix | sh -s -- install - ``` - - For systems that **already have a Nix implementation installed**, such as NixOS systems, read our [install page](https://lix.systems/install) - - The install script will use `sudo`, so make sure you have sufficient rights. - - For other installation methods, see [here](installation/installation.md). - -1. See what installable packages are currently available in the - channel: - - ```console - $ nix-env --query --available --attr-path - nixpkgs.docbook_xml_dtd_43 docbook-xml-4.3 - nixpkgs.docbook_xml_dtd_45 docbook-xml-4.5 - nixpkgs.firefox firefox-33.0.2 - nixpkgs.hello hello-2.9 - nixpkgs.libxslt libxslt-1.1.28 - … - ``` - -1. Install some packages from the channel: - - ```console - $ nix-env --install --attr nixpkgs.hello - ``` - - This should download pre-built packages; it should not build them - locally (if it does, something went wrong). - -1. Test that they work: - - ```console - $ which hello - /home/eelco/.nix-profile/bin/hello - $ hello - Hello, world! - ``` - -1. Uninstall a package: - - ```console - $ nix-env --uninstall hello - ``` - -1. You can also test a package without installing it: - - ```console - $ nix-shell --packages hello - ``` - - This builds or downloads GNU Hello and its dependencies, then drops - you into a Bash shell where the `hello` command is present, all - without affecting your normal environment: - - ```console - [nix-shell:~]$ hello - Hello, world! - - [nix-shell:~]$ exit - - $ hello - hello: command not found - ``` - -1. To keep up-to-date with the channel, do: - - ```console - $ nix-channel --update nixpkgs - $ nix-env --upgrade '*' - ``` - - The latter command will upgrade each installed package for which - there is a “newer” version (as determined by comparing the version - numbers). - -1. If you're unhappy with the result of a `nix-env` action (e.g., an - upgraded package turned out not to work properly), you can go back: - - ```console - $ nix-env --rollback - ``` - -1. You should periodically run the Lix garbage collector to get rid of - unused packages, since uninstalls or upgrades don't actually delete - them: - - ```console - $ nix-collect-garbage --delete-old - ``` - - N.B. on NixOS there is an option [`nix.gc.automatic`](https://nixos.org/manual/nixos/stable/options#opt-nix.gc.automatic) to enable a systemd timer to automate this task. diff --git a/doc/manual/src/release-notes/meson.build b/doc/manual/src/release-notes/meson.build deleted file mode 100644 index d9ce7bdda..000000000 --- a/doc/manual/src/release-notes/meson.build +++ /dev/null @@ -1,22 +0,0 @@ -rl_next_generated = custom_target( - command : [ - 'bash', - '-euo', - 'pipefail', - '-c', - ''' - if type -p build-release-notes > /dev/null; then - build-release-notes --change-authors @CURRENT_SOURCE_DIR@/../../change-authors.yml @CURRENT_SOURCE_DIR@/../../rl-next - fi - @0@ @INPUT0@ @CURRENT_SOURCE_DIR@/../../rl-next > @DEPFILE@ - '''.format( - python.full_path(), - ), - ], - input : [ - generate_manual_deps, - ], - output : 'rl-next-generated.md', - capture : true, - depfile : 'rl-next.d', -) diff --git a/doc/manual/src/release-notes/release-notes.md b/doc/manual/src/release-notes/release-notes.md deleted file mode 100644 index cdac464ca..000000000 --- a/doc/manual/src/release-notes/release-notes.md +++ /dev/null @@ -1 +0,0 @@ -# Lix Release Notes diff --git a/doc/manual/src/release-notes/rl-0.10.1.md b/doc/manual/src/release-notes/rl-0.10.1.md deleted file mode 100644 index e1ed6558a..000000000 --- a/doc/manual/src/release-notes/rl-0.10.1.md +++ /dev/null @@ -1,5 +0,0 @@ -# Release 0.10.1 (2006-10-11) - -This release fixes two somewhat obscure bugs that occur when evaluating -Nix expressions that are stored inside the Nix store (`NIX-67`). These -do not affect most users. diff --git a/doc/manual/src/release-notes/rl-0.10.md b/doc/manual/src/release-notes/rl-0.10.md deleted file mode 100644 index 05e6dcf76..000000000 --- a/doc/manual/src/release-notes/rl-0.10.md +++ /dev/null @@ -1,212 +0,0 @@ -# Release 0.10 (2006-10-06) - -> **Note** -> -> This version of Nix uses Berkeley DB 4.4 instead of 4.3. The database -> is upgraded automatically, but you should be careful not to use old -> versions of Nix that still use Berkeley DB 4.3. In particular, if you -> use a Nix installed through Nix, you should run -> -> $ nix-store --clear-substitutes -> -> first. - -> **Warning** -> -> Also, the database schema has changed slighted to fix a performance -> issue (see below). When you run any Nix 0.10 command for the first -> time, the database will be upgraded automatically. This is -> irreversible. - - - `nix-env` usability improvements: - - - An option `--compare-versions` (or `-c`) has been added to - `nix-env - --query` to allow you to compare installed versions of packages - to available versions, or vice versa. An easy way to see if you - are up to date with what’s in your subscribed channels is - `nix-env -qc \*`. - - - `nix-env --query` now takes as arguments a list of package names - about which to show information, just like `--install`, etc.: - for example, `nix-env -q gcc`. Note that to show all - derivations, you need to specify `\*`. - - - `nix-env -i - pkgname` will now install the highest available version of - *pkgname*, rather than installing all available versions (which - would probably give collisions) (`NIX-31`). - - - `nix-env (-i|-u) --dry-run` now shows exactly which missing - paths will be built or substituted. - - - `nix-env -qa --description` shows human-readable descriptions of - packages, provided that they have a `meta.description` attribute - (which most packages in Nixpkgs don’t have yet). - - - New language features: - - - Reference scanning (which happens after each build) is much - faster and takes a constant amount of memory. - - - String interpolation. Expressions like - - "--with-freetype2-library=" + freetype + "/lib" - - can now be written as - - "--with-freetype2-library=${freetype}/lib" - - You can write arbitrary expressions within `${...}`, not just - identifiers. - - - Multi-line string literals. - - - String concatenations can now involve derivations, as in the - example `"--with-freetype2-library=" - + freetype + "/lib"`. This was not previously possible because - we need to register that a derivation that uses such a string is - dependent on `freetype`. The evaluator now properly propagates - this information. Consequently, the subpath operator (`~`) has - been deprecated. - - - Default values of function arguments can now refer to other - function arguments; that is, all arguments are in scope in the - default values (`NIX-45`). - - - Lots of new built-in primitives, such as functions for list - manipulation and integer arithmetic. See the manual for a - complete list. All primops are now available in the set - `builtins`, allowing one to test for the availability of primop - in a backwards-compatible way. - - - Real let-expressions: `let x = ...; - ... z = ...; in ...`. - - - New commands `nix-pack-closure` and `nix-unpack-closure` than can be - used to easily transfer a store path with all its dependencies to - another machine. Very convenient whenever you have some package on - your machine and you want to copy it somewhere else. - - - XML support: - - - `nix-env -q --xml` prints the installed or available packages in - an XML representation for easy processing by other tools. - - - `nix-instantiate --eval-only - --xml` prints an XML representation of the resulting term. (The - new flag `--strict` forces ‘deep’ evaluation of the result, - i.e., list elements and attributes are evaluated recursively.) - - - In Nix expressions, the primop `builtins.toXML` converts a term - to an XML representation. This is primarily useful for passing - structured information to builders. - - - You can now unambiguously specify which derivation to build or - install in `nix-env`, `nix-instantiate` and `nix-build` using the - `--attr` / `-A` flags, which takes an attribute name as argument. - (Unlike symbolic package names such as `subversion-1.4.0`, attribute - names in an attribute set are unique.) For instance, a quick way to - perform a test build of a package in Nixpkgs is `nix-build - pkgs/top-level/all-packages.nix -A - foo`. `nix-env -q - --attr` shows the attribute names corresponding to each derivation. - - - If the top-level Nix expression used by `nix-env`, `nix-instantiate` - or `nix-build` evaluates to a function whose arguments all have - default values, the function will be called automatically. Also, the - new command-line switch `--arg - name - value` can be used to specify function arguments on the command - line. - - - `nix-install-package --url - URL` allows a package to be installed directly from the given URL. - - - Nix now works behind an HTTP proxy server; just set the standard - environment variables `http_proxy`, `https_proxy`, `ftp_proxy` or - `all_proxy` appropriately. Functions such as `fetchurl` in Nixpkgs - also respect these variables. - - - `nix-build -o - symlink` allows the symlink to the build result to be named - something other than `result`. - - - Platform support: - - - Support for 64-bit platforms, provided a [suitably patched ATerm - library](http://bugzilla.sen.cwi.nl:8080/show_bug.cgi?id=606) is - used. Also, files larger than 2 GiB are now supported. - - - Added support for Cygwin (Windows, `i686-cygwin`), Mac OS X on - Intel (`i686-darwin`) and Linux on PowerPC (`powerpc-linux`). - - - Users of SMP and multicore machines will appreciate that the - number of builds to be performed in parallel can now be - specified in the configuration file in the `build-max-jobs` - setting. - - - Garbage collector improvements: - - - Open files (such as running programs) are now used as roots of - the garbage collector. This prevents programs that have been - uninstalled from being garbage collected while they are still - running. The script that detects these additional runtime roots - (`find-runtime-roots.pl`) is inherently system-specific, but it - should work on Linux and on all platforms that have the `lsof` - utility. - - - `nix-store --gc` (a.k.a. `nix-collect-garbage`) prints out the - number of bytes freed on standard output. `nix-store - --gc --print-dead` shows how many bytes would be freed by an - actual garbage collection. - - - `nix-collect-garbage -d` removes all old generations of *all* - profiles before calling the actual garbage collector (`nix-store - --gc`). This is an easy way to get rid of all old packages in - the Nix store. - - - `nix-store` now has an operation `--delete` to delete specific - paths from the Nix store. It won’t delete reachable - (non-garbage) paths unless `--ignore-liveness` is specified. - - - Berkeley DB 4.4’s process registry feature is used to recover from - crashed Nix processes. - - - A performance issue has been fixed with the `referer` table, which - stores the inverse of the `references` table (i.e., it tells you - what store paths refer to a given path). Maintaining this table - could take a quadratic amount of time, as well as a quadratic amount - of Berkeley DB log file space (in particular when running the - garbage collector) (`NIX-23`). - - - Nix now catches the `TERM` and `HUP` signals in addition to the - `INT` signal. So you can now do a `killall - nix-store` without triggering a database recovery. - - - `bsdiff` updated to version 4.3. - - - Substantial performance improvements in expression evaluation and - `nix-env -qa`, all thanks to [Valgrind](http://valgrind.org/). - Memory use has been reduced by a factor 8 or so. Big speedup by - memoisation of path hashing. - - - Lots of bug fixes, notably: - - - Make sure that the garbage collector can run successfully when - the disk is full (`NIX-18`). - - - `nix-env` now locks the profile to prevent races between - concurrent `nix-env` operations on the same profile (`NIX-7`). - - - Removed misleading messages from `nix-env -i` (e.g., - ``installing - `foo'`` followed by ``uninstalling - `foo'``) (`NIX-17`). - - - Nix source distributions are a lot smaller now since we no longer - include a full copy of the Berkeley DB source distribution (but only - the bits we need). - - - Header files are now installed so that external programs can use the - Nix libraries. diff --git a/doc/manual/src/release-notes/rl-0.11.md b/doc/manual/src/release-notes/rl-0.11.md deleted file mode 100644 index 4564db977..000000000 --- a/doc/manual/src/release-notes/rl-0.11.md +++ /dev/null @@ -1,167 +0,0 @@ -# Release 0.11 (2007-12-31) - -Nix 0.11 has many improvements over the previous stable release. The -most important improvement is secure multi-user support. It also -features many usability enhancements and language extensions, many of -them prompted by NixOS, the purely functional Linux distribution based -on Nix. Here is an (incomplete) list: - - - Secure multi-user support. A single Nix store can now be shared - between multiple (possible untrusted) users. This is an important - feature for NixOS, where it allows non-root users to install - software. The old setuid method for sharing a store between multiple - users has been removed. Details for setting up a multi-user store - can be found in the manual. - - - The new command `nix-copy-closure` gives you an easy and efficient - way to exchange software between machines. It copies the missing - parts of the closure of a set of store path to or from a remote - machine via `ssh`. - - - A new kind of string literal: strings between double single-quotes - (`''`) have indentation “intelligently” removed. This allows large - strings (such as shell scripts or configuration file fragments in - NixOS) to cleanly follow the indentation of the surrounding - expression. It also requires much less escaping, since `''` is less - common in most languages than `"`. - - - `nix-env` `--set` modifies the current generation of a profile so - that it contains exactly the specified derivation, and nothing else. - For example, `nix-env -p /nix/var/nix/profiles/browser --set - firefox` lets the profile named `browser` contain just Firefox. - - - `nix-env` now maintains meta-information about installed packages in - profiles. The meta-information is the contents of the `meta` - attribute of derivations, such as `description` or `homepage`. The - command `nix-env -q --xml - --meta` shows all meta-information. - - - `nix-env` now uses the `meta.priority` attribute of derivations to - resolve filename collisions between packages. Lower priority values - denote a higher priority. For instance, the GCC wrapper package and - the Binutils package in Nixpkgs both have a file `bin/ld`, so - previously if you tried to install both you would get a collision. - Now, on the other hand, the GCC wrapper declares a higher priority - than Binutils, so the former’s `bin/ld` is symlinked in the user - environment. - - - `nix-env -i / -u`: instead of breaking package ties by version, - break them by priority and version number. That is, if there are - multiple packages with the same name, then pick the package with the - highest priority, and only use the version if there are multiple - packages with the same priority. - - This makes it possible to mark specific versions/variant in Nixpkgs - more or less desirable than others. A typical example would be a - beta version of some package (e.g., `gcc-4.2.0rc1`) which should not - be installed even though it is the highest version, except when it - is explicitly selected (e.g., `nix-env -i - gcc-4.2.0rc1`). - - - `nix-env --set-flag` allows meta attributes of installed packages to - be modified. There are several attributes that can be usefully - modified, because they affect the behaviour of `nix-env` or the user - environment build script: - - - `meta.priority` can be changed to resolve filename clashes (see - above). - - - `meta.keep` can be set to `true` to prevent the package from - being upgraded or replaced. Useful if you want to hang on to an - older version of a package. - - - `meta.active` can be set to `false` to “disable” the package. - That is, no symlinks will be generated to the files of the - package, but it remains part of the profile (so it won’t be - garbage-collected). Set it back to `true` to re-enable the - package. - - - `nix-env -q` now has a flag `--prebuilt-only` (`-b`) that causes - `nix-env` to show only those derivations whose output is already in - the Nix store or that can be substituted (i.e., downloaded from - somewhere). In other words, it shows the packages that can be - installed “quickly”, i.e., don’t need to be built from source. The - `-b` flag is also available in `nix-env -i` and `nix-env -u` to - filter out derivations for which no pre-built binary is available. - - - The new option `--argstr` (in `nix-env`, `nix-instantiate` and - `nix-build`) is like `--arg`, except that the value is a string. For - example, `--argstr system - i686-linux` is equivalent to `--arg system - \"i686-linux\"` (note that `--argstr` prevents annoying quoting - around shell arguments). - - - `nix-store` has a new operation `--read-log` (`-l`) `paths` that - shows the build log of the given paths. - - - Nix now uses Berkeley DB 4.5. The database is upgraded - automatically, but you should be careful not to use old versions of - Nix that still use Berkeley DB 4.4. - - - The option `--max-silent-time` (corresponding to the configuration - setting `build-max-silent-time`) allows you to set a timeout on - builds — if a build produces no output on `stdout` or `stderr` for - the given number of seconds, it is terminated. This is useful for - recovering automatically from builds that are stuck in an infinite - loop. - - - `nix-channel`: each subscribed channel is its own attribute in the - top-level expression generated for the channel. This allows - disambiguation (e.g. `nix-env - -i -A nixpkgs_unstable.firefox`). - - - The substitutes table has been removed from the database. This makes - operations such as `nix-pull` and `nix-channel --update` much, much - faster. - - - `nix-pull` now supports bzip2-compressed manifests. This speeds up - channels. - - - `nix-prefetch-url` now has a limited form of caching. This is used - by `nix-channel` to prevent unnecessary downloads when the channel - hasn’t changed. - - - `nix-prefetch-url` now by default computes the SHA-256 hash of the - file instead of the MD5 hash. In calls to `fetchurl` you should pass - the `sha256` attribute instead of `md5`. You can pass either a - hexadecimal or a base-32 encoding of the hash. - - - Nix can now perform builds in an automatically generated “chroot”. - This prevents a builder from accessing stuff outside of the Nix - store, and thus helps ensure purity. This is an experimental - feature. - - - The new command `nix-store - --optimise` reduces Nix store disk space usage by finding identical - files in the store and hard-linking them to each other. It typically - reduces the size of the store by something like 25-35%. - - - `~/.nix-defexpr` can now be a directory, in which case the Nix - expressions in that directory are combined into an attribute set, - with the file names used as the names of the attributes. The command - `nix-env - --import` (which set the `~/.nix-defexpr` symlink) is removed. - - - Derivations can specify the new special attribute - `allowedReferences` to enforce that the references in the output of - a derivation are a subset of a declared set of paths. For example, - if `allowedReferences` is an empty list, then the output must not - have any references. This is used in NixOS to check that generated - files such as initial ramdisks for booting Linux don’t have any - dependencies. - - - The new attribute `exportReferencesGraph` allows builders access to - the references graph of their inputs. This is used in NixOS for - tasks such as generating ISO-9660 images that contain a Nix store - populated with the closure of certain paths. - - - Fixed-output derivations (like `fetchurl`) can define the attribute - `impureEnvVars` to allow external environment variables to be passed - to builders. This is used in Nixpkgs to support proxy configuration, - among other things. - - - Several new built-in functions: `builtins.attrNames`, - `builtins.filterSource`, `builtins.isAttrs`, `builtins.isFunction`, - `builtins.listToAttrs`, `builtins.stringLength`, `builtins.sub`, - `builtins.substring`, `throw`, `builtins.trace`, - `builtins.readFile`. diff --git a/doc/manual/src/release-notes/rl-0.12.md b/doc/manual/src/release-notes/rl-0.12.md deleted file mode 100644 index 7042abb4c..000000000 --- a/doc/manual/src/release-notes/rl-0.12.md +++ /dev/null @@ -1,123 +0,0 @@ -# Release 0.12 (2008-11-20) - - - Nix no longer uses Berkeley DB to store Nix store metadata. The - principal advantages of the new storage scheme are: it works - properly over decent implementations of NFS (allowing Nix stores to - be shared between multiple machines); no recovery is needed when a - Nix process crashes; no write access is needed for read-only - operations; no more running out of Berkeley DB locks on certain - operations. - - You still need to compile Nix with Berkeley DB support if you want - Nix to automatically convert your old Nix store to the new schema. - If you don’t need this, you can build Nix with the `configure` - option `--disable-old-db-compat`. - - After the automatic conversion to the new schema, you can delete the - old Berkeley DB files: - - $ cd /nix/var/nix/db - $ rm __db* log.* derivers references referrers reserved validpaths DB_CONFIG - - The new metadata is stored in the directories `/nix/var/nix/db/info` - and `/nix/var/nix/db/referrer`. Though the metadata is stored in - human-readable plain-text files, they are not intended to be - human-editable, as Nix is rather strict about the format. - - The new storage schema may or may not require less disk space than - the Berkeley DB environment, mostly depending on the cluster size of - your file system. With 1 KiB clusters (which seems to be the `ext3` - default nowadays) it usually takes up much less space. - - - There is a new substituter that copies paths directly from other - (remote) Nix stores mounted somewhere in the filesystem. For - instance, you can speed up an installation by mounting some remote - Nix store that already has the packages in question via NFS or - `sshfs`. The environment variable `NIX_OTHER_STORES` specifies the - locations of the remote Nix directories, e.g. `/mnt/remote-fs/nix`. - - - New `nix-store` operations `--dump-db` and `--load-db` to dump and - reload the Nix database. - - - The garbage collector has a number of new options to allow only some - of the garbage to be deleted. The option `--max-freed N` tells the - collector to stop after at least *N* bytes have been deleted. The - option `--max-links - N` tells it to stop after the link count on `/nix/store` has dropped - below *N*. This is useful for very large Nix stores on filesystems - with a 32000 subdirectories limit (like `ext3`). The option - `--use-atime` causes store paths to be deleted in order of ascending - last access time. This allows non-recently used stuff to be deleted. - The option `--max-atime time` specifies an upper limit to the last - accessed time of paths that may be deleted. For instance, - - ``` - $ nix-store --gc -v --max-atime $(date +%s -d "2 months ago") - ``` - - deletes everything that hasn’t been accessed in two months. - - - `nix-env` now uses optimistic profile locking when performing an - operation like installing or upgrading, instead of setting an - exclusive lock on the profile. This allows multiple `nix-env -i / -u - / -e` operations on the same profile in parallel. If a `nix-env` - operation sees at the end that the profile was changed in the - meantime by another process, it will just restart. This is generally - cheap because the build results are still in the Nix store. - - - The option `--dry-run` is now supported by `nix-store -r` and - `nix-build`. - - - The information previously shown by `--dry-run` (i.e., which - derivations will be built and which paths will be substituted) is - now always shown by `nix-env`, `nix-store -r` and `nix-build`. The - total download size of substitutable paths is now also shown. For - instance, a build will show something like - - the following derivations will be built: - /nix/store/129sbxnk5n466zg6r1qmq1xjv9zymyy7-activate-configuration.sh.drv - /nix/store/7mzy971rdm8l566ch8hgxaf89x7lr7ik-upstart-jobs.drv - ... - the following paths will be downloaded/copied (30.02 MiB): - /nix/store/4m8pvgy2dcjgppf5b4cj5l6wyshjhalj-samba-3.2.4 - /nix/store/7h1kwcj29ip8vk26rhmx6bfjraxp0g4l-libunwind-0.98.6 - ... - - - Language features: - - - @-patterns as in Haskell. For instance, in a function definition - - f = args @ {x, y, z}: ...; - - `args` refers to the argument as a whole, which is further - pattern-matched against the attribute set pattern `{x, y, z}`. - - - “`...`” (ellipsis) patterns. An attribute set pattern can now - say `...` at the end of the attribute name list to specify that - the function takes *at least* the listed attributes, while - ignoring additional attributes. For instance, - - {stdenv, fetchurl, fuse, ...}: ... - - defines a function that accepts any attribute set that includes - at least the three listed attributes. - - - New primops: `builtins.parseDrvName` (split a package name - string like `"nix-0.12pre12876"` into its name and version - components, e.g. `"nix"` and `"0.12pre12876"`), - `builtins.compareVersions` (compare two version strings using - the same algorithm that `nix-env` uses), `builtins.length` - (efficiently compute the length of a list), `builtins.mul` - (integer multiplication), `builtins.div` (integer division). - - - `nix-prefetch-url` now supports `mirror://` URLs, provided that the - environment variable `NIXPKGS_ALL` points at a Nixpkgs tree. - - - Removed the commands `nix-pack-closure` and `nix-unpack-closure`. - You can do almost the same thing but much more efficiently by doing - `nix-store --export - $(nix-store -qR paths) > closure` and `nix-store --import < - closure`. - - - Lots of bug fixes, including a big performance bug in the handling - of `with`-expressions. diff --git a/doc/manual/src/release-notes/rl-0.13.md b/doc/manual/src/release-notes/rl-0.13.md deleted file mode 100644 index bdb750051..000000000 --- a/doc/manual/src/release-notes/rl-0.13.md +++ /dev/null @@ -1,55 +0,0 @@ -# Release 0.13 (2009-11-05) - -This is primarily a bug fix release. It has some new features: - - - Syntactic sugar for writing nested attribute sets. Instead of - - { - foo = { - bar = 123; - xyzzy = true; - }; - a = { b = { c = "d"; }; }; - } - - you can write - - { - foo.bar = 123; - foo.xyzzy = true; - a.b.c = "d"; - } - - This is useful, for instance, in NixOS configuration files. - - - Support for Nix channels generated by Hydra, the Nix-based - continuous build system. (Hydra generates NAR archives on the fly, - so the size and hash of these archives isn’t known in advance.) - - - Support `i686-linux` builds directly on `x86_64-linux` Nix - installations. This is implemented using the `personality()` - syscall, which causes `uname` to return `i686` in child processes. - - - Various improvements to the `chroot` support. Building in a `chroot` - works quite well now. - - - Nix no longer blocks if it tries to build a path and another process - is already building the same path. Instead it tries to build another - buildable path first. This improves parallelism. - - - Support for large (\> 4 GiB) files in NAR archives. - - - Various (performance) improvements to the remote build mechanism. - - - New primops: `builtins.addErrorContext` (to add a string to stack - traces — useful for debugging), `builtins.isBool`, - `builtins.isString`, `builtins.isInt`, `builtins.intersectAttrs`. - - - OpenSolaris support (Sander van der Burg). - - - Stack traces are no longer displayed unless the `--show-trace` - option is used. - - - The scoping rules for `inherit - (e) ...` in recursive attribute sets have changed. The expression - *e* can now refer to the attributes defined in the containing set. diff --git a/doc/manual/src/release-notes/rl-0.14.md b/doc/manual/src/release-notes/rl-0.14.md deleted file mode 100644 index 9d58f2072..000000000 --- a/doc/manual/src/release-notes/rl-0.14.md +++ /dev/null @@ -1,21 +0,0 @@ -# Release 0.14 (2010-02-04) - -This release has the following improvements: - - - The garbage collector now starts deleting garbage much faster than - before. It no longer determines liveness of all paths in the store, - but does so on demand. - - - Added a new operation, `nix-store --query - --roots`, that shows the garbage collector roots that directly or - indirectly point to the given store paths. - - - Removed support for converting Berkeley DB-based Nix databases to - the new schema. - - - Removed the `--use-atime` and `--max-atime` garbage collector - options. They were not very useful in practice. - - - On Windows, Nix now requires Cygwin 1.7.x. - - - A few bug fixes. diff --git a/doc/manual/src/release-notes/rl-0.15.md b/doc/manual/src/release-notes/rl-0.15.md deleted file mode 100644 index 48e2a6f1b..000000000 --- a/doc/manual/src/release-notes/rl-0.15.md +++ /dev/null @@ -1,5 +0,0 @@ -# Release 0.15 (2010-03-17) - -This is a bug-fix release. Among other things, it fixes building on Mac -OS X (Snow Leopard), and improves the contents of `/etc/passwd` and -`/etc/group` in `chroot` builds. diff --git a/doc/manual/src/release-notes/rl-0.16.md b/doc/manual/src/release-notes/rl-0.16.md deleted file mode 100644 index 23ac53786..000000000 --- a/doc/manual/src/release-notes/rl-0.16.md +++ /dev/null @@ -1,25 +0,0 @@ -# Release 0.16 (2010-08-17) - -This release has the following improvements: - - - The Nix expression evaluator is now much faster in most cases: - typically, [3 to 8 times compared to the old - implementation](http://www.mail-archive.com/nix-dev@cs.uu.nl/msg04113.html). - It also uses less memory. It no longer depends on the ATerm library. - - - Support for configurable parallelism inside builders. Build scripts - have always had the ability to perform multiple build actions in - parallel (for instance, by running `make -j - 2`), but this was not desirable because the number of actions to be - performed in parallel was not configurable. Nix now has an option - `--cores - N` as well as a configuration setting `build-cores = - N` that causes the environment variable `NIX_BUILD_CORES` to be set - to *N* when the builder is invoked. The builder can use this at its - discretion to perform a parallel build, e.g., by calling `make -j - N`. In Nixpkgs, this can be enabled on a per-package basis by - setting the derivation attribute `enableParallelBuilding` to `true`. - - - `nix-store -q` now supports XML output through the `--xml` flag. - - - Several bug fixes. diff --git a/doc/manual/src/release-notes/rl-0.5.md b/doc/manual/src/release-notes/rl-0.5.md deleted file mode 100644 index 5cff2da0b..000000000 --- a/doc/manual/src/release-notes/rl-0.5.md +++ /dev/null @@ -1,3 +0,0 @@ -# Release 0.5 and earlier - -Please refer to the Subversion commit log messages. diff --git a/doc/manual/src/release-notes/rl-0.6.md b/doc/manual/src/release-notes/rl-0.6.md deleted file mode 100644 index 7fa0324eb..000000000 --- a/doc/manual/src/release-notes/rl-0.6.md +++ /dev/null @@ -1,64 +0,0 @@ -# Release 0.6 (2004-11-14) - - - Rewrite of the normalisation engine. - - - Multiple builds can now be performed in parallel (option `-j`). - - - Distributed builds. Nix can now call a shell script to forward - builds to Nix installations on remote machines, which may or may - not be of the same platform type. - - - Option `--fallback` allows recovery from broken substitutes. - - - Option `--keep-going` causes building of other (unaffected) - derivations to continue if one failed. - - - Improvements to the garbage collector (i.e., it should actually work - now). - - - Setuid Nix installations allow a Nix store to be shared among - multiple users. - - - Substitute registration is much faster now. - - - A utility `nix-build` to build a Nix expression and create a symlink - to the result int the current directory; useful for testing Nix - derivations. - - - Manual updates. - - - `nix-env` changes: - - - Derivations for other platforms are filtered out (which can be - overridden using `--system-filter`). - - - `--install` by default now uninstall previous derivations with - the same name. - - - `--upgrade` allows upgrading to a specific version. - - - New operation `--delete-generations` to remove profile - generations (necessary for effective garbage collection). - - - Nicer output (sorted, columnised). - - - More sensible verbosity levels all around (builder output is now - shown always, unless `-Q` is given). - - - Nix expression language changes: - - - New language construct: `with - E1; - E2` brings all attributes defined in the attribute set *E1* in - scope in *E2*. - - - Added a `map` function. - - - Various new operators (e.g., string concatenation). - - - Expression evaluation is much faster. - - - An Emacs mode for editing Nix expressions (with syntax highlighting - and indentation) has been added. - - - Many bug fixes. diff --git a/doc/manual/src/release-notes/rl-0.7.md b/doc/manual/src/release-notes/rl-0.7.md deleted file mode 100644 index d873fe890..000000000 --- a/doc/manual/src/release-notes/rl-0.7.md +++ /dev/null @@ -1,21 +0,0 @@ -# Release 0.7 (2005-01-12) - - - Binary patching. When upgrading components using pre-built binaries - (through nix-pull / nix-channel), Nix can automatically download and - apply binary patches to already installed components instead of full - downloads. Patching is “smart”: if there is a *sequence* of patches - to an installed component, Nix will use it. Patches are currently - generated automatically between Nixpkgs (pre-)releases. - - - Simplifications to the substitute mechanism. - - - Nix-pull now stores downloaded manifests in - `/nix/var/nix/manifests`. - - - Metadata on files in the Nix store is canonicalised after builds: - the last-modified timestamp is set to 0 (00:00:00 1/1/1970), the - mode is set to 0444 or 0555 (readable and possibly executable by - all; setuid/setgid bits are dropped), and the group is set to the - default. This ensures that the result of a build and an installation - through a substitute is the same; and that timestamp dependencies - are revealed. diff --git a/doc/manual/src/release-notes/rl-0.8.1.md b/doc/manual/src/release-notes/rl-0.8.1.md deleted file mode 100644 index 7629f81cb..000000000 --- a/doc/manual/src/release-notes/rl-0.8.1.md +++ /dev/null @@ -1,8 +0,0 @@ -# Release 0.8.1 (2005-04-13) - -This is a bug fix release. - - - Patch downloading was broken. - - - The garbage collector would not delete paths that had references - from invalid (but substitutable) paths. diff --git a/doc/manual/src/release-notes/rl-0.8.md b/doc/manual/src/release-notes/rl-0.8.md deleted file mode 100644 index 5ba6e0e72..000000000 --- a/doc/manual/src/release-notes/rl-0.8.md +++ /dev/null @@ -1,166 +0,0 @@ -# Release 0.8 (2005-04-11) - -NOTE: the hashing scheme in Nix 0.8 changed (as detailed below). As a -result, `nix-pull` manifests and channels built for Nix 0.7 and below -will not work anymore. However, the Nix expression language has not -changed, so you can still build from source. Also, existing user -environments continue to work. Nix 0.8 will automatically upgrade the -database schema of previous installations when it is first run. - -If you get the error message - - you have an old-style manifest `/nix/var/nix/manifests/[...]'; please - delete it - -you should delete previously downloaded manifests: - - $ rm /nix/var/nix/manifests/* - -If `nix-channel` gives the error message - - manifest `http://catamaran.labs.cs.uu.nl/dist/nix/channels/[channel]/MANIFEST' - is too old (i.e., for Nix <= 0.7) - -then you should unsubscribe from the offending channel (`nix-channel ---remove -URL`; leave out `/MANIFEST`), and subscribe to the same URL, with -`channels` replaced by `channels-v3` (e.g., -). - -Nix 0.8 has the following improvements: - - - The cryptographic hashes used in store paths are now 160 bits long, - but encoded in base-32 so that they are still only 32 characters - long (e.g., - `/nix/store/csw87wag8bqlqk7ipllbwypb14xainap-atk-1.9.0`). (This is - actually a 160 bit truncation of a SHA-256 hash.) - - - Big cleanups and simplifications of the basic store semantics. The - notion of “closure store expressions” is gone (and so is the notion - of “successors”); the file system references of a store path are now - just stored in the database. - - For instance, given any store path, you can query its closure: - - $ nix-store -qR $(which firefox) - ... lots of paths ... - - Also, Nix now remembers for each store path the derivation that - built it (the “deriver”): - - $ nix-store -qR $(which firefox) - /nix/store/4b0jx7vq80l9aqcnkszxhymsf1ffa5jd-firefox-1.0.1.drv - - So to see the build-time dependencies, you can do - - $ nix-store -qR $(nix-store -qd $(which firefox)) - - or, in a nicer format: - - $ nix-store -q --tree $(nix-store -qd $(which firefox)) - - File system references are also stored in reverse. For instance, you - can query all paths that directly or indirectly use a certain Glibc: - - $ nix-store -q --referrers-closure \ - /nix/store/8lz9yc6zgmc0vlqmn2ipcpkjlmbi51vv-glibc-2.3.4 - - - The concept of fixed-output derivations has been formalised. - Previously, functions such as `fetchurl` in Nixpkgs used a hack - (namely, explicitly specifying a store path hash) to prevent changes - to, say, the URL of the file from propagating upwards through the - dependency graph, causing rebuilds of everything. This can now be - done cleanly by specifying the `outputHash` and `outputHashAlgo` - attributes. Nix itself checks that the content of the output has the - specified hash. (This is important for maintaining certain - invariants necessary for future work on secure shared stores.) - - - One-click installation :-) It is now possible to install any - top-level component in Nixpkgs directly, through the web — see, - e.g., . All you - have to do is associate `/nix/bin/nix-install-package` with the MIME - type `application/nix-package` (or the extension `.nixpkg`), and - clicking on a package link will cause it to be installed, with all - appropriate dependencies. If you just want to install some specific - application, this is easier than subscribing to a channel. - - - `nix-store -r - PATHS` now builds all the derivations PATHS in parallel. Previously - it did them sequentially (though exploiting possible parallelism - between subderivations). This is nice for build farms. - - - `nix-channel` has new operations `--list` and `--remove`. - - - New ways of installing components into user environments: - - - Copy from another user environment: - - $ nix-env -i --from-profile .../other-profile firefox - - - Install a store derivation directly (bypassing the Nix - expression language entirely): - - $ nix-env -i /nix/store/z58v41v21xd3...-aterm-2.3.1.drv - - (This is used to implement `nix-install-package`, which is - therefore immune to evolution in the Nix expression language.) - - - Install an already built store path directly: - - $ nix-env -i /nix/store/hsyj5pbn0d9i...-aterm-2.3.1 - - - Install the result of a Nix expression specified as a - command-line argument: - - $ nix-env -f .../i686-linux.nix -i -E 'x: x.firefoxWrapper' - - The difference with the normal installation mode is that `-E` - does not use the `name` attributes of derivations. Therefore, - this can be used to disambiguate multiple derivations with the - same name. - - - A hash of the contents of a store path is now stored in the database - after a successful build. This allows you to check whether store - paths have been tampered with: `nix-store - --verify --check-contents`. - - - Implemented a concurrent garbage collector. It is now always safe to - run the garbage collector, even if other Nix operations are - happening simultaneously. - - However, there can still be GC races if you use `nix-instantiate` - and `nix-store - --realise` directly to build things. To prevent races, use the - `--add-root` flag of those commands. - - - The garbage collector now finally deletes paths in the right order - (i.e., topologically sorted under the “references” relation), thus - making it safe to interrupt the collector without risking a store - that violates the closure invariant. - - - Likewise, the substitute mechanism now downloads files in the right - order, thus preserving the closure invariant at all times. - - - The result of `nix-build` is now registered as a root of the garbage - collector. If the `./result` link is deleted, the GC root disappears - automatically. - - - The behaviour of the garbage collector can be changed globally by - setting options in `/nix/etc/nix/nix.conf`. - - - `gc-keep-derivations` specifies whether deriver links should be - followed when searching for live paths. - - - `gc-keep-outputs` specifies whether outputs of derivations - should be followed when searching for live paths. - - - `env-keep-derivations` specifies whether user environments - should store the paths of derivations when they are added (thus - keeping the derivations alive). - - - New `nix-env` query flags `--drv-path` and `--out-path`. - - - `fetchurl` allows SHA-1 and SHA-256 in addition to MD5. Just specify - the attribute `sha1` or `sha256` instead of `md5`. - - - Manual updates. diff --git a/doc/manual/src/release-notes/rl-0.9.1.md b/doc/manual/src/release-notes/rl-0.9.1.md deleted file mode 100644 index 9c20eed1b..000000000 --- a/doc/manual/src/release-notes/rl-0.9.1.md +++ /dev/null @@ -1,4 +0,0 @@ -# Release 0.9.1 (2005-09-20) - -This bug fix release addresses a problem with the ATerm library when the -`--with-aterm` flag in `configure` was *not* used. diff --git a/doc/manual/src/release-notes/rl-0.9.2.md b/doc/manual/src/release-notes/rl-0.9.2.md deleted file mode 100644 index 0caaf28de..000000000 --- a/doc/manual/src/release-notes/rl-0.9.2.md +++ /dev/null @@ -1,11 +0,0 @@ -# Release 0.9.2 (2005-09-21) - -This bug fix release fixes two problems on Mac OS X: - - - If Nix was linked against statically linked versions of the ATerm or - Berkeley DB library, there would be dynamic link errors at runtime. - - - `nix-pull` and `nix-push` intermittently failed due to race - conditions involving pipes and child processes with error messages - such as `open2: open(GLOB(0x180b2e4), >&=9) failed: Bad - file descriptor at /nix/bin/nix-pull line 77` (issue `NIX-14`). diff --git a/doc/manual/src/release-notes/rl-0.9.md b/doc/manual/src/release-notes/rl-0.9.md deleted file mode 100644 index a08aa38c4..000000000 --- a/doc/manual/src/release-notes/rl-0.9.md +++ /dev/null @@ -1,72 +0,0 @@ -# Release 0.9 (2005-09-16) - -NOTE: this version of Nix uses Berkeley DB 4.3 instead of 4.2. The -database is upgraded automatically, but you should be careful not to use -old versions of Nix that still use Berkeley DB 4.2. In particular, if -you use a Nix installed through Nix, you should run - - $ nix-store --clear-substitutes - -first. - - - Unpacking of patch sequences is much faster now since we no longer - do redundant unpacking and repacking of intermediate paths. - - - Nix now uses Berkeley DB 4.3. - - - The `derivation` primitive is lazier. Attributes of dependent - derivations can mutually refer to each other (as long as there are - no data dependencies on the `outPath` and `drvPath` attributes - computed by `derivation`). - - For example, the expression `derivation - attrs` now evaluates to (essentially) - - attrs // { - type = "derivation"; - outPath = derivation! attrs; - drvPath = derivation! attrs; - } - - where `derivation!` is a primop that does the actual derivation - instantiation (i.e., it does what `derivation` used to do). The - advantage is that it allows commands such as `nix-env -qa` and - `nix-env -i` to be much faster since they no longer need to - instantiate all derivations, just the `name` attribute. - - Also, it allows derivations to cyclically reference each other, for - example, - - webServer = derivation { - ... - hostName = "svn.cs.uu.nl"; - services = [svnService]; - }; - - svnService = derivation { - ... - hostName = webServer.hostName; - }; - - Previously, this would yield a black hole (infinite recursion). - - - `nix-build` now defaults to using `./default.nix` if no Nix - expression is specified. - - - `nix-instantiate`, when applied to a Nix expression that evaluates - to a function, will call the function automatically if all its - arguments have defaults. - - - Nix now uses libtool to build dynamic libraries. This reduces the - size of executables. - - - A new list concatenation operator `++`. For example, `[1 2 3] ++ - [4 5 - 6]` evaluates to `[1 2 3 4 5 - 6]`. - - - Some currently undocumented primops to support low-level build - management using Nix (i.e., using Nix as a Make replacement). See - the commit messages for `r3578` and `r3580`. - - - Various bug fixes and performance improvements. diff --git a/doc/manual/src/release-notes/rl-1.0.md b/doc/manual/src/release-notes/rl-1.0.md deleted file mode 100644 index cdb257787..000000000 --- a/doc/manual/src/release-notes/rl-1.0.md +++ /dev/null @@ -1,68 +0,0 @@ -# Release 1.0 (2012-05-11) - -There have been numerous improvements and bug fixes since the previous -release. Here are the most significant: - - - Nix can now optionally use the Boehm garbage collector. This - significantly reduces the Nix evaluator’s memory footprint, - especially when evaluating large NixOS system configurations. It can - be enabled using the `--enable-gc` configure option. - - - Nix now uses SQLite for its database. This is faster and more - flexible than the old *ad hoc* format. SQLite is also used to cache - the manifests in `/nix/var/nix/manifests`, resulting in a - significant speedup. - - - Nix now has an search path for expressions. The search path is set - using the environment variable `NIX_PATH` and the `-I` command line - option. In Nix expressions, paths between angle brackets are used to - specify files that must be looked up in the search path. For - instance, the expression `` looks for a file - `nixpkgs/default.nix` relative to every element in the search path. - - - The new command `nix-build --run-env` builds all dependencies of a - derivation, then starts a shell in an environment containing all - variables from the derivation. This is useful for reproducing the - environment of a derivation for development. - - - The new command `nix-store --verify-path` verifies that the contents - of a store path have not changed. - - - The new command `nix-store --print-env` prints out the environment - of a derivation in a format that can be evaluated by a shell. - - - Attribute names can now be arbitrary strings. For instance, you can - write `{ "foo-1.2" = …; "bla bla" = …; }."bla - bla"`. - - - Attribute selection can now provide a default value using the `or` - operator. For instance, the expression `x.y.z or e` evaluates to the - attribute `x.y.z` if it exists, and `e` otherwise. - - - The right-hand side of the `?` operator can now be an attribute - path, e.g., `attrs ? - a.b.c`. - - - On Linux, Nix will now make files in the Nix store immutable on - filesystems that support it. This prevents accidental modification - of files in the store by the root user. - - - Nix has preliminary support for derivations with multiple outputs. - This is useful because it allows parts of a package to be deployed - and garbage-collected separately. For instance, development parts of - a package such as header files or static libraries would typically - not be part of the closure of an application, resulting in reduced - disk usage and installation time. - - - The Nix store garbage collector is faster and holds the global lock - for a shorter amount of time. - - - The option `--timeout` (corresponding to the configuration setting - `build-timeout`) allows you to set an absolute timeout on builds — - if a build runs for more than the given number of seconds, it is - terminated. This is useful for recovering automatically from builds - that are stuck in an infinite loop but keep producing output, and - for which `--max-silent-time` is ineffective. - - - Nix development has moved to GitHub - (). diff --git a/doc/manual/src/release-notes/rl-1.1.md b/doc/manual/src/release-notes/rl-1.1.md deleted file mode 100644 index 665dd92a2..000000000 --- a/doc/manual/src/release-notes/rl-1.1.md +++ /dev/null @@ -1,61 +0,0 @@ -# Release 1.1 (2012-07-18) - -This release has the following improvements: - - - On Linux, when doing a chroot build, Nix now uses various namespace - features provided by the Linux kernel to improve build isolation. - Namely: - - - The private network namespace ensures that builders cannot talk - to the outside world (or vice versa): each build only sees a - private loopback interface. This also means that two concurrent - builds can listen on the same port (e.g. as part of a test) - without conflicting with each other. - - - The PID namespace causes each build to start as PID 1. Processes - outside of the chroot are not visible to those on the inside. On - the other hand, processes inside the chroot *are* visible from - the outside (though with different PIDs). - - - The IPC namespace prevents the builder from communicating with - outside processes using SysV IPC mechanisms (shared memory, - message queues, semaphores). It also ensures that all IPC - objects are destroyed when the builder exits. - - - The UTS namespace ensures that builders see a hostname of - `localhost` rather than the actual hostname. - - - The private mount namespace was already used by Nix to ensure - that the bind-mounts used to set up the chroot are cleaned up - automatically. - - - Build logs are now compressed using `bzip2`. The command `nix-store - -l` decompresses them on the fly. This can be disabled by setting - the option `build-compress-log` to `false`. - - - The creation of build logs in `/nix/var/log/nix/drvs` can be - disabled by setting the new option `build-keep-log` to `false`. This - is useful, for instance, for Hydra build machines. - - - Nix now reserves some space in `/nix/var/nix/db/reserved` to ensure - that the garbage collector can run successfully if the disk is full. - This is necessary because SQLite transactions fail if the disk is - full. - - - Added a basic `fetchurl` function. This is not intended to replace - the `fetchurl` in Nixpkgs, but is useful for bootstrapping; e.g., it - will allow us to get rid of the bootstrap binaries in the Nixpkgs - source tree and download them instead. You can use it by doing - `import { url = - url; sha256 = - "hash"; }`. (Shea Levy) - - - Improved RPM spec file. (Michel Alexandre Salim) - - - Support for on-demand socket-based activation in the Nix daemon with - `systemd`. - - - Added a manpage for nix.conf5. - - - When using the Nix daemon, the `-s` flag in `nix-env -qa` is now - much faster. diff --git a/doc/manual/src/release-notes/rl-1.10.md b/doc/manual/src/release-notes/rl-1.10.md deleted file mode 100644 index 2bb859536..000000000 --- a/doc/manual/src/release-notes/rl-1.10.md +++ /dev/null @@ -1,31 +0,0 @@ -# Release 1.10 (2015-09-03) - -This is primarily a bug fix release. It also has a number of new -features: - - - A number of builtin functions have been added to reduce - Nixpkgs/NixOS evaluation time and memory consumption: `all`, `any`, - `concatStringsSep`, `foldl’`, `genList`, `replaceStrings`, `sort`. - - - The garbage collector is more robust when the disk is full. - - - Nix supports a new API for building derivations that doesn’t require - a `.drv` file to be present on disk; it only requires an in-memory - representation of the derivation. This is used by the Hydra - continuous build system to make remote builds more efficient. - - - The function `` now uses a *builtin* builder (i.e. - it doesn’t require starting an external process; the download is - performed by Nix itself). This ensures that derivation paths don’t - change when Nix is upgraded, and obviates the need for ugly hacks to - support chroot execution. - - - `--version -v` now prints some configuration information, in - particular what compile-time optional features are enabled, and the - paths of various directories. - - - Build users have their supplementary groups set correctly. - -This release has contributions from Eelco Dolstra, Guillaume Maudoux, -Iwan Aucamp, Jaka Hudoklin, Kirill Elagin, Ludovic Courtès, Manolis -Ragkousis, Nicolas B. Pierron and Shea Levy. diff --git a/doc/manual/src/release-notes/rl-1.11.10.md b/doc/manual/src/release-notes/rl-1.11.10.md deleted file mode 100644 index d1efe1d0b..000000000 --- a/doc/manual/src/release-notes/rl-1.11.10.md +++ /dev/null @@ -1,21 +0,0 @@ -# Release 1.11.10 (2017-06-12) - -This release fixes a security bug in Nix’s “build user” build isolation -mechanism. Previously, Nix builders had the ability to create setuid -binaries owned by a `nixbld` user. Such a binary could then be used by -an attacker to assume a `nixbld` identity and interfere with subsequent -builds running under the same UID. - -To prevent this issue, Nix now disallows builders to create setuid and -setgid binaries. On Linux, this is done using a seccomp BPF filter. Note -that this imposes a small performance penalty (e.g. 1% when building GNU -Hello). Using seccomp, we now also prevent the creation of extended -attributes and POSIX ACLs since these cannot be represented in the NAR -format and (in the case of POSIX ACLs) allow bypassing regular Nix store -permissions. On macOS, the restriction is implemented using the existing -sandbox mechanism, which now uses a minimal “allow all except the -creation of setuid/setgid binaries” profile when regular sandboxing is -disabled. On other platforms, the “build user” mechanism is now -disabled. - -Thanks go to Linus Heckemann for discovering and reporting this bug. diff --git a/doc/manual/src/release-notes/rl-1.11.md b/doc/manual/src/release-notes/rl-1.11.md deleted file mode 100644 index 8108114b8..000000000 --- a/doc/manual/src/release-notes/rl-1.11.md +++ /dev/null @@ -1,87 +0,0 @@ -# Release 1.11 (2016-01-19) - -This is primarily a bug fix release. It also has a number of new -features: - - - `nix-prefetch-url` can now download URLs specified in a Nix - expression. For example, - - $ nix-prefetch-url -A hello.src - - will prefetch the file specified by the `fetchurl` call in the - attribute `hello.src` from the Nix expression in the current - directory, and print the cryptographic hash of the resulting file on - stdout. This differs from `nix-build -A - hello.src` in that it doesn't verify the hash, and is thus useful - when you’re updating a Nix expression. - - You can also prefetch the result of functions that unpack a tarball, - such as `fetchFromGitHub`. For example: - - $ nix-prefetch-url --unpack https://github.com/NixOS/patchelf/archive/0.8.tar.gz - - or from a Nix expression: - - $ nix-prefetch-url -A nix-repl.src - - - The builtin function `` now supports downloading - and unpacking NARs. This removes the need to have multiple downloads - in the Nixpkgs stdenv bootstrap process (like a separate busybox - binary for Linux, or curl/mkdir/sh/bzip2 for Darwin). Now all those - files can be combined into a single NAR, optionally compressed using - `xz`. - - - Nix now supports SHA-512 hashes for verifying fixed-output - derivations, and in `builtins.hashString`. - - - The new flag `--option build-repeat - N` will cause every build to be executed *N*+1 times. If the build - output differs between any round, the build is rejected, and the - output paths are not registered as valid. This is primarily useful - to verify build determinism. (We already had a `--check` option to - repeat a previously succeeded build. However, with `--check`, - non-deterministic builds are registered in the DB. Preventing that - is useful for Hydra to ensure that non-deterministic builds don't - end up getting published to the binary cache.) - - - The options `--check` and `--option - build-repeat N`, if they detect a difference between two runs of the - same derivation and `-K` is given, will make the output of the other - run available under `store-path-check`. This makes it easier to - investigate the non-determinism using tools like `diffoscope`, e.g., - - $ nix-build pkgs/stdenv/linux -A stage1.pkgs.zlib --check -K - error: derivation ‘/nix/store/l54i8wlw2265…-zlib-1.2.8.drv’ may not - be deterministic: output ‘/nix/store/11a27shh6n2i…-zlib-1.2.8’ - differs from ‘/nix/store/11a27shh6n2i…-zlib-1.2.8-check’ - - $ diffoscope /nix/store/11a27shh6n2i…-zlib-1.2.8 /nix/store/11a27shh6n2i…-zlib-1.2.8-check - … - ├── lib/libz.a - │ ├── metadata - │ │ @@ -1,15 +1,15 @@ - │ │ -rw-r--r-- 30001/30000 3096 Jan 12 15:20 2016 adler32.o - … - │ │ +rw-r--r-- 30001/30000 3096 Jan 12 15:28 2016 adler32.o - … - - - Improved FreeBSD support. - - - `nix-env -qa --xml --meta` now prints license information. - - - The maximum number of parallel TCP connections that the binary cache - substituter will use has been decreased from 150 to 25. This should - prevent upsetting some broken NAT routers, and also improves - performance. - - - All "chroot"-containing strings got renamed to "sandbox". In - particular, some Nix options got renamed, but the old names are - still accepted as lower-priority aliases. - -This release has contributions from Anders Claesson, Anthony Cowley, -Bjørn Forsman, Brian McKenna, Danny Wilson, davidak, Eelco Dolstra, -Fabian Schmitthenner, FrankHB, Ilya Novoselov, janus, Jim Garrison, John -Ericson, Jude Taylor, Ludovic Courtès, Manuel Jacob, Mathnerd314, Pascal -Wittmann, Peter Simons, Philip Potter, Preston Bennes, Rommel M. -Martinez, Sander van der Burg, Shea Levy, Tim Cuthbertson, Tuomas -Tynkkynen, Utku Demir and Vladimír Čunát. diff --git a/doc/manual/src/release-notes/rl-1.2.md b/doc/manual/src/release-notes/rl-1.2.md deleted file mode 100644 index 0a30e8909..000000000 --- a/doc/manual/src/release-notes/rl-1.2.md +++ /dev/null @@ -1,97 +0,0 @@ -# Release 1.2 (2012-12-06) - -This release has the following improvements and changes: - - - Nix has a new binary substituter mechanism: the *binary cache*. A - binary cache contains pre-built binaries of Nix packages. Whenever - Nix wants to build a missing Nix store path, it will check a set of - binary caches to see if any of them has a pre-built binary of that - path. The configuration setting `binary-caches` contains a list of - URLs of binary caches. For instance, doing - - $ nix-env -i thunderbird --option binary-caches http://cache.nixos.org - - will install Thunderbird and its dependencies, using the available - pre-built binaries in . The main advantage - over the old “manifest”-based method of getting pre-built binaries - is that you don’t have to worry about your manifest being in sync - with the Nix expressions you’re installing from; i.e., you don’t - need to run `nix-pull` to update your manifest. It’s also more - scalable because you don’t need to redownload a giant manifest file - every time. - - A Nix channel can provide a binary cache URL that will be used - automatically if you subscribe to that channel. If you use the - Nixpkgs or NixOS channels () you - automatically get the cache . - - Binary caches are created using `nix-push`. For details on the - operation and format of binary caches, see the `nix-push` manpage. - More details are provided in [this nix-dev - posting](https://nixos.org/nix-dev/2012-September/009826.html). - - - Multiple output support should now be usable. A derivation can - declare that it wants to produce multiple store paths by saying - something like - - outputs = [ "lib" "headers" "doc" ]; - - This will cause Nix to pass the intended store path of each output - to the builder through the environment variables `lib`, `headers` - and `doc`. Other packages can refer to a specific output by - referring to `pkg.output`, e.g. - - buildInputs = [ pkg.lib pkg.headers ]; - - If you install a package with multiple outputs using `nix-env`, each - output path will be symlinked into the user environment. - - - Dashes are now valid as part of identifiers and attribute names. - - - The new operation `nix-store --repair-path` allows corrupted or - missing store paths to be repaired by redownloading them. `nix-store - --verify --check-contents - --repair` will scan and repair all paths in the Nix store. - Similarly, `nix-env`, `nix-build`, `nix-instantiate` and `nix-store - --realise` have a `--repair` flag to detect and fix bad paths by - rebuilding or redownloading them. - - - Nix no longer sets the immutable bit on files in the Nix store. - Instead, the recommended way to guard the Nix store against - accidental modification on Linux is to make it a read-only bind - mount, like this: - - $ mount --bind /nix/store /nix/store - $ mount -o remount,ro,bind /nix/store - - Nix will automatically make `/nix/store` writable as needed (using a - private mount namespace) to allow modifications. - - - Store optimisation (replacing identical files in the store with hard - links) can now be done automatically every time a path is added to - the store. This is enabled by setting the configuration option - `auto-optimise-store` to `true` (disabled by default). - - - Nix now supports `xz` compression for NARs in addition to `bzip2`. - It compresses about 30% better on typical archives and decompresses - about twice as fast. - - - Basic Nix expression evaluation profiling: setting the environment - variable `NIX_COUNT_CALLS` to `1` will cause Nix to print how many - times each primop or function was executed. - - - New primops: `concatLists`, `elem`, `elemAt` and `filter`. - - - The command `nix-copy-closure` has a new flag `--use-substitutes` - (`-s`) to download missing paths on the target machine using the - substitute mechanism. - - - The command `nix-worker` has been renamed to `nix-daemon`. Support - for running the Nix worker in “slave” mode has been removed. - - - The `--help` flag of every Nix command now invokes `man`. - - - Chroot builds are now supported on systemd machines. - -This release has contributions from Eelco Dolstra, Florian Friesdorf, -Mats Erik Andersson and Shea Levy. diff --git a/doc/manual/src/release-notes/rl-1.3.md b/doc/manual/src/release-notes/rl-1.3.md deleted file mode 100644 index 0c7b48380..000000000 --- a/doc/manual/src/release-notes/rl-1.3.md +++ /dev/null @@ -1,10 +0,0 @@ -# Release 1.3 (2013-01-04) - -This is primarily a bug fix release. When this version is first run on -Linux, it removes any immutable bits from the Nix store and increases -the schema version of the Nix store. (The previous release removed -support for setting the immutable bit; this release clears any remaining -immutable bits to make certain operations more efficient.) - -This release has contributions from Eelco Dolstra and Stuart -Pernsteiner. diff --git a/doc/manual/src/release-notes/rl-1.4.md b/doc/manual/src/release-notes/rl-1.4.md deleted file mode 100644 index d23de71ad..000000000 --- a/doc/manual/src/release-notes/rl-1.4.md +++ /dev/null @@ -1,22 +0,0 @@ -# Release 1.4 (2013-02-26) - -This release fixes a security bug in multi-user operation. It was -possible for derivations to cause the mode of files outside of the Nix -store to be changed to 444 (read-only but world-readable) by creating -hard links to those files -([details](https://github.com/NixOS/nix/commit/5526a282b5b44e9296e61e07d7d2626a79141ac4)). - -There are also the following improvements: - - - New built-in function: `builtins.hashString`. - - - Build logs are now stored in `/nix/var/log/nix/drvs/XX/`, where *XX* - is the first two characters of the derivation. This is useful on - machines that keep a lot of build logs (such as Hydra servers). - - - The function `corepkgs/fetchurl` can now make the downloaded file - executable. This will allow getting rid of all bootstrap binaries in - the Nixpkgs source tree. - - - Language change: The expression `"${./path} - ..."` now evaluates to a string instead of a path. diff --git a/doc/manual/src/release-notes/rl-1.5.1.md b/doc/manual/src/release-notes/rl-1.5.1.md deleted file mode 100644 index 72b29518e..000000000 --- a/doc/manual/src/release-notes/rl-1.5.1.md +++ /dev/null @@ -1,4 +0,0 @@ -# Release 1.5.1 (2013-02-28) - -The bug fix to the bug fix had a bug itself, of course. But this time it -will work for sure\! diff --git a/doc/manual/src/release-notes/rl-1.5.2.md b/doc/manual/src/release-notes/rl-1.5.2.md deleted file mode 100644 index 508580554..000000000 --- a/doc/manual/src/release-notes/rl-1.5.2.md +++ /dev/null @@ -1,4 +0,0 @@ -# Release 1.5.2 (2013-05-13) - -This is primarily a bug fix release. It has contributions from Eelco -Dolstra, Lluís Batlle i Rossell and Shea Levy. diff --git a/doc/manual/src/release-notes/rl-1.5.md b/doc/manual/src/release-notes/rl-1.5.md deleted file mode 100644 index d2ccf8a5d..000000000 --- a/doc/manual/src/release-notes/rl-1.5.md +++ /dev/null @@ -1,4 +0,0 @@ -# Release 1.5 (2013-02-27) - -This is a brown paper bag release to fix a regression introduced by the -hard link security fix in 1.4. diff --git a/doc/manual/src/release-notes/rl-1.6.1.md b/doc/manual/src/release-notes/rl-1.6.1.md deleted file mode 100644 index 9bb9bb1f8..000000000 --- a/doc/manual/src/release-notes/rl-1.6.1.md +++ /dev/null @@ -1,32 +0,0 @@ -# Release 1.6.1 (2013-10-28) - -This is primarily a bug fix release. Changes of interest are: - - - Nix 1.6 accidentally changed the semantics of antiquoted paths in - strings, such as `"${/foo}/bar"`. This release reverts to the Nix - 1.5.3 behaviour. - - - Previously, Nix optimised expressions such as `"${expr}"` to *expr*. - Thus it neither checked whether *expr* could be coerced to a string, - nor applied such coercions. This meant that `"${123}"` evaluatued to - `123`, and `"${./foo}"` evaluated to `./foo` (even though `"${./foo} - "` evaluates to `"/nix/store/hash-foo "`). Nix now checks the type - of antiquoted expressions and applies coercions. - - - Nix now shows the exact position of undefined variables. In - particular, undefined variable errors in a `with` previously didn't - show *any* position information, so this makes it a lot easier to - fix such errors. - - - Undefined variables are now treated consistently. Previously, the - `tryEval` function would catch undefined variables inside a `with` - but not outside. Now `tryEval` never catches undefined variables. - - - Bash completion in `nix-shell` now works correctly. - - - Stack traces are less verbose: they no longer show calls to builtin - functions and only show a single line for each derivation on the - call stack. - - - New built-in function: `builtins.typeOf`, which returns the type of - its argument as a string. diff --git a/doc/manual/src/release-notes/rl-1.6.md b/doc/manual/src/release-notes/rl-1.6.md deleted file mode 100644 index 1d517ce1a..000000000 --- a/doc/manual/src/release-notes/rl-1.6.md +++ /dev/null @@ -1,72 +0,0 @@ -# Release 1.6 (2013-09-10) - -In addition to the usual bug fixes, this release has several new -features: - - - The command `nix-build --run-env` has been renamed to `nix-shell`. - - - `nix-shell` now sources `$stdenv/setup` *inside* the interactive - shell, rather than in a parent shell. This ensures that shell - functions defined by `stdenv` can be used in the interactive shell. - - - `nix-shell` has a new flag `--pure` to clear the environment, so you - get an environment that more closely corresponds to the “real” Nix - build. - - - `nix-shell` now sets the shell prompt (`PS1`) to ensure that Nix - shells are distinguishable from your regular shells. - - - `nix-env` no longer requires a `*` argument to match all packages, - so `nix-env -qa` is equivalent to `nix-env - -qa '*'`. - - - `nix-env -i` has a new flag `--remove-all` (`-r`) to remove all - previous packages from the profile. This makes it easier to do - declarative package management similar to NixOS’s - `environment.systemPackages`. For instance, if you have a - specification `my-packages.nix` like this: - - with import {}; - [ thunderbird - geeqie - ... - ] - - then after any change to this file, you can run: - - $ nix-env -f my-packages.nix -ir - - to update your profile to match the specification. - - - The ‘`with`’ language construct is now more lazy. It only evaluates - its argument if a variable might actually refer to an attribute in - the argument. For instance, this now works: - - let - pkgs = with pkgs; { foo = "old"; bar = foo; } // overrides; - overrides = { foo = "new"; }; - in pkgs.bar - - This evaluates to `"new"`, while previously it gave an “infinite - recursion” error. - - - Nix now has proper integer arithmetic operators. For instance, you - can write `x + y` instead of `builtins.add x y`, or `x < - y` instead of `builtins.lessThan x y`. The comparison operators also - work on strings. - - - On 64-bit systems, Nix integers are now 64 bits rather than 32 bits. - - - When using the Nix daemon, the `nix-daemon` worker process now runs - on the same CPU as the client, on systems that support setting CPU - affinity. This gives a significant speedup on some systems. - - - If a stack overflow occurs in the Nix evaluator, you now get a - proper error message (rather than “Segmentation fault”) on some - systems. - - - In addition to directories, you can now bind-mount regular files in - chroots through the (now misnamed) option `build-chroot-dirs`. - -This release has contributions from Domen Kožar, Eelco Dolstra, Florian -Friesdorf, Gergely Risko, Ivan Kozik, Ludovic Courtès and Shea Levy. diff --git a/doc/manual/src/release-notes/rl-1.7.md b/doc/manual/src/release-notes/rl-1.7.md deleted file mode 100644 index 8c3a9f357..000000000 --- a/doc/manual/src/release-notes/rl-1.7.md +++ /dev/null @@ -1,140 +0,0 @@ -# Release 1.7 (2014-04-11) - -In addition to the usual bug fixes, this release has the following new -features: - - - Antiquotation is now allowed inside of quoted attribute names (e.g. - `set."${foo}"`). In the case where the attribute name is just a - single antiquotation, the quotes can be dropped (e.g. the above - example can be written `set.${foo}`). If an attribute name inside of - a set declaration evaluates to `null` (e.g. `{ ${null} = false; }`), - then that attribute is not added to the set. - - - Experimental support for cryptographically signed binary caches. See - [the commit for - details](https://github.com/NixOS/nix/commit/0fdf4da0e979f992db75cc17376e455ddc5a96d8). - - - An experimental new substituter, `download-via-ssh`, that fetches - binaries from remote machines via SSH. Specifying the flags - `--option - use-ssh-substituter true --option ssh-substituter-hosts - user@hostname` will cause Nix to download binaries from the - specified machine, if it has them. - - - `nix-store -r` and `nix-build` have a new flag, `--check`, that - builds a previously built derivation again, and prints an error - message if the output is not exactly the same. This helps to verify - whether a derivation is truly deterministic. For example: - - $ nix-build '' -A patchelf - … - $ nix-build '' -A patchelf --check - … - error: derivation `/nix/store/1ipvxs…-patchelf-0.6' may not be deterministic: - hash mismatch in output `/nix/store/4pc1dm…-patchelf-0.6.drv' - - - The `nix-instantiate` flags `--eval-only` and `--parse-only` have - been renamed to `--eval` and `--parse`, respectively. - - - `nix-instantiate`, `nix-build` and `nix-shell` now have a flag - `--expr` (or `-E`) that allows you to specify the expression to be - evaluated as a command line argument. For instance, `nix-instantiate - --eval -E - '1 + 2'` will print `3`. - - - `nix-shell` improvements: - - - It has a new flag, `--packages` (or `-p`), that sets up a build - environment containing the specified packages from Nixpkgs. For - example, the command - - $ nix-shell -p sqlite xorg.libX11 hello - - will start a shell in which the given packages are present. - - - It now uses `shell.nix` as the default expression, falling back - to `default.nix` if the former doesn’t exist. This makes it - convenient to have a `shell.nix` in your project to set up a - nice development environment. - - - It evaluates the derivation attribute `shellHook`, if set. Since - `stdenv` does not normally execute this hook, it allows you to - do `nix-shell`-specific setup. - - - It preserves the user’s timezone setting. - - - In chroots, Nix now sets up a `/dev` containing only a minimal set - of devices (such as `/dev/null`). Note that it only does this if you - *don’t* have `/dev` listed in your `build-chroot-dirs` setting; - otherwise, it will bind-mount the `/dev` from outside the chroot. - - Similarly, if you don’t have `/dev/pts` listed in - `build-chroot-dirs`, Nix will mount a private `devpts` filesystem on - the chroot’s `/dev/pts`. - - - New built-in function: `builtins.toJSON`, which returns a JSON - representation of a value. - - - `nix-env -q` has a new flag `--json` to print a JSON representation - of the installed or available packages. - - - `nix-env` now supports meta attributes with more complex values, - such as attribute sets. - - - The `-A` flag now allows attribute names with dots in them, e.g. - - $ nix-instantiate --eval '' -A 'config.systemd.units."nscd.service".text' - - - The `--max-freed` option to `nix-store --gc` now accepts a unit - specifier. For example, `nix-store --gc --max-freed - 1G` will free up to 1 gigabyte of disk space. - - - `nix-collect-garbage` has a new flag `--delete-older-than` *N*`d`, - which deletes all user environment generations older than *N* days. - Likewise, `nix-env - --delete-generations` accepts a *N*`d` age limit. - - - Nix now heuristically detects whether a build failure was due to a - disk-full condition. In that case, the build is not flagged as - “permanently failed”. This is mostly useful for Hydra, which needs - to distinguish between permanent and transient build failures. - - - There is a new symbol `__curPos` that expands to an attribute set - containing its file name and line and column numbers, e.g. `{ file = - "foo.nix"; line = 10; - column = 5; }`. There also is a new builtin function, - `unsafeGetAttrPos`, that returns the position of an attribute. This - is used by Nixpkgs to provide location information in error - messages, e.g. - - $ nix-build '' -A libreoffice --argstr system x86_64-darwin - error: the package ‘libreoffice-4.0.5.2’ in ‘.../applications/office/libreoffice/default.nix:263’ - is not supported on ‘x86_64-darwin’ - - - The garbage collector is now more concurrent with other Nix - processes because it releases certain locks earlier. - - - The binary tarball installer has been improved. You can now install - Nix by running: - - $ bash <(curl -L https://nixos.org/nix/install) - - - More evaluation errors include position information. For instance, - selecting a missing attribute will print something like - - error: attribute `nixUnstabl' missing, at /etc/nixos/configurations/misc/eelco/mandark.nix:216:15 - - - The command `nix-setuid-helper` is gone. - - - Nix no longer uses Automake, but instead has a non-recursive, GNU - Make-based build system. - - - All installed libraries now have the prefix `libnix`. In particular, - this gets rid of `libutil`, which could clash with libraries with - the same name from other packages. - - - Nix now requires a compiler that supports C++11. - -This release has contributions from Danny Wilson, Domen Kožar, Eelco -Dolstra, Ian-Woo Kim, Ludovic Courtès, Maxim Ivanov, Petr Rockai, -Ricardo M. Correia and Shea Levy. diff --git a/doc/manual/src/release-notes/rl-1.8.md b/doc/manual/src/release-notes/rl-1.8.md deleted file mode 100644 index 242ab380b..000000000 --- a/doc/manual/src/release-notes/rl-1.8.md +++ /dev/null @@ -1,88 +0,0 @@ -# Release 1.8 (2014-12-14) - - - Breaking change: to address a race condition, the remote build hook - mechanism now uses `nix-store - --serve` on the remote machine. This requires build slaves to be - updated to Nix 1.8. - - - Nix now uses HTTPS instead of HTTP to access the default binary - cache, `cache.nixos.org`. - - - `nix-env` selectors are now regular expressions. For instance, you - can do - - $ nix-env -qa '.*zip.*' - - to query all packages with a name containing `zip`. - - - `nix-store --read-log` can now fetch remote build logs. If a build - log is not available locally, then ‘nix-store -l’ will now try to - download it from the servers listed in the ‘log-servers’ option in - nix.conf. For instance, if you have the configuration option - - log-servers = http://hydra.nixos.org/log - - then it will try to get logs from `http://hydra.nixos.org/log/base - name of the - store path`. This allows you to do things like: - - $ nix-store -l $(which xterm) - - and get a log even if `xterm` wasn't built locally. - - - New builtin functions: `attrValues`, `deepSeq`, `fromJSON`, - `readDir`, `seq`. - - - `nix-instantiate --eval` now has a `--json` flag to print the - resulting value in JSON format. - - - `nix-copy-closure` now uses `nix-store --serve` on the remote side - to send or receive closures. This fixes a race condition between - `nix-copy-closure` and the garbage collector. - - - Derivations can specify the new special attribute - `allowedRequisites`, which has a similar meaning to - `allowedReferences`. But instead of only enforcing to explicitly - specify the immediate references, it requires the derivation to - specify all the dependencies recursively (hence the name, - requisites) that are used by the resulting output. - - - On Mac OS X, Nix now handles case collisions when importing closures - from case-sensitive file systems. This is mostly useful for running - NixOps on Mac OS X. - - - The Nix daemon has new configuration options `allowed-users` - (specifying the users and groups that are allowed to connect to the - daemon) and `trusted-users` (specifying the users and groups that - can perform privileged operations like specifying untrusted binary - caches). - - - The configuration option `build-cores` now defaults to the number of - available CPU cores. - - - Build users are now used by default when Nix is invoked as root. - This prevents builds from accidentally running as root. - - - Nix now includes systemd units and Upstart jobs. - - - Speed improvements to `nix-store - --optimise`. - - - Language change: the `==` operator now ignores string contexts (the - “dependencies” of a string). - - - Nix now filters out Nix-specific ANSI escape sequences on standard - error. They are supposed to be invisible, but some terminals show - them anyway. - - - Various commands now automatically pipe their output into the pager - as specified by the `PAGER` environment variable. - - - Several improvements to reduce memory consumption in the evaluator. - -This release has contributions from Adam Szkoda, Aristid Breitkreuz, Bob -van der Linden, Charles Strahan, darealshinji, Eelco Dolstra, Gergely -Risko, Joel Taylor, Ludovic Courtès, Marko Durkovic, Mikey Ariel, Paul -Colomiets, Ricardo M. Correia, Ricky Elrod, Robert Helgesson, Rob -Vermaas, Russell O'Connor, Shea Levy, Shell Turner, Sönke Hahn, Steve -Purcell, Vladimír Čunát and Wout Mertens. diff --git a/doc/manual/src/release-notes/rl-1.9.md b/doc/manual/src/release-notes/rl-1.9.md deleted file mode 100644 index b56e3a9fc..000000000 --- a/doc/manual/src/release-notes/rl-1.9.md +++ /dev/null @@ -1,143 +0,0 @@ -# Release 1.9 (2015-06-12) - -In addition to the usual bug fixes, this release has the following new -features: - - - Signed binary cache support. You can enable signature checking by - adding the following to `nix.conf`: - - signed-binary-caches = * - binary-cache-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= - - This will prevent Nix from downloading any binary from the cache - that is not signed by one of the keys listed in - `binary-cache-public-keys`. - - Signature checking is only supported if you built Nix with the - `libsodium` package. - - Note that while Nix has had experimental support for signed binary - caches since version 1.7, this release changes the signature format - in a backwards-incompatible way. - - - Automatic downloading of Nix expression tarballs. In various places, - you can now specify the URL of a tarball containing Nix expressions - (such as Nixpkgs), which will be downloaded and unpacked - automatically. For example: - - - In `nix-env`: - - $ nix-env -f https://github.com/NixOS/nixpkgs-channels/archive/nixos-14.12.tar.gz -iA firefox - - This installs Firefox from the latest tested and built revision - of the NixOS 14.12 channel. - - - In `nix-build` and `nix-shell`: - - $ nix-build https://github.com/NixOS/nixpkgs/archive/master.tar.gz -A hello - - This builds GNU Hello from the latest revision of the Nixpkgs - master branch. - - - In the Nix search path (as specified via `NIX_PATH` or `-I`). - For example, to start a shell containing the Pan package from a - specific version of Nixpkgs: - - $ nix-shell -p pan -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/8a3eea054838b55aca962c3fbde9c83c102b8bf2.tar.gz - - - In `nixos-rebuild` (on NixOS): - - $ nixos-rebuild test -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz - - - In Nix expressions, via the new builtin function `fetchTarball`: - - with import (fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-14.12.tar.gz) {}; … - - (This is not allowed in restricted mode.) - - - `nix-shell` improvements: - - - `nix-shell` now has a flag `--run` to execute a command in the - `nix-shell` environment, e.g. `nix-shell --run make`. This is - like the existing `--command` flag, except that it uses a - non-interactive shell (ensuring that hitting Ctrl-C won’t drop - you into the child shell). - - - `nix-shell` can now be used as a `#!`-interpreter. This allows - you to write scripts that dynamically fetch their own - dependencies. For example, here is a Haskell script that, when - invoked, first downloads GHC and the Haskell packages on which - it depends: - - #! /usr/bin/env nix-shell - #! nix-shell -i runghc -p haskellPackages.ghc haskellPackages.HTTP - - import Network.HTTP - - main = do - resp <- Network.HTTP.simpleHTTP (getRequest "http://nixos.org/") - body <- getResponseBody resp - print (take 100 body) - - Of course, the dependencies are cached in the Nix store, so the - second invocation of this script will be much faster. - - - Chroot improvements: - - - Chroot builds are now supported on Mac OS X (using its sandbox - mechanism). - - - If chroots are enabled, they are now used for all derivations, - including fixed-output derivations (such as `fetchurl`). The - latter do have network access, but can no longer access the host - filesystem. If you need the old behaviour, you can set the - option `build-use-chroot` to `relaxed`. - - - On Linux, if chroots are enabled, builds are performed in a - private PID namespace once again. (This functionality was lost - in Nix 1.8.) - - - Store paths listed in `build-chroot-dirs` are now automatically - expanded to their closure. For instance, if you want - `/nix/store/…-bash/bin/sh` mounted in your chroot as `/bin/sh`, - you only need to say `build-chroot-dirs = - /bin/sh=/nix/store/…-bash/bin/sh`; it is no longer necessary to - specify the dependencies of Bash. - - - The new derivation attribute `passAsFile` allows you to specify that - the contents of derivation attributes should be passed via files - rather than environment variables. This is useful if you need to - pass very long strings that exceed the size limit of the - environment. The Nixpkgs function `writeTextFile` uses this. - - - You can now use `~` in Nix file names to refer to your home - directory, e.g. `import - ~/.nixpkgs/config.nix`. - - - Nix has a new option `restrict-eval` that allows limiting what paths - the Nix evaluator has access to. By passing `--option restrict-eval - true` to Nix, the evaluator will throw an exception if an attempt is - made to access any file outside of the Nix search path. This is - primarily intended for Hydra to ensure that a Hydra jobset only - refers to its declared inputs (and is therefore reproducible). - - - `nix-env` now only creates a new “generation” symlink in - `/nix/var/nix/profiles` if something actually changed. - - - The environment variable `NIX_PAGER` can now be set to override - `PAGER`. You can set it to `cat` to disable paging for Nix commands - only. - - - Failing `<...>` lookups now show position information. - - - Improved Boehm GC use: we disabled scanning for interior pointers, - which should reduce the “`Repeated - allocation of very large block`” warnings and associated retention - of memory. - -This release has contributions from aszlig, Benjamin Staffin, Charles -Strahan, Christian Theune, Daniel Hahler, Danylo Hlynskyi Daniel -Peebles, Dan Peebles, Domen Kožar, Eelco Dolstra, Harald van Dijk, Hoang -Xuan Phu, Jaka Hudoklin, Jeff Ramnani, j-keck, Linquize, Luca Bruno, -Michael Merickel, Oliver Dunkl, Rob Vermaas, Rok Garbas, Shea Levy, -Tobias Geerinckx-Rice and William A. Kennington III. diff --git a/doc/manual/src/release-notes/rl-2.0.md b/doc/manual/src/release-notes/rl-2.0.md deleted file mode 100644 index 54a44cba0..000000000 --- a/doc/manual/src/release-notes/rl-2.0.md +++ /dev/null @@ -1,558 +0,0 @@ -# Release 2.0 (2018-02-22) - -The following incompatible changes have been made: - - - The manifest-based substituter mechanism - (`download-using-manifests`) has been - [removed](https://github.com/NixOS/nix/commit/867967265b80946dfe1db72d40324b4f9af988ed). - It has been superseded by the binary cache substituter mechanism - since several years. As a result, the following programs have been - removed: - - - `nix-pull` - - - `nix-generate-patches` - - - `bsdiff` - - - `bspatch` - - - The “copy from other stores” substituter mechanism - (`copy-from-other-stores` and the `NIX_OTHER_STORES` environment - variable) has been removed. It was primarily used by the NixOS - installer to copy available paths from the installation medium. The - replacement is to use a chroot store as a substituter (e.g. - `--substituters /mnt`), or to build into a chroot store (e.g. - `--store /mnt --substituters /`). - - - The command `nix-push` has been removed as part of the effort to - eliminate Nix's dependency on Perl. You can use `nix copy` instead, - e.g. `nix copy - --to file:///tmp/my-binary-cache paths…` - - - The “nested” log output feature (`--log-type - pretty`) has been removed. As a result, `nix-log2xml` was also - removed. - - - OpenSSL-based signing has been - [removed](https://github.com/NixOS/nix/commit/f435f8247553656774dd1b2c88e9de5d59cab203). - This feature was never well-supported. A better alternative is - provided by the `secret-key-files` and `trusted-public-keys` - options. - - - Failed build caching has been - [removed](https://github.com/NixOS/nix/commit/8cffec84859cec8b610a2a22ab0c4d462a9351ff). - This feature was introduced to support the Hydra continuous build - system, but Hydra no longer uses it. - - - `nix-mode.el` has been removed from Nix. It is now [a separate - repository](https://github.com/NixOS/nix-mode) and can be installed - through the MELPA package repository. - -This release has the following new features: - - - It introduces a new command named `nix`, which is intended to - eventually replace all `nix-*` commands with a more consistent and - better designed user interface. It currently provides replacements - for some (but not all) of the functionality provided by `nix-store`, - `nix-build`, `nix-shell -p`, `nix-env -qa`, `nix-instantiate - --eval`, `nix-push` and `nix-copy-closure`. It has the following - major features: - - - Unlike the legacy commands, it has a consistent way to refer to - packages and package-like arguments (like store paths). For - example, the following commands all copy the GNU Hello package - to a remote machine: - - nix copy --to ssh://machine nixpkgs.hello - - nix copy --to ssh://machine /nix/store/0i2jd68mp5g6h2sa5k9c85rb80sn8hi9-hello-2.10 - - nix copy --to ssh://machine '(with import {}; hello)' - - By contrast, `nix-copy-closure` only accepted store paths as - arguments. - - - It is self-documenting: `--help` shows all available - command-line arguments. If `--help` is given after a subcommand, - it shows examples for that subcommand. `nix - --help-config` shows all configuration options. - - - It is much less verbose. By default, it displays a single-line - progress indicator that shows how many packages are left to be - built or downloaded, and (if there are running builds) the most - recent line of builder output. If a build fails, it shows the - last few lines of builder output. The full build log can be - retrieved using `nix - log`. - - - It - [provides](https://github.com/NixOS/nix/commit/b8283773bd64d7da6859ed520ee19867742a03ba) - all `nix.conf` configuration options as command line flags. For - example, instead of `--option - http-connections 100` you can write `--http-connections 100`. - Boolean options can be written as `--foo` or `--no-foo` (e.g. - `--no-auto-optimise-store`). - - - Many subcommands have a `--json` flag to write results to stdout - in JSON format. - - > **Warning** - > - > Please note that the `nix` command is a work in progress and the - > interface is subject to change. - - It provides the following high-level (“porcelain”) subcommands: - - - `nix build` is a replacement for `nix-build`. - - - `nix run` executes a command in an environment in which the - specified packages are available. It is (roughly) a replacement - for `nix-shell - -p`. Unlike that command, it does not execute the command in a - shell, and has a flag (`-c`) that specifies the unquoted command - line to be executed. - - It is particularly useful in conjunction with chroot stores, - allowing Linux users who do not have permission to install Nix - in `/nix/store` to still use binary substitutes that assume - `/nix/store`. For example, - - nix run --store ~/my-nix nixpkgs.hello -c hello --greeting 'Hi everybody!' - - downloads (or if not substitutes are available, builds) the GNU - Hello package into `~/my-nix/nix/store`, then runs `hello` in a - mount namespace where `~/my-nix/nix/store` is mounted onto - `/nix/store`. - - - `nix search` replaces `nix-env - -qa`. It searches the available packages for occurrences of a - search string in the attribute name, package name or - description. Unlike `nix-env -qa`, it has a cache to speed up - subsequent searches. - - - `nix copy` copies paths between arbitrary Nix stores, - generalising `nix-copy-closure` and `nix-push`. - - - `nix repl` replaces the external program `nix-repl`. It provides - an interactive environment for evaluating and building Nix - expressions. Note that it uses `linenoise-ng` instead of GNU - Readline. - - - `nix upgrade-nix` upgrades Nix to the latest stable version. - This requires that Nix is installed in a profile. (Thus it won’t - work on NixOS, or if it’s installed outside of the Nix store.) - - - `nix verify` checks whether store paths are unmodified and/or - “trusted” (see below). It replaces `nix-store --verify` and - `nix-store - --verify-path`. - - - `nix log` shows the build log of a package or path. If the - build log is not available locally, it will try to obtain it - from the configured substituters (such as - [cache.nixos.org](https://cache.nixos.org/), which now - provides build logs). - - - `nix edit` opens the source code of a package in your editor. - - - `nix eval` replaces `nix-instantiate --eval`. - - - `nix - why-depends` shows why one store path has another in its - closure. This is primarily useful to finding the causes of - closure bloat. For example, - - nix why-depends nixpkgs.vlc nixpkgs.libdrm.dev - - shows a chain of files and fragments of file contents that cause - the VLC package to have the “dev” output of `libdrm` in its - closure — an undesirable situation. - - - `nix path-info` shows information about store paths, replacing - `nix-store -q`. A useful feature is the option `--closure-size` - (`-S`). For example, the following command show the closure - sizes of every path in the current NixOS system closure, sorted - by size: - - nix path-info -rS /run/current-system | sort -nk2 - - - `nix optimise-store` replaces `nix-store --optimise`. The main - difference is that it has a progress indicator. - - A number of low-level (“plumbing”) commands are also available: - - - `nix ls-store` and `nix - ls-nar` list the contents of a store path or NAR file. The - former is primarily useful in conjunction with remote stores, - e.g. - - nix ls-store --store https://cache.nixos.org/ -lR /nix/store/0i2jd68mp5g6h2sa5k9c85rb80sn8hi9-hello-2.10 - - lists the contents of path in a binary cache. - - - `nix cat-store` and `nix - cat-nar` allow extracting a file from a store path or NAR file. - - - `nix dump-path` writes the contents of a store path to stdout in - NAR format. This replaces `nix-store --dump`. - - - `nix - show-derivation` displays a store derivation in JSON format. - This is an alternative to `pp-aterm`. - - - `nix - add-to-store` replaces `nix-store - --add`. - - - `nix sign-paths` signs store paths. - - - `nix copy-sigs` copies signatures from one store to another. - - - `nix show-config` shows all configuration options and their - current values. - - - The store abstraction that Nix has had for a long time to support - store access via the Nix daemon has been extended - significantly. In particular, substituters (which used to be - external programs such as `download-from-binary-cache`) are now - subclasses of the abstract `Store` class. This allows many Nix - commands to operate on such store types. For example, `nix - path-info` shows information about paths in your local Nix store, - while `nix path-info --store https://cache.nixos.org/` shows - information about paths in the specified binary cache. Similarly, - `nix-copy-closure`, `nix-push` and substitution are all instances - of the general notion of copying paths between different kinds of - Nix stores. - - Stores are specified using an URI-like syntax, e.g. - or . The following store - types are supported: - - - `LocalStore` (store URI `local` or an absolute path) and the - misnamed `RemoteStore` (`daemon`) provide access to a local Nix - store, the latter via the Nix daemon. You can use `auto` or the - empty string to auto-select a local or daemon store depending on - whether you have write permission to the Nix store. It is no - longer necessary to set the `NIX_REMOTE` environment variable to - use the Nix daemon. - - As noted above, `LocalStore` now supports chroot builds, - allowing the “physical” location of the Nix store (e.g. - `/home/alice/nix/store`) to differ from its “logical” location - (typically `/nix/store`). This allows non-root users to use Nix - while still getting the benefits from prebuilt binaries from - [cache.nixos.org](https://cache.nixos.org/). - - - `BinaryCacheStore` is the abstract superclass of all binary - cache stores. It supports writing build logs and NAR content - listings in JSON format. - - - `HttpBinaryCacheStore` (`http://`, `https://`) supports binary - caches via HTTP or HTTPS. If the server supports `PUT` requests, - it supports uploading store paths via commands such as `nix - copy`. - - - `LocalBinaryCacheStore` (`file://`) supports binary caches in - the local filesystem. - - - `S3BinaryCacheStore` (`s3://`) supports binary caches stored in - Amazon S3, if enabled at compile time. - - - `LegacySSHStore` (`ssh://`) is used to implement remote builds - and `nix-copy-closure`. - - - `SSHStore` (`ssh-ng://`) supports arbitrary Nix operations on a - remote machine via the same protocol used by `nix-daemon`. - - - Security has been improved in various ways: - - - Nix now stores signatures for local store paths. When paths are - copied between stores (e.g., copied from a binary cache to a - local store), signatures are propagated. - - Locally-built paths are signed automatically using the secret - keys specified by the `secret-key-files` store option. - Secret/public key pairs can be generated using `nix-store - --generate-binary-cache-key`. - - In addition, locally-built store paths are marked as “ultimately - trusted”, but this bit is not propagated when paths are copied - between stores. - - - Content-addressable store paths no longer require signatures — - they can be imported into a store by unprivileged users even if - they lack signatures. - - - The command `nix verify` checks whether the specified paths are - trusted, i.e., have a certain number of trusted signatures, are - ultimately trusted, or are content-addressed. - - - Substitutions from binary caches - [now](https://github.com/NixOS/nix/commit/ecbc3fedd3d5bdc5a0e1a0a51b29062f2874ac8b) - require signatures by default. This was already the case on - NixOS. - - - In Linux sandbox builds, we - [now](https://github.com/NixOS/nix/commit/eba840c8a13b465ace90172ff76a0db2899ab11b) - use `/build` instead of `/tmp` as the temporary build directory. - This fixes potential security problems when a build accidentally - stores its `TMPDIR` in some security-sensitive place, such as an - RPATH. - - - *Pure evaluation mode*. With the `--pure-eval` flag, Nix enables a - variant of the existing restricted evaluation mode that forbids - access to anything that could cause different evaluations of the - same command line arguments to produce a different result. This - includes builtin functions such as `builtins.getEnv`, but more - importantly, *all* filesystem or network access unless a content - hash or commit hash is specified. For example, calls to - `builtins.fetchGit` are only allowed if a `rev` attribute is - specified. - - The goal of this feature is to enable true reproducibility and - traceability of builds (including NixOS system configurations) at - the evaluation level. For example, in the future, `nixos-rebuild` - might build configurations from a Nix expression in a Git repository - in pure mode. That expression might fetch other repositories such as - Nixpkgs via `builtins.fetchGit`. The commit hash of the top-level - repository then uniquely identifies a running system, and, in - conjunction with that repository, allows it to be reproduced or - modified. - - - There are several new features to support binary reproducibility - (i.e. to help ensure that multiple builds of the same derivation - produce exactly the same output). When `enforce-determinism` is set - to `false`, it’s [no - longer](https://github.com/NixOS/nix/commit/8bdf83f936adae6f2c907a6d2541e80d4120f051) - a fatal error if build rounds produce different output. Also, a hook - named `diff-hook` is - [provided](https://github.com/NixOS/nix/commit/9a313469a4bdea2d1e8df24d16289dc2a172a169) - to allow you to run tools such as `diffoscope` when build rounds - produce different output. - - - Configuring remote builds is a lot easier now. Provided you are not - using the Nix daemon, you can now just specify a remote build - machine on the command line, e.g. `--option builders - 'ssh://my-mac x86_64-darwin'`. The environment variable - `NIX_BUILD_HOOK` has been removed and is no longer needed. The - environment variable `NIX_REMOTE_SYSTEMS` is still supported for - compatibility, but it is also possible to specify builders in - `nix.conf` by setting the option `builders = - @path`. - - - If a fixed-output derivation produces a result with an incorrect - hash, the output path is moved to the location corresponding to the - actual hash and registered as valid. Thus, a subsequent build of the - fixed-output derivation with the correct hash is unnecessary. - - - `nix-shell` - [now](https://github.com/NixOS/nix/commit/ea59f39326c8e9dc42dfed4bcbf597fbce58797c) - sets the `IN_NIX_SHELL` environment variable during evaluation and - in the shell itself. This can be used to perform different actions - depending on whether you’re in a Nix shell or in a regular build. - Nixpkgs provides `lib.inNixShell` to check this variable during - evaluation. - - - `NIX_PATH` is now lazy, so URIs in the path are only downloaded if - they are needed for evaluation. - - - You can now use `channel:` as a short-hand for - . For example, - `nix-build channel:nixos-15.09 -A hello` will build the GNU Hello - package from the `nixos-15.09` channel. In the future, this may - use Git to fetch updates more efficiently. - - - When `--no-build-output` is given, the last 10 lines of the build - log will be shown if a build fails. - - - Networking has been improved: - - - HTTP/2 is now supported. This makes binary cache lookups [much - more - efficient](https://github.com/NixOS/nix/commit/90ad02bf626b885a5dd8967894e2eafc953bdf92). - - - We now retry downloads on many HTTP errors, making binary caches - substituters more resilient to temporary failures. - - - HTTP credentials can now be configured via the standard `netrc` - mechanism. - - - If S3 support is enabled at compile time, URIs are - [supported](https://github.com/NixOS/nix/commit/9ff9c3f2f80ba4108e9c945bbfda2c64735f987b) - in all places where Nix allows URIs. - - - Brotli compression is now supported. In particular, - [cache.nixos.org](https://cache.nixos.org/) build logs are now compressed - using Brotli. - - - `nix-env` - [now](https://github.com/NixOS/nix/commit/b0cb11722626e906a73f10dd9a0c9eea29faf43a) - ignores packages with bad derivation names (in particular those - starting with a digit or containing a dot). - - - Many configuration options have been renamed, either because they - were unnecessarily verbose (e.g. `build-use-sandbox` is now just - `sandbox`) or to reflect generalised behaviour (e.g. `binary-caches` - is now `substituters` because it allows arbitrary store URIs). The - old names are still supported for compatibility. - - - The `max-jobs` option can - [now](https://github.com/NixOS/nix/commit/7251d048fa812d2551b7003bc9f13a8f5d4c95a5) - be set to `auto` to use the number of CPUs in the system. - - - Hashes can - [now](https://github.com/NixOS/nix/commit/c0015e87af70f539f24d2aa2bc224a9d8b84276b) - be specified in base-64 format, in addition to base-16 and the - non-standard base-32. - - - `nix-shell` now uses `bashInteractive` from Nixpkgs, rather than the - `bash` command that happens to be in the caller’s `PATH`. This is - especially important on macOS where the `bash` provided by the - system is seriously outdated and cannot execute `stdenv`’s setup - script. - - - Nix can now automatically trigger a garbage collection if free disk - space drops below a certain level during a build. This is configured - using the `min-free` and `max-free` options. - - - `nix-store -q --roots` and `nix-store --gc --print-roots` now show - temporary and in-memory roots. - - - Nix can now be extended with plugins. See the documentation of the - `plugin-files` option for more details. - -The Nix language has the following new features: - - - It supports floating point numbers. They are based on the C++ - `float` type and are supported by the existing numerical operators. - Export and import to and from JSON and XML works, too. - - - Derivation attributes can now reference the outputs of the - derivation using the `placeholder` builtin function. For example, - the attribute - - configureFlags = "--prefix=${placeholder "out"} --includedir=${placeholder "dev"}"; - - will cause the `configureFlags` environment variable to contain the - actual store paths corresponding to the `out` and `dev` outputs. - -The following builtin functions are new or extended: - - - `builtins.fetchGit` allows Git repositories to be fetched at - evaluation time. Thus it differs from the `fetchgit` function in - Nixpkgs, which fetches at build time and cannot be used to fetch Nix - expressions during evaluation. A typical use case is to import - external NixOS modules from your configuration, e.g. - - imports = [ (builtins.fetchGit https://github.com/edolstra/dwarffs + "/module.nix") ]; - - - Similarly, `builtins.fetchMercurial` allows you to fetch Mercurial - repositories. - - - `builtins.path` generalises `builtins.filterSource` and path - literals (e.g. `./foo`). It allows specifying a store path name that - differs from the source path name (e.g. `builtins.path { path = - ./foo; name = "bar"; - }`) and also supports filtering out unwanted files. - - - `builtins.fetchurl` and `builtins.fetchTarball` now support `sha256` - and `name` attributes. - - - `builtins.split` splits a string using a POSIX extended regular - expression as the separator. - - - `builtins.partition` partitions the elements of a list into two - lists, depending on a Boolean predicate. - - - `` now uses the content-addressable tarball cache - at , just like `fetchurl` in Nixpkgs. - (f2682e6e18a76ecbfb8a12c17e3a0ca15c084197) - - - In restricted and pure evaluation mode, builtin functions that - download from the network (such as `fetchGit`) are permitted to - fetch underneath a list of URI prefixes specified in the option - `allowed-uris`. - -The Nix build environment has the following changes: - - - Values such as Booleans, integers, (nested) lists and attribute sets - can - [now](https://github.com/NixOS/nix/commit/6de33a9c675b187437a2e1abbcb290981a89ecb1) - be passed to builders in a non-lossy way. If the special attribute - `__structuredAttrs` is set to `true`, the other derivation - attributes are serialised in JSON format and made available to the - builder via the file `.attrs.json` in the builder’s temporary - directory. This obviates the need for `passAsFile` since JSON files - have no size restrictions, unlike process environments. - - [As a convenience to Bash - builders](https://github.com/NixOS/nix/commit/2d5b1b24bf70a498e4c0b378704cfdb6471cc699), - Nix writes a script named `.attrs.sh` to the builder’s directory - that initialises shell variables corresponding to all attributes - that are representable in Bash. This includes non-nested - (associative) arrays. For example, the attribute `hardening.format = - true` ends up as the Bash associative array element - `${hardening[format]}`. - - - Builders can - [now](https://github.com/NixOS/nix/commit/88e6bb76de5564b3217be9688677d1c89101b2a3) - communicate what build phase they are in by writing messages to the - file descriptor specified in `NIX_LOG_FD`. The current phase is - shown by the `nix` progress indicator. - - - In Linux sandbox builds, we - [now](https://github.com/NixOS/nix/commit/a2d92bb20e82a0957067ede60e91fab256948b41) - provide a default `/bin/sh` (namely `ash` from BusyBox). - - - In structured attribute mode, `exportReferencesGraph` - [exports](https://github.com/NixOS/nix/commit/c2b0d8749f7e77afc1c4b3e8dd36b7ee9720af4a) - extended information about closures in JSON format. In particular, - it includes the sizes and hashes of paths. This is primarily useful - for NixOS image builders. - - - Builds are - [now](https://github.com/NixOS/nix/commit/21948deed99a3295e4d5666e027a6ca42dc00b40) - killed as soon as Nix receives EOF on the builder’s stdout or - stderr. This fixes a bug that allowed builds to hang Nix - indefinitely, regardless of timeouts. - - - The `sandbox-paths` configuration option can now specify optional - paths by appending a `?`, e.g. `/dev/nvidiactl?` will bind-mount - `/dev/nvidiactl` only if it exists. - - - On Linux, builds are now executed in a user namespace with UID 1000 - and GID 100. - -A number of significant internal changes were made: - - - Nix no longer depends on Perl and all Perl components have been - rewritten in C++ or removed. The Perl bindings that used to be part - of Nix have been moved to a separate package, `nix-perl`. - - - All `Store` classes are now thread-safe. `RemoteStore` supports - multiple concurrent connections to the daemon. This is primarily - useful in multi-threaded programs such as `hydra-queue-runner`. - -This release has contributions from Adrien Devresse, Alexander Ried, -Alex Cruice, Alexey Shmalko, AmineChikhaoui, Andy Wingo, Aneesh Agrawal, -Anthony Cowley, Armijn Hemel, aszlig, Ben Gamari, Benjamin Hipple, -Benjamin Staffin, Benno Fünfstück, Bjørn Forsman, Brian McKenna, Charles -Strahan, Chase Adams, Chris Martin, Christian Theune, Chris Warburton, -Daiderd Jordan, Dan Connolly, Daniel Peebles, Dan Peebles, davidak, -David McFarland, Dmitry Kalinkin, Domen Kožar, Eelco Dolstra, Emery -Hemingway, Eric Litak, Eric Wolf, Fabian Schmitthenner, Frederik -Rietdijk, Gabriel Gonzalez, Giorgio Gallo, Graham Christensen, Guillaume -Maudoux, Harmen, Iavael, James Broadhead, James Earl Douglas, Janus -Troelsen, Jeremy Shaw, Joachim Schiele, Joe Hermaszewski, Joel Moberg, -Johannes 'fish' Ziemke, Jörg Thalheim, Jude Taylor, kballou, Keshav -Kini, Kjetil Orbekk, Langston Barrett, Linus Heckemann, Ludovic Courtès, -Manav Rathi, Marc Scholten, Markus Hauck, Matt Audesse, Matthew Bauer, -Matthias Beyer, Matthieu Coudron, N1X, Nathan Zadoks, Neil Mayhew, -Nicolas B. Pierron, Niklas Hambüchen, Nikolay Amiantov, Ole Jørgen -Brønner, Orivej Desh, Peter Simons, Peter Stuart, Pyry Jahkola, regnat, -Renzo Carbonara, Rhys, Robert Vollmert, Scott Olson, Scott R. Parish, -Sergei Trofimovich, Shea Levy, Sheena Artrip, Spencer Baugh, Stefan -Junker, Susan Potter, Thomas Tuegel, Timothy Allen, Tristan Hume, Tuomas -Tynkkynen, tv, Tyson Whitehead, Vladimír Čunát, Will Dietz, wmertens, -Wout Mertens, zimbatm and Zoran Plesivčak. diff --git a/doc/manual/src/release-notes/rl-2.1.md b/doc/manual/src/release-notes/rl-2.1.md deleted file mode 100644 index a9592657b..000000000 --- a/doc/manual/src/release-notes/rl-2.1.md +++ /dev/null @@ -1,49 +0,0 @@ -# Release 2.1 (2018-09-02) - -This is primarily a bug fix release. It also reduces memory consumption -in certain situations. In addition, it has the following new features: - - - The Nix installer will no longer default to the Multi-User - installation for macOS. You can still instruct the installer to - run in multi-user mode. - - - The Nix installer now supports performing a Multi-User - installation for Linux computers which are running systemd. You - can select a Multi-User installation by passing the `--daemon` - flag to the installer: `sh <(curl -L https://nixos.org/nix/install) - --daemon`. - - The multi-user installer cannot handle systems with SELinux. If - your system has SELinux enabled, you can force the installer to - run in single-user mode. - - - New builtin functions: `builtins.bitAnd`, `builtins.bitOr`, - `builtins.bitXor`, `builtins.fromTOML`, `builtins.concatMap`, - `builtins.mapAttrs`. - - - The S3 binary cache store now supports uploading NARs larger than 5 - GiB. - - - The S3 binary cache store now supports uploading to S3-compatible - services with the `endpoint` option. - - - The flag `--fallback` is no longer required to recover from - disappeared NARs in binary caches. - - - `nix-daemon` now respects `--store`. - - - `nix run` now respects `nix-support/propagated-user-env-packages`. - -This release has contributions from Adrien Devresse, Aleksandr Pashkov, -Alexandre Esteves, Amine Chikhaoui, Andrew Dunham, Asad Saeeduddin, -aszlig, Ben Challenor, Ben Gamari, Benjamin Hipple, Bogdan Seniuc, Corey -O'Connor, Daiderd Jordan, Daniel Peebles, Daniel Poelzleithner, Danylo -Hlynskyi, Dmitry Kalinkin, Domen Kožar, Doug Beardsley, Eelco Dolstra, -Erik Arvstedt, Félix Baylac-Jacqué, Gleb Peregud, Graham Christensen, -Guillaume Maudoux, Ivan Kozik, John Arnold, Justin Humm, Linus -Heckemann, Lorenzo Manacorda, Matthew Justin Bauer, Matthew O'Gorman, -Maximilian Bosch, Michael Bishop, Michael Fiano, Michael Mercier, -Michael Raskin, Michael Weiss, Nicolas Dudebout, Peter Simons, Ryan -Trinkle, Samuel Dionne-Riel, Sean Seefried, Shea Levy, Symphorien Gibol, -Tim Engler, Tim Sears, Tuomas Tynkkynen, volth, Will Dietz, Yorick van -Pelt and zimbatm. diff --git a/doc/manual/src/release-notes/rl-2.10.md b/doc/manual/src/release-notes/rl-2.10.md deleted file mode 100644 index b99dbeef0..000000000 --- a/doc/manual/src/release-notes/rl-2.10.md +++ /dev/null @@ -1,31 +0,0 @@ -# Release 2.10 (2022-07-11) - -* `nix repl` now takes installables on the command line, unifying the usage - with other commands that use `--file` and `--expr`. Primary breaking change - is for the common usage of `nix repl ''` which can be recovered with - `nix repl --file ''` or `nix repl --expr 'import {}'`. - - This is currently guarded by the `repl-flake` experimental feature. - -* A new function `builtins.traceVerbose` is available. It is similar - to `builtins.trace` if the `trace-verbose` setting is set to true, - and it is a no-op otherwise. - -* `nix search` has a new flag `--exclude` to filter out packages. - -* On Linux, if `/nix` doesn't exist and cannot be created and you're - not running as root, Nix will automatically use - `~/.local/share/nix/root` as a chroot store. This enables non-root - users to download the statically linked Nix binary and have it work - out of the box, e.g. - - ``` - # ~/nix run nixpkgs#hello - warning: '/nix' does not exists, so Nix will use '/home/ubuntu/.local/share/nix/root' as a chroot store - Hello, world! - ``` - -* `flake-registry.json` is now fetched from `channels.nixos.org`. - -* Nix can now be built with LTO by passing `--enable-lto` to `configure`. - LTO is currently only supported when building with GCC. diff --git a/doc/manual/src/release-notes/rl-2.11.md b/doc/manual/src/release-notes/rl-2.11.md deleted file mode 100644 index b322a4e5e..000000000 --- a/doc/manual/src/release-notes/rl-2.11.md +++ /dev/null @@ -1,5 +0,0 @@ -# Release 2.11 (2022-08-24) - -* `nix copy` now copies the store paths in parallel as much as possible (again). - This doesn't apply for the `daemon` and `ssh-ng` stores which copy everything - in one batch to avoid latencies issues. diff --git a/doc/manual/src/release-notes/rl-2.12.md b/doc/manual/src/release-notes/rl-2.12.md deleted file mode 100644 index e2045d7bf..000000000 --- a/doc/manual/src/release-notes/rl-2.12.md +++ /dev/null @@ -1,43 +0,0 @@ -# Release 2.12 (2022-12-06) - -* On Linux, Nix can now run builds in a user namespace where they run - as root (UID 0) and have 65,536 UIDs available. - - This is primarily useful for running containers such as `systemd-nspawn` - inside a Nix build. For an example, see [`tests/systemd-nspawn/nix`][nspawn]. - - [nspawn]: https://github.com/NixOS/nix/blob/67bcb99700a0da1395fa063d7c6586740b304598/tests/systemd-nspawn.nix. - - A build can enable this by setting the derivation attribute: - - ``` - requiredSystemFeatures = [ "uid-range" ]; - ``` - - The `uid-range` [system feature] requires the [`auto-allocate-uids`] - setting to be enabled. - - [system feature]: ../command-ref/conf-file.md#conf-system-features - -* Nix can now automatically pick UIDs for builds, removing the need to - create `nixbld*` user accounts. See [`auto-allocate-uids`]. - - [`auto-allocate-uids`]: ../command-ref/conf-file.md#conf-auto-allocate-uids - -* On Linux, Nix has experimental support for running builds inside a - cgroup. See - [`use-cgroups`](../command-ref/conf-file.md#conf-use-cgroups). - -* `` now accepts an additional argument `impure` which - defaults to `false`. If it is set to `true`, the `hash` and `sha256` - arguments will be ignored and the resulting derivation will have - `__impure` set to `true`, making it an impure derivation. - -* If `builtins.readFile` is called on a file with context, then only - the parts of the context that appear in the content of the file are - retained. This avoids a lot of spurious errors where strings end up - having a context just because they are read from a store path - ([#7260](https://github.com/NixOS/nix/pull/7260)). - -* `nix build --json` now prints some statistics about top-level - derivations, such as CPU statistics when cgroups are enabled. diff --git a/doc/manual/src/release-notes/rl-2.13.md b/doc/manual/src/release-notes/rl-2.13.md deleted file mode 100644 index 168708113..000000000 --- a/doc/manual/src/release-notes/rl-2.13.md +++ /dev/null @@ -1,44 +0,0 @@ -# Release 2.13 (2023-01-17) - -* The `repeat` and `enforce-determinism` options have been removed - since they had been broken under many circumstances for a long time. - -* You can now use [flake references] in the [old command line interface], e.g. - - [flake references]: ../command-ref/new-cli/nix3-flake.md#flake-references - [old command line interface]: ../command-ref/main-commands.md - - ```shell-session - # nix-build flake:nixpkgs -A hello - # nix-build -I nixpkgs=flake:github:NixOS/nixpkgs/nixos-22.05 \ - '' -A hello - # NIX_PATH=nixpkgs=flake:nixpkgs nix-build '' -A hello - ``` - -* Instead of "antiquotation", the more common term [string interpolation](../language/string-interpolation.md) is now used consistently. - Historical release notes were not changed. - -* Error traces have been reworked to provide detailed explanations and more - accurate error locations. A short excerpt of the trace is now shown by - default when an error occurs. - -* Allow explicitly selecting outputs in a store derivation installable, just like we can do with other sorts of installables. - For example, - ```shell-session - # nix build /nix/store/gzaflydcr6sb3567hap9q6srzx8ggdgg-glibc-2.33-78.drv^dev - ``` - now works just as - ```shell-session - # nix build nixpkgs#glibc^dev - ``` - does already. - -* On Linux, `nix develop` now sets the - [*personality*](https://man7.org/linux/man-pages/man2/personality.2.html) - for the development shell in the same way as the actual build of the - derivation. This makes shells for `i686-linux` derivations work - correctly on `x86_64-linux`. - -* You can now disable the global flake registry by setting the `flake-registry` - configuration option to an empty string. The same can be achieved at runtime with - `--flake-registry ""`. diff --git a/doc/manual/src/release-notes/rl-2.14.md b/doc/manual/src/release-notes/rl-2.14.md deleted file mode 100644 index 705c118bb..000000000 --- a/doc/manual/src/release-notes/rl-2.14.md +++ /dev/null @@ -1,22 +0,0 @@ -# Release 2.14 (2023-02-28) - -* A new function `builtins.readFileType` is available. It is similar to - `builtins.readDir` but acts on a single file or directory. - -* In flakes, the `.outPath` attribute of a flake now always refers to - the directory containing the `flake.nix`. This was not the case for - when `flake.nix` was in a subdirectory of e.g. a Git repository. - The root of the source of a flake in a subdirectory is still - available in `.sourceInfo.outPath`. - -* In derivations that use structured attributes, you can now use `unsafeDiscardReferences` - to disable scanning a given output for runtime dependencies: - ```nix - __structuredAttrs = true; - unsafeDiscardReferences.out = true; - ``` - This is useful e.g. when generating self-contained filesystem images with - their own embedded Nix store: hashes found inside such an image refer - to the embedded store and not to the host's Nix store. - - This requires the `discard-references` experimental feature. diff --git a/doc/manual/src/release-notes/rl-2.15.md b/doc/manual/src/release-notes/rl-2.15.md deleted file mode 100644 index 133121999..000000000 --- a/doc/manual/src/release-notes/rl-2.15.md +++ /dev/null @@ -1,58 +0,0 @@ -# Release 2.15 (2023-04-11) - -* Commands which take installables on the command line can now read them from the standard input if - passed the `--stdin` flag. This is primarily useful when you have a large amount of paths which - exceed the OS argument limit. - -* The `nix-hash` command now supports Base64 and SRI. Use the flags `--base64` - or `--sri` to specify the format of output hash as Base64 or SRI, and `--to-base64` - or `--to-sri` to convert a hash to Base64 or SRI format, respectively. - - As the choice of hash formats is no longer binary, the `--base16` flag is also added - to explicitly specify the Base16 format, which is still the default. - -* The special handling of an [installable](../command-ref/new-cli/nix.md#installables) with `.drv` suffix being interpreted as all of the given [store derivation](../glossary.md#gloss-store-derivation)'s output paths is removed, and instead taken as the literal store path that it represents. - - The new `^` syntax for store paths introduced in Nix 2.13 allows explicitly referencing output paths of a derivation. - Using this is better and more clear than relying on the now-removed `.drv` special handling. - - For example, - ```shell-session - $ nix path-info /nix/store/gzaflydcr6sb3567hap9q6srzx8ggdgg-glibc-2.33-78.drv - ``` - - now gives info about the derivation itself, while - - ```shell-session - $ nix path-info /nix/store/gzaflydcr6sb3567hap9q6srzx8ggdgg-glibc-2.33-78.drv^* - ``` - provides information about each of its outputs. - -* The experimental command `nix describe-stores` has been removed. - -* Nix stores and their settings are now documented in [`nix help-stores`](@docroot@/command-ref/new-cli/nix3-help-stores.md). - -* Documentation for operations of `nix-store` and `nix-env` are now available on separate pages of the manual. - They include all common options that can be specified and common environment variables that affect these commands. - - These pages can be viewed offline with `man` using - - * `man nix-store-` and `man nix-env-` - * `nix-store --help --` and `nix-env --help --`. - -* Nix when used as a client now checks whether the store (the server) trusts the client. - (The store always had to check whether it trusts the client, but now the client is informed of the store's decision.) - This is useful for scripting interactions with (non-legacy-ssh) remote Nix stores. - - `nix store ping` and `nix doctor` now display this information. - -* The new command `nix derivation add` allows adding derivations to the store without involving the Nix language. - It exists to round out our collection of basic utility/plumbing commands, and allow for a low barrier-to-entry way of experimenting with alternative front-ends to the Nix Store. - It uses the same JSON layout as `nix derivation show`, and is its inverse. - -* `nix show-derivation` has been renamed to `nix derivation show`. - This matches `nix derivation add`, and avoids bloating the top-level namespace. - The old name is still kept as an alias for compatibility, however. - -* The `nix derivation {add,show}` JSON format now includes the derivation name as a top-level field. - This is useful in general, but especially necessary for the `add` direction, as otherwise we would need to pass in the name out of band for certain cases. diff --git a/doc/manual/src/release-notes/rl-2.16.md b/doc/manual/src/release-notes/rl-2.16.md deleted file mode 100644 index 97b40d0b8..000000000 --- a/doc/manual/src/release-notes/rl-2.16.md +++ /dev/null @@ -1,8 +0,0 @@ -# Release 2.16 (2023-05-31) - -* Speed-up of downloads from binary caches. - The number of parallel downloads (also known as substitutions) has been separated from the [`--max-jobs` setting](../command-ref/conf-file.md#conf-max-jobs). - The new setting is called [`max-substitution-jobs`](../command-ref/conf-file.md#conf-max-substitution-jobs). - The number of parallel downloads is now set to 16 by default (previously, the default was 1 due to the coupling to build jobs). - -* The function [`builtins.replaceStrings`](@docroot@/language/builtins.md#builtins-replaceStrings) is now lazy in the value of its second argument `to`. That is, `to` is only evaluated when its corresponding pattern in `from` is matched in the string `s`. diff --git a/doc/manual/src/release-notes/rl-2.17.md b/doc/manual/src/release-notes/rl-2.17.md deleted file mode 100644 index 0b861aecc..000000000 --- a/doc/manual/src/release-notes/rl-2.17.md +++ /dev/null @@ -1,42 +0,0 @@ -# Release 2.17 (2023-07-24) - -* [`nix-channel`](../command-ref/nix-channel.md) now supports a `--list-generations` subcommand. - -* The function [`builtins.fetchClosure`](../language/builtins.md#builtins-fetchClosure) can now fetch input-addressed paths in [pure evaluation mode](../command-ref/conf-file.md#conf-pure-eval), as those are not impure. - -* Nix now allows unprivileged/[`allowed-users`](../command-ref/conf-file.md#conf-allowed-users) to sign paths. - Previously, only [`trusted-users`](../command-ref/conf-file.md#conf-trusted-users) users could sign paths. - -* Nested dynamic attributes are now merged correctly by the parser. For example: - - ```nix - { - nested = { - foo = 1; - }; - nested = { - ${"ba" + "r"} = 2; - }; - } - ``` - - This used to silently discard `nested.bar`, but now behaves as one would expect and evaluates to: - - ```nix - { nested = { bar = 2; foo = 1; }; } - ``` - - Note that the feature of merging multiple *full declarations* of attribute sets like `nested` in the example is of questionable value. - It allows writing expressions that are very hard to read, for instance when there are many lines of code between two declarations of the same attribute. - This has been around for a long time and is therefore supported for backwards compatibility, but should not be relied upon. - - Instead, consider using the *nested attribute path* syntax: - - ```nix - { - nested.foo = 1; - nested.${"ba" + "r"} = 2; - } - ``` - -* Tarball flakes can now redirect to an "immutable" URL that will be recorded in lock files. This allows the use of "mutable" tarball URLs like `https://example.org/hello/latest.tar.gz` in flakes. See the [tarball fetcher](../protocols/tarball-fetcher.md) for details. diff --git a/doc/manual/src/release-notes/rl-2.18.md b/doc/manual/src/release-notes/rl-2.18.md deleted file mode 100644 index 4bbc52b50..000000000 --- a/doc/manual/src/release-notes/rl-2.18.md +++ /dev/null @@ -1,28 +0,0 @@ -# Release 2.18 (2023-09-20) - -- Two new builtin functions, - [`builtins.parseFlakeRef`](@docroot@/language/builtins.md#builtins-parseFlakeRef) - and - [`builtins.flakeRefToString`](@docroot@/language/builtins.md#builtins-flakeRefToString), - have been added. - These functions are useful for converting between flake references encoded as attribute sets and URLs. - -- [`builtins.toJSON`](@docroot@/language/builtins.md#builtins-parseFlakeRef) now prints [--show-trace](@docroot@/command-ref/conf-file.html#conf-show-trace) items for the path in which it finds an evaluation error. - -- Error messages regarding malformed input to [`nix derivation add`](@docroot@/command-ref/new-cli/nix3-derivation-add.md) are now clearer and more detailed. - -- The `discard-references` feature has been stabilized. - This means that the - [unsafeDiscardReferences](@docroot@/contributing/experimental-features.md#xp-feature-discard-references) - attribute is no longer guarded by an experimental flag and can be used - freely. - -- The JSON output for derived paths which are store paths is now a string, not an object with a single `path` field. - This only affects `nix-build --json` when "building" non-derivation things like fetched sources, which is a no-op. - -- A new builtin [`outputOf`](@docroot@/language/builtins.md#builtins-outputOf) has been added. - It is part of the [`dynamic-derivations`](@docroot@/contributing/experimental-features.md#xp-feature-dynamic-derivations) experimental feature. - -- Flake follow paths at depths greater than 2 are now handled correctly, preventing "follows a non-existent input" errors. - -- [`nix-store --query`](@docroot@/command-ref/nix-store/query.md) gained a new type of query: `--valid-derivers`. It returns all `.drv` files in the local store that *can be* used to build the output passed in argument. This is in contrast to `--deriver`, which returns the single `.drv` file that *was actually* used to build the output passed in argument. In case the output was substituted from a binary cache, this `.drv` file may only exist on said binary cache and not locally. diff --git a/doc/manual/src/release-notes/rl-2.2.md b/doc/manual/src/release-notes/rl-2.2.md deleted file mode 100644 index fa9af920d..000000000 --- a/doc/manual/src/release-notes/rl-2.2.md +++ /dev/null @@ -1,82 +0,0 @@ -# Release 2.2 (2019-01-11) - -This is primarily a bug fix release. It also has the following changes: - - - In derivations that use structured attributes (i.e. that specify set - the `__structuredAttrs` attribute to `true` to cause all attributes - to be passed to the builder in JSON format), you can now specify - closure checks per output, e.g.: - - outputChecks."out" = { - # The closure of 'out' must not be larger than 256 MiB. - maxClosureSize = 256 * 1024 * 1024; - - # It must not refer to C compiler or to the 'dev' output. - disallowedRequisites = [ stdenv.cc "dev" ]; - }; - - outputChecks."dev" = { - # The 'dev' output must not be larger than 128 KiB. - maxSize = 128 * 1024; - }; - - - The derivation attribute `requiredSystemFeatures` is now enforced - for local builds, and not just to route builds to remote builders. - The supported features of a machine can be specified through the - configuration setting `system-features`. - - By default, `system-features` includes `kvm` if `/dev/kvm` exists. - For compatibility, it also includes the pseudo-features - `nixos-test`, `benchmark` and `big-parallel` which are used by - Nixpkgs to route builds to particular Hydra build machines. - - - Sandbox builds are now enabled by default on Linux. - - - The new command `nix doctor` shows potential issues with your Nix - installation. - - - The `fetchGit` builtin function now uses a caching scheme that puts - different remote repositories in distinct local repositories, rather - than a single shared repository. This may require more disk space - but is faster. - - - The `dirOf` builtin function now works on relative paths. - - - Nix now supports [SRI hashes](https://www.w3.org/TR/SRI/), allowing - the hash algorithm and hash to be specified in a single string. For - example, you can write: - - import { - url = https://nixos.org/releases/nix/nix-2.1.3/nix-2.1.3.tar.xz; - hash = "sha256-XSLa0FjVyADWWhFfkZ2iKTjFDda6mMXjoYMXLRSYQKQ="; - }; - - instead of - - import { - url = https://nixos.org/releases/nix/nix-2.1.3/nix-2.1.3.tar.xz; - sha256 = "5d22dad058d5c800d65a115f919da22938c50dd6ba98c5e3a183172d149840a4"; - }; - - In fixed-output derivations, the `outputHashAlgo` attribute is no - longer mandatory if `outputHash` specifies the hash. - - `nix hash-file` and `nix - hash-path` now print hashes in SRI format by default. They also use - SHA-256 by default instead of SHA-512 because that's what we use - most of the time in Nixpkgs. - - - Integers are now 64 bits on all platforms. - - - The evaluator now prints profiling statistics (enabled via the - `NIX_SHOW_STATS` and `NIX_COUNT_CALLS` environment variables) in - JSON format. - - - The option `--xml` in `nix-store - --query` has been removed. Instead, there now is an option - `--graphml` to output the dependency graph in GraphML format. - - - All `nix-*` commands are now symlinks to `nix`. This saves a bit of - disk space. - - - `nix repl` now uses `libeditline` or `libreadline`. diff --git a/doc/manual/src/release-notes/rl-2.3.md b/doc/manual/src/release-notes/rl-2.3.md deleted file mode 100644 index d1f4e3734..000000000 --- a/doc/manual/src/release-notes/rl-2.3.md +++ /dev/null @@ -1,44 +0,0 @@ -# Release 2.3 (2019-09-04) - -This is primarily a bug fix release. However, it makes some incompatible -changes: - - - Nix now uses BSD file locks instead of POSIX file locks. Because of - this, you should not use Nix 2.3 and previous releases at the same - time on a Nix store. - -It also has the following changes: - - - `builtins.fetchGit`'s `ref` argument now allows specifying an - absolute remote ref. Nix will automatically prefix `ref` with - `refs/heads` only if `ref` doesn't already begin with `refs/`. - - - The installer now enables sandboxing by default on Linux when the - system has the necessary kernel support. - - - The `max-jobs` setting now defaults to 1. - - - New builtin functions: `builtins.isPath`, `builtins.hashFile`. - - - The `nix` command has a new `--print-build-logs` (`-L`) flag to - print build log output to stderr, rather than showing the last log - line in the progress bar. To distinguish between concurrent builds, - log lines are prefixed by the name of the package. - - - Builds are now executed in a pseudo-terminal, and the `TERM` - environment variable is set to `xterm-256color`. This allows many - programs (e.g. `gcc`, `clang`, `cmake`) to print colorized log - output. - - - Add `--no-net` convenience flag. This flag disables substituters; - sets the `tarball-ttl` setting to infinity (ensuring that any - previously downloaded files are considered current); and disables - retrying downloads and sets the connection timeout to the minimum. - This flag is enabled automatically if there are no configured - non-loopback network interfaces. - - - Add a `post-build-hook` setting to run a program after a build has - succeeded. - - - Add a `trace-function-calls` setting to log the duration of Nix - function calls to stderr. diff --git a/doc/manual/src/release-notes/rl-2.4.md b/doc/manual/src/release-notes/rl-2.4.md deleted file mode 100644 index 8b566fc7b..000000000 --- a/doc/manual/src/release-notes/rl-2.4.md +++ /dev/null @@ -1,542 +0,0 @@ -# Release 2.4 (2021-11-01) - -This is the first release in more than two years and is the result of -more than 2800 commits from 195 contributors since release 2.3. - -## Highlights - -* Nix's **error messages** have been improved a lot. For instance, - evaluation errors now point out the location of the error: - - ``` - $ nix build - error: undefined variable 'bzip3' - - at /nix/store/449lv242z0zsgwv95a8124xi11sp419f-source/flake.nix:88:13: - - 87| [ curl - 88| bzip3 xz brotli editline - | ^ - 89| openssl sqlite - ``` - -* The **`nix` command** has seen a lot of work and is now almost at - feature parity with the old command-line interface (the `nix-*` - commands). It aims to be [more modern, consistent and pleasant to - use](../contributing/cli-guideline.md) than the old CLI. It is still - marked as experimental but its interface should not change much - anymore in future releases. - -* **Flakes** are a new format to package Nix-based projects in a more - discoverable, composable, consistent and reproducible way. A flake - is just a repository or tarball containing a file named `flake.nix` - that specifies dependencies on other flakes and returns any Nix - assets such as packages, Nixpkgs overlays, NixOS modules or CI - tests. The new `nix` CLI is primarily based around flakes; for - example, a command like `nix run nixpkgs#hello` runs the `hello` - application from the `nixpkgs` flake. - - Flakes are currently marked as experimental. For an introduction, - see [this blog - post](https://www.tweag.io/blog/2020-05-25-flakes/). For detailed - information about flake syntax and semantics, see the [`nix flake` - manual page](../command-ref/new-cli/nix3-flake.md). - -* Nix's store can now be **content-addressed**, meaning that the hash - component of a store path is the hash of the path's - contents. Previously Nix could only build **input-addressed** store - paths, where the hash is computed from the derivation dependency - graph. Content-addressing allows deduplication, early cutoff in - build systems, and unprivileged closure copying. This is still [an - experimental - feature](https://discourse.nixos.org/t/content-addressed-nix-call-for-testers/12881). - -* The Nix manual has been converted into Markdown, making it easier to - contribute. In addition, every `nix` subcommand now has a manual - page, documenting every option. - -* A new setting that allows **experimental features** to be enabled - selectively. This allows us to merge unstable features into Nix more - quickly and do more frequent releases. - -## Other features - -* There are many new `nix` subcommands: - - - `nix develop` is intended to replace `nix-shell`. It has a number - of new features: - - * It automatically sets the output environment variables (such as - `$out`) to writable locations (such as `./outputs/out`). - - * It can store the environment in a profile. This is useful for - offline work. - - * It can run specific phases directly. For instance, `nix develop - --build` runs `buildPhase`. - - - It allows dependencies in the Nix store to be "redirected" to - arbitrary directories using the `--redirect` flag. This is - useful if you want to hack on a package *and* some of its - dependencies at the same time. - - - `nix print-dev-env` prints the environment variables and bash - functions defined by a derivation. This is useful for users of - other shells than bash (especially with `--json`). - - - `nix shell` was previously named `nix run` and is intended to - replace `nix-shell -p`, but without the `stdenv` overhead. It - simply starts a shell where some packages have been added to - `$PATH`. - - - `nix run` (not to be confused with the old subcommand that has - been renamed to `nix shell`) runs an "app", a flake output that - specifies a command to run, or an eponymous program from a - package. For example, `nix run nixpkgs#hello` runs the `hello` - program from the `hello` package in `nixpkgs`. - - - `nix flake` is the container for flake-related operations, such as - creating a new flake, querying the contents of a flake or updating - flake lock files. - - - `nix registry` allows you to query and update the flake registry, - which maps identifiers such as `nixpkgs` to concrete flake URLs. - - - `nix profile` is intended to replace `nix-env`. Its main advantage - is that it keeps track of the provenance of installed packages - (e.g. exactly which flake version a package came from). It also - has some helpful subcommands: - - * `nix profile history` shows what packages were added, upgraded - or removed between each version of a profile. - - * `nix profile diff-closures` shows the changes between the - closures of each version of a profile. This allows you to - discover the addition or removal of dependencies or size - changes. - - **Warning**: after a profile has been updated using `nix profile`, - it is no longer usable with `nix-env`. - - - `nix store diff-closures` shows the differences between the - closures of two store paths in terms of the versions and sizes of - dependencies in the closures. - - - `nix store make-content-addressable` rewrites an arbitrary closure - to make it content-addressed. Such paths can be copied into other - stores without requiring signatures. - - - `nix bundle` uses the [`nix-bundle` - program](https://github.com/matthewbauer/nix-bundle) to convert a - closure into a self-extracting executable. - - - Various other replacements for the old CLI, e.g. `nix store gc`, - `nix store delete`, `nix store repair`, `nix nar dump-path`, `nix - store prefetch-file`, `nix store prefetch-tarball`, `nix key` and - `nix daemon`. - -* Nix now has an **evaluation cache** for flake outputs. For example, - a second invocation of the command `nix run nixpkgs#firefox` will - not need to evaluate the `firefox` attribute because it's already in - the evaluation cache. This is made possible by the hermetic - evaluation model of flakes. - -* The new `--offline` flag disables substituters and causes all - locally cached tarballs and repositories to be considered - up-to-date. - -* The new `--refresh` flag causes all locally cached tarballs and - repositories to be considered out-of-date. - -* Many `nix` subcommands now have a `--json` option to produce - machine-readable output. - -* `nix repl` has a new `:doc` command to show documentation about - builtin functions (e.g. `:doc builtins.map`). - -* Binary cache stores now have an option `index-debug-info` to create - an index of DWARF debuginfo files for use by - [`dwarffs`](https://github.com/edolstra/dwarffs). - -* To support flakes, Nix now has an extensible mechanism for fetching - source trees. Currently it has the following backends: - - * Git repositories - - * Mercurial repositories - - * GitHub and GitLab repositories (an optimisation for faster - fetching than Git) - - * Tarballs - - * Arbitrary directories - - The fetcher infrastructure is exposed via flake input specifications - and via the `fetchTree` built-in. - -* **Languages changes**: the only new language feature is that you can - now have antiquotations in paths, e.g. `./${foo}` instead of `./. + - foo`. - -* **New built-in functions**: - - - `builtins.fetchTree` allows fetching a source tree using any - backends supported by the fetcher infrastructure. It subsumes the - functionality of existing built-ins like `fetchGit`, - `fetchMercurial` and `fetchTarball`. - - - `builtins.getFlake` fetches a flake and returns its output - attributes. This function should not be used inside flakes! Use - flake inputs instead. - - - `builtins.floor` and `builtins.ceil` round a floating-point number - down and up, respectively. - -* Experimental support for recursive Nix. This means that Nix - derivations can now call Nix to build other derivations. This is not - in a stable state yet and not well - [documented](https://github.com/NixOS/nix/commit/c4d7c76b641d82b2696fef73ce0ac160043c18da). - -* The new experimental feature `no-url-literals` disables URL - literals. This helps to implement [RFC - 45](https://github.com/NixOS/rfcs/pull/45). - -* Nix now uses `libarchive` to decompress and unpack tarballs and zip - files, so `tar` is no longer required. - -* The priority of substituters can now be overridden using the - `priority` substituter setting (e.g. `--substituters - 'http://cache.nixos.org?priority=100 daemon?priority=10'`). - -* `nix edit` now supports non-derivation attributes, e.g. `nix edit - .#nixosConfigurations.bla`. - -* The `nix` command now provides command line completion for `bash`, - `zsh` and `fish`. Since the support for getting completions is built - into `nix`, it's easy to add support for other shells. - -* The new `--log-format` flag selects what Nix's output looks like. It - defaults to a terse progress indicator. There is a new - `internal-json` output format for use by other programs. - -* `nix eval` has a new `--apply` flag that applies a function to the - evaluation result. - -* `nix eval` has a new `--write-to` flag that allows it to write a - nested attribute set of string leaves to a corresponding directory - tree. - -* Memory improvements: many operations that add paths to the store or - copy paths between stores now run in constant memory. - -* Many `nix` commands now support the flag `--derivation` to operate - on a `.drv` file itself instead of its outputs. - -* There is a new store called `dummy://` that does not support - building or adding paths. This is useful if you want to use the Nix - evaluator but don't have a Nix store. - -* The `ssh-ng://` store now allows substituting paths on the remote, - as `ssh://` already did. - -* When auto-calling a function with an ellipsis, all arguments are now - passed. - -* New `nix-shell` features: - - - It preserves the `PS1` environment variable if - `NIX_SHELL_PRESERVE_PROMPT` is set. - - - With `-p`, it passes any `--arg`s as Nixpkgs arguments. - - - Support for structured attributes. - -* `nix-prefetch-url` has a new `--executable` flag. - -* On `x86_64` systems, [`x86_64` microarchitecture - levels](https://lwn.net/Articles/844831/) are mapped to additional - system types (e.g. `x86_64-v1-linux`). - -* The new `--eval-store` flag allows you to use a different store for - evaluation than for building or storing the build result. This is - primarily useful when you want to query whether something exists in - a read-only store, such as a binary cache: - - ``` - # nix path-info --json --store https://cache.nixos.org \ - --eval-store auto nixpkgs#hello - ``` - - (Here `auto` indicates the local store.) - -* The Nix daemon has a new low-latency mechanism for copying - closures. This is useful when building on remote stores such as - `ssh-ng://`. - -* Plugins can now register `nix` subcommands. - -* The `--indirect` flag to `nix-store --add-root` has become a no-op. - `--add-root` will always generate indirect GC roots from now on. - -## Incompatible changes - -* The `nix` command is now marked as an experimental feature. This - means that you need to add - - ``` - experimental-features = nix-command - ``` - - to your `nix.conf` if you want to use it, or pass - `--extra-experimental-features nix-command` on the command line. - -* The `nix` command no longer has a syntax for referring to packages - in a channel. This means that the following no longer works: - - ```console - nix build nixpkgs.hello # Nix 2.3 - ``` - - Instead, you can either use the `#` syntax to select a package from - a flake, e.g. - - ```console - nix build nixpkgs#hello - ``` - - Or, if you want to use the `nixpkgs` channel in the `NIX_PATH` - environment variable: - - ```console - nix build -f '' hello - ``` - -* The old `nix run` has been renamed to `nix shell`, while there is a - new `nix run` that runs a default command. So instead of - - ```console - nix run nixpkgs.hello -c hello # Nix 2.3 - ``` - - you should use - - ```console - nix shell nixpkgs#hello -c hello - ``` - - or just - - ```console - nix run nixpkgs#hello - ``` - - if the command you want to run has the same name as the package. - -* It is now an error to modify the `plugin-files` setting via a - command-line flag that appears after the first non-flag argument to - any command, including a subcommand to `nix`. For example, - `nix-instantiate default.nix --plugin-files ""` must now become - `nix-instantiate --plugin-files "" default.nix`. - -* We no longer release source tarballs. If you want to build from - source, please build from the tags in the Git repository. - -## Contributors - -This release has contributions from -Adam Höse, -Albert Safin, -Alex Kovar, -Alex Zero, -Alexander Bantyev, -Alexandre Esteves, -Alyssa Ross, -Anatole Lucet, -Anders Kaseorg, -Andreas Rammhold, -Antoine Eiche, -Antoine Martin, -Arnout Engelen, -Arthur Gautier, -aszlig, -Ben Burdette, -Benjamin Hipple, -Bernardo Meurer, -Björn Gohla, -Bjørn Forsman, -Bob van der Linden, -Brian Leung, -Brian McKenna, -Brian Wignall, -Bruce Toll, -Bryan Richter, -Calle Rosenquist, -Calvin Loncaric, -Carlo Nucera, -Carlos D'Agostino, -Chaz Schlarp, -Christian Höppner, -Christian Kampka, -Chua Hou, -Chuck, -Cole Helbling, -Daiderd Jordan, -Dan Callahan, -Dani, -Daniel Fitzpatrick, -Danila Fedorin, -Daniël de Kok, -Danny Bautista, -DavHau, -David McFarland, -Dima, -Domen Kožar, -Dominik Schrempf, -Dominique Martinet, -dramforever, -Dustin DeWeese, -edef, -Eelco Dolstra, -Ellie Hermaszewska, -Emilio Karakey, -Emily, -Eric Culp, -Ersin Akinci, -Fabian Möller, -Farid Zakaria, -Federico Pellegrin, -Finn Behrens, -Florian Franzen, -Félix Baylac-Jacqué, -Gabriella Gonzalez, -Geoff Reedy, -Georges Dubus, -Graham Christensen, -Greg Hale, -Greg Price, -Gregor Kleen, -Gregory Hale, -Griffin Smith, -Guillaume Bouchard, -Harald van Dijk, -illustris, -Ivan Zvonimir Horvat, -Jade, -Jake Waksbaum, -jakobrs, -James Ottaway, -Jan Tojnar, -Janne Heß, -Jaroslavas Pocepko, -Jarrett Keifer, -Jeremy Schlatter, -Joachim Breitner, -Joe Pea, -John Ericson, -Jonathan Ringer, -Josef Kemetmüller, -Joseph Lucas, -Jude Taylor, -Julian Stecklina, -Julien Tanguy, -Jörg Thalheim, -Kai Wohlfahrt, -keke, -Keshav Kini, -Kevin Quick, -Kevin Stock, -Kjetil Orbekk, -Krzysztof Gogolewski, -kvtb, -Lars Mühmel, -Leonhard Markert, -Lily Ballard, -Linus Heckemann, -Lorenzo Manacorda, -Lucas Desgouilles, -Lucas Franceschino, -Lucas Hoffmann, -Luke Granger-Brown, -Madeline Haraj, -Marwan Aljubeh, -Mat Marini, -Mateusz Piotrowski, -Matthew Bauer, -Matthew Kenigsberg, -Mauricio Scheffer, -Maximilian Bosch, -Michael Adler, -Michael Bishop, -Michael Fellinger, -Michael Forney, -Michael Reilly, -mlatus, -Mykola Orliuk, -Nathan van Doorn, -Naïm Favier, -ng0, -Nick Van den Broeck, -Nicolas Stig124 Formichella, -Niels Egberts, -Niklas Hambüchen, -Nikola Knezevic, -oxalica, -p01arst0rm, -Pamplemousse, -Patrick Hilhorst, -Paul Opiyo, -Pavol Rusnak, -Peter Kolloch, -Philipp Bartsch, -Philipp Middendorf, -Piotr Szubiakowski, -Profpatsch, -Puck Meerburg, -Ricardo M. Correia, -Rickard Nilsson, -Robert Hensing, -Robin Gloster, -Rodrigo, -Rok Garbas, -Ronnie Ebrin, -Rovanion Luckey, -Ryan Burns, -Ryan Mulligan, -Ryne Everett, -Sam Doshi, -Sam Lidder, -Samir Talwar, -Samuel Dionne-Riel, -Sebastian Ullrich, -Sergei Trofimovich, -Sevan Janiyan, -Shao Cheng, -Shea Levy, -Silvan Mosberger, -Stefan Frijters, -Stefan Jaax, -sternenseemann, -Steven Shaw, -Stéphan Kochen, -SuperSandro2000, -Suraj Barkale, -Taeer Bar-Yam, -Thomas Churchman, -Théophane Hufschmitt, -Timothy DeHerrera, -Timothy Klim, -Tobias Möst, -Tobias Pflug, -Tom Bereknyei, -Travis A. Everett, -Ujjwal Jain, -Vladimír Čunát, -Wil Taylor, -Will Dietz, -Yaroslav Bolyukin, -Yestin L. Harrison, -YI, -Yorick van Pelt, -Yuriy Taraday and -zimbatm. diff --git a/doc/manual/src/release-notes/rl-2.5.md b/doc/manual/src/release-notes/rl-2.5.md deleted file mode 100644 index dd6fd3b0f..000000000 --- a/doc/manual/src/release-notes/rl-2.5.md +++ /dev/null @@ -1,16 +0,0 @@ -# Release 2.5 (2021-12-13) - -* The garbage collector no longer blocks new builds, so the message - `waiting for the big garbage collector lock...` is a thing of the - past. - -* Binary cache stores now have a setting `compression-level`. - -* `nix develop` now has a flag `--unpack` to run `unpackPhase`. - -* Lists can now be compared lexicographically using the `<` operator. - -* New built-in function: `builtins.groupBy`, with the same functionality as - Nixpkgs' `lib.groupBy`, but faster. - -* `nix repl` now has a `:log` command. diff --git a/doc/manual/src/release-notes/rl-2.6.md b/doc/manual/src/release-notes/rl-2.6.md deleted file mode 100644 index 280faead1..000000000 --- a/doc/manual/src/release-notes/rl-2.6.md +++ /dev/null @@ -1,21 +0,0 @@ -# Release 2.6 (2022-01-24) - -* The Nix CLI now searches for a `flake.nix` up until the root of the current - Git repository or a filesystem boundary rather than just in the current - directory. -* The TOML parser used by `builtins.fromTOML` has been replaced by [a - more compliant one](https://github.com/ToruNiina/toml11). -* Added `:st`/`:show-trace` commands to `nix repl`, which are used to - set or toggle display of error traces. -* New builtin function `builtins.zipAttrsWith` with the same - functionality as `lib.zipAttrsWith` from Nixpkgs, but much more - efficient. -* New command `nix store copy-log` to copy build logs from one store - to another. -* The `commit-lockfile-summary` option can be set to a non-empty - string to override the commit summary used when commiting an updated - lockfile. This may be used in conjunction with the `nixConfig` - attribute in `flake.nix` to better conform to repository - conventions. -* `docker run -ti nixos/nix:master` will place you in the Docker - container with the latest version of Nix from the `master` branch. diff --git a/doc/manual/src/release-notes/rl-2.7.md b/doc/manual/src/release-notes/rl-2.7.md deleted file mode 100644 index 2f3879422..000000000 --- a/doc/manual/src/release-notes/rl-2.7.md +++ /dev/null @@ -1,33 +0,0 @@ -# Release 2.7 (2022-03-07) - -* Nix will now make some helpful suggestions when you mistype - something on the command line. For instance, if you type `nix build - nixpkgs#thunderbrd`, it will suggest `thunderbird`. - -* A number of "default" flake output attributes have been - renamed. These are: - - * `defaultPackage.` → `packages..default` - * `defaultApps.` → `apps..default` - * `defaultTemplate` → `templates.default` - * `defaultBundler.` → `bundlers..default` - * `overlay` → `overlays.default` - * `devShell.` → `devShells..default` - - The old flake output attributes still work, but `nix flake check` - will warn about them. - -* Breaking API change: `nix bundle` now supports bundlers of the form - `bundler..= derivation: another-derivation;`. This - supports additional functionality to inspect evaluation information - during bundling. A new - [repository](https://github.com/NixOS/bundlers) has various bundlers - implemented. - -* `nix store ping` now reports the version of the remote Nix daemon. - -* `nix flake {init,new}` now display information about which files have been - created. - -* Templates can now define a `welcomeText` attribute, which is printed out by - `nix flake {init,new} --template