Compare commits
1 Commits
bead/nixos
...
bead/nixos
| Author | SHA1 | Date | |
|---|---|---|---|
| b79250ff76 |
@@ -1,24 +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;
|
|
||||||
tmux.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
targets.genericLinux.enable = true;
|
|
||||||
home.sessionVariables = {};
|
|
||||||
home.sessionPath = [];
|
|
||||||
|
|
||||||
imports = [
|
|
||||||
./roles
|
|
||||||
./roles/base-linux
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -85,20 +85,11 @@ in
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Copy local skills from this repo
|
|
||||||
for file in ${./skills}/*.md; do
|
|
||||||
if [ -f "$file" ]; then
|
|
||||||
filename=$(basename "$file" .md)
|
|
||||||
dest="$HOME/.claude/commands/''${filename}.md"
|
|
||||||
cp "$file" "$dest"
|
|
||||||
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,198 +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. **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 | Status | Review |
|
|
||||||
|------|-----|--------|--------|
|
|
||||||
| beads-abc | #123 | Success | Approved |
|
|
||||||
| beads-xyz | #124 | Success | Needs changes |
|
|
||||||
| beads-123 | - | 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
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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
|
|
||||||
@@ -17,6 +17,15 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
wayland = true;
|
wayland = true;
|
||||||
};
|
};
|
||||||
|
nvidia = {
|
||||||
|
enable = true;
|
||||||
|
package = "latest";
|
||||||
|
graphics.extraPackages = with pkgs; [
|
||||||
|
mesa
|
||||||
|
libvdpau-va-gl
|
||||||
|
libva-vdpau-driver
|
||||||
|
];
|
||||||
|
};
|
||||||
users.enable = true;
|
users.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -29,28 +38,13 @@
|
|||||||
wsl.wslConf.network.hostname = "wixos";
|
wsl.wslConf.network.hostname = "wixos";
|
||||||
wsl.wslConf.user.default = "johno";
|
wsl.wslConf.user.default = "johno";
|
||||||
|
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
# WSL-specific environment variables for graphics
|
||||||
hardware.graphics = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
extraPackages = with pkgs; [
|
|
||||||
mesa
|
|
||||||
libvdpau-va-gl
|
|
||||||
libva-vdpau-driver
|
|
||||||
];
|
|
||||||
};
|
|
||||||
environment.sessionVariables = {
|
environment.sessionVariables = {
|
||||||
LD_LIBRARY_PATH = [
|
LD_LIBRARY_PATH = [
|
||||||
"/usr/lib/wsl/lib"
|
"/usr/lib/wsl/lib"
|
||||||
"/run/opengl-driver/lib"
|
"/run/opengl-driver/lib"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
hardware.nvidia = {
|
|
||||||
modesetting.enable = true;
|
|
||||||
nvidiaSettings = true;
|
|
||||||
open = true;
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.latest;
|
|
||||||
};
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
# This value determines the NixOS release from which the default
|
||||||
# settings for stateful data, like file locations and database versions
|
# settings for stateful data, like file locations and database versions
|
||||||
|
|||||||
@@ -26,7 +26,10 @@ with lib;
|
|||||||
x11 = true;
|
x11 = true;
|
||||||
};
|
};
|
||||||
nfs-mounts.enable = true;
|
nfs-mounts.enable = true;
|
||||||
nvidia.enable = true;
|
nvidia = {
|
||||||
|
enable = true;
|
||||||
|
graphics.enable32Bit = true;
|
||||||
|
};
|
||||||
printing.enable = true;
|
printing.enable = true;
|
||||||
remote-build.enableBuilder = true;
|
remote-build.enableBuilder = true;
|
||||||
users.enable = true;
|
users.enable = true;
|
||||||
@@ -47,27 +50,11 @@ with lib;
|
|||||||
# Fix dual boot clock sync - tell Linux to use local time for hardware clock
|
# Fix dual boot clock sync - tell Linux to use local time for hardware clock
|
||||||
time.hardwareClockInLocalTime = true;
|
time.hardwareClockInLocalTime = true;
|
||||||
|
|
||||||
# NVIDIA Graphics configuration
|
|
||||||
services.xserver.videoDrivers = [ "nvidia" ];
|
|
||||||
hardware.graphics.enable = true;
|
|
||||||
hardware.graphics.enable32Bit = true;
|
|
||||||
|
|
||||||
# Set DP-0 as primary display with 164.90Hz refresh rate
|
# Set DP-0 as primary display with 164.90Hz refresh rate
|
||||||
services.xserver.displayManager.sessionCommands = ''
|
services.xserver.displayManager.sessionCommands = ''
|
||||||
${pkgs.xorg.xrandr}/bin/xrandr --output DP-0 --mode 3440x1440 --rate 164.90 --primary
|
${pkgs.xorg.xrandr}/bin/xrandr --output DP-0 --mode 3440x1440 --rate 164.90 --primary
|
||||||
'';
|
'';
|
||||||
|
|
||||||
hardware.nvidia = {
|
|
||||||
modesetting.enable = true;
|
|
||||||
nvidiaSettings = true;
|
|
||||||
package = pkgs.linuxPackages.nvidiaPackages.stable;
|
|
||||||
open = true;
|
|
||||||
|
|
||||||
# For gaming performance
|
|
||||||
powerManagement.enable = false;
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
services.ollama = {
|
services.ollama = {
|
||||||
enable = true;
|
enable = true;
|
||||||
acceleration = "cuda";
|
acceleration = "cuda";
|
||||||
|
|||||||
@@ -8,9 +8,89 @@ in
|
|||||||
{
|
{
|
||||||
options.roles.nvidia = {
|
options.roles.nvidia = {
|
||||||
enable = mkEnableOption "Enable the nvidia role";
|
enable = mkEnableOption "Enable the nvidia role";
|
||||||
|
|
||||||
|
# Driver configuration options
|
||||||
|
open = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Use the open source nvidia kernel driver (for Turing and newer GPUs).";
|
||||||
|
};
|
||||||
|
|
||||||
|
modesetting = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Enable kernel modesetting for nvidia.";
|
||||||
|
};
|
||||||
|
|
||||||
|
nvidiaSettings = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Enable the nvidia-settings GUI.";
|
||||||
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
type = types.enum [ "stable" "latest" "beta" "vulkan_beta" "production" ];
|
||||||
|
default = "stable";
|
||||||
|
description = "The nvidia driver package to use.";
|
||||||
|
};
|
||||||
|
|
||||||
|
powerManagement = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Enable nvidia power management (useful for laptops, not recommended for desktops).";
|
||||||
|
};
|
||||||
|
|
||||||
|
finegrained = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Enable fine-grained power management for Turing and newer GPUs.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
graphics = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "Enable hardware graphics support.";
|
||||||
|
};
|
||||||
|
|
||||||
|
enable32Bit = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "Enable 32-bit graphics libraries (needed for some games).";
|
||||||
|
};
|
||||||
|
|
||||||
|
extraPackages = mkOption {
|
||||||
|
type = types.listOf types.package;
|
||||||
|
default = [];
|
||||||
|
description = "Extra packages to add to hardware.graphics.extraPackages.";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
# Set xserver video driver
|
||||||
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
|
||||||
|
# Graphics configuration
|
||||||
|
hardware.graphics = {
|
||||||
|
enable = cfg.graphics.enable;
|
||||||
|
enable32Bit = cfg.graphics.enable32Bit;
|
||||||
|
extraPackages = cfg.graphics.extraPackages;
|
||||||
|
};
|
||||||
|
|
||||||
|
# NVIDIA driver configuration
|
||||||
|
hardware.nvidia = {
|
||||||
|
modesetting.enable = cfg.modesetting;
|
||||||
|
nvidiaSettings = cfg.nvidiaSettings;
|
||||||
|
open = cfg.open;
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.${cfg.package};
|
||||||
|
powerManagement.enable = cfg.powerManagement.enable;
|
||||||
|
powerManagement.finegrained = cfg.powerManagement.finegrained;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Additional packages for nvidia support
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
libva-utils
|
libva-utils
|
||||||
nvidia-vaapi-driver
|
nvidia-vaapi-driver
|
||||||
|
|||||||
Reference in New Issue
Block a user