Rehber Rebuild sonrası home-manager neden bozulur?

  • Konuyu başlatan Maomao
  • Başlangıç Tarihi
  • Mesaj 4
  • Görüntüleme 156
Selamlar. NixOS'ta configuration.nix üzerinden home-manager kuranlar ikinci ve sonralarında derleme ile ilgili sorunlar yaşayabilmekte. Bende sorun yaşayanlara çözüm bulmak, yeni geçmek isteyenlerin de neler yaparak hatalardan kaçınabileceklerinden bahsedeceğim.


Yaşanan sorun nedir?​


Home-manager, home-manager switch komutundan sonra "hâli hazırda olan yapılandırmadan dolayı derlenemiyor" veya benzeri bir hata verir. Bu sistem seviyesinde derlenmiş eski home-managerın kalıntısının kaldığını, ve sistemde çakışan paket oluşup çökmesini engellemek için alınan bir önlem. ./config/home/home.nix dosyasını her seferinde silip yeniden yazmak hem bizler için bıkkınlık kaynağı, hemde deklaratif yapıya karşı.
(Çözümlerden birini az önce verdim ama biz onu kullanmayacağız.)




Çözüm yolları:​

1. Flake ile modülleştirmek
2. Nix-shell ile o sistemde kalıcı hâle getirmek

Flake ile modülleştirmek:​

Muhtemelen başta en çok uğraştıracak, ama alışınca da deklaratif yapısı ile tek komut ile sistemi kurmanın zevkini verecek yöntem. (Kendimden biliyorum)

Öncelikle configuration.nix dosyanızın herhangi bir yerine nix.settings.experimental-features = [ "nix-command" "flakes" ]; yazıp rebuild edin. Flake rehberi yazdığım vakitte hâlâ tam olarak stabil sayılmadığından etkinleştirilmesi gerek.

Rebuild sonrası cd /etc/NixOS ile konfigürasyonun yanına geldikten sonra nix flake init ile flake.nix dosyamızı oluşturalım. Nano/vim veya başka bir editör ile dosyayı açıp inputs = {}; bloğunun içine bunları yapıştırın:
Kod:
home-manager.url = "github:nix-community/home-manager";
   
home-manager.inputs.nixpkgs.follows = "nixpkgs";

Şimdi ise outputs = {}; bloğunu düzenleyelim. Parantezin içine home-manager ekleyelim, yani şöyle gözükecek: outputs ={self, nixpkgs, home-manager}@inputs: {};

Son olarak @inputs: {}; bloğuyla modülleştirmek kaldı. Verdiğim kodlar ile ekleyebilirsiniz:
Kod:
specialArgs = { inherit inputs; };
      modules = [
        ./NixOS/hardware-configuration.nix
        ./NixOS/configuration.nix
        home-manager.NixOSModules.home-manager
        {
          home-manager.useGlobalPkgs = true;
          home-manager.useUserPackages = true;
          home-manager.backupFileExtension = "backup";
          home-manager.users.asus = import ./home.nix;
          home-manager.extraSpecialArgs = { inherit inputs; };
        }
      ];

Bunu system = "x86_64-linux"; satırının altına ekleyebilirsiniz. Daha sonra ise sudo NixOS-rebuild switch -- flake .# ile derleyebisiniz. flake.nix ile aynı konumda olduğunuzdan emin olun. Örnek olması adına kendi flake dosyamı da alta bırakacağım, ayrıca sizde "flakes for beginner" araması yapıp başka örnekler bulabilirsiniz.

nix-env ile kurma:​


Konfigürasyonunuzdan home-manager satırını sildiğinizi varsayıyorum, çünkü paletlerin çakışıp boolean olmasını istemeyiz. Bu yüzden silmediyseniz silip rebuild yapın ve devam edin.

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

nix-channel --update

nix-shell '<home-manager>' -A install

Bu kurulumu yaparsanız home.nix dosyanızı yedeklemeniz ve el ile yeniden yerleştirmeniz gerekebilir.





Daha sonra ise siz nasıl kullanmak istiyorsanız o şekilde ayarlayabilirsiniz. Umarım en az hata ile NixOS kullanmaya devam edersiniz!
 
Son düzenleyen: Moderatör:

Technopat Haberler

Yeni konular

Geri
Yukarı