Conversation
This removes the Nix Pills reference, because they are not a good introduction to the Nix ecosystem, but rather a thorough explanation of many disparate things. Reading through them might give some light bulb moments for an intermediate reader, but that does not mean that they're good for a beginner. I've also removed the mention of infinite recursion without source location. That's an old meme for a problem that has been mostly solved. Mentioning it here has two effects - Propagate the outdated meme - Make users insensitive to bad errors. Learned helplessness. That kind of thing. What we really want is for them to report bad error messages, so that they can be fixed. And they can be fixed; just report them at `NixOS/nix`
|
Here's the most recent testimonial, fwiw https://ersei.net/en/blog/its-nixin-time#the-part-in-which-i-make- |
ncfavier
left a comment
There was a problem hiding this comment.
It would be good to replace it with something better. Do you feel like a good introduction to Nix (at least the parts that are relevant for HM) exists at the moment?
I don't know if that's good. I think the audience can already edit config files in arbitrary configuration languages, so they would know at what point they need to learn more. Maybe the one on nix.dev is at least better than Nix Pills but I don't think home manager users should need it, and it's not geared towards a module system use case. |
|
I think it is fair enough to remove this, ideal would be to have some nice alternative, like @ncfavier mentioned. About the infinite recursion, the thing I see people do over and over again is something along the lines of {
imports = [ (if pkgs.stdenv.isLinux then ./foo.nix else ./bar.nix) ];
}which inevitably will lead to an infinite recursion error that (at least in version 2.13.3) doesn't really give any clear hint of what actually is the problem. If there is one error case that I wished was handled better, it's this one. I've occasionally thought about whether it wouldn't be possible to catch this in the module system itself. |
|
@rycee seems feasible to improve on. Either
Technically the information is in there, but I can hardly blame someone for not reading the trace, considering the length and verbosity. So yeah, the improvements aren't complete yet, but "infinite recursion at unknown location" specifically should already be a thing of the past. We do still have something like "stack overflow at unknown location", but that is for diverging computations, not lazy fixpoints, and it is far more rare and not caused by the module system to my knowledge. |
|
@roberth Thanks, yes something that can insert additional information in the trace would probably do quite nicely. As-is, while each trace entry does have a location, none of them actually seem to give you a hint about the actual error location. With this error context, one could perhaps, at least, add some reference to the module file containing the problematic Edit: Concerning my "I've occasionally thought about whether it wouldn't be possible to catch this in the module system itself" line earlier. I believe my thought was along the line of replacing non-special module argument with, for example, when collecting modules. And then swap them out with the actual arguments when evaluating the modules. I have not put much thought into that, though so I don't even know if it would be possible to accomplish this argument swap maneuver in a reasonable way. If it is possible, then I do believe that it would allow us to give a quite precise error message in the "imports with pkgs reference" case. |
This removes the Nix Pills reference, because they are not a good introduction to the Nix ecosystem, but rather a thorough explanation of many disparate things. Reading through them might give some light bulb moments for an intermediate reader, but that does not mean that they're good for a beginner. I've also removed the mention of infinite recursion without source location. That's an old meme for a problem that has been mostly solved. Mentioning it here has two effects: - Propagate the outdated meme. - Make users insensitive to bad errors. Learned helplessness. That kind of thing. What we really want is for them to report bad error messages, so that they can be fixed. And they can be fixed; just report them at `NixOS/nix`.
* upstream/master: (352 commits) flake.lock: Update qcal: add module bat: generate cache file in XDG cache home nixos: only refer to `users.users` if needed home-cursor: remove IFD when linking icon directories flake.lock: Update home-cursor: improve icon compatibility fix(qt): allow theming for apps started by systemd (nix-community#4349) flake.lock: Update fcitx5: add `fcitx5-config-qt` to test stub pqiv: only run tests on Linux platforms pqiv: add module Translate using Weblate (German) xplr: add module browserpass: support librewolf Translate using Weblate (Romanian) Translate using Weblate (Portuguese (Brazil)) hyprland: remove xwayland.hidpi (nix-community#4302) home-manager: handle profile list in Nix >2.17 lf: simplify option validation (nix-community#4334) programs.khal: uncomment locale config (nix-community#4319) kanshi: support adaptive sync (nix-community#4328) mu: add package option (nix-community#4325) modules: types.string throws error now (nix-community#4324) taffybar: Avoid restarting too quickly (nix-community#4316) aerc: do not use smtp-starttls (nix-community#4272) zsh: Add `zsh.history.ignoreAllDups` config option (nix-community#4248) jujutsu: fix zsh completion (nix-community#4305) Translate using Weblate (Korean) Translate using Weblate (Romanian) Translate using Weblate (German) flake.lock: Update network-manager-applet: remove `--sm-disable` flag himalaya: update a link to ticket nushell: deprecation of let-env (nix-community#4292) man: fix caches generation in cross-compiled system (nix-community#4294) fish: fix session vars build in cross-compiled system (nix-community#4293) Update translation files Translate using Weblate (Chinese (Simplified)) gh: option to enable helper for additional hosts (nix-community#4288) home-manager: rework news command home-manager: skip manual in uninstall configuration gnome-terminal: add assertion on profile names hyprland: use `toKeyValue`'s `indent` argument (nix-community#4274) gpg: fix typo (nix-community#4277) firefox: make package nullable (nix-community#4113) git-sync: add news entry for darwin tmate: don't generate empty config file (nix-community#4271) gh-dash: add module git-sync: add darwin support flake.lock: Update hyprland: prioritize variables and beziers (nix-community#4263) hyprland: add module script-directory: fix documentation link (nix-community#4258) Translate using Weblate (Indonesian) Translate using Weblate (Ukrainian) Translate using Weblate (Spanish) Translate using Weblate (Swedish) docs: hide `_module.*` from NixOS/nix-darwin docs jujutsu: update for Jujutsu 0.8.0 (nix-community#4250) ripgrep: don't set env. variable if no config (nix-community#4254) docs: update for Markdown migration treewide: remove now-redundant `lib.mdDoc` calls docs: clean up after Markdown migration flake: remove temporary nixpkgs pin treewide: convert all option docs to Markdown treewide: adjust some DocBook for conversion treewide: `mkAliasOption` -> `mkAliasOptionMD` treewide: `mkPackageOption` -> `mkPackageOptionMD` treewide: convert options with tables to Markdown treewide: convert options with lists to Markdown treewide: convert custom `enable` docs to Markdown treewide: convert parameterized docs to Markdown treewide: manually convert some docs to Markdown treewide: fix `mkEnableOption` arguments treewide: add missing option descriptions docs: use `nixosOptionsDoc` flake: temporarily pin nixpkgs version version: add `isReleaseBranch` manual: add test Update translation files flake.lock: Update home-manager: remove Home Manager default paths imapnotify: Use JSON type for extraConfig (nix-community#4238) Translate using Weblate (French) zsh: fix custom syntax highlighting styles (nix-community#4236) i3-sway: allow arbitrary floating modifier (nix-community#4229) i3-sway: multiple outputs (nix-community#4223) home-cursor.nix: enable gtk module when enabling gtk config generation (nix-community#4144) aerc: add assertion to limit per-account extraConfig to UI config (nix-community#4196) flake.lock: Update ssh-agent: add assertion and fix news entry (nix-community#4210) imapnotify: move test imapnotify: use direct nix store path for config flake.lock: Update nushell: add login.nu configuration option himalaya: fix notmuch backend swayosd: add module pyenv: add module darcs: add module tests: some minor cleanups goimapnotify: remove test dependency on notmuch unison: Allow using same option multiple times (nix-community#4208) imapnotify: Add launchd agent (nix-community#3291) i3: remove deprecated example in i3.config.startup (nix-community#4201) antidote: static file move to /tmp Translate using Weblate (Indonesian) PULL_REQUEST_TEMPLATE.md: add maintainer cc section (nix-community#4193) programs.khal vdirsyncer: synchronize metadata as well (nix-community#4167) i18n: Use glibcLocales from NixOS if possible (nix-community#2333) (nix-community#4177) xfconf: remove properties with null values (nix-community#4192) home-manager: Use `path:` URI type for flake default (nix-community#3646) ci: autolabel calendars PRs (nix-community#4165) flake.lock: Update (nix-community#4161) news: fix typo in programs.zsh.antidote entry ssh-agent: init module (nix-community#4178) chromium: fix `commandLineArgs` to use the user specified package (nix-community#4175) sxhkd: allow usage of derivations as keybind commands (nix-community#4169) README: Remove the pills (nix-community#4181) lsd: use -A instead of -a in aliases (nix-community#4173) kakoune: add defaultEditor option docs: update link to allowed users setting (nix-community#4176) zsh: allow setting custom syntax highlighting styles (nix-community#4122) flake: add formatter (nix-community#3620) broot: fix test (nix-community#4170) antidote: fix .dot path ci: build manual and push to home-manager.dev ...
This removes the Nix Pills reference, because they are not a good introduction to the Nix ecosystem, but rather a thorough explanation of many disparate things. Reading through them might give some light bulb moments for an intermediate reader, but that does not mean that they're good for a beginner.
I've also removed the mention of infinite recursion without source location. That's an old meme for a problem that has been mostly solved. Mentioning it here has two effects
NixOS/nixDescription
Checklist
Change is backwards compatible.
Code formatted with
./format.Code tested through
nix-shell --pure tests -A run.allornix develop --ignore-environment .#allusing Flakes.Test cases updated/added. See example.
Commit messages are formatted like
See CONTRIBUTING for more information and recent commit messages for examples.
If this PR adds a new module