|
2 | 2 |
|
3 | 3 | nix.dev is a community effort to collect, create, and maintain world-class learning resources for Nix.
|
4 | 4 |
|
5 |
| -It is supposed to fit between first impressions on the [Nix web site](https://nixos.org) and the reference manuals for [Nix][nix manual] ([source][nix manual src]), [Nixpkgs][nixpkgs manual] ([source][nixpkgs manual src]), and [NixOS][nixos manual] ([source][nixos manual src]). |
6 |
| -See the [vision](#vision) and [textual outline](#outline) for an idea of a desired end state. |
7 |
| - |
8 |
| -[nix manual]: https://nixos.org/manual/nix |
9 |
| -[nix manual src]: https://github.com/NixOS/nix/tree/master/doc/manual |
10 |
| -[nixpkgs manual]: https://nixos.org/manual/nixpkgs |
11 |
| -[nixpkgs manual src]: https://github.com/NixOS/nixpkgs/tree/master/doc |
12 |
| -[nixos manual]: https://nixos.org/manual/nixos |
13 |
| -[nixos manual src]: https://github.com/NixOS/nixpkgs/tree/master/nixos/doc/manual |
14 |
| - |
15 | 5 | We strongly encourage everyone interested to contribute by asking informed questions or directly proposing changes.
|
16 | 6 |
|
17 |
| -Make a [pull request] if you want to introduce an incremental change. |
| 7 | +Make a [pull request](https://github.com/NixOS/nix.dev/pulls) if you want to introduce an incremental change. |
18 | 8 | Note our [considerations on licensing and attribution](#licensing-and-attribution).
|
19 | 9 |
|
20 |
| -Open an [issue] if you want to clarify something not evident from what is provided in this repository, or if you want to discuss a significant change before starting to work on it. |
21 |
| - |
22 |
| -[issue]: https://github.com/NixOS/nix.dev/issues |
23 |
| -[pull request]: https://github.com/NixOS/nix.dev/pulls |
| 10 | +Open an [issue](https://github.com/NixOS/nix.dev/issues) if you want to clarify something not evident from what is provided in this repository, or if you want to discuss a significant change before starting to work on it. |
24 | 11 |
|
25 | 12 | ## Code of conduct
|
26 | 13 |
|
@@ -80,164 +67,6 @@ We would be glad to incorporate your insights.
|
80 | 67 |
|
81 | 68 | Please read [Contributing Documentation](https://nix.dev/contributing/documentation).
|
82 | 69 |
|
83 |
| -# Vision |
84 |
| - |
85 |
| -This is our vision for the journey into Nix, Nixpkgs, and NixOS. |
86 |
| -We want to create and collect learning resources for mastering the ecosystem step by step. |
87 |
| - |
88 |
| -Use it as a scaffold to to find a place for your ideas on new tutorials and guides. |
89 |
| -It is still subject to change and refinement as we find out more about learners' needs, but already proved helpful for orienting beginners. |
90 |
| - |
91 |
| -```mermaid |
92 |
| -flowchart TB |
93 |
| - subgraph install[install Nix] |
94 |
| - direction TB |
95 |
| - Linux |
96 |
| - macOS |
97 |
| - Windows |
98 |
| - Docker |
99 |
| - end |
100 |
| - subgraph first-steps[run any program] |
101 |
| - run[ad hoc environments] |
102 |
| - findpkgs[find packages] |
103 |
| - scripts[reproducible scripts] |
104 |
| - gc[garbage collection] |
105 |
| - end |
106 |
| - subgraph imperative[imperative package management] |
107 |
| - install-imperative[install packages] |
108 |
| - upgrade[upgrade packages] |
109 |
| - rollback[rollback packages] |
110 |
| - pinning[pin package version] |
111 |
| - end |
112 |
| - subgraph lang[Nix language] |
113 |
| - basics |
114 |
| - debugging |
115 |
| - best-practices[best practices] |
116 |
| - tooling |
117 |
| - end |
118 |
| - subgraph declarative[declarative environments] |
119 |
| - shell[declarative shells] |
120 |
| - pin[pinning dependencies] |
121 |
| - adapt[package variants and patches] |
122 |
| - end |
123 |
| - subgraph configuration[declarative configuration management] |
124 |
| - user[declarative user environments] |
125 |
| - nixos[declarative operating systems] |
126 |
| - nixos-contrib[contributing to NixOS] |
127 |
| - end |
128 |
| - subgraph pkgs[declarative package management] |
129 |
| - trivial[creating simple packages] |
130 |
| - ecosystems[language ecosystems] |
131 |
| - nixpkgs[contributing to Nixpkgs] |
132 |
| - end |
133 |
| - subgraph dev[software development lifecycle] |
134 |
| - tests |
135 |
| - caching[build caching] |
136 |
| - deployment |
137 |
| - ci[continuous integration] |
138 |
| - distributed[distributed builds] |
139 |
| - cross-compilation |
140 |
| - bundling[bundling build results] |
141 |
| - nixos-tests[testing distributed systems with NixOS] |
142 |
| - nix[contributing to Nix] |
143 |
| - end |
144 |
| - install --> first-steps |
145 |
| - first-steps --> lang & imperative |
146 |
| - lang --> declarative |
147 |
| - declarative --> configuration & pkgs |
148 |
| - configuration --> dev |
149 |
| - pkgs --> dev |
150 |
| -``` |
151 |
| - |
152 |
| -# Outline |
153 |
| - |
154 |
| -See [Vision](#vision) for a graphical outline that illustrates the intended learning journey. |
155 |
| - |
156 |
| -## Install Nix |
157 |
| - |
158 |
| -Instructions for the various installation methods. |
159 |
| - |
160 |
| -## Build and run software |
161 |
| - |
162 |
| -Here we show how existing build plans are used to produce working software. |
163 |
| - |
164 |
| -- Find packaged software |
165 |
| -- Run software from existing packages |
166 |
| -- Set up a temporary environment |
167 |
| - |
168 |
| -The next chapter chapter is about how to hold onto the ephemeral examples from the previous chapter, and how to create more complex environments by composing existing packages. |
169 |
| - |
170 |
| -## Imperative package management |
171 |
| - |
172 |
| -Describes a straightforward transition from temporary environments using existing packages. |
173 |
| - |
174 |
| -- Persist packages in the file system |
175 |
| -- Updates, rollbacks, pinning |
176 |
| -- Garbage collection |
177 |
| - |
178 |
| -Imperative package management's unique feature is that it allows updating each package independently to the most recent available version without touching the rest of the system. |
179 |
| - |
180 |
| -## Nix language |
181 |
| - |
182 |
| -Leveraging the full power of Nix requires understanding the Nix language, and eventually learning to write Nix expressions. |
183 |
| - |
184 |
| -- Syntax and semantics |
185 |
| - - Attribute sets |
186 |
| - - Functions |
187 |
| -- Debugging |
188 |
| -- Best practices |
189 |
| -- Tooling |
190 |
| - - Syntax highlighting |
191 |
| - - Linters |
192 |
| - - Formatters |
193 |
| - |
194 |
| -## Declarative environments |
195 |
| - |
196 |
| -While imperative package management supports "generations", it does not have proper change management, "profiles" are not portable, and it is not immediately obvious how to compose packages into a larger unit. |
197 |
| -This section shows how to have all of that by declaring a Nix expression in a file that can be used on any system that supports Nix. |
198 |
| - |
199 |
| -- Declare a reproducible environment |
200 |
| -- Pinning dependencies |
201 |
| -- Adapt packages to your needs |
202 |
| - |
203 |
| -## Declarative package management |
204 |
| - |
205 |
| -Here we show how existing packages come into being, and how to modify and create packages. |
206 |
| - |
207 |
| -- Modifying existing packages |
208 |
| -- Creating new packages |
209 |
| -- Language ecosystems |
210 |
| -- Contribute to Nixpkgs |
211 |
| - |
212 |
| -Creating packages and contributing are advanced topics that require much more detail (especially langauge specifics), and are partially covered in the Nixpkgs manual already. |
213 |
| -In this context they are intended to demonstrate Nixpkgs architecture and design, to enable readers to navigate existing code, assess pull requests, and create or maintain their own packages. |
214 |
| -This should be fairly superficial, otherwise it would duplicate much of the Nixpkgs manual. |
215 |
| - |
216 |
| -Alternatively these sections could be dropped entirely, or moved to their own chapter and reference or reuse much of the Nixpkgs manual. |
217 |
| -This is subject to refinement. |
218 |
| - |
219 |
| -## Declarative configuration management |
220 |
| - |
221 |
| -This section shows how the disconnected packages from previous examples can be wired up into a consistent and persistent user environment or operating system configuration. |
222 |
| - |
223 |
| -- Declarative user environments with Home Manager |
224 |
| -- Declarative operating systems with NixOS |
225 |
| -- Contributing to NixOS |
226 |
| - |
227 |
| -## Software development lifecycle |
228 |
| - |
229 |
| -- Caching |
230 |
| -- Deployment |
231 |
| -- Continuous integration |
232 |
| -- Distributed builds |
233 |
| -- Cross-compilation |
234 |
| -- Bundling build results |
235 |
| - - Virtual machines |
236 |
| - - Docker containers |
237 |
| -- Contributing to Nix |
238 |
| - |
239 |
| -# Contributor notes |
240 |
| - |
241 | 70 | ## GitHub heading anchors fails linkcheck
|
242 | 71 |
|
243 | 72 | Due to a [Sphinx bug][linkcheck gh bug], linkcheck fails when it verifies the
|
|
0 commit comments