aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-03-26Merge "libmain: version printer uses `Lix` instead of `Nix`" into mainjade
2024-03-26envrc: addK900
direnv good. Change-Id: I81bd0086b847c6ee642a201fbc991a1f63fc7d7a
2024-03-26build-remote: fix format string shenanigansK900
HintFmt(string) invokes the HintFmt("%s", literal) constructor, which is not what we want here. Add a constructor with a proper name and call that. Next step: rename all the other ones to HintFmt::literal(string). Fixes: https://git.lix.systems/lix-project/lix/issues/178 Change-Id: If52d2eb8864ceb8663e05992e9d1fffef573d6b8
2024-03-26Merge "Merge pull request #8817 from iFreilicht/flake-update-lock-overhaul" ↵lunaphied
into main
2024-03-25Merge pull request #8817 from iFreilicht/flake-update-lock-overhaulThéophane Hufschmitt
Overhaul `nix flake update` and `nix flake lock` UX (cherry picked from commit 12a0ae73dbb37becefa5a442eb4532ff0de9ce65) Change-Id: Iff3b4f4235ebb1948ec612036b39ab29e4ca22b2
2024-03-25flake.nix: linearize meson buildseldritch horrors
parallel meson builds need too much ram. linearize them for now, and hopefully we can remove the make build system and this hack soonish. Change-Id: I42c092db8b0c63680e77da2263cdfe9e7f6575be
2024-03-25Merge "issue template: use nix --version instead of nix-env --version" into mainQyriad
2024-03-25issue template: use nix --version instead of nix-env --versionQyriad
`nix --version` doesn't require `nix-command` experimental feature to run and we could all do with less nix-env Change-Id: I90748d591c574d96eda46591e9f9ce828311da29
2024-03-25Minor cleanup in libexpr/flake/flake.ccEelco Dolstra
(cherry picked from commit 05316d401fa509557c71140e17bb19814412fcb8) Change-Id: I6ba0b55709f5fe21beb4e9f3bf72ee28715d15f3
2024-03-25Input: Replace markFileChanged() by putFile()Eelco Dolstra
Committing a lock file using markFileChanged() required the input to be writable by the caller in the local filesystem (using the path returned by getSourcePath()). putFile() abstracts over this. (cherry picked from commit 95d657c8b3ae4282e24628ba7426edb90c8f3942) Change-Id: Ie081c5d9eb4e923b229191c5e23ece85145557ff
2024-03-25Overhaul completions, redo #6693 (#8131)John Ericson
As I complained in https://github.com/NixOS/nix/pull/6784#issuecomment-1421777030 (a comment on the wrong PR, sorry again!), #6693 introduced a second completions mechanism to fix a bug. Having two completion mechanisms isn't so nice. As @thufschmitt also pointed out, it was a bummer to go from `FlakeRef` to `std::string` when collecting flake refs. Now it is `FlakeRefs` again. The underlying issue that sought to work around was that completion of arguments not at the end can still benefit from the information from latter arguments. To fix this better, we rip out that change and simply defer all completion processing until after all the (regular, already-complete) arguments have been passed. In addition, I noticed the original completion logic used some global variables. I do not like global variables, because even if they save lines of code, they also obfuscate the architecture of the code. I got rid of them moved them to a new `RootArgs` class, which now has `parseCmdline` instead of `Args`. The idea is that we have many argument parsers from subcommands and what-not, but only one root args that owns the other per actual parsing invocation. The state that was global is now part of the root args instead. This did, admittedly, add a bunch of new code. And I do feel bad about that. So I went and added a lot of API docs to try to at least make the current state of things clear to the next person. -- This is needed for RFC 134 (tracking issue #7868). It was very hard to modularize `Installable` parsing when there were two completion arguments. I wouldn't go as far as to say it is *easy* now, but at least it is less hard (and the completions test finally passed). Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io> Change-Id: If18cd5be78da4a70635e3fdcac6326dbfeea71a5 (cherry picked from commit 67eb37c1d0de28160cd25376e51d1ec1b1c8305b)
2024-03-25feat: notation to refer to no attribute search prefixTom Bereknyei
An attrPath prefix of "." indicates no need to try default attrPath prefixes. For example `nixpkgs#legacyPackages.x86_64-linux.ERROR` searches through ``` trying flake output attribute 'packages.x86_64-linux.legacyPackages.x86_64-linux.ERROR' using cached attrset attribute '' trying flake output attribute 'legacyPackages.x86_64-linux.legacyPackages.x86_64-linux.ERROR' using cached attrset attribute 'legacyPackages.x86_64-linux' trying flake output attribute 'legacyPackages.x86_64-linux.ERROR' using cached attrset attribute 'legacyPackages.x86_64-linux' ``` And there is no way to specify that one does not want the automatic search behavior. Now one can specify `nixpkgs#.legacyPackages.x86_64-linux.ERROR` to only refer to the rooted attribute path without any default injection of attribute search path or system. Change-Id: Iac1334e1470137b7ce11dcf845513810230638ec (cherry picked from commit d4aed18883b361133607296fb6cd789c47427a38)
2024-03-25Merge "Improve new CLI UX by supporting short `-E` flag for `--expr`" into mainlunaphied
2024-03-25libmain: version printer uses `Lix` instead of `Nix`Raito Bezarius
Change-Id: I014ff24b900c0b9a48b7a63c8bb8b86cde3ebe54 Signed-off-by: Raito Bezarius <raito@lix.systems>
2024-03-25Merge "Restore system-install profile files from the previous installer" ↵jade
into main
2024-03-25Restore system-install profile files from the previous installerJade Lovelace
These files are required to get Nix in PATH in existing multi-user installs using the legacy installer. We really could use some tests. Cc: https://git.lix.systems/lix-project/lix/issues/33 This partially reverts commit 93cc063344323a8b0d630d0a67acd121cdc3f86a. Fixes: https://git.lix.systems/lix-project/lix/issues/173 Change-Id: Iafb55280596732670a432f604b897f48562868e4
2024-03-24Improve new CLI UX by supporting short `-E` flag for `--expr`Lunaphied
Change-Id: I55881c846da8416a92a14deedfa5bbbf09a122fb
2024-03-24libstore: despecialcase protocol version checkeldritch horrors
protocol versions are sent as u64. on the peer we read them as uint64, check that the upper half is 0, and throw an exception if not. we then read an arbitrary amount of data from the peer and dump it to the user terminal. this is a little bit ridiculous, can never happen in correct implementation, and is severly untested. let us just drop it entirely. Change-Id: Ibd2f53a765341ed6439d40d9d1eac11e79c6b5e3
2024-03-24libstore: un-inline copyNAR expansionseldritch horrors
these are copies of copyNAR with only some variables renamed. Change-Id: I98ddd7a98250fa5d304e18e1debf417e9f7768dd
2024-03-23Revert "Merge pull request #9476 from alois31/restore-progress-bar"Jade Lovelace
Observed to regress nix repl attrset printing with narrow windows. This reverts commit a2d5e803cf16e048f30f0334114759f81f6c5d20. Fixes: https://git.lix.systems/lix-project/lix/issues/168 Change-Id: I8e0031475b4ec26d6a71014357d973578b70815c
2024-03-23libutil: don't memset 64k in drainFDeldritch horrors
this is not needed and introduces a bunch of memset calls, making up for 3% of valgrind cycle estimation *alone*. real-world impact is a lot lower on our test machine, but we suspect that less powerful machines would see an impact from dropping this. Change-Id: Iad10e9d556e64fdeb0bee0059a4e52520058d11e
2024-03-22build: optionally build and install with mesonQyriad
This commit adds several meson.build, which successfully build and install Lix executables, libraries, and headers. Meson does not yet build docs, Perl bindings, or run tests, which will be added in following commits. As such, this commit does not remove the existing build system, or make it the default, and also as such, this commit has several FIXMEs and TODOs as notes for what should be done before the existing autoconf + make buildsystem can be removed and Meson made the default. This commit does not modify any source files. A Meson-enabled build is also added as a Hydra job, and to `nix flake check`. Change-Id: I667c8685b13b7bab91e281053f807a11616ae3d4
2024-03-21Merge "clang-tidy check infrastructure" into mainjade
2024-03-21flake: fix arm32 Linux cross devShell on macOS (fix nix flake check)Qyriad
Change-Id: Iacac97de0b3d5f2df52c7bc985148624a351f45d
2024-03-20libexpr: unbreak PosTable performanceeldritch horrors
this was mostly an inconvenience for error reporting, but fully broke the debugger (because the debugger does *a lot* of eager position resolution). copying the line offsets into a local and filling that local when empty without also storing the calculated offsets back does kind of ... not cache anything. fixes https://git.lix.systems/lix-project/lix/issues/165 Change-Id: Iccb0ba193ce2f15c832978daecf7b9bebbbe8585
2024-03-19Merge "un-ups your start" into mainjade
2024-03-19libutil: remove exception handling workingness checkeldritch horrors
within lix itself this problem is caught by the test suite. outside of lix itself three cases can be had: either the problem is fully inside lix libs, fully inside user code, or it exists at the boundary. the first is caught by the test suite, the second isn't caught at all, and the third is something lix should not be responsible for. Change-Id: I95aa35d8cb6f0ef5816a2941c467bc0c15916063
2024-03-18Merge changes I72c945ca,I2138bb4d,Ib96749f3 into mainjade
* changes: Release notes for builtins.nixVersion change un-nixes ur lix, a little issue importer: list issues that are *not* closed when finding existing issues
2024-03-18un-ups your startJade Lovelace
We do not need upstart, it is so thoroughly obsolete that we should not care about supporting it. Change-Id: Ie0ca084740845555fddffacc899cd129c9a4c1fe
2024-03-18Release notes for builtins.nixVersion changeJade Lovelace
Change-Id: I72c945cab464d26d73f5594ef0a4bb2184545da4
2024-03-18un-nixes ur lix, a littleJade Lovelace
I didn't really go attack the docs because we need to pull a bunch of PRs. I went looking for strings in the code that called lix nix. Change-Id: I2138bb4dd239096bc530946b281db7f875195b39
2024-03-18issue importer: list issues that are *not* closed when finding existing issuesJade Lovelace
Turns out also, you cannot set the queue to 0 with any success. So we really should just like, prevent notifications in forgejo itself. Filed a bug for that: https://git.lix.systems/lix-project/web-services/issues/38 Change-Id: Ib96749f3159659182904963cab7b2ef88fc64442
2024-03-18clang-tidy check infrastructureJade Lovelace
This brings in infrastructure for developing new custom clang-tidy lints and refactors for Lix. Change-Id: I3df5f5855712ab4f97d4e84d771e5e818f81f881
2024-03-18libutil: make AutoCloseFD a better resourceeldritch horrors
add a reset() method to close the wrapped fd instead of assigning magic constants. also make the from-fd constructor explicit so you can't accidentally assign the *wrong* magic constant, or even an unrelated integer that also just happens to be an fd by pure chance. Change-Id: I51311b0f6e040240886b5103d39d1794a6acc325
2024-03-18Merge "libexpr: associate let exprs with the correct StaticEnv" into maineldritch horrors
2024-03-18libexpr: associate let exprs with the correct StaticEnveldritch horrors
static env association is from expr to its enclosing scope, but let exprs set their association to their *inner* scope. this skips one level of envs and will cause segfaults if the parent is a with expr. fixes #145 Change-Id: I1d22146110f071ede21b4eed7ed34b5850ef2ef3
2024-03-18Add clang format configurationJade Lovelace
Contemplate the configuration with: https://clang-format-configurator.site/ (cherry picked from commit 53fdcbca509b6c5dacaea3d3c465d86e49b0dd74) Change-Id: I5446fd45de2bf644e34112f719afb3318a440b30
2024-03-18libexpr: sort binding name in debuggereldritch horrors
not doing this exposes the binding name order to the annoying interference of parse order on symbol order, which wouldn't be so bad if it didn't make the tests less reliable and, importantly, dependent on linker behavior (due to primop initialization being done in static initializer, and the order of static initializers being defined only within a single translation unit). fixes #143 Change-Id: I3cf417893fbcf19e9ad3ff8986deb7cbcf3ca511
2024-03-18Merge "Delete hasPrefix and hasSuffix from the codebase" into mainjade
2024-03-18use byte indexed locations for PosIdxeldritch horrors
we now keep not a table of all positions, but a table of all origins and their sizes. position indices are now direct pointers into the virtual concatenation of all parsed contents. this slightly reduces memory usage and time spent in the parser, at the cost of not being able to report positions if the total input size exceeds 4GiB. this limit is not unique to nix though, rustc and clang also limit their input to 4GiB (although at least clang refuses to process inputs that are larger, we will not). this new 4GiB limit probably will not cause any problems for quite a while, all of nixpkgs together is less than 100MiB in size and already needs over 700MiB of memory and multiple seconds just to parse. 4GiB worth of input will easily take multiple minutes and over 30GiB of memory without even evaluating anything. if problems *do* arise we can probably recover the old table-based system by adding some tracking to Pos::Origin (or increasing the size of PosIdx outright), but for time being this looks like more complexity than it's worth. since we now need to read the entire input again to determine the line/column of a position we'll make unsafeGetAttrPos slightly lazy: mostly the set it returns is only used to determine the file of origin of an attribute, not its exact location. the thunks do not add measurable runtime overhead. notably this change is necessary to allow changing the parser since apparently nothing supports nix's very idiosyncratic line ending choice of "anything goes", making it very hard to calculate line/column positions in the parser (while byte offsets are very easy). (cherry picked from commit 5d9fdab3de0ee17c71369ad05806b9ea06dfceda) Change-Id: Ie0b2430cb120c09097afa8c0101884d94f4bbf34
2024-03-18diagnose "unexpected EOF" at EOFeldritch horrors
this needs a string comparison because there seems to be no other way to get that information out of bison. usually the location info is going to be correct (pointing at a bad token), but since EOF isn't a token as such it'll be wrong in that this case. this hasn't shown up much so far because a single line ending *is* a token, so any file formatted in the usual manner (ie, ending in a line ending) would have its EOF position reported correctly. (cherry picked from commit 855fd5a1bb781e4f722c1d757ba43e866d370132) Change-Id: I120c56a962f4286b1ae3b71da7b71ce8ec3e0535
2024-03-18match line endings used by parser and error reportseldritch horrors
the parser treats a plain \r as a newline, error reports do not. this can lead to interesting divergences if anything makes use of this feature, with error reports pointing to wrong locations in the input (or even outside the input altogether). (cherry picked from commit 2be6b143289e5479cc4a2667bb84e879116c2447) Change-Id: Ieb7f7655bac8cb0cf5734c60bd41723388f2973c
2024-03-18report inherit attr errors at the duplicate nameeldritch horrors
previously we reported the error at the beginning of the binding block (for plain inherits) or the beginning of the attr list (for inherit-from), effectively hiding where exactly the error happened. this also carries over to runtime positions of attributes in sets as reported by unsafeGetAttrPos. we're not worried about this changing observable eval behavior because it *is* marked unsafe, and the new behavior is much more useful. (cherry picked from commit 1edd6fada53553b89847ac3981ac28025857ca02) Change-Id: I2f50eb9f3dc3977db4eb3e3da96f1cb37ccd5174
2024-03-18normalize formal order on ExprLambda::showeldritch horrors
we already normalize attr order to lexicographic, doing the same for formals makes sense. doubly so because the order of formals would otherwise depend on the context of the expression, which is not quite as useful as one might expect. (cherry picked from commit 4147ecfb1c51f3fe3b4adcbd4e753fd487dab645) Change-Id: I3fd0dbdef3ac7447a3a03ff20bb514a0d0f23fb1
2024-03-18keep copies of parser inputs that are in-memory onlyeldritch horrors
the parser modifies its inputs, which means that sharing them between the error context reporting system and the parser itself can confuse the reporting system. usually this led to early truncation of error context reports which, while not dangerous, can be quite confusing. (cherry picked from commit d384ecd553aa997270b79ee98d02f7cf7e1849e6) Change-Id: I677646b5675b12b2faa787943646aa36dc6e6ee3
2024-03-18libutil: remove vforkeldritch horrors
vfork confers a large performance advantage over fork, measured locally at 16µs per vfork agains 90µs per fork. however nix *almost always* follows a vfork up with an execve-family call, melting the performance advantage from 6x to only 15%. in most of those cases it's doing things that are undefined behavior (like manipulating the heap, or even throwing exceptions and trashing the parent process stack). most notably the one place that could benefit from the vfork performance improvement is linux derivation sandbox setup—which doesn't use vfork. Change-Id: I2037b7384d5a4ca24da219a569e1b1f39531410e
2024-03-17Merge "Forgejo issue importer" into mainjade
2024-03-17Delete hasPrefix and hasSuffix from the codebaseJade Lovelace
These now have equivalents in the standard lib in C++20. This change was performed with a custom clang-tidy check which I will submit later. Executed like so: ninja -C build && run-clang-tidy -checks='-*,nix-*' -load=build/libnix-clang-tidy.so -p .. -fix ../tests | tee -a clang-tidy-result Change-Id: I62679e315ff9e7ce72a40b91b79c3e9fc01b27e9
2024-03-17Merge "builtins.nixVersion: return fixed fake version" into mainjade
2024-03-17flake: fix musl static stdenv devShell (fix nix flake check)Qyriad
pkgs.pkgsStatic.glibcLocales is null, so the string coercion was failing for devShells against static stdenvs Change-Id: Iee8e1042a852133ce0432627d72a85e97c17055e