antigravity-cli: robust rename support

Handle module system merge priority resolution issues with suboptions.
This commit is contained in:
Austin Horstman
2026-06-05 11:51:54 -05:00
parent e621f12c02
commit b2b7db486e
9 changed files with 201 additions and 22 deletions

View File

@@ -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 ];

View File

@@ -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 = ''

View File

@@ -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 = ''

View File

@@ -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"'

View File

@@ -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 = ''

View File

@@ -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 = ''

View File

@@ -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 = [

View File

@@ -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 = ''

View File

@@ -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 = ''