!lymvtcwDJ7ZA9Npq:lix.systems

Lix Development

424 Members
(Technical) development of Lix, the package manager, a Nix implementation. Please be mindful of ongoing technical conversations in this channel.140 Servers

Load older messages


SenderMessageTime
23 Mar 2026
@raitobezarius:matrix.orgraitobezariusIn general, I'd recommend doing the smallest amount of changes from increasing complexity21:34:09
@raitobezarius:matrix.orgraitobezariusIn this case, I'd recommend adding an error that has the same catch ability property as the one in drvStrict and from there we can pile up semantic changes with careful justification 21:34:52
@raitobezarius:matrix.orgraitobezariusIf we restrict the changes to these atomic pieces, it's E/easy, I don't know if changing catch ability is not kind of Context/Maintainers because of some risky semantic changes we do not like in general21:35:48
@raitobezarius:matrix.orgraitobezariusFor the record, I am not sure I understand why we would make this error catchable, having an empty output list is always a fatal error, if your output list is conditional and dies when a platform is not supported or some data is unavailable, you should throw before the derivation thunk in its fully resolved form is resolved21:38:17
@raitobezarius:matrix.orgraitobezariusSo contrary to the opinions expressed, I'd keep a fatal error because it reports more useful information to the end users rather than waiting an access to the derivation to discover that the outputs list is empty for that specific instantiation of context21:39:10
@blokyk:matrix.orgzoë (she/her)

rather than waiting for an access to the derivation to discover that the outputs list is empty
i think i'm missing a step here, because i don't understand what the fatality of the error has to do with when it is reported. wouldn't a non-fatal and fatal error have the same laziness (assuming they're implemented by just changing derivation.nix)?

21:43:38
@blokyk:matrix.orgzoë (she/her) *

rather than waiting for an access to the derivation to discover that the outputs list is empty

i think i'm missing a step here, because i don't understand what the fatality of the error has to do with when it is reported. wouldn't a non-fatal and fatal error have the same laziness (assuming they're implemented by just changing derivation.nix)?

21:43:43
@blokyk:matrix.orgzoë (she/her) *

rather than waiting for an access to the derivation to discover that the outputs list is empty
i think i'm missing a step here, because i don't understand what the fatality of the error has to do with when it is reported. wouldn't a non-fatal and fatal error have the same laziness (assuming they're implemented by just changing derivation.nix)?

21:43:46
@blokyk:matrix.orgzoë (she/her) *

rather than waiting for an access to the derivation to discover that the outputs list is empty

i think i'm missing a step here, because i don't understand what the fatality of the error has to do with when it is reported. wouldn't a non-fatal and fatal error have the same laziness (assuming they're implemented by just changing derivation.nix)?

21:43:49
@raitobezarius:matrix.orgraitobezariusA non fatal error will be silenced during large Nix evals or attribute names recursive enumeration by tryEval21:45:29
@raitobezarius:matrix.orgraitobezariusA fatal error won't 21:45:36
@blokyk:matrix.orgzoë (she/her) yeah but that's only if using tryEval, which imo is rarely seen in the average user's code 21:46:15
@raitobezarius:matrix.orgraitobezariusIt's not a laziness issue more of a: there's a culture of using tryEval to perform certain CI operations where fatal or non fatal have different outcomes21:46:17
@blokyk:matrix.orgzoë (she/her) * yeah but that's only if using tryEval, which ime is rarely seen in the average user's code 21:46:22
@blokyk:matrix.orgzoë (she/her)hmmm, i'll admit i don't have as much experience on the full ci side :/21:46:46
@blokyk:matrix.orgzoë (she/her)* hmmm, i'll admit i don't have as much experience on the ci side :/21:46:59
@raitobezarius:matrix.orgraitobezariusYou can grep tryEval in nixpkgs21:47:16
@raitobezarius:matrix.orgraitobezariusYou will see the use sites21:47:21
@raitobezarius:matrix.orgraitobezariusThe fatal or non fatal discussion is rooted in how tryEval is actually used in practice and what is it for IMHO21:47:42
@raitobezarius:matrix.orgraitobezariusIf tryEval didn't exist, might consider all non fatal errors fatal because you cannot recover computation in any fashion then21:48:01
@raitobezarius:matrix.orgraitobezariusMy vision is that tryEval exist to allow partial evaluation of the package set under different contexts (architectures, libc, etc.) and allowing a derivation definition to be partial if it doesn't support an architecture or a libc or something without compromising the operation "what are the theoretical possible packages here?" and variations of this introspection idea21:50:26
@raitobezarius:matrix.orgraitobezariusIn this framework, an empty output list would make sense if the output list names depend on this data, I can think of some cursed things to do there but none of that occur naturally and I don't see any advantage of starting doing that at all21:51:25
@blokyk:matrix.orgzoë (she/her)

for fun/the record, here's the occurences of tryEval in nixpkgs:

      1 lib/customisation.nix
      1 lib/default.nix
      1 lib/options.nix
      1 lib/path/default.nix
      1 lib/tests/fetchers.nix
      1 lib/tests/modules/raw.nix
      1 maintainers/scripts/build.nix
      1 maintainers/scripts/check-hydra-by-maintainer.nix
      1 maintainers/scripts/find-tarballs.nix
      1 maintainers/scripts/haskell/maintained-broken-pkgs.nix
      1 maintainers/scripts/haskell/test-configurations.nix
      1 maintainers/scripts/haskell/transitive-broken-packages.nix
      1 maintainers/scripts/update.nix
      1 nixos/modules/config/terminfo.nix
      1 nixos/modules/misc/nixpkgs/test.nix
      1 nixos/modules/services/web-apps/slskd.nix
      1 nixos/tests/all-terminfo.nix
      1 nixos/tests/hostname.nix
      1 nixos/tests/kernel-rust.nix
      1 nixos/tests/rancher/default.nix
      1 pkgs/build-support/src-only/tests.nix
      1 pkgs/by-name/mp/mpv/package.nix
      1 pkgs/development/compilers/dotnet/build-dotnet.nix
      1 pkgs/development/cuda-modules/packages/tests/redists-installed.nix
      1 pkgs/development/rocm-modules/release-attrPaths-gen.nix
      1 pkgs/development/rocm-modules/rocm-tests/default.nix
      1 pkgs/pkgs-lib/tests/formats.nix
      1 pkgs/servers/nextcloud/packages/nc-versions.nix
      1 pkgs/test/kernel.nix
      1 pkgs/test/stdenv/default.nix
      1 pkgs/test/systemd/nixos/default.nix
      1 pkgs/top-level/impure-overlays.nix
      1 pkgs/top-level/pkg-config/tests.nix
      1 pkgs/top-level/release-python.nix
      1 pkgs/top-level/release-unfree-redistributable.nix
      1 pkgs/top-level/splice.nix
      2 doc/doc-support/python-interpreter-table.nix
      2 lib/path/tests/prop.nix
      2 maintainers/scripts/eval-release.nix
      2 pkgs/by-name/ni/nixos-option/nixos-option.nix
      2 pkgs/development/cuda-modules/packages/tests/flags.nix
      2 pkgs/stdenv/cross/default.nix
      2 pkgs/stdenv/generic/check-meta-test.nix
      3 nixos/maintainers/option-usages.nix
      4 nixos/modules/services/networking/kismet.nix
      5 nixos/tests/systemd-escaping.nix
     17 lib/path/tests/unit.nix
     32 lib/tests/misc.nix

most of them are tests, but there are still some uses outside of that, which from the few glances i've had are custom option types doing weird stuff

21:54:09
@blokyk:matrix.orgzoë (she/her) i understand your point of view though, i guess it's a little more grounded in what nix is currently used for rather than my naive abstract pov x) 21:55:21
@raitobezarius:matrix.orgraitobezariusIn my abstract PoV, Nix should have had a Result type21:56:31
@raitobezarius:matrix.orgraitobezariusThat abstract Nix is only a fleeting dream alas21:56:40
@blokyk:matrix.orgzoë (she/her) with all that said, i still do have a question: should it be tagged E/Easy (with the notes from this discussion) and left to be drive-by contributed? it's not very urgent, and though it doesn't go into the c++ part of the codebase like most other changes will require, i still think it can be a good exercise, especially if combined with some tests 21:57:09
@raitobezarius:matrix.orgraitobezariusYes if it doesn't try to change catch ability21:57:43
@raitobezarius:matrix.orgraitobezariusChanging catch ability is a debate that needs to be done, I only provided my view so far21:58:03
@blokyk:matrix.orgzoë (she/her)alright i'll leave the issue as is then (without the notes since the debate should probably be had in public and i don't wanna be just paraphrasing someone else's opinion), hopefully it'll garner some more attention from other maintainers/contributors22:00:51

Show newer messages


Back to Room ListRoom Version: 10