diff --git a/.beads/sync_base.jsonl b/.beads/sync_base.jsonl index e90cc61..97f4bbc 100644 --- a/.beads/sync_base.jsonl +++ b/.beads/sync_base.jsonl @@ -11,7 +11,7 @@ {"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-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-cph","title":"Add Gitea issue tracker integration","description":"## Summary\nAdd Gitea/Forgejo issue tracker integration to beads, following the patterns established by the Linear integration (bidirectional sync) and the GitHub/Jira import examples.\n\n## Context\nThe beads project at ~/src/beads/ already has:\n- **Linear**: Full bidirectional sync in `internal/linear/` (types, client, mapping)\n- **GitHub**: Import-only via `examples/github-import/gh2jsonl.py`\n- **Jira**: Import + partial export via `examples/jira-import/`\n\n## Implementation Structure\nBased on Linear's architecture, create:\n\n```\ninternal/gitea/\n├── types.go # API response types (Issue, Label, User, Repository)\n├── client.go # REST client with pagination, auth, rate limiting\n├── mapping.go # Field conversion (status, priority, labels → beads)\n└── mapping_test.go # Comprehensive mapping tests\n```\n\n## Key Components\n\n### types.go\n- Gitea REST API response structures\n- ClientConfig (baseURL, token, owner, repo)\n- SyncStats/SyncResult types\n\n### client.go\n- `NewClient(baseURL, token string)` constructor\n- `FetchIssues(ctx, state, pageSize)` - paginated fetch\n- `FetchIssuesSince(ctx, since)` - incremental via `updated_at`\n- `CreateIssue(ctx, ...)` / `UpdateIssue(ctx, ...)` - push support\n\n### mapping.go\n- Status mapping: Gitea (open/closed) → Beads (open/in_progress/closed/blocked)\n- Priority inference from labels (Gitea has no native priority)\n- Type inference from labels (bug, feature, etc.)\n- Hash-based ID generation with collision handling\n\n## Gitea API Specifics\n- REST API: `GET /repos/{owner}/{repo}/issues`\n- Auth: `Authorization: token \u003ctoken\u003e` header\n- Pagination: `page` + `limit` params (not cursor-based)\n- Rate limits: Standard HTTP headers\n\n## Phased Approach\n\n**Phase 1 (MVP):** Import-only\n- REST client + types\n- Basic field mapping\n- Script-based JSONL export (like gh2jsonl.py)\n\n**Phase 2:** Bidirectional sync\n- Push support (create/update)\n- Incremental sync via timestamps\n- RPC integration for `bd sync --gitea`\n\n**Phase 3:** Advanced\n- Issue relations/dependencies\n- Auto-import with file watching\n- Configurable mapping via `bd config`\n\n## References\n- Linear integration: `internal/linear/` (best template for bidirectional)\n- GitHub import: `examples/github-import/gh2jsonl.py`\n- Importer core: `internal/importer/importer.go`","status":"in_progress","priority":2,"issue_type":"feature","created_at":"2026-01-12T20:00:24.253907038-08:00","created_by":"johno","updated_at":"2026-01-12T20:18:52.453529482-08:00"} +{"id":"nixos-configs-cph","title":"Add Gitea issue tracker integration","description":"## Summary\nAdd Gitea/Forgejo issue tracker integration to beads, following the patterns established by the Linear integration (bidirectional sync) and the GitHub/Jira import examples.\n\n## Context\nThe beads project at ~/src/beads/ already has:\n- **Linear**: Full bidirectional sync in `internal/linear/` (types, client, mapping)\n- **GitHub**: Import-only via `examples/github-import/gh2jsonl.py`\n- **Jira**: Import + partial export via `examples/jira-import/`\n\n## Implementation Structure\nBased on Linear's architecture, create:\n\n```\ninternal/gitea/\n├── types.go # API response types (Issue, Label, User, Repository)\n├── client.go # REST client with pagination, auth, rate limiting\n├── mapping.go # Field conversion (status, priority, labels → beads)\n└── mapping_test.go # Comprehensive mapping tests\n```\n\n## Key Components\n\n### types.go\n- Gitea REST API response structures\n- ClientConfig (baseURL, token, owner, repo)\n- SyncStats/SyncResult types\n\n### client.go\n- `NewClient(baseURL, token string)` constructor\n- `FetchIssues(ctx, state, pageSize)` - paginated fetch\n- `FetchIssuesSince(ctx, since)` - incremental via `updated_at`\n- `CreateIssue(ctx, ...)` / `UpdateIssue(ctx, ...)` - push support\n\n### mapping.go\n- Status mapping: Gitea (open/closed) → Beads (open/in_progress/closed/blocked)\n- Priority inference from labels (Gitea has no native priority)\n- Type inference from labels (bug, feature, etc.)\n- Hash-based ID generation with collision handling\n\n## Gitea API Specifics\n- REST API: `GET /repos/{owner}/{repo}/issues`\n- Auth: `Authorization: token \u003ctoken\u003e` header\n- Pagination: `page` + `limit` params (not cursor-based)\n- Rate limits: Standard HTTP headers\n\n## Phased Approach\n\n**Phase 1 (MVP):** Import-only\n- REST client + types\n- Basic field mapping\n- Script-based JSONL export (like gh2jsonl.py)\n\n**Phase 2:** Bidirectional sync\n- Push support (create/update)\n- Incremental sync via timestamps\n- RPC integration for `bd sync --gitea`\n\n**Phase 3:** Advanced\n- Issue relations/dependencies\n- Auto-import with file watching\n- Configurable mapping via `bd config`\n\n## References\n- Linear integration: `internal/linear/` (best template for bidirectional)\n- GitHub import: `examples/github-import/gh2jsonl.py`\n- Importer core: `internal/importer/importer.go`","notes":"Phases split into separate beads:\n- Phase 1: nixos-configs-g47 (import-only)\n- Phase 2: nixos-configs-yrc (bidirectional sync)\n- Phase 3: nixos-configs-f7d (advanced features)\n\nPlan for Phase 1: thoughts/beads-nixos-configs-g47/plan.md","status":"in_progress","priority":2,"issue_type":"feature","created_at":"2026-01-12T20:00:24.253907038-08:00","created_by":"johno","updated_at":"2026-01-12T20:35:22.721859309-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."} {"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":"open","priority":3,"issue_type":"task","created_at":"2026-01-10T10:31:29.045574957-08:00","created_by":"johno","updated_at":"2026-01-10T10:31:29.045574957-08:00"} {"id":"nixos-configs-f7d","title":"Gitea integration Phase 3: Advanced features","description":"Advanced Gitea integration features.\n\nDeliverables:\n- Issue relations/dependencies sync\n- Configurable mapping via bd config\n- Auto-import with file watching\n- Milestone/project support\n\nParent: nixos-configs-cph","status":"open","priority":4,"issue_type":"task","created_at":"2026-01-12T20:31:54.704415817-08:00","created_by":"johno","updated_at":"2026-01-12T20:31:54.704415817-08:00","dependencies":[{"issue_id":"nixos-configs-f7d","depends_on_id":"nixos-configs-yrc","type":"blocks","created_at":"2026-01-12T20:32:05.938697843-08:00","created_by":"johno"}]}