Rehber NixOS paket yöneticilerinin kullanımı

Bu rehber NixOS'ta en çok kullanılan paket yönetim araçları hakkında bilgi verme amaçlı yazılmıştır.

Öncelikle rehbere hoş geldiniz. Bu rehberde nix-Shell, Configuration.nix ve nix-env(ufak bir kısmı, daha sonra detaylandırılmış rehberi yapılması planlandı) üzerinden paket yönetimini anlatacağım.

nix-Shell kullanımı:

Nix-Shell, terminal açık olduğu sürece paketleri indirip kullanmanıza olanak tanır.

Örneğin neofetch veya fastfetch gibi yazılımları en fazla 1 2 defa açıp daha yüzüne bakmadığımız veya ana sisteminizde kullanacağınız bir yazılımı kalıcı olarak kurmadan önce denemek isteyebilirsiniz.

Örnek kullanım (fastfetch): nix-shell -p fastfetch şeklindedir.

Tek seferde daha fazla paket indirmek için ise nix-shell -p fastfetch htop neovim şeklindedir.

Eğer kullanmak istediğiniz paketler sisteme etki edebilen paketlerse bunu sistemden izole bir şekilde çalıştırabilirsiniz. Bunun için koda --purge eklemelisiniz. Örnek: nix-shell -p python --purge

Bonus: Bash veya zsh kabuğu ile çalıştırmak için ise nix-shell -p fastfetch zsh -i zsh

Tamam yeter bu kadar, nix-Shell'i anlat anlat bitmez, nix-Shell bu kadarsa diğerlerini siz düşünün. (özellikle nix-env kodunu)

nix-env kullanımı (aşırı sadeleştirilmiş hali):

Paket yüklemek için kullanılış şekli nix-env -iA nixos.paket adı şeklindedir.

Örnek: nix-env -iA nixos.fastfetch şeklindedir.

Kurulan paketleri listelemek için: nix-env -q yazabilirsiniz.

Silmek için: nix-env -e paketadı yazabilirsiniz.
Örnek: nix-env -e fastfetch

Ufak bir bilgi vereyim. Örnek verdiğim paket üzerinden gidersem fastfetch" ≠ "fastfetch-unstable görüldüğü gibi paketin içeriğindeki ismi farklı ise doğru olanı girmelisiniz. Yularıdaki gibi listeleyip görebilirsiniz.

Configuration.nix ile paket yönetimi:

Evet, genel olarak kullanıcıların en çok muhatap olduğu kısma geldik. (keşke gelmeseydik.) neyse işi sulandırmadan anlatıma geçelim.

Ben 2 farklı şekilde anlatacağim, biri "program enable" satırı ile, diğeri ise "environment System packages" satırı ile ilgili olacak.

Programs enable: Programs enable = systemctl enable bunu unutmayalım.

/etc/nixos/configuration.nix dizininde herhangi bir satıra programs.uygulamaadi.enable = true; veya services.servisadi.enable = true; eklemek olur.
Örnek: programs.hyprland.enable = true;
Örnek: services.xserver.enable = true;

Bazı paketler yukarıdaki gibi özel ayarlara ihtiyaç duyabiliyor ancak altta bahsedeceğim yöntem yeterli olacaktır. De ve WM gibi araçlarda bu satırlara ihtiyaç duyulabilmekte. (veya başka bir yazılımda)

Environment systempackages: Kurmak istediğiniz asıl paketleri listelediğimiz yerdir. Configuration.nix dosyasının içinde varsayılan olarak bulunur ve içine sadece adını yazmanız yeterli olur.

Örnek kullanım:


Kod:
environment.systemPackages =
 map (p: pkgs.${p}) [
 "git"
 "neovim"
 "home-manager"
 "hyprland"
 ];

veya

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

daha sonra nixos-rebuild switch ile sistemi inşa ederek paketleri yüklemiş oluyoruz. Eğer geri silmek isterseniz programın olduğu satırı silebilir veya başına "#" işareri ekleyip yeniden inşa etmeniz yeterli olur.( inşa derken aklınıza inşaat gelmiyor, değil mi?)

Ufak bir not: Eğer nix-env ile bir paket kurduktan sonra konfigürasyon dosyası ile de kurmaya çalışırsanız paket yüklemesi gerçekleşse bile hata alırsınız. Bunu öğrendiğinize göre yukarıda bahsettiğim gibi silip konfigürasyon dosyanıza öyle yükleyin

İnşa artıkları yani eski yapılandırmaları silmek isterseniz nixos-collect-garbage -d ile eski yapılandırmaları temizlemiş olursunuz. Otomatikleştirmek isterseniz konfigürasyona alttaki satırları ekleyin.


Kod:
systemd.services.nix-collect-garbage = {
 description = "Nix artık temizleme";
 wantedBy = ["multi-user.target"];
 serviceConfig.ExecStart = "/usr/bin/nix-collect-garbage -d";
 timerConfig.OnBootSec = "5min";
 timerConfigOnUnitActiveSec = "1w";
};

Bu kod haftada bir kez sistem açıldıktan sonra eski yapılandırmaları temizler, isterseniz düzenleyin, kod kapalı değil ya.

Rehber buraya kadardı, umarım gözünüz korkmamıştır.
 
Son düzenleyen: Moderatör:
Boş vaktim çoktu, daha erken olabilirdi ancak not uygulamaları ile bir savaşım oldu sadece.
Mobilden zordur gerçekten. Büyük başarı olarak görürüm.
 
Sistem konfigurasyonunu declarative olarak sunuyoruz ve sistemi ona gore olusturuyor anladigim kadariyla. Burada amac sanirim ayni config dosyalari ile kurulan sistemlerin neredeyse bire bir ayni olmasi, docker gibi.

Peki sistemin config dosyalari disinda; paket spesifik konfigurasyonu iceren ( ornegin /etc/** ) dosyalarinda bir bozulma oldugunda roll-back basarisiz olmuyor mu?

Yani diyelim ki ben X paketinin versiyon 2.0.0 ini yukledim. /etc/x/config dosyasinda da 2.0.0 versiyonunun anlayabilecegi ama eski versiyonlarin anlamlandiramayacagi bir yapi kurdum. Sonrasinda X paketinin 1.0.0 versiyonuna roll-back ettigimde config dosyasi degismeyecegi icin patlamayacak mi X paketi?
 

Olmamakta. Diğer dağıtımların aksine rastgele oluşturulmuş alanlarda paketleri tutuyor. Dosya yoluna çok dikkat etmedim bu yüzden rastgele kısımdan sonrasını yazarak anlatabilirim.

rastgeledosyaadı1/packages/fastfetch
rastgeledosyaadı2/packages/fastfetch
Dosyaları indirdiğinizde farklı konumlarda bulunur ve açtığınız yapılandırmada hangi konum varsa onu başlatır. Yapılandırma 2 rastgele dosya adı 1'i kullanırken yapılandırma 3 rastgele dosya adı 2'yi kullanır. Bu sayede geri dönüşte sorun yaşanmadan kullanmaya devam edebilirsiniz. En sade bu şekilde anlatabildim.
 

Hayir paketin yasadigi alani degil de paketin kendisinin kendi konfigurasyonu nerede tuttugu ile alakali bir sey soruyorum aslinda.

Mesela "apt" maketi "/etc/apt/sources.list" altinda repolari kontrol ediyor.

Benim NixOS sistemimde her "apt" versiyonunun kendi source listesi mi var yoksa bir tane mi var?

apt paketini nerede tutarsa tutsun isletim sistemi sonucta onun da kendi icinde kendine ozel yapilandirmasi var.
 
@bitwise varsayılan olarak kendi paketinin yanında tutuyor bunu. Mesela waybar kurduğunuzda yine rastgele bir dosya adı atayıp onun içine /.config/waybar dizini açıyor. Eğer sisteminizin Home dizinine onun için yeni bir konfigürasyon açarsanız hemen sizinkine yöneliyor.

İlk kurulumda: rastgelekonum/.config/waybar gibi bir konumu kullanıyor, dosya salt okunur olduğundan bu dosyayı düzenleyemezsiniz, diğer dağıtımlarda olduğu gibi .config konumunda dosya oluşturmanız gerekir.

Eğer paketleri çektiği sunucunun adresinin nerede tutulduğunu soruyorsanız galiba /etc/nix/nix.conf içerisinde tutuyordu.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…