From 86220852414bdfc0cd0bef6707931ffd8129c8b3 Mon Sep 17 00:00:00 2001 From: Solomon Laing Date: Mon, 26 May 2025 21:58:46 +0930 Subject: [PATCH] bit better, double chords cause issues --- config.def.h | 6 +- config.h | 205 +++++++++++++++++++++++++++++++++++++++++++++++++++ drw.o | Bin 0 -> 11296 bytes 3 files changed, 207 insertions(+), 4 deletions(-) create mode 100644 config.h create mode 100644 drw.o diff --git a/config.def.h b/config.def.h index e5cf548..597602e 100644 --- a/config.def.h +++ b/config.def.h @@ -125,14 +125,12 @@ static const Keychord *keychords[] = { &((Keychord){1, {{MODKEY | ShiftMask, XK_comma}}, tagmon, {.i = -1} }), &((Keychord){1, {{MODKEY | ShiftMask, XK_period}}, tagmon, {.i = +1} }), - &((Keychord){1, {{MODKEY, XK_p}}, spawn, {.v = (const char *[]){"plumbpls", NULL}} }), - &((Keychord){1, {{MODKEY | ShiftMask, XK_s}}, spawn, {.v = (const char *[]){"sysact", NULL}} }), &((Keychord){1, {{MODKEY | ShiftMask, XK_o}}, spawn, {.v = (const char *[]){"set-default-sink", NULL}} }), &((Keychord){1, {{MODKEY | ShiftMask, XK_i}}, spawn, {.v = (const char *[]){"set-default-source", NULL}} }), - &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_m}}, spawn, {.v = (const char *[]){"dmenumusic", NULL}} }), + &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_a}}, spawn, {.v = (const char *[]){"dmenumusic", NULL}} }), &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_p}}, spawn, {.v = (const char *[]){"mpc", "toggle", NULL}} }), &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_l}}, spawn, {.v = (const char *[]){"mpc", "next", NULL}} }), &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_h}}, spawn, {.v = (const char *[]){"mpc", "prev", NULL}} }), @@ -146,7 +144,7 @@ static const Keychord *keychords[] = { &((Keychord){2, {{MODKEY, XK_o}, {MODKEY, XK_m}}, spawn, {.v = (const char *[]){TERMINAL, "-e", "gotop", NULL}} }), &((Keychord){2, {{MODKEY, XK_o}, {MODKEY, XK_t}}, spawn, {.v = (const char *[]){"thunar, NULL}} }), - &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_d}}, spawn, {.v = (const char *[]){"dmenuhandler", NULL}} }), + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_h}}, spawn, {.v = (const char *[]){"dmenuhandler", NULL}} }), &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_m}}, spawn, {.v = (const char *[]){"mounter", NULL}} }), &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_c}}, spawn, {.v = (const char *[]){"dmenumountcifs", NULL}} }), &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_u}}, spawn, {.v = (const char *[]){"unmounter", NULL}} }), diff --git a/config.h b/config.h new file mode 100644 index 0000000..6b30be9 --- /dev/null +++ b/config.h @@ -0,0 +1,205 @@ +/* See LICENSE file for copyright and license details. */ + +/* appearance */ +static const unsigned int borderpx = 1; /* border pixel of windows */ +static const unsigned int gappx = 6; /* gaps between windows */ +static const unsigned int snap = 32; /* snap pixel */ +static const int showbar = 1; /* 0 means no bar */ +static const int topbar = 1; /* 0 means bottom bar */ +static const char *fonts[] = {"FiraCode Nerd Font:size=10:antialias=true:hinting=true"}; +static const char dmenufont[] = "FiraCode Nerd Font:size=10:antialias=true:hinting=true"; + +static const char norm_fg[] = "#D5C4A1"; +static const char norm_bg[] = "#262626"; +static const char norm_border[] = "#665c54"; + +static const char sel_fg[] = "#262626"; +static const char sel_bg[] = "#FE8019"; +static const char sel_border[] = "#fbf1c7"; + +static const char *colors[][3] = { + /* fg bg border */ + [SchemeNorm] = {norm_fg, norm_bg, norm_border}, // unfocused wins + [SchemeSel] = {sel_fg, sel_bg, sel_border}, // the focused win +}; + +static const unsigned int baralpha = 0xd0; +static const unsigned int borderalpha = 0xd0; + +/* tagging */ +static const char *tags[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9"}; + +static const Rule rules[] = { + /* xprop(1): + * WM_CLASS(STRING) = instance, class + * WM_NAME(STRING) = title + */ + /* class instance title tags mask isfloating monitor */ + {"Gimp", NULL, NULL, 0, 1, -1}, + {"Firefox", NULL, NULL, 1 << 8, 0, -1}, +}; + +/* layout(s) */ +static const float mfact = 0.50; /* factor of master area size [0.05..0.95] */ +static const int nmaster = 1; /* number of clients in master area */ +static const int resizehints = 0; /* 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 */ + {"[M]", monocle}, + {"><>", NULL}, /* no layout function means floating behavior */ +}; + +/* key definitions */ +#define MODKEY Mod1Mask +#define TAGKEYS(KEY,TAG) \ + &((Keychord){1, {{MODKEY, KEY}}, view, {.ui = 1 << TAG} }), \ + &((Keychord){1, {{MODKEY|ControlMask, KEY}}, toggleview, {.ui = 1 << TAG} }), \ + &((Keychord){1, {{MODKEY|ShiftMask, KEY}}, tag, {.ui = 1 << TAG} }), \ + &((Keychord){1, {{MODKEY|ControlMask|ShiftMask, KEY}}, toggletag, {.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 } } + +/* some defaults */ +#define TERMINAL "st" +#define STATUSBAR "dwmblocks" + +/* commands */ +static char dmenumon[2] = "0"; /* component of dmenucmd, manipulated in spawn() */ +static const char *dmenucmd[] = {"dmenu_run", NULL}; +static const char *slockcmd[] = {"slock", NULL}; +static const char *termcmd[] = {TERMINAL, "-e", "tmux-worker", NULL}; + +#include "movestack.c" +#include "shift-tools.c" +#include + +static const Keychord *keychords[] = { + /* modifier key chord function argument */ + // &((Keychord){1, {{MODKEY, XK_}}, spawn, {} }), + &((Keychord){1, {{MODKEY | ControlMask | ShiftMask, XK_apostrophe}}, quit, {0} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_apostrophe}}, quit, {1} }), + + &((Keychord){1, {{MODKEY, XK_apostrophe}}, killclient, {0} }), + + &((Keychord){1, {{MODKEY, XK_a}}, spawn, {.v = dmenucmd} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_Return}}, spawn, {.v = termcmd} }), + &((Keychord){1, {{MODKEY, XK_Escape}}, spawn, {.v = slockcmd} }), + + &((Keychord){1, {{MODKEY, XK_l}}, shiftviewclients, {.i = +1} }), + &((Keychord){1, {{MODKEY, XK_h}}, shiftviewclients, {.i = -1} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_l}}, shiftview, {.i = +1} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_h}}, shiftview, {.i = -1} }), + &((Keychord){1, {{MODKEY | ControlMask, XK_l}}, shiftboth, {.i = +1} }), + &((Keychord){1, {{MODKEY | ControlMask, XK_h}}, shiftboth, {.i = -1} }), + &((Keychord){1, {{MODKEY | ControlMask | ShiftMask, XK_l}}, shiftswaptags, {.i = +1} }), + &((Keychord){1, {{MODKEY | ControlMask | ShiftMask, XK_h}}, shiftswaptags, {.i = -1} }), + + &((Keychord){1, {{MODKEY, XK_j}}, focusstack, {.i = +1} }), + &((Keychord){1, {{MODKEY, XK_k}}, focusstack, {.i = -1} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_v}}, incnmaster, {.i = +1} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_w}}, incnmaster, {.i = -1} }), + &((Keychord){1, {{MODKEY, XK_equal}}, setmfact, {.f = +0.05} }), + &((Keychord){1, {{MODKEY, XK_minus}}, setmfact, {.f = -0.05} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_j}}, movestack, {.i = +1} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_k}}, movestack, {.i = -1} }), + &((Keychord){1, {{MODKEY, XK_Return}}, zoom, {0} }), + &((Keychord){1, {{MODKEY, XK_Tab}}, view, {0} }), + + &((Keychord){2, {{MODKEY, XK_w}, {MODKEY, XK_t}}, setlayout, {.v = &layouts[0]} }), + &((Keychord){2, {{MODKEY, XK_w}, {MODKEY, XK_m}}, setlayout, {.v = &layouts[1]} }), + &((Keychord){2, {{MODKEY, XK_w}, {MODKEY, XK_f}}, setlayout, {.v = &layouts[2]} }), + &((Keychord){1, {{MODKEY, XK_F11}}, fullscreen, {0} }), + &((Keychord){1, {{MODKEY, XK_space}}, setlayout, {0} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_space}}, togglefloating, {0} }), + &((Keychord){1, {{MODKEY, XK_b}}, togglebar, {0} }), + + &((Keychord){1, {{MODKEY, XK_0}}, view, {.ui = ~0} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_0}}, tag, {.ui = ~0} }), + &((Keychord){1, {{MODKEY, XK_comma}}, focusmon, {.i = -1} }), + &((Keychord){1, {{MODKEY, XK_period}}, focusmon, {.i = +1} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_comma}}, tagmon, {.i = -1} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_period}}, tagmon, {.i = +1} }), + + &((Keychord){1, {{MODKEY | ShiftMask, XK_s}}, spawn, {.v = (const char *[]){"sysact", NULL}} }), + + &((Keychord){1, {{MODKEY | ShiftMask, XK_o}}, spawn, {.v = (const char *[]){"set-default-sink", NULL}} }), + &((Keychord){1, {{MODKEY | ShiftMask, XK_i}}, spawn, {.v = (const char *[]){"set-default-source", NULL}} }), + + &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_a}}, spawn, {.v = (const char *[]){"dmenumusic", NULL}} }), + &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_p}}, spawn, {.v = (const char *[]){"mpc", "toggle", NULL}} }), + &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_l}}, spawn, {.v = (const char *[]){"mpc", "next", NULL}} }), + &((Keychord){2, {{MODKEY, XK_m}, {MODKEY, XK_h}}, spawn, {.v = (const char *[]){"mpc", "prev", NULL}} }), + &((Keychord){1, {{MODKEY, XF86XK_AudioPlay}}, spawn, {.v = (const char *[]){"mpc", "toggle", NULL}} }), + &((Keychord){1, {{MODKEY, XF86XK_AudioNext}}, spawn, {.v = (const char *[]){"mpc", "next", NULL}} }), + &((Keychord){1, {{MODKEY, XF86XK_AudioPrev}}, spawn, {.v = (const char *[]){"mpc", "prev", NULL}} }), + + &((Keychord){2, {{MODKEY, XK_o}, {MODKEY, XK_l}}, spawn, {.v = (const char *[]){TERMINAL, "-e", "lf", NULL}} }), + &((Keychord){2, {{MODKEY, XK_o}, {MODKEY, XK_f}}, spawn, {.v = (const char *[]){"firefox", NULL}} }), + &((Keychord){2, {{MODKEY, XK_o}, {MODKEY, XK_n}}, spawn, {.v = (const char *[]){TERMINAL, "-e", "ncmpcpp", NULL}} }), + &((Keychord){2, {{MODKEY, XK_o}, {MODKEY, XK_m}}, spawn, {.v = (const char *[]){TERMINAL, "-e", "gotop", NULL}} }), + &((Keychord){2, {{MODKEY, XK_o}, {MODKEY, XK_t}}, spawn, {.v = (const char *[]){"thunar, NULL}} }), + + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_h}}, spawn, {.v = (const char *[]){"dmenuhandler", NULL}} }), + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_m}}, spawn, {.v = (const char *[]){"mounter", NULL}} }), + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_c}}, spawn, {.v = (const char *[]){"dmenumountcifs", NULL}} }), + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_u}}, spawn, {.v = (const char *[]){"unmounter", NULL}} }), + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_s}}, spawn, {.v = (const char *[]){"dmenusearch", "duckduckgo", NULL}} }), + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_l}}, spawn, {.v = (const char *[]){"linkhandler", NULL}} }), + + &((Keychord){2, {{MODKEY, XK_d}, {MODKEY, XK_b}}, spawn, SHCMD("dmenu-bluetooth -i -l 25") }), + + &((Keychord){1, {{MODKEY | ShiftMask, XK_t}}, spawn, SHCMD("trayer-toggle trayer --edge top --align center --widthtype request " "--padding 6 --SetDockType true --SetPartialStrut true --expand " "true --transparent true --alpha 0 --tint 0x262626 --height 18 &") }), + + &((Keychord){1, {{MODKEY | ControlMask, XK_period}}, spawn, {.v = (const char *[]){"sd", NULL}} }), + + &((Keychord){1, {{MODKEY, XK_f}}, spawn, {.v = (const char *[]){"screenlayout", NULL}} }), + + &((Keychord){1, {{MODKEY, XK_F1}}, spawn, {.v = (const char *[]){"kbswitcher", NULL}} }), + + &((Keychord){1, {{0, XF86XK_AudioMute}}, spawn, SHCMD("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle; kill -37 $(pidof " "dwmblocks)") }), + &((Keychord){1, {{0, XF86XK_AudioRaiseVolume}}, spawn, SHCMD("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+; kill -37 $(pidof " "dwmblocks)") }), + &((Keychord){1, {{0, XF86XK_AudioLowerVolume}}, spawn, SHCMD("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-; kill -37 $(pidof " "dwmblocks)") }), + &((Keychord){1, {{0, XF86XK_AudioMicMute}}, spawn, SHCMD("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle; kill -37 $(pidof " "dwmblocks)") }), + &((Keychord){1, {{MODKEY, XK_v}}, spawn, {.v = (const char *[]){"setvol", NULL}} }), + + &((Keychord){1, {{0, XF86XK_MonBrightnessUp}}, spawn, {.v = (const char *[]){"mod_backlight", "up", NULL}} }), + &((Keychord){1, {{0, XF86XK_MonBrightnessDown}}, spawn, {.v = (const char *[]){"mod_backlight", "down", NULL}} }), + + 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, Button1, sigstatusbar, {.i = 1}}, + {ClkStatusText, 0, Button2, sigstatusbar, {.i = 2}}, + {ClkStatusText, 0, Button3, sigstatusbar, {.i = 3}}, + {ClkStatusText, 0, Button4, sigstatusbar, {.i = 4}}, + {ClkStatusText, 0, Button5, sigstatusbar, {.i = 5}}, + {ClkStatusText, ShiftMask, Button1, sigstatusbar, {.i = 6}}, + {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/drw.o b/drw.o new file mode 100644 index 0000000000000000000000000000000000000000..dbafb1662bf561b45180fe2335afc7ce9362489f GIT binary patch literal 11296 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 literal 0 HcmV?d00001