diff --git a/.beads/issues.jsonl b/.beads/issues.jsonl index 04fd8fe..1082f0b 100644 --- a/.beads/issues.jsonl +++ b/.beads/issues.jsonl @@ -8,7 +8,7 @@ {"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-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","status":"closed","priority":2,"issue_type":"bug","created_at":"2026-01-10T10:07:08.107097147-08:00","created_by":"johno","updated_at":"2026-01-10T10:13:30.795044847-08:00","closed_at":"2026-01-10T10:13:30.795044847-08:00","close_reason":"Fixed mu4e email body issue by adding critical msmtp configuration options.\n\nRoot cause: The mu4e msmtp configuration was missing message-sendmail-f-is-evil and --read-envelope-from arguments. Without these, msmtp can incorrectly process email headers and strip the body content, especially for multipart messages generated by org-msg (enabled via the +org flag).\n\nFix applied in home/roles/emacs/doom/config.el:\n- Added message-sendmail-f-is-evil t - prevents Emacs from adding -f flag which confuses msmtp\n- Added message-sendmail-extra-arguments with --read-envelope-from - tells msmtp to read From address from headers\n- Set both send-mail-function and message-send-mail-function to message-send-mail-with-sendmail\n\nAfter reloading Doom config or restarting Emacs, email bodies should be sent correctly."} -{"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":"open","priority":3,"issue_type":"bug","created_at":"2026-01-10T10:31:23.349942257-08:00","created_by":"johno","updated_at":"2026-01-10T10:31:23.349942257-08:00"} +{"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":"open","priority":4,"issue_type":"task","created_at":"2026-01-10T10:31:30.737925302-08:00","created_by":"johno","updated_at":"2026-01-10T10:31:30.737925302-08:00"} {"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."}