mirror of
https://github.com/nix-community/home-manager.git
synced 2026-06-05 21:02:51 +00:00
antigravity-cli: robust rename support
Handle module system merge priority resolution issues with suboptions.
This commit is contained in:
@@ -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 = ''
|
||||
|
||||
Reference in New Issue
Block a user