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?

Öğ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.

EOF.