Attendees: @roberth @infinisil @edolstra @regnat @tomberek @fricklerhandwerk
Notes: @infinisil @fricklerhandwerk
Agenda
NIX_PATH
vsnix-path
bug- Planning flakes stabilisation
- Write down components for working on separately
- fetchTree
- lockfile
- pure evaluation
- evaluation caching
- package schema
- reference resolution
- reference syntax
- registry
- version resolution
- Write down components for working on separately
NIX_PATH
vs nix-path
bug
- the interactions are messy
- assigned to @fricklerhandwerk and @regnat to figure it out
Flakes stabilisation
(recap of the NixCon discussions between @fricklerhandwerk, @infinisil, @roberth, @tomberek and others: Proposal to split flakes into their different aspects to stabilize them independently)
-
@edolstra: Be careful of the 2nd system effect. Now is the time to stabilize them, not to start proposing substantial changes
- @fricklerhandwerk: Not suggesting incompatible changes, just attacking stabilisation of major components independently
-
@roberth: Flakes have been here for a long time, but people didn’t really have the opportunity to change them
- @edolstra: Not true, barely anyone came up with proposals
- @infinisil: Breaking up and rearchitecturing flakes is as important as the stabilisation itself
- @edolstra: Doing that is research, it might take an unbounded amount of time
- @fricklerhandwerk: We have some partial solutions that can be used independently, like the lockfile format. Cf. @lheckemann’ talk on flakes at NixCon.
-
@roberth:
fetchTree
is already a standalone component that could be stabilized independently - @edolstra: What would stabilizing lockfiles mean? There’s no way of consuming them from Nix
- @roberth: stabilizing the lock file would also involve stabilizing the dependency injection, besides the lock file format itself
- @tomberek: Plan towards getting closer to the finish line. But Flakes are made by strongly interconnected things that will be hard to really pull apart.
-
@fricklerhandwerk:
- We didn’t have the setup for people to both seriously discuss proposals and implement them timely. This is different now that there is this team.
- Breaking things apart should help parallelizing the work
- @infinisil: What does it mean to finalize something? We should consider Flakes as an experiment that’s widely used but not properly designed. However we could fix those issues in a backwards compatible way after stabilizing.
-
@fricklerhandwerk: Concrete proposal: get funding for that split work. There is just a lot of work that we agreed has to be done but we collectively don’t have time for.
- @edolstra: Disagree this would be much work. Barely any implementation changes needed.
- @fricklerhandwerk: There may or may not be much to change in the code, but to solidify and if necessary refine the design we’d need RFC-style (not necessarily full RFC process) decision making, weighing the alternatives and considering long-term costs
-
@tomberek: What would be the minimal requirements for declaring Flakes stable?
- Defining stable as “no backwards-incompatible changes”
- Can we support it indefinitely without regreting it?
- For instance, if we have an impending change to the lockfile format, should we wait for it?
- (some discussion on whether we should uphold the value that Nix expressions shall be reproducible indefinitely for stable features)
- (the team silently agreed, @infinisil raised some objections and counter-proposals)
- @fricklerhandwerk: Doesn’t prevent us from working on uncontroversial things at the same time. We all seem to agree that we want the limbo state resolved as quickly as possible, the question now is how exactly.
- Possible blockers for stabilisation:
-
flake-schemas
extension: needs decision on blocker or not- extension can be added later, does not need to break flakes
- decision: not a blocker
- “CLI” flake schema (standardized output attributes): finalize
- once made stable, schema conventions must persist
- clarify what is under “undefined behavior” and what is “defined behavior” for CLI and official tooling
- flake.nix format is not written in Nix language but looks very similar
- a restriction that could be lifted
- needs to be clarified for new users
- conflicting requirements: consistency of language vs. restricted power for tracking metadata
-
flake.inputs.toml
,flake.inputs.json
(human) or inflake.lock
(auto)
-
- Needs discussion
- registry
- proposal: not used implicitly, consider a registry as an extension
- Needs discussion, but there is likely a way forward
- possibly in-scope: no official support for implicit registry usage inside flake.nix
- proposal: retain CLI conveniences
- lockfile format/semantics: final rework
- proposal: blocking, this is a large change
- proposal: not-blocking, existing usage
- decision: based on implementation timeline
- @edolstra proposes giving it a month from now
-
@fricklerhandwerk: strongly disagree with timelines or artificial time pressure
- also there are still many open questions, so it’s to some extent design work that may or may not advance predictably
- a month here is simply unrealistic. we’re already busy with CLI stabilisation and only make slow progress with that. right now we’re adding at least 4-5 new items that will require a lot more than one session to deal with.
- (added in writing) we have no evidence that timelines ever worked here, we just do too many things concurrently and without schedule
- for timelines we’d need a known amount of developer time available and an estimate of the effort; we have neither
- locking mechanism: (clarify?)
- What’s the behavior of
nix flake lock
? Are transitive lockfiles taken into account? Should it be pluggable like @lheckemann suggested? - likely part of CLI+flakes review, and part of the lockfile semantics issue above
- What’s the behavior of
- call-flake.nix interface: add overrides/follows to API
- (clarify? @roberth? @tomberek?)
- @roberth: (in writing only) an overrides function is something I expect to get “for free” from the reuse input lockfiles change, as it needs such a function in call-flake.nix anyway
- proposal: blocker
-
@roberth: (in writing only) adding a new pseudo-input
meta
turned out to be a breaking change! something similar would be needed for this
-
@roberth: (in writing only) adding a new pseudo-input
- proposal: not a blocker, we have to support this anyway
- (clarify? @roberth? @tomberek?)
- CLI experience: review in a similar way as nix-command
- agreement?
- breakout pure eval
- proposal: not a blocker
- Should be a blocker if pure-eval is the default behavior for flake evaluation and there are questions about the semantics
- proposal: not a blocker
- breakout eval cache
- proposal: not a blocker. Doesn’t impact the semantics
- fetchTree
- proposal: blocker, defines requirements for lockfiles, input declarations
-
- will continue next Monday