Commit Graph

4519 Commits

Author SHA1 Message Date
Rebecca Turner
4a81a5e556 lib.packagesFromDirectoryRecursive: Allow non-"path" directory
As initially designed, `lib.packagesFromDirectoryRecursive` allowed
passing a string for the `directory` argument. This is necessary for
several reasons:

- `outPath` on derivations and Flake inputs is not a path.
- Derivations can be coerced to their `outPath` in string interpolation,
  but that produces strings, not paths.
- `builtins.path`, bizarrely, returns a string instead of a path (not
  that the documentation makes this clear).

If a path is used instead of a string here, then Nix will dutifully copy
the entire directory into a new path in the Nix store (ignored as
WONTFIX by Eelco in https://github.com/NixOS/nix/issues/9428). For
industrial use cases, this can result in an extra 10-15 seconds on every
single eval just to copy files from one spot in the Nix store to another
spot in the Nix store.

In #361424, this was changed so that `directory` must be a path,
breaking these use-cases.

I'm not really sure what happened here -- #361424 has very little
justification for why it exists, only a reference to a previous version
of the PR (#359941), which itself had very little justification given.
The description on #359941 explained that it would "Shrink the
function's code by ~2/3rd 🎉", but 60% of the reduction in size was just
deleting comments (!) and bindings like `directoryEntryIsPackage` that
helped clarify the intent of the implementation. As a result, the new
implementation is (to my eyes) more challenging to read and understand.
I think the whole thing was in service of #392800, which adds a
`newScope` argument in order "to create nested scopes for each
(sub)directory (not just the top-level one) when `newScope` is given."

Nobody noticed this regression until after the commit was merged. After
@phanirithvij pointed out the regression, @nbraud said they would
"shortly prepare a PR to fix this" [1] but did not. Later, they would
explain that they were "quite ill the last month(s)" [2], which explains
why this got forgotten about. @nbraud also requested a review from
@Gabriella439 [3], as she had reviewed the original PR adding
`lib.packagesFromDirectoryRecursive`, but not from me, the original
author of that PR. @Gabriella439 did not review the "refactor" PR, and
no attempt to contact her or myself was made after that initial request.
This behavior is admittedly rather subtle, so I'm not sure either
Gabriella or myself would have noticed the change (especially since the
relevant PR restructures the entire implementation).

While I find this a bit frustrating, I should have added a test for this
use-case in my original PR; if there was a test that relied on passing
paths in as a string, perhaps the authors modifying this code would have
noticed that the implementation was not an accident.

[1]: https://github.com/NixOS/nixpkgs/pull/361424#discussion_r1912407693
[2]: https://github.com/NixOS/nixpkgs/pull/359984#issuecomment-2775768808
[3]: https://github.com/NixOS/nixpkgs/pull/361424#issuecomment-2521308983
2025-07-10 16:13:38 -07:00
Sandro
e2be354fc2 lib/sources: add jj to clean source (#423613) 2025-07-09 14:52:35 +02:00
Will Fancher
ff4b407e3c lib/sources: add jj to clean source 2025-07-08 17:05:05 -04:00
OPNA2608
8c6307d19b lib.systems.examples: Add rust.rustcTarget for ppc64-elfv1 2025-07-05 22:16:59 +02:00
Johannes Kirschbauer
d3cd84d2b2 doc: fix example consistency on mapAttrsRecursiveCond (#418991) 2025-07-04 21:54:15 +02:00
Johannes Kirschbauer
86603255c3 lib.filesystem.resolveDefaultNix: init (#418824) 2025-07-03 12:54:47 +02:00
Philip Taron
169776212b fetchedMavenDeps: support proxy and custom cacerts (#420608) 2025-06-30 17:26:00 -07:00
Alyssa Ross
a61841a597 nixVersions.nix_2_3: add knownVulnerabilities 2025-06-30 10:26:29 +02:00
Wolfgang Walther
b4532efe93 **/README.md: one sentence per line
As documented in doc/README.md.
2025-06-29 21:14:32 +02:00
Florian Klink
f8b6b6f512 lib/fetchers: remove unused imports 2025-06-27 21:27:44 +03:00
OPNA2608
3a51005a85 lib.systems.inspect.patterns: init isAbiElfv1 2025-06-26 09:28:04 +02:00
sodiboo
b3c9916455 lib.types.attrTag: expose suboptions at correct level 2025-06-22 21:23:18 +02:00
Léana 江
a2f1023f57 doc: fix example consistency on mapAttrsRecursiveCond
The example should take a two argument function `f`.
2025-06-22 15:26:07 +02:00
Robert Hensing
66016feb83 lib.callPackageWith: Use resolveDefaultNix
Tested with:
1. Replace the callPackageWith call by `null`, to simulate an ancient Nix
2. Run the following commands in a terminal in nixpkgs:

    $ mkdir test/

    $ echo '{ asdfasdfasdf }: null' >test/default.nix

    $ nix repl -f .

    nix-repl> callPackage ./test { }
    error:
          … while calling the 'abort' builtin
            at /home/user/src/nixpkgs/lib/customisation.nix:312:7:
              311|     else
              312|       abort "lib.customisation.callPackageWith: ${error}";
                |       ^
              313|

          error: evaluation aborted with the following error message: 'lib.customisation.callPackageWith: Function called without required argument "asdfasdfasdf" at /home/user/src/nixpkgs/test/default.nix'
2025-06-21 21:43:37 +02:00
Robert Hensing
ecc039f327 lib.filesystem.resolveDefaultNix: init 2025-06-21 21:43:37 +02:00
OPNA2608
f5d07900bf lib.systems.examples: Split glibc powerpc64 back into 2 ABI options
ELFv1 is the historically better supported one on glibc, ELFv2 seems to have some issues with our toolchain.

Restore the option to pick the ABI with pkgsCross.
2025-06-21 11:01:02 +02:00
Johannes Kirschbauer
1849ee507e modules: Add _prefix module argument, improve error, add docs (#398839) 2025-06-19 16:09:07 +02:00
Johannes Kirschbauer
982c74a71e lib.derivations: avoid common double-warn with warnOnInstantiate (#414606) 2025-06-19 15:54:57 +02:00
Martin Weinelt
8cfa86cf70 Merge remote-tracking branch 'origin/master' into staging-next 2025-06-11 05:13:32 +02:00
Jade Lovelace
332bc64369 ci/eval: accept nix directly
Previously we were taking nixVersions and this made external use from
the Lix repo's CI annoying.

We should probably also test other nix versions than stable (i.e. also
latest and Lix), but this involves writing GitHub Actions about it and
maybe not running it on every single PR. Future work.
2025-06-10 16:04:38 -07:00
lassulus
78f051e8af lib, treewide: introduce repoRevToName and use it to cleanup most fetch* functions (#316668) 2025-06-10 22:49:23 +02:00
nixpkgs-ci[bot]
058022493d Merge master into staging-next 2025-06-10 06:06:12 +00:00
Florent Charpentier
b6bb27bc38 lib.mkEnableOption: fix syntax error in example comment 2025-06-10 00:11:31 +02:00
Peder Bergebakken Sundt
19086768fe lib.derivations: avoid common double-warn with warnOnInstantiate
Before:

    $ nix-build . -A opensycl
    trace: evaluation warning: 'opensycl' has been renamed to 'adaptivecpp'
    trace: evaluation warning: 'opensycl' has been renamed to 'adaptivecpp'
    /nix/store/8g0lfv82s0sprmqgfj146ggkb7bn3rm6-adaptivecpp-25.02.0

    $ nix-instantiate . -A opensycl
    trace: evaluation warning: 'opensycl' has been renamed to 'adaptivecpp'
    trace: evaluation warning: 'opensycl' has been renamed to 'adaptivecpp'
    warning: you did not specify '--add-root'; the result might be removed by the garbage collector
    /nix/store/b8q5xp94s4n7zfn7as5a9xjvylh6y3pi-adaptivecpp-25.02.0.drv

After:

    $ nix-build . -A opensycl
    trace: evaluation warning: 'opensycl' has been renamed to 'adaptivecpp'
    /nix/store/8g0lfv82s0sprmqgfj146ggkb7bn3rm6-adaptivecpp-25.02.0

    $ nix-instantiate . -A opensycl
    trace: evaluation warning: 'opensycl' has been renamed to 'adaptivecpp'
    warning: you did not specify '--add-root'; the result might be removed by the garbage collector
    /nix/store/b8q5xp94s4n7zfn7as5a9xjvylh6y3pi-adaptivecpp-25.02.0.drv
2025-06-07 00:53:56 +02:00
Zitrone
2298cf9994 xorgproto: refactor and move to pkgs/by-name from xorg namespace 2025-06-06 21:56:40 +02:00
nixpkgs-ci[bot]
f5096bbfa6 Merge master into staging-next 2025-06-02 18:05:37 +00:00
Pol Dellaiera
6d9d3014ba treewide: fix typos in comments (#413240) 2025-06-02 18:43:07 +02:00
Johannes Kirschbauer
f54b76bc01 lib/types: add doc warning to addCheck (#412364) 2025-06-02 18:39:27 +02:00
Peder Bergebakken Sundt
c77ac9dfc3 treewide: fix typos 2025-06-02 16:07:07 +02:00
nixpkgs-ci[bot]
bb90e78db3 Merge master into staging-next 2025-06-02 12:06:59 +00:00
Wolfgang Walther
a7f4e0f9ae lib/tests: avoid full rebuild when only maintainers change
The vast majority of CI jobs to build the lib tests are caused by
changes in the maintainer list. In this case, we currently run the full
test-suite which takes 3-4 minutes. By moving the maintainers and teams
tests out of the test-with-nix file, we save almost all of that.
Building only those two tests on a change is almost instant. This only
works, because we previously enabled cachix for the workflow.

Note, that these tests are not actually run with both nix versions, even
though they were listed in the "test with specific nix version" file.
That's because we only differ in the nix version run *inside* the
sandbox, but not doing the outer build.

Since this file seems to be re-used by NixOS/nix' CI, this is
technically a small loss in coverage for that repo, but nixpkgs CI
considerations outweigh that. But because of this, I left the other
non-nix-version-specific tests in that file.
2025-06-02 09:12:19 +02:00
Jan Malakhovski
7c8a4efb68 lib, treewide: introduce repoRevToName, use it in most fetch* functions
This patch adds `lib.repoRevToName` function that generalizes away most of the
code used for derivation name generation by `fetch*` functions (`fetchzip`,
`fetchFromGitHub`, etc, except those which are delayed until latter commits
for mass-rebuild reasons).

It's first argument controls how the resulting name will look (see below).

Since `lib` has no equivalent of Nixpkgs' `config`, this patch adds
`config.fetchedSourceNameDefault` option to Nixpkgs and then re-exposes
`lib.repoRevToName config.fetchedSourceNameDefault` expression as
`pkgs.repoRevToNameMaybe` which is then used in `fetch*` derivations.

The result is that different values of `config.fetchedSourceNameDefault` now
control how the `src` derivations produced by `fetch*` functions are to be
named, e.g.:

- `fetchedSourceNameDefault = "source"` (the default):

  ```
  $ nix-instantiate -A fuse.src
  /nix/store/<hash>-source.drv
  ```

- `fetchedSourceNameDefault = "versioned"`:

  ```
  $ nix-instantiate -A fuse.src
  /nix/store/<hash>-libfuse-2.9.9-source.drv
  ```

- `fetchedSourceNameDefault = "full"`:

  ```
  $ nix-instantiate -A fuse.src
  /nix/store/<hash>-libfuse-2.9.9-github-source.drv
  ```

See the documentation of `config.fetchedSourceNameDefault` for more info.
2025-05-31 10:01:21 +00:00
nixpkgs-ci[bot]
3025596725 Merge master into staging-next 2025-05-31 00:16:33 +00:00
Johannes Kirschbauer
7063762d13 lib/types: add doc warning to addCheck 2025-05-30 16:25:44 +02:00
Alyssa Ross
f4c841ae5e lib.systems: don't throw if go unsupported
Better to have a value that can actually be checked for, rather than
throwing, so optional Go support can be disabled when unsupported.
2025-05-30 14:57:33 +02:00
nixpkgs-ci[bot]
aabaf9f281 Merge staging-next into staging 2025-05-29 18:06:18 +00:00
jopejoe1
0b29af4760 xkeyboard-config, xtrans, xorg-{cf-files,docs,sgml-doctools}: refactor and move to pkgs/by-name from xorg namespace (#398391) 2025-05-28 20:58:05 +02:00
Gutyina Gergő
b3b0fd266b lib: prefer replaceString over replaceStrings 2025-05-28 00:20:57 +02:00
Gutyina Gergő
b5720e2b3f lib/strings: init replaceString 2025-05-28 00:20:56 +02:00
Philip Taron
9b3545da9e lib.systems.loongarch64-multiplatform: init (#402689) 2025-05-27 08:48:18 -07:00
Wolfgang Walther
94817274d2 lib.fileset.difference: fix type docs 2025-05-26 22:05:23 +02:00
Weijia Wang
9988795010 lib.systems.loongarch64-multiplatform: init 2025-05-25 14:43:14 +02:00
Zitrone
7e7e5721a6 xorg-docs: refactor, move to pkgs/by-name and rename from xorg.xorgdocs 2025-05-25 05:41:43 +02:00
Emily
98dbc7cc58 Revert "lib.meta.availableOn: Return false if pkg parameter is null"
I believe this change is wrong both theoretically and practically.

Theoretically, `null` is available on every platform, because
`buildInputs = [ null ];` always succeeds and never throws a platform
availability error. `null` should be handled consistently with packages
that have no explicit list of supported platforms, as it of course
has no such list itself.

Practically, we use `null` to represent libraries that are always
present on a platform and do not require a library (for instance,
because they are part of `libc` or the macOS SDK). This has been
used for a long time by `libintl` (on all non‐glibc platforms),
and is also now used by `libGL` and friends on Darwin. This change
broke the check SDL3 does for OpenGL availability on Darwin, causing
<https://github.com/NixOS/nixpkgs/issues/407056>, which had to be
worked around by <https://github.com/NixOS/nixpkgs/pull/409525>.

Both `libintl` and `libGL` should count as available on platforms
where their functionality is part of the standard build environment,
and a package that is completely unavailable and whose functionality
cannot be expected should not use `null`, as it should result in
errors if used in a dependency list on an unsupported platform.

I accept that overriding with `null` is often a useful way to disable
dependencies that don’t have explicit feature flags, but I do not
think that making it work better with feature flags conditioned on
availability is worth the inconsistency and problems caused by this
change. Packages can instead expose the relevant feature flags as
arguments that default to the `lib.meta.availableOn` check or, if they
want to keep an “override the dependency to `null`” interface,
insert an explicit `pkg != null && …` check.

Additionally, the pull request was merged over a week after all
breaking changes were restricted for the 25.05 release. I believe that
the potential problems of dealing with the effects of this change for
an entire release cycle – the first release cycle where `libGL` is
`null` on Darwin, a change I made before the deadline and before this
change to `lib.meta.availableOn` – offset the risks of backporting
this revert at such a late stage.

It will cause overrides to backwards‐incompatibly revert to the
behaviour they had before the change, but since such overrides were
not possible until a few weeks ago, I hope that is an acceptable risk
compared to the potential issues leaving this in the release can
cause, given that it was merged after the deadline and has already
broken an existing construction in Nixpkgs.

This reverts commit 9338d924db.
2025-05-23 15:09:41 +01:00
Aleksana
48b56e8fb5 lib.systems: raise minimum loongarch64 feature support (#403201) 2025-05-23 10:00:37 +08:00
Aleksana
b2fc900a32 lib.systems.elaborate.canExecute: handle different gcc.arch (#403549) 2025-05-23 09:59:10 +08:00
aleksana
54e53047bf lib.systems.examples: separate loongarch64 for desktop and embedded variants 2025-05-22 19:59:54 +08:00
aleksana
b6b5125d03 lib.systems.architectures: add loongarch64 2025-05-22 19:00:07 +08:00
aleksana
1802f697e4 lib.systems.elaborate.canExecute: handle different gcc.arch 2025-05-22 18:57:28 +08:00
aleksana
330fdc9943 lib.systems.architectures: add hasInferior and canExecute function 2025-05-22 18:57:28 +08:00