diff --git a/.gitignore b/.gitignore index 816ea1c..aaaff05 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ drw.o dwm dwm.o util.o +README.md diff --git a/Makefile b/Makefile index a166452..b9e4b11 100644 --- a/Makefile +++ b/Makefile @@ -9,9 +9,9 @@ OBJ = ${SRC:.c=.o} # FreeBSD users, prefix all ifdef, else and endif statements with a . for this to work (e.g. .ifdef) ifdef YAJLLIBS -all: dwm dwm-msg +all: dwm dwm-msg README.md else -all: dwm +all: dwm README.md endif .c.o: @@ -22,6 +22,9 @@ ${OBJ}: config.h config.mk config.h: cp config.def.h $@ +README.md: + ./docs.awk config.h >$@ + dwm: ${OBJ} ${CC} -o $@ ${OBJ} ${LDFLAGS} diff --git a/README b/README deleted file mode 100644 index 95d4fd0..0000000 --- a/README +++ /dev/null @@ -1,48 +0,0 @@ -dwm - dynamic window manager -============================ -dwm is an extremely fast, small, and dynamic window manager for X. - - -Requirements ------------- -In order to build dwm you need the Xlib header files. - - -Installation ------------- -Edit config.mk to match your local setup (dwm is installed into -the /usr/local namespace by default). - -Afterwards enter the following command to build and install dwm (if -necessary as root): - - make clean install - - -Running dwm ------------ -Add the following line to your .xinitrc to start dwm using startx: - - exec dwm - -In order to connect dwm to a specific display, make sure that -the DISPLAY environment variable is set correctly, e.g.: - - DISPLAY=foo.bar:1 exec dwm - -(This will start dwm on display :1 of the host foo.bar.) - -In order to display status info in the bar, you can do something -like this in your .xinitrc: - - while xsetroot -name "`date` `uptime | sed 's/.*,//'`" - do - sleep 1 - done & - exec dwm - - -Configuration -------------- -The configuration of dwm is done by creating a custom config.h -and (re)compiling the source code. diff --git a/config.h b/config.h index 593ec01..be3fc40 100644 --- a/config.h +++ b/config.h @@ -125,7 +125,7 @@ static const char *spchat[] = { "a", TERM, TERM_FLAG_CLASS, "spchat", TERM_FLAG_ static const char *spproc[] = { "p", TERM, TERM_FLAG_CLASS, "spproc", TERM_FLAG_EXEC, "btm", NULL }; static const char *spdisk[] = { "d", TERM, TERM_FLAG_CLASS, "spdisk", TERM_FLAG_EXEC, "dua", "i", "/", NULL }; static const char *spvolm[] = { "v", TERM, TERM_FLAG_CLASS, "spvolm", TERM_FLAG_EXEC, "ncpamixer", NULL }; -/*static const char *sphelp[] = { "h", TERM, TERM_FLAG_CLASS, "sphelp", TERM_FLAG_EXEC, "/bin/sh", "-c", "glow -p -s $XDG_CONFIG_HOME/glow/style.json /usr/share/dwm/dwm.md", NULL };*/ +static const char *sphelp[] = { "h", TERM, TERM_FLAG_CLASS, "sphelp", TERM_FLAG_EXEC, "/bin/sh", "-c", "glow -p -s tokyo-night /usr/share/doc/dwm-custom/README", NULL }; static const char *spnetm[] = { "m", TERM, TERM_FLAG_CLASS, "spnetm", TERM_FLAG_EXEC, "/bin/sh", "-c", "sleep 0.01; nmtui", NULL }; // This sleep is needed to wait for DWM to size the window static const char *spnetu[] = { "u", TERM, TERM_FLAG_CLASS, "spnetu", TERM_FLAG_EXEC, "bandwhich", NULL }; static const char *spwiki[] = { "w", TERM, TERM_FLAG_CLASS, "spwiki", TERM_FLAG_EXEC, "sh", "-c", "sleep 0.01; zk edit -i", NULL }; @@ -149,7 +149,7 @@ static const Rule rules[] = { RULE(.class = "mpv", .isfloating = 0) RULE(.class = "Element", .monitor = 1, .tags = 1 << 0) RULE(.class = "Thunderbird", .monitor = 1, .tags = 1 << 1) - /*RULE(.class = "sphelp", .scratchkey = 'h', .isfloating = 1, .iscentered = 1, .floatpos = "50% 50% 50% 90%")*/ + RULE(.class = "sphelp", .scratchkey = 'h', .isfloating = 1, .iscentered = 1, .floatpos = "50% 50% 50% 90%") RULE(.class = "spwiki", .scratchkey = 'w', .isfloating = 1, .iscentered = 1, .floatpos = "50% 50% 50% 90%") RULE(.class = "sptask", .scratchkey = 's', .isfloating = 1, .iscentered = 1, .floatpos = "50% 50% 50% 90%") RULE(.class = "spterm", .scratchkey = 't', .isfloating = 1, .iscentered = 1, .floatpos = "50% 50% 90% 90%") @@ -202,16 +202,16 @@ static const char *termcmd[] = { TERM, NULL }; #include <X11/XF86keysym.h> static const Key keys[] = { - /* modifier key function argument */ - // { MODKEY, XK_F1, togglescratch, {.v = sphelp} }, - // { MODKEY | ShiftMask, XK_F1, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F2, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuhandler") }, + /* START KEYBINDS */ + { MODKEY, XK_F1, togglescratch, {.v = sphelp} }, // Toggle help + // { MODKEY | ShiftMask, XK_F1, spawn, {.v = (const char *[]){NULL}} }, + // { MODKEY, XK_F2, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuhandler") }, // { MODKEY | ShiftMask, XK_F2, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F3, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad") }, + { MODKEY, XK_F3, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad") }, // Toggle touchpad // { MODKEY | ShiftMask, XK_F3, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F4, spawn, SHCMD("$HOME/.local/libexec/dwm/togcompositor") }, + { MODKEY, XK_F4, spawn, SHCMD("$HOME/.local/libexec/dwm/togcompositor") }, // Toggle compositor // { MODKEY | ShiftMask, XK_F4, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F5, spawn, {.v = (const char *[]){"clipmenu", NULL}} }, + { MODKEY, XK_F5, spawn, {.v = (const char *[]){"clipmenu", NULL}} }, // Open copy/paste history // { MODKEY | ShiftMask, XK_F5, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_F6, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_F6, spawn, {.v = (const char *[]){NULL}} }, @@ -219,16 +219,16 @@ static const Key keys[] = { // { MODKEY | ShiftMask, XK_F7, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_F8, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_F8, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F9, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenumount") }, + // { MODKEY, XK_F9, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenumount") }, // { MODKEY | ShiftMask, XK_F9, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F10, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuumount") }, + // { MODKEY, XK_F10, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuumount") }, // { MODKEY | ShiftMask, XK_F10, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F11, spawn, SHCMD("$HOME/.local/libexec/dwm/displayselect") }, + // { MODKEY, XK_F11, spawn, SHCMD("$HOME/.local/libexec/dwm/displayselect") }, // { MODKEY | ShiftMask, XK_F11, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_F12, spawn, {.v = (const char *[]){"remaps", NULL}} }, + { MODKEY, XK_F12, spawn, {.v = (const char *[]){"remaps", NULL}} }, // Rotate keyboard layout // { MODKEY | ShiftMask, XK_F12, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_grave, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuunicode --nocopy") }, - { MODKEY | ShiftMask, XK_grave, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuunicode") }, + { MODKEY, XK_grave, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuunicode --nocopy") }, // Insert an emoji + { MODKEY | ShiftMask, XK_grave, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenuunicode") }, // Copy an emoji TAGKEYS( XK_1, 0), TAGKEYS( XK_2, 1), TAGKEYS( XK_3, 2), @@ -238,59 +238,59 @@ static const Key keys[] = { TAGKEYS( XK_7, 6), TAGKEYS( XK_8, 7), TAGKEYS( XK_9, 8), - { MODKEY, XK_0, view, {.ui = ~0} }, - { MODKEY | ShiftMask, XK_0, tag, {.ui = ~0} }, + { MODKEY, XK_0, view, {.ui = ~0} }, // View all tags + { MODKEY | ShiftMask, XK_0, tag, {.ui = ~0} }, // Make focused window sticky // { MODKEY | ShiftMask, XK_0, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_bracketleft, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_bracketleft, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_bracketright, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_bracketright, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_BackSpace, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenusys") }, + { MODKEY, XK_BackSpace, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenusys") }, // Open shutdown menu // { MODKEY | ShiftMask, XK_BackSpace, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_Tab, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_Tab, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_apostrophe, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_apostrophe, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_comma, focusmon, {.i = +1} }, - { MODKEY | ShiftMask, XK_comma, tagmon, {.i = +1} }, - { MODKEY, XK_period, focusmon, {.i = -1} }, - { MODKEY | ShiftMask, XK_period, tagmon, {.i = -1} }, - { MODKEY, XK_p, spawn, {.v = (const char *[]){"playerctl", "play-pause", NULL}} }, + { MODKEY, XK_comma, focusmon, {.i = +1} }, // Focus next monitor + { MODKEY | ShiftMask, XK_comma, tagmon, {.i = +1} }, // Move focused window to next monitor + { MODKEY, XK_period, focusmon, {.i = -1} }, // Focus last monitor + { MODKEY | ShiftMask, XK_period, tagmon, {.i = -1} }, // Move focused window to last monitor + { MODKEY, XK_p, spawn, {.v = (const char *[]){"playerctl", "play-pause", NULL}} }, // Pause current player // { MODKEY | ShiftMask, XK_p, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_y, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_y, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_f, togglefullscreen, {0} }, + { MODKEY, XK_f, togglefullscreen, {0} }, // Toggle fullscreen for focused window // { MODKEY | ShiftMask, XK_f, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_g, setlayout, {.v = &layouts[0]} }, + { MODKEY, XK_g, setlayout, {.v = &layouts[0]} }, // Select default tile layout // { MODKEY | ShiftMask, XK_g, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_c, setlayout, {.v = &layouts[1]} }, + { MODKEY, XK_c, setlayout, {.v = &layouts[1]} }, // Select bottom stack layout // { MODKEY | ShiftMask, XK_c, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_r, setlayout, {.v = &layouts[2]} }, + { MODKEY, XK_r, setlayout, {.v = &layouts[2]} }, // Select grid layout // { MODKEY | ShiftMask, XK_r, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_l, pushstack, {.i = INC(+1)} }, - { MODKEY | ShiftMask, XK_l, setmfact, {.f = +0.05} }, + { MODKEY, XK_l, pushstack, {.i = INC(+1)} }, // Move focused window down stack + { MODKEY | ShiftMask, XK_l, setmfact, {.f = +0.05} }, // Increase size of master stack // { MODKEY, XK_slash, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_slash, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_equal, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_equal, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_a, togglescratch, {.v = spchat} }, + { MODKEY, XK_a, togglescratch, {.v = spchat} }, // Toggle AI chat // { MODKEY | ShiftMask, XK_a, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_o, togglescratch, {.v = spproc} }, - { MODKEY | ShiftMask, XK_o, togglescratch, {.v = spnetu} }, - { MODKEY, XK_e, togglescratch, {.v = spfile} }, - { MODKEY | ShiftMask, XK_e, togglescratch, {.v = spdisk} }, - { MODKEY, XK_u, spawn, {.v = (const char *[]){"dmenu_run", NULL}} }, + { MODKEY, XK_o, togglescratch, {.v = spproc} }, // Toggle process manager + { MODKEY | ShiftMask, XK_o, togglescratch, {.v = spnetu} }, // Toggle network usage analyzer + { MODKEY, XK_e, togglescratch, {.v = spfile} }, // Toggle file manager + { MODKEY | ShiftMask, XK_e, togglescratch, {.v = spdisk} }, // Toggle disk usage analyzer + { MODKEY, XK_u, spawn, {.v = (const char *[]){"dmenu_run", NULL}} }, // Run a program // { MODKEY | ShiftMask, XK_u, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_i, spawn, {.v = (const char *[]){"dunstctl", "close", NULL}} }, - { MODKEY | ShiftMask, XK_i, spawn, {.v = (const char *[]){"dunstctl", "history-pop", NULL}} }, - { MODKEY, XK_d, spawn, {.v = (const char *[]){"dunstctl", "context", NULL}} }, - { MODKEY | ShiftMask, XK_d, spawn, {.v = (const char *[]){"dunstctl", "action", "0", NULL}} }, - { MODKEY, XK_h, pushstack, {.i = INC(-1)} }, - { MODKEY | ShiftMask, XK_h, setmfact, {.f = -0.05} }, - { MODKEY, XK_t, spawn, {.v = (const char *[]){BROWSER, BROWSER_FLAG_1, NULL}} }, - { MODKEY | ShiftMask, XK_t, spawn, {.v = (const char *[]){BROWSER, BROWSER_FLAG_1, BROWSER_FLAG_INCOG, NULL}} }, - { MODKEY, XK_n, focusstack, {.i = PREVSEL} }, - { MODKEY | ShiftMask, XK_n, focusstack, {.i = 0} }, + { MODKEY, XK_i, spawn, {.v = (const char *[]){"dunstctl", "close", NULL}} }, // Close last notification + { MODKEY | ShiftMask, XK_i, spawn, {.v = (const char *[]){"dunstctl", "history-pop", NULL}} }, // Reopen last notification + { MODKEY, XK_d, spawn, {.v = (const char *[]){"dunstctl", "context", NULL}} }, // Select notification option + { MODKEY | ShiftMask, XK_d, spawn, {.v = (const char *[]){"dunstctl", "action", "0", NULL}} }, // Autoselect first notification option + { MODKEY, XK_h, pushstack, {.i = INC(-1)} }, // Move focused window up stack + { MODKEY | ShiftMask, XK_h, setmfact, {.f = -0.05} }, // Decrease size of master stack + { MODKEY, XK_t, spawn, {.v = (const char *[]){BROWSER, BROWSER_FLAG_1, NULL}} }, // Start a browser window + { MODKEY | ShiftMask, XK_t, spawn, {.v = (const char *[]){BROWSER, BROWSER_FLAG_1, BROWSER_FLAG_INCOG, NULL}} }, // Start an incognito browser window + { MODKEY, XK_n, focusstack, {.i = PREVSEL} }, // Focus last focused window + { MODKEY | ShiftMask, XK_n, focusstack, {.i = 0} }, // Focus master stack // { MODKEY, XK_s, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_s, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_s, spawn, {.v = (const char *[]){NULL}} }, @@ -298,34 +298,34 @@ static const Key keys[] = { // { MODKEY | ShiftMask, XK_minus, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_backslash, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_backslash, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_Return, zoom, {0} }, + { MODKEY, XK_Return, zoom, {0} }, // Move focused window to master stack // { MODKEY | ShiftMask, XK_Return, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_semicolon, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_semicolon, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_q, killclient, {0} }, + { MODKEY, XK_q, killclient, {0} }, // Close focused window // { MODKEY | ShiftMask, XK_q, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_j, focusstack, {.i = INC(+1) } }, + { MODKEY, XK_j, focusstack, {.i = INC(+1) } }, // Focus next window in stack /* { MODKEY | ShiftMask, XK_j, focusstack, {.i = INC(+1) } }, */ - { MODKEY, XK_k, focusstack, {.i = INC(-1) } }, + { MODKEY, XK_k, focusstack, {.i = INC(-1) } }, // Focus last window in stack /* { MODKEY | ShiftMask, XK_k, focusstack, {.i = INC(-1) } }, */ - { MODKEY, XK_x, togglefloating, {0} }, - { MODKEY | ShiftMask, XK_x, unfloatvisible, {0} }, - { MODKEY, XK_b, togglescratch, {.v = spnetm} }, + { MODKEY, XK_x, togglefloating, {0} }, // Toggle floating for focused window + { MODKEY | ShiftMask, XK_x, unfloatvisible, {0} }, // Unfloat visible floating windows + { MODKEY, XK_b, togglescratch, {.v = spnetm} }, // Toggle network manager // { MODKEY | ShiftMask, XK_b, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_m, togglescratch, {.v = spvolm} }, - { MODKEY | ShiftMask, XK_m, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify -t") }, - { MODKEY, XK_w, togglescratch, {.v = spwiki} }, + { MODKEY, XK_m, togglescratch, {.v = spvolm} }, // Toggle volume manager + { MODKEY | ShiftMask, XK_m, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify -t") }, // Mute volume + { MODKEY, XK_w, togglescratch, {.v = spwiki} }, // Toggle wiki // { MODKEY | ShiftMask, XK_w, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_v, togglescratch, {.v = spcalc} }, + { MODKEY, XK_v, togglescratch, {.v = spcalc} }, // Toggle calculator // { MODKEY | ShiftMask, XK_v, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_z, togglescratch, {.v = sptask} }, + { MODKEY, XK_z, togglescratch, {.v = sptask} }, // Toggle task manager // { MODKEY | ShiftMask, XK_z, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_space, spawn, {.v = termcmd} }, - { MODKEY | ShiftMask, XK_space, togglescratch, {.v = spterm} }, - { MODKEY, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenurecord") }, - { MODKEY | ShiftMask, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenurecord kill") }, - { 0, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenumaim full") }, - { ShiftMask, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenumaim") }, + { MODKEY, XK_space, spawn, {.v = termcmd} }, // Open terminal + { MODKEY | ShiftMask, XK_space, togglescratch, {.v = spterm} }, // Open scratch terminal + { MODKEY, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenurecord") }, // Open video recording menu + { MODKEY | ShiftMask, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenurecord kill") }, // Kill recording + { 0, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenumaim full") }, // Screenshot full screen + { ShiftMask, XK_Print, spawn, SHCMD("$HOME/.local/libexec/dwm/dmenumaim") }, // Open screenshot menu // { MODKEY, XK_Scroll_Lock, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_Scroll_Lock, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_Pause, spawn, {.v = (const char *[]){NULL}} }, @@ -337,50 +337,50 @@ static const Key keys[] = { // { MODKEY, XK_Page_Up, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_Page_Up, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_Delete, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY | ShiftMask, XK_Delete, quit, {0} }, + { MODKEY | ShiftMask, XK_Delete, quit, {0} }, // Kill window manager // { MODKEY, XK_End, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_End, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY, XK_Page_Down, spawn, {.v = (const char *[]){NULL}} }, // { MODKEY | ShiftMask, XK_Page_Down, spawn, {.v = (const char *[]){NULL}} }, - { MODKEY, XK_Left, spawn, {.v = (const char *[]){"playerctl", "position", "5-", NULL}} }, - { MODKEY | ShiftMask, XK_Left, spawn, {.v = (const char *[]){"playerctl", "previous", NULL}} }, - { MODKEY, XK_Right, spawn, {.v = (const char *[]){"playerctl", "position", "5+", NULL}} }, - { MODKEY | ShiftMask, XK_Right, spawn, {.v = (const char *[]){"playerctl", "next", NULL}} }, - { MODKEY, XK_Up, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -i 5") }, - { MODKEY | ShiftMask, XK_Up, spawn, {.v = (const char *[]){"playerctl", "volume", "5+", NULL}} }, - { MODKEY, XK_Down, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -d 5") }, - { MODKEY | ShiftMask, XK_Down, spawn, {.v = (const char *[]){"playerctl", "volume", "5-", NULL}} }, + { MODKEY, XK_Left, spawn, {.v = (const char *[]){"playerctl", "position", "5-", NULL}} }, // Spool current player back 5 seconds + { MODKEY | ShiftMask, XK_Left, spawn, {.v = (const char *[]){"playerctl", "previous", NULL}} }, // Skip to previous track in current player + { MODKEY, XK_Right, spawn, {.v = (const char *[]){"playerctl", "position", "5+", NULL}} }, // Spool current player forward 5 seconds + { MODKEY | ShiftMask, XK_Right, spawn, {.v = (const char *[]){"playerctl", "next", NULL}} }, // Skip to next track in current player + { MODKEY, XK_Up, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -i 5") }, // Increase volume + { MODKEY | ShiftMask, XK_Up, spawn, {.v = (const char *[]){"playerctl", "volume", "5+", NULL}} }, // Increase volume in player + { MODKEY, XK_Down, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -d 5") }, // Decrease volume + { MODKEY | ShiftMask, XK_Down, spawn, {.v = (const char *[]){"playerctl", "volume", "5-", NULL}} }, // Decrease volume in player - { 0, XF86XK_AudioMute, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify -t") }, - { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -i 5") }, - { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -d 5") }, - { 0, XF86XK_AudioPrev, spawn, {.v = (const char *[]){"playerctl", "previous", NULL}} }, - { 0, XF86XK_AudioNext, spawn, {.v = (const char *[]){"playerctl", "next", NULL}} }, - { 0, XF86XK_AudioPause, spawn, {.v = (const char *[]){"playerctl", "pause", NULL}} }, - { 0, XF86XK_AudioPlay, spawn, {.v = (const char *[]){"playerctl", "play-pause", NULL}} }, // Most keyboards only have a play button - { 0, XF86XK_AudioStop, spawn, {.v = (const char *[]){"playerctl", "stop", NULL}} }, - { 0, XF86XK_AudioRewind, spawn, {.v = (const char *[]){"playerctl", "position", "5-", NULL}} }, - { 0, XF86XK_AudioForward, spawn, {.v = (const char *[]){"playerctl", "position", "5+", NULL}} }, + { 0, XF86XK_AudioMute, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify -t") }, // Mute volume + { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -i 5") }, // Increase volume + { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("$HOME/.local/libexec/dwm/pamixer-notify --allow-boost -d 5") }, // Decrease volume + { 0, XF86XK_AudioPrev, spawn, {.v = (const char *[]){"playerctl", "previous", NULL}} }, // Skip to previous track in current player + { 0, XF86XK_AudioNext, spawn, {.v = (const char *[]){"playerctl", "next", NULL}} }, // Skip to next track in current player + { 0, XF86XK_AudioPause, spawn, {.v = (const char *[]){"playerctl", "pause", NULL}} }, // Pause current player + { 0, XF86XK_AudioPlay, spawn, {.v = (const char *[]){"playerctl", "play-pause", NULL}} }, // Toggle pause/unpause in current player + { 0, XF86XK_AudioStop, spawn, {.v = (const char *[]){"playerctl", "stop", NULL}} }, // Stop current player + { 0, XF86XK_AudioRewind, spawn, {.v = (const char *[]){"playerctl", "position", "5-", NULL}} }, // Spool current player back 5 seconds + { 0, XF86XK_AudioForward, spawn, {.v = (const char *[]){"playerctl", "position", "5+", NULL}} }, // Spool current player forward 5 seconds // { 0, XF86XK_AudioMedia, spawn, {.v = (const char *[]){NULL}} }, - { 0, XF86XK_AudioMicMute, spawn, {.v = (const char *[]){"pactl", "set-source-mute", "@DEFAULT_SOURCE@", "toggle", NULL}} }, /* TODO: Test this */ - { 0, XF86XK_PowerOff, spawn, {.v = (const char *[]){"dmenusys", NULL}} }, - { 0, XF86XK_Calculator, spawn, {.v = (const char *[]){TERM, "-e", "bc", "-li", NULL}} }, - { 0, XF86XK_Sleep, spawn, {.v = (const char *[]){"loginctl", "suspend", "-i", NULL}} }, - { 0, XF86XK_WWW, spawn, {.v = (const char *[]){BROWSER, BROWSER_FLAG_1, NULL}} }, + { 0, XF86XK_AudioMicMute, spawn, SHCMD("$HOME/.local/libexec/dwm/togmic") }, // Toggle microphone mute + { 0, XF86XK_PowerOff, spawn, {.v = (const char *[]){"dmenusys", NULL}} }, // Open shutdown menu + { 0, XF86XK_Calculator, togglescratch, {.v = spcalc} }, // Toggle calculator + { 0, XF86XK_Sleep, spawn, {.v = (const char *[]){"loginctl", "suspend", "-i", NULL}} }, // Sleep system + { 0, XF86XK_WWW, spawn, {.v = (const char *[]){BROWSER, BROWSER_FLAG_1, NULL}} }, // Open browser // { 0, XF86XK_WLAN, spawn, {.v = (const char *[]){NULL}} }, - { 0, XF86XK_DOS, spawn, {.v = (const char *[]){TERM, NULL}} }, - { 0, XF86XK_ScreenSaver, spawn, {.v = (const char *[]){"xset", "s", "activate", NULL}} }, - { 0, XF86XK_TaskPane, spawn, {.v = (const char *[]){TERM, "-e", "htop", NULL}} }, + { 0, XF86XK_DOS, spawn, {.v = (const char *[]){TERM, NULL}} }, // Open terminal + { 0, XF86XK_ScreenSaver, spawn, {.v = (const char *[]){"xset", "s", "activate", NULL}} }, // Lock session + { 0, XF86XK_TaskPane, togglescratch, {.v = spproc} }, // Toggle process manager // { 0, XF86XK_Mail, spawn, {.v = (const char *[]){NULL}} }, - { 0, XF86XK_MyComputer, spawn, {.v = (const char *[]){TERM, "-e", "lfX", "/", NULL}} }, + { 0, XF86XK_MyComputer, togglescratch, {.v = spfile} }, // Toggle file manager // { 0, XF86XK_Battery, spawn, {.v = (const char *[]){NULL}} }, // { 0, XF86XK_Launch1, spawn, {.v = (const char *[]){NULL}} }, - { 0, XF86XK_TouchpadToggle, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad") }, - { 0, XF86XK_TouchpadOff, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad -n") }, - { 0, XF86XK_TouchpadOn, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad -y") }, - { 0, XF86XK_MonBrightnessUp, spawn, SHCMD("$HOME/.local/libexec/dwm/brightness-notify +5") }, - { 0, XF86XK_MonBrightnessDown, spawn, SHCMD("$HOME/.local/libexec/dwm/brightness-notify -5") }, - /* WARN: If you have multiple backlight controllers this will fail */ + { 0, XF86XK_TouchpadToggle, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad") }, // Toggle touchpad + { 0, XF86XK_TouchpadOff, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad -n") }, // Disable touchpad + { 0, XF86XK_TouchpadOn, spawn, SHCMD("$HOME/.local/libexec/dwm/togtouchpad -y") }, // Enable touchpad + { 0, XF86XK_MonBrightnessUp, spawn, SHCMD("$HOME/.local/libexec/dwm/brightness-notify +5") }, // Increase monitor brightness + { 0, XF86XK_MonBrightnessDown, spawn, SHCMD("$HOME/.local/libexec/dwm/brightness-notify -5") }, // Decrease monitor brightness + /* END KEYBINDS */ }; diff --git a/docs.awk b/docs.awk new file mode 100755 index 0000000..03c61d4 --- /dev/null +++ b/docs.awk @@ -0,0 +1,54 @@ +#!/bin/awk -f + +BEGINFILE { + printf "# DWM Keybinds\n" + printf "|Keybind|Function|\n" + printf "|-|-|\n" +} + +/^#define MODKEY/ { + modkey = $3 +} + +/START KEYBINDS/ { + in_keybinds = 1 + next +} + +/END KEYBINDS/ { + in_keybinds = 0 + next +} + +in_keybinds { + if (/^[[:space:]]*$/ || /^[[:space:]]*\/(\/|\*)/ || /^[[:space:]]*TAGKEYS\(/) { + next + } + + if (match($0, /\{[[:space:]]*([^,]+)/, modifier_matches)) { + modifier = modifier_matches[1] + } else { + modifier = "0" + } + + gsub(/MODKEY/, modkey, modifier) + gsub(/\|/, "+", modifier) + gsub(/Mod1Mask/, "Alt", modifier) + gsub(/Mod4Mask/, "Super", modifier) + gsub(/ControlMask/, "Control", modifier) + gsub(/ShiftMask/, "Shift", modifier) + + match($0, /[[:space:]]*XK_([^,]+)/, key_matches) + key = key_matches[1] + key = toupper(substr(key,1,1)) substr(key,2) + + match($0, /,[[:space:]]*\/\/[[:space:]]*(.+)$/, comment_matches) + comment = comment_matches[1] + comment = toupper(substr(comment,1,1)) substr(comment,2) + + printf "|" + if (modifier != "0") { + printf "%s + ", modifier + } + printf "%s|%s|\n", key, comment +}