NixOS Flake Yapısı: Neden ve Nasıl?
Bir süre boyunca configuration.nix tek dosyasıyla idare ettim. Çalışıyordu. Ama her yeni servis ekledikçe dosya büyüdü, bağımlılıklar çorba haline geldi.
Flakes tam bu noktada devreye girdi.
Flake Nedir?
flake.nix, sistemin tüm girdilerini (inputs) ve çıktılarını (outputs) tek bir şemada tanımlar. Kanalları (channels) manuel yönetmek yerine tam olarak pinlenmiş bir flake.lock dosyası elde edersin.
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix.url = "github:Mic92/sops-nix";
};
outputs = { self, nixpkgs, home-manager, sops-nix, ... }: {
nixosConfigurations.nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
sops-nix.nixosModules.sops
];
};
};
}
Dizin Yapım
~/nixos-config/
├── flake.nix
├── flake.lock # Pinlenmiş bağımlılıklar — git'te takip edilir
├── configuration.nix # Ana sistem yapılandırması
├── modules/
│ ├── hyprland.nix
│ ├── ollama.nix
│ ├── networking.nix
│ └── security.nix
└── home/
└── xmrah/
├── default.nix
├── shell.nix
└── programs/
Her servis kendi modül dosyasında. configuration.nix yalnızca imports listesinden ibaret.
Ne Kazandım?
- Tekrarlanabilirlik:
flake.lockcommit’lendiği için herhangi bir tarihte tam olarak aynı sistemi rebuild edebiliyorum. - Geçişler güvenli:
nixos-rebuild switch --flake .#nixosbaşarısız olursa önceki generation’anixos-rebuild switch --rollbackile dönyorum. - Modülerlik: Hyprland yapılandırmasını değiştirmek diğer servislere dokunmuyor.
Öğrenme eğrisi vardı — özellikle follows mekanizması ve specialArgs geçişi. Ama bir kez oturdu mu, artık başka türlüsünü düşünemiyorum.