dwm

my dwm build
git clone https://git.afify.dev/dwm.git
Log | Files | Refs | README | LICENSE

commit df554e4aa5e1691b219644412185964c0008e528
parent 6613d9f9a1a5630bab30bc2b70bdc793977073ee
Author: afify <hassan@afify.dev>
Date:   Sat,  4 Jun 2022 12:33:28 +0300

[feat] my configs

Diffstat:
Aconfig.h | 175+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mconfig.mk | 2+-
Mdwm.c | 37+++++++++++++++++++++++++++++++++----
3 files changed, 209 insertions(+), 5 deletions(-)

diff --git a/config.h b/config.h @@ -0,0 +1,175 @@ +/* See LICENSE file for copyright and license details. */ + +/* appearance */ +static const unsigned int borderpx = 1; +static const unsigned int snap = 32; +static const int showbar = 1; +static const int topbar = 1; +static const char *fonts[] = { "Terminus:pixelsize=22" }; +static const char dmenufont[] = "Terminus:pixelsize=22"; +static const char col_black[] = "#000000"; +static const char col_gray1[] = "#222222"; +static const char col_gray2[] = "#444444"; +static const char col_ng1[] = "#504945"; +static const char col_gray3[] = "#777777"; +static const char col_red[] = "#ff0000"; +static const char col_green[] = "#00875f"; +static const char col_cyan[] = "#005577"; +static const char col_yellow[] = "#ffff00"; +static const char col_orange[] = "#fe8019"; + +static const char *colors[][3] = { + /* fg bg border */ + [SchemeNorm] = { col_ng1, col_black, col_gray1 }, + [SchemeSel] = { col_gray3, col_black, col_gray2 }, + [SchemeRed] = { col_red, col_black, col_black }, + [SchemeGreen] = { col_green, col_black, col_black }, + [SchemeCyan] = { col_cyan, col_black, col_black }, + [SchemeYellow] = { col_yellow, col_black, col_black }, + [SchemeOrange] = { col_orange, col_black, col_black }, +}; + +/* tagging */ +static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; + +static const Rule rules[] = { + { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, +}; + +/* layout(s) */ +static const float mfact = 0.50; +static const int nmaster = 1; +static const int resizehints = 0; +static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ +static const Layout layouts[] = { { "", tile } }; + +/* key definitions */ +#define MODKEY Mod1Mask +#define TAGKEYS(KEY,TAG) \ + { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ + { MODKEY|ControlMask, KEY, toggleview, {.ui = 1 << TAG} }, \ + { MODKEY|ShiftMask, KEY, tag, {.ui = 1 << TAG} }, \ + { MODKEY|ControlMask|ShiftMask, KEY, toggletag, {.ui = 1 << TAG} }, +#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } +#define SCRIPTS "/home/hassan/.scripts/" + +/* commands */ +static char dmenumon[2] = "0"; +static const char *bright_inc[] = { "xbacklight", "-inc", "10", NULL }; +static const char *bright_max[] = { "xbacklight", "-set", "100", NULL }; +static const char *bright_min[] = { "xbacklight", "-set", "0", NULL }; +static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, NULL }; +static const char *redshift[] = { "redshift", "-P", "-O", "3000", "-m", "randr", NULL }; +static const char *redshift_r[] = { "redshift", "-x", "-m", "randr", NULL }; +static const char *htop[] = { "st", "htop", NULL }; +static const char *neomutt[] = { "st", "neomutt", NULL }; +static const char *termcmd[] = { "st", NULL }; +static const char *toxic[] = { "st", "toxic", NULL }; +static const char *sfm[] = { "st", "sfm", NULL }; +static const char *bright_dec[] = { SCRIPTS "x_dec", NULL}; +static const char *call_bluetooth[] = { SCRIPTS "bluetooth_call", NULL }; +static const char *connect_bluetooth[] = { SCRIPTS "bluetooth_connect", NULL }; +static const char *connect_server[] = { SCRIPTS "connect_server", NULL }; +static const char *mount_drive[] = { SCRIPTS "mount_drives", NULL }; +static const char *mute[] = { SCRIPTS "volume_control", "mute_t", NULL }; +static const char *next_song[] = { SCRIPTS "play_music", "next", NULL }; +static const char *notify_azan[] = { SCRIPTS "notify_azan", NULL }; +static const char *notify_cpu[] = { SCRIPTS "notify_cpu", NULL }; +static const char *notify_disks[] = { SCRIPTS "notify_disks", NULL }; +static const char *notify_gpu[] = { SCRIPTS "notify_gpu", NULL }; +static const char *notify_network[] = { SCRIPTS "network", "notify", NULL }; +static const char *passmenu[] = { SCRIPTS "pass_manager", NULL }; +static const char *play_music[] = { SCRIPTS "play_music", "choose", NULL }; +static const char *play_pause[] = { SCRIPTS "play_music", "play-pause", NULL }; +static const char *prev_song[] = { SCRIPTS "play_music", "previous", NULL }; +static const char *record_screen[] = { SCRIPTS "record_screen", NULL}; +static const char *run_my_scripts[] = { SCRIPTS "list_scripts", NULL }; +static const char *search[] = { SCRIPTS "search", NULL }; +static const char *surf_homepage[] = { SCRIPTS "surf_homepage", NULL }; +static const char *unmount_drive[] = { SCRIPTS "unmount_drives", NULL }; +static const char *update[] = { SCRIPTS "update", NULL }; +static const char *volume_down[] = { SCRIPTS "volume_control", "dec", NULL }; +static const char *volume_up[] = { SCRIPTS "volume_control", "inc", NULL }; + +static Key keys[] = { + { ShiftMask, XK_F2, spawn, {.v = bright_max} }, + { ShiftMask, XK_F1, spawn, {.v = bright_min} }, + { MODKEY|ControlMask|Mod4Mask, XK_b, spawn, {.v = call_bluetooth } }, + { MODKEY|Mod4Mask, XK_b, spawn, {.v = connect_bluetooth } }, + { MODKEY|Mod4Mask, XK_s, spawn, {.v = connect_server} }, + { MODKEY, XK_p, spawn, {.v = dmenucmd } }, + { MODKEY|Mod4Mask, XK_h, spawn, {.v = htop } }, + { MODKEY|Mod4Mask, XK_m, spawn, {.v = mount_drive } }, + { MODKEY, XK_m, spawn, {.v = neomutt} }, + { MODKEY|Mod4Mask, XK_a, spawn, {.v = notify_azan} }, + { MODKEY|Mod4Mask, XK_c, spawn, {.v = notify_cpu} }, + { MODKEY|Mod4Mask, XK_d, spawn, {.v = notify_disks} }, + { MODKEY|Mod4Mask, XK_g, spawn, {.v = notify_gpu} }, + { MODKEY|Mod4Mask, XK_n, spawn, {.v = notify_network} }, + { MODKEY, XK_w, spawn, {.v = passmenu} }, + { MODKEY|Mod4Mask, XK_p, spawn, {.v = play_music } }, + { MODKEY|ControlMask|Mod4Mask, XK_o, spawn, {.v = record_screen } }, + { MODKEY|Mod4Mask, XK_r, spawn, {.v = redshift} }, + { MODKEY|ShiftMask|Mod4Mask, XK_r, spawn, {.v = redshift_r} }, + { MODKEY|ShiftMask, XK_s, spawn, {.v = run_my_scripts} }, + { MODKEY, XK_s, spawn, {.v = search} }, + { MODKEY, XK_r, spawn, {.v = surf_homepage} }, + { MODKEY, XK_Return, spawn, {.v = termcmd } }, + { MODKEY, XK_t, spawn, {.v = toxic } }, + { MODKEY|ShiftMask|Mod4Mask, XK_m, spawn, {.v = unmount_drive } }, + { MODKEY|Mod4Mask, XK_u, spawn, {.v = update} }, + { MODKEY, XK_v, spawn, {.v = sfm } }, + { MODKEY|Mod4Mask, XK_l, spawn, SHCMD("pkill gpg-agent; slock& sleep 1 && xset dpms force off") }, + { MODKEY|Mod4Mask, XK_z, spawn, SHCMD("pkill gpg-agent; slock& doas zzz") }, + { MODKEY|Mod4Mask, XK_x, spawn, SHCMD("pkill xbanish;xbanish -m ne&") }, + { 0, XK_F1, spawn, {.v = bright_dec} }, + { 0, XK_F2, spawn, {.v = bright_inc} }, + { 0, XK_F10, spawn, {.v = mute} }, + { 0, XK_F9, spawn, {.v = next_song} }, + { 0, XK_F7, spawn, {.v = play_pause } }, + { 0, XK_F8, spawn, {.v = prev_song} }, + { 0, XK_F11, spawn, {.v = volume_down} }, + { 0, XK_F12, spawn, {.v = volume_up} }, + { MODKEY, XK_Tab, view, {0} }, + { MODKEY, XK_b, togglebar, {0} }, + { MODKEY, XK_q, killclient, {0} }, + { MODKEY, XK_j, focusstack, {.i = +1 } }, + { MODKEY, XK_k, focusstack, {.i = -1 } }, + { MODKEY, XK_h, setmfact, {.f = -0.01} }, + { MODKEY, XK_l, setmfact, {.f = +0.01} }, + { MODKEY, XK_comma, focusmon, {.i = -1 } }, + { MODKEY, XK_period, focusmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_period, tagmon, {.i = +1 } }, + { MODKEY|ShiftMask, XK_comma, tagmon, {.i = -1 } }, + //{ MODKEY|ShiftMask, XK_j, movestack, {.i = +1 } }, + //{ MODKEY|ShiftMask, XK_k, movestack, {.i = -1 } }, + { MODKEY|ShiftMask, XK_Return, zoom, {0} }, + { MODKEY|ShiftMask, XK_q, quit, {0} }, + TAGKEYS( XK_1, 0) + TAGKEYS( XK_2, 1) + TAGKEYS( XK_3, 2) + TAGKEYS( XK_4, 3) + TAGKEYS( XK_5, 4) + TAGKEYS( XK_6, 5) + TAGKEYS( XK_7, 6) + TAGKEYS( XK_8, 7) + TAGKEYS( XK_9, 8) +}; + +/* button definitions */ +/* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ +static Button buttons[] = { + /* click event mask button function argument */ + { ClkLtSymbol, 0, Button1, setlayout, {0} }, + { ClkLtSymbol, 0, Button3, setlayout, {.v = &layouts[2]} }, + { ClkWinTitle, 0, Button2, zoom, {0} }, + { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, + { ClkClientWin, MODKEY, Button1, movemouse, {0} }, + { ClkClientWin, MODKEY, Button2, togglefloating, {0} }, + { ClkClientWin, MODKEY, Button3, resizemouse, {0} }, + { ClkTagBar, 0, Button1, view, {0} }, + { ClkTagBar, 0, Button3, toggleview, {0} }, + { ClkTagBar, MODKEY, Button1, tag, {0} }, + { ClkTagBar, MODKEY, Button3, toggletag, {0} }, +}; + diff --git a/config.mk b/config.mk @@ -36,4 +36,4 @@ LDFLAGS = ${LIBS} #LDFLAGS = ${LIBS} # compiler and linker -CC = cc +CC = clang diff --git a/dwm.c b/dwm.c @@ -59,7 +59,9 @@ /* enums */ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ -enum { SchemeNorm, SchemeSel }; /* color schemes */ +enum { SchemeNorm, SchemeSel, + SchemeRed, SchemeGreen, SchemeCyan, + SchemeYellow, SchemeOrange }; /* color schemes */ enum { NetSupported, NetWMName, NetWMState, NetWMCheck, NetWMFullscreen, NetActiveWindow, NetWMWindowType, NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ @@ -703,16 +705,43 @@ drawbar(Monitor *m) int boxs = drw->fonts->h / 9; int boxw = drw->fonts->h / 6 + 2; unsigned int i, occ = 0, urg = 0; + char *ts = stext; + char *tp = stext; + int tx = 0; + char ctmp; Client *c; if (!m->showbar) return; + /* correction for colours */ + int correct = 0; + char *xcape = malloc (sizeof (char) * 128); + memset(xcape,0,sizeof (char) * 128); + for ( ; *ts != '\0' ; ts++) { + if (*ts <= LENGTH(colors)) { + sprintf(xcape,"%c",*ts); + correct += TEXTW(xcape) - lrpad; + } + } + free(xcape); + ts = stext; + /* draw status first so it can be overdrawn by tags later */ if (m == selmon) { /* status is only drawn on selected monitor */ drw_setscheme(drw, scheme[SchemeNorm]); - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); + tw = TEXTW(stext) - lrpad + 2 - correct; /* 2px right padding */ + while (1) { + if ((unsigned int)*ts > LENGTH(colors)) { ts++; continue ; } + ctmp = *ts; + *ts = '\0'; + drw_text(drw, m->ww - tw + tx, 0, tw - tx, bh, 0, tp, 0); + tx += TEXTW(tp) -lrpad; + if (ctmp == '\0') { break; } + drw_setscheme(drw, scheme[(unsigned int)(ctmp-1)]); + *ts = ctmp; + tp = ++ts; + } } for (c = m->clients; c; c = c->next) { @@ -722,7 +751,7 @@ drawbar(Monitor *m) } x = 0; for (i = 0; i < LENGTH(tags); i++) { - w = TEXTW(tags[i]); + w = TEXTW(tags[i]) - 11; drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]); drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 << i); if (occ & 1 << i)