{"id":"nixos-configs-0gl","title":"Evaluate nixos-configs repo structure","description":"# Research Goal\nEvaluate the structure of nixos-configs to identify areas for improvement. The deliverable is a set of child beads—each containing prompts for deeper exploration and actionable improvement plans.\n\n## Research Methodology\nUse `/humanlayer:research_codebase_nt` pattern with parallel subagents:\n- **codebase-locator**: Find files and components\n- **codebase-analyzer**: Understand how code works\n- **codebase-pattern-finder**: Find similar implementations and patterns\n\n## Focus Areas (research all 7)\n\n| Area | Questions to Answer |\n|------|---------------------|\n| **Flake Structure** | Is flake.nix well-organized? Are inputs minimal? Module composition clear? |\n| **System Roles** | Roles properly scoped? Duplication? Consistent option patterns? |\n| **Home-Manager Roles** | Clean separation from system roles? Reusable across platforms? |\n| **Machine Configs** | Are machines DRY? Shared patterns extracted? Hardware abstractions clean? |\n| **Custom Packages** | Packages well-structured? Overlay usage optimal? |\n| **Cross-Platform** | Darwin/WSL/Steam Deck patterns consistent? Code reuse? |\n| **Scripts \u0026 Utilities** | Flake apps organized? Automation opportunities? |\n\n## Deliverables\n1. **Summary of current state** for each focus area\n2. **Child beads** for each area with improvement potential, containing:\n   - Prompt: \"Use `/humanlayer:research_codebase_nt` to analyze [specific aspect]\"\n   - Prompt: \"Use `/humanlayer:create_plan_nt` to plan [specific improvement]\"\n3. **Recommended priority order** for addressing improvements\n\n## Key Files to Analyze\n- `flake.nix` (9.4KB) - Primary target\n- `roles/default.nix` - System role patterns\n- `home/roles/default.nix` - Home-manager role patterns\n- `machines/*/configuration.nix` - Per-machine patterns\n- `packages/default.nix` - Custom package overlay","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-09T12:47:08.135451956-08:00","created_by":"johno","updated_at":"2026-01-10T10:37:36.380750585-08:00","closed_at":"2026-01-10T10:37:36.380750585-08:00","close_reason":"Completed via detailed sub-evaluations: Flake Structure, System Roles, Home-Manager Roles, Machine Configs, Custom Packages, Cross-Platform Patterns, Scripts \u0026 Utilities. Follow-up beads created for identified improvements.","dependencies":[{"issue_id":"nixos-configs-0gl","depends_on_id":"nixos-configs-ny8","type":"blocks","created_at":"2026-01-10T10:08:49.354981408-08:00","created_by":"johno"},{"issue_id":"nixos-configs-0gl","depends_on_id":"nixos-configs-auw","type":"blocks","created_at":"2026-01-10T10:08:49.377984171-08:00","created_by":"johno"},{"issue_id":"nixos-configs-0gl","depends_on_id":"nixos-configs-dew","type":"blocks","created_at":"2026-01-10T10:08:49.401019609-08:00","created_by":"johno"},{"issue_id":"nixos-configs-0gl","depends_on_id":"nixos-configs-pbk","type":"blocks","created_at":"2026-01-10T10:08:49.424263017-08:00","created_by":"johno"},{"issue_id":"nixos-configs-0gl","depends_on_id":"nixos-configs-und","type":"blocks","created_at":"2026-01-10T10:08:49.447363253-08:00","created_by":"johno"},{"issue_id":"nixos-configs-0gl","depends_on_id":"nixos-configs-rrb","type":"blocks","created_at":"2026-01-10T10:08:49.469936923-08:00","created_by":"johno"},{"issue_id":"nixos-configs-0gl","depends_on_id":"nixos-configs-geh","type":"blocks","created_at":"2026-01-10T10:08:49.492543435-08:00","created_by":"johno"}]}
{"id":"nixos-configs-0ov","title":"Extract shared NixOS/Darwin base config","description":"From Flake Structure evaluation: roles/default.nix and roles/darwin.nix share ~50% duplicated code (timezone, base packages, nix settings, gc config). Create roles/common.nix to reduce duplication.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:31:22.36256057-08:00","created_by":"johno","updated_at":"2026-01-10T12:47:49.972983545-08:00","closed_at":"2026-01-10T12:47:49.972983545-08:00"}
{"id":"nixos-configs-0q7","title":"Promote john-endesktop to k3s leader node","description":"Migrate the k3s control plane from nucdeb1 to john-endesktop. This involves promoting john-endesktop from worker to leader and demoting/removing nucdeb1 from leader role.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T19:13:02.701421475-08:00","created_by":"johno","updated_at":"2026-01-10T19:13:02.701421475-08:00","dependencies":[{"issue_id":"nixos-configs-0q7","depends_on_id":"nixos-configs-71w","type":"blocks","created_at":"2026-01-10T19:13:11.769813321-08:00","created_by":"johno"}],"comments":[{"id":1,"issue_id":"nixos-configs-0q7","author":"johno","text":"## k3s-upgrade Label Requirement\n\nNixOS nodes must be labeled with `k3s-upgrade=disabled` to exclude them from the system-upgrade-controller:\n\n```bash\nkubectl label node \u003cnode-name\u003e k3s-upgrade=disabled\n```\n\nThe system-upgrade-controller tries to upgrade k3s by replacing the binary in-place, which fails on NixOS because /nix/store is immutable. On NixOS, k3s upgrades happen through updating nixpkgs and rebuilding.\n\nThe agent-plan has been patched to exclude nodes with this label.","created_at":"2026-01-11T04:10:09Z"}]}
{"id":"nixos-configs-0vf","title":"Fix conflicting audio role config","description":"From System Roles evaluation: The audio role has conflicting services.pulseaudio config present while pipewire is enabled. PipeWire replaces PulseAudio, so the pulseaudio config should be removed.","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/10","status":"in_review","priority":2,"issue_type":"bug","created_at":"2026-01-10T10:31:25.821735114-08:00","created_by":"johno","updated_at":"2026-01-10T12:50:55.226084308-08:00"}
{"id":"nixos-configs-1wd","title":"When building the USB image, find a way to pre-run doom sync","description":"After booting into a live usb, if I want to run emacs I must first run `doom sync` - which also requires internet access. This is time consuming and annoying.","acceptance_criteria":"Upon booting into a live usb image, `emacs -nw` opens emacs to the doom splash screen","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T09:10:21.469199401-08:00","created_by":"johno","updated_at":"2026-01-10T10:30:24.839041681-08:00","closed_at":"2026-01-10T10:30:24.839041681-08:00","close_reason":"Implemented pre-built Doom Emacs for live USB using nix-doom-emacs-unstraightened. Added new 'prebuiltDoom' option to the emacs role that builds all Doom packages at nix build time, eliminating the need for doom sync after boot."}
{"id":"nixos-configs-265","title":"Mu4e emails sending without body content","notes":"Gitea issue #2: https://git.johnogle.info/johno/nixos-configs/issues/2\n\nPR: https://git.johnogle.info/johno/nixos-configs/pulls/4","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-10T12:27:40.01586007-08:00","created_by":"johno","updated_at":"2026-01-10T12:53:10.467933615-08:00","closed_at":"2026-01-10T12:53:10.467933615-08:00","close_reason":"Duplicate of nixos-configs-9l8"}
{"id":"nixos-configs-2hq","title":"Create beads:iterate skill","description":"Beads-aware iteration skill that:\n- Takes bead ID as input\n- Updates thoughts/beads-{id}/plan.md based on feedback\n- Preserves existing plan structure while making targeted changes\n- Based on humanlayer:iterate_plan","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-12T17:53:35.325012-08:00","created_by":"johno","updated_at":"2026-01-12T17:56:45.777325-08:00","closed_at":"2026-01-12T17:56:45.777325-08:00","close_reason":"Created beads_iterate.md skill","dependencies":[{"issue_id":"nixos-configs-2hq","depends_on_id":"nixos-configs-ouf","type":"parent-child","created_at":"2026-01-12T17:53:44.461613-08:00","created_by":"johno"}],"comments":[{"id":2,"issue_id":"nixos-configs-2hq","author":"johno","text":"PR created: https://git.johnogle.info/johno/nixos-configs/pulls/17","created_at":"2026-01-10T21:08:52Z"}]}
{"id":"nixos-configs-2mk","title":"Remove wixos (WSL) configuration","description":"WSL is no longer used. Remove the wixos machine configuration entirely from the flake and any associated home-manager config.","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/20","status":"in_review","priority":3,"issue_type":"task","created_at":"2026-01-10T10:31:28.363467309-08:00","created_by":"johno","updated_at":"2026-01-10T14:19:53.685761099-08:00","comments":[{"id":3,"issue_id":"nixos-configs-2mk","author":"johno","text":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/20","created_at":"2026-01-10T21:11:29Z"}]}
{"id":"nixos-configs-39m","title":"parallel_beads PR description should include validation steps completed","notes":"Implementation complete. All 5 phases done: validation extraction, execution, PR templates, result reporting, summary table.","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-10T21:06:56.358336921-08:00","created_by":"johno","updated_at":"2026-01-12T18:29:47.321408-08:00","closed_at":"2026-01-12T18:29:47.321408-08:00","close_reason":"Implementation complete. All 5 phases implemented and committed (ba49229)."}
{"id":"nixos-configs-45m","title":"Migrate nucdeb2 from Proxmox+Debian to NixOS","description":"Replace the Proxmox+Debian installation on nucdeb2 with NixOS. Document the migration process thoroughly to serve as a guide for migrating nucdeb1 and nucdeb3.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T19:13:03.623201609-08:00","created_by":"johno","updated_at":"2026-01-10T19:13:03.623201609-08:00","dependencies":[{"issue_id":"nixos-configs-45m","depends_on_id":"nixos-configs-0q7","type":"blocks","created_at":"2026-01-10T19:13:12.894453357-08:00","created_by":"johno"}],"comments":[{"id":4,"issue_id":"nixos-configs-45m","author":"johno","text":"## k3s-upgrade Label Requirement\n\nWhen nucdeb2 is migrated to NixOS and running k3s, it must be labeled with `k3s-upgrade=disabled`:\n\n```bash\nkubectl label node nucdeb2 k3s-upgrade=disabled\n```\n\nThis excludes it from the system-upgrade-controller, which tries to upgrade k3s by replacing the binary in-place. This fails on NixOS because /nix/store is immutable. On NixOS, k3s upgrades happen through updating nixpkgs and rebuilding.","created_at":"2026-01-11T04:10:24Z"}]}
{"id":"nixos-configs-45r","title":"Update parallel_beads to require plans","description":"parallel_beads should check for plan artifacts before including beads in batch implementation.\n\nCurrent behavior: Includes all ready beads regardless of preparation state\nDesired behavior: \n- Check for thoughts/beads-{id}/plan.md\n- Skip beads without plans (or type=bug which can implement directly)\n- Warn user which beads were skipped and why\n\nThis prevents premature batch implementation of complex features that haven't been planned.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T18:33:11.006426-08:00","created_by":"johno","updated_at":"2026-01-12T18:39:09.894633-08:00","closed_at":"2026-01-12T18:39:09.894633-08:00","close_reason":"Implemented in this session"}
{"id":"nixos-configs-4yz","title":"Migrate k3s cluster nodes to NixOS","status":"in_progress","priority":2,"issue_type":"epic","created_at":"2026-01-10T19:12:50.908956625-08:00","created_by":"johno","updated_at":"2026-01-10T19:13:41.525993086-08:00","dependencies":[{"issue_id":"nixos-configs-4yz","depends_on_id":"nixos-configs-uje","type":"blocks","created_at":"2026-01-10T19:13:59.246251945-08:00","created_by":"johno"}]}
{"id":"nixos-configs-505","title":"Document discovered-work pattern in workflow guide","description":"Add section to beads_workflow.md explaining the discovered-work pattern:\n\n1. File one bead for initial idea\n2. Research may reveal work should split\n3. Create new beads for each discovered subtask\n4. Link with 'discovered-from' dependency type\n5. Close original bead as 'split into subtasks'\n\nInclude concrete example showing the flow.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-12T18:33:12.757818-08:00","created_by":"johno","updated_at":"2026-01-12T18:39:20.523878-08:00","closed_at":"2026-01-12T18:39:20.523878-08:00","close_reason":"Documented in beads_workflow.md Design Decisions section - 'One Bead Per Feature' and 'discovered-work pattern'","dependencies":[{"issue_id":"nixos-configs-505","depends_on_id":"nixos-configs-45r","type":"blocks","created_at":"2026-01-12T18:33:18.801265-08:00","created_by":"johno"},{"issue_id":"nixos-configs-505","depends_on_id":"nixos-configs-8gr","type":"blocks","created_at":"2026-01-12T18:33:18.845276-08:00","created_by":"johno"}]}
{"id":"nixos-configs-71w","title":"Create k3s-node role and apply to john-endesktop as worker","description":"Create a reusable k3s-node NixOS role/module. Apply it to john-endesktop configured as a worker node joining the existing cluster.","notes":"## Research Notes (2026-01-10)\n\n### Current State\n- No k3s service configuration exists in codebase\n- john-endesktop is currently NFS server providing storage to external k3s cluster\n- kubectl home role exists at `home/roles/kubectl/`\n- origin/k3s branch has prior work using SOPS (not wanted)\n\n### Implementation Requirements\n1. Create `roles/k3s-node/default.nix` with options:\n   - `enable` - Enable k3s\n   - `role` - \"server\" or \"agent\" (default: agent)\n   - `serverAddr` - URL to join (default for agent: https://10.0.0.222:6443)\n   - `tokenFile` - Path to token (default: /etc/k3s/token)\n   - `extraFlags` - Additional k3s flags\n   - `gracefulNodeShutdown` - Enable graceful shutdown\n\n2. Add firewall rules:\n   - TCP: 6443 (API), 2379-2380 (etcd HA)\n   - UDP: 8472 (flannel VXLAN)\n\n3. Import in `roles/default.nix`\n\n4. Enable on john-endesktop as agent\n\n### Token Storage\nUse Bitwarden + bootstrap script (consistent with kubectl role):\n```bash\nsudo mkdir -p /etc/k3s\nrbw get k3s-cluster-token | sudo tee /etc/k3s/token \u003e /dev/null\nsudo chmod 600 /etc/k3s/token\n```\n\n### Key Files\n- `roles/bluetooth/default.nix` - Simple role pattern\n- `roles/nvidia/default.nix` - Complex role pattern\n- `machines/john-endesktop/configuration.nix` - Host to update\n\n### Research Doc\n`thoughts/shared/research/2026-01-10-k3s-node-role-requirements.md`","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T19:13:01.944871413-08:00","created_by":"johno","updated_at":"2026-01-10T20:09:38.740416079-08:00","closed_at":"2026-01-10T20:09:38.740416079-08:00","close_reason":"Implemented k3s-node role and enabled on john-endesktop as agent. Node joined cluster successfully."}
{"id":"nixos-configs-7hd","title":"Add Claude skill for parallel bead processing workflow","description":"## Summary\nAdd a Claude skill to the home development role that orchestrates parallel bead processing using subagents.\n\n## Workflow\n\n### Phase 1: Selection\n1. Run `bd ready` to get list of all ready beads\n2. Prompt user to select which beads they want to work on (multi-select)\n\n### Phase 2: Parallel Implementation (subagents)\nFor each selected bead, spin up a subagent responsible for:\n1. Creating a branch/worktree for the bead (e.g., `git worktree add`)\n2. Working on the bead until its acceptance criteria are met\n3. Committing and pushing the changes to the branch\n4. Opening a PR to merge those changes\n   - PR description must reference the bead ID\n   - If the bead references an external issue number (e.g., GitHub issue), include that in the PR description as well\n\n### Phase 3: Parallel Review (subagents)\nSpin up another set of subagents to:\n1. Read each PR and its changes\n2. Leave review comments on the PR\n\n### Phase 4: Cleanup \u0026 Summary\n1. Clean up the worktrees\n2. Provide links and summaries to each PR\n3. Include failure status if any subagent was unable to make progress\n\n## Acceptance Criteria\n- [ ] Skill is added to home development role configuration\n- [ ] Skill prompts user with multi-select for bead selection\n- [ ] Subagents create isolated worktrees for each bead\n- [ ] Subagents work until acceptance criteria met or report blockers\n- [ ] Changes are committed and pushed\n- [ ] PRs are opened automatically\n- [ ] PR descriptions reference the bead ID\n- [ ] PR descriptions include linked external issue numbers from the bead\n- [ ] Review subagents provide meaningful feedback\n- [ ] Worktrees are cleaned up after completion\n- [ ] Final summary includes PR links, status, and any failures\n\n## Location\n`home/roles/development/` or appropriate skill location for Claude skills\n\n## Notes\n- Consider error handling for subagent failures\n- Consider parallelism limits to avoid overwhelming resources\n- Should integrate with existing beads workflow (`bd` commands)","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-10T10:47:06.688785671-08:00","created_by":"johno","updated_at":"2026-01-10T12:47:29.543885634-08:00","closed_at":"2026-01-10T12:47:29.543885634-08:00"}
{"id":"nixos-configs-85h","title":"Iterate parallel beads skill","notes":"Gitea issue #12: https://git.johnogle.info/johno/nixos-configs/issues/12\n\nAfter opening a PR, instead of closing the bead we should mark it with 'in review' status. The PR should be included in the bead notes.\n\nAlso want an additional skill to reconcile beads with PRs - if a PR is merged then the bead should be closed.\n\nPR: https://git.johnogle.info/johno/nixos-configs/pulls/14","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-10T12:27:39.251088165-08:00","created_by":"johno","updated_at":"2026-01-10T12:43:47.825032797-08:00","closed_at":"2026-01-10T12:43:47.825032797-08:00","close_reason":"PR merged: https://git.johnogle.info/johno/nixos-configs/pulls/14"}
{"id":"nixos-configs-8gr","title":"Add plan-awareness to beads:implement","description":"beads:implement should behave differently based on plan presence and bead type.\n\nDesired behavior:\n- type=bug, no plan: Proceed (simple bugs don't need plans)\n- type=feature/task, no plan: Warn and ask whether to proceed or create plan first\n- type=feature/task, has plan: Proceed normally\n\nThis guides users toward the right workflow without being rigid.","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T18:33:11.8486-08:00","created_by":"johno","updated_at":"2026-01-12T18:39:09.8961-08:00","closed_at":"2026-01-12T18:39:09.8961-08:00","close_reason":"Implemented in this session"}
{"id":"nixos-configs-9l8","title":"Mu4e emails aren't sending body content","description":"I tried to send an email to Anthony from The Springs and the to, cc, subject all worked as expected. But the body I wrote was totally missing.\n\nSource: Gitea issue #2","notes":"Source: Gitea issue #2\n\nPR: https://git.johnogle.info/johno/nixos-configs/pulls/4","status":"in_review","priority":2,"issue_type":"bug","created_at":"2026-01-10T10:07:08.107097147-08:00","created_by":"johno","updated_at":"2026-01-10T12:53:09.834584193-08:00"}
{"id":"nixos-configs-alh","title":"Create beads:plan skill","description":"Beads-aware planning skill that:\n- Takes bead ID as input\n- Outputs to thoughts/beads-{id}/plan.md\n- Updates bead description with plan link\n- Creates dependent implementation bead if needed\n- Based on humanlayer:create_plan","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-12T17:53:33.68428-08:00","created_by":"johno","updated_at":"2026-01-12T17:55:32.237985-08:00","closed_at":"2026-01-12T17:55:32.237985-08:00","close_reason":"Created beads_plan.md skill","dependencies":[{"issue_id":"nixos-configs-alh","depends_on_id":"nixos-configs-ouf","type":"parent-child","created_at":"2026-01-12T17:53:44.347901-08:00","created_by":"johno"}]}
{"id":"nixos-configs-alr","title":"Remove duplicate home-manager imports in wixos/zix790prors","description":"From Flake Structure evaluation: wixos and zix790prors configurations include inputs.home-manager.nixosModules.home-manager redundantly (already in nixosModules).","status":"closed","priority":3,"issue_type":"bug","created_at":"2026-01-10T10:31:23.349942257-08:00","created_by":"johno","updated_at":"2026-01-10T12:48:27.531448924-08:00","closed_at":"2026-01-10T12:48:27.531448924-08:00"}
{"id":"nixos-configs-auw","title":"Evaluate System Roles","description":"# Investigation: System Roles\n\n## Questions to Answer\n- Are roles properly scoped?\n- Is there duplication between roles?\n- Are option patterns consistent?\n\n## Key Files\n- `roles/default.nix` - System role patterns\n- `roles/*/default.nix` - Individual role definitions\n\n## Approach\n1. Use `/humanlayer:research_codebase_nt` to analyze role structure\n2. Identify duplication or inconsistencies\n3. Use `/humanlayer:create_plan_nt` to plan consolidation if needed","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:08:22.922593746-08:00","created_by":"johno","updated_at":"2026-01-10T10:12:32.208373693-08:00","closed_at":"2026-01-10T10:12:32.208373693-08:00","close_reason":"# System Roles Evaluation - Complete\n\n## Overview\n\nThe NixOS configuration uses a role-based architecture at `/home/johno/nixos-configs/roles/` with 12 distinct roles for NixOS systems plus a separate Darwin configuration.\n\n## Role Structure Summary\n\n### Top-Level Roles\n| Role | Pattern | Options | Description |\n|------|---------|---------|-------------|\n| audio | mkEnableOption | enable | PipeWire/PulseAudio with audio tools |\n| bluetooth | mkEnableOption | enable | Bluetooth with Blueman |\n| btrfs | Comprehensive | enable, filesystems (nested) | BTRFS management with scrub/dedup/balance |\n| desktop | Composite | enable + suboptions | Desktop environment with X11/Wayland/KDE |\n| kodi | Comprehensive | enable, autologin, wayland, jellyfinScaleFactor, appLauncherServer | Media center setup |\n| nfs-mounts | mkEnableOption | enable, requireMount (TODO) | NFS client mounts |\n| nvidia | mkEnableOption | enable | NVIDIA driver utilities |\n| printing | mkEnableOption | enable | CUPS with Avahi/network printing |\n| remote-build | Multi-config | enableBuilder, builders[], fallbackToLocalBuild | Distributed build client/server |\n| spotifyd | mkEnableOption | enable | Spotify Connect daemon |\n| users | Mixed | enable, extraGroups, kids | User account management |\n| virtualisation | mkEnableOption | enable | Docker + libvirt |\n\n### Desktop Sub-Roles\n- x11.nix - i3 window manager with DDC/CI monitor control\n- wayland.nix - Sway compositor with Wayland tools\n- kde.nix - Plasma 6 desktop\n- sddm.nix - SDDM display manager\n- gaming.nix - Steam, Lutris, emulators\n- programs.nix - Common desktop programs (always enabled when desktop.enable=true)\n- steamos.nix - Jovian/SteamOS for Steam Deck\n\n## Findings\n\n### Strengths\n\n1. **Consistent Option Pattern**: Most roles follow `roles.\u003cname\u003e.enable` with `mkIf cfg.enable` guards\n2. **Proper Scoping**: Each role is self-contained in its own directory/file\n3. **Composability**: Roles can be combined without conflicts (e.g., spotifyd enables audio role)\n4. **Sophisticated Features**: btrfs and remote-build roles have well-designed nested option structures\n\n### Issues and Inconsistencies\n\n1. **Option Pattern Variance**:\n   - Most use `mkEnableOption` (audio, bluetooth, etc.)\n   - remote-build uses `mkOption` for `enableBuilder` (different naming)\n   - desktop suboptions use `mkOption type=bool` instead of mkEnableOption\n   - kodi options lack proper type definitions for some options\n\n2. **Duplication Between roles/default.nix and roles/darwin.nix**:\n   - Both define identical `environment.systemPackages` (git, glances, pciutils, tree, usbutils, vim)\n   - Both have identical nix settings (experimental-features, max-jobs, trusted-users, etc.)\n   - Both have identical gc settings\n   - Both have `nixpkgs.config.allowUnfree = true`\n   - darwin.nix duplicates timezone and commented buildMachines config\n\n3. **Hardcoded Values**:\n   - printing role has hardcoded printer URI (ipp://brother.oglehome/ipp/print)\n   - nfs-mounts hardcodes NFS server IP (10.0.0.43)\n   - virtualisation role hardcodes \"johno\" for docker group\n\n4. **Incomplete Implementations**:\n   - nfs-mounts has TODO: implement requireMount\n   - audio role has conflicting services.pulseaudio config while pipewire is enabled\n   - nvidia role only adds packages, no driver configuration\n\n5. **Missing Type Definitions**:\n   - users.extraGroups and kodi.autologin/wayland lack type annotations\n\n## Role Usage Across Machines\n\n| Machine | Roles Used |\n|---------|------------|\n| zix790prors | audio, bluetooth, desktop (full), nfs-mounts, nvidia, printing, remote-build (builder), users, virtualisation |\n| nix-book | audio, bluetooth, desktop (wayland+kde), nfs-mounts, printing, remote-build (client), spotifyd, users, virtualisation |\n| nix-deck | audio, bluetooth, desktop (wayland+kde+steamos), remote-build (client), users |\n| boxy | audio, bluetooth, desktop (wayland+kde), kodi, nfs-mounts, users |\n| wixos (WSL) | audio, desktop (wayland), users |\n| live-usb | audio, bluetooth, desktop (kde+x11+wayland) |\n| john-endesktop | users only (ZFS server, minimal) |\n\n## Recommendations\n\n1. **Extract common config**: Create a base role for shared NixOS/Darwin settings (packages, nix config, locale, timezone)\n\n2. **Standardize option patterns**:\n   - Use mkEnableOption consistently for boolean enables\n   - Add proper type annotations to all options\n\n3. **Parameterize hardcoded values**:\n   - Make printer URI configurable in printing role\n   - Make NFS server configurable in nfs-mounts role\n   - Make user for docker group configurable\n\n4. **Fix audio role**: Remove conflicting pulseaudio config (pipewire replaces it)\n\n5. **Complete nvidia role**: Should configure hardware.nvidia or reference machine-specific config\n\n6. **Consider steamos.nix location**: Currently requires manual import, could be auto-imported in desktop/default.nix"}
{"id":"nixos-configs-bli","title":"Move bootstrap/build-liveusb scripts to flake apps","description":"From Scripts \u0026 Utilities evaluation: bootstrap.sh and build-liveusb.sh are standalone scripts at the repo root. Consider moving them to flake apps for consistency with update-doomemacs, update-claude-code, etc.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-01-10T10:31:30.737925302-08:00","created_by":"johno","updated_at":"2026-01-10T14:18:40.100691842-08:00","closed_at":"2026-01-10T14:18:40.100691842-08:00","close_reason":"PR merged: https://git.johnogle.info/johno/nixos-configs/pulls/23","comments":[{"id":5,"issue_id":"nixos-configs-bli","author":"johno","text":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/23","created_at":"2026-01-10T21:11:47Z"}]}
{"id":"nixos-configs-dew","title":"Evaluate Home-Manager Roles","description":"# Investigation: Home-Manager Roles\n\n## Questions to Answer\n- Is there clean separation from system roles?\n- Are roles reusable across platforms (Darwin/Linux/WSL)?\n- Are option patterns consistent?\n\n## Key Files\n- `home/roles/default.nix` - Home-manager role patterns\n- `home/roles/*/default.nix` - Individual home role definitions\n\n## Approach\n1. Use `/humanlayer:research_codebase_nt` to analyze home role structure\n2. Check for platform-specific vs shared patterns\n3. Use `/humanlayer:create_plan_nt` to plan improvements if needed","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:08:24.003251223-08:00","created_by":"johno","updated_at":"2026-01-10T10:11:49.233331206-08:00","closed_at":"2026-01-10T10:11:49.233331206-08:00","close_reason":"# Home-Manager Roles Evaluation Complete\n\n## Overview\nThe home-manager roles structure is well-organized with 21 distinct roles providing modular user configuration management across Linux and Darwin platforms.\n\n## Structure Analysis\n\n### Role Directory Layout\n- home/roles/default.nix - Shared role imports (cross-platform)\n- 21 role subdirectories covering: base, development, desktop, emacs, aerospace, i3+sway, etc.\n- Platform-specific base roles: base-darwin/, base-linux/\n\n## Key Findings\n\n### 1. Clean Separation from System Roles: GOOD\n- Clear namespace: home.roles.* vs roles.* \n- Home roles manage user packages/services, system roles manage OS-level config\n- No duplication of concerns between home and system levels\n\n### 2. Platform Reusability: EXCELLENT\n- Platform segregation via base-* roles\n- base-darwin/ imports: aerospace (macOS tiling)\n- base-linux/ imports: plasma-manager, i3+sway\n- 15 cross-platform shared roles in default.nix\n- Platform guards in aerospace role with isDarwin assertion\n- Conditional config in emacs using stdenv.isDarwin\n\n### 3. Option Patterns: CONSISTENT\nAll roles follow pattern:\n  options.home.roles.\u003cname\u003e.enable = mkEnableOption\n  config = mkIf cfg.enable { ... }\n\nNotable option extensions:\n- aerospace: leader key, autoraise, ctrlShortcuts, sketchybar\n- i3_sway: browser, extraSharedConfig, extraI3Config, extraSwayConfig\n- development: allowArbitraryClaudeCodeModelSelection\n- launchers: packages list for dynamic wrapper generation\n\n## Strengths\n1. Consistent patterns across all 21 roles\n2. Excellent platform separation via base-linux/base-darwin\n3. Flexible composition with enable flags\n4. Rich options for complex roles (aerospace: 700+ lines, i3_sway: 500+ lines)\n5. Clever solutions: kubectl Bitwarden integration, launchers role\n\n## Minor Observations\n- Gaming role is placeholder\n- openscad-unstable in both office and 3d-printing\n- kubectl duplicates shell functions for bash/zsh\n\n## Conclusion\nThe home-manager roles system demonstrates excellent separation of concerns, cross-platform support, and consistent patterns. No major changes needed - structure is well-designed and maintainable."}
{"id":"nixos-configs-e39","title":"Document beads+humanlayer workflow","description":"Create comprehensive documentation for the integrated workflow:\n- When to use beads vs TodoWrite\n- Autonomy model (research vs implementation)\n- Session protocols\n- Skill reference guide","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-12T17:53:36.055269-08:00","created_by":"johno","updated_at":"2026-01-12T17:57:47.856597-08:00","closed_at":"2026-01-12T17:57:47.856597-08:00","close_reason":"Created beads_workflow.md documentation","dependencies":[{"issue_id":"nixos-configs-e39","depends_on_id":"nixos-configs-ouf","type":"parent-child","created_at":"2026-01-12T17:53:44.517857-08:00","created_by":"johno"},{"issue_id":"nixos-configs-e39","depends_on_id":"nixos-configs-jgc","type":"blocks","created_at":"2026-01-12T17:53:45.86022-08:00","created_by":"johno"},{"issue_id":"nixos-configs-e39","depends_on_id":"nixos-configs-alh","type":"blocks","created_at":"2026-01-12T17:53:45.90226-08:00","created_by":"johno"},{"issue_id":"nixos-configs-e39","depends_on_id":"nixos-configs-p1a","type":"blocks","created_at":"2026-01-12T17:53:45.945793-08:00","created_by":"johno"},{"issue_id":"nixos-configs-e39","depends_on_id":"nixos-configs-2hq","type":"blocks","created_at":"2026-01-12T17:53:45.988287-08:00","created_by":"johno"}]}
{"id":"nixos-configs-ek5","title":"Consolidate flake overlay configurations","description":"From Cross-Platform evaluation: The overlay configuration is repeated 3x in flake.nix (nixosModules, nixosModulesUnstable, darwinModules). Could extract to a shared function to reduce duplication.","status":"closed","priority":3,"issue_type":"task","created_at":"2026-01-10T10:31:29.045574957-08:00","created_by":"johno","updated_at":"2026-01-10T14:18:39.302255604-08:00","closed_at":"2026-01-10T14:18:39.302255604-08:00","close_reason":"PR merged: https://git.johnogle.info/johno/nixos-configs/pulls/21","comments":[{"id":6,"issue_id":"nixos-configs-ek5","author":"johno","text":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/21","created_at":"2026-01-10T21:11:22Z"}]}
{"id":"nixos-configs-fkt","title":"Parameterize hardcoded values in roles","description":"From System Roles evaluation: Several roles have hardcoded values that should be configurable:\n- printing role: hardcoded printer URI (ipp://brother.oglehome/ipp/print)\n- nfs-mounts: hardcoded NFS server IP (10.0.0.43)\n- virtualisation: hardcoded 'johno' for docker group","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/19","status":"in_review","priority":3,"issue_type":"task","created_at":"2026-01-10T10:31:25.104059999-08:00","created_by":"johno","updated_at":"2026-01-10T14:19:54.669071523-08:00","comments":[{"id":7,"issue_id":"nixos-configs-fkt","author":"johno","text":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/19","created_at":"2026-01-10T21:10:25Z"}]}
{"id":"nixos-configs-geh","title":"Evaluate Scripts \u0026 Utilities","description":"# Investigation: Scripts \u0026 Utilities\n\n## Questions to Answer\n- Are flake apps organized?\n- Are there automation opportunities?\n- Are scripts discoverable and documented?\n\n## Key Files\n- Flake apps definitions\n- Shell scripts in the repo\n- Utility modules\n\n## Approach\n1. Use `/humanlayer:research_codebase_nt` to analyze scripts and utilities\n2. Identify missing automation opportunities\n3. Use `/humanlayer:create_plan_nt` to plan improvements","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:08:26.9906695-08:00","created_by":"johno","updated_at":"2026-01-10T10:11:53.187286416-08:00","closed_at":"2026-01-10T10:11:53.187286416-08:00","close_reason":"# Scripts \u0026 Utilities Evaluation\n\n## Summary\nThe NixOS config repository has a well-organized scripts and utilities system with good practices in place.\n\n## Flake Apps (4 available apps)\nAll apps defined in flake.nix, cross-platform (x86_64-linux, aarch64-linux, aarch64-darwin):\n- update-doomemacs: Updates DoomEmacs to latest commit with SHA256 refresh\n- update-claude-code: Updates claude-code package from Homebrew cask (supports --dry-run)\n- rotate-wallpaper: Cycles through wallpaper index\n- upgrade: Meta-script updating flake + doom + claude + wallpaper\n\n### Architecture Strengths\n- Uses writeShellScriptBin with explicit dependency paths via makeBinPath\n- Common dependencies (curl, jq, nix, git, sed, grep, coreutils, gawk) properly managed\n- All scripts use set -euo pipefail for safety\n\n## Standalone Scripts (2 root-level)\n- bootstrap.sh: Initial system setup from remote flake\n- build-liveusb.sh: Builds live USB ISO\n\n## Custom Packages (/packages/) - 5 packages\n1. claude-code - Multi-platform binary distribution with GCS URLs\n2. tea-rbw - Wrapper around tea integrating with rbw for auth\n3. app-launcher-server - Python HTTP server for launching allowlisted apps\n4. vulkan-hdr-layer - HDR graphics layer\n5. perles - Go-based TUI for Beads issue tracking\n\n## Recommendations\nMedium Priority:\n- Add help flags to all flake apps for consistency\n- Consider adding nix run .#help app listing all available apps\n\nLow Priority:\n- Move bootstrap.sh and build-liveusb.sh to flake apps\n- Add comments to packages/default.nix describing each package\n\n## Missing Automation Opportunities\n1. No auto-update mechanism (could add CI job or systemd timer)\n2. No pre-commit hooks for Nix syntax validation\n3. No flake.lock update notifications\n\n## Conclusion\nWell-designed scripts/utilities system using good Nix idioms. The flake apps pattern provides cross-platform consistency. Main gap is documentation/discoverability (minor for personal config). No blocking issues."}
{"id":"nixos-configs-is4","title":"Extend nvidia role to include driver configuration","description":"From System Roles evaluation: The current roles.nvidia only handles packages, not driver configuration. The hardware.nvidia block is duplicated in zix790prors and wixos. Extend the role to include driver config with options for open driver, power management, etc.","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/9","status":"in_review","priority":2,"issue_type":"task","created_at":"2026-01-10T10:31:24.157222208-08:00","created_by":"johno","updated_at":"2026-01-10T12:50:57.214398872-08:00"}
{"id":"nixos-configs-jgc","title":"Create beads:research skill","description":"Beads-aware research skill that:\n- Takes bead ID as input\n- Outputs to thoughts/beads-{id}/research.md\n- Updates bead description with artifact link\n- Can close research beads autonomously when satisfied\n- Based on humanlayer:research_codebase","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-12T17:53:32.819068-08:00","created_by":"johno","updated_at":"2026-01-12T17:54:47.575421-08:00","closed_at":"2026-01-12T17:54:47.575421-08:00","close_reason":"Created beads_research.md skill","dependencies":[{"issue_id":"nixos-configs-jgc","depends_on_id":"nixos-configs-ouf","type":"parent-child","created_at":"2026-01-12T17:53:44.281044-08:00","created_by":"johno"}]}
{"id":"nixos-configs-lni","title":"Tune kube-scheduler to weight memory over balanced allocation","description":"After making john-endesktop the primary control-plane node, configure kube-scheduler to:\n\n1. Disable NodeResourcesBalancedAllocation plugin (causes scheduler to prefer 'balanced' nodes even when overutilized)\n2. Configure NodeResourcesFit to use LeastAllocated strategy\n3. Weight memory higher than CPU in scoring (john-endesktop has 24Gi RAM vs 8Gi on other nodes)\n\nThis requires modifying /etc/rancher/k3s/config.yaml and creating a scheduler-config.yaml on the control-plane node(s).\n\nReference: https://kubernetes.io/docs/reference/scheduling/config/","status":"open","priority":3,"issue_type":"task","created_at":"2026-01-11T15:33:05.775928748-08:00","created_by":"johno","updated_at":"2026-01-11T15:33:05.775928748-08:00","dependencies":[{"issue_id":"nixos-configs-lni","depends_on_id":"nixos-configs-0q7","type":"blocks","created_at":"2026-01-11T15:33:10.986737834-08:00","created_by":"johno"}]}
{"id":"nixos-configs-ny8","title":"Evaluate Flake Structure","description":"# Investigation: Flake Structure\n\n## Questions to Answer\n- Is flake.nix well-organized?\n- Are inputs minimal and up-to-date?\n- Is module composition clear?\n\n## Key Files\n- `flake.nix` (9.4KB) - Primary target\n\n## Approach\n1. Use `/humanlayer:research_codebase_nt` to analyze flake.nix organization\n2. Identify unnecessary inputs or outdated patterns\n3. Use `/humanlayer:create_plan_nt` to plan improvements if needed","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:08:22.006574928-08:00","created_by":"johno","updated_at":"2026-01-10T10:11:04.339971068-08:00","closed_at":"2026-01-10T10:11:04.339971068-08:00","close_reason":"## Flake Structure Evaluation Summary\n\n### Overall Assessment: Well-Organized\n\nThe flake.nix is reasonably well-organized for a personal NixOS configuration managing multiple machines across different platforms (NixOS, Darwin, Steam Deck).\n\n---\n\n### Inputs Analysis (11 inputs)\n\n**Essential Inputs (correctly configured):**\n- `nixpkgs` (25.11 stable) - Primary nixpkgs\n- `nixpkgs-unstable` - For bleeding-edge packages\n- `home-manager` / `home-manager-unstable` - Properly follows respective nixpkgs\n- `nix-darwin` - For macOS support, follows nixpkgs\n- `nixos-wsl` - For WSL support\n\n**Specialized Inputs (justified):**\n- `plasma-manager` / `plasma-manager-unstable` - KDE configuration\n- `jovian` - Steam Deck support (follows nixpkgs-unstable)\n- `beads` - Task management tooling\n\n**Custom/Private Inputs:**\n- `google-cookie-retrieval` - Personal tool from git.johnogle.info\n\n**Note:** All inputs properly use `follows` for nixpkgs deduplication - this is a best practice.\n\n---\n\n### Module Composition\n\n**Good Patterns:**\n1. **Role-based architecture** - Both system (`roles/`) and home-manager (`home/roles/`) use a role pattern with `mkEnableOption`\n2. **Machine separation** - Each machine has its own `configuration.nix` under `machines/\u003cname\u003e/`\n3. **Stable/Unstable separation** - `nixosModules` vs `nixosModulesUnstable` for different base systems\n4. **Platform separation** - `darwinModules` for macOS-specific configuration\n5. **Overlay pattern** - Clean overlay providing `pkgs.unstable` and `pkgs.custom`\n\n**Machine Coverage:**\n- 7 NixOS systems: nix-book, boxy, wixos, zix790prors, live-usb, nix-deck, john-endesktop\n- 1 Darwin system: johno-macbookpro\n\n---\n\n### Observations\n\n**Strengths:**\n1. Consistent structure across all machine definitions\n2. Home-manager properly integrated with `useGlobalPkgs = true`\n3. Custom packages accessible via `pkgs.custom`\n4. Flake apps for common maintenance tasks (update-doomemacs, upgrade, etc.)\n5. Compatibility shim for bitwarden-\u003ebitwarden-desktop rename\n\n**Minor Issues:**\n1. `wixos` and `zix790prors` include `inputs.home-manager.nixosModules.home-manager` twice (already in nixosModules)\n2. Description is generic (\"A very basic flake\") - could be more descriptive\n3. Some code duplication between nixosModules and nixosModulesUnstable overlays\n\n**Not Issues:**\n- Duplicate plasma-manager inputs (stable/unstable) are intentional for different nixpkgs bases\n\n---\n\n### Recommendations (Optional)\n\n1. **Low priority:** Remove duplicate home-manager imports in wixos/zix790prors\n2. **Low priority:** Update flake description to be more meaningful\n3. **Low priority:** Could extract common overlay logic to reduce duplication\n\nNo blocking issues found. The flake is well-structured for its purpose."}
{"id":"nixos-configs-oog","title":"Consider workflow-phase statuses for beads","description":"Evaluate adding explicit statuses to track workflow phases:\n\nPotential statuses:\n- needs_research\n- needs_plan  \n- implementing\n- needs_review (already exists for parallel_beads)\n- closed\n\nBenefits:\n- `bd list --status=needs_plan` for phase filtering\n- Clearer pipeline visibility\n- Agents could self-select work by phase\n\nConcerns:\n- More state to maintain (status must match artifact presence)\n- Skills currently infer phase from artifacts, which works\n- Custom status config needed per-repo\n\nQuestions to resolve:\n1. Is artifact-presence inference good enough?\n2. Would explicit statuses help or add friction?\n3. Should this be enforced or advisory?\n\nCould prototype by updating skills to set status when creating artifacts.","status":"closed","priority":3,"issue_type":"feature","created_at":"2026-01-12T18:25:15.690571-08:00","created_by":"johno","updated_at":"2026-01-12T18:39:09.897327-08:00","closed_at":"2026-01-12T18:39:09.897327-08:00","close_reason":"Implemented in this session"}
{"id":"nixos-configs-ouf","title":"Integrate beads with humanlayer skills","description":"Create beads-aware versions of humanlayer skills (research, plan, implement, iterate) that:\n- Use thoughts/beads-{id}/ for artifact storage\n- Link artifacts from bead descriptions\n- Support autonomy model (research=auto-close, impl=checkpoint)\n- Work with both local thoughts/ and symlinked ~/thoughts patterns","status":"closed","priority":1,"issue_type":"epic","created_at":"2026-01-12T17:53:20.891818-08:00","created_by":"johno","updated_at":"2026-01-12T17:57:52.884229-08:00","closed_at":"2026-01-12T17:57:52.884229-08:00","close_reason":"All skills created and documented"}
{"id":"nixos-configs-p1a","title":"Create beads:implement skill","description":"Beads-aware implementation skill that:\n- Takes bead ID as input\n- Reads plan from thoughts/beads-{id}/plan.md\n- Per-plan checkpoint (pause after plan complete for manual validation)\n- Updates bead status as work progresses\n- Based on humanlayer:implement_plan","status":"closed","priority":1,"issue_type":"task","created_at":"2026-01-12T17:53:34.468609-08:00","created_by":"johno","updated_at":"2026-01-12T17:56:10.031072-08:00","closed_at":"2026-01-12T17:56:10.031072-08:00","close_reason":"Created beads_implement.md skill","dependencies":[{"issue_id":"nixos-configs-p1a","depends_on_id":"nixos-configs-ouf","type":"parent-child","created_at":"2026-01-12T17:53:44.406117-08:00","created_by":"johno"}]}
{"id":"nixos-configs-pbk","title":"Evaluate Machine Configs","description":"# Investigation: Machine Configs\n\n## Questions to Answer\n- Are machine configs DRY (Don't Repeat Yourself)?\n- Are shared patterns extracted to roles?\n- Are hardware abstractions clean?\n\n## Key Files\n- `machines/*/configuration.nix` - Per-machine patterns\n- `machines/*/hardware-configuration.nix` - Hardware specifics\n\n## Approach\n1. Use `/humanlayer:research_codebase_nt` to analyze machine config patterns\n2. Identify repeated config across machines\n3. Use `/humanlayer:create_plan_nt` to plan extraction of shared patterns","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:08:24.907956263-08:00","created_by":"johno","updated_at":"2026-01-10T10:11:48.293696883-08:00","closed_at":"2026-01-10T10:11:48.293696883-08:00","close_reason":"## Machine Configuration Analysis Complete\n\n### Summary\nAnalyzed 8 machine configurations across different platform types:\n- **NixOS Desktop/Laptop**: nix-book, zix790prors, boxy, nix-deck, wixos\n- **NixOS Server**: john-endesktop (ZFS/NFS)\n- **NixOS Live USB**: live-usb\n- **Darwin/macOS**: johno-macbookpro\n\n### DRY Assessment: GOOD\nThe configuration is already well-factored with an extensive roles system covering:\n- `audio`, `bluetooth`, `btrfs`, `desktop`, `kodi`, `nfs-mounts`, `nvidia`, `printing`, `remote-build`, `spotifyd`, `users`, `virtualisation`\n- Desktop sub-roles: `x11`, `wayland`, `kde`, `sddm`, `gaming`, `steamos`\n\nMachine configs are concise (40-115 lines) and focus on machine-specific settings only.\n\n### DRY Violations Identified\n\n**Minor (Low Priority)**:\n1. **Boot loader** - `boot.loader.systemd-boot.enable = true` repeated in 5 machines. Could be a role option, but these are one-liners and machine-specific.\n\n2. **NetworkManager** - `networking.networkmanager.enable = true` in 4 machines. Could be part of desktop role default.\n\n3. **NVIDIA config duplication** - `hardware.nvidia` block duplicated in `zix790prors` and `wixos` with different values. The existing `roles.nvidia` only handles packages, not driver config.\n\n4. **Graphics enable** - `hardware.graphics.enable = true` in 2 machines with manual `enable32Bit`. Could be part of gaming role.\n\n### Hardware Configuration Assessment: CLEAN\nHardware configs properly use `nixos-generate-config` patterns. Notable improvements:\n- `nix-book` and `zix790prors` use the new `roles.btrfs` abstraction for filesystem management with deduplication and scrubbing\n- `nix-deck` uses Jovian modules for Steam Deck hardware\n\n### Recommendations\n\n1. **Extend nvidia role** - Move `hardware.nvidia` and `services.xserver.videoDrivers` config into `roles.nvidia` with options for open driver, power management, etc.\n\n2. **Add AMD GPU role** - Create `roles.amdgpu` for machines like boxy with AMD graphics config.\n\n3. **Consider boot role** - Could add `roles.boot` with common systemd-boot config, but benefit is marginal.\n\n4. **Network role optional** - Could add `roles.network` but current per-machine network config is appropriate for flexibility.\n\n5. **No action needed** - The current structure is already well-organized. The identified duplications are minimal and don't justify immediate refactoring.\n\n### Architecture Quality: HIGH\n- Clean separation: machine-specific vs shared roles\n- Roles are composable with sensible options\n- Hardware configs are properly isolated\n- Flake structure is well-organized with stable/unstable variants\n- Home-manager integration is consistent across machines"}
{"id":"nixos-configs-pea","title":"Consider removing unused vulkan-hdr-layer package","description":"From Custom Packages evaluation: vulkan-hdr-layer in packages/ appears to be unused anywhere in the configuration. Decide whether to remove it or document its intended use.","status":"closed","priority":4,"issue_type":"task","created_at":"2026-01-10T10:31:26.59180827-08:00","created_by":"johno","updated_at":"2026-01-10T14:18:41.247305164-08:00","closed_at":"2026-01-10T14:18:41.247305164-08:00","close_reason":"PR merged: https://git.johnogle.info/johno/nixos-configs/pulls/22","comments":[{"id":8,"issue_id":"nixos-configs-pea","author":"johno","text":"PR created: https://git.johnogle.info/johno/nixos-configs/pulls/22","created_at":"2026-01-10T21:11:21Z"}]}
{"id":"nixos-configs-rrb","title":"Evaluate Cross-Platform Patterns","description":"# Investigation: Cross-Platform Patterns\n\n## Questions to Answer\n- Are Darwin/WSL/Steam Deck patterns consistent?\n- Is code reuse maximized across platforms?\n- Are platform-specific concerns properly isolated?\n\n## Key Files\n- Darwin machine configs\n- WSL machine configs\n- Steam Deck configs\n- Platform-conditional role patterns\n\n## Approach\n1. Use `/humanlayer:research_codebase_nt` to analyze cross-platform patterns\n2. Identify platform-specific vs shared code\n3. Use `/humanlayer:create_plan_nt` to plan better code sharing","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:08:26.316991479-08:00","created_by":"johno","updated_at":"2026-01-10T10:11:52.982340314-08:00","closed_at":"2026-01-10T10:11:52.982340314-08:00","close_reason":"## Cross-Platform Pattern Evaluation\n\n### Platform Overview\n\nThe repository supports **4 distinct platforms**:\n1. **NixOS** (primary): 6 machines (zix790prors, nix-book, boxy, wixos, nix-deck, john-endesktop)\n2. **Darwin/macOS**: 1 machine (johno-macbookpro/blkfv4yf49kt7)\n3. **WSL (NixOS-WSL)**: 1 machine (wixos)\n4. **Steam Deck**: 1 machine (nix-deck, using Jovian-NixOS)\n\n### Architecture Analysis\n\n#### Are Darwin/WSL/Steam Deck Patterns Consistent?\n\n**MIXED**: The patterns are partially consistent but have notable differences:\n\n**Consistent patterns:**\n- All platforms use home-manager for user configuration\n- All home configs import `./roles` (shared) + platform-specific base role\n- Use of `home.roles` option system across all platforms\n- Common `home.stateVersion = \"24.05\"` across all configs\n\n**Inconsistent patterns:**\n- WSL config embeds NVIDIA/graphics config directly rather than using a role\n- Steam Deck uses `nixosModulesUnstable` (different module set) vs stable for others\n- Darwin uses completely separate `darwinModules` with different role structure\n\n#### Is Code Reuse Maximized?\n\n**PARTIALLY - Rating: 7/10**\n\n**Good reuse:**\n- Home roles are well-factored - most roles work cross-platform\n- `base` role uses `pkgs.stdenv.isLinux` for conditional behavior\n- `emacs` role uses `pkgs.stdenv.isDarwin` to select macport vs standard emacs\n- `aerospace` role properly guards Darwin-only features with assertion\n- Shared wallpaper config across i3, sway, plasma-manager, sketchybar\n\n**Duplication found:**\n1. **roles/default.nix vs roles/darwin.nix**: ~50% duplicated code\n   - Both define: time.timeZone, environment.systemPackages, nix.* settings\n   - Darwin lacks: i18n settings, xserver.xkb, openssh, emergency mode config\n   \n2. **Flake module lists**: nixosModules/nixosModulesUnstable/darwinModules have overlapping overlay configs\n\n3. **Home paths**: Darwin uses `/Users/johno` vs Linux `/home/johno` - handled correctly with mkForce\n\n#### Are Platform-Specific Concerns Properly Isolated?\n\n**GOOD - Rating: 8/10**\n\n**Well isolated:**\n- `home/roles/base-darwin` imports aerospace (Darwin-only)\n- `home/roles/base-linux` imports plasma-manager, i3+sway (Linux-only)\n- `aerospace` role has explicit Darwin assertion\n- System roles (audio, bluetooth, desktop, etc.) are NixOS-only in roles/default.nix\n- Steam Deck config imports `roles/desktop/steamos.nix` for Jovian integration\n\n**Could improve:**\n- WSL-specific config inline in machine config rather than a `wsl` role\n- NVIDIA config duplicated in wixos vs using roles.nvidia\n\n### Key Findings\n\n#### Cross-Platform Role Structure\n```\nhome/roles/\n  default.nix          -- Shared roles (imported by all)\n  base-darwin/         -- Darwin-specific (aerospace)\n  base-linux/          -- Linux-specific (plasma-manager, i3+sway)\n  aerospace/           -- Darwin-only with assertion\n  plasma-manager/      -- Linux-only (imported via base-linux)\n  i3+sway/            -- Linux-only (imported via base-linux)\n  [other roles]        -- Cross-platform\n```\n\n#### Platform Conditionals Found (4 instances)\n1. `packages/claude-code/default.nix:42` - autoPatchelfHook for Linux\n2. `home/roles/emacs/default.nix:23` - emacs-macport vs emacs\n3. `home/roles/base/default.nix:34` - randomizedDelaySec only on Linux\n4. `home/roles/aerospace/default.nix:116` - Darwin-only assertion\n\n### Recommendations\n\n1. **Extract shared system config**: Create `roles/common.nix` for settings shared between NixOS and Darwin (timezone, nix settings, base packages)\n\n2. **Create WSL role**: Move wixos NVIDIA/graphics config to `roles/wsl.nix` for reusability\n\n3. **Consolidate flake overlays**: The overlay configuration is repeated 3x - could extract to a function\n\n4. **Document platform matrix**: Add comments in flake.nix explaining which modules support which platforms\n\n5. **Consider conditional imports**: Some roles (desktop, communication) have Linux-only packages but no guards - could add `lib.optionals pkgs.stdenv.isLinux`"}
{"id":"nixos-configs-tcu","title":"Add platform compatibility guards to cross-platform roles","description":"From Cross-Platform evaluation: Some roles like desktop and communication contain Linux-only packages but no guards. Add lib.optionals pkgs.stdenv.isLinux where appropriate to prevent issues on Darwin.","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/25","status":"in_review","priority":3,"issue_type":"task","created_at":"2026-01-10T10:31:29.864582809-08:00","created_by":"johno","updated_at":"2026-01-10T14:19:52.639338196-08:00","comments":[{"id":9,"issue_id":"nixos-configs-tcu","author":"johno","text":"PR created: https://git.johnogle.info/johno/nixos-configs/pulls/25","created_at":"2026-01-10T21:13:19Z"}]}
{"id":"nixos-configs-tdf","title":"Add skill to import Gitea issues as beads","description":"Create a skill that imports open Gitea issues as beads, skipping those already imported","notes":"Technique from session:\n\n1. Use `tea issues` to list open issues (not curl)\n2. Use `tea issue N` to get full details\n3. Check existing beads with `bd list` to find already-imported issues\n4. Skip PRs that have bead IDs in title (e.g. '[nixos-configs-xxx]') or body ('Bead ID: xxx')\n5. For new issues, create bead with:\n   - Appropriate type (bug/feature/task based on issue content)\n   - Priority P2 default\n   - Notes containing Gitea issue URL\n   - Description from issue body\n6. Report what was imported vs skipped\n\nPR: https://git.johnogle.info/johno/nixos-configs/pulls/15","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-10T12:29:28.686736386-08:00","created_by":"johno","updated_at":"2026-01-10T14:18:37.319195453-08:00","closed_at":"2026-01-10T14:18:37.319195453-08:00","close_reason":"PR merged: https://git.johnogle.info/johno/nixos-configs/pulls/15"}
{"id":"nixos-configs-u81","title":"Add --help flags to all flake apps","description":"From Scripts \u0026 Utilities evaluation: Some flake apps (like update-claude-code) have --help, others don't. Add --help flags to all apps for consistency and discoverability.","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/24","status":"in_review","priority":4,"issue_type":"task","created_at":"2026-01-10T10:31:31.672159415-08:00","created_by":"johno","updated_at":"2026-01-10T14:19:56.054825229-08:00","comments":[{"id":10,"issue_id":"nixos-configs-u81","author":"johno","text":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/24","created_at":"2026-01-10T21:12:06Z"}]}
{"id":"nixos-configs-uje","title":"Migrate nucdeb1 and nucdeb3 to NixOS","description":"Follow the documented process from nucdeb2 migration to migrate nucdeb1 and nucdeb3 from their current Debian-based setups to NixOS with the k3s-node role.","status":"open","priority":2,"issue_type":"task","created_at":"2026-01-10T19:13:04.392439489-08:00","created_by":"johno","updated_at":"2026-01-10T19:13:04.392439489-08:00","dependencies":[{"issue_id":"nixos-configs-uje","depends_on_id":"nixos-configs-45m","type":"blocks","created_at":"2026-01-10T19:13:13.908017962-08:00","created_by":"johno"}],"comments":[{"id":11,"issue_id":"nixos-configs-uje","author":"johno","text":"## k3s-upgrade Label Requirement\n\nWhen these nodes are migrated to NixOS and running k3s, they must be labeled with `k3s-upgrade=disabled`:\n\n```bash\nkubectl label node \u003cnode-name\u003e k3s-upgrade=disabled\n```\n\nThis excludes them from the system-upgrade-controller, which tries to upgrade k3s by replacing the binary in-place. This fails on NixOS because /nix/store is immutable. On NixOS, k3s upgrades happen through updating nixpkgs and rebuilding.","created_at":"2026-01-11T04:10:23Z"}]}
{"id":"nixos-configs-uji","title":"Add and use starship.rs","status":"closed","priority":3,"issue_type":"feature","created_at":"2026-01-10T10:07:07.088523902-08:00","created_by":"johno","updated_at":"2026-01-10T10:13:46.830449555-08:00","closed_at":"2026-01-10T10:13:46.830449555-08:00","close_reason":"Closed"}
{"id":"nixos-configs-ujn","title":"reconcile_beads skill should close matching Gitea issues","notes":"Gitea issue: https://git.johnogle.info/johno/nixos-configs/issues/16\n\nWhen closing beads that were imported from Gitea issues, the reconcile_beads skill should also close the corresponding Gitea issue to keep them in sync.","status":"open","priority":2,"issue_type":"feature","created_at":"2026-01-10T21:06:55.526151709-08:00","created_by":"johno","updated_at":"2026-01-10T21:06:55.526151709-08:00"}
{"id":"nixos-configs-und","title":"Evaluate Custom Packages","description":"# Investigation: Custom Packages\n\n## Questions to Answer\n- Are packages well-structured?\n- Is overlay usage optimal?\n- Are packages up-to-date with nixpkgs conventions?\n\n## Key Files\n- `packages/default.nix` - Custom package overlay\n- `packages/*/default.nix` - Individual package definitions\n\n## Approach\n1. Use `/humanlayer:research_codebase_nt` to analyze package structure\n2. Check overlay patterns and composition\n3. Use `/humanlayer:create_plan_nt` to plan improvements if needed","status":"closed","priority":2,"issue_type":"task","created_at":"2026-01-10T10:08:25.566312823-08:00","created_by":"johno","updated_at":"2026-01-10T10:11:22.107817076-08:00","closed_at":"2026-01-10T10:11:22.107817076-08:00","close_reason":"# Custom Packages Evaluation Complete\n\n## Overview\nThe nixos-configs repository contains 5 custom packages, all managed through a single `packages/default.nix` file that exposes them via `pkgs.custom.*` overlay.\n\n## Package-by-Package Analysis\n\n### 1. claude-code (Well-Structured)\n- **Purpose**: Fetches Claude Code CLI directly from Google Cloud Storage, bypassing npm registry (needed for corporate network restrictions)\n- **Structure**: Excellent - uses `stdenv.mkDerivation` with proper multi-platform support (4 platforms)\n- **Update mechanism**: Has automated `update.sh` script that fetches version/hashes from Homebrew cask - very well designed\n- **Documentation**: Includes comprehensive README.md\n- **Usage**: Exposed via overlay to `pkgs.unstable.claude-code` for Darwin machines\n- **Note**: Also has an unused `npm.nix` with placeholder hash - appears to be abandoned attempt\n\n### 2. vulkan-hdr-layer (Well-Structured)\n- **Purpose**: Vulkan layer for HDR support\n- **Structure**: Proper `stdenv.mkDerivation` with meson build system\n- **Issue**: Uses commit hash version `63d2eec` (unstable version) - consider using tagged releases\n- **Note**: Not currently used anywhere in the configuration (orphaned package?)\n\n### 3. tea-rbw (Simple Wrapper)\n- **Purpose**: Wrapper around `tea` (Gitea CLI) that integrates with rbw (Bitwarden CLI) for authentication\n- **Structure**: Simple `writeShellScriptBin` - appropriate for this use case\n- **Usage**: Used in `home/roles/development/default.nix`\n\n### 4. app-launcher-server (Simple Wrapper)\n- **Purpose**: HTTP server for launching allowlisted applications (Firefox, Kodi)\n- **Structure**: Python script with `writeShellScriptBin` wrapper - clean design\n- **Usage**: Used in `roles/kodi/default.nix` for media center control\n\n### 5. perles (Well-Structured)\n- **Purpose**: TUI for Beads issue tracking system\n- **Structure**: Proper `buildGoModule` with GitHub fetch\n- **Issue**: Uses `rev = \"main\"` instead of pinned commit - can cause reproducibility issues\n- **Usage**: Used in `home/roles/development/default.nix`\n\n## Overlay Integration\nPackages are exposed via overlay in flake.nix:\n```nix\ncustom = prev.callPackage ./packages {};\n```\nThis is a clean, standard pattern.\n\n## Observations\n\n### Strengths\n1. Single entry point (`packages/default.nix`) for all custom packages\n2. Proper use of `callPackage` idiom\n3. Good variety of build patterns (stdenv, buildGoModule, writeShellScriptBin)\n4. Excellent automated update script for claude-code\n5. Proper meta attributes on most packages\n\n### Issues/Recommendations\n1. **vulkan-hdr-layer appears unused** - consider removing if not needed\n2. **perles uses `rev = \"main\"`** - should pin to specific commit for reproducibility\n3. **npm.nix is unused** - leftover file in claude-code directory\n4. **Missing maintainers** - all packages have empty maintainers list\n5. **vulkan-hdr-layer uses unstable version** - uses commit hash, not tagged release\n\n## Nixpkgs Convention Compliance\n- Package naming follows conventions\n- Meta attributes present\n- Uses appropriate build helpers\n- Overlay pattern is idiomatic\n- Could benefit from adding tests for some packages"}
{"id":"nixos-configs-v2v","title":"Pin perles package to specific commit","description":"From Custom Packages evaluation: perles in packages/perles/default.nix uses rev = 'main' instead of a pinned commit. This breaks reproducibility. Should pin to a specific commit hash.","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/7","status":"in_review","priority":2,"issue_type":"bug","created_at":"2026-01-10T10:31:27.624760234-08:00","created_by":"johno","updated_at":"2026-01-10T12:50:58.022570459-08:00"}
{"id":"nixos-configs-vru","title":"Add skill for responding to Gitea PR review comments","description":"## Problem\n\nWhen responding to PR review comments on Gitea/Forgejo, the REST API (`/api/v1/...`) does not support replying directly to review comment threads. Using `tea comment` or the API creates new top-level comments instead of inline thread replies.\n\n## Discovery\n\nThe web UI uses a different endpoint that supports replies:\n\n```\nPOST /pulls/{id}/files/reviews/comments\nContent-Type: multipart/form-data\n```\n\nKey form fields:\n- `reply`: Review ID to reply to (e.g., `2`)\n- `content`: The reply message\n- `path`: File path (e.g., `home/roles/development/default.nix`)\n- `line`: Line number\n- `side`: `proposed` or `original`\n- `single_review`: `true`\n- `origin`: `timeline`\n- `_csrf`: CSRF token (required)\n\nAuthentication requires session cookies, not API token.\n\n## Proposed Solution\n\nCreate a Claude skill that can:\n1. Fetch PR review comments via the REST API\n2. Authenticate via browser session or find alternative auth method\n3. Post inline replies to review comment threads using the web endpoint\n\n### Options to explore:\n1. **Session extraction**: Get cookies from browser or `tea` config\n2. **Headless browser**: Use playwright/puppeteer to automate web UI\n3. **CSRF flow**: Login via API, get CSRF token, then use web endpoint\n4. **tea enhancement**: Check if `tea` CLI has undocumented reply support\n\n## API Reference\n\nGet reviews:\n```bash\ncurl -H \"Authorization: token $TOKEN\" \\\n  \"https://git.johnogle.info/api/v1/repos/{owner}/{repo}/pulls/{id}/reviews\"\n```\n\nGet review comments:\n```bash\ncurl -H \"Authorization: token $TOKEN\" \\\n  \"https://git.johnogle.info/api/v1/repos/{owner}/{repo}/pulls/{id}/reviews/{review_id}/comments\"\n```\n\n## Acceptance Criteria\n\n- [ ] Skill can read PR review comments given a PR number\n- [ ] Skill can post inline replies to specific review comment threads\n- [ ] Works with Gitea/Forgejo instances (git.johnogle.info)\n- [ ] Handles authentication securely","notes":"PR: https://git.johnogle.info/johno/nixos-configs/pulls/18","status":"closed","priority":2,"issue_type":"feature","created_at":"2026-01-10T11:29:18.493043744-08:00","created_by":"johno","updated_at":"2026-01-10T14:18:38.006175433-08:00","closed_at":"2026-01-10T14:18:38.006175433-08:00","close_reason":"PR merged: https://git.johnogle.info/johno/nixos-configs/pulls/18"}
