aboutsummaryrefslogtreecommitdiff
path: root/src/nix/flake.cc
AgeCommit message (Collapse)Author
2022-05-18Hint at the source file on conflict in `flake new`Théophane Hufschmitt
Add a pointer to the source file (from the template) when `nix flake new` (or `init`) encounters an already existing file Fix #6542
2022-05-13fix: alignment during flake show of legacyPackagesTom Bereknyei
Fixes: https://github.com/NixOS/nix/issues/6240 https://github.com/NixOS/nix/issues/6045
2022-05-03Allow selecting derivation outputs using 'installable!outputs'Eelco Dolstra
E.g. 'nixpkgs#glibc^dev,static' or 'nixpkgs#glibc^*'.
2022-04-29Merge remote-tracking branch 'origin/master' into coerce-stringGuillaume Maudoux
2022-04-28fix errors case and wordingGuillaume Maudoux
2022-04-26nix: Respect meta.outputsToInstall, and use all outputs by defaultEelco Dolstra
'nix profile install' will now install all outputs listed in the package's meta.outputsToInstall attribute, or all outputs if that attribute doesn't exist. This makes it behave consistently with nix-env. Fixes #6385. Furthermore, for consistency, all other 'nix' commands do this as well. E.g. 'nix build' will build and symlink the outputs in meta.outputsToInstall, defaulting to all outputs. Previously, it only built/symlinked the first output. Note that this means that selecting a specific output using attrpath selection (e.g. 'nix build nixpkgs#libxml2.dev') no longer works. A subsequent PR will add a way to specify the desired outputs explicitly.
2022-04-26EvalCache: Revert to using symbols in getAttr()Eelco Dolstra
2022-04-25rename SymbolIdx -> Symbol, Symbol -> SymbolStrpennae
after #6218 `Symbol` no longer confers a uniqueness invariant on the string it wraps, it is now possible to create multiple symbols that compare equal but whose string contents have different addresses. this guarantee is now only provided by `SymbolIdx`, leaving `Symbol` only as a string wrapper that knows about the intricacies of how symbols need to be formatted for output. this change renames `SymbolIdx` to `Symbol` to restore the previous semantics of `Symbol` to that name. we also keep the wrapper type and rename it to `SymbolStr` instead of returning plain strings from lookups into the symbol table because symbols are formatted for output in many places. theoretically we do not need `SymbolStr`, only a function that formats a string for output as a symbol, but having to wrap every symbol that appears in a message into eg `formatSymbol()` is error-prone and inconvient.
2022-04-21store Symbols in a table as well, like positionspennae
this slightly increases the amount of memory used for any given symbol, but this increase is more than made up for if the symbol is referenced more than once in the EvalState that holds it. on average every symbol should be referenced at least twice (once to introduce a binding, once to use it), so we expect no increase in memory on average. symbol tables are limited to 2³² entries like position tables, and similar arguments apply to why overflow is not likely: 2³² symbols would require as many string instances (at 24 bytes each) and map entries (at 24 bytes or more each, assuming that the map holds on average at most one item per bucket as the docs say). a full symbol table would require at least 192GB of memory just for symbols, which is well out of reach. (an ofborg eval of nixpks today creates less than a million symbols!)
2022-04-21replace most Pos objects/ptrs with indexes into a position tablepennae
Pos objects are somewhat wasteful as they duplicate the origin file name and input type for each object. on files that produce more than one Pos when parsed this a sizeable waste of memory (one pointer per Pos). the same goes for ptr<Pos> on 64 bit machines: parsing enough source to require 8 bytes to locate a position would need at least 8GB of input and 64GB of expression memory. it's not likely that we'll hit that any time soon, so we can use a uint32_t index to locate positions instead.
2022-04-19Require formatters to be packagesEelco Dolstra
Because of 9b41239d8fdcc3fe50febe718c15833ebc224354, a formatter can no longer be a package *or* an app. So let's require it to be a package for now.
2022-04-19Merge branch 'issue-6075' of https://github.com/kamadorueda/nixEelco Dolstra
2022-04-14Make InstallableFlake::toValue() and toDerivation() behave consistentlyEelco Dolstra
In particular, this means that 'nix eval` (which uses toValue()) no longer auto-calls functions or functors (because AttrCursor::findAlongAttrPath() doesn't). Fixes #6152. Also use ref<> in a few places, and don't return attrpaths from getCursor() because cursors already have a getAttrPath() method.
2022-04-06nix flake check: Warn about deprecated nixosModule outputRehno Lindeque
2022-04-05Allow `welcomeText` when checking a flake templateThéophane Hufschmitt
Fix https://github.com/NixOS/nix/issues/6321
2022-03-18Merge remote-tracking branch 'origin/master' into coerce-stringGuillaume Maudoux
2022-03-18Revert extra colon at end os stringsGuillaume Maudoux
2022-03-11nix-fmt: add commandKevin Amado
2022-03-07StyleEelco Dolstra
2022-03-07Explicit error in flake init/new when not in storeGuillaume Desforges
2022-03-07more fixesGuillaume Maudoux
2022-03-04Add detailed error mesage for coerceTo{String,Path}Guillaume Maudoux
2022-03-04Add error context for most basic coercionsGuillaume Maudoux
2022-03-02Add EvalState::coerceToStorePath() helperEelco Dolstra
This is useful whenever we want to evaluate something to a store path (e.g. in get-drvs.cc). Extracted from the lazy-trees branch (where we can require that a store path must come from a store source tree accessor).
2022-02-22nix flake check: Warn about deprecated flake outputsEelco Dolstra
2022-02-22Replace defaultBla.$system with bla.$system.defaultEelco Dolstra
This also simplifies some InstallableFlake logic and fixes 'nix bundle' parsing its installable twice. Fixes #5532.
2022-02-17Merge pull request #6103 from Radvendii/welcomeTextEelco Dolstra
add descriptive output when creating templates
2022-02-17make flake template welcomeText markdownTaeer Bar-Yam
2022-02-15add descriptive output when creating templatesTaeer Bar-Yam
this includes a `welcomeText` attribute which can be set in the template, as well as outputing which files were created.
2022-02-14InstallableFlake: Default attr paths cleanupEelco Dolstra
This removes some duplicated logic, and fixes "nix bundle" parsing its installable twice.
2022-02-04Merge branch 'issue-3505' of https://github.com/kamadorueda/nixEelco Dolstra
2022-01-24Refactor bundler APITom Bereknyei
Bundlers now expect to be located at bundlers.<system>.<name> and are a function from derivations to derivations.
2022-01-21forceAttrs: make pos mandatoryKevin Amado
2021-11-09Recognize singular "nixosModule" in nix flake showMatthew Bauer
This makes nixosModule appears as a "NixOS Module" like nixosModules does.
2021-11-04Add helper function to check whether a function arg is 'X' or '_X'Eelco Dolstra
Also allow '_'.
2021-11-03In checkOverlay, accept underscored names for final/prev args.Christopher League
Resolves #4416.
2021-10-26Make experimental-features a proper typeregnat
Rather than having them plain strings scattered through the whole codebase, create an enum containing all the known experimental features. This means that - Nix can now `warn` when an unkwown experimental feature is passed (making it much nicer to spot typos and spot deprecated features) - It’s now easy to remove a feature altogether (once the feature isn’t experimental anymore or is dropped) by just removing the field for the enum and letting the compiler point us to all the now invalid usages of it.
2021-10-06libexpr: remove matchAttrs boolean from ExprLambdaAndreas Rammhold
The boolean is only used to determine if the formals are set to a non-null pointer in all our cases. We can get rid of that allocation and instead just compare the pointer value with NULL. Saving up to sizeof(bool) + platform specific alignment per ExprLambda instace. Probably not a lot of memory but perhaps a few kilobyte with nixpkgs? This also gets rid of a potential issue with dereferencing formals based on the value of the boolean that didn't have to be aligned with the formals pointer but was in all our cases.
2021-09-22Disable IFD selectivelyEelco Dolstra
It's now disabled by default for the following: * 'nix search' (this was already implied by read-only mode) * 'nix flake show' * 'nix flake check', but only on the hydraJobs output
2021-09-14nix flake show --json: Add type infoEelco Dolstra
For extensibility, every leaf node is now an object that contains at least a type field (e.g. "type": "derivation").
2021-09-14Merge branch 'tomberek/show_json' of https://github.com/tomberek/nixEelco Dolstra
2021-09-14ANSI_YELLOW -> ANSI_WARNINGEelco Dolstra
2021-08-17Enable JSON option to show flakesTom Bereknyei
`nix-flake show --json`
2021-07-22copyPaths: Pass store by referenceEelco Dolstra
2021-07-13Make `nix flake check` aware of `devShells`regnat
2021-07-13Make `nix flake show` display the `devShells`regnat
2021-07-01fixup! flake.nixConfig: fix flake-registry config settingsAlexander Bantyev
2021-06-02throw_ -> reportErrorregnat
This function might or might not throw depending on the value of `keepGoing`, so naming it `throw_` was a bit confusing
2021-06-02Let `nix flake check` keep going when keep-going is setregnat
When the `keep-going` option is set to `true`, make `nix flake check` continue as much as it can before failing. The UI isn’t perfect as-it-is as all the lines currently start with a mostly useless `error (ignored): error:` prefix, but I’m not sure what the best output would be, so I’ll leave it as-it-is for the time being (This is a bit hijacking the `keep-going` flag as it’s supposed to be a build-time only thing. But I think it’s faire to reuse it here). Fix https://github.com/NixOS/nix/issues/4450
2021-04-05Rename BuildableJohn Ericson