Uzun bir aradan sonra başladığım 3.rehberi okurken umarım sıkılmazsınız, öğrenip detaylara alışmak biraz yorucu da.
Öncelikle Home-Manager nedir ne değildir onu konuşalım. Kabaca söylemek gerekirse sistemi yönetirken kullanıcıya rahatlık vermek, sisteme doğrudan etki etmeden çeşitli konfigürasyonları bir arada tutmak amaçlı kullanılan bir araç.
Part 2'de anlattığım gibi burada da konfigürasyon dosyamızı öyle hazırlıyoruz. Yaani
Öncelikle
Kuracağımız yazılımlar:
Eğer bundan bir şey anlamadıysan bildiğin yol ile kuralım bunu.
Kurduktan sonra
Bunları yaptıktan sonra Home-Manager kurulmuş olacak.
Hemen varsayılana en yakın
Tam olarak böyle gelmiyor, ancak varsayılan halinden izler taşıması için bu şekilde bıraktım.
Şimd bölümleri açıklama zamanı
Bu
En basit bu şekilde anlatabildim, şimdi ise benim
Öncelikle ağacı göstereyim ki kafanız karışmasın.
Kodları göstermeden önce ne işe yaradıklarını söylemekte fayda var. Çünkü çok fazla detaya gireceğiz
Evet. Varsayılana göre boş ve bir farklılık var. Fark edildiği gibi let ve in girdileri var, hemen anlatayım.
Import kısmı ile oluşturduğum
Let kısmını inceleyelim. Home ve modulesdir satırları varsayılan kullanıcının dizinini temsil etmekte. Değiştirmenize gerek yok, otomatikman sizin oturumunuza bağlanır.
Import ise aktarılanları
Bende modüller
Hadi modules içindeki ilk dosyam olan
Mantık şu: Klasörü belirt, kaynağını göster ve içini dahil et.
Bu dosya symlink oluşturmak ve yönetmek için var.
Eğer
Bu sefer detaylı olduğunu düşündüğüm bir rehber yazmış durumdayım, umarım anlaşılırdır.
olur da anlamazsanız konu açın, bilen biri cevaplayacaktır.

Öncelikle Home-Manager nedir ne değildir onu konuşalım. Kabaca söylemek gerekirse sistemi yönetirken kullanıcıya rahatlık vermek, sisteme doğrudan etki etmeden çeşitli konfigürasyonları bir arada tutmak amaçlı kullanılan bir araç.
Home-Manager kurulumu
Part 2'de anlattığım gibi burada da konfigürasyon dosyamızı öyle hazırlıyoruz. Yaani
configuration.nix ≈ home.nix
olarak düşünülebilir. Dalgalı eşittirin sebebi kendilerine ait bazı ufak ayrılıkları olmasıdır. Onu da ileride göreceğiz.Öncelikle
configuration.nix
dosyamızı istediğiniz bir editör ile açıp içine kullanacağımız yazılımları yazmamız gerekli. Part 1'de anlattığım gibi paketleri environment.systemPackages
satırına eklemeniz gerekiyor ancak ben orada yazdığım satırların aksine bu sefer fonksiyon kurarak yazılımları ekleyeceğim, maksat farklı yollarında olduğunu göstermek.Kuracağımız yazılımlar:
home-manager & hyprland
olacak, bunun eklememiz gereken satırlar şu şekilde olacak.
Kod:
environment.systemPackages =
map (p: pkgs.${p}) [
"home-manager"
"hyprland"
];
Eğer bundan bir şey anlamadıysan bildiğin yol ile kuralım bunu.
Kod:
environment.systemPackages = with pkgs; [
home-manager
hyprland.
];
Kurduktan sonra
home-manager init
ile hazır home.nix
dosyasını oluşturabilirsiniz. Olurda benim gibi Home-Manager yok hatası alırsanız yukarıdaki yönetmlerin aksine manuel olarak kurmanız gerekir. Bunun için terminale alttaki kodları girip yeniden Home dosyanızı oluşturun.
Kod:
nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
nix-channel --update
Bunları yaptıktan sonra Home-Manager kurulmuş olacak.
Home-Manager kullanımı
Hemen varsayılana en yakın
home.nix
dosyası üzerinden örnek vererek anlatıma geçelim. otomatik düzeltme sağ olsun kodları kopyala yapıştır yaptığınızda bolca hata alabileceğinizden yapmayın.
Kod:
{ config, pkgs, ... }:
{
home.username = "user";
home.homeDirectory = "/home/default";
home.stateVersion = "25.05";
# The home.packages option allows you to install Nix packages into your.
# environment.
home.packages = with pkgs; [
pkgs.nerd-fonts.iosevka-term
waybar.
fuzzel.
mako.
wofi-emoji
clock-rs
kitty.
nautilus.
pavucontrol.
grim.
slurp.
fastfetch.
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage.
# plain files is through 'home.file'.
home.file = {
# # symlink to the Nix store copy.
# ".screenrc".source = dotfiles/screenrc;
# "./configs/waybar" = nix-dotfiles/waybar; recursive = true;
# # You can also set the file content immediately.
# ".gradle/gradle.properties".text = ''.
# org.gradle.console=verbose
# org.gradle.daemon.idletimeout=3600000
# '';
};
home.sessionVariables = {
EDITOR = "neovim";
TERMINAL = "kitty";
};
programs.home-manager.enable = true;
}
Tam olarak böyle gelmiyor, ancak varsayılan halinden izler taşıması için bu şekilde bıraktım.
Şimd bölümleri açıklama zamanı

home.username ="user"
=> bu dosyamızın hangi kullanıcıya tanımlı oldduğunu gösterir. Hazır konfigürasyonlarda değiştirmeniz gerekir.home.homeDirectory ="/home/default"
=> varsayılan olarak ayarlı olan yaani username kısmında belirlediğiniz kısmımdan bahseder. Bunu ileride değiştereceğiz. Kendi dosya ağacımı gösterdiğim zaman anlarsınız.home.stateVersion "version"
=> nix sürümünüz ne ise onunla değiştirin. configuration.nix
dosyanızdan bulabilirsiniz.home.packages
=> configuration.nix kısmına gidin, orası ile aynı.home.file
=> symlink oluştururken kullanılır ancak daha iyi bir alternatifi bulunmakta. Kısaca anlatmak gerekirse kendisi /home/default
kısmında bulunan klasörlerde bulunan verileri okuyup salt okunur bir şekilde gerekli yere bağlayabilir. Örnek:
JavaScript:
home.file = {
"./.config/hypr/" = ./nix-dotfile/hypr;
recursive = true;
};
Bu
/home/user/nix-dotfile/hypr
konumunu içindekiler ile beraber /home/user/.config/hypr
konumuna symlink oluşturur. symlink oluşturulan konumdakiler salt okunur olduğundan değiştirilemezler.home.sessionVariables
=> varsayılan yazılımları belirlediğiniz kısımdır.En basit bu şekilde anlatabildim, şimdi ise benim
home.nix
dosyama bakalım.benim nix ağacım
Öncelikle ağacı göstereyim ki kafanız karışmasın.
Kod:
NAOS.
|--/home => home.nix |--/import/import.nix
|
|--/modules => conflinks.nix | pkgs.nix | hyprland.nix
|
|--/.config => -/hypr/hyprland.conf |-/waybar {style.css/ confıg.jsonc} |-/fuzzel/fuzzel.ini
|
|--/nixos => configuration.nix | hardware-configuration.nix
|
|- flake.nix (Daha yazılmadı. 4.rehber için hazırlık yapılacak.)
Kodları göstermeden önce ne işe yaradıklarını söylemekte fayda var. Çünkü çok fazla detaya gireceğiz

Home.nix
:
Kod:
{ config, pkgs, ... }:
let.
hmdir = "/home/user"
naosDir = "${hmdir}/naos";
in {
imports = [
"${naosDir}/home/import/import.nix"
];
home.username = "user";
home.homeDirectory = homeDir;
home.stateVersion = "25.05";
home.sessionVariables = {
EDITOR = "neovim";
TERMINAL = "kitty";
};
programs.home-manager.enable = true;
}
Evet. Varsayılana göre boş ve bir farklılık var. Fark edildiği gibi let ve in girdileri var, hemen anlatayım.
let
=> değişikliğin atandığı ve kullanıcının işini kolaylaştırması için eklemeler yapılır. Tıpkı yaptığım naosDir
tanımlaması gibi.in
=> normal bir şekilde kodlarımızı eklediğimiz bölümdür, uzun uzun yazmak yerine değişkenleri de kullanamamız için işimizi kolaylaştırır.Import kısmı ile oluşturduğum
import.nix
dosyasından veri çekmekte. Veri çekmek derken kodu alıp Home. Nix dosyamız ile birleştiriyor diyebiliriz.import.nix
:
JavaScript:
{ config, pkgs, lib, ... }:
let.
homeDir = "home/user";
modulesDir = "${homeDir}/naos/modules";
moduleFiles = builtins.attrNames (builtins.readDir modulesDir);
nixFiles = builtins.filter (name: lib.hasSuffix ".nix" name) moduleFiles;
fullPaths = builtins.map (name: "${modulesDir}/${name}") nixFiles;
in.
{
imports = fullPaths;
}
Let kısmını inceleyelim. Home ve modulesdir satırları varsayılan kullanıcının dizinini temsil etmekte. Değiştirmenize gerek yok, otomatikman sizin oturumunuza bağlanır.
modulesFiles
=> modülleri belirttiğimiz klasörün içini tarar.nixFiles
=> adında .nix
içeren dosyalari filtreler.fullPaths
=> modüller klasördündeki .nix
içeren dosyaları içe aktarır.Import ise aktarılanları
home.nix
ile birleştirir.Bende modüller
modules
klasörünün içinde ancak sizde böyle olmak zorunda değil, nasıl derseniz mödüller/ahmet/bilgi isleme merkezi
gibi klasör isimleri yazabilirsiniz.
Hadi modules içindeki ilk dosyam olan
conflinks.nix
dosyama bakalım.
Kod:
{ config, lib, ... }:
let.
homeDir = "/home/asus"
naosDir = "${homeDir}/naos";
confD = "${naosDir}/.config";
in.
{
xdg.configFile = {
"waybar" = {
source = "${confD}/waybar";
recursive = true;
};
"hypr" = {
source = "${confD}/hypr";
recursive = true;
};
"fuzzel" = {
source = "${.confD}/fuzzel;
recursive = true;
};
};
}
Mantık şu: Klasörü belirt, kaynağını göster ve içini dahil et.
xdg.configFile
doğrudan /home/user/.config
klasörüne bağlar bu yüzden bağlayacağınız klasörün sadece adını yazmanız yeterli olacaktır.Bu dosya symlink oluşturmak ve yönetmek için var.
home.file =
yapısı yerine xdg.configFile
yapısı kullandım çünkü bu şekilde daha derli toplu duruyor ve düzenleyip kullanması daha rahat geliytor bana. symlink oluşturduğunuz dosyalar salt okunur olduğundan silinemez. Silmek istenilirse bulunduğu klasörü silmeniz gerekir.hyprland.nix
dosyamda Hyprland için gerekli düzenlemeler ve paketler yer almakta. Çok üstünde durmayacağım, diğer linux dağıtımlarında bashrc
ve zshrc
ayarlarınızı bu dosyaya da ekleyebilmektesiniz.
Kod:
{ config, pkgs, ... }:
{
home.packages = with pkgs; [
hyprland.
xdg-desktop-portal-hyprland
brightnessctl.
playerctl.
wl-clipboard
pavucontrol.
font-awesome
waybar.
fuzzel.
mako.
wofi-emoji
clock-rs
kitty.
nautilus.
grim.
slurp.
];
home.sessionVariables = {
XDG_SESSION_TYPE = "wayland";
XDG_CURRENT_DESKTOP = "Hyprland";
NIXOS_OZONE_WL = "1";
WLR_NO_HARDWARE_CURSORS = "1";
GTK_USE_PORTAL = "1";
};
}
pkgs.nix
dosyası ise ihtiyaç duyulan paketleri bir arada tuttuğumuz pakettir. Bu arada unutmadan dosyalara istediğiniz isimleri verebilirsiniz, yukarıda da bahsetmiştim.
Kod:
{ pkgs, ...}
{
home.packages = with pkgs; [
onlyoffice-desktopeditors
vscode.
neovim.
];
}
Eğer
fonts.fontsConfig.enable
ekleyecekseniz kodun başına lib
ve config
eklememelisiniz yaani { pkgs, lib, config, ...}
olarak düzenleyeceksiniz.Bu sefer detaylı olduğunu düşündüğüm bir rehber yazmış durumdayım, umarım anlaşılırdır.

