prepare a customzed window manager
dpkg -l | grep dwm # empty
dpkg -l | grep suckless-tools # empty
dpkg -l | grep stterm # empty
apt install build-essential libx11-dev libxft-dev libxinerama-dev
apt install acpi acpid acpi-support
acpi -V
grab the official dwm dmenu st tarballs
wget https://dl.suckless.org/dwm/dwm-6.5.tar.gz wget https://dl.suckless.org/tools/dmenu-5.3.tar.gz wget https://dl.suckless.org/st/st-0.9.2.tar.gz
and some patches (see below)
apt purge suckless-tools tar xzf dmenu-5.3.tar.gz cd dmenu-5.3/ make clean install cd ../
prepare a customzed terminal
wget https://st.suckless.org/patches/scrollback/st-scrollback-ringbuffer-0.9.2.diff wget https://st.suckless.org/patches/scrollback/st-scrollback-mouse-0.9.2.diff wget https://st.suckless.org/patches/clipboard/st-clipboard-0.8.3.diff
tar xzf st-0.9.2.tar.gz
cd st-0.9.2/
patch -p1 < ../st-scrollback-ringbuffer-0.9.2.diff
patch -p1 < ../st-scrollback-mouse-0.9.2.diff
patch -p1 < ../st-clipboard-0.8.3.diff
cp -i config.def.h config.h
vi config.h
--- config.def.h 2023-02-27 15:56:31.239850725 +0100
+++ config.h 2023-02-27 15:59:01.838384993 +0100
@@ -34,7 +34,7 @@
*
* More advanced example: L" `'\"()[]{}"
*/
-wchar_t *worddelimiters = L" ";
+wchar_t *worddelimiters = L" `'\"()[]{}‘’=";
/* selection timeouts (in milliseconds) */
static unsigned int doubleclicktimeout = 300;
@@ -74,7 +74,7 @@
static int bellvolume = 0;
/* default TERM value */
-char *termname = "st-256color";
+char *termname = "xterm-256color";
/*
* spaces per tab
@@ -178,7 +178,7 @@
/* mask button function argument release */
{ ShiftMask, Button4, kscrollup, {.i = 1} },
{ ShiftMask, Button5, kscrolldown, {.i = 1} },
- { XK_ANY_MOD, Button2, selpaste, {.i = 0}, 1 },
+ { XK_ANY_MOD, Button3, clippaste, {.i = 0}, 1 },
{ ShiftMask, Button4, ttysend, {.s = "\033[5;2~"} },
{ XK_ANY_MOD, Button4, ttysend, {.s = "\031"} },
{ ShiftMask, Button5, ttysend, {.s = "\033[6;2~"} },
make clean install
cd ../
wget https://dwm.suckless.org/patches/systray/dwm-systray-20230922-9f88553.diff wget https://dwm.suckless.org/patches/attachaside/dwm-attachaside-6.4.diff wget https://dwm.suckless.org/patches/pertag/dwm-pertag-20200914-61bb8b2.diff wget https://dwm.suckless.org/patches/inplacerotate/dwm-inplacerotate-6.2.diff
tar xzf dwm-6.5.tar.gz cd dwm-6.5/ patch -p1 < ../dwm-systray-20230922-9f88553.diff patch -p1 < ../dwm-attachaside-6.4.diff patch -p1 < ../dwm-pertag-20200914-61bb8b2.diff patch -p1 < ../dwm-inplacerotate-6.2.diff
cp -i config.def.h config.h vi config.h
eventually tune your favorite terminal emulator
static const char *termcmd[] = { "terminator", NULL };
and add those below that (change USER accordingly)
static const char *scrots[] = { "/home/USER/bin/scrot-select.bash", NULL };
static const char *scrotw[] = { "/home/USER/bin/scrot-focused.bash", NULL };
static const char *lockcmd[] = { "xtrlock", NULL };
static const char *downbright[] = { "sudo", "brightnessctl", "-q", "s", "51-", NULL };
static const char *upbright[] = { "sudo", "brightnessctl", "-q", "s", "+51", NULL };
static const char *mutevol[] = { "amixer", "-D", "pulse", "set", "Master", "toggle", NULL };
static const char *downvol[] = { "amixer", "-D", "pulse", "set", "Master", "10%-", NULL };
static const char *upvol[] = { "amixer", "-D", "pulse", "set", "Master", "10%+", NULL };
within static const Key keys add those
{ MODKEY, XK_s, spawn, {.v = scrots } },
{ MODKEY, XK_f, spawn, {.v = scrotw} },
{ MODKEY, XK_x, spawn, {.v = lockcmd } },
{ MODKEY, XK_q, killclient, {0} },
{ MODKEY, XK_F7, spawn, {.v = downbright } },
{ MODKEY, XK_F8, spawn, {.v = upbright } },
{ MODKEY, XK_F9, spawn, {.v = mutevol } },
{ MODKEY, XK_F11, spawn, {.v = downvol } },
{ MODKEY, XK_F12, spawn, {.v = upvol } },
and finally build the thing
make clean install cd ../
prepare a better upper status bar
which amixer
which brightnessctl
git clone https://git.suckless.org/slstatus
cd slstatus/
cp -i config.def.h config.h
vi config.h
--- config.def.h 2023-02-24 09:12:44.405096068 +0100
+++ config.h 2023-02-27 18:33:44.106958626 +0100
@@ -65,5 +65,9 @@
*/
static const struct arg args[] = {
/* function format argument */
- { datetime, "%s", "%F %T" },
+ { run_command, "%s ", "brightnessctl g" },
+ { battery_state, "%s ", "BAT1" },
+ { battery_perc, "%s%% ", "BAT1" },
+ { run_command, "%s ", "amixer -D pulse sget Master | awk '/Front Left:/ {print $5, $6}'" },
+ { datetime, "%s", "%a %d %b %Y %T %Z" },
};
make clean install
cd ../
see dwm
For the record, Terminator’s selection delimiters are
" -,./?%&#:_"
You will still be able to reach the Ubuntu settings as such
gnome-control-center
–or– Mint MATE settings for that matter
mate-control-center
Every 5 seconds to ease that iostat call, hence removing seconds from the date
vi config.h
const unsigned int interval = 5000;
static const char unknown_str[] = "n/a";
#define MAXLEN 2048
static const struct arg args[] = {
/* function format argument */
{ load_avg, "%s ", NULL },
{ cpu_perc, "CPU:%2s%% ", NULL },
{ ram_perc, "RAM:%2s%% ", NULL },
{ run_command, "I/O:%s ", "iostat -x -p /dev/sda | grep '^sda ' | awk '{print $NF}'" },
{ netspeed_tx, "TX:%6s ", "eth0" },
{ netspeed_rx, "RX:%6s ", "eth0" },
{ datetime, "%s", "%F %H:%M" },
};
attachabove https://dwm.suckless.org/patches/attachabove/
flextile layout https://dwm.suckless.org/patches/flextile/
columns https://dwm.suckless.org/patches/columns/