From b2b7db486e06e098711dc291bb25db82850e1d16 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Fri, 5 Jun 2026 11:51:54 -0500 Subject: [PATCH] antigravity-cli: robust rename support Handle module system merge priority resolution issues with suboptions. --- modules/programs/antigravity-cli.nix | 46 +++++++++++++++++-- .../antigravity-cli-legacy/context.nix | 21 ++++++++- .../programs/antigravity-cli-legacy/mcp.nix | 23 ++++++++-- .../antigravity-cli-legacy/policies.nix | 32 +++++++++++-- .../antigravity-cli-legacy/settings.nix | 23 +++++++++- .../antigravity-cli-legacy/skills-dir.nix | 20 +++++++- .../skills-path-not-directory.nix | 20 +++++++- .../skills-store-path-dir.nix | 18 +++++++- .../antigravity-cli-legacy/skills.nix | 20 +++++++- 9 files changed, 201 insertions(+), 22 deletions(-) diff --git a/modules/programs/antigravity-cli.nix b/modules/programs/antigravity-cli.nix index 0998ce0a6..8abbd5933 100644 --- a/modules/programs/antigravity-cli.nix +++ b/modules/programs/antigravity-cli.nix @@ -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 ]; diff --git a/tests/modules/programs/antigravity-cli-legacy/context.nix b/tests/modules/programs/antigravity-cli-legacy/context.nix index c664c4050..f5e28fc4a 100644 --- a/tests/modules/programs/antigravity-cli-legacy/context.nix +++ b/tests/modules/programs/antigravity-cli-legacy/context.nix @@ -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 = '' diff --git a/tests/modules/programs/antigravity-cli-legacy/mcp.nix b/tests/modules/programs/antigravity-cli-legacy/mcp.nix index ec625f8f6..ffab69b75 100644 --- a/tests/modules/programs/antigravity-cli-legacy/mcp.nix +++ b/tests/modules/programs/antigravity-cli-legacy/mcp.nix @@ -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 = '' diff --git a/tests/modules/programs/antigravity-cli-legacy/policies.nix b/tests/modules/programs/antigravity-cli-legacy/policies.nix index 1856ac332..f24d5bbd6 100644 --- a/tests/modules/programs/antigravity-cli-legacy/policies.nix +++ b/tests/modules/programs/antigravity-cli-legacy/policies.nix @@ -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"' diff --git a/tests/modules/programs/antigravity-cli-legacy/settings.nix b/tests/modules/programs/antigravity-cli-legacy/settings.nix index 96b84e864..d479ba816 100644 --- a/tests/modules/programs/antigravity-cli-legacy/settings.nix +++ b/tests/modules/programs/antigravity-cli-legacy/settings.nix @@ -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 = '' diff --git a/tests/modules/programs/antigravity-cli-legacy/skills-dir.nix b/tests/modules/programs/antigravity-cli-legacy/skills-dir.nix index c418b0540..894c43bee 100644 --- a/tests/modules/programs/antigravity-cli-legacy/skills-dir.nix +++ b/tests/modules/programs/antigravity-cli-legacy/skills-dir.nix @@ -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 = '' diff --git a/tests/modules/programs/antigravity-cli-legacy/skills-path-not-directory.nix b/tests/modules/programs/antigravity-cli-legacy/skills-path-not-directory.nix index fdfefa2ad..2d4d12ac5 100644 --- a/tests/modules/programs/antigravity-cli-legacy/skills-path-not-directory.nix +++ b/tests/modules/programs/antigravity-cli-legacy/skills-path-not-directory.nix @@ -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 = [ diff --git a/tests/modules/programs/antigravity-cli-legacy/skills-store-path-dir.nix b/tests/modules/programs/antigravity-cli-legacy/skills-store-path-dir.nix index 790482d25..998aca7f2 100644 --- a/tests/modules/programs/antigravity-cli-legacy/skills-store-path-dir.nix +++ b/tests/modules/programs/antigravity-cli-legacy/skills-store-path-dir.nix @@ -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 = '' diff --git a/tests/modules/programs/antigravity-cli-legacy/skills.nix b/tests/modules/programs/antigravity-cli-legacy/skills.nix index 2b17878c0..935a3c604 100644 --- a/tests/modules/programs/antigravity-cli-legacy/skills.nix +++ b/tests/modules/programs/antigravity-cli-legacy/skills.nix @@ -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 = ''