dms-shell'den Hyprland-lua'ya: Konfigürasyon Felsefesi Değişimi

Her sistem kurulumu bir hikaye. Bu hikayenin başlangıcı dms-shell, sonu henüz yazılmıyor.

dms-shell Neydi

dms-shell, Hyprland konfigürasyonu için yazılmış bir shell script koleksiyonuydu. Basit, anlaşılır, hızlı başlangıç için iyi. Hyprland’ın kendi konfigürasyon dili (.conf dosyaları) ile birlikte çalışıyor, shell scriptleri üzerine otomasyon inşa ediyordu.

Git’teki o commit’i hatırlıyorum: 22967a0 dms-shell legacy backup

“Legacy” kelimesi bir şeyin bitişini, yenisinin başlangıcını işaret ediyor.

Sorun Ne Değildi

dms-shell teknik olarak çalışıyordu. Ama .conf formatı — Hyprland’ın kendi konfigürasyon dili — bir noktada yetmez hale geliyor.

Shell scriptleri bu boşluğu doldurmaya çalışıyor ama yamalar üstüne yama bir süre sonra okunması zor bir yapıya dönüşüyor.

Lua Neden Mantıklı

Hyprland, 0.40+ sürümünden itibaren native Lua API’sini sunuyor. Bu bir eklenti değil, compositor’ın içine gömülü bir betik motoru.

Lua ile Hyprland konfigürasyonu:

-- keybinds.lua
local hyprland = require("hyprland")

hyprland.bind("SUPER", "Return", function()
  hyprland.dispatch("exec", "kitty")
end)

hyprland.bind("SUPER SHIFT", "Q", function()
  hyprland.dispatch("killactive", "")
end)

Bu sadece sözdizimi farkı değil. Şimdi elimde gerçek bir programlama dili var:

nixos-hyprland-lua Mimarisi

Geçiş tek bir dosya değiştirmekle olmadı. Tony Btw’nin mimarisi üzerine kurulu nixos-hyprland-lua adında ayrı bir flake yazdım (proje devam ediyor).

Bu flake, NixOS için bir Home Manager modülü sunuyor:

wayland.windowManager.hyprland.luaConfig = {
  enable    = true;
  repoPath  = "/home/xmrah/Projects/nixos-hyprland-lua";  # yerel geliştirme yolu
  keyboard.layout = "tr";
};

Flake sisteme inputs.nixos-hyprland-lua olarak ekleniyor ve nixos-config/flake.nix üzerinden bağlanıyor. Yerel geliştirme ile NixOS entegrasyonu arasındaki köprü bu.

Live-Edit: En Önemli Karar

mkOutOfStoreSymlink — bu tek satır çok şeyi değiştirdi.

Normal Home Manager konfigürasyonları Nix store’a kopyalanır. Bir değişiklik yapınca nixos-rebuild switch zorunlu. Lua dosyaları için bu kabul edilemez bir yavaşlık.

xdg.configFile."hypr/wallpaper.jpg".source =
  config.lib.file.mkOutOfStoreSymlink
    "/home/xmrah/nixos-config/assets/wallpapers/wallhaven-z8jp3o.jpg";

mkOutOfStoreSymlink ile Lua dosyaları doğrudan proje dizinine sembolik link olarak bağlanıyor. Bir Lua dosyasını düzenlediğimde hyprctl reload yeterli — rebuild yok, bekleme yok.

UWSM Entegrasyonu

Geçişin teknik olarak en kritik parçası UWSM (Universal Wayland Session Manager).

programs.hyprland = {
  enable    = true;
  withUWSM  = true;  # login loop sorununu kökten çözer
};

# Home Manager tarafında:
wayland.windowManager.hyprland = {
  systemd.enable = false;  # UWSM yönetir
};

UWSM olmadan Hyprland’ı systemd ile yönetmek bazen login loop sorununa yol açıyordu. UWSM bu ikiliği çözüyor: compositor lifecycle’ı standart bir session manager üzerinden yönetiliyor.

Sonuç

dms-shell’den Hyprland-lua’ya geçiş bir araç değişimi değil, konfigürasyon felsefesi değişimi.

Shell script’lerin deklaratif NixOS ile çelişen imperatif yapısından, Lua’nın programatik esnekliğine geçmek — bu bir tercih değil, sistemin doğal evrimi.

Şu an nixos-hyprland-lua projesi aktif geliştirme aşamasında. Her rebuild, her Lua satırı bu evrimin bir parçası.

EOF.