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.
- Koşullu mantık kurmak zorlaşıyor
- Değişkenler sınırlı
- Modüler yapı kurmak için ekstra araç gerekiyor
- Her değişiklik
hyprctl reloadgerektiriyor
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:
- Döngüler, koşullar, fonksiyonlar
- Modüler dosya yapısı (
require()) - Runtime’da değişken hesaplama
- Hyprland event’lerine reaktif tepki
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ı.