mirror of
https://github.com/nix-community/home-manager.git
synced 2026-01-11 17:39:37 +08: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:
@@ -91,29 +91,41 @@ 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:
|
||||
'''
|
||||
# Global Context
|
||||
{
|
||||
GEMINI = '''
|
||||
# Global Context
|
||||
|
||||
You are a helpful AI assistant for software development.
|
||||
You are a helpful AI assistant for software development.
|
||||
|
||||
## Coding Standards
|
||||
## Coding Standards
|
||||
|
||||
- Follow consistent code style
|
||||
- Write clear comments
|
||||
- Test your changes
|
||||
'''
|
||||
- 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,21 +1,45 @@
|
||||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
context = ''
|
||||
# Global Context
|
||||
context = {
|
||||
# Test inline content
|
||||
GEMINI = ''
|
||||
# Global Context
|
||||
|
||||
You are a helpful AI assistant for software development.
|
||||
You are a helpful AI assistant for software development.
|
||||
|
||||
## Coding Standards
|
||||
## Coding Standards
|
||||
|
||||
- Follow consistent code style
|
||||
- Write clear comments
|
||||
- Test your changes
|
||||
'';
|
||||
- Follow consistent code style
|
||||
- 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user