Skip to content

AI Providers

Source directory: modules/ai/

antigravity-cli.nix

modules/ai/antigravity-cli.nix

  • Enable option: Google Antigravity CLI (agy)

Options: enable, package, environmentVariables, enableShellIntegration

Options declaration (Nix)
  options.modules.ai.antigravity-cli = {
    enable = mkEnableOption "Google Antigravity CLI (agy)";

    package = mkOption {
      type = types.package;
      default = pkgs.customPkgs.antigravity-cli;
      description = "The antigravity-cli package to use";
    };

    environmentVariables = mkOption {
      type = types.attrsOf types.str;
      default = { };
      description = "Environment variables to set for agy (still GEMINI_* per upstream migration docs)";
      example = {
        GEMINI_API_KEY = "your-api-key";
        GEMINI_MODEL = "gemini-2.5-pro";
      };
    };

    enableShellIntegration = mkOption {
      type = types.bool;
      default = true;
      description = "Enable shell integration (aliases + desktop entry)";
    };
  }

default.nix

modules/ai/default.nix

No option declarations; see source for implementation.

mcp-servers.nix

modules/ai/mcp-servers.nix

MCP (Model Context Protocol) Servers Module Provides AI agents with standardized tool access Compliant with NIXOS-ANTI-PATTERNS.md

  • Enable option: MCP (Model Context Protocol) servers
Options declaration (Nix)
  options.features.ai.mcp = {
    enable = lib.mkEnableOption "MCP (Model Context Protocol) servers";

    servers = lib.mkOption {
      type = lib.types.attrsOf lib.types.bool;
      default = { };
      description = "Individual MCP servers to enable";
    };

    enableAll = lib.mkOption {
      type = lib.types.bool;
      default = false;
      description = "Enable all MCP servers (useful for development hosts)";
    };

    obsidian = {
      enable = lib.mkOption {
        type = lib.types.bool;
        default = false;
        description = "Enable Obsidian MCP server for vault access";
      };

      implementation = lib.mkOption {
        type = lib.types.enum [ "rest-api" "zero-dependency" ];
        default = "zero-dependency";
        description = ''
          MCP implementation type:
          - rest-api: Uses Obsidian Local REST API plugin (requires plugin installation, provides full CRUD)
          - zero-dependency: Uses @mauricio.wolff/mcp-obsidian (no plugin needed, read-only)
        '';
      };

      vaultPath = lib.mkOption {
        type = lib.types.nullOr lib.types.str;
        default = null;
        example = "/home/user/Documents/ObsidianVault";
        description = "Path to Obsidian vault (zero-dependency mode only)";
      };

      restApi = {
        apiKeyFile = lib.mkOption {
          type = lib.types.nullOr lib.types.path;
          default = null;
          example = lib.literalExpression "config.age.secrets.\"obsidian-api-key\".path";
          description = "Path to API key file (runtime loading, REST API mode only)";
        };

        host = lib.mkOption {
          type = lib.types.str;
          default = "localhost";
          description = "Obsidian REST API host";
        };

        port = lib.mkOption {
          type = lib.types.port;
          default = 27123;
          description = "Obsidian REST API port";
        };

        verifySsl = lib.mkOption {
          type = lib.types.bool;
          default = true;
          description = "Verify SSL certificates for HTTPS connections";
        };
      };
    };

    linkedin = {
      enable = lib.mkOption {
        type = lib.types.bool;
        default = false;
        description = "Enable LinkedIn MCP server for professional networking and job search";
      };

      cookieFile = lib.mkOption {
        type = lib.types.nullOr lib.types.path;
        default = null;
        example = lib.literalExpression "config.age.secrets.\"api-linkedin-cookie\".path";
        description = ''
          Path to LinkedIn li_at cookie file (runtime loading only).
          Cookie expires approximately every 30 days and requires refresh.
          NEVER set cookie value directly - use file path for runtime loading.
        '';
      };
    };

    atlassian = {
      enable = lib.mkOption {
        type = lib.types.bool;
        default = false;
# … truncated — see source link above

anthropic.nix

modules/ai/providers/anthropic.nix

Options: enabled

Options declaration (Nix)
  options.ai.providers.anthropic = {
    enabled = mkOption {
      type = types.bool;
      default = false;
      description = "Internal option set by main providers module";
    };
  }

default.nix

modules/ai/providers/default.nix

  • Enable option: Enhanced AI provider support with unified interface
  • Enable option: OpenAI provider support
  • Enable option: Anthropic/Claude provider support
  • Enable option: Google Gemini provider support

Options: enable, defaultProvider, enableFallback, costOptimization, timeout, maxRetries, priority, models, defaultModel

Options declaration (Nix)
  options.ai.providers = {
    enable = mkEnableOption "Enhanced AI provider support with unified interface";

    defaultProvider = mkOption {
      type = types.enum [ "openai" "anthropic" "gemini" ];
      default = "anthropic";
      description = "Default AI provider to use";
      example = "openai";
    };

    enableFallback = mkOption {
      type = types.bool;
      default = true;
      description = "Enable automatic fallback between providers";
    };

    costOptimization = mkOption {
      type = types.bool;
      default = false;
      description = "Enable cost-based provider selection";
    };

    timeout = mkOption {
      type = types.int;
      default = 30;
      description = "Request timeout in seconds";
    };

    maxRetries = mkOption {
      type = types.int;
      default = 3;
      description = "Maximum number of retries per provider";
    };

    openai = {
      enable = mkEnableOption "OpenAI provider support";
      priority = mkOption {
        type = types.int;
        default = 1;
        description = "Provider priority (1 = highest)";
      };
      models = mkOption {
        type = types.listOf types.str;
        default = [ "gpt-4o" "gpt-4o-mini" "gpt-3.5-turbo" ];
        description = "Available OpenAI models";
      };
      defaultModel = mkOption {
        type = types.str;
        default = "gpt-4o-mini";
        description = "Default OpenAI model";
      };
    };

    anthropic = {
      enable = mkEnableOption "Anthropic/Claude provider support";
      priority = mkOption {
        type = types.int;
        default = 2;
        description = "Provider priority (1 = highest)";
      };
      models = mkOption {
        type = types.listOf types.str;
        default = [ "claude-sonnet-4-6" "claude-haiku-4-5-20251001" "claude-opus-4-6" ];
        description = "Available Anthropic models";
      };
      defaultModel = mkOption {
        type = types.str;
        default = "claude-sonnet-4-6";
        description = "Default Anthropic model";
      };
    };

    gemini = {
      enable = mkEnableOption "Google Gemini provider support";
      priority = mkOption {
        type = types.int;
        default = 3;
        description = "Provider priority (1 = highest)";
      };
      models = mkOption {
        type = types.listOf types.str;
        default = [ "gemini-2.5-pro" "gemini-2.5-flash" "gemini-2.0-flash" ];
        description = "Available Gemini models";
      };
      defaultModel = mkOption {
        type = types.str;
        default = "gemini-2.5-flash";
        description = "Default Gemini model";
      };
# … truncated — see source link above

gemini.nix

modules/ai/providers/gemini.nix

Options: enabled

Options declaration (Nix)
  options.ai.providers.gemini = {
    enabled = mkOption {
      type = types.bool;
      default = false;
      description = "Internal option set by main providers module";
    };
  }

openai.nix

modules/ai/providers/openai.nix

Options: enabled

Options declaration (Nix)
  options.ai.providers.openai = {
    enabled = mkOption {
      type = types.bool;
      default = false;
      description = "Internal option set by main providers module";
    };
  }

unified-client.nix

modules/ai/providers/unified-client.nix

Options: enable

Options declaration (Nix)
  options.ai.providers.unifiedClient = {
    enable = mkOption {
      type = types.bool;
      default = true;
      description = "Enable unified AI client";
    };
  }