sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit def4db38eb91ceb524c2467f1852c25099de5d46
parent 268e461b231115a42ce16e60ac7b48e7b6386b80
Author: faradayawerty <faradayawerty@gmail.com>
Date:   Sun, 21 Dec 2025 17:55:17 +0300

[dwm][patches][flyschemes] a new patch for changing colorschemes on the fly

Diffstat:
Adwm.suckless.org/patches/flyschemes/dwm-flyschemes-6.6-alpha.diff | 207+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/flyschemes/dwm-flyschemes-6.6.diff | 204+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adwm.suckless.org/patches/flyschemes/index.md | 15+++++++++++++++
3 files changed, 426 insertions(+), 0 deletions(-)

diff --git a/dwm.suckless.org/patches/flyschemes/dwm-flyschemes-6.6-alpha.diff b/dwm.suckless.org/patches/flyschemes/dwm-flyschemes-6.6-alpha.diff @@ -0,0 +1,207 @@ +diff -up dwm-6.6-alpha/config.def.h dwm-6.6-flyschemes-alpha/config.def.h +--- dwm-6.6-alpha/config.def.h 2025-12-21 17:07:31.747211857 +0300 ++++ dwm-6.6-flyschemes-alpha/config.def.h 2025-12-21 17:17:13.773890266 +0300 +@@ -9,17 +9,64 @@ static const char *fonts[] = { + static const char dmenufont[] = "monospace:size=10"; + static unsigned int baralpha = 0xd0; + static unsigned int borderalpha = OPAQUE; +-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] = { +- /* fg bg border */ +- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, +- [SchemeSel] = { col_gray4, col_cyan, col_cyan }, ++ ++/* loaded on dwm launch, has to be present */ ++static const char *flyscheme_default[][3] = { ++ [SchemeNorm] = { "#bbbbbb", "#222222", "#444444" }, ++ [SchemeSel] = { "#eeeeee", "#005577", "#005577" }, ++}; ++ ++static const char *flyscheme_dracula[][3] = { ++ [SchemeNorm] = { "#f8f8f2", "#282a36", "#44475a" }, ++ [SchemeSel] = { "#282a36", "#bd93f9", "#bd93f9" }, ++}; ++ ++static const char *flyscheme_solarized[][3] = { ++ [SchemeNorm] = { "#839496", "#002b36", "#073642" }, ++ [SchemeSel] = { "#002b36", "#2aa198", "#2aa198" }, ++}; ++ ++static const char *flyscheme_nord[][3] = { ++ [SchemeNorm] = { "#d8dee9", "#2e3440", "#4c566a" }, ++ [SchemeSel] = { "#2e3440", "#88c0d0", "#88c0d0" }, ++}; ++ ++static const char *flyscheme_gruvbox[][3] = { ++ [SchemeNorm] = { "#ebdbb2", "#282828", "#3c3836" }, ++ [SchemeSel] = { "#282828", "#fabd2f", "#fabd2f" }, + }; + ++static const char *flyscheme_light[][3] = { ++ [SchemeNorm] = { "#222222", "#eeeeee", "#cccccc" }, ++ [SchemeSel] = { "#ffffff", "#4a90e2", "#4a90e2" }, ++}; ++ ++static const char *flyscheme_plan9[][3] = { ++ [SchemeNorm] = { "#000000", "#ffffea", "#999999" }, ++ [SchemeSel] = { "#000000", "#9ecfff", "#9ecfff" }, ++}; ++ ++static const char *flyscheme_cyberpunk[][3] = { ++ [SchemeNorm] = { "#00ffcc", "#0d0221", "#1d1231" }, ++ [SchemeSel] = { "#0d0221", "#ff00aa", "#ff00aa" }, ++}; ++ ++/* you can move the schemes to a different header and do #include "flyschemes.h" ++ * or you can move each scheme to its own file ++ * and do #include flyscheme_light.h, #include flyscheme_plan9.h, ... */ ++ ++static const char *(*flyschemes[])[3] = { ++ flyscheme_default, ++ flyscheme_light, ++ flyscheme_plan9, ++ flyscheme_dracula, ++ flyscheme_solarized, ++ flyscheme_nord, ++ flyscheme_gruvbox, ++ flyscheme_cyberpunk, ++ NULL // used to count the number of flyschemes ++ }; ++ + /* tagging */ + static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + +@@ -59,7 +106,16 @@ 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", "#222222", /* changed as dmenucmd[6] in cycle_flyschemes */ ++ "-nf", "#bbbbbb", /* changed as dmenucmd[8] in cycle_flyschemes */ ++ "-sb", "#005577", /* changed as dmenucmd[10] in cycle_flyschemes */ ++ "-sf", "$eeeeee", /* changed as dmenucmd[12] in cycle_flyschemes */ ++ NULL ++}; + static const char *termcmd[] = { "st", NULL }; + + static const Key keys[] = { +@@ -75,7 +131,9 @@ 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_c, cycle_flyschemes, { .i = +1 } }, ++ { MODKEY|ShiftMask, XK_c, cycle_flyschemes, { .i = -1 } }, + { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, + { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, +diff -up dwm-6.6-alpha/dwm.1 dwm-6.6-flyschemes-alpha/dwm.1 +--- dwm-6.6-alpha/dwm.1 2025-12-18 12:11:49.852471883 +0300 ++++ dwm-6.6-flyschemes-alpha/dwm.1 2025-12-21 17:12:23.410551062 +0300 +@@ -113,9 +113,15 @@ Decrease master area size. + .B Mod1\-Return + Zooms/cycles focused window to/from master area (tiled layouts only). + .TP +-.B Mod1\-Shift\-c ++.B Mod1\-Shift\-x + Close focused window. + .TP ++.B Mod1\-c ++Cycle flyscheme. ++.TP ++.B Mod1\-Shift\-c ++Cycle flyscheme back. ++.TP + .B Mod1\-Shift\-space + Toggle focused window between tiled and floating state. + .TP +diff -up dwm-6.6-alpha/dwm.c dwm-6.6-flyschemes-alpha/dwm.c +--- dwm-6.6-alpha/dwm.c 2025-12-21 17:07:31.747211857 +0300 ++++ dwm-6.6-flyschemes-alpha/dwm.c 2025-12-21 17:19:34.253893111 +0300 +@@ -143,6 +143,8 @@ typedef struct { + } Rule; + + /* function declarations */ ++static void cycle_flyschemes(const Arg *arg); ++static 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); +@@ -237,6 +239,7 @@ static void xinitvisual(void); + static void zoom(const Arg *arg); + + /* variables */ ++static unsigned int iflysch = 0; + static const char broken[] = "broken"; + static char stext[256]; + static int screen; +@@ -492,7 +495,7 @@ cleanup(void) + cleanupmon(mons); + for (i = 0; i < CurLast; i++) + drw_cur_free(drw, cursor[i]); +- for (i = 0; i < LENGTH(colors); i++) ++ for (i = 0; i < LENGTH(flyscheme_default); i++) + free(scheme[i]); + free(scheme); + XDestroyWindow(dpy, wmcheckwin); +@@ -1591,10 +1594,10 @@ setup(void) + cursor[CurResize] = drw_cur_create(drw, XC_sizing); + cursor[CurMove] = drw_cur_create(drw, XC_fleur); + /* init appearance */ +- scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); + unsigned int alphas[] = {borderalpha, baralpha, OPAQUE}; +- for (i = 0; i < LENGTH(colors); i++) +- scheme[i] = drw_scm_create(drw, colors[i], alphas, 3); ++ scheme = ecalloc(LENGTH(flyscheme_default), sizeof(Clr *)); ++ for (i = 0; i < LENGTH(flyscheme_default); i++) ++ scheme[i] = drw_scm_create(drw, flyscheme_default[i], alphas, 3); + /* init bars */ + updatebars(); + updatestatus(); +@@ -2187,6 +2190,37 @@ zoom(const Arg *arg) + pop(c); + } + ++void ++update_scheme() ++{ ++ unsigned int alphas[] = {borderalpha, baralpha, OPAQUE}; ++ scheme[SchemeNorm] = drw_scm_create(drw, flyschemes[iflysch][SchemeNorm], alphas, 3); ++ scheme[SchemeSel] = drw_scm_create(drw, flyschemes[iflysch][SchemeSel], alphas, 3); ++ dmenucmd[6] = flyschemes[iflysch][SchemeNorm][1]; ++ dmenucmd[8] = flyschemes[iflysch][SchemeNorm][0]; ++ dmenucmd[10] = flyschemes[iflysch][SchemeSel][1]; ++ dmenucmd[12] = flyschemes[iflysch][SchemeSel][0]; ++ Client *cl = selmon->sel; ++ Client *c; ++ Monitor *m; ++ for (m = mons; m; m = m->next) ++ for (c = m->clients; c; c = c->next) ++ focus(c); ++ focus(cl); ++} ++ ++void ++cycle_flyschemes(const Arg *arg) ++{ ++ int flyschemes_limit = 256; ++ int i; ++ for(i = 0; flyschemes[i] != NULL && i < flyschemes_limit; i++) ++ ; ++ iflysch += i + arg->i; ++ iflysch %= i; ++ update_scheme(); ++} ++ + int + main(int argc, char *argv[]) + { diff --git a/dwm.suckless.org/patches/flyschemes/dwm-flyschemes-6.6.diff b/dwm.suckless.org/patches/flyschemes/dwm-flyschemes-6.6.diff @@ -0,0 +1,204 @@ +diff -up dwm-6.6-orig/config.def.h dwm-6.6-flyschemes/config.def.h +--- dwm-6.6-orig/config.def.h 2025-12-18 12:11:49.852471883 +0300 ++++ dwm-6.6-flyschemes/config.def.h 2025-12-21 16:55:25.337197189 +0300 +@@ -7,15 +7,64 @@ 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] = { ++ ++/* loaded on dwm launch, has to be present */ ++static const char *flyscheme_default[][3] = { + /* fg bg border */ +- [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, +- [SchemeSel] = { col_gray4, col_cyan, col_cyan }, ++ [SchemeNorm] = { "#bbbbbb", "#222222", "#444444" }, ++ [SchemeSel] = { "#eeeeee", "#005577", "#005577" }, ++}; ++ ++static const char *flyscheme_dracula[][3] = { ++ [SchemeNorm] = { "#f8f8f2", "#282a36", "#44475a" }, ++ [SchemeSel] = { "#282a36", "#bd93f9", "#bd93f9" }, ++}; ++ ++static const char *flyscheme_solarized[][3] = { ++ [SchemeNorm] = { "#839496", "#002b36", "#073642" }, ++ [SchemeSel] = { "#002b36", "#2aa198", "#2aa198" }, ++}; ++ ++static const char *flyscheme_nord[][3] = { ++ [SchemeNorm] = { "#d8dee9", "#2e3440", "#4c566a" }, ++ [SchemeSel] = { "#2e3440", "#88c0d0", "#88c0d0" }, ++}; ++ ++static const char *flyscheme_gruvbox[][3] = { ++ [SchemeNorm] = { "#ebdbb2", "#282828", "#3c3836" }, ++ [SchemeSel] = { "#282828", "#fabd2f", "#fabd2f" }, ++}; ++ ++static const char *flyscheme_light[][3] = { ++ [SchemeNorm] = { "#222222", "#eeeeee", "#cccccc" }, ++ [SchemeSel] = { "#ffffff", "#4a90e2", "#4a90e2" }, ++}; ++ ++static const char *flyscheme_plan9[][3] = { ++ [SchemeNorm] = { "#000000", "#ffffea", "#999999" }, ++ [SchemeSel] = { "#000000", "#9ecfff", "#9ecfff" }, ++}; ++ ++static const char *flyscheme_cyberpunk[][3] = { ++ [SchemeNorm] = { "#00ffcc", "#0d0221", "#1d1231" }, ++ [SchemeSel] = { "#0d0221", "#ff00aa", "#ff00aa" }, ++}; ++ ++/* ++ * you can move the schemes to a different header and do #include "flyschemes.h" ++ * or you can move each scheme to its own file and do #include flyscheme_light.h, #include flyscheme_plan9.h, ... ++ * */ ++ ++static const char *(*flyschemes[])[3] = { ++ flyscheme_default, ++ flyscheme_light, ++ flyscheme_plan9, ++ flyscheme_dracula, ++ flyscheme_solarized, ++ flyscheme_nord, ++ flyscheme_gruvbox, ++ flyscheme_cyberpunk, ++ NULL // used to count the number of flyschemes + }; + + /* tagging */ +@@ -57,7 +106,16 @@ 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", "#222222", /* changed as dmenucmd[6] in cycle_flyschemes */ ++ "-nf", "#bbbbbb", /* changed as dmenucmd[8] in cycle_flyschemes */ ++ "-sb", "#005577", /* changed as dmenucmd[10] in cycle_flyschemes */ ++ "-sf", "$eeeeee", /* changed as dmenucmd[12] in cycle_flyschemes */ ++ NULL ++}; + static const char *termcmd[] = { "st", NULL }; + + static const Key keys[] = { +@@ -73,7 +131,9 @@ 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_c, cycle_flyschemes, { .i = +1 } }, ++ { MODKEY|ShiftMask, XK_c, cycle_flyschemes, { .i = -1 } }, + { MODKEY, XK_t, setlayout, {.v = &layouts[0]} }, + { MODKEY, XK_f, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_m, setlayout, {.v = &layouts[2]} }, +diff -up dwm-6.6-orig/dwm.1 dwm-6.6-flyschemes/dwm.1 +--- dwm-6.6-orig/dwm.1 2025-12-18 12:11:49.852471883 +0300 ++++ dwm-6.6-flyschemes/dwm.1 2025-12-21 11:59:37.963510226 +0300 +@@ -113,9 +113,15 @@ Decrease master area size. + .B Mod1\-Return + Zooms/cycles focused window to/from master area (tiled layouts only). + .TP +-.B Mod1\-Shift\-c ++.B Mod1\-Shift\-x + Close focused window. + .TP ++.B Mod1\-c ++Cycle flyscheme. ++.TP ++.B Mod1\-Shift\-c ++Cycle flyscheme back. ++.TP + .B Mod1\-Shift\-space + Toggle focused window between tiled and floating state. + .TP +diff -up dwm-6.6-orig/dwm.c dwm-6.6-flyschemes/dwm.c +--- dwm-6.6-orig/dwm.c 2025-12-18 12:11:49.852471883 +0300 ++++ dwm-6.6-flyschemes/dwm.c 2025-12-21 16:54:13.313862415 +0300 +@@ -141,6 +141,8 @@ typedef struct { + } Rule; + + /* function declarations */ ++static void cycle_flyschemes(const Arg *arg); ++static 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); +@@ -234,6 +236,7 @@ static int xerrorstart(Display *dpy, XEr + static void zoom(const Arg *arg); + + /* variables */ ++static unsigned int iflysch = 0; + static const char broken[] = "broken"; + static char stext[256]; + static int screen; +@@ -485,7 +488,7 @@ cleanup(void) + cleanupmon(mons); + for (i = 0; i < CurLast; i++) + drw_cur_free(drw, cursor[i]); +- for (i = 0; i < LENGTH(colors); i++) ++ for (i = 0; i < LENGTH(flyscheme_default); i++) + free(scheme[i]); + free(scheme); + XDestroyWindow(dpy, wmcheckwin); +@@ -1583,9 +1586,9 @@ setup(void) + cursor[CurResize] = drw_cur_create(drw, XC_sizing); + cursor[CurMove] = drw_cur_create(drw, XC_fleur); + /* init appearance */ +- scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); +- for (i = 0; i < LENGTH(colors); i++) +- scheme[i] = drw_scm_create(drw, colors[i], 3); ++ scheme = ecalloc(LENGTH(flyscheme_default), sizeof(Clr *)); ++ for (i = 0; i < LENGTH(flyscheme_default); i++) ++ scheme[i] = drw_scm_create(drw, flyscheme_default[i], 3); + /* init bars */ + updatebars(); + updatestatus(); +@@ -2139,6 +2142,36 @@ zoom(const Arg *arg) + pop(c); + } + ++void ++update_scheme() ++{ ++ scheme[SchemeNorm] = drw_scm_create(drw, flyschemes[iflysch][SchemeNorm], 3); ++ scheme[SchemeSel] = drw_scm_create(drw, flyschemes[iflysch][SchemeSel], 3); ++ dmenucmd[6] = flyschemes[iflysch][SchemeNorm][1]; ++ dmenucmd[8] = flyschemes[iflysch][SchemeNorm][0]; ++ dmenucmd[10] = flyschemes[iflysch][SchemeSel][1]; ++ dmenucmd[12] = flyschemes[iflysch][SchemeSel][0]; ++ Client *cl = selmon->sel; ++ Client *c; ++ Monitor *m; ++ for (m = mons; m; m = m->next) ++ for (c = m->clients; c; c = c->next) ++ focus(c); ++ focus(cl); ++} ++ ++void ++cycle_flyschemes(const Arg *arg) ++{ ++ int flyschemes_limit = 256; ++ int i; ++ for(i = 0; flyschemes[i] != NULL && i < flyschemes_limit; i++) ++ ; ++ iflysch += i + arg->i; ++ iflysch %= i; ++ update_scheme(); ++} ++ + int + main(int argc, char *argv[]) + { diff --git a/dwm.suckless.org/patches/flyschemes/index.md b/dwm.suckless.org/patches/flyschemes/index.md @@ -0,0 +1,15 @@ +flyschemes +========== + +The patch allows users to change the DWM panel and dmenu colorschemes on the fly. +Eight schemes are available by default, but more can be added. + +Download +-------- +* [dwm-flyschemes-6.6.diff](dwm-flyschemes-6.6.diff) +* [dwm-flyschemes-alpha-6.6.diff](dwm-flyschemes-6.6-alpha.diff) - for alpha users + +Authors +------- +* [faradayawerty](https://faradayawerty.neocities.org) - [faradayawerty@gmail.com](mailto:faradayawerty@gmail.com) +