Simple Setup Dwm on Void

Nestero
Bismillahirrahmanirrahim

Dalam catatan ini akan dibahas setup dwm sederhana pada sistem operasi void linux. Tanpa panjang lebar seperti biasa disini akan dibahas dari compile dwm sampai menginstall compositor picom.

Compile dwm

Source dwm dapat didownload langsung disini . Untuk compile dwm pada void linux ada beberapa hal yang perlu disesuaikan yakni pada library X11, pertama ubah isi file config.mk dari :

X11INC = usr/X11R6/include
X11LIB = usr/X11R6/lib

menjadi:

X11INC = usr/include/X11
X11LIB = usr/lib/X11

Kemudian install beberapa package yang dibutuhkan untuk mengcompile dwm :

$ sudo xbps-install -S base-devel libX11-devel libXft-devel libXinerama-devel

Jika semuanya sudah siap, saatnya mengcompile dwm, masuk kedirectory dimana source dwm berada,

$ make
$ sudo make clean install

Setelah proses compile dan install selesai, dwm sudah bisa digunakan, dwm sudah bisa di jalankan secara otomatis pada saat xserver berjalan dengan menambahkan perintah pada file ~/.xinitrc :

#!/bin/sh

while true; do
   /usr/local/bin/dwm 2> ~/.dwm.log
done

Perintah diatas dimaksudkan agar apabila ada perubahan pada config dwm tidak perlu lagi logout atau bahkan restart untuk melihat perubahannya cukup direstart saja dwmnya dengan menekan tombol Meta+Shift+Q, dan semua catatan log akan disimpan pada file ~/.dwm.log

Patch dwm

Buatlah folder patch pada directory source dwm tadi, adapun patch yang digunakan ialah :

Untuk patchnya menggunakan perintah:

$ patch < patch/<nama_patch>

Apabila gagal, perlu dilakukan copy dan paste secara manual biasanya line yang gagal dipatch akan disimpan pada file .rej contoh pada file dwm.c.rej, proses ini perlu sedikit fokus. Pada kasus patch leftlayout yang bentrok dengan patch hide vacant tags pada file dwm.c bagian function buttonpress ini agak memusingkan apabila tida fokus, biar lebih simpel hapus semua function buttonpress tadi dan gantikan dengan :

void
buttonpress(XEvent *e)
{
	unsigned int i, x, click, occ = 0;
	Arg arg = {0};
	Client *c;
	Monitor *m;
	XButtonPressedEvent *ev = &e->xbutton;

	click = ClkRootWin;
	/* focus monitor if necessary */
	if ((m = wintomon(ev->window)) && m != selmon) {
		unfocus(selmon->sel, 1);
		selmon = m;
		focus(NULL);
	}
	if (ev->window == selmon->barwin) {
		i = x = 0;
		x += blw;
		if (ev->x < x) {
 			click = ClkLtSymbol;
    } else {
      for (c = m->clients; c; c = c->next)
        occ |= c->tags == 255 ? 0 : c->tags;
      do {
        /* do not reserve space for vacant tags */
        if (!(occ & 1 << i || m->tagset[m->seltags] & 1 << i))
          continue;
        x += TEXTW(tags[i]);
      } while (ev->x >= x && ++i < LENGTH(tags));
      if (i < LENGTH(tags)) {
        click = ClkTagBar;
        arg.ui = 1 << i;
      } else if (ev->x < x + blw)
        click = ClkLtSymbol;
      else if (ev->x > selmon->ww - TEXTW(stext) - getsystraywidth())
        click = ClkStatusText;
      else
        click = ClkWinTitle;
	  } 
	} else if ((c = wintoclient(ev->window))) {
		focus(c);
		restack(selmon);
		XAllowEvents(dpy, ReplayPointer, CurrentTime);
		click = ClkClientWin;
	}
	for (i = 0; i < LENGTH(buttons); i++)
		if (click == buttons[i].click && buttons[i].func && buttons[i].button == ev->button
		&& CLEANMASK(buttons[i].mask) == CLEANMASK(ev->state))
			buttons[i].func(click == ClkTagBar && buttons[i].arg.i == 0 ? &arg : &buttons[i].arg);
}

Apabila sudah melakukan patching jangan lupa untuk compile ulang dan restart dwmnya.

$ cp config.def.h config.h
$ sudo make clean install

Rule

Pada file config.def.h terdapat rule dimana rule ini digunakan untuk mengatur window sebuah app, yang akan dibahas disini adalah rule untuk membuat window menjadi floating dan membuka window pada tags tertentu, secara default dwm memberikan rule kepada 2 appp :

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 },
};
  • Gimp dibuat menjadi floating
  • Firefox dibuat agar pada saat firefox dibuka akan otomatis terbuka pada tags 9
  • Untuk mengetahui nama sebuah class suatu window bisa menggunakan tools yang bernama xprop

Key bind

Keybind dwm ditulis dalam file config.def.h dengan format modifier + key + function + argument, berikut beberapa contoh kebind default dwm :

/* modifier          key          function        argument */
{ MODKEY,            XK_p,        spawn,          {.v = dmenucmd } },
{ MODKEY|ShiftMask,  XK_Return,   spawn,          {.v = termcmd } },
{ MODKEY,            XK_b,        togglebar,      {0} },
{ MODKEY,            XK_j,        focusstack,     {.i = +1 } },
{ MODKEY,            XK_k,        focusstack,     {.i = -1 } },
{ MODKEY,            XK_i,        incnmaster,     {.i = +1 } },
{ MODKEY,            XK_d,        incnmaster,     {.i = -1 } },
{ MODKEY,            XK_h,        setmfact,       {.f = -0.05} },
{ MODKEY,            XK_l,        setmfact,       {.f = +0.05} },
{ MODKEY,            XK_Return,   zoom,           {0} },
{ MODKEY,            XK_Tab,      view,           {0} },
{ MODKEY|ShiftMask,  XK_c,        killclient,     {0} },
  • Untuk MODKEY secara default mengarah pada tombol Alt, untuk merubahnya bisa diubah pada :
/* key definitions */
#define MODKEY Mod4Mask
  • Mod4Mask mengarah pada tombol berlogo “Windows”

Dalam kasus ini akan membuat keybind untuk mengatur kecerahan dan volume dengan menggunakan tombol Fn:

  • Pertama import terlebih dahulu library keyxf86
#include <X11/XF86keysym.h>
  • Kedua buat variabel yang berisi perintah untuk mengatur kecerahan dan volume :
static const char *volup[] = {"pamixer", "-i", "10", NULL};
static const char *voldown[] = {"pamixer", "-d", "10", NULL};
static const char *mute[] = {"pamixer", "-t", NULL};
static const char *brup[] = {"xbacklight", "-inc", "10", NULL};
static const char *brdown[] = {"xbacklight", "-dec", "10", NULL};
  • Ketiga membuat keybindnya :
{0,  XF86XK_AudioMute,           spawn,  {.v = mute}},
{0,  XF86XK_AudioRaiseVolume,    spawn,  {.v = volup}},
{0,  XF86XK_AudioLowerVolume,    spawn,  {.v = voldown}},
{0,  XF86XK_MonBrightnessUp,     spawn,  {.v = brup}},
{0,  XF86XK_MonBrightnessDown,   spawn,  {.v = brdown}},

Untuk list keymap bisa menggunakan,

$ xmodmap -pk

Font

Pengaturan font pada dwm cukup mudah dan simple, seperti berikut :

static const char *fonts[] = { "JetBrainsMono Nerd Font:size=9.5:antialias=true:autohint=true",
                               "Noto Color Emoji:pixelsize=11:antialias=true:autohint=true"};

Status bar

Untuk membuat status bar pada dwm ada beberapa cara seperti menggunakan dwmblocks , tetapi pada kasus ini akan menggunakan xsetroot, buatlah beberapa file berikut :

~/.local/bin/bat.sh , install upower terlebih dahulu,

$ sudo xbps-install -S upower
#!/bin/sh

prec=$(upower -i `upower -e | grep 'BAT'` | grep 'percentage:' | awk '{print $2}')
stat=$(upower -i `upower -e | grep 'BAT'` | grep 'state:' | awk '{print $2}')

if [ "$stat" = "charging" ]; then
	printf "[🔌 %s%" "$prec]"
else
	printf "[🔋 %s" "$prec]"
fi

~/.local/bin/date.sh

#!/bin/sh

printf "$(date '+[🗓️ %A|%d|%B|%R]')"

~/.local/bin/vol.sh

#!/bin/sh

vol=$(pamixer --get-volume)
state=$(pamixer --get-mute)

if [ "$state" = "true" ] || [ "$vol" -eq 0 ]; then
    printf " 🔇 "
else
    printf "[🔊 %s%" "$vol%]"
fi

Pastikan ~/.local/bin/ sudah dimasukan kedalam PATH, dan ketiga file diatas sudah diberikan execute permission.

Selanjutnya buat file ~/.local/bin/dwm_status dan berikan execute permission

#!/bin/sh

while true; do
  xsetroot -name "$($HOME/.local/bin/vol.sh) $($HOME/.local/bin/date.sh) $($HOME/.local/bin/bat.sh) "
  sleep 1
done

Tambahkan dwm_status kedalam file ~/.xinitrc :

#!/bin/sh

dwm_status &

while true; do
   /usr/local/bin/dwm 2> ~/.dwm.log
done

Picom

Picom adalah salah satu compositor yang cukup banyak digunakan oleh para pengguna wm, untuk menginstallnya cukup mudah,

$ sudo xbps-install -S picom

Berikut konfigurasi sederhana picom, yang terletak pada directory ~/.config/picom/picom.conf :

corner-radius = 10;
round-borders = 2;
rounded-corners-exclude = [
  	"class_g = 'dwm'",
	  "window_type = 'tooltip'",
];
  • Konfigurasi diatas untuk membuat rounded pada window.

Terakhir jalankan picom sebagai autostart dengan menambahkan perintah berikut pada file ~/.dwm/autostart.sh :

pkill -f "picom"; picom &

Tags:

Referensi:

Imam Az-Zuhri rahimahullah mengatakan :

Sesungguhnya yang menyebabkan ilmu hilang adalah lupa dan tidak mengulanginya.

"Sesungguhnya yang menyebabkan ilmu hilang adalah lupa dan tidak mengulanginya."

Catatan Terkait :

#semuabisaonline dengan Jetdino

Jetdino

comments powered by Disqus
Catatan Nestero

Nestero

🔥 GNU/Linux Enthusiast 🔥
🌟 Void Linux User 🌟

Catatan Terbaru :

Steam on Void

Nestero
Catatan Nestero

Pyblog

Nestero
Catatan Nestero

Enable Virtual Cam On OBS

Nestero
Catatan Nestero