--- title: Temas description: Seleccione un tema integrado o defina el suyo propio. --- Con OpenCode puede seleccionar uno de varios temas integrados, usar un tema que se adapte al tema de su terminal o definir su propio tema personalizado. De forma predeterminada, OpenCode usa nuestro propio tema `opencode`. --- ## Requisitos del terminal Para que los temas se muestren correctamente con su paleta de colores completa, su terminal debe admitir **truecolor** (color de 24 bits). La mayoría de los terminales modernos admiten esto de forma predeterminada, pero es posible que debas habilitarlo: - **Verificar soporte**: Ejecute `echo $COLORTERM` - debería generar `truecolor` o `24bit` - **Habilitar color verdadero**: establezca la variable de entorno `COLORTERM=truecolor` en su perfil de shell - **Compatibilidad de terminal**: asegúrese de que su emulador de terminal admita colores de 24 bits (la mayoría de los terminales modernos como iTerm2, Alacritty, Kitty, Windows Terminal y las versiones recientes de GNOME Terminal lo hacen) Sin soporte de color verdadero, los temas pueden aparecer con una precisión de color reducida o retroceder a la aproximación de 256 colores más cercana. --- ## Temas integrados OpenCode viene con varios temas integrados. | Nombre | Descripción | | ---------------------- | ----------------------------------------------------------------------------- | | `system` | Se adapta al color de fondo de tu terminal | | `tokyonight` | Basado en el tema [Tokyonight](https://github.com/folke/tokyonight.nvim) | | `everforest` | Basado en el tema [Everforest](https://github.com/sainnhe/everforest) | | `ayu` | Basado en el tema oscuro de [Ayu](https://github.com/ayu-theme) | | `catppuccin` | Basado en el tema [Catppuccin](https://github.com/catppuccin) | | `catppuccin-macchiato` | Basado en el tema [Catppuccin](https://github.com/catppuccin) | | `gruvbox` | Basado en el tema [Gruvbox](https://github.com/morhetz/gruvbox) | | `kanagawa` | Basado en el tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) | | `nord` | Basado en el tema [Nord](https://github.com/nordtheme/nord) | | `matrix` | Verde estilo hacker sobre el tema negro | | `one-dark` | Basado en el tema oscuro [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) | Y más, constantemente agregamos nuevos temas. --- ## Tema del sistema El tema `system` está diseñado para adaptarse automáticamente a la combinación de colores de su terminal. A diferencia de los temas tradicionales que utilizan colores fijos, el tema _system_: - **Genera escala de grises**: Crea una escala de grises personalizada basada en el color de fondo de tu terminal, asegurando un contraste óptimo. - **Utiliza colores ANSI**: aprovecha los colores ANSI estándar (0-15) para resaltar la sintaxis y los elementos de la interfaz de usuario, que respetan la paleta de colores de su terminal. - **Conserva los valores predeterminados del terminal**: utiliza `none` para el texto y los colores de fondo para mantener la apariencia nativa de su terminal. El tema del sistema es para usuarios que: - Quiere que OpenCode coincida con la apariencia de su terminal - Utilice esquemas de color de terminal personalizados - Prefiere una apariencia consistente en todas las aplicaciones de terminal --- ## Usando un tema Puede seleccionar un tema abriendo la selección de tema con el comando `/theme`. O puede especificarlo en su [config](/docs/config). ```json title="opencode.json" {3} { "$schema": "https://opencode.ai/config.json", "theme": "tokyonight" } ``` --- ## Temas personalizados OpenCode admite un sistema de temas flexible basado en JSON que permite a los usuarios crear y personalizar temas fácilmente. --- ### Jerarquía Los temas se cargan desde varios directorios en el siguiente orden, donde los directorios posteriores anulan los anteriores: 1. **Temas integrados**: están integrados en el binario 2. **Directorio de configuración de usuario**: definido en `~/.config/opencode/themes/*.json` o `$XDG_CONFIG_HOME/opencode/themes/*.json` 3. **Directorio raíz del proyecto**: definido en `/.opencode/themes/*.json` 4. **Directorio de trabajo actual** - Definido en `./.opencode/themes/*.json` Si varios directorios contienen un tema con el mismo nombre, se utilizará el tema del directorio con mayor prioridad. --- ### Creando un tema Para crear un tema personalizado, cree un archivo JSON en uno de los directorios de temas. Para temas para todo el usuario: ```bash no-frame mkdir -p ~/.config/opencode/themes vim ~/.config/opencode/themes/my-theme.json ``` Y para temas específicos del proyecto. ```bash no-frame mkdir -p .opencode/themes vim .opencode/themes/my-theme.json ``` --- ### formato JSON Los temas utilizan un formato JSON flexible compatible con: - **Colores hexadecimales**: `"#ffffff"` - **Colores ANSI**: `3` (0-255) - **Referencias de color**: `"primary"` o definiciones personalizadas - **Variantes oscuras/claras**: `{"dark": "#000", "light": "#fff"}` - **Sin color**: `"none"` - Utiliza el color predeterminado del terminal o transparente --- ### Definiciones de colores La sección `defs` es opcional y le permite definir colores reutilizables a los que se puede hacer referencia en el tema. --- ### Valores predeterminados del terminal El valor especial `"none"` se puede utilizar para que cualquier color herede el color predeterminado del terminal. Esto es particularmente útil para crear temas que combinen perfectamente con la combinación de colores de su terminal: - `"text": "none"` - Utiliza el color de primer plano predeterminado del terminal - `"background": "none"` - Utiliza el color de fondo predeterminado del terminal --- ### Ejemplo A continuación se muestra un ejemplo de un tema personalizado: ```json title="my-theme.json" { "$schema": "https://opencode.ai/theme.json", "defs": { "nord0": "#2E3440", "nord1": "#3B4252", "nord2": "#434C5E", "nord3": "#4C566A", "nord4": "#D8DEE9", "nord5": "#E5E9F0", "nord6": "#ECEFF4", "nord7": "#8FBCBB", "nord8": "#88C0D0", "nord9": "#81A1C1", "nord10": "#5E81AC", "nord11": "#BF616A", "nord12": "#D08770", "nord13": "#EBCB8B", "nord14": "#A3BE8C", "nord15": "#B48EAD" }, "theme": { "primary": { "dark": "nord8", "light": "nord10" }, "secondary": { "dark": "nord9", "light": "nord9" }, "accent": { "dark": "nord7", "light": "nord7" }, "error": { "dark": "nord11", "light": "nord11" }, "warning": { "dark": "nord12", "light": "nord12" }, "success": { "dark": "nord14", "light": "nord14" }, "info": { "dark": "nord8", "light": "nord10" }, "text": { "dark": "nord4", "light": "nord0" }, "textMuted": { "dark": "nord3", "light": "nord1" }, "background": { "dark": "nord0", "light": "nord6" }, "backgroundPanel": { "dark": "nord1", "light": "nord5" }, "backgroundElement": { "dark": "nord1", "light": "nord4" }, "border": { "dark": "nord2", "light": "nord3" }, "borderActive": { "dark": "nord3", "light": "nord2" }, "borderSubtle": { "dark": "nord2", "light": "nord3" }, "diffAdded": { "dark": "nord14", "light": "nord14" }, "diffRemoved": { "dark": "nord11", "light": "nord11" }, "diffContext": { "dark": "nord3", "light": "nord3" }, "diffHunkHeader": { "dark": "nord3", "light": "nord3" }, "diffHighlightAdded": { "dark": "nord14", "light": "nord14" }, "diffHighlightRemoved": { "dark": "nord11", "light": "nord11" }, "diffAddedBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "diffRemovedBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "diffContextBg": { "dark": "nord1", "light": "nord5" }, "diffLineNumber": { "dark": "nord2", "light": "nord4" }, "diffAddedLineNumberBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "diffRemovedLineNumberBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "markdownText": { "dark": "nord4", "light": "nord0" }, "markdownHeading": { "dark": "nord8", "light": "nord10" }, "markdownLink": { "dark": "nord9", "light": "nord9" }, "markdownLinkText": { "dark": "nord7", "light": "nord7" }, "markdownCode": { "dark": "nord14", "light": "nord14" }, "markdownBlockQuote": { "dark": "nord3", "light": "nord3" }, "markdownEmph": { "dark": "nord12", "light": "nord12" }, "markdownStrong": { "dark": "nord13", "light": "nord13" }, "markdownHorizontalRule": { "dark": "nord3", "light": "nord3" }, "markdownListItem": { "dark": "nord8", "light": "nord10" }, "markdownListEnumeration": { "dark": "nord7", "light": "nord7" }, "markdownImage": { "dark": "nord9", "light": "nord9" }, "markdownImageText": { "dark": "nord7", "light": "nord7" }, "markdownCodeBlock": { "dark": "nord4", "light": "nord0" }, "syntaxComment": { "dark": "nord3", "light": "nord3" }, "syntaxKeyword": { "dark": "nord9", "light": "nord9" }, "syntaxFunction": { "dark": "nord8", "light": "nord8" }, "syntaxVariable": { "dark": "nord7", "light": "nord7" }, "syntaxString": { "dark": "nord14", "light": "nord14" }, "syntaxNumber": { "dark": "nord15", "light": "nord15" }, "syntaxType": { "dark": "nord7", "light": "nord7" }, "syntaxOperator": { "dark": "nord9", "light": "nord9" }, "syntaxPunctuation": { "dark": "nord4", "light": "nord0" } } } ```