Compare commits
1 Commits
bead/nixos
...
bead/nixos
| Author | SHA1 | Date | |
|---|---|---|---|
| 3b10b2f7f2 |
File diff suppressed because one or more lines are too long
@@ -219,11 +219,7 @@
|
|||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
modules = nixosModules ++ [
|
modules = nixosModules ++ [
|
||||||
./machines/john-endesktop/configuration.nix
|
./machines/john-endesktop/configuration.nix
|
||||||
inputs.home-manager.nixosModules.home-manager
|
# Minimal server - no home-manager needed
|
||||||
{
|
|
||||||
home-manager.users.johno = import ./home/home-server.nix;
|
|
||||||
home-manager.extraSpecialArgs = { inherit system; };
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
kubectl.enable = true;
|
kubectl.enable = true;
|
||||||
tmux.enable = true;
|
tmux.enable = true;
|
||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
targets.genericLinux.enable = true;
|
targets.genericLinux.enable = true;
|
||||||
|
|||||||
@@ -23,7 +23,6 @@
|
|||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
i3_sway.enable = true;
|
i3_sway.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
|
|
||||||
# Launcher wrappers for excluded/optional packages
|
# Launcher wrappers for excluded/optional packages
|
||||||
launchers = {
|
launchers = {
|
||||||
|
|||||||
@@ -16,7 +16,6 @@
|
|||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
i3_sway.enable = true;
|
i3_sway.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
# development.enable = false; # Not needed for live USB
|
# development.enable = false; # Not needed for live USB
|
||||||
# communication.enable = false; # Not needed for live USB
|
# communication.enable = false; # Not needed for live USB
|
||||||
# office.enable = false; # Not needed for live USB
|
# office.enable = false; # Not needed for live USB
|
||||||
|
|||||||
@@ -20,7 +20,6 @@
|
|||||||
plasma-manager.enable = true;
|
plasma-manager.enable = true;
|
||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
i3_sway.enable = true;
|
i3_sway.enable = true;
|
||||||
starship.enable = true;
|
|
||||||
# office.enable = false; # Not needed for media center
|
# office.enable = false; # Not needed for media center
|
||||||
# sync.enable = false; # Shared machine, no personal file sync
|
# sync.enable = false; # Shared machine, no personal file sync
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
{ pkgs, globalInputs, system, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# Home Manager configuration for servers (minimal with development tools)
|
|
||||||
home.username = "johno";
|
|
||||||
home.homeDirectory = "/home/johno";
|
|
||||||
home.stateVersion = "24.05";
|
|
||||||
|
|
||||||
# Minimal roles for server with development capability
|
|
||||||
home.roles = {
|
|
||||||
base.enable = true;
|
|
||||||
development.enable = true;
|
|
||||||
emacs.enable = true;
|
|
||||||
starship.enable = true;
|
|
||||||
tmux.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
targets.genericLinux.enable = true;
|
|
||||||
home.sessionVariables = {};
|
|
||||||
home.sessionPath = [];
|
|
||||||
|
|
||||||
imports = [
|
|
||||||
./roles
|
|
||||||
./roles/base-linux
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -19,6 +19,5 @@
|
|||||||
./sync
|
./sync
|
||||||
./tmux
|
./tmux
|
||||||
./emacs
|
./emacs
|
||||||
./starship
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,25 +85,11 @@ in
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Copy local skills from this repo (with retry for race conditions with running Claude)
|
|
||||||
for file in ${./skills}/*.md; do
|
|
||||||
if [ -f "$file" ]; then
|
|
||||||
filename=$(basename "$file" .md)
|
|
||||||
dest="$HOME/.claude/commands/''${filename}.md"
|
|
||||||
# Remove existing file first, then copy with retry on failure
|
|
||||||
rm -f "$dest" 2>/dev/null || true
|
|
||||||
if ! cp "$file" "$dest" 2>/dev/null; then
|
|
||||||
sleep 0.5
|
|
||||||
cp "$file" "$dest" || echo "Warning: Failed to copy $filename.md to commands"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
$DRY_RUN_CMD echo "Claude Code humanlayer commands and agents installed successfully${
|
$DRY_RUN_CMD echo "Claude Code humanlayer commands and agents installed successfully${
|
||||||
if cfg.allowArbitraryClaudeCodeModelSelection
|
if cfg.allowArbitraryClaudeCodeModelSelection
|
||||||
then " (model specifications preserved)"
|
then " (model specifications preserved)"
|
||||||
else " (model selection removed)"
|
else " (model selection removed)"
|
||||||
} + local skills"
|
}"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# Set up beads Claude Code integration (hooks for SessionStart/PreCompact)
|
# Set up beads Claude Code integration (hooks for SessionStart/PreCompact)
|
||||||
|
|||||||
@@ -1,205 +0,0 @@
|
|||||||
---
|
|
||||||
description: Orchestrate parallel bead processing with worktrees, PRs, and reviews
|
|
||||||
---
|
|
||||||
|
|
||||||
# Parallel Beads Workflow
|
|
||||||
|
|
||||||
This skill orchestrates parallel bead processing using subagents. Each bead gets its own worktree, implementation, PR, and review.
|
|
||||||
|
|
||||||
## Phase 1: Selection
|
|
||||||
|
|
||||||
1. **Get ready beads**: Run `bd ready` to list all beads with no blockers
|
|
||||||
2. **Present selection**: Use `AskUserQuestion` with `multiSelect: true` to let the user choose which beads to work on
|
|
||||||
- Include bead ID and title for each option
|
|
||||||
- Allow selection of multiple beads
|
|
||||||
|
|
||||||
Example:
|
|
||||||
```
|
|
||||||
AskUserQuestion with:
|
|
||||||
- question: "Which beads do you want to work on in parallel?"
|
|
||||||
- multiSelect: true
|
|
||||||
- options from bd ready output
|
|
||||||
```
|
|
||||||
|
|
||||||
## Phase 2: Parallel Implementation
|
|
||||||
|
|
||||||
For each selected bead, launch a subagent using the Task tool. All subagents should be launched in parallel (single message with multiple Task tool calls).
|
|
||||||
|
|
||||||
### Subagent Instructions Template
|
|
||||||
|
|
||||||
Each implementation subagent should receive these instructions:
|
|
||||||
|
|
||||||
```
|
|
||||||
Work on bead [BEAD_ID]: [BEAD_TITLE]
|
|
||||||
|
|
||||||
1. **Create worktree**:
|
|
||||||
- Branch name: `bead/[BEAD_ID]`
|
|
||||||
- Worktree path: `~/wt/[REPO_NAME]/[BEAD_ID]`
|
|
||||||
- Command: `git worktree add -b bead/[BEAD_ID] ~/wt/[REPO_NAME]/[BEAD_ID]`
|
|
||||||
|
|
||||||
2. **Review the bead requirements**:
|
|
||||||
- Run `bd show [BEAD_ID]` to understand the acceptance criteria
|
|
||||||
- Note any external issue references (GitHub issues, Linear tickets, etc.)
|
|
||||||
|
|
||||||
3. **Implement the changes**:
|
|
||||||
- Work in the worktree directory
|
|
||||||
- Complete all acceptance criteria listed in the bead
|
|
||||||
- Run any relevant tests or checks
|
|
||||||
|
|
||||||
4. **Commit and push**:
|
|
||||||
- Stage all changes: `git add -A`
|
|
||||||
- Create a descriptive commit message
|
|
||||||
- Push the branch: `git push -u origin bead/[BEAD_ID]`
|
|
||||||
|
|
||||||
5. **Create a PR**:
|
|
||||||
- Detect hosting provider from origin URL: `git remote get-url origin`
|
|
||||||
- If URL contains `github.com`, use `gh`; otherwise use `tea` (Gitea/Forgejo)
|
|
||||||
- PR title: "[BEAD_ID] [BEAD_TITLE]"
|
|
||||||
- PR body must include:
|
|
||||||
- Reference to bead ID: "Implements bead: [BEAD_ID]"
|
|
||||||
- Any external issue references from the bead (e.g., "Closes #123")
|
|
||||||
- Summary of changes
|
|
||||||
- For GitHub (`gh`):
|
|
||||||
```bash
|
|
||||||
gh pr create --title "[BEAD_ID] [BEAD_TITLE]" --body "$(cat <<'EOF'
|
|
||||||
## Summary
|
|
||||||
[Brief description of changes]
|
|
||||||
|
|
||||||
## Bead Reference
|
|
||||||
Implements bead: [BEAD_ID]
|
|
||||||
|
|
||||||
## External Issues
|
|
||||||
[Any linked issues from the bead]
|
|
||||||
|
|
||||||
## Changes
|
|
||||||
- [List of changes made]
|
|
||||||
EOF
|
|
||||||
)"
|
|
||||||
```
|
|
||||||
- For Gitea (`tea`):
|
|
||||||
```bash
|
|
||||||
tea pr create --head bead/[BEAD_ID] --base main \
|
|
||||||
--title "[BEAD_ID] [BEAD_TITLE]" \
|
|
||||||
--description "## Summary
|
|
||||||
[Brief description of changes]
|
|
||||||
|
|
||||||
## Bead Reference
|
|
||||||
Implements bead: [BEAD_ID]
|
|
||||||
|
|
||||||
## External Issues
|
|
||||||
[Any linked issues from the bead]
|
|
||||||
|
|
||||||
## Changes
|
|
||||||
- [List of changes made]"
|
|
||||||
```
|
|
||||||
|
|
||||||
6. **Update bead status**:
|
|
||||||
- Mark the bead as "in_review": `bd update [BEAD_ID] --status=in_review`
|
|
||||||
- Add the PR URL to the bead notes: `bd update [BEAD_ID] --notes="$(bd show [BEAD_ID] --json | jq -r '.notes')
|
|
||||||
|
|
||||||
PR: [PR_URL]"`
|
|
||||||
|
|
||||||
7. **Report results**:
|
|
||||||
- Return: PR URL, bead ID, success/failure status
|
|
||||||
- If blocked or unable to complete, explain what's blocking progress
|
|
||||||
```
|
|
||||||
|
|
||||||
### Launching Subagents
|
|
||||||
|
|
||||||
Use `subagent_type: "general-purpose"` for implementation subagents. Launch all selected beads' subagents in a single message for parallel execution:
|
|
||||||
|
|
||||||
```
|
|
||||||
<Task calls for each selected bead - all in one message>
|
|
||||||
```
|
|
||||||
|
|
||||||
Collect results from all subagents before proceeding.
|
|
||||||
|
|
||||||
## Phase 3: Parallel Review
|
|
||||||
|
|
||||||
After all implementation subagents complete, launch review subagents for each PR.
|
|
||||||
|
|
||||||
### Review Subagent Instructions Template
|
|
||||||
|
|
||||||
```
|
|
||||||
Review PR for bead [BEAD_ID]
|
|
||||||
|
|
||||||
1. **Detect hosting provider**: Run `git remote get-url origin` - if it contains `github.com` use `gh`, otherwise use `tea`
|
|
||||||
|
|
||||||
2. **Read the PR**:
|
|
||||||
- For GitHub: `gh pr view [PR_NUMBER] --json title,body,additions,deletions,files`
|
|
||||||
- For Gitea: `tea pr view [PR_NUMBER]`
|
|
||||||
- View the diff: `git diff main...bead/[BEAD_ID]`
|
|
||||||
|
|
||||||
3. **Review against acceptance criteria**:
|
|
||||||
- Run `bd show [BEAD_ID]` to get the acceptance criteria
|
|
||||||
- Verify each criterion is addressed
|
|
||||||
|
|
||||||
4. **Leave review comments**:
|
|
||||||
- For GitHub: `gh pr review [PR_NUMBER] --comment --body "[COMMENTS]"`
|
|
||||||
- For Gitea: `tea pr review [PR_NUMBER] --comment "[COMMENTS]"`
|
|
||||||
- Include:
|
|
||||||
- Acceptance criteria checklist (which are met, which might be missing)
|
|
||||||
- Code quality observations
|
|
||||||
- Suggestions for improvement
|
|
||||||
|
|
||||||
5. **Return summary**:
|
|
||||||
- Overall assessment (ready to merge / needs changes)
|
|
||||||
- Key findings
|
|
||||||
```
|
|
||||||
|
|
||||||
Launch all review subagents in parallel.
|
|
||||||
|
|
||||||
## Phase 4: Cleanup and Summary
|
|
||||||
|
|
||||||
After reviews complete:
|
|
||||||
|
|
||||||
1. **Clean up worktrees**:
|
|
||||||
```bash
|
|
||||||
git worktree remove ~/wt/[REPO_NAME]/[BEAD_ID] --force
|
|
||||||
```
|
|
||||||
Do this for each bead's worktree.
|
|
||||||
|
|
||||||
2. **Provide final summary**:
|
|
||||||
Present a table or list with:
|
|
||||||
- Bead ID
|
|
||||||
- PR URL
|
|
||||||
- Status (success / failed / blocked)
|
|
||||||
- Review summary
|
|
||||||
- Any failures or blockers encountered
|
|
||||||
|
|
||||||
Example output:
|
|
||||||
```
|
|
||||||
## Parallel Beads Summary
|
|
||||||
|
|
||||||
| Bead | PR | Bead Status | Review |
|
|
||||||
|------|-----|-------------|--------|
|
|
||||||
| beads-abc | #123 | in_review | Approved |
|
|
||||||
| beads-xyz | #124 | in_review | Needs changes |
|
|
||||||
| beads-123 | - | open (failed) | Blocked by missing dependency |
|
|
||||||
|
|
||||||
### Failures/Blockers
|
|
||||||
- beads-123: Could not complete because [reason]
|
|
||||||
|
|
||||||
### Next Steps
|
|
||||||
- Review PRs that need changes
|
|
||||||
- Address blockers for failed beads
|
|
||||||
- Run `/reconcile_beads` after PRs are merged to close beads
|
|
||||||
```
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
- **Subagent failures**: If a subagent fails or times out, note it in the summary but continue with other beads
|
|
||||||
- **PR creation failures**: Report the error but continue with reviews of successful PRs
|
|
||||||
- **Worktree conflicts**: If a worktree already exists, ask the user if they want to remove it or skip that bead
|
|
||||||
|
|
||||||
## Resource Limits
|
|
||||||
|
|
||||||
- Consider limiting concurrent subagents to 3-5 to avoid overwhelming system resources
|
|
||||||
- If user selects more beads than the limit, process them in batches
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
- This workflow integrates with the beads system (`bd` commands)
|
|
||||||
- Worktrees are created in `~/wt/[REPO_NAME]/` by convention
|
|
||||||
- Each bead gets its own isolated branch and worktree
|
|
||||||
- PRs automatically reference the bead ID for traceability
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
---
|
|
||||||
description: Reconcile beads with merged PRs and close completed beads
|
|
||||||
---
|
|
||||||
|
|
||||||
# Reconcile Beads Workflow
|
|
||||||
|
|
||||||
This skill reconciles beads that are in `in_review` status with their corresponding PRs. If a PR has been merged, the bead is closed.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
- Custom status `in_review` must be configured: `bd config set status.custom "in_review"`
|
|
||||||
- Beads in `in_review` status should have a PR URL in their notes
|
|
||||||
|
|
||||||
## Workflow
|
|
||||||
|
|
||||||
### Step 1: Find beads in review
|
|
||||||
|
|
||||||
```bash
|
|
||||||
bd list --status=in_review
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 2: For each bead, check PR status
|
|
||||||
|
|
||||||
1. **Get the PR URL from bead notes**:
|
|
||||||
```bash
|
|
||||||
bd show [BEAD_ID] --json | jq -r '.notes'
|
|
||||||
```
|
|
||||||
Extract the PR URL (look for lines starting with "PR:" or containing pull request URLs)
|
|
||||||
|
|
||||||
2. **Detect hosting provider**:
|
|
||||||
- Run `git remote get-url origin`
|
|
||||||
- If URL contains `github.com`, use `gh`; otherwise use `tea` (Gitea/Forgejo)
|
|
||||||
|
|
||||||
3. **Check PR status**:
|
|
||||||
- For GitHub:
|
|
||||||
```bash
|
|
||||||
gh pr view [PR_NUMBER] --json state,merged
|
|
||||||
```
|
|
||||||
- For Gitea:
|
|
||||||
```bash
|
|
||||||
tea pr view [PR_NUMBER]
|
|
||||||
```
|
|
||||||
Look for "State: merged" or "State: closed"
|
|
||||||
|
|
||||||
### Step 3: Close merged beads
|
|
||||||
|
|
||||||
If the PR is merged:
|
|
||||||
```bash
|
|
||||||
bd close [BEAD_ID] --reason="PR merged: [PR_URL]"
|
|
||||||
```
|
|
||||||
|
|
||||||
### Step 4: Report summary
|
|
||||||
|
|
||||||
Present results:
|
|
||||||
|
|
||||||
```
|
|
||||||
## Beads Reconciliation Summary
|
|
||||||
|
|
||||||
### Closed (PR Merged)
|
|
||||||
| Bead | PR | Title |
|
|
||||||
|------|-----|-------|
|
|
||||||
| beads-abc | #123 | Feature X |
|
|
||||||
| beads-xyz | #456 | Bug fix Y |
|
|
||||||
|
|
||||||
### Still in Review
|
|
||||||
| Bead | PR | Status | Title |
|
|
||||||
|------|-----|--------|-------|
|
|
||||||
| beads-def | #789 | Open | Feature Z |
|
|
||||||
|
|
||||||
### Issues Found
|
|
||||||
- beads-ghi: No PR URL found in notes
|
|
||||||
- beads-jkl: PR #999 not found (may have been deleted)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Error Handling
|
|
||||||
|
|
||||||
- **Missing PR URL**: Skip the bead and report it
|
|
||||||
- **PR not found**: Report the error but continue with other beads
|
|
||||||
- **API errors**: Report and continue
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
- This skill complements `/parallel_beads` which sets beads to `in_review` status
|
|
||||||
- Run this skill periodically or after merging PRs to keep beads in sync
|
|
||||||
- Beads with closed (but not merged) PRs are not automatically closed - they may need rework
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
{ config, lib, pkgs, ... }:
|
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
|
||||||
cfg = config.home.roles.starship;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.home.roles.starship = {
|
|
||||||
enable = mkEnableOption "starship cross-shell prompt";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
|
||||||
programs.starship = {
|
|
||||||
enable = true;
|
|
||||||
enableBashIntegration = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
add_newline = true;
|
|
||||||
|
|
||||||
character = {
|
|
||||||
success_symbol = "[>](bold green)";
|
|
||||||
error_symbol = "[x](bold red)";
|
|
||||||
vimcmd_symbol = "[<](bold green)";
|
|
||||||
};
|
|
||||||
|
|
||||||
directory = {
|
|
||||||
truncation_length = 4;
|
|
||||||
truncate_to_repo = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
git_branch = {
|
|
||||||
symbol = "";
|
|
||||||
format = "[$symbol$branch(:$remote_branch)]($style) ";
|
|
||||||
};
|
|
||||||
|
|
||||||
git_status = {
|
|
||||||
format = "([$all_status$ahead_behind]($style) )";
|
|
||||||
};
|
|
||||||
|
|
||||||
nix_shell = {
|
|
||||||
symbol = "";
|
|
||||||
format = "[$symbol$state( \\($name\\))]($style) ";
|
|
||||||
};
|
|
||||||
|
|
||||||
cmd_duration = {
|
|
||||||
min_time = 2000;
|
|
||||||
format = "[$duration]($style) ";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Disable modules that are noisy or rarely needed
|
|
||||||
package.disabled = true;
|
|
||||||
nodejs.disabled = true;
|
|
||||||
python.disabled = true;
|
|
||||||
ruby.disabled = true;
|
|
||||||
java.disabled = true;
|
|
||||||
golang.disabled = true;
|
|
||||||
rust.disabled = true;
|
|
||||||
php.disabled = true;
|
|
||||||
lua.disabled = true;
|
|
||||||
perl.disabled = true;
|
|
||||||
terraform.disabled = true;
|
|
||||||
kubernetes.disabled = true;
|
|
||||||
docker_context.disabled = true;
|
|
||||||
aws.disabled = true;
|
|
||||||
gcloud.disabled = true;
|
|
||||||
azure.disabled = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user