Rehber NixOS: Home-Manager kullanımı

Normalde blog serimde yaptığım bu uygulamanın daha sade ve yeni geçenlere Türkçe kaynak sunmanın daha uygun olacağı kanaatindeyim.

Yazımda kısaltmalar kullanacağım, bu nedir diye aklınızda soru işareri kalmasın.

HM: Home-Manager
1hnx: İlk Home.nix dosyam.
2hnx: Son Home.nix dosyam.
Hacs: Home. Activation.
Cfn: configuration.nix

Home-Manager'in amacı nedir?


NixOS normalde tek bir konfigürasyon dosyasından oluşuyor ancak bu dosyaları bölüp kullanmak isteyen kullanıcılara sistem değil kullanıcı seviyesinde bölmesine ve paylaşımlı olmasına olanak sağlayan bir araç.

Örneğin cfn dosyanızda bolca paket ve uygulamalara özel konfigürasyon var diyelim. Bunlara daha rahat ve sade bir şekilde görüp düzenlemek, bazı donanımlara daha az efor sarfederek daha fazla destek sunmanıza olanak tanır.


HM nasıl kurulur?



2 farklı şekilde kurabiliyoruz. Cfn dosyamıza ekleyerek veya paketi çekerek. Cfn ile kurulumda sorun yaşayan bazı kullanıcılar olabilir. Eğer daha önceden kurmaya çalışmışsanız kalıntıları kalmıştır, bu yüzden o kalıntıları kaldırıp yeniden kurmanız gerekir. Hazır temaları ilk önce kurmaya çalışırsanız yaşayacağınız kaçınılmaz son olur bu.

Kod:
{pkgs, ...}:
{
 environment.systemPackages = with pkgs; {
 home-manager
 };
}

Kod:
nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager

nix-channel --update


HM kullanımı:


HM, cfn gibi sistem değil kullanıcı seviyesinde paketleri yükler. Bu ana sisteme dokunmadığından bozulma yaşanırsa tüm sistemi bozmak yerine sadece kullanıcı hesabınızı bozar. Riskli gibi dursa da riskli değil aksine arkasında symlink gibi büyük nimetler bulunduruyor.

Kullanacağımız dosyanın adı Home.nix ve ./.config/home/home.nix konumunda bulunuyor.

Size benim ilk yazmaya çalıştığım ve en son yazdığım dosyalar üzerinden anlatacağım. İlk yazdığım dosyadaki hataları nasıl çözdüğümü ve ne işe yaradıklarını anlatacağım.
İlk dosya:

Son hali:

Yazarken fark ettim de ilk hâli de o kadar da kötü durmuyormuş.

İki sayfadan da home/home.nix yolunu takip edebilirsiniz.

Kod:
{ config, pkgs, inputs, ... }:

{
 ipmorts =
 [./stylix.nix];

 # active Home Manager.
 programs.home-manager.enable = true;

 # active stylix.
 programs.stylix.enable = true;
 xdg.configfile."home/stylix.nix".soruce = ./home/stylix.nix

 # username and home location.
 home.username = "Your_username";
 home.homeDirectory = "/home/asus";

 home.packages = with pkgs; [
 hyprland.
 waybar.
 fuzzel.
 kitty.
 ];

 # Hyprland configuration file managment.
 xdg.configFile."hypr/hyprland.nix".source = ./hypr/hyprland.nix;
 xdg.configFile."waybar/config".source = ./waybar/config;
 xdg.configFile."waybar/style.css".source = ./waybar/style.css;
 xdg.configFile."fuzzel/config".source = ./fuzzel/config;
 xdg.configFile."kitty/kitty.conf".source = ./kitty/kitty.conf;

 # environmental changes.
 home.sessionVariables = {
 XDG_SESSION_TYPE = "wayland";
 XDG_CURRENT_DESKTOP = "Hyprland";
 EDITOR = "nvim";
 TERMINAL = "kitty";
 };
}

Kod:
{ config, pkgs, ... }:

 let.
 naosDir = "${config.home.homeDirectory}/naos";

 in {

 imports = [
 "${naosDir}/modules/import.nix"
 ];

 home.username = "asus";
 home.homeDirectory = homeDir;

 home.stateVersion = "25.05";

 home.sessionVariables = {
 EDITOR = "neovim";
 TERMINAL = "kitty";
 };
 programs.home-manager.enable = true;
}

İlk dosyamda birkaç uygulama kurmuşum ve onları gerekli yerlere salt okunur şekilde yerleştirilmesi için xdg kodlarını bulundurmuşum. Ancak sürekli symlink oluşturmak ve kodun en başında olduğu gibi sürekli import edilecek dosyaları elle girmekle sürekli uğraşmak istemedim. Çünkü bu, eğer ileride flake.nix oluşturmak istersek, vakit kaybetmemize sebep olacak. 2hnx dosyamı, konunun en başında koyduğum blog girdisinde detaylıca anlattım. Dosyaların ne işe yaradığını merak edenler oraya bir göz atsın.


Dosyaları bölüp bağlarken dikkat edilmesi gerekenler:


Dosyaların adını doğru yazın gibi bir öneri olmayacak. 2Hnx'te import.nix dosyam naos/modules klasöründeki dosyaları otomatikman çekmekte. Önceden bu dosya modules klasörünün içindeydi ancak derlemeyi döngüye soktuğundan hata veriyordu. Yani bir dosyayı 2 farklı konfigürasyonda kullanmayın. Örneğin alttaki kodları inceleyelim.

Kod:
{lib, pkgs, ...}:
 {
import= [./modules/import.nix];
}

İmport.nix, okuduğu modules klasöründe olsun. Modules klasöründe knedini okuyor, okudğu dosya ise yine kendini okuyor. Veya daha farklı bir örnek vermek gerekirse modules klasöründe conflinks.nix adlı bir dosya var. Bu klasörlere symlink bağlamama olanak tanıyan dosya (detaylar blogta).

Elimizde Hyprland. Conf dosyası olsun.conflinks.nix ile ~/.config/hypr/hyprland.conf konumuna symlink oluşturdum ama aynısını Hyprland.nix dosyam ile de yaparsam dosyalar karışacağından derleme başarılı olsa bile elimizde bozuk bir konfigürasyon geçecek. İleride bunun gibi konfigürasyon dosyalarını nasıl nix ile hazırlayabileceğimiz hakkında rehber yapabilirim.

Hacs nedir ve nasıl kullanılır?


Home. Activation, Home.nix dosyamıza eklediğimiz, bazı komutlarlı bizim yerimize otomasyon kurarak çalıştırmasını sağladığımız araçtır. HM kullanıcı seviyesinde çalıştığından yazdığınız komutlara dikkat etmenizde fayda var. Grafik kullanıcı iseniz sistemde ne olur ne olmaz polkit kurun. Çünkü hacs ta kodlar terminalde değil arka planda yürür ve root yetkisi istenildiğinde bunu size bildirip izin alacak bir ekran arar. GNOME polkit veya lxqt polkit kullanabilirsiniz.

Kod:
home.activation."isim" lim.hm.dag.entryAfter ["WriteBoundary"] ''.
 echo "komutlar yürütülmeye başlandı"
 sudo systemctl --user reload waybar.
 pkill hyprland && hyprland.
 '';

home.activation."isim" komutun ne hakkında olduğunu belirttiğiniz kısımdır, isim kısmını değiştirmeniz gerekir. Tırnak işaretini kaldırmanız gerekir. Örnek home.activation.hyprreload

lim.hm.entryAfter ["WriteBoundary"] ise şundan sonra yürüt anlamına gelir. Birden çok scripti birbirine bağlayabileceğiniz anlamına gelir.

Kod içerisinde 4 tane de tırnak işareti var. Bunlar birden çok komutun olduğunu belirtir ve yürütülmesi için okunmasını sağlar. Kesme işareti kullanamazsınız. Tırnak işaretleri [""] yazıldıktan sonra ve çalıştırılacak komutlar yazıldıktan sonra sonda yazılır.
Birden çok scriptin çalıştığı örnek betik:

Kod:
home.activation."fastftechdown" = lib.hm.dag.entryAfter ["writeBoundary"] ''.
 echo "Fastfetch indiriliyor"
 sudo nix-env -iA nixos.fastfetch
'';

home.activation."fastfetchstart" = lib.hm.dag.entryAfter ["a"] ''.
 echo "Fastfetch indirildi. şimdi çalıştırılıyor."
 fastfetch
'';

Nix syntax'ında özel harf, yan çizgi vs varsa tırnak işareti içerisinde yazılması lazım. Eğer yoksa tırnak işaretine gerek yok ancak yazmayı alışkanlık haline getirmekten sakınca yok.


Rehber şimdilik bu kadar olsun. Aklınıza takılan yerleri sormaktan çekinmeyin. İyi sosyaller dilerim.
 
Son düzenleme:

Technopat Haberler

Yeni konular

Geri
Yukarı