antigravity-cli: robust rename support
Handle module system merge priority resolution issues with suboptions.
This commit is contained in:
parent
e621f12c02
commit
b2b7db486e
9 changed files with 201 additions and 22 deletions
|
|
@ -1,12 +1,32 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
options,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.programs.antigravity-cli;
|
||||
|
||||
renamedGeminiOptions = [
|
||||
"commands"
|
||||
"context"
|
||||
"defaultModel"
|
||||
"enable"
|
||||
"enableMcpIntegration"
|
||||
"mcpServers"
|
||||
"package"
|
||||
"permissions"
|
||||
"policies"
|
||||
"settings"
|
||||
"skills"
|
||||
"useLegacyGeminiConfig"
|
||||
];
|
||||
|
||||
oldGeminiCliDefined = lib.any (
|
||||
name: (lib.getAttrFromPath [ "programs" "gemini-cli" name ] options).isDefined
|
||||
) renamedGeminiOptions;
|
||||
|
||||
jsonFormat = pkgs.formats.json { };
|
||||
tomlFormat = pkgs.formats.toml { };
|
||||
|
||||
|
|
@ -31,9 +51,23 @@ in
|
|||
{
|
||||
meta.maintainers = [ lib.maintainers.rrvsh ];
|
||||
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule [ "programs" "gemini-cli" ] [ "programs" "antigravity-cli" ])
|
||||
];
|
||||
imports =
|
||||
let
|
||||
renamedGeminiOption =
|
||||
name:
|
||||
lib.mkRenamedOptionModule
|
||||
[
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
]
|
||||
[
|
||||
"programs"
|
||||
"antigravity-cli"
|
||||
name
|
||||
];
|
||||
in
|
||||
map renamedGeminiOption renamedGeminiOptions;
|
||||
|
||||
options.programs.antigravity-cli = {
|
||||
enable = lib.mkEnableOption "Antigravity CLI";
|
||||
|
|
@ -353,6 +387,12 @@ in
|
|||
in
|
||||
lib.mkIf cfg.enable (
|
||||
lib.mkMerge [
|
||||
(lib.mkIf oldGeminiCliDefined {
|
||||
programs.antigravity-cli = {
|
||||
package = lib.mkDefault pkgs.gemini-cli;
|
||||
useLegacyGeminiConfig = lib.mkDefault true;
|
||||
};
|
||||
})
|
||||
{
|
||||
home = {
|
||||
packages = lib.mkIf (cfg.package != null) [ cfg.package ];
|
||||
|
|
|
|||
|
|
@ -5,6 +5,20 @@
|
|||
...
|
||||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
in
|
||||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
|
|
@ -37,8 +51,11 @@
|
|||
];
|
||||
};
|
||||
};
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"settings"
|
||||
"package"
|
||||
"enable"
|
||||
"context"
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
|
|
|
|||
|
|
@ -5,12 +5,26 @@
|
|||
...
|
||||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
in
|
||||
{
|
||||
programs = {
|
||||
gemini-cli = {
|
||||
enable = true;
|
||||
package = pkgs.writeShellScriptBin "gemini-cli" "";
|
||||
enableMcpIntegration = true;
|
||||
enableMcpIntegration = lib.mkIf true true;
|
||||
settings = {
|
||||
theme = "Default";
|
||||
vimMode = true;
|
||||
|
|
@ -58,8 +72,11 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"settings"
|
||||
"package"
|
||||
"enableMcpIntegration"
|
||||
"enable"
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
|
|
|
|||
|
|
@ -1,14 +1,35 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
options,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
in
|
||||
{
|
||||
test.stubs.gemini-cli = {
|
||||
name = "gemini-cli";
|
||||
outPath = null;
|
||||
buildScript = ''
|
||||
mkdir -p $out/bin
|
||||
touch $out/bin/gemini
|
||||
'';
|
||||
};
|
||||
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
package = pkgs.writeShellScriptBin "gemini-cli" "";
|
||||
policies = {
|
||||
"my-rules" = {
|
||||
rule = [
|
||||
|
|
@ -24,11 +45,14 @@
|
|||
};
|
||||
};
|
||||
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"policies"
|
||||
"enable"
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
assertFileExists home-path/bin/gemini
|
||||
|
||||
assertFileExists home-files/.gemini/policies/my-rules.toml
|
||||
assertFileRegex home-files/.gemini/policies/my-rules.toml \
|
||||
'toolName = "run_shell_command"'
|
||||
|
|
|
|||
|
|
@ -5,6 +5,20 @@
|
|||
...
|
||||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
in
|
||||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
|
|
@ -34,8 +48,13 @@
|
|||
ask = [ "command(*)" ];
|
||||
};
|
||||
};
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"settings"
|
||||
"permissions"
|
||||
"package"
|
||||
"enable"
|
||||
"defaultModel"
|
||||
"commands"
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
|
|
|
|||
|
|
@ -5,6 +5,20 @@
|
|||
...
|
||||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
in
|
||||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
|
|
@ -12,8 +26,10 @@
|
|||
skills = ./skills;
|
||||
};
|
||||
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"skills"
|
||||
"package"
|
||||
"enable"
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
|
|
|
|||
|
|
@ -5,6 +5,20 @@
|
|||
...
|
||||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
in
|
||||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
|
|
@ -12,8 +26,10 @@
|
|||
skills = ./skills/xlsx/SKILL.md;
|
||||
};
|
||||
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"skills"
|
||||
"package"
|
||||
"enable"
|
||||
];
|
||||
|
||||
test.asserts.assertions.expected = [
|
||||
|
|
|
|||
|
|
@ -6,6 +6,18 @@
|
|||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
src = pkgs.writeTextDir "skills/external-skill/SKILL.md" ''
|
||||
# External Skill
|
||||
'';
|
||||
|
|
@ -17,8 +29,10 @@ in
|
|||
skills = "${src}/skills";
|
||||
};
|
||||
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"skills"
|
||||
"package"
|
||||
"enable"
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
|
|
|
|||
|
|
@ -5,6 +5,20 @@
|
|||
...
|
||||
}:
|
||||
|
||||
let
|
||||
renamedWarning =
|
||||
name:
|
||||
"The option `programs.gemini-cli.${name}' defined in ${
|
||||
lib.showFiles (
|
||||
lib.getAttrFromPath [
|
||||
"programs"
|
||||
"gemini-cli"
|
||||
name
|
||||
"files"
|
||||
] options
|
||||
)
|
||||
} has been renamed to `programs.antigravity-cli.${name}'.";
|
||||
in
|
||||
{
|
||||
programs.gemini-cli = {
|
||||
enable = true;
|
||||
|
|
@ -33,8 +47,10 @@
|
|||
'';
|
||||
};
|
||||
};
|
||||
test.asserts.warnings.expected = [
|
||||
"The option `programs.gemini-cli' defined in ${lib.showFiles options.programs.gemini-cli.files} has been renamed to `programs.antigravity-cli'."
|
||||
test.asserts.warnings.expected = map renamedWarning [
|
||||
"skills"
|
||||
"package"
|
||||
"enable"
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue