mirror of
https://github.com/nix-community/home-manager.git
synced 2025-11-08 19:46:05 +01:00
gemini-cli: context support multiple file generation
Support multiple context files since gemini supports configuring multiple names as supported / looked for. Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
This commit is contained in:
parent
5ead1867bb
commit
e121f3773f
6 changed files with 74 additions and 38 deletions
|
|
@ -91,11 +91,11 @@ in
|
|||
};
|
||||
|
||||
context = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.either lib.types.lines lib.types.path);
|
||||
default = null;
|
||||
type = lib.types.attrsOf (lib.types.either lib.types.lines lib.types.path);
|
||||
default = { };
|
||||
example = lib.literalExpression ''
|
||||
# Inline content example:
|
||||
'''
|
||||
{
|
||||
GEMINI = '''
|
||||
# Global Context
|
||||
|
||||
You are a helpful AI assistant for software development.
|
||||
|
|
@ -105,15 +105,27 @@ in
|
|||
- Follow consistent code style
|
||||
- Write clear comments
|
||||
- Test your changes
|
||||
'''
|
||||
''';
|
||||
|
||||
# Or reference an existing file:
|
||||
# ./path/to/GEMINI.md
|
||||
AGENTS = ./path/to/agents.md;
|
||||
|
||||
CONTEXT = '''
|
||||
Additional context instructions here.
|
||||
''';
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
Global context instructions that will be available across all projects.
|
||||
An attribute set of context files to create in `~/.gemini/`.
|
||||
The attribute name becomes the filename with `.md` extension automatically added.
|
||||
The value is either inline content or a path to a file.
|
||||
|
||||
This will be written to `~/.gemini/GEMINI.md`.
|
||||
Note: You can customize which context file names gemini-cli looks for by setting
|
||||
`settings.context.fileName`. For example:
|
||||
```nix
|
||||
settings = {
|
||||
context.fileName = ["AGENTS.md", "CONTEXT.md", "GEMINI.md"];
|
||||
};
|
||||
```
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
@ -126,12 +138,14 @@ in
|
|||
file.".gemini/settings.json" = lib.mkIf (cfg.settings != { }) {
|
||||
source = jsonFormat.generate "gemini-cli-settings.json" cfg.settings;
|
||||
};
|
||||
file.".gemini/GEMINI.md" = lib.mkIf (cfg.context != null) (
|
||||
if lib.isPath cfg.context then { source = cfg.context; } else { text = cfg.context; }
|
||||
);
|
||||
sessionVariables.GEMINI_MODEL = cfg.defaultModel;
|
||||
};
|
||||
}
|
||||
{
|
||||
home.file = lib.mapAttrs' (
|
||||
n: v: lib.nameValuePair ".gemini/${n}.md" (if lib.isPath v then { source = v; } else { text = v; })
|
||||
) cfg.context;
|
||||
}
|
||||
{
|
||||
home.file = lib.mapAttrs' (
|
||||
n: v:
|
||||
|
|
|
|||
1
tests/modules/programs/gemini-cli/context-additional.md
Normal file
1
tests/modules/programs/gemini-cli/context-additional.md
Normal file
|
|
@ -0,0 +1 @@
|
|||
Additional context for specialized tasks.
|
||||
9
tests/modules/programs/gemini-cli/context-inline.md
Normal file
9
tests/modules/programs/gemini-cli/context-inline.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# Global Context
|
||||
|
||||
You are a helpful AI assistant for software development.
|
||||
|
||||
## Coding Standards
|
||||
|
||||
- Follow consistent code style
|
||||
- Write clear comments
|
||||
- Test your changes
|
||||
|
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
context = ./context.md;
|
||||
};
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.gemini/GEMINI.md
|
||||
assertFileContent home-files/.gemini/GEMINI.md \
|
||||
${./context.md}
|
||||
'';
|
||||
}
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
context = ''
|
||||
context = {
|
||||
# Test inline content
|
||||
GEMINI = ''
|
||||
# Global Context
|
||||
|
||||
You are a helpful AI assistant for software development.
|
||||
|
|
@ -12,10 +14,32 @@
|
|||
- Write clear comments
|
||||
- Test your changes
|
||||
'';
|
||||
# Test file path
|
||||
AGENTS = ./context.md;
|
||||
# Test another inline content
|
||||
CONTEXT = ''
|
||||
Additional context for specialized tasks.
|
||||
'';
|
||||
};
|
||||
settings = {
|
||||
context.fileName = [
|
||||
"AGENTS.md"
|
||||
"CONTEXT.md"
|
||||
"GEMINI.md"
|
||||
];
|
||||
};
|
||||
};
|
||||
nmt.script = ''
|
||||
assertFileExists home-files/.gemini/GEMINI.md
|
||||
assertFileContent home-files/.gemini/GEMINI.md \
|
||||
${./context-inline.md}
|
||||
|
||||
assertFileExists home-files/.gemini/AGENTS.md
|
||||
assertFileContent home-files/.gemini/AGENTS.md \
|
||||
${./context.md}
|
||||
|
||||
assertFileExists home-files/.gemini/CONTEXT.md
|
||||
assertFileContent home-files/.gemini/CONTEXT.md \
|
||||
${./context-additional.md}
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
gemini-cli-settings = ./settings.nix;
|
||||
gemini-cli-context = ./context.nix;
|
||||
gemini-cli-context-source = ./context-source.nix;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue