Open alecandido opened 4 months ago
Thank you very much for your review. I have just fixed some of the problems and updated them on this issue, and I will continue this work later in my free time.
@ryan4yin as I wrote above, I wanted to first go through the book, to have a full overview (there are different things that you note during the first reading, or after completion - this issue is to save the first kind).
However, for the remaining ones I will contribute myself :)
This is a great collection, since Nix has valuable docs, but the information is scattered in infinite places, and there is so little for the entry level... So, I found out that I really like to contribute to the book, because then I'll be more confident to tell other people to start using Nix ("it's simple, there's a great book explaining it!").
The only piece I won't be able to contribute to for sure will be the Chinese translation, I'm sorry 😓
I wanted to first go through the book, to have a full overview (there are different things that you note during the first reading, or after completion - this issue is to save the first kind).
Got it.
However, for the remaining ones I will contribute myself :)
This is a great collection, since Nix has valuable docs, but the information is scattered in infinite places, and there is so little for the entry level... So, I found out that I really like to contribute to the book, because then I'll be more confident to tell other people to start using Nix ("it's simple, there's a great book explaining it!").
Very much looking forward to your contribution! :heart:
The only piece I won't be able to contribute to for sure will be the Chinese translation, I'm sorry 😓
It's not a problem. I'll take care of the Chinese part.
FYI: I have just fixed a lot of markup issues & typos via spellchecker & code formatter: #122 #123 #124 #125
FYI: I have just fixed a lot of markup issues & typos via spellchecker & code formatter: #122 #123 #124 #125
That is great. For ease of writing (and referencing) I would also suggest formatting the files on 80-100 columns. I know this could be controversial, and most editors are able to wrap the lines. But, e.g., the preview of GitHub is not wrapping at all...
I would also suggest formatting the files on 80-100 columns.
Done, Everything seems to be fine after the change. #126
helix example of flake and module system chapter has a small typo in the comment, you probably meant "choose" not "chose"
you probably meant "choose" not "chose"
@thngz Fixed by https://github.com/ryan4yin/nixos-and-flakes-book/commit/dae7350debaa5baf48fcebc0d621ed93d1e3672a
Sorry to bother again: this time, I decided to avoid filing many more issues, and to collect feedback in a single evolving one. ~Maybe it will end up being a list of one element, but~ I want to prevent large noise generation.
Moreover, now I'd prefer reading your book cover-to-cover. When I'll approach the end, I hope I will have some time left and author a PR myself (or multiple, if needed) to fix anything that is still on this list.
Minor improvements
NixOS with flakes enabled
nixpkgs.pkgs
should be justpkgs
, isn't it? https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/nixos-with-flakes/nixos-with-flakes-enabled.md?plain=1#L258hardware-configuration.nix
in https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/nixos-with-flakes/nixos-with-flakes-enabled.md?plain=1#L261 but I found no authoritative examples, and most of the people end up customizing it (so it is unreliable to link personal configs) currently, the best alternative I can propose is to link the (almost empty)nixos-generate-config
wiki page_module.args
is actually documented in each appendix (of NixOS, nix-darwin, and home manager), cf. https://nixos.org/manual/nixos/stable/options#opt-_module.args https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/nixos-with-flakes/nixos-with-flakes-enabled.md?plain=1#L278-L279 this documentation is exactly the one extracted from the description, but I would say is a better referenceCustom cache servers
2.
, while the second as1.
-> md takes the freedom of making them sequential, and it renders the1.
as3.
🤦1.
is a list of one item - I'd suggest making it unsortedHow to Add ...
appears like a section title, but it's a plain paragraphai
withmy-nixos
, since more explicitn (though Ai Hoshino is great :P)Modularize the configuration
nixpkgs
(as mostly the rest of NixOS), but I believe the canonical reference about modules to be in the NixOS docs (in particular the dedicated, extended, writing modules section) https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/nixos-with-flakes/modularize-the-configuration.md?plain=1#L27 in particular, there is an explicit section about imports (not that contains much more information, but it is definitely more friendly)Downgrading or Upgrading Packages
import
with flakes https://github.com/ryan4yin/nixos-and-flakes-book/blob/4536260f6eda6ac24272141af8f04903fe0f3d50/docs/nixos-with-flakes/downgrade-or-upgrade-packages.md?plain=1#L39 it is true that is ubiquitous, especially fornixpkgs
, but you're implicitly relying on the presence of the legacydefault.nix
(the flake way would benixpkgs.legacyPackages...
) it is a nice workaround even in other situations, but it's better that you know what you're doing Ah, actually there was a related not here https://github.com/ryan4yin/nixos-and-flakes-book/blob/4536260f6eda6ac24272141af8f04903fe0f3d50/docs/nixos-with-flakes/downgrade-or-upgrade-packages.md?plain=1#L100 but I would explain that withimport
you're essentially taking the path, and relying ondefault.nix
(btw, it's legacy only top-level, and perfectly fine elsewhere)inherit
? It doesn't change anything, but it is idiomatic, and I believe could be good for a beginners' book https://github.com/ryan4yin/nixos-and-flakes-book/blob/4536260f6eda6ac24272141af8f04903fe0f3d50/docs/nixos-with-flakes/downgrade-or-upgrade-packages.md?plain=1#L42Module System and Custom Options
nix-darwin
at the same level of NixOS and home manager https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/other-usage-of-flakes/module-system.md?plain=1#L8 and it also has its online docs (though not a search engine, to the best of my knowledge, but you can use "find in the page") https://daiderd.com/nix-darwin/manual/index.htmlconfig
, omitting it, since you do not need to declare anyoption
=> config
, since it never needs to evaluate the fullconfig
object, and thusconfig.foo
is already enough https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/other-usage-of-flakes/module-system.md?plain=1#L208 I'd rephrase even the nested points, since the moment you arrive toconfig.foo
you find out that is a leaf, and you conclude the execution, no dependency on the outerconfig
, that's just a value (ok, it is for sure an attribute set because oflib.mkOption
, but you could pretend it's the default value...)config.warnings =>
, since the starting point (CLI invocation) is always the same https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/other-usage-of-flakes/module-system.md?plain=1#L215 explaining it as a 0th point (i.e. point 1, and shift the others)if ... then ... else
andlib.mkIf
in greater details, possibly going through the implementation https://github.com/ryan4yin/nixos-and-flakes-book/blob/675409603a98cb915eb7482be62c08559b87a38a/docs/other-usage-of-flakes/module-system.md?plain=1#L223Overriding
.override
to.overrideAttrs
, without an explicit comparison (nor any introduction)nix repl
usage is interspersed and redundantOverlays
self: super:
andfinal: prev:
are equivalent, and that the latter is the "modern" terminology, while the first is still present in many places https://nixos.wiki/wiki/OverlaysCustom NIX_PATH and Flake Registry
nix repl nixpkgs
(that is a strict subset of the characters above, and makes use of flakes) but the true question is: do you really needNIX_PATH
at all with flakes?The Ingenious Uses of Multiple nixpkgs Instances
import nixpkgs
around (in this and previous sections), and then cite the 1000 instances of nixpkgsimport nixpkgs
in inputs, possibly differently named inputs with the same URL (I have to check that this actually works, but I don't see why it should not)Packaging 101
poetry2nix
, it can be really trivial)crane
, it can also be quite straightforward)cabal2nix
(an official NixOS project), buthaskell.nix
seems to have enough momentum as well, and even better docs, supporting both Cabal and Stack...Development Environments on NixOS
direnv
, since it is useful, but it could also handle automaticallynix develop
shell behavior https://discourse.nixos.org/t/using-nix-develop-opens-bash-instead-of-zsh/25075/6Dev Environments