nixpkgs-unstable Overlay: Kararlı ile Güncel Paketleri Birlikte Kullanmak

NixOS ile başladığınızda erken karşılaşılan bir soru var: hangi nixpkgs kanalını kullanmalıyım?

Birkaç seçenek var: nixos-26.05 gibi bir sürüm kanalı, ya da nixpkgs-unstable. Kararlı kanal altı ayda bir çıkıyor ve testlerden geçmiş paketler içeriyor. Unstable ise nixpkgs’nin main dalı — günlük commit’ler, en yeni sürümler, ama daha az garanti.

Pratikte ne yaptım? İkisini birden.

Sorun: Bazı Paketler Kararlı Kanalda Yok ya da Çok Eski

Kararlı kanal nixos-26.05’te çalışırken üç paketle sorun yaşadım:

Seçenek 1: Tüm sistemi nixpkgs-unstable’a taşımak. Ama bu, sistemi bir bütün olarak test edilmemiş paketlere açmak demek. Önemsiz değil.

Seçenek 2: Kararlı kanalı korurken belirli paketler için unstable kullanmak. Bunu overlay ile çözdüm.

Overlay Nedir?

NixOS’ta overlay, mevcut pkgs kümesini genişletme ya da değiştirme mekanizması. Bir fonksiyon alıyor (final: prev: { ... }) ve yeni bir attribute set döndürüyor. Bu sayede pkgs içine istediğiniz ek paketleri ya da override’ları ekleyebiliyorsunuz.

Unstable overlay bunun özel bir uygulaması: pkgs.unstable adıyla yeni bir attribute set ekliyorsunuz, içinde nixpkgs-unstable’dan gelen paketler var.

flake.nix’te Nasıl Kurulur?

İki adım:

1. Unstable nixpkgs’i input olarak tanımla:

inputs = {
  nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";          # kararlı
  nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; # güncel
  # ... diğer input'lar
};

2. Overlay ile pkgs.unstable ekle:

nixpkgs.overlays = [
  (final: prev: {
    unstable = import inputs.nixpkgs-unstable {
      inherit system;
      config.allowUnfree = true;
    };
  })
];

Bu tanımdan sonra herhangi bir Nix modülünde pkgs.unstable.paket-adi yazarak unstable sürüme erişebilirsiniz. Varsayılan pkgs hâlâ kararlı kanala işaret ediyor — unstable paket açıkça belirtilmediği sürece devreye girmiyor.

Gerçek Kullanım

modules/desktop/apps.nix’teki gerçek kullanım:

# Ollama: AMD GPU için ROCm destekli sürüm unstable'da
services.ollama = {
  package = pkgs.unstable.ollama-rocm;
};

# Araçlar listesinde de karışık kullanım:
environment.systemPackages = with pkgs; [
  # Kararlı kanaldan gelenler
  git
  neovim
  # ...

  # Unstable'dan gelenler
  pkgs.unstable.antigravity  # Agentic IDE
  pkgs.unstable.claude-code  # Claude CLI
];

pkgs.unstable.ollama-rocm yerine pkgs.ollama-rocm yazsaydım ya eski sürüm gelirdi ya da hata alırdım. Aradaki fark açık — hangi paketin hangi kanaldan geldiği kod içinde görünür.

Neden Her Şeyi Unstable’a Taşımadım?

Sık duyulan bir öneri: “Zaten unstable kullanıyorsan neden her şeyi oraya taşımıyorsun?”

Birkaç nedenim var:

Kararlılık garantisi. nixos-26.05 paketleri NixOS CI’dan geçmiş. Birbirleriyle uyumlu olduğu doğrulanmış. Unstable’da bazen bir paket başka bir paketle kısa süreliğine uyumsuz hale gelebiliyor.

Kademeli değişim. Kararlı kanal altı ayda bir büyük sıçrama yapıyor. Bu bir defada çok şeyin değişmesi demek — ama öngörülü. Unstable’da her gün yüzlerce commit geliyor. nixos-rebuild switch yaptığımda ne değiştiğini tam olarak bilemiyorum.

Seçici güncelleme. Overlay sayesinde sadece “unstable sürüm gerekiyor” dediğim paketleri işaretleyebiliyorum. Kalanı kararlı kalıyor.

flake.lock hâlâ her şeyi sabitliyor. İster kararlı ister unstable olsun, tüm input’lar flake.lock dosyasına commit hash olarak kaydediliyor. Unstable input kullanıyor olsam da, lock dosyası belirli bir noktayı işaret ediyor. Sistem belirsiz değil — sadece daha güncel.

Hyprland Özel Durumu

Overlay’in yanı sıra farklı bir pattern daha var: flake input’un hangi nixpkgs’i takip ettiğini belirtmek.

Örneğin Hyprland:

hyprland = {
  url = "github:hyprwm/Hyprland?ref=v0.55.0";
  inputs.nixpkgs.follows = "nixpkgs-unstable";
};

Bu satır “Hyprland’in kendi nixpkgs bağımlılığı unstable’ı takip etsin” diyor. Hyprland’i doğrudan pkgs.unstable.hyprland ile çekmiyorum — Hyprland ayrı bir flake input olarak geliyor, sadece kendi iç bağımlılıkları için unstable nixpkgs kullanıyor. Bu, Hyprland’in yeni nixpkgs özelliklerine bağlı API’leri kullanabilmesini sağlıyor.

Her iki yaklaşım da kullanım yerine göre mantıklı:

Sonuç

Overlay kurulumu basit, kazancı net:

“Unstable mı yoksa kararlı mı?” sorusu ikisi arasında seçim yapmak zorunda olmadığınızı fark edince daha az acil hale geliyor.


İlgili: Home Manager: Kullanıcı Ortamını Nix ile Yönetmek

EOF.