CppNix compat: path literals in flake inputs #1140
Labels
No labels
Affects/CppNix
Affects/Nightly
Affects/Only nightly
Affects/Stable
Area/build-packaging
Area/caches
Area/cli
Area/evaluator
Area/fetching
Area/flakes
Area/language
Area/lix ci
Area/nix-eval-jobs
Area/profiles
Area/protocol
Area/releng
Area/remote-builds
Area/repl
Area/repl/debugger
Area/store
awaiting
author
awaiting
contributors
bug
Context
contributors
Context
drive-by
Context
maintainers
Context
RFD
crash 💥
Cross Compilation
devx
diagnostics
docs
Downstream Dependents
E/easy
E/hard
E/help wanted
E/reproducible
E/requires rearchitecture
Feature/S3
Importance
High
Importance
Low
imported
Infrastructure
Language/Bash
Language/C++
Language/NixLang
Language/Python
Language/Rust
Needs Langver
OS/Linux
OS/macOS
performance
regression
Release Blocking
Non-urgent
Release Blocking
Urgent
stability
Status
blocked
Status
invalid
Status
postponed
Status
wontfix
testing
testing/flakey
Topic/Large Scale Installations
Urgency
High
Urgency
Low
ux
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
lix-project/lix#1140
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Is your feature request related to a problem? Please describe.
CppNix added a feature a while ago that allows path literals in
.input.url, like so:relevant commit:
github.com/NixOS/nix@3180671cabDescribe the solution you'd like
we could port this feature to Lix
Describe alternatives you've considered
we could avoid doing that. this is a compat wrinkle, but there’s a workaround of writing
"path:"strings (although it’s a bit harder if an incompatible flake is in your (transitive) dependencies)Additional context
I found this during a crater-like test run. I’ve seen a single repo that uses this in the wild, but there might be others.
I’m aware that flakes are currently frozen; this could be implemented after they thaw.
I can work on porting this patch if this is accepted.
If we allow that syntax element in the input, what about
${./a}? Should this be allowed?(assuming you mean
"${./a}"), my intuition is “no”, because it’s unclear why would anyone write this and it requires more evaluation than is usually allowed in flake inputs.// I’m personally of the opinion that flake inputs should allow arbitrary evaluation, but that’s a very different discussion
as a data point, CppNix currently disallows it specifically because it requires too much evaluation (the message is
expected a string or a path but got a thunk)the
path:workaround leads to different, incompatible lockfiles between lix and CppNix. I think the issue is that nix treats apath:relative/path/the same way it treats a bare./relative/path, leading it to produce a lockfile incompatible with lix. the error is:CppNix, on the other hand, treats the lix-produced lockfile as stale, and immediately updates it to the broken format. this means the flake provider has to use lix to manage the lockfile or do something else entirely (like move the relative path input to a separate repo).