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/