diff --git a/dotfiles/agents/skills/taffybar-nixos-flake-chain/SKILL.md b/dotfiles/agents/skills/taffybar-nixos-flake-chain/SKILL.md index 6c16dc02..95f31ce7 100644 --- a/dotfiles/agents/skills/taffybar-nixos-flake-chain/SKILL.md +++ b/dotfiles/agents/skills/taffybar-nixos-flake-chain/SKILL.md @@ -9,25 +9,28 @@ How the taffybar ecosystem packages are consumed by the NixOS configuration thro See also: `taffybar-ecosystem-release` for the package dependency graph, release workflow, and Hackage publishing. -## The Three-Layer Flake Chain +## The Flake Chain -The NixOS system build pulls in taffybar through three nested flake.nix files: +The NixOS system build pulls in taffybar through the personal +`imalison-taffybar` config flake. The top-level NixOS flake should not declare +or override a direct `taffybar` input; the config flake owns its taffybar +version. ``` -nixos/flake.nix (top — `just switch` reads this) -│ ├── taffybar path:.../taffybar/taffybar -│ ├── imalison-taffybar path:../dotfiles/config/taffybar -│ └── gtk-sni-tray, gtk-strut, etc. (GitHub inputs) +nixos/flake.nix (top - `just switch` reads this) +│ └── imalison-taffybar path:../dotfiles/config/taffybar │ -dotfiles/config/taffybar/flake.nix (middle — imalison-taffybar config) +dotfiles/config/taffybar/flake.nix (middle - imalison-taffybar config) │ ├── taffybar path:.../taffybar/taffybar │ └── gtk-sni-tray, gtk-strut, etc. (GitHub inputs) │ -dotfiles/config/taffybar/taffybar/flake.nix (bottom — taffybar library) +dotfiles/config/taffybar/taffybar/flake.nix (bottom - taffybar library) │ └── gtk-sni-tray, gtk-strut, etc. (flake = false GitHub inputs) ``` -All three flakes declare their own top-level inputs for the ecosystem packages and use `follows` to keep versions consistent within each layer. +The NixOS layer may make `imalison-taffybar` follow shared inputs such as +`nixpkgs`, `flake-utils`, and `xmonad`, but it should not set +`imalison-taffybar.inputs.taffybar.follows`. ## Why Bottom-Up Updates Matter @@ -43,14 +46,14 @@ cd ~/.config/taffybar/taffybar && nix flake update cd ~/.config/taffybar && nix flake update taffybar # Top: -cd ~/dotfiles/nixos && nix flake update imalison-taffybar taffybar +cd ~/dotfiles/nixos && nix flake update imalison-taffybar ``` Not every change requires touching all three layers. Think about which flake.lock files actually contain stale references: -- Changed **taffybar itself** — it's the bottom layer, so start at the middle (`nix flake update taffybar`) then the top. +- Changed **taffybar itself** — it's owned by the config flake, so start at the middle (`nix flake update taffybar`) then update `imalison-taffybar` at the top. - Changed a **leaf ecosystem package** (e.g. gtk-strut) — start at the bottom since taffybar's flake.lock references it, then cascade up. -- The nixos flake also has **direct GitHub inputs** for ecosystem packages with `follows` overrides. Updating those at the top level may be sufficient if nothing changed in the middle/bottom flake.lock files themselves. +- The nixos flake can still have unrelated direct inputs such as `kanshi-sni`. Do not add a top-level `taffybar` input just to control the config flake's taffybar source. ## Rebuilding diff --git a/nixos/flake.lock b/nixos/flake.lock index f3380808..8f000170 100644 --- a/nixos/flake.lock +++ b/nixos/flake.lock @@ -264,15 +264,15 @@ "flake-compat_2": { "flake": false, "locked": { - "lastModified": 1767039857, - "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "NixOS", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", "repo": "flake-compat", - "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { - "owner": "NixOS", + "owner": "edolstra", "repo": "flake-compat", "type": "github" } @@ -282,13 +282,13 @@ "locked": { "lastModified": 1767039857, "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { - "owner": "edolstra", + "owner": "NixOS", "repo": "flake-compat", "type": "github" } @@ -296,11 +296,11 @@ "flake-compat_4": { "flake": false, "locked": { - "lastModified": 1696426674, - "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", "type": "github" }, "original": { @@ -431,6 +431,24 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "git-blame-rank": { "inputs": { "fenix": "fenix", @@ -570,6 +588,7 @@ "gitignore_2": { "inputs": { "nixpkgs": [ + "imalison-taffybar", "taffybar", "weeder-nix", "pre-commit-hooks", @@ -635,7 +654,7 @@ "hercules-ci-effects_2": { "inputs": { "flake-parts": "flake-parts_5", - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_6" }, "locked": { "lastModified": 1701009247, @@ -1135,9 +1154,7 @@ "nixpkgs": [ "nixpkgs" ], - "taffybar": [ - "taffybar" - ], + "taffybar": "taffybar", "xmonad": [ "xmonad" ] @@ -1218,10 +1235,10 @@ }, "nix": { "inputs": { - "flake-compat": "flake-compat_2", + "flake-compat": "flake-compat_3", "flake-parts": "flake-parts", "git-hooks-nix": "git-hooks-nix", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "nixpkgs-23-11": "nixpkgs-23-11", "nixpkgs-regression": "nixpkgs-regression" }, @@ -1278,7 +1295,7 @@ }, "nixos-wsl": { "inputs": { - "flake-compat": "flake-compat_3", + "flake-compat": "flake-compat_4", "nixpkgs": [ "nixpkgs" ] @@ -1396,6 +1413,22 @@ } }, "nixpkgs_3": { + "locked": { + "lastModified": 1776877367, + "narHash": "sha256-EHq1/OX139R1RvBzOJ0aMRT3xnWyqtHBRUBuO1gFzjI=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0726a0ecb6d4e08f6adced58726b95db924cef57", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { "locked": { "lastModified": 1771903837, "narHash": "sha256-jEA8WggGKtMFeNeCKq3NK8cLEjJmG6/RLUElYYbBZ0E=", @@ -1408,7 +1441,7 @@ "url": "https://channels.nixos.org/nixos-25.11/nixexprs.tar.xz" } }, - "nixpkgs_4": { + "nixpkgs_5": { "locked": { "lastModified": 1777954456, "narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=", @@ -1424,7 +1457,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_6": { "locked": { "lastModified": 1697723726, "narHash": "sha256-SaTWPkI8a5xSHX/rrKzUe+/uVNy6zCGMXgoeMb7T9rg=", @@ -1440,7 +1473,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_7": { "locked": { "lastModified": 1703255338, "narHash": "sha256-Z6wfYJQKmDN9xciTwU3cOiOk+NElxdZwy/FiHctCzjU=", @@ -1456,27 +1489,11 @@ "type": "github" } }, - "nixpkgs_7": { - "locked": { - "lastModified": 1730768919, - "narHash": "sha256-8AKquNnnSaJRXZxc5YmF/WfmxiHX6MMZZasRP6RRQkE=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "a04d33c0c3f1a59a2c1cb0c6e34cd24500e5a1dc", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixtheplanet": { "inputs": { "flake-parts": "flake-parts_4", "hercules-ci-effects": "hercules-ci-effects_2", - "nixpkgs": "nixpkgs_6", + "nixpkgs": "nixpkgs_7", "osx-kvm": "osx-kvm" }, "locked": { @@ -1639,9 +1656,12 @@ }, "pre-commit-hooks_2": { "inputs": { - "flake-compat": "flake-compat_4", + "flake-compat": "flake-compat_2", "gitignore": "gitignore_2", - "nixpkgs": "nixpkgs_7" + "nixpkgs": [ + "imalison-taffybar", + "nixpkgs" + ] }, "locked": { "lastModified": 1747372754, @@ -1709,16 +1729,15 @@ "nixified-ai": "nixified-ai", "nixos-hardware": "nixos-hardware", "nixos-wsl": "nixos-wsl", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "nixtheplanet": "nixtheplanet", "notifications-tray-icon": "notifications-tray-icon", "org-agenda-api": "org-agenda-api", "railbird-secrets": "railbird-secrets", - "systems": "systems_2", - "taffybar": "taffybar", + "systems": "systems_3", "vscode-server": "vscode-server", - "xmonad": "xmonad", - "xmonad-contrib": "xmonad-contrib", + "xmonad": "xmonad_2", + "xmonad-contrib": "xmonad-contrib_2", "xmonad-river": "xmonad-river" } }, @@ -1806,31 +1825,41 @@ "type": "github" } }, - "taffybar": { - "inputs": { - "flake-utils": [ - "flake-utils" - ], - "nixpkgs": [ - "nixpkgs" - ], - "weeder-nix": "weeder-nix", - "xmonad": [ - "xmonad" - ], - "xmonad-contrib": [ - "xmonad-contrib" - ] - }, + "systems_3": { "locked": { - "lastModified": 1778446660, - "narHash": "sha256-uV4Lb74wvSwoTU1u/fg4xcUZ60yK2G+b2lTL6O0bKAU=", - "path": "/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar", - "type": "path" + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" }, "original": { - "path": "/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar", - "type": "path" + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "taffybar": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_3", + "weeder-nix": "weeder-nix", + "xmonad": "xmonad", + "xmonad-contrib": "xmonad-contrib" + }, + "locked": { + "lastModified": 1778446663, + "narHash": "sha256-xHKRrar08yPsOVbPG7DlouKU83r8P0WAwoxUuje3kq0=", + "owner": "taffybar", + "repo": "taffybar", + "rev": "2c95fd5a8aa125d0ba89873a7d4dfd49bb57b00c", + "type": "github" + }, + "original": { + "owner": "taffybar", + "repo": "taffybar", + "type": "github" } }, "vscode-server": { @@ -1859,6 +1888,7 @@ "weeder-nix": { "inputs": { "nixpkgs": [ + "imalison-taffybar", "taffybar", "nixpkgs" ], @@ -1920,20 +1950,7 @@ } }, "xmonad": { - "inputs": { - "flake-utils": [ - "flake-utils" - ], - "git-ignore-nix": [ - "git-ignore-nix" - ], - "nixpkgs": [ - "nixpkgs" - ], - "unstable": [ - "nixpkgs" - ] - }, + "flake": false, "locked": { "lastModified": 1776502138, "narHash": "sha256-mSOpNU1iJvfFh5uwayA6aPxneFMduNW1kG1gV2tGE+c=", @@ -1944,11 +1961,29 @@ }, "original": { "owner": "xmonad", + "ref": "master", "repo": "xmonad", "type": "github" } }, "xmonad-contrib": { + "flake": false, + "locked": { + "lastModified": 1769258911, + "narHash": "sha256-YGEKXs4UmS5QOIELJTdCiMzTktuue+Bd3yFoIKSHuBU=", + "owner": "xmonad", + "repo": "xmonad-contrib", + "rev": "803bc3d12bdcc512ec06856c4f119d37de1ba338", + "type": "github" + }, + "original": { + "owner": "xmonad", + "ref": "master", + "repo": "xmonad-contrib", + "type": "github" + } + }, + "xmonad-contrib_2": { "inputs": { "flake-utils": [ "flake-utils" @@ -2007,6 +2042,35 @@ "repo": "xmonad", "type": "github" } + }, + "xmonad_2": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "git-ignore-nix": [ + "git-ignore-nix" + ], + "nixpkgs": [ + "nixpkgs" + ], + "unstable": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1776502138, + "narHash": "sha256-mSOpNU1iJvfFh5uwayA6aPxneFMduNW1kG1gV2tGE+c=", + "owner": "xmonad", + "repo": "xmonad", + "rev": "a618fb32662e44eb5d8276a3dc1925b0233e638b", + "type": "github" + }, + "original": { + "owner": "xmonad", + "repo": "xmonad", + "type": "github" + } } }, "root": "root", diff --git a/nixos/flake.nix b/nixos/flake.nix index 06f8b038..cbbf38b4 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -172,21 +172,10 @@ inputs = { nixpkgs.follows = "nixpkgs"; flake-utils.follows = "flake-utils"; - taffybar.follows = "taffybar"; xmonad.follows = "xmonad"; }; }; - taffybar = { - url = "path:/home/imalison/dotfiles/dotfiles/config/taffybar/taffybar"; - inputs = { - nixpkgs.follows = "nixpkgs"; - flake-utils.follows = "flake-utils"; - xmonad.follows = "xmonad"; - xmonad-contrib.follows = "xmonad-contrib"; - }; - }; - notifications-tray-icon = { url = "github:colonelpanic8/notifications-tray-icon"; inputs = {