Konfigurasi DWM + Patch di Nixos

JagoTekno – Artikel ini sengaja dibuat untuk mendokumentasikan hal apa saja yang saya pelajari untuk mendapatkan konfigurasi DWM terbaik untuk NixOS.

Terhitung sudah 3 hari saya bolak balik mempelajari beberapa hal tentang nixos seperti :

  • Nixos overlay
  • Nix shell
  • Patch
  • dan lain sebagainya

Akhirnya saya berhasil melakukan patch sendiri secara manual.

Tetapi masih ada hal yang ingin saya pelajari di sistem nix yaitu :

  • Bagaimana cara melakukan build aplikasi C di Nixos?

Karena awalnya saya pikir saya bisa melakukan patch terlebih dahulu untuk DWM yang ingin saya buat. Dalam hal ini DWM versi 6.3.

Saya skip hal tersebut karena belum menemukan caranya. Akhirnya saya utak atik saja file configuration.nix.

Kemudian akhirnya DWM 6.3 berhasil terinstall dan menjalankan Patch dan konfigurasi keybind melalui (file config.h) yang saya inginkan melalui proses Overlay.

Sesuai dengan petunjuk nixwiki

Patch DWM yang saya gunakan

Saya ingin membuat DWM seminimalis mungkin, berikut patch yang saya gunakan saat ini :

Semua patch di atas tidak diubah, tinggal copy paste dari suckless.org ke folder yang diinginkan. Saya membuat folder .config/dwm/ lalu menyimpannya di sana.

Overlay file config.h

Kemudian saya download source dwm 6.3 kemudian extract file config.def.h lalu file tersebut saya rename menjadi config.h sehingga bisa digunakan sebagai file overlay untuk config.h dwm yang akan dibuild otomatis oleh Nixos.

Sebelum melakukan build, file config.h ini saya cocokkan dengan file patch.diff sesuai yang tertera pada list build pada file configuration.nix nanti.

Misalnya pada patch Systray 6.3 terdapat perubahan seperti ini :

 /* appearance */
 static const unsigned int borderpx  = 1;        /* border pixel of 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 unsigned int snap      = 32;       /* snap pixel */
+static const unsigned int systraypinning = 0;   /* 0: sloppy systray follows selected monitor, >0: pin systray to monitor X */
+static const unsigned int systrayonleft = 0;   	/* 0: systray in the right corner, >0: systray on left of status text */
+static const unsigned int systrayspacing = 2;   /* systray spacing */
+static const int systraypinningfailfirst = 1;   /* 1: if pinning fails, display systray on the first monitor, False: display systray on the last monitor*/
+static const int showsystray        = 1;     /* 0 means no systray */
+static const int showbar            = 1;     /* 0 means no bar */
+static const int topbar             = 1;     /* 0 means bottom bar */
 static const char *fonts[]          = { "monospace:size=10" };
 static const char dmenufont[]       = "monospace:size=10";
 static const char col_gray1[]       = "#222222";

Kemudian pada file config.h ini saya edit dan sesuaikan saja baris mana yang perlu ada, ditambahkan atau dihilangkan.

Intinya pada proses ini kita melakukan patch secara manual khusus untuk file config.h saja.

Struktur config dwm di nixos

|_configuration.nix
|_dwm
  |_config.h
  |_patch1.diff
  |_Systray63.diff

Setelah itu definisikan konfigurasi pada file nixos/configuration.nix

Konfigurasi dwm di nix config

    # DWM
  services.xserver.windowManager.dwm.enable = true;
  services.dwm-status.enable = true;
  services.dwm-status.order = [ "audio" "backlight" "battery" "cpu_load" "network" "time" ];

  nixpkgs.overlays = [
    (self: super: {
      dwm = super.dwm.overrideAttrs (oldAttrs: rec {
        patches = [
         ./dwm/dwm-systray-6.3.diff
         ./dwm/dwm-cool-autostart-6.2.diff
         ./dwm/dwm-ru_gaps-6.3.diff
         ./dwm/dwm-warp-6.2.diff
         ./dwm/dwm-alwayscenter.diff
         ./dwm-pertag.diff
         ./dwm/dwm-hide_vacant_tags-6.3.diff
        ];
        configFile = super.writeText "config.h" (builtins.readFile ./dwm/config.h);
        postPatch = oldAttrs.postPatch or "" + "\necho 'Using own config file...'\n cp ${configFile} config.def.h";
      });
    })
  ];

  services.xserver.displayManager.defaultSession = "none+dwm";

Setelah ini saya tinggal menjalankan perintah
sudo nixos-rebuild test

Kemudian jika tidak ada kegagalan maka lanjutkan dengan sudo nixos-rebuild switch

Jika terjadi kegagalan saat build

Setelah saya utak atik, kegagalan build saat menjalankan perintah nixos-rebuild bisa terjadi karena urutan patch yang didefinisikan pada file configuration.nix ada yang bentok. Silahkan lihat pesan kegagalan yang tertera, lalu ubah urutannya, lalu build kembali.

Jika ternyata kondisinya masih seperti itu mungkin patch yang ingin dipasang memang tidak kompatible dengan versi DWM saat ini.

Kegagalan patch pada file dwm.c tidak saya ketahui karena tidak tahu dimana letak file dwm.c tersebut.

Sedangkan untuk file config.h bisa dengan mudah diubah pada file ovelay. Tinggal sesuaikan saja.

Akhir kata

Demikian artikel singkat tentang cara build atau config DWM di Nixos.

Intinya, kita buat dulu file config.h untuk dioverlay, kemudian definisikan patch yang diinginkan, lalu build.

Pasti ada cara yang lebih elegan, silahkan diexplore.

Tinggalkan komentar