Qutebrowser: El navegador de la productividad
Introducción
Para nada es un secreto que en La Cueva del Neandertech somos adictos a Neovim, desde su ligereza, su personalización y por su puesto, sus atajos de teclado que si bien suponen una curva de aprendizaje alta, una vez dominados notarás la gran diferencia.
Con esto en mente quiero presentarles lo que para mí es un fuerte candidato a convertirse en mi navegador por defecto: Qutebrowser.

Las computadoras no siempre tuvieron una interfaz gráfica como la que podemos observar hoy en día; en sus inicios las interacciones se realizaban mediante comandos en una terminal, lo que requería de un conocimiento más técnico para poder utilizarlas. Mi postura la pueden conocer en el artículo GUI vs CLI: Una batalla silenciosa
Con la aparición de las interfaces gráficas, el mouse fue diseñado para poder navegar y seleccionar los elementos en pantalla de una manera mucho más simple. De hecho una de las razones principales por la que en los sistemas operativos de microsoft se incluían juegos en sus inicios era para que las personas se familiarizaran con el uso del mouse.
En este contexto QuteBrowser es un navegador minimalista que encaja a la perfección con la filosofía "Mouse-Less" que como su nombre lo indica, invita a utilizar el mouse lo menos posible y en su lugar utilizar atajos de teclado.
¿Porque usarlo?
Si, soy consciente que no a todos les va a llamar la atención usarlo, puesto que la curva de aprendizaje sería increíblemente abrumadora. En mi caso tengo la ventaja de que tengo ya experiencia con Neovim por lo cual no me es para nada difícil acostumbrarme a los atajos que se manejan.
Hasta hace nada estaba usando la extensión Vimium la cual intenta emular (y de buena manera) los bindings que tiene dicho editor, y debo de ser completamente sincero y decir que es excelente en lo que hace.
Pero se lo que muchos están pensando, y de seguro es lo mismo que piensan en mi trabajo cuando me ven ejecutar ;hfld;hfka para navegar por un simple menú y submenú: "¿Qué le pasa a este loco?" Muy probablemente crean que es una pérdida de tiempo, y lo digo porque al principio también lo creía. Cuando comencé a profundizar en Vim me sentí bastante superado e incluso varias veces pensé en simplemente dejarlo e irme a VSCode, o en su defecto regresar a mis orígenes con Sublime Text pero 2 años después les puedo asegurar que ha sido lo mejor que he podido hacer, y espero que con QuteBrowser sea igual.
Características
Por si la perfecta integración de los atajos de Vim fuera poco, Qutebrowser nos ofrece una personalización bastante extensa. Al estar basado en Python, cualquier usuario con conocimientos básicos del lenguaje puede ajustar su configuración con bastante facilidad. Además, la comunidad ha desarrollado una gran cantidad de plugins y scripts que potencian aún más las funcionalidades de este navegador. Desde scripts para realizar automatizaciones hasta ajustes en el comportamiento del navegador, la personalización es un aspecto clave en Qutebrowser.
Configuración personalizable
Con Qutebrowser, no solo tienes el control sobre el aspecto visual, como los temas y el esquema de colores, sino también sobre el funcionamiento interno. La configuración está estructurada en un archivo --config.py--, donde puedes personalizar prácticamente todo lo que se te ocurra, desde las fuentes hasta los métodos de navegación, y mucho más. Además, puedes incorporar scripts de tampermonkey, lo cual lo hace extremadamente flexible.
Por ejemplo, si como yo, eres fanático de automatizar tareas, puedes configurar atajos específicos para abrir tus sitios web más visitados o realizar búsquedas en tus motores de búsqueda favoritos directamente desde la barra de direcciones, sin necesidad de scripts adicionales.
Si me siguen desde hace tiempo sabrán que me encanta la personalización, y en especial que la computadora se adapte a mi flujo de trabajo y no al revés. Y como saben hace un par de meses subí este artículo Cómo Transformé mi ChatGPT: Estilos y Scripts Personalizados
Teniendo en cuenta eso, ¿Como no me iba a enamorar de QuteBrowser? Si me permite cambiar los colores de absolutamente todo, y no solo eso, sino que también me permite cambiar la fuente, el tamaño, y hasta la forma en la que se comporta el navegador.

¿A que se ve bonito? Es un tema Synthwave, por que en ese momento tenía el tema en Neovim y quería que ambos se vieran igual.
¿Perdón? ¿Quieres saber cómo lo hice? Pues aquí tienes el código:
synthwave = {
# Dark background with synthwave vibe
'synth0': '#1a1a40',
'synth1': '#1a1a40',
'synth2': '#1a1a40',
'synth3': '#52057b',
# Bright neons for accents
'synth4': '#ff00ff', # Neon pink
'synth5': '#00ffff', # Neon cyan
'synth6': '#ff1493', # Deep pink
# Soft purple and blue tones
'synth7': '#8a2be2',
'synth8': '#1a1a40', # Same dark background
'synth9': '#4682b4', # Steel blue
'synth10': '#483d8b', # Dark slate blue
# Errors and warnings with a synthwave twist
'synth11': '#ff4500', # Orange red
'synth12': '#ffa07a', # Light salmon for warnings
'synth13': '#ffff00', # Bright yellow for highlights
'synth14': '#00ffff', # Neon cyan for status
'synth15': '#ff6347', # Tomato red for emphasis
}
# Replace the matrix colors with synthwave colors as follows:
c.colors.completion.category.bg = synthwave['synth0']
c.colors.completion.category.border.bottom = synthwave['synth0']
c.colors.completion.category.border.top = synthwave['synth0']
c.colors.completion.category.fg = synthwave['synth5']
c.colors.completion.even.bg = synthwave['synth1']
c.colors.completion.odd.bg = synthwave['synth1']
c.colors.completion.fg = synthwave['synth4']
c.colors.completion.item.selected.bg = synthwave['synth3']
c.colors.completion.item.selected.border.bottom = synthwave['synth3']
c.colors.completion.item.selected.border.top = synthwave['synth3']
c.colors.completion.item.selected.fg = synthwave['synth6']
c.colors.completion.match.fg = synthwave['synth13']
c.colors.completion.scrollbar.bg = synthwave['synth1']
c.colors.completion.scrollbar.fg = synthwave['synth5']
c.colors.downloads.bar.bg = synthwave['synth0']
c.colors.downloads.error.bg = synthwave['synth11']
c.colors.downloads.error.fg = synthwave['synth5']
c.colors.downloads.stop.bg = synthwave['synth15']
c.colors.downloads.system.bg = 'none'
c.colors.hints.bg = synthwave['synth13']
c.colors.hints.fg = synthwave['synth0']
c.colors.hints.match.fg = synthwave['synth10']
c.colors.keyhint.bg = synthwave['synth1']
c.colors.keyhint.fg = synthwave['synth5']
c.colors.keyhint.suffix.fg = synthwave['synth13']
c.colors.messages.error.bg = synthwave['synth11']
c.colors.messages.error.border = synthwave['synth11']
c.colors.messages.error.fg = synthwave['synth5']
c.colors.messages.info.bg = synthwave['synth8']
c.colors.messages.info.border = synthwave['synth8']
c.colors.messages.info.fg = synthwave['synth5']
c.colors.messages.warning.bg = synthwave['synth12']
c.colors.messages.warning.border = synthwave['synth12']
c.colors.messages.warning.fg = synthwave['synth5']
c.colors.prompts.bg = synthwave['synth2']
c.colors.prompts.border = '1px solid ' + synthwave['synth0']
c.colors.prompts.fg = synthwave['synth5']
c.colors.prompts.selected.bg = synthwave['synth3']
c.colors.statusbar.caret.bg = synthwave['synth15']
c.colors.statusbar.caret.fg = synthwave['synth5']
c.colors.statusbar.caret.selection.bg = synthwave['synth15']
c.colors.statusbar.caret.selection.fg = synthwave['synth5']
c.colors.statusbar.command.bg = synthwave['synth2']
c.colors.statusbar.command.fg = synthwave['synth5']
c.colors.statusbar.command.private.bg = synthwave['synth2']
c.colors.statusbar.command.private.fg = synthwave['synth5']
c.colors.statusbar.insert.bg = synthwave['synth14']
c.colors.statusbar.insert.fg = synthwave['synth1']
c.colors.statusbar.normal.bg = synthwave['synth0']
c.colors.statusbar.normal.fg = synthwave['synth5']
c.colors.statusbar.passthrough.bg = synthwave['synth10']
c.colors.statusbar.passthrough.fg = synthwave['synth5']
c.colors.statusbar.private.bg = synthwave['synth3']
c.colors.statusbar.private.fg = synthwave['synth5']
c.colors.statusbar.progress.bg = synthwave['synth5']
c.colors.statusbar.url.error.fg = synthwave['synth11']
c.colors.statusbar.url.fg = synthwave['synth5']
c.colors.statusbar.url.hover.fg = synthwave['synth8']
c.colors.statusbar.url.success.http.fg = synthwave['synth5']
c.colors.statusbar.url.success.https.fg = synthwave['synth14']
c.colors.statusbar.url.warn.fg = synthwave['synth12']
c.colors.tabs.bar.bg = synthwave['synth3']
c.colors.tabs.even.bg = synthwave['synth3']
c.colors.tabs.even.fg = synthwave['synth5']
c.colors.tabs.indicator.error = synthwave['synth11']
c.colors.tabs.odd.bg = synthwave['synth3']
c.colors.tabs.odd.fg = synthwave['synth5']
c.colors.tabs.selected.even.bg = synthwave['synth0']
c.colors.tabs.selected.even.fg = synthwave['synth5']
c.colors.tabs.selected.odd.bg = synthwave['synth0']
c.colors.tabs.selected.odd.fg = synthwave['synth5']
c.colors.webpage.bg = 'black'
Gruvbox:

Matrix:

Ntech:

Lo puedes usar perfectamente como una plantilla para crear tu propio tema. O si quieres ver más te comparto mi repositorio de Dotfiles
Más adelante subiré un artículo sobre mis Dotfiles y como los tengo configurados.
