add the flycolors patch for changing colors on the fly - sites - public wiki contents of suckless.org
HTML git clone git://git.suckless.org/sites
DIR Log
DIR Files
DIR Refs
---
DIR commit 4a76edac7e75afcfe29fe4f71df0570cd3740f45
DIR parent 8350820566a1bd3129e1fdb8fc115a3a2d2e6161
HTML Author: faradayawerty <faradayawerty@gmail.com>
Date: Thu, 18 Dec 2025 13:03:44 +0300
add the flycolors patch for changing colors on the fly
Diffstat:
A dwm.suckless.org/patches/flycolors… | 152 +++++++++++++++++++++++++++++++
A dwm.suckless.org/patches/flycolors… | 15 +++++++++++++++
2 files changed, 167 insertions(+), 0 deletions(-)
---
DIR diff --git a/dwm.suckless.org/patches/flycolors/dwm-flycolors-6.6.diff b/dwm.suckless.org/patches/flycolors/dwm-flycolors-6.6.diff
@@ -0,0 +1,152 @@
+diff -up dwm-6.6-orig/config.def.h dwm-6.6/config.def.h
+--- dwm-6.6-orig/config.def.h 2025-12-18 12:11:49.852471883 +0300
++++ dwm-6.6/config.def.h 2025-12-18 12:31:53.032438383 +0300
+@@ -7,15 +7,37 @@ static const int showbar = 1;
+ static const int topbar = 1; /* 0 means bottom bar */
+ static const char *fonts[] = { "monospace:size=10" };
+ static const char dmenufont[] = "monospace:size=10";
+-static const char col_gray1[] = "#222222";
+-static const char col_gray2[] = "#444444";
+-static const char col_gray3[] = "#bbbbbb";
+-static const char col_gray4[] = "#eeeeee";
+-static const char col_cyan[] = "#005577";
+-static const char *colors[][3] = {
++
++static char col_gray1[] = "#222222";
++static char col_gray2[] = "#444444";
++static char col_gray3[] = "#bbbbbb";
++static char col_gray4[] = "#eeeeee";
++
++#define COLOR_RED "#771111"
++#define COLOR_GREEN "#117755"
++#define COLOR_YELLOW "#aa7711"
++#define COLOR_MAGENTA "#551177"
++#define COLOR_BLUE "#005577"
++#define COLOR_GRAY "#666666"
++#define COLOR_PINK "#aa1177"
++
++static char *cols[] = {
++ COLOR_GRAY,
++ COLOR_BLUE,
++ COLOR_GREEN,
++ COLOR_YELLOW,
++ COLOR_PINK,
++ COLOR_MAGENTA,
++ COLOR_RED,
++ NULL // used to count the number of colors
++};
++
++static int current_main_col = 0;
++
++static char *colors[][3] = {
+ /* fg bg border */
+ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 },
+- [SchemeSel] = { col_gray4, col_cyan, col_cyan },
++ [SchemeSel] = { col_gray4, COLOR_GRAY, COLOR_GRAY },
+ };
+
+ /* tagging */
+@@ -57,13 +79,15 @@ static const Layout layouts[] = {
+
+ /* commands */
+ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */
+-static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", col_cyan, "-sf", col_gray4, NULL };
++static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_gray1, "-nf", col_gray3, "-sb", COLOR_GRAY, "-sf", col_gray4, NULL };
+ static const char *termcmd[] = { "st", NULL };
+
+ static const Key keys[] = {
+ /* modifier key function argument */
+ { MODKEY, XK_p, spawn, {.v = dmenucmd } },
+ { MODKEY|ShiftMask, XK_Return, spawn, {.v = termcmd } },
++ { MODKEY, XK_c, cycle_main_col, { .i = +1 } },
++ { MODKEY|ShiftMask, XK_c, cycle_main_col, { .i = -1 } },
+ { MODKEY, XK_b, togglebar, {0} },
+ { MODKEY, XK_j, focusstack, {.i = +1 } },
+ { MODKEY, XK_k, focusstack, {.i = -1 } },
+@@ -73,7 +97,7 @@ static const Key keys[] = {
+ { MODKEY, XK_l, setmfact, {.f = +0.05} },
+ { MODKEY, XK_Return, zoom, {0} },
+ { MODKEY, XK_Tab, view, {0} },
+- { MODKEY|ShiftMask, XK_c, killclient, {0} },
++ { MODKEY|ShiftMask, XK_x, killclient, {0} },
+ { MODKEY, XK_t, setlayout, {.v = &layouts[0]} },
+ { MODKEY, XK_f, setlayout, {.v = &layouts[1]} },
+ { MODKEY, XK_m, setlayout, {.v = &layouts[2]} },
+Only in dwm-6.6: config.h
+diff -up dwm-6.6-orig/drw.c dwm-6.6/drw.c
+--- dwm-6.6-orig/drw.c 2025-12-18 12:11:49.852471883 +0300
++++ dwm-6.6/drw.c 2025-12-18 12:22:22.002454267 +0300
+@@ -181,7 +181,7 @@ drw_clr_create(Drw *drw, Clr *dest, cons
+ /* Wrapper to create color schemes. The caller has to call free(3) on the
+ * returned color scheme when done using it. */
+ Clr *
+-drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
++drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount)
+ {
+ size_t i;
+ Clr *ret;
+diff -up dwm-6.6-orig/drw.h dwm-6.6/drw.h
+--- dwm-6.6-orig/drw.h 2025-12-18 12:11:49.852471883 +0300
++++ dwm-6.6/drw.h 2025-12-18 12:22:46.195786922 +0300
+@@ -40,7 +40,7 @@ void drw_font_getexts(Fnt *font, const c
+
+ /* Colorscheme abstraction */
+ void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
+-Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount);
++Clr *drw_scm_create(Drw *drw, char *clrnames[], size_t clrcount);
+
+ /* Cursor abstraction */
+ Cur *drw_cur_create(Drw *drw, int shape);
+diff -up dwm-6.6-orig/dwm.c dwm-6.6/dwm.c
+--- dwm-6.6-orig/dwm.c 2025-12-18 12:11:49.852471883 +0300
++++ dwm-6.6/dwm.c 2025-12-18 12:30:47.889106861 +0300
+@@ -141,6 +141,9 @@ typedef struct {
+ } Rule;
+
+ /* function declarations */
++int col_count();
++void cycle_main_col();
++void update_scheme();
+ static void applyrules(Client *c);
+ static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
+ static void arrange(Monitor *m);
+@@ -2139,6 +2142,39 @@ zoom(const Arg *arg)
+ pop(c);
+ }
+
++int col_count()
++{
++ int i;
++ for(i = 0; cols[i] != NULL; i++)
++ ;
++ return i;
++}
++
++void
++update_scheme()
++{
++ Client *c = selmon->sel;
++ for (int i = 0; i < LENGTH(colors); i++)
++ scheme[i] = drw_scm_create(drw, colors[i], 3);
++ focus(c);
++ drawbars();
++}
++
++void cycle_main_col(const Arg *arg)
++{
++ current_main_col += arg->i;
++ int cols_count = col_count();
++ if(current_main_col < 0)
++ current_main_col += cols_count;
++ if(current_main_col > cols_count)
++ current_main_col += cols_count;
++ int i = current_main_col % cols_count;
++ colors[SchemeSel][1] = cols[i];
++ colors[SchemeSel][2] = cols[i];
++ update_scheme();
++ dmenucmd[10] = cols[i];
++}
++
+ int
+ main(int argc, char *argv[])
+ {
DIR diff --git a/dwm.suckless.org/patches/flycolors/index.md b/dwm.suckless.org/patches/flycolors/index.md
@@ -0,0 +1,15 @@
+flycolors
+======
+The patch allows its user to change dwm panel and dmenu colors on the fly.
+Seven colors are available by default, but you can add more.
+The colors are gray, blue, green, yellow, purple, magenta, red.
+
+Download
+--------
+* [dwm-flycolors-6.6.diff](dwm-flycolors-6.6.diff)
+
+
+Authors
+-------
+* [faradayawerty](https://faradayawerty.neocities.org) - [faradayawerty@gmail.com](mailto:faradayawerty@gmail.com)
+