{ config, lib, ... }:

# Compatibility shims for stylix target modules
# Stylix unconditionally imports all target modules, which expect certain
# program options to exist. This module defines stub options for programs
# we don't use to prevent evaluation errors.

{
  options = {
    # Neovim: stylix uses initLua but home-manager uses extraLuaConfig
    programs.neovim.initLua = lib.mkOption {
      type = lib.types.lines;
      default = "";
      description = "Lua code to run at init (compatibility shim for stylix)";
    };

    # OpenCode: stylix expects programs.opencode options
    programs.opencode = {
      tui = lib.mkOption {
        type = lib.types.attrsOf lib.types.anything;
        default = {};
        description = "OpenCode TUI settings (stylix compatibility shim)";
      };
      themes = lib.mkOption {
        type = lib.types.attrsOf lib.types.anything;
        default = {};
        description = "OpenCode themes (stylix compatibility shim)";
      };
    };
  };

  config = lib.mkIf (config.programs.neovim.initLua != "") {
    programs.neovim.extraLuaConfig = config.programs.neovim.initLua;
  };
}
