Simple Setup Dwm on Void
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 :
- always center
- autostrat
- fullgaps
- hide vacant tgas
- left layout
- save floats
- systray
- underline tags
- Untuk autostrat letakan file autostrat.sh dan autostrat_blocking.sh pada directory ~/.dwm
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:
* https://voidlinux.miraheze.org/wiki/Dwm_-
* https://suckless.org/hacking/
* https://bandithijo.github.io/blog/beberapa-command-mengecek-laptop-battery
* https://nesstero.gitlab.io/catatan/menginstall-void-linux/
Imam Az-Zuhri rahimahullah mengatakan :
"Sesungguhnya yang menyebabkan ilmu hilang adalah lupa dan tidak mengulanginya."
Catatan Terkait :
#semuabisaonline dengan Jetdino
Nestero
🔥 GNU/Linux Enthusiast 🔥
🌟 Void Linux User 🌟