aboutsummaryrefslogtreecommitdiff
path: root/package.nix
AgeCommit message (Collapse)Author
2024-07-22De-vendor nixfmtvigress8
Change-Id: I1a051be495318a507d07f6d0a6b157616e26774c
2024-07-16remove sourceToSink, sinkToSource, and boehm patcheldritch horrors
Change-Id: I1379841299713175d0225b82a67f50660f9eb5e2
2024-07-10Merge "lix-doc: update dependencies and refactor" into mainlunaphied
2024-07-10devShell: Fix errors with environment variablespiegames
Previous code assumed that $MANPATH always exists Change-Id: I5a4d012045ba6ff9086373b3f46a75d82285d393
2024-07-10lix-doc: update dependencies and refactorLunaphied
This updates the version of rnix used and refactors the code generally to be more precise and capable in it's identification of both lambdas and determining which documentation comments are attached. Change-Id: Ib0dddabd71f772c95077f9d7654023b37a7a1fd2
2024-06-26packaging: make pegtl use the __forDefaults mechanismJade Lovelace
This avoids needing to pass it in when callPackage'ing Lix from external code. Change-Id: Ie07e84a151e38614064609a2f6dbff165e193be7
2024-06-25Merge "change shebangs of all .sh scripts to bash" into mainjade
2024-06-25Merge changes If0ddec6b,Iaa63ed18 into mainjade
* changes: Add some release notes for things we did packaging: don't build internal api docs by default in dev shells
2024-06-25libexpr: rewrite the parser with pegtl instead of flex/bisoneldritch horrors
this gives about 20% performance improvements on pure parsing. obviously it will be less on full eval, but depending on how much parsing is to be done (e.g. including hackage-packages.nix or not) it's more like 4%-10%. this has been tested (with thousands of core hours of fuzzing) to ensure that the ASTs produced by the new parser are exactly the same as the old one would have produced. error messages will change (sometimes by a lot) and are not yet perfect, but we would rather leave this as is for later. test results for running only the parser (excluding the variable binding code) in a tight loop with inputs and parameters as given are promising: - 40% faster on lix's package.nix at 10000 iterations - 1.3% faster on nixpkgs all-packages.nix at 1000 iterations - equivalent on all of nixpkgs concatenated at 100 iterations (excluding invalid files, each file surrounded with parens) more realistic benchmarks are somewhere in between the extremes, parsing once again getting the largest uplift. other realistic workloads improve by a few percentage points as well, notably system builds are 4% faster. Benchmarks summary (from ./bench/summarize.jq bench/bench-*.json) old/bin/nix --extra-experimental-features 'nix-command flakes' eval -f bench/nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix mean: 0.408s ± 0.025s user: 0.355s | system: 0.033s median: 0.389s range: 0.388s ... 0.442s relative: 1 new/bin/nix --extra-experimental-features 'nix-command flakes' eval -f bench/nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix mean: 0.332s ± 0.024s user: 0.279s | system: 0.033s median: 0.314s range: 0.313s ... 0.361s relative: 0.814 --- old/bin/nix --extra-experimental-features 'nix-command flakes' eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' mean: 6.133s ± 0.022s user: 5.395s | system: 0.437s median: 6.128s range: 6.099s ... 6.183s relative: 1 new/bin/nix --extra-experimental-features 'nix-command flakes' eval --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' mean: 5.925s ± 0.025s user: 5.176s | system: 0.456s median: 5.934s range: 5.861s ... 5.943s relative: 0.966 --- GC_INITIAL_HEAP_SIZE=10g old/bin/nix eval --extra-experimental-features 'nix-command flakes' --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' mean: 4.503s ± 0.027s user: 3.731s | system: 0.547s median: 4.499s range: 4.478s ... 4.541s relative: 1 GC_INITIAL_HEAP_SIZE=10g new/bin/nix eval --extra-experimental-features 'nix-command flakes' --raw --impure --expr 'with import <nixpkgs/nixos> {}; system' mean: 4.285s ± 0.031s user: 3.504s | system: 0.571s median: 4.281s range: 4.221s ... 4.328s relative: 0.951 --- old/bin/nix --extra-experimental-features 'nix-command flakes' search --no-eval-cache github:nixos/nixpkgs/e1fa12d4f6c6fe19ccb59cac54b5b3f25e160870 hello mean: 16.475s ± 0.07s user: 14.088s | system: 1.572s median: 16.495s range: 16.351s ... 16.536s relative: 1 new/bin/nix --extra-experimental-features 'nix-command flakes' search --no-eval-cache github:nixos/nixpkgs/e1fa12d4f6c6fe19ccb59cac54b5b3f25e160870 hello mean: 15.973s ± 0.013s user: 13.558s | system: 1.615s median: 15.973s range: 15.946s ... 15.99s relative: 0.97 --- Change-Id: Ie66ec2d045dec964632c6541e25f8f0797319ee2
2024-06-24packaging: don't build internal api docs by default in dev shellsJade Lovelace
These are totally available and you can just turn them on, but they have very bad dependency tracking and thus bloat incremental change times, which is not really ok. Change-Id: Iaa63ed18a789e74fcb757248cd24c3b194afcc80
2024-06-24change shebangs of all .sh scripts to bashvigress8
On operating systems where /bin/sh is not Bash, some scripts are invalid because of bashisms, and building Lix fails with errors like this: `render-manpage.sh: 3: set: Illegal option -o pipefail` This modifies all scripts that use a `/bin/sh` shebang to `/usr/bin/env bash`, including currently POSIX-compliant ones, to prevent any future confusion. Change-Id: Ia074cc6db42d40fc59a63726f6194ea0149ea5e0
2024-06-24devShell: guard against running from another directoryJade Lovelace
I was working on nix-eval-jobs with a dev shell with some shenanigans to run against a locally built Lix and it was getting really annoying when `nix develop ../lix#` was messing up my other git repo's hooks. This is a fix via blunt force, but it is at least obvious how it works. Change-Id: Ia29eeb5be57ab6a2c88451c00ea18a51e4dfe65e
2024-06-13packaging: Move binaryTarball to a passthru attr in package.nixJade Lovelace
This is motivated by flakes being bad and all the stuff that calls things by "system" being utterly unable to cope with cross compilation. So if we go shove it in package.nix it is suddenly usable from cross contexts. Usage: ``` nix build -L .#nix-riscv64-linux.binaryTarball ``` Change-Id: I702ebf2ac5bd9d1c57662f968b000073134df336
2024-06-12dev shell: Add bashInteractivePierre Bourdon
This was bothersome to me as a zsh+direnv user. Change-Id: Ia5b54cc63647a5c6ced2b5412e972dac1abf8184
2024-06-12Misc workaround removals since 24.05 upgradeJade Lovelace
Change-Id: I9491b103333cb0e25c245199e88365ded7800d2e
2024-06-12[resubmit] flake: update nixpkgs pin 23.11->24.05 (+ boehmgc compat changes)Pierre Bourdon
-- message from cl/1418 -- The boehmgc changes are bundled into this commit because doing otherwise would require an annoying dance of "adding compatibility for < 8.2.6 and >= 8.2.6" then updating the pin then removing the (now unneeded) compatibility. It doesn't seem worth the trouble to me given the low complexity of said changes. Rebased coroutine-sp-fallback.diff patch taken from https://github.com/NixOS/nixpkgs/pull/317227 -- jade resubmit changes -- This is a resubmission of https://gerrit.lix.systems/c/lix/+/1418, which was reverted in https://gerrit.lix.systems/c/lix/+/1432 for breaking CI evaluation without being detected. I have run `nix flake check -Lv` on this one before submission and it passes on my machine and crucially without eval errors, so the CI result should be accurate. It seems like someone renamed forbiddenDependenciesRegex to forbiddenDependenciesRegexes in nixpkgs and also changed the type incompatibly. That's pretty silly, but at least it's just an eval error. Also, `xonsh` regressed the availability of `xonsh-unwrapped`, but it was fixed by us in https://github.com/NixOS/nixpkgs/pull/317636, which is now in our channel, so we update nixpkgs compared to the original iteration of this to simply get that. We originally had a regression related to some reorganization of the nixpkgs lib test suite in which there was broken parameter passing. This, too, we got quickfixed in nixpkgs, so we don't need any changes for it: https://github.com/NixOS/nixpkgs/pull/317772 Related: https://gerrit.lix.systems/c/lix/+/1428 Fixes: https://git.lix.systems/lix-project/lix/issues/385 Change-Id: I26d41ea826fec900ebcad0f82a727feb6bcd28f3
2024-06-11Merge changes from topic "releng" into mainjade
* changes: releng: add prod environment, ready for release releng: automatically figure out if we should tag latest for docker releng: support multiarch docker images manual: rewrite the docker guide now that we have images Rewrite docker to be sensible and smaller Implement docker upload in the releng tools
2024-06-10Merge "Revert "flake: update nixpkgs pin 23.11->24.05 (+ boehmgc compat ↵jade
changes)"" into main
2024-06-10Revert "flake: update nixpkgs pin 23.11->24.05 (+ boehmgc compat changes)"jade
This reverts commit 28a079f841834ac11105ce5762115904d1e40ce1. Reason for revert: This caused a pile of regressions in CI, and does not pass nix flake check. Some number of them are fixed in CL: https://gerrit.lix.systems/c/lix/+/1429 but there's more to be fixed. We should defer this after 2.90. Change-Id: Ib839d0fcb08eb52094af2b521145e3c1b4e0556f
2024-06-09releng: support multiarch docker imagesJade Lovelace
If we don't want to have separate registry tags by architecture (EWWWW), we need to be able to build multiarch docker images. This is pretty simple, and just requires making a manifest pointing to each of the component images. I was *going* to just do this API prodding with manifest-tool, but it doesn't support putting metadata on the outer manifest, which is actually kind of a problem because it then doesn't render the metadata on github. So I guess we get a simple little containers API implementation that is 90% auth code. Change-Id: I8bdd118d4cbc13b23224f2fb174b232432686bea
2024-06-09Merge changes from topic "releng" into mainjade
* changes: releng: support pushing the manual to docs also Expose officialRelease from the flake Put into place initial release engineering
2024-06-09Implement docker upload in the releng toolsJade Lovelace
This uses skopeo to not think about docker daemons. I, however, noticed that the docker image we had would have totally terrible cache hits, so I rewrote it. Fixes: https://git.lix.systems/lix-project/lix/issues/252 Change-Id: I3c5b6c1f3ba0b9dfcac212b2148f390e0cd542b7
2024-06-09flake: update nixpkgs pin 23.11->24.05 (+ boehmgc compat changes)Pierre Bourdon
The boehmgc changes are bundled into this commit because doing otherwise would require an annoying dance of "adding compatibility for < 8.2.6 and >= 8.2.6" then updating the pin then removing the (now unneeded) compatibility. It doesn't seem worth the trouble to me given the low complexity of said changes. Rebased coroutine-sp-fallback.diff patch taken from https://github.com/NixOS/nixpkgs/pull/317227 Change-Id: I8c590e9fe25c0f566d0cfeacb96d8cf50abf12e8
2024-06-07Merge changes from topic "releng" into mainjade
* changes: Add meson release note Move version to a JSON file so we can have release names Remove rl-next-dev
2024-06-06Expose officialRelease from the flakeJade Lovelace
Change-Id: If87beb3f31dfb5d59862294ac2e1c821ea864277
2024-06-06Merge changes Ic4be41eb,I48db2385 into mainQyriad
* changes: devshells: only enable pch for clang build: expose option to enable or disable precompiled std headers
2024-06-06Move version to a JSON file so we can have release namesJade Lovelace
Change-Id: I5ff3396a302565ee5ee6c2db97e048e403779076
2024-06-06Add xonsh to the shellJade Lovelace
Change-Id: If8f3825d2bdcc3f1d00583a11d890c1c8ab37b9f
2024-06-06pname: nix -> lixJade Lovelace
This had a regression last time: https://gerrit.lix.systems/c/lix/+/1196 But f3f68fcfa fixed upgrade-nix to not be broken, so this should be ok tbh. Change-Id: I48ea1359790878bb8ead5d8a4b3f61caa4aabfb5
2024-06-06devshells: only enable pch for clangQyriad
clangd seems to break if GCC is using precompiled headers for C++'s standard library, so this sets -Denable-pch-std=${stdenv.cc.isClang} Fixes #374. Change-Id: Ic4be41ebe7576ebcb9c208275596f953c2003109
2024-05-30build-time: remove 20% more by PCH'ing C++ stdlibJade Lovelace
It seems like someone implemented precompiled headers a long time ago and then it never got ported to meson or maybe didn't work at all. This is, however, blessedly easy to simply implement. I went looking for `#define` that could affect the result of precompiling the headers, and as far as I can tell we aren't doing any of that, so this should truly just be free build time savings. Previous state: Compilation (551 times): Parsing (frontend): 1302.1 s Codegen & opts (backend): 956.3 s New state: **** Time summary: Compilation (567 times): Parsing (frontend): 1123.0 s Codegen & opts (backend): 1078.1 s I wonder if the "regression" in codegen time is just doing the PCH operation a few times, because meson does it per-target. Change-Id: I664366b8069bab4851308b3a7571bea97ac64022
2024-05-30shellHook: make it actually runJade Lovelace
When we changed this in I91cb6eb6668f3a8eace36ecbdb01eb367861d77b to not run in nested shells, we didn't predict that `nix develop` would do something ridiculous and append -env to things silently. `nix-shell` of course does not do this, so we need to tolerate both. Change-Id: Ibe7cf546823d7358ebc0414ecbe154e3e3194f45
2024-05-30build: fix static aws-cpp-sdkQyriad
Change-Id: I310830951106f194f6960a6b2d52b5081a7f6156
2024-05-30package: fix derivation correctness when staticQyriad
Change-Id: I394bb72d9f378cd78acc6cf67a9bb15e342d57c4
2024-05-30package: return from shellHook correctlyQyriad
If our shellHook is being run from a nested nix-shell (see 7a12bc200¹), then (I think) it is run from a bash function due to the nesting, then `return` is correct. If its `eval`'d though, then there isn't really a correct way to early exit. So we can just unconditionally be executed in a function. Basically, we have IIFE at home. [1]: 7a12bc2007accb5022037b5a04b0e5475a8bb409 Change-Id: Iacad25cbbf66cde2911604e6061e56ad6212af7e
2024-05-30package: dequalify {host,build}Platform for convenienceQyriad
Change-Id: I5ffeac894a5bff101683cf3d566c63b478779962
2024-05-27package: don't run shellHook in nested nix-shellsstuebinm
If a nested nix-shell is run inside a nix-shell, then the outer shell's shellHook will be passed through and run again, unless the nested shell defines its own. With lix's hook, this can be annoying: forgetting to exit its nix-shell, cd'ing to another repository & entering a nested nix-shell will happily install lix's pre-commit hook in it. This change makes lix's hook return early in such cases. Change-Id: I91cb6eb6668f3a8eace36ecbdb01eb367861d77b
2024-05-24make CTRL+Z work in the REPLQyriad
Editline just wasn't being built with --enable-sigstop lol Change-Id: I35a78f74ea100d97f26b2b41990deb373fd9cd9a
2024-05-24package.nix: add meta.mainProgramPierre Bourdon
nix-repl> lib.getExe (builtins.getFlake ".").packages.x86_64-linux.nix "/nix/store/ajps2zn5hlap0l2abvnfdaphg8k0789r-lix-2.90.0pre20240524_dirty/bin/nix" Fixes #316. Change-Id: Iec3125dc2dc99d100beb6357f7d1555456924ddc
2024-05-24[emergency revert]: make pname nix once moreJade Lovelace
Embarrassingly, I submitted a CL overriding submit requirements since I thought it was spurious failures. However, the CI failure was in fact real, and I have hopefully learned my lesson. The CI failure is that: ``` vm-test-run-nix-upgrade-nix> machine # installing 'nix-2.18.1' vm-test-run-nix-upgrade-nix> machine # building '/nix/store/2b6fdf7wvahd00bg2ff0393bhd597a0h-user-environment.drv'... vm-test-run-nix-upgrade-nix> machine # error: Unable to build profile. There is a conflict for the following files: vm-test-run-nix-upgrade-nix> machine # vm-test-run-nix-upgrade-nix> machine # /nix/store/dn6mhhr92bh3ad0n4pd1538ww88khjii-nix-2.18.1/lib/libboost_context.so vm-test-run-nix-upgrade-nix> machine # /nix/store/w4vffn9iq0znk8bcg5i2giij90xy6db6-lix-2.90.0pre20240523_c97e171/lib/libboost_context.so vm-test-run-nix-upgrade-nix> machine # error: builder for '/nix/store/2b6fdf7wvahd00bg2ff0393bhd597a0h-user-environment.drv' failed with exit code 1 vm-test-run-nix-upgrade-nix> machine # error: program '/nix/store/w4vffn9iq0znk8bcg5i2giij90xy6db6-lix-2.90.0pre20240523_c97e171/bin/nix-env' failed with exit code 100 ``` This is definitely caused by the pname not being the same, so we had better revert that part of the change until we know we won't regress anything by doing this. Fixes: https://gerrit.lix.systems/c/lix/+/1152/5 Change-Id: I0e9d573987f2819c106fb7cea87410fa75152274
2024-05-23packaging: rename nixexpr -> lixexpr and so onJade Lovelace
This breaks downstreams linking to us on purpose to make sure that if someone is linking to Lix they're doing it on purpose and crucially not mixing up Nix and Lix versions in compatibility code. We still need to fix the internal includes to follow the same schema so we can drop the single-level include system entirely. However, this requires a little more effort. This adds pkg-config for libfetchers and config.h. Migration path: expr.hh -> lix/libexpr/expr.hh nix/config.h -> lix/config.h To apply this migration automatically, remove all `<nix/>` from includes, so: `#include <nix/expr.hh>` -> `#include <expr.hh>`. Then, the correct paths will be resolved from the tangled mess, and the clang-tidy automated fix will work. Then run the following for out of tree projects: ``` lix_root=$HOME/lix (cd $lix_root/clang-tidy && nix develop -c 'meson setup build && ninja -C build') run-clang-tidy -checks='-*,lix-fixincludes' -load=$lix_root/clang-tidy/build/liblix-clang-tidy.so -p build/ -fix src ``` Related: https://git.lix.systems/lix-project/nix-eval-jobs/pulls/5 Fixes: https://git.lix.systems/lix-project/lix/issues/279 Change-Id: I7498e903afa6850a731ef8ce77a70da6b2b46966
2024-05-18Deprecate the online flake registries and vendor the default registryjulia
Fixes #183, #110, #116. The default flake-registry option becomes 'vendored', and refers to a vendored flake-registry.json file in the install path. Vendored copy of the flake-registry is from github:NixOS/flake-registry at commit 9c69f7bd2363e71fe5cd7f608113290c7614dcdd. Change-Id: I752b81c85ebeaab4e582ac01c239d69d65580f37
2024-05-17package: add `--print-errorlogs` to meson's testsQyriad
This should have been in there originally, which is our mistake, considering that debugging CI failures is basically impossible without it. Change-Id: I4ab8799e6e0abca1984ed9801fe10c58200861a3
2024-05-16make lix dev shells un-bear-able since we un-make them nowJade Lovelace
We don't need bear anymore, since we don't have any more bad build systems that lack compile commands generation inside Lix. Change-Id: I7809ddfd993180468f846e8cd862bdd54d5b31ec
2024-05-15release-notes: build unreleased release notes by defaultJade Lovelace
Surely if you have unreleased changes you want them on a page right? `officialRelease` means "this is a *release version*", which is a reasonable case to not want it, but we are not that here. I understand wanting to be able to turn it off for deps reasons or something, but other than that, uhh, seems better to just turn it on always; it is basically free compute-wise to the point we run it on pre-commit. Part two of fixing lix#297. Fixes: https://git.lix.systems/lix-project/lix/issues/297 Change-Id: I0f8dd1ae42458df371aef529c456e47a7ac04ae0
2024-05-08flake: update nixpkgs input to latest nixos-23.11Maximilian Bosch
This includes the update to libseccomp 2.5.5[1], so we don't need to override it on our own. [1] https://nixpk.gs/pr-tracker.html?pr=306070 Change-Id: I1fa9c7fcc23e501d75f774745107c6bb086ced70
2024-05-07flake: refactor devShell creationQyriad
Now instead of a derivation overridden from Lix, we use a mkShell derivation parameterized on an already called package.nix. This also lets callPackage take care of the buildPackages distinction for the devShell. Change-Id: I5ddfec40d83fa6136032da7606fe6d3d5014ef42
2024-05-07package: default the build-release-notes arg like we do with lix-docQyriad
Change-Id: I0e2df55efc1cd6ea0a3252b9f26676e84612fdb6
2024-05-07remove the autoconf+Make buildsystemQyriad
We're not using it anymore. Any leftover bugs in the Meson buildsystem are now just bugs. Closes #249. Change-Id: I0465a0c37ae819f94d40e7829f5bff046aa63d73
2024-05-07Merge changes Icf26010a,Ib6161567 into mainNikodem Rabuliński
* changes: Always initialize curl in parent process on darwin Fix failing darwin tests