Repository navigation
Description
Context
Found via #2715 (the 2026-10-30 nixpkgs update). The update moves the nixpkgs-25 input from e7439b6b to 31ecbaca. nixos/environment/default.nix takes activitywatch from that input's raw legacyPackages segment. On the new pin, python3.14-aw-core-0.5.17 fails its pythonRuntimeDepsCheck:
Checking runtime dependencies for aw_core-0.5.17-py3-none-any.whl
- peewee==3.* not satisfied by version 4.4.0
aw-core 0.5.17's wheel metadata pins peewee==3.*, but the tree now ships peewee 4.4.0. The identical aw-core derivation (and peewee 4.4.0) appears on the new master and unstable pins too, so no current pin offers a consistent set to source activitywatch from; the failure cascades aw-core -> aw-qt/aw-client -> activitywatch -> man-paths -> system-path and blocks the amd toplevel.
The temporary fix
nixos/environment/default.nix extends the nixpkgs-25 legacyPackages set (nixpkgs-25-fixed, next to nixpkgs-master-fixed) with a python3 packageOverride that adds pythonRelaxDeps = [ "peewee" ] to aw-core, and the activitywatch segment uses the extended set. This rewrites the stale metadata pin so the runtime-deps check accepts peewee 4.4.0. Caveat: it does not prove aw-core's peewee API usage is 4.x-compatible at runtime — it is the standard nixpkgs remedy for this skew class, and activitywatch is a local user application, not a system service.
Removal condition
Remove once stock activitywatch builds on the pin the segment consumes — i.e. upstream nixpkgs bumps aw-core for peewee 4 (or pins peewee 3 for the aw-* packages), so python3Packages.aw-core passes pythonRuntimeDepsCheck unmodified.
Removal test
Point the activitywatch segment back at inputs.nixpkgs-25.legacyPackages.${system} (deleting the nixpkgs-25-fixed binding) and build activitywatch plus config.system.build.toplevel for amd; both must succeed, and aw-core should still launch (aw-server --help or the activitywatch binaries present in the system profile).
Acceptance criteria
- A current nixpkgs pin (25 / master / unstable, whichever first) ships an aw-core whose
peeweerequirement is consistent with the tree's peewee version — verified by evaluating the activitywatch derivation from that pin with no overrides. - The peewee 3 pin and aw-qt wrapper-args overrides in
nixos/environment/default.nixare removed, and activitywatch still builds and launches from the unmodified pin. - If no pin qualifies yet, the blocking pin state is re-recorded on the issue with the date checked (the issue stays open as the waiting record).
Activity
fix(nixpkgs): pin peewee 3 and fix aw-qt wrapper args so activitywatc…
[-]chore(deps): remove the aw-core peewee relaxDeps override once nixpkgs' activitywatch builds stock[/-][+]chore(deps): remove the activitywatch overrides (peewee 3 pin + aw-qt wrapper args) once nixpkgs' activitywatch builds stock[/+]dezren39 commentedon Nov 1, 2026
Final fix shape (commit d201b4e on chore/nixpkgs-update-2026-10-30) — supersedes the relaxDeps approach in the original body:
pythonRelaxDeps = [ "peewee" ]on aw-core was tried first: it passespythonRuntimeDepsCheck, but aw-core's own test suite then fails at collection —aw_datastore/storages/peewee.pydoesfrom playhouse.sqlite_ext import SqliteExtDatabase, a name peewee 4 removed. The incompatibility is real at runtime, so relaxing the metadata would have shipped a broken aw-server. Instead thenixpkgs-25-fixedextension pins peewee 3.17.9 (last 3.x, satisfies aw-core'speewee==3.*) in the set's python314 packageOverrides, with cython dropped from its buildInputs (3.17.9's .pyx sources no longer compile under the tree's Cython 3.3; peewee builds from its pre-generated C sources without it). Evidence: with the pin, aw-core builds AND its full pytest suite passes against peewee 3.17.9.makeWrapperArgsuse the single-string form"--suffix PATH : ...", which the tree's C makeWrapper rejects (makeCWrapper: Unknown argument). The extension restates them in split form on the top-levelaw-qtattribute (aw-qt is built by the office/activitywatch expression from the set's python3Packages, so the override must sit on the top-level attribute, not inside python3Packages — verified by derivation hash).Verified end-to-end: the extended
activitywatchderivation realises cleanly, and the amd config's systemPackages reference exactly that derivation.Removal condition (updated): delete the
nixpkgs-25-fixedbinding and point the activitywatch segment back at the raw legacyPackages once stock activitywatch builds on the consuming pin — i.e. upstream bumps aw-core for peewee 4 (or pins peewee 3 for the aw-* packages) AND stock aw-qt wraps successfully. Removal test unchanged.fix(nixpkgs): apply the activitywatch overrides to the stable set for…
dezren39 commentedon Nov 1, 2026
Second site (commit bcea7dc): activitywatch has TWO consumers on two different raw sets. Besides the systemPackages segment (nixpkgs-25, fixed in d201b4e),
home/common/default.nixruns a home-managerservices.activitywatchwhose package comes frominputs.nixpkgs-stable.legacyPackages— the stable pin (086873f3) carries the identical breakage, and the toplevel kept failing on the stock aw-core through that path.The home module now carries a mirrored
nixpkgs-stable-fixedbinding with the same overrides, and the service takes its package from it. Removal: delete BOTH bindings (this one andnixpkgs-25-fixed) and restore both raw references once stock activitywatch builds on both pins. Verified by derivation hash: the amd toplevel graph now contains zero stock aw-core/aw-qt/activitywatch derivations.dezren39 commentedon Nov 2, 2026
Intake review
pythonRuntimeDepsCheckfailure quoted in the body).— Fleet monitor intake, 2026-11-01 20:12 CST run.
18 remaining items
dezren39 commentedon Nov 4, 2026
agent-note:v1
{"kind":"handoff","task":8737,"lane":"code-v","execution_lane":"opencode","state":"parked","note":"task 8737 (triage) handed off to opencode claimant by lane code-v. Fresh revalidation: issue #4005 OPEN, no hard-stop labels (status/waiting-dependency present — the fix waits on nixpkgs activitywatch building stock). Warning: task 8737 attempts at 11/12, one below cap — if the claimant misses, the monitor needs to raise the cap."}
dezren39 commentedon Nov 4, 2026
agent-note:v1
event: picked-up
task: 8737
worker: repo-worker-code
lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
at: 2026-11-04T14:44:00Z
note: Claimed for fresh triage. Revalidating issue #4005, consuming pin, and open PR #4519; no code changes planned unless fresh evidence changes the route.
dezren39 commentedon Nov 4, 2026
agent-note:v1
event: triaged
task: 8737
worker: repo-worker-code
lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
at: 2026-11-04T14:52:00Z
Fresh verification: issue #4005 remains OPEN. origin/main is a8aeb99; its nixpkgs-25 pin is 1d060086d60cb76a40cf37109f979d88a5bd6396. The main-tree ActivityWatch references have no peewee, aw-core, or aw-qt-specific override; the current nixpkgs-25-fixed set is for regex-pcre. PR #4519 remains OPEN and is authored/assigned to Drew; it carries the proposed ActivityWatch peewee/wrapper changes, so I did not alter or merge it.
Route: keep #4005 open with status/waiting-dependency until #4519 lands and the stock ActivityWatch build/runtime condition is verified on the consumed pin. #4005 itself remains the existing follow-up issue; no duplicate task was enqueued.
dezren39 commentedon Nov 4, 2026
agent-note:v1
event: done
task: 8737
worker: repo-worker-code
lane: aea12c82-c5af-4e5a-9b66-f8e360f87177
at: 2026-11-04T14:53:30Z
result: triaged; #4005 remains OPEN with status/waiting-dependency. No change to Drew-owned PR #4519. Queue task completed; the issue remains the existing follow-up.