-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
these changes were not merged properly and had to be reverted. see merge commit d8e54d1 for full history leading up to here.
- Loading branch information
1 parent
37358d0
commit be8744f
Showing
2 changed files
with
78 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
# Architecture | ||
|
||
This chapter describes how Nix works. | ||
It should help users understand why Nix behaves as it does, and it should help developers understand how to modify Nix and how to write similar tools. | ||
|
||
## Overview | ||
|
||
Nix consists of [hierarchical layers]. | ||
|
||
[hierarchical layers]: https://en.m.wikipedia.org/wiki/Multitier_architecture#Layers | ||
|
||
``` | ||
+---------------------------------------------------------------+ | ||
| Nix | | ||
| [ commmand line interface ]------, | | ||
| | | | | ||
| evaluates | | | ||
| | manages | | ||
| V | | | ||
| [ configuration language ] | | | ||
| | | | | ||
| +----------------------------|-------------------V----------+ | | ||
| | store evaluates to | | | ||
| | | | | | ||
| | referenced by V builds | | | ||
| | [ build input ] ---> [ build plan ] ---> [ build result ] | | | ||
| | | | | ||
| +-----------------------------------------------------------+ | | ||
+---------------------------------------------------------------+ | ||
``` | ||
|
||
At the top is the [command line interface](../command-ref/command-ref.md), translating from invocations of Nix executables to interactions with the underlying layers. | ||
|
||
Below that is the [Nix language](../language/index.md), a [purely functional] configuration language. | ||
It is used to compose expressions which ultimately evaluate to self-contained *build plans*, used to derive *build results* from referenced *build inputs*. | ||
|
||
[purely functional]: https://en.m.wikipedia.org/wiki/Purely_functional_programming | ||
|
||
Command line interface and Nix language are what users interact 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 these 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. | ||
|
||
A build plan is a series of *build tasks*. | ||
Each build task has a special build input, which is used as *build instructions*. | ||
The result of a build task can be input to another build task. | ||
|
||
> **Important** | ||
> A build task in Nix is called [derivation](../glossary#gloss-derivation). | ||
``` | ||
+----------------------------------------------------------------------------------+ | ||
| store .............................................. | | ||
| : build plan : | | ||
| : : | | ||
| [ build input ]---instructions-, : | | ||
| : | : | | ||
| : v : | | ||
| [ build input ]--------->[ build task ]-instructions-, : | | ||
| : | : | | ||
| : v : | | ||
| [ build input ]---instructions-, [ build task ]--->[ build result ] | | ||
| : | ^ : | | ||
| : v | : | | ||
| [ build input ]--------->[ build task ]--------------' : | | ||
| : ^ : | | ||
| : | : | | ||
| [ build input ]----------------' : | | ||
| : : | | ||
| :............................................: | | ||
+----------------------------------------------------------------------------------+ | ||
``` | ||
|