Estoy empezando con dwm y me gustaría personalizarlo con algunos parches que realmente valen la pena, tanto en términos de productividad como de estética.
Actualmente tengo un config.h algo personalizado, así que también me interesa aprender a aplicar los parches correctamente. He visto algunos videos, pero preferiría una guía escrita por alguien con experiencia.
Realmente agradezco cualquier recomendación, consejo o captura de tu dwm modificado.
Depende de que busques, al final cada uno termina teniendo un conjunto de parches único para cada caso. También te recomiendo aprender C, al aumentar los parches va a ser necesario alterar el código para que funcionen correctamente.
Aquí te dejo una lista de los que empleo.
attachbottom
centeredmaster
cfacts
clientindicators
extrabar
noborder
pertag
statusallmons
transfer
Si quieres te paso el repositorio con los parches ya aplicados.
Justo hoy estuve probando algunos layouts y ya noté que ciertos parches no cooperan bien entre sí. Hoy mismo voy a empezar un curso de C en w3schools para poder editar el código cuando sea necesario.
Ya había usado dwm antes, con una configuración ya armada, y me enamoré por completo. Es increíble lo liviano y rápido que es.
Cuando termine el curso, voy a probar tu conjunto de parches junto con algunos otros que estuve eligiendo. Cuando tenga listo mi setup, paso los parches más una captura.
Hace unos meses abrí este post y me comprometí a compartir los parches que utilizo en dwm. En este tiempo estuve probando y aprendiendo un poco de git y de C para poder personalizar todo a mi gusto.
Mi procedimiento al parchear
Descargar el parche
Reviso la pagina oficial de parches y bajo el parche.diff Siempre trato de elegir la última versión disponible. El archivo del parche lo suelo guardar en el directorio de dwm en una carpeta dedicada (dwm-btw/folder).
Aplicar el parche
Recomiendo crear una rama de git para cada parche antes de aplicarlo. Asi, si algo no funciona, se puede descartar fácilmente.
El comando para aplicar el parche es el siguiente:
patch -p1 < dwm-nombre_del_parche.diff
Conflictos
Si el parche falla, los archivos .rej muestran exactamente donde estuvo el problema, te recomiendo aprender C para manipular el codigo.
Después de aplicar un parche, recuerda eliminar config.h y recompilar con:
sudo make clean install.
Ramas
Yo tengo 3 ramas:
patch: donde guardo un dwm limpio (sin modificar el codigo fuente) con los parches aplicados.
test: donde guardo mis cambios personalizados y lo mergeo con `patch.
main: Basicamente lo mismo que test, pero es el que uso cuando estoy modificando test. La “version estable”.
.gitignore
Para no ensuciar el repo:
*.o
*.rej
*.orig
*~
*.bak
*.swp
dwm
*.log
*.out
Mis parches
Yo utilizo varios parches, todos son oficiales y de la página oficial (sin embargo, tengo curiosidad por los parches de la comunidad, me encantaría recomendaciones).
Workflow
Swallow: reemplaza la terminal por la app lanzada (y la devuelve al cerrar).
Autostart: permite correr scripts al iniciar dwm.
RestartSig: reinicia dwm sin salir de la sesión.
MoveStack: reordena ventanas en el stack con atajos.
CycleLayouts: cambia layouts en secuencia.
AttachAside: las nuevas ventanas se abren junto a la master.
Pertag: cada tag guarda su layout/config.
Warp: mueve el puntero a la ventana seleccionada con teclado.
SaveFloats: recuerda posición/tamaño de ventanas flotantes.
MoveResize: mover/redimensionar flotantes con teclado.
RotateTags: recorrer tags hacia izquierda/derecha.
Estética
VanityGaps: gaps entre ventanas y layouts adicionales.
ActualFullScreen: fullscreen real para la ventana master.
NoBorder: oculta bordes si hay una sola ventana.
ColorBar: cambia fg/bg de elementos de la barra.
Status2d: colores en el statusbar con secuencias.
UnderlineTags: subraya el tag activo.
Notitle: quita títulos en la barra.
BarHeight: ajustar altura de la barra.
BarPadding: padding extra en la barra.
AlwaysCenter: las flotantes aparecen centradas.
Xresources: manejar opciones desde ‘$XDG_CONFIG_HOME/X11/Xresources’.
TagColorScheme: esquema de color para tags en lugar de cajas.
ToggleFloatingCenter: atajo para centrar flotantes.
En total llevo 24 parches en ~3 meses. Los conflictos fueron mínimos (normalmente variables no definidas o me olvidaba eliminar config.h).
Sé que en suckless no gustan mucho los “tutoriales”, pero espero que esto le sirva a alguien que empiece con dwm. Y si tienen recomendaciones de parches de la comunidad, ¡me encantaría probarlos!
Para aclarar, para mi statusbar utilizo ‘dwmblocks-sync’, suckless.org lo recomienda, solamente necesitas poner dwmblocks & en tu .xinitrc y funciona perfecto con scripts.
Más adelante voy a hacer un repo con los scripts con todo.
Si tengo algún error, por favor denme su feedback para mejorar este post.
Soy una persona muy meticulosa y minimalista en cuanto a programación y computación se refiere. Por lo que no suelo recargar demasiado, a no ser que tenga una certeza cuasi absoluta de la mejora, funcional o estética, que esté aplicando. Por ello, suelo mantener alguna copia “lab” para ir implementando parches y poder probarlos un tiempo antes de aplicarlos a mi clon del repositorio.
Por ello, voy a indicar lo que utilizo como base y considero fundamentales, en función claro está de mi utilización del sistema.
Primero, indicaré los parches estéticos con una brevísima descripción:
actualfullscreen: Alterna la pantalla completa para una ventana, en lugar de alternar la barra de estado y el diseño monocle2.
titlecolor: Añade un nuevo esquema de color utilizado por el título de la ventana en la barra, de modo que sus colores (primer plano y fondo) se pueden cambiar de forma independiente.
noborderfloating: Elimina el borde cuando sólo haya una ventana visible.
Y a continuación parches funcionales:
movestack: Permite mover clientes en la pila e intercambiarlos con el maestro.
pertag: Mantiene layout, mwfact, barpos y nmaster por etiqueta (tag).