centralized/externalized configuration to config.h
a73a8828
9 file(s) · +171 −106
| 18 | 18 | ||
| 19 | 19 | make clean install |
|
| 20 | 20 | ||
| 21 | + | If you want to use a customized config.h, you can use the following |
|
| 22 | + | command for installing dwm: |
|
| 23 | + | ||
| 24 | + | make CONFIG=<your-config>.h clean install |
|
| 25 | + | ||
| 21 | 26 | ||
| 22 | 27 | Running dwm |
|
| 23 | 28 | ----------- |
|
| 47 | 52 | ||
| 48 | 53 | Configuration |
|
| 49 | 54 | ------------- |
|
| 50 | - | The configuration of dwm is done by customizing its source code |
|
| 51 | - | (grep for the CUSTOMIZE keyword). |
|
| 55 | + | The configuration of dwm is done by editing config.h. |
|
| 1 | + | /* |
|
| 2 | + | * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> |
|
| 3 | + | * See LICENSE file for license details. |
|
| 4 | + | */ |
|
| 5 | + | ||
| 6 | + | #define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" |
|
| 7 | + | #define BGCOLOR "#0a2c2d" |
|
| 8 | + | #define FGCOLOR "#ddeeee" |
|
| 9 | + | #define BORDERCOLOR "#176164" |
|
| 10 | + | #define MODKEY Mod1Mask |
|
| 11 | + | #define NUMLOCKMASK Mod2Mask |
|
| 12 | + | #define MASTERW 52 /* percent */ |
|
| 13 | + | #define WM_PROTOCOL_DELWIN 1 |
|
| 14 | + | ||
| 15 | + | enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast }; |
|
| 16 | + | #define TAGS \ |
|
| 17 | + | char *tags[TLast] = { \ |
|
| 18 | + | [Tfnord] = "fnord", \ |
|
| 19 | + | [Tdev] = "dev", \ |
|
| 20 | + | [Tnet] = "net", \ |
|
| 21 | + | [Twork] = "work", \ |
|
| 22 | + | [Tmisc] = "misc", \ |
|
| 23 | + | }; |
|
| 24 | + | #define DEFTAG Tdev |
|
| 25 | + | ||
| 26 | + | ||
| 27 | + | #define CMDS \ |
|
| 28 | + | const char *browse[] = { "firefox", NULL }; \ |
|
| 29 | + | const char *gimp[] = { "gimp", NULL }; \ |
|
| 30 | + | const char *term[] = { \ |
|
| 31 | + | "urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white", \ |
|
| 32 | + | "-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL \ |
|
| 33 | + | }; \ |
|
| 34 | + | const char *xlock[] = { "xlock", NULL }; |
|
| 35 | + | ||
| 36 | + | #define KEYS \ |
|
| 37 | + | static Key key[] = { \ |
|
| 38 | + | /* modifier key function arguments */ \ |
|
| 39 | + | { MODKEY, XK_0, view, { .i = Tfnord } }, \ |
|
| 40 | + | { MODKEY, XK_1, view, { .i = Tdev } }, \ |
|
| 41 | + | { MODKEY, XK_2, view, { .i = Tnet } }, \ |
|
| 42 | + | { MODKEY, XK_3, view, { .i = Twork } }, \ |
|
| 43 | + | { MODKEY, XK_4, view, { .i = Tmisc} }, \ |
|
| 44 | + | { MODKEY, XK_h, viewprev, { 0 } }, \ |
|
| 45 | + | { MODKEY, XK_j, focusnext, { 0 } }, \ |
|
| 46 | + | { MODKEY, XK_k, focusprev, { 0 } }, \ |
|
| 47 | + | { MODKEY, XK_l, viewnext, { 0 } }, \ |
|
| 48 | + | { MODKEY, XK_m, togglemax, { 0 } }, \ |
|
| 49 | + | { MODKEY, XK_space, togglemode, { 0 } }, \ |
|
| 50 | + | { MODKEY, XK_Return, zoom, { 0 } }, \ |
|
| 51 | + | { MODKEY|ControlMask, XK_0, appendtag, { .i = Tfnord } }, \ |
|
| 52 | + | { MODKEY|ControlMask, XK_1, appendtag, { .i = Tdev } }, \ |
|
| 53 | + | { MODKEY|ControlMask, XK_2, appendtag, { .i = Tnet } }, \ |
|
| 54 | + | { MODKEY|ControlMask, XK_3, appendtag, { .i = Twork } }, \ |
|
| 55 | + | { MODKEY|ControlMask, XK_4, appendtag, { .i = Tmisc } }, \ |
|
| 56 | + | { MODKEY|ShiftMask, XK_0, replacetag, { .i = Tfnord } }, \ |
|
| 57 | + | { MODKEY|ShiftMask, XK_1, replacetag, { .i = Tdev } }, \ |
|
| 58 | + | { MODKEY|ShiftMask, XK_2, replacetag, { .i = Tnet } }, \ |
|
| 59 | + | { MODKEY|ShiftMask, XK_3, replacetag, { .i = Twork } }, \ |
|
| 60 | + | { MODKEY|ShiftMask, XK_4, replacetag, { .i = Tmisc } }, \ |
|
| 61 | + | { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ |
|
| 62 | + | { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ |
|
| 63 | + | { MODKEY|ShiftMask, XK_Return, spawn, { .argv = term } }, \ |
|
| 64 | + | { MODKEY|ShiftMask, XK_g, spawn, { .argv = gimp } }, \ |
|
| 65 | + | { MODKEY|ShiftMask, XK_l, spawn, { .argv = xlock } }, \ |
|
| 66 | + | { MODKEY|ShiftMask, XK_w, spawn, { .argv = browse } }, \ |
|
| 67 | + | }; |
|
| 68 | + | ||
| 69 | + | #define RULES \ |
|
| 70 | + | static Rule rule[] = { \ |
|
| 71 | + | /* class:instance tags isfloat */ \ |
|
| 72 | + | { "Firefox.*", { [Tnet] = "net" }, False }, \ |
|
| 73 | + | { "Gimp.*", { 0 }, True}, \ |
|
| 74 | + | }; |
|
| 75 | + | ||
| 76 | + | #define ARRANGE dotile |
| 1 | + | /* |
|
| 2 | + | * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> |
|
| 3 | + | * See LICENSE file for license details. |
|
| 4 | + | */ |
|
| 5 | + | ||
| 6 | + | #define FONT "fixed" |
|
| 7 | + | #define BGCOLOR "#666699" |
|
| 8 | + | #define FGCOLOR "#eeeeee" |
|
| 9 | + | #define BORDERCOLOR "#9999CC" |
|
| 10 | + | #define MODKEY Mod1Mask |
|
| 11 | + | #define NUMLOCKMASK Mod2Mask |
|
| 12 | + | #define MASTERW 52 /* percent */ |
|
| 13 | + | #define WM_PROTOCOL_DELWIN 1 |
|
| 14 | + | ||
| 15 | + | enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast }; |
|
| 16 | + | #define TAGS \ |
|
| 17 | + | char *tags[TLast] = { \ |
|
| 18 | + | [Tfnord] = "fnord", \ |
|
| 19 | + | [Tdev] = "dev", \ |
|
| 20 | + | [Tnet] = "net", \ |
|
| 21 | + | [Twork] = "work", \ |
|
| 22 | + | [Tmisc] = "misc", \ |
|
| 23 | + | }; |
|
| 24 | + | #define DEFTAG Tdev |
|
| 25 | + | ||
| 26 | + | ||
| 27 | + | #define CMDS \ |
|
| 28 | + | const char *term[] = { "xterm", NULL }; |
|
| 29 | + | ||
| 30 | + | #define KEYS \ |
|
| 31 | + | static Key key[] = { \ |
|
| 32 | + | /* modifier key function arguments */ \ |
|
| 33 | + | { MODKEY, XK_0, view, { .i = Tfnord } }, \ |
|
| 34 | + | { MODKEY, XK_1, view, { .i = Tdev } }, \ |
|
| 35 | + | { MODKEY, XK_2, view, { .i = Tnet } }, \ |
|
| 36 | + | { MODKEY, XK_3, view, { .i = Twork } }, \ |
|
| 37 | + | { MODKEY, XK_4, view, { .i = Tmisc} }, \ |
|
| 38 | + | { MODKEY, XK_h, viewprev, { 0 } }, \ |
|
| 39 | + | { MODKEY, XK_j, focusnext, { 0 } }, \ |
|
| 40 | + | { MODKEY, XK_k, focusprev, { 0 } }, \ |
|
| 41 | + | { MODKEY, XK_l, viewnext, { 0 } }, \ |
|
| 42 | + | { MODKEY, XK_m, togglemax, { 0 } }, \ |
|
| 43 | + | { MODKEY, XK_space, togglemode, { 0 } }, \ |
|
| 44 | + | { MODKEY, XK_Return, zoom, { 0 } }, \ |
|
| 45 | + | { MODKEY|ControlMask, XK_0, appendtag, { .i = Tfnord } }, \ |
|
| 46 | + | { MODKEY|ControlMask, XK_1, appendtag, { .i = Tdev } }, \ |
|
| 47 | + | { MODKEY|ControlMask, XK_2, appendtag, { .i = Tnet } }, \ |
|
| 48 | + | { MODKEY|ControlMask, XK_3, appendtag, { .i = Twork } }, \ |
|
| 49 | + | { MODKEY|ControlMask, XK_4, appendtag, { .i = Tmisc } }, \ |
|
| 50 | + | { MODKEY|ShiftMask, XK_0, replacetag, { .i = Tfnord } }, \ |
|
| 51 | + | { MODKEY|ShiftMask, XK_1, replacetag, { .i = Tdev } }, \ |
|
| 52 | + | { MODKEY|ShiftMask, XK_2, replacetag, { .i = Tnet } }, \ |
|
| 53 | + | { MODKEY|ShiftMask, XK_3, replacetag, { .i = Twork } }, \ |
|
| 54 | + | { MODKEY|ShiftMask, XK_4, replacetag, { .i = Tmisc } }, \ |
|
| 55 | + | { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, \ |
|
| 56 | + | { MODKEY|ShiftMask, XK_q, quit, { 0 } }, \ |
|
| 57 | + | { MODKEY|ShiftMask, XK_Return, spawn, { .argv = term } }, \ |
|
| 58 | + | }; |
|
| 59 | + | ||
| 60 | + | #define RULES \ |
|
| 61 | + | static Rule rule[] = { \ |
|
| 62 | + | /* class:instance tags isfloat */ \ |
|
| 63 | + | { "Firefox.*", { [Tnet] = "net" }, False }, \ |
|
| 64 | + | { "Gimp.*", { 0 }, True}, \ |
|
| 65 | + | }; |
|
| 66 | + | ||
| 67 | + | #define ARRANGE dotile |
| 12 | 12 | LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 |
|
| 13 | 13 | ||
| 14 | 14 | # flags |
|
| 15 | - | CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\" |
|
| 15 | + | CFLAGS = -O3 ${INCS} -DVERSION=\"${VERSION}\" -DCONFIG=\"${CONFIG}\" |
|
| 16 | 16 | LDFLAGS = ${LIBS} |
|
| 17 | - | #CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" |
|
| 17 | + | #CFLAGS = -g -Wall -O2 ${INCS} -DVERSION=\"${VERSION}\" -DCONFIG=\"${CONFIGH}\" |
|
| 18 | 18 | #LDFLAGS = -g ${LIBS} |
|
| 19 | 19 | ||
| 20 | 20 | # compiler |
|
| 22 | 22 | ||
| 23 | 23 | # dwm version |
|
| 24 | 24 | VERSION = 0.6 |
|
| 25 | + | ||
| 26 | + | # default config.h |
|
| 27 | + | CONFIG = config.h |
|
| 98 | 98 | while dragging |
|
| 99 | 99 | .SH CUSTOMIZATION |
|
| 100 | 100 | .B dwm |
|
| 101 | - | is customized through editing its source code. This keeps it fast, secure and |
|
| 102 | - | simple. The source code contains the |
|
| 103 | - | .I CUSTOMIZE |
|
| 104 | - | keyword to highlight relevant portions for customization. |
|
| 101 | + | is customized through editing config.h of the source code. This keeps it fast, |
|
| 102 | + | secure and simple. |
| 4 | 4 | */ |
|
| 5 | 5 | ||
| 6 | 6 | #include <X11/Xlib.h> |
|
| 7 | - | ||
| 8 | - | /* CUSTOMIZE */ |
|
| 9 | - | ||
| 10 | - | #define FONT "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*" |
|
| 11 | - | #define BGCOLOR "#0a2c2d" |
|
| 12 | - | #define FGCOLOR "#ddeeee" |
|
| 13 | - | #define BORDERCOLOR "#176164" |
|
| 14 | - | #define MODKEY Mod1Mask /* Mod4Mask */ |
|
| 15 | - | /* |
|
| 16 | - | #define BGCOLOR "#666699" |
|
| 17 | - | #define FGCOLOR "#eeeeee" |
|
| 18 | - | #define BORDERCOLOR "#9999CC" |
|
| 19 | - | */ |
|
| 20 | - | #define MASTERW 52 /* percent */ |
|
| 21 | - | #define WM_PROTOCOL_DELWIN 1 |
|
| 22 | - | ||
| 23 | - | /* tags */ |
|
| 24 | - | enum { Tfnord, Tdev, Tnet, Twork, Tmisc, TLast }; |
|
| 25 | - | ||
| 26 | - | /* END CUSTOMIZE */ |
|
| 7 | + | #include CONFIG |
|
| 27 | 8 | ||
| 28 | 9 | /* mask shorthands, used in event.c and client.c */ |
|
| 29 | 10 | #define ButtonMask (ButtonPressMask | ButtonReleaseMask) |
| 8 | 8 | #include <X11/keysym.h> |
|
| 9 | 9 | #include <X11/Xatom.h> |
|
| 10 | 10 | ||
| 11 | - | /* CUSTOMIZE */ |
|
| 11 | + | /* static */ |
|
| 12 | 12 | ||
| 13 | 13 | typedef struct { |
|
| 14 | 14 | unsigned long mod; |
|
| 17 | 17 | Arg arg; |
|
| 18 | 18 | } Key; |
|
| 19 | 19 | ||
| 20 | - | const char *browse[] = { "firefox", NULL }; |
|
| 21 | - | const char *gimp[] = { "gimp", NULL }; |
|
| 22 | - | const char *term[] = { /*"xterm", NULL };*/ |
|
| 23 | - | "urxvt", "-tr", "+sb", "-bg", "black", "-fg", "white", "-cr", "white", |
|
| 24 | - | "-fn", "-*-terminus-medium-*-*-*-13-*-*-*-*-*-iso10646-*", NULL |
|
| 25 | - | }; |
|
| 26 | - | const char *xlock[] = { "xlock", NULL }; |
|
| 27 | - | ||
| 28 | - | static Key key[] = { |
|
| 29 | - | /* modifier key function arguments */ |
|
| 30 | - | { MODKEY, XK_0, view, { .i = Tfnord } }, |
|
| 31 | - | { MODKEY, XK_1, view, { .i = Tdev } }, |
|
| 32 | - | { MODKEY, XK_2, view, { .i = Tnet } }, |
|
| 33 | - | { MODKEY, XK_3, view, { .i = Twork } }, |
|
| 34 | - | { MODKEY, XK_4, view, { .i = Tmisc} }, |
|
| 35 | - | { MODKEY, XK_h, viewprev, { 0 } }, |
|
| 36 | - | { MODKEY, XK_j, focusnext, { 0 } }, |
|
| 37 | - | { MODKEY, XK_k, focusprev, { 0 } }, |
|
| 38 | - | { MODKEY, XK_l, viewnext, { 0 } }, |
|
| 39 | - | { MODKEY, XK_m, togglemax, { 0 } }, |
|
| 40 | - | { MODKEY, XK_space, togglemode, { 0 } }, |
|
| 41 | - | { MODKEY, XK_Return, zoom, { 0 } }, |
|
| 42 | - | { MODKEY|ControlMask, XK_0, appendtag, { .i = Tfnord } }, |
|
| 43 | - | { MODKEY|ControlMask, XK_1, appendtag, { .i = Tdev } }, |
|
| 44 | - | { MODKEY|ControlMask, XK_2, appendtag, { .i = Tnet } }, |
|
| 45 | - | { MODKEY|ControlMask, XK_3, appendtag, { .i = Twork } }, |
|
| 46 | - | { MODKEY|ControlMask, XK_4, appendtag, { .i = Tmisc } }, |
|
| 47 | - | { MODKEY|ShiftMask, XK_0, replacetag, { .i = Tfnord } }, |
|
| 48 | - | { MODKEY|ShiftMask, XK_1, replacetag, { .i = Tdev } }, |
|
| 49 | - | { MODKEY|ShiftMask, XK_2, replacetag, { .i = Tnet } }, |
|
| 50 | - | { MODKEY|ShiftMask, XK_3, replacetag, { .i = Twork } }, |
|
| 51 | - | { MODKEY|ShiftMask, XK_4, replacetag, { .i = Tmisc } }, |
|
| 52 | - | { MODKEY|ShiftMask, XK_c, killclient, { 0 } }, |
|
| 53 | - | { MODKEY|ShiftMask, XK_q, quit, { 0 } }, |
|
| 54 | - | { MODKEY|ShiftMask, XK_Return, spawn, { .argv = term } }, |
|
| 55 | - | { MODKEY|ShiftMask, XK_g, spawn, { .argv = gimp } }, |
|
| 56 | - | { MODKEY|ShiftMask, XK_l, spawn, { .argv = xlock } }, |
|
| 57 | - | { MODKEY|ShiftMask, XK_w, spawn, { .argv = browse } }, |
|
| 58 | - | }; |
|
| 20 | + | CMDS |
|
| 21 | + | KEYS |
|
| 59 | 22 | ||
| 60 | - | #define NumLockMask Mod2Mask |
|
| 61 | - | unsigned int valid_mask = 255 & ~( NumLockMask | LockMask); |
|
| 62 | - | ||
| 63 | - | /* END CUSTOMIZE */ |
|
| 64 | - | ||
| 65 | - | /* static */ |
|
| 23 | + | static unsigned int valid_mask = 255 & ~(NUMLOCKMASK | LockMask); |
|
| 66 | 24 | ||
| 67 | 25 | static void |
|
| 68 | 26 | movemouse(Client *c) |
|
| 381 | 339 | for(i = 0; i < len; i++) { |
|
| 382 | 340 | code = XKeysymToKeycode(dpy, key[i].keysym); |
|
| 383 | 341 | XUngrabKey(dpy, code, key[i].mod, root); |
|
| 384 | - | if (NumLockMask) |
|
| 385 | - | { |
|
| 386 | - | XUngrabKey(dpy, code, key[i].mod | NumLockMask, root); |
|
| 387 | - | XUngrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root); |
|
| 388 | - | } |
|
| 342 | + | XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root); |
|
| 343 | + | XUngrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root); |
|
| 389 | 344 | XGrabKey(dpy, code, key[i].mod, root, True, |
|
| 390 | 345 | GrabModeAsync, GrabModeAsync); |
|
| 391 | - | if (NumLockMask) |
|
| 392 | - | { |
|
| 393 | - | XGrabKey(dpy, code, key[i].mod | NumLockMask, root, True, |
|
| 394 | - | GrabModeAsync, GrabModeAsync); |
|
| 395 | - | XGrabKey(dpy, code, key[i].mod | NumLockMask | LockMask, root, True, |
|
| 396 | - | GrabModeAsync, GrabModeAsync); |
|
| 397 | - | } |
|
| 346 | + | XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK, root, True, |
|
| 347 | + | GrabModeAsync, GrabModeAsync); |
|
| 348 | + | XGrabKey(dpy, code, key[i].mod | NUMLOCKMASK | LockMask, root, True, |
|
| 349 | + | GrabModeAsync, GrabModeAsync); |
|
| 398 | 350 | } |
|
| 399 | 351 | } |
|
| 85 | 85 | /* extern */ |
|
| 86 | 86 | ||
| 87 | 87 | char stext[1024]; |
|
| 88 | - | /* CUSTOMIZE */ |
|
| 89 | - | int tsel = Tdev; /* default tag */ |
|
| 90 | - | /* END CUSTOMIZE */ |
|
| 88 | + | int tsel = DEFTAG; |
|
| 91 | 89 | int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; |
|
| 92 | 90 | Atom wmatom[WMLast], netatom[NetLast]; |
|
| 93 | 91 | Bool running = True; |
| 18 | 18 | Bool isfloat; |
|
| 19 | 19 | } Rule; |
|
| 20 | 20 | ||
| 21 | - | /* CUSTOMIZE */ |
|
| 22 | - | static Rule rule[] = { |
|
| 23 | - | /* class:instance tags isfloat */ |
|
| 24 | - | { "Firefox.*", { [Tnet] = "net" }, False }, |
|
| 25 | - | { "Gimp.*", { 0 }, True}, |
|
| 26 | - | }; |
|
| 27 | - | ||
| 28 | - | char *tags[TLast] = { |
|
| 29 | - | [Tfnord] = "fnord", |
|
| 30 | - | [Tdev] = "dev", |
|
| 31 | - | [Tnet] = "net", |
|
| 32 | - | [Twork] = "work", |
|
| 33 | - | [Tmisc] = "misc", |
|
| 34 | - | }; |
|
| 35 | - | ||
| 36 | - | void (*arrange)(Arg *) = dotile; |
|
| 21 | + | TAGS |
|
| 22 | + | RULES |
|
| 37 | 23 | ||
| 38 | - | /* END CUSTOMIZE */ |
|
| 24 | + | void (*arrange)(Arg *) = ARRANGE; |
|
| 39 | 25 | ||
| 40 | 26 | /* extern */ |
|
| 41 | 27 |