themes.mdx 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. ---
  2. title: Temas
  3. description: Seleccione un tema integrado o defina el suyo propio.
  4. ---
  5. 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.
  6. De forma predeterminada, OpenCode usa nuestro propio tema `opencode`.
  7. ---
  8. ## Requisitos del terminal
  9. 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:
  10. - **Verificar soporte**: Ejecute `echo $COLORTERM` - debería generar `truecolor` o `24bit`
  11. - **Habilitar color verdadero**: establezca la variable de entorno `COLORTERM=truecolor` en su perfil de shell
  12. - **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)
  13. 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.
  14. ---
  15. ## Temas integrados
  16. OpenCode viene con varios temas integrados.
  17. | Nombre | Descripción |
  18. | ---------------------- | ----------------------------------------------------------------------------- |
  19. | `system` | Se adapta al color de fondo de tu terminal |
  20. | `tokyonight` | Basado en el tema [Tokyonight](https://github.com/folke/tokyonight.nvim) |
  21. | `everforest` | Basado en el tema [Everforest](https://github.com/sainnhe/everforest) |
  22. | `ayu` | Basado en el tema oscuro de [Ayu](https://github.com/ayu-theme) |
  23. | `catppuccin` | Basado en el tema [Catppuccin](https://github.com/catppuccin) |
  24. | `catppuccin-macchiato` | Basado en el tema [Catppuccin](https://github.com/catppuccin) |
  25. | `gruvbox` | Basado en el tema [Gruvbox](https://github.com/morhetz/gruvbox) |
  26. | `kanagawa` | Basado en el tema [Kanagawa](https://github.com/rebelot/kanagawa.nvim) |
  27. | `nord` | Basado en el tema [Nord](https://github.com/nordtheme/nord) |
  28. | `matrix` | Verde estilo hacker sobre el tema negro |
  29. | `one-dark` | Basado en el tema oscuro [Atom One](https://github.com/Th3Whit3Wolf/one-nvim) |
  30. Y más, constantemente agregamos nuevos temas.
  31. ---
  32. ## Tema del sistema
  33. 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_:
  34. - **Genera escala de grises**: Crea una escala de grises personalizada basada en el color de fondo de tu terminal, asegurando un contraste óptimo.
  35. - **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.
  36. - **Conserva los valores predeterminados del terminal**: utiliza `none` para el texto y los colores de fondo para mantener la apariencia nativa de su terminal.
  37. El tema del sistema es para usuarios que:
  38. - Quiere que OpenCode coincida con la apariencia de su terminal
  39. - Utilice esquemas de color de terminal personalizados
  40. - Prefiere una apariencia consistente en todas las aplicaciones de terminal
  41. ---
  42. ## Usar un tema
  43. Puede seleccionar un tema abriendo la selección de tema con el comando `/theme`. O puede especificarlo en `tui.json`.
  44. ```json title="tui.json" {3}
  45. {
  46. "$schema": "https://opencode.ai/tui.json",
  47. "theme": "tokyonight"
  48. }
  49. ```
  50. ---
  51. ## Temas personalizados
  52. OpenCode admite un sistema de temas flexible basado en JSON que permite a los usuarios crear y personalizar temas fácilmente.
  53. ---
  54. ### Jerarquía
  55. Los temas se cargan desde varios directorios en el siguiente orden, donde los directorios posteriores anulan los anteriores:
  56. 1. **Temas integrados**: están integrados en el binario
  57. 2. **Directorio de configuración de usuario**: definido en `~/.config/opencode/themes/*.json` o `$XDG_CONFIG_HOME/opencode/themes/*.json`
  58. 3. **Directorio raíz del proyecto**: definido en `<project-root>/.opencode/themes/*.json`
  59. 4. **Directorio de trabajo actual** - Definido en `./.opencode/themes/*.json`
  60. Si varios directorios contienen un tema con el mismo nombre, se utilizará el tema del directorio con mayor prioridad.
  61. ---
  62. ### Crear un tema
  63. Para crear un tema personalizado, cree un archivo JSON en uno de los directorios de temas.
  64. Para temas para todo el usuario:
  65. ```bash no-frame
  66. mkdir -p ~/.config/opencode/themes
  67. vim ~/.config/opencode/themes/my-theme.json
  68. ```
  69. Y para temas específicos del proyecto.
  70. ```bash no-frame
  71. mkdir -p .opencode/themes
  72. vim .opencode/themes/my-theme.json
  73. ```
  74. ---
  75. ### Formato JSON
  76. Los temas utilizan un formato JSON flexible compatible con:
  77. - **Colores hexadecimales**: `"#ffffff"`
  78. - **Colores ANSI**: `3` (0-255)
  79. - **Referencias de color**: `"primary"` o definiciones personalizadas
  80. - **Variantes oscuras/claras**: `{"dark": "#000", "light": "#fff"}`
  81. - **Sin color**: `"none"` - Utiliza el color predeterminado del terminal o transparente
  82. ---
  83. ### Definiciones de colores
  84. La sección `defs` es opcional y le permite definir colores reutilizables a los que se puede hacer referencia en el tema.
  85. ---
  86. ### Valores predeterminados del terminal
  87. 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:
  88. - `"text": "none"` - Utiliza el color de primer plano predeterminado del terminal
  89. - `"background": "none"` - Utiliza el color de fondo predeterminado del terminal
  90. ---
  91. ### Ejemplo
  92. A continuación se muestra un ejemplo de un tema personalizado:
  93. ```json title="my-theme.json"
  94. {
  95. "$schema": "https://opencode.ai/theme.json",
  96. "defs": {
  97. "nord0": "#2E3440",
  98. "nord1": "#3B4252",
  99. "nord2": "#434C5E",
  100. "nord3": "#4C566A",
  101. "nord4": "#D8DEE9",
  102. "nord5": "#E5E9F0",
  103. "nord6": "#ECEFF4",
  104. "nord7": "#8FBCBB",
  105. "nord8": "#88C0D0",
  106. "nord9": "#81A1C1",
  107. "nord10": "#5E81AC",
  108. "nord11": "#BF616A",
  109. "nord12": "#D08770",
  110. "nord13": "#EBCB8B",
  111. "nord14": "#A3BE8C",
  112. "nord15": "#B48EAD"
  113. },
  114. "theme": {
  115. "primary": {
  116. "dark": "nord8",
  117. "light": "nord10"
  118. },
  119. "secondary": {
  120. "dark": "nord9",
  121. "light": "nord9"
  122. },
  123. "accent": {
  124. "dark": "nord7",
  125. "light": "nord7"
  126. },
  127. "error": {
  128. "dark": "nord11",
  129. "light": "nord11"
  130. },
  131. "warning": {
  132. "dark": "nord12",
  133. "light": "nord12"
  134. },
  135. "success": {
  136. "dark": "nord14",
  137. "light": "nord14"
  138. },
  139. "info": {
  140. "dark": "nord8",
  141. "light": "nord10"
  142. },
  143. "text": {
  144. "dark": "nord4",
  145. "light": "nord0"
  146. },
  147. "textMuted": {
  148. "dark": "nord3",
  149. "light": "nord1"
  150. },
  151. "background": {
  152. "dark": "nord0",
  153. "light": "nord6"
  154. },
  155. "backgroundPanel": {
  156. "dark": "nord1",
  157. "light": "nord5"
  158. },
  159. "backgroundElement": {
  160. "dark": "nord1",
  161. "light": "nord4"
  162. },
  163. "border": {
  164. "dark": "nord2",
  165. "light": "nord3"
  166. },
  167. "borderActive": {
  168. "dark": "nord3",
  169. "light": "nord2"
  170. },
  171. "borderSubtle": {
  172. "dark": "nord2",
  173. "light": "nord3"
  174. },
  175. "diffAdded": {
  176. "dark": "nord14",
  177. "light": "nord14"
  178. },
  179. "diffRemoved": {
  180. "dark": "nord11",
  181. "light": "nord11"
  182. },
  183. "diffContext": {
  184. "dark": "nord3",
  185. "light": "nord3"
  186. },
  187. "diffHunkHeader": {
  188. "dark": "nord3",
  189. "light": "nord3"
  190. },
  191. "diffHighlightAdded": {
  192. "dark": "nord14",
  193. "light": "nord14"
  194. },
  195. "diffHighlightRemoved": {
  196. "dark": "nord11",
  197. "light": "nord11"
  198. },
  199. "diffAddedBg": {
  200. "dark": "#3B4252",
  201. "light": "#E5E9F0"
  202. },
  203. "diffRemovedBg": {
  204. "dark": "#3B4252",
  205. "light": "#E5E9F0"
  206. },
  207. "diffContextBg": {
  208. "dark": "nord1",
  209. "light": "nord5"
  210. },
  211. "diffLineNumber": {
  212. "dark": "nord2",
  213. "light": "nord4"
  214. },
  215. "diffAddedLineNumberBg": {
  216. "dark": "#3B4252",
  217. "light": "#E5E9F0"
  218. },
  219. "diffRemovedLineNumberBg": {
  220. "dark": "#3B4252",
  221. "light": "#E5E9F0"
  222. },
  223. "markdownText": {
  224. "dark": "nord4",
  225. "light": "nord0"
  226. },
  227. "markdownHeading": {
  228. "dark": "nord8",
  229. "light": "nord10"
  230. },
  231. "markdownLink": {
  232. "dark": "nord9",
  233. "light": "nord9"
  234. },
  235. "markdownLinkText": {
  236. "dark": "nord7",
  237. "light": "nord7"
  238. },
  239. "markdownCode": {
  240. "dark": "nord14",
  241. "light": "nord14"
  242. },
  243. "markdownBlockQuote": {
  244. "dark": "nord3",
  245. "light": "nord3"
  246. },
  247. "markdownEmph": {
  248. "dark": "nord12",
  249. "light": "nord12"
  250. },
  251. "markdownStrong": {
  252. "dark": "nord13",
  253. "light": "nord13"
  254. },
  255. "markdownHorizontalRule": {
  256. "dark": "nord3",
  257. "light": "nord3"
  258. },
  259. "markdownListItem": {
  260. "dark": "nord8",
  261. "light": "nord10"
  262. },
  263. "markdownListEnumeration": {
  264. "dark": "nord7",
  265. "light": "nord7"
  266. },
  267. "markdownImage": {
  268. "dark": "nord9",
  269. "light": "nord9"
  270. },
  271. "markdownImageText": {
  272. "dark": "nord7",
  273. "light": "nord7"
  274. },
  275. "markdownCodeBlock": {
  276. "dark": "nord4",
  277. "light": "nord0"
  278. },
  279. "syntaxComment": {
  280. "dark": "nord3",
  281. "light": "nord3"
  282. },
  283. "syntaxKeyword": {
  284. "dark": "nord9",
  285. "light": "nord9"
  286. },
  287. "syntaxFunction": {
  288. "dark": "nord8",
  289. "light": "nord8"
  290. },
  291. "syntaxVariable": {
  292. "dark": "nord7",
  293. "light": "nord7"
  294. },
  295. "syntaxString": {
  296. "dark": "nord14",
  297. "light": "nord14"
  298. },
  299. "syntaxNumber": {
  300. "dark": "nord15",
  301. "light": "nord15"
  302. },
  303. "syntaxType": {
  304. "dark": "nord7",
  305. "light": "nord7"
  306. },
  307. "syntaxOperator": {
  308. "dark": "nord9",
  309. "light": "nord9"
  310. },
  311. "syntaxPunctuation": {
  312. "dark": "nord4",
  313. "light": "nord0"
  314. }
  315. }
  316. }
  317. ```