/* See LICENSE file for copyright and license details. */ /* appearance */ static const unsigned int borderpx = 1; /* border pixel of windows */ static const unsigned int gappx = 10; /* gap pixel between windows */ static const unsigned int snap = 32; /* snap pixel */ static const int swallowfloating = 0; /* 1 means swallow floating windows by default */ static const int showbar = 1; /* 0 means no standard bar */ static const int topbar = 1; /* 0 means standard bar at bottom */ static const int extrabar = 1; /* 0 means no extra bar */ static const char statussep = ';'; /* separator between statuses */ static const int user_bh = 2; /* 2 is the default spacing around the bar's font */ static const int vertpad = 10; /* vertical padding of bar */ static const int sidepad = 10; /* horizontal padding of bar */ static const char *fonts[] = { "Hack Nerd Font:size=10" }; static const char dmenufont[] = "Hack Nerd Font:size=10"; static const char col_bg_dim[] = "#1e2326"; static const char col_bg0[] = "#272e33"; static const char col_bg1[] = "#2e383c"; static const char col_bg2[] = "#374145"; static const char col_bg3[] = "#414b50"; static const char col_bg4[] = "#495156"; static const char col_bg5[] = "#4f5b58"; static const char col_bg_red[] = "#4c3743"; static const char col_bg_visual[] = "#493b40"; static const char col_bg_green[] = "#3c4841"; static const char col_bg_blue[] = "#384b55"; static const char col_bg_yellow[] = "#45443c"; static const char col_fg[] = "#d3c6aa"; static const char col_red[] = "#e67e80"; static const char col_orange[] = "#e69875"; static const char col_yellow[] = "#dbbc7f"; static const char col_green[] = "#a7c080"; static const char col_aqua[] = "#83c092"; static const char col_blue[] = "#7fbbb3"; static const char col_purple[] = "#d699b6"; static const char col_gray0[] = "#7a8478"; static const char col_gray1[] = "#859289"; static const char col_gray2[] = "#9da9a0"; static const unsigned int baralpha = 230; static const unsigned int borderalpha = OPAQUE; static const char *colors[][3] = { /* fg bg border */ [SchemeNorm] = { col_fg, col_bg_dim, col_gray0 }, [SchemeSel] = { col_fg, col_bg3, col_blue}, [SchemeHid] = { col_gray0, col_bg_dim, col_blue}, [SchemeLay] = { col_fg, col_bg0, col_blue }, [SchemeWf] = { col_fg, col_bg1, col_blue }, }; static const unsigned int alphas[][3] = { /* fg bg border*/ [SchemeNorm] = { OPAQUE, baralpha, borderalpha }, [SchemeSel] = { OPAQUE, baralpha, borderalpha }, [SchemeHid] = { OPAQUE, baralpha, borderalpha }, [SchemeLay] = { OPAQUE, baralpha, borderalpha }, [SchemeWf] = { OPAQUE, baralpha, borderalpha }, }; static const char *const autostart[] = { "picom", NULL, "unclutter", NULL, "dwmblocks", NULL, NULL /* terminate */ }; /* tagging */ static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; /* launcher commands (They must be NULL terminated) */ static const char* browser[] = { "firefox-esr", "--newwindow", NULL }; static const char* terminal[] = { "st", NULL }; static const Launcher launchers[] = { { terminal, "st" }, { browser, "firefox" } }; static const unsigned int ulinepad = 5; /* horizontal padding between the underline and tag */ static const unsigned int ulinestroke = 2; /* thickness / height of the underline */ static const unsigned int ulinevoffset = 0; /* how far above the bottom of the bar the line should appear */ static const int ulineall = 0; /* 1 to show underline on all tags, 0 for just the active ones */ static const char *tagsel[][2] = { { col_bg_dim, col_red }, { col_bg_dim, col_orange }, { col_bg_dim, col_yellow }, { col_bg_dim, col_green }, { col_bg_dim, col_aqua }, { col_bg_dim, col_blue }, { col_bg_dim, col_purple }, { col_bg_dim, col_gray0}, { col_bg_dim, col_fg }, }; static const unsigned int tagalpha[] = { OPAQUE, baralpha }; static const Rule rules[] = { /* xprop(1): * WM_CLASS(STRING) = instance, class * WM_NAME(STRING) = title */ /* class instance title tags mask isfloating isfakefullscreen isterminal noswallow monitor */ { "Gimp", NULL, NULL, 0, 1, 0, 0, 0, -1 }, { "Firefox", NULL, NULL, 1 << 8, 0, 0, 0, -1, -1 }, { "St", NULL, NULL, 0, 0, 0, 1, 0, -1 }, { "St", NULL, "pulsemixer", 0, 1, 0, 0, 1, -1 }, { NULL, NULL, "Event Tester", 0, 0, 0, 0, 1, -1 }, /* xev */ }; static const char topicon[128] = "\uf435"; /* icon to indicate always on top floating windows */ /* window following */ #define WFACTIVE '>' #define WFINACTIVE 'v' #define WFDEFAULT WFINACTIVE /* layout(s) */ static const float mfact = 0.55; /* factor of master area size [0.05..0.95] */ static const int nmaster = 1; /* number of clients in master area */ static const int resizehints = 1; /* 1 means respect size hints in tiled resizals */ static const int lockfullscreen = 1; /* 1 will force focus on the fullscreen window */ static const Layout layouts[] = { /* symbol arrange function */ { "[]=", tile }, /* first entry is default */ { "><>", NULL }, /* no layout function means floating behavior */ { "[M]", monocle }, { "[D]", deck }, }; /* key definitions */ #define MODKEY Mod4Mask #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} }, \ { Mod1Mask|ShiftMask, KEY, swaptags, {.ui = 1 << TAG} }, /* helper for spawning shell commands in the pre dwm-5.0 fashion */ #define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } /* commands */ static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ static const char *dmenucmd[] = { "dmenu_run", "-m", dmenumon, "-fn", dmenufont, "-nb", col_bg_dim, "-nf", col_fg, "-sb", col_bg3, "-sf", col_fg, NULL }; static const char *layoutmenu_cmd = "layoutmenu.sh"; #include #include "exitdwm.c" static const Key keys[] = { /* modifier key function argument */ { 0, XF86XK_AudioMute, spawn, { .v = (const char*[]){ "sh", "-c", "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle; notify-send -r 1001 \"$(wpctl get-volume @DEFAULT_SINK@ | awk '{printf \"%s %.f%% %s\\n\",$1, $2 * 100, $3}')\"", NULL } } }, // TODO status update { 0, XF86XK_AudioRaiseVolume, spawn, { .v = (const char*[]){ "sh", "-c", "wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+; notify-send -r 1001 \"$(wpctl get-volume @DEFAULT_SINK@ | awk '{printf \"%s %.f%% %s\\n\",$1, $2 * 100, $3}')\"", NULL } } }, // TODO status update { 0, XF86XK_AudioLowerVolume, spawn, { .v = (const char*[]){ "sh", "-c", "wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-; notify-send -r 1001 \"$(wpctl get-volume @DEFAULT_SINK@ | awk '{printf \"%s %.f%% %s\\n\",$1, $2 * 100, $3}')\"", NULL } } }, // TODO status update { 0, XF86XK_MonBrightnessUp, spawn, { .v = (const char*[]){ "sh", "-c", "xbacklight -inc 5; notify-send -r 1001 \"$(xbacklight -get | awk '{gsub(/\\.[0-9]+/, \"\"); print \"Brightness \" $1 \"%\"}')\"", NULL } } }, // TODO status update { 0, XF86XK_MonBrightnessDown, spawn, { .v = (const char*[]){ "sh", "-c", "xbacklight -dec 5; notify-send -r 1001 \"$(xbacklight -get | awk '{gsub(/\\.[0-9]+/, \"\"); print \"Brightness \" $1 \"%\"}')\"", NULL } } }, // TODO status update { MODKEY, XK_BackSpace, spawn, { .v = (const char*[]){ "sh", "-c", "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle; notify-send -r 1001 \"$(wpctl get-volume @DEFAULT_SINK@ | awk '{printf \"%s %.f%% %s\\n\",$1, $2 * 100, $3}')\"", NULL } } }, // TODO status update { MODKEY, XK_equal, spawn, { .v = (const char*[]){ "sh", "-c", "wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+; notify-send -r 1001 \"$(wpctl get-volume @DEFAULT_SINK@ | awk '{printf \"%s %.f%% %s\\n\",$1, $2 * 100, $3}')\"", NULL } } }, // TODO status update { MODKEY, XK_minus, spawn, { .v = (const char*[]){ "sh", "-c", "wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-; notify-send -r 1001 \"$(wpctl get-volume @DEFAULT_SINK@ | awk '{printf \"%s %.f%% %s\\n\",$1, $2 * 100, $3}')\"", NULL } } }, // TODO status update { MODKEY, XK_q, killclient, {0}}, { MODKEY|ShiftMask, XK_q, exitdwm, {0}}, { MODKEY, XK_e, spawn, SHCMD("st -e nvim")}, { MODKEY, XK_i, spawn, SHCMD("firefox-esr")}, { MODKEY, XK_p, spawn, SHCMD("dmenu-pass")}, { MODKEY|ShiftMask, XK_p, spawn, SHCMD("dmenu-pass -a")}, { MODKEY, XK_a, spawn, SHCMD("kill $(pidof -x pulsemixer); st -n pulsemixer -e pulsemixer;")}, // TODO status update { MODKEY, XK_d, spawn, {.v=dmenucmd}}, { MODKEY, XK_f, togglefullscr, {0}}, { MODKEY|ShiftMask, XK_f, togglefakefullscr, {0}}, { MODKEY|Mod1Mask, XK_f, togglefollow, {0}}, { MODKEY, XK_h, focusmon, {.i=+1}}, { MODKEY|ShiftMask, XK_h, tagmon, {.i=+1}}, { MODKEY, XK_j, focusstackvis, {.i=+1}}, { MODKEY|ShiftMask, XK_j, movestack, {.i=+1}}, { MODKEY|Mod1Mask, XK_j, focusstackhid, {.i=+1}}, { MODKEY, XK_k, focusstackvis, {.i=-1}}, { MODKEY|ShiftMask, XK_k, movestack, {.i=-1}}, { MODKEY|Mod1Mask, XK_k, focusstackhid, {.i=-1}}, { MODKEY, XK_l, focusmon, {.i=-1}}, { MODKEY|ShiftMask, XK_l, tagmon, {.i=-1}}, { MODKEY, XK_Return, spawn, SHCMD("st")}, { MODKEY|ShiftMask, XK_Return, zoom, {0}}, { MODKEY, XK_comma, setmfact, {.f=-0.05}}, { MODKEY|ShiftMask, XK_comma, incnmaster, {.i=+1}}, { MODKEY, XK_period, setmfact, {.f=+0.05}}, { MODKEY|ShiftMask, XK_period, incnmaster, {.i=-1}}, 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 ) {MODKEY, XK_r, resetlayout, {0}}, {MODKEY, XK_t, setlayout, {.v=&layouts[0]}}, {MODKEY, XK_f, setlayout, {.v=&layouts[1]}}, {MODKEY, XK_m, setlayout, {.v=&layouts[2]}}, {MODKEY, XK_r, setlayout, {.v=&layouts[3]}}, {MODKEY, XK_space, setlayout, {0}}, {MODKEY|ShiftMask, XK_space, togglefloating,{0}}, {MODKEY|ShiftMask, XK_t, togglealwaysontop,{0}}, {MODKEY, XK_Down, moveresize, {.v="0x25y0w0h"}}, {MODKEY, XK_Up, moveresize, {.v="0x-25y0w0h"}}, {MODKEY, XK_Right, moveresize, {.v="25x0y0w0h"}}, {MODKEY, XK_Left, moveresize, {.v="-25x0y0w0h"}}, {MODKEY|ShiftMask, XK_Down, moveresize, {.v="0x0y0w25h"}}, {MODKEY|ShiftMask, XK_Up, moveresize, {.v="0x0y0w-25h"}}, {MODKEY|ShiftMask, XK_Right, moveresize, {.v="0x0y25w0h"}}, {MODKEY|ShiftMask, XK_Left, moveresize, {.v="0x0y-25w0h"}}, {MODKEY|ControlMask, XK_Up, moveresizeedge,{.v="t"}}, {MODKEY|ControlMask, XK_Down, moveresizeedge,{.v="b"}}, {MODKEY|ControlMask, XK_Left, moveresizeedge,{.v="l"}}, {MODKEY|ControlMask, XK_Right, moveresizeedge,{.v="r"}}, {MODKEY|ControlMask|ShiftMask,XK_Up, moveresizeedge,{.v="T"}}, {MODKEY|ControlMask|ShiftMask,XK_Down, moveresizeedge,{.v="B"}}, {MODKEY|ControlMask|ShiftMask,XK_Left, moveresizeedge,{.v="L"}}, {MODKEY|ControlMask|ShiftMask,XK_Right, moveresizeedge,{.v="R"}}, {MODKEY, XK_0, view, {.ui=~0}}, {MODKEY|ShiftMask, XK_0, tag, {.ui=~0}}, {MODKEY, XK_s, show, {0}}, {MODKEY|ShiftMask, XK_s, showall, {0}}, {MODKEY, XK_h, hide, {0}}, }; /* button definitions */ /* click can be ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, ClkClientWin, or ClkRootWin */ static const Button buttons[] = { /* click event mask button function argument */ { ClkLtSymbol, 0, Button1, setlayout, {0} }, { ClkLtSymbol, 0, Button3, layoutmenu, {0} }, { ClkFollowSymbol, 0, Button1, togglefollow, {0} }, { ClkWinTitle, 0, Button1, togglewin, {0} }, { ClkWinTitle, 0, Button2, zoom, {0} }, /* { ClkStatusText, 0, Button2, spawn, {.v = termcmd } }, */ /* { ClkExBarLeftStatus, 0, Button2, spawn, {.v = termcmd } }, */ /* { ClkExBarMiddle, 0, Button2, spawn, {.v = termcmd } }, */ /* { ClkExBarRightStatus, 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} }, };