1
0
Fork 0
mirror of https://github.com/nix-community/home-manager.git synced 2025-12-17 22:41:11 +01:00

opencode: path support for agents/commands

Support paths for the commands/agents since we are linking files.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit is contained in:
Austin Horstman 2025-09-16 21:28:43 -05:00
parent d7686f26e8
commit c104ee92bf

View file

@ -80,69 +80,61 @@ in
}; };
commands = lib.mkOption { commands = lib.mkOption {
type = lib.types.attrsOf lib.types.lines; type = lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path);
default = { }; default = { };
description = '' description = ''
Custom commands for opencode. Custom commands for opencode.
The attribute name becomes the command filename, and the value is the file content. The attribute name becomes the command filename, and the value is either:
- Inline content as a string
- A path to a file containing the command content
Commands are stored in ~/.config/opencode/command/ directory. Commands are stored in ~/.config/opencode/command/ directory.
''; '';
example = { example = lib.literalExpression ''
changelog = '' {
# Update Changelog Command changelog = '''
# Update Changelog Command
Update CHANGELOG.md with a new entry for the specified version. Update CHANGELOG.md with a new entry for the specified version.
Usage: /changelog [version] [change-type] [message] Usage: /changelog [version] [change-type] [message]
''; ''';
fix-issue = '' fix-issue = ./commands/fix-issue.md;
# Fix Issue Command commit = '''
# Commit Command
Fix a GitHub issue following coding standards. Create a git commit with proper message formatting.
Usage: /fix-issue [issue-number] Usage: /commit [message]
''; ''';
commit = '' }
# Commit Command '';
Create a git commit with proper message formatting.
Usage: /commit [message]
'';
};
}; };
agents = lib.mkOption { agents = lib.mkOption {
type = lib.types.attrsOf lib.types.lines; type = lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path);
default = { }; default = { };
description = '' description = ''
Custom agents for opencode. Custom agents for opencode.
The attribute name becomes the agent filename, and the value is the file content. The attribute name becomes the agent filename, and the value is either:
- Inline content as a string
- A path to a file containing the agent content
Agents are stored in ~/.config/opencode/agent/ directory. Agents are stored in ~/.config/opencode/agent/ directory.
''; '';
example = { example = lib.literalExpression ''
code-reviewer = '' {
# Code Reviewer Agent code-reviewer = '''
# Code Reviewer Agent
You are a senior software engineer specializing in code reviews. You are a senior software engineer specializing in code reviews.
Focus on code quality, security, and maintainability. Focus on code quality, security, and maintainability.
## Guidelines ## Guidelines
- Review for potential bugs and edge cases - Review for potential bugs and edge cases
- Check for security vulnerabilities - Check for security vulnerabilities
- Ensure code follows best practices - Ensure code follows best practices
- Suggest improvements for readability and performance - Suggest improvements for readability and performance
''; ''';
documentation = '' documentation = ./agents/documentation.md;
# Documentation Agent }
'';
You are a technical writer who creates clear, comprehensive documentation.
Focus on user-friendly explanations and examples.
## Guidelines
- Write clear, concise documentation
- Include practical examples
- Use proper formatting and structure
- Consider the target audience
'';
};
}; };
}; };
@ -166,15 +158,15 @@ in
} }
// lib.mapAttrs' ( // lib.mapAttrs' (
name: content: name: content:
lib.nameValuePair "opencode/command/${name}.md" { lib.nameValuePair "opencode/command/${name}.md" (
text = content; if lib.isPath content then { source = content; } else { text = content; }
} )
) cfg.commands ) cfg.commands
// lib.mapAttrs' ( // lib.mapAttrs' (
name: content: name: content:
lib.nameValuePair "opencode/agent/${name}.md" { lib.nameValuePair "opencode/agent/${name}.md" (
text = content; if lib.isPath content then { source = content; } else { text = content; }
} )
) cfg.agents; ) cfg.agents;
}; };
} }