{ config, lib, pkgs, modulesPath, ... }: {
imports = [ 
  ./disko.nix
      (modulesPath + "/installer/scan/not-detected.nix")
];

# Загрузочная функция.
# Имеет параметры загрузчика,
# а так же настройки initrd.
boot = {
  initrd = {
    availableKernelModules = [
      "xhci_pci"
      "ahci"
      "ohci_pci" 
      "ehci_pci"
      "usb_storage"
      "usbhid"
      "sd_mod"
      "nvidia_drm"
      "nvidia_modeset"
      "nvidia"
      "nvidia_uvm"
    ];
    kernelModules = [ ];
  };
  kernelModules = [ "kvm-amd" ];
  extraModulePackages = [ ];
  loader = {
    efi = {
      canTouchEfiVariables = true;
      efiSysMountPoint = "/boot";
    };
    grub = {
      efiSupport = true;
      device = "nodev";
      useOSProber = true;
    };
  };
  plymouth = {
    enable = true;
    theme = "bgrt";
  };
};

# Настройка интернета.
# Указывание хоста,
# а так же включение интернета.
networking = {
  hostName = "lenovo";
  networkmanager.enable = true;
  useDHCP = lib.mkDefault true;
};

# Часовой пояс.
time.timeZone = "Asia/Yekaterinburg";

# Настройка локали.
# как и вся система,
# и консоль.
i18n.defaultLocale = "ru_RU.UTF-8";
console = {
  font = "cyr-sun16";
  keyMap = "ru";
};

# Настройка пользователя.
# указание группы и оболочка.
users.users.fox = {
  isNormalUser = true;
  extraGroups = [ 
    "wheel" 
    "input" 
    "networkmanager" 
    "video" 
    "audio" 
  ];
  shell = pkgs.zsh;
};

# Автозагрузка оконного менеджера.
services.getty.autologinUser = "fox"; 
environment.loginShellInit = ''
  [[ "$(tty)" == /dev/tty1 ]] && Hyprland
'';

# Включение защитных утилит.
# тот же sudo для авторизации
# по паролю.
security = {
  polkit.enable = true;
  sudo = {
    enable = true;
    extraRules = [{
      commands = [
        {
          command = "${pkgs.systemd}/bin/reboot";
          options = [ "NOPASSWD" ];
        }
        {
          command = "${pkgs.systemd}/bin/poweroff";
          options = [ "NOPASSWD" ];
        }];
      groups = [ "wheel" ];
    }];
  };
};

# Пакеты для всей системы.
# Содержат утилиты и шрифты.
environment = {
  systemPackages = with pkgs; [
    # Для никс
    nh
    home-manager

    # Файлы/документы
    neovim
    git
    tree
    wget
    unrar

    # Аналитика
    fastfetch
    btop

    # Компилятор
    gcc

    # Для оборудования #
    nvidia-vaapi-driver
    nv-codec-headers
    ffmpeg-full

    dmidecode
    nodejs_24
  ];
};
fonts = {
  packages = with pkgs; [
    cantarell-fonts
    noto-fonts
    noto-fonts-cjk-sans
    noto-fonts-emoji
    fira-code-symbols
    fira-code
    dejavu_fonts
    jetbrains-mono
    nerd-fonts.symbols-only
    nerd-fonts.jetbrains-mono
  ];
  fontconfig.defaultFonts.emoji = [ "Noto COlor Emoji" ];
};

# Включение программ через функцию programs.xxxx.
programs = {
  adb.enable = true;
  gamemode.enable = true;
  zsh.enable = true;
  gamescope = {
    enable = true;
    capSysNice = true;
  };
  steam = {
    enable = true;
    gamescopeSession.enable = false;
  };
};

# Системные настройки.
# Никс + система.
system.stateVersion = "25.05"; 
nixpkgs = {
  config.allowUnfree = true;
  hostPlatform = lib.mkDefault "x86_64-linux";
};
nix.settings.experimental-features = [ "nix-command" "flakes" ];

# Сервисы
services = {
  xserver.videoDrivers = [ "nvidia" ]; #
  desktopManager = { 
    gnome.enable = true;
    plasma6.enable = false;
  };
};

# Оборудование
hardware = {
  pulseaudio = {
    enable = true;
    support32Bit = true;
  };
  graphics.enable = true;
  opengl.enable = true;
  nvidia = { #
    modesetting.enable = true;
    powerManagement = {
      enable = false;
      finegrained = false;
    };
    open = false;
    nvidiaSettings = true;
    package = config.boot.kernelPackages.nvidiaPackages.stable;
  };
};

systemd.services.amnezia = { #
  enable = true;
  wantedBy = [ "multi-user.target" ];
  serviceConfig = {
    Description = "AmneziaVPN-Service starter";
    Type = "simple";
    ExecStart = "${pkgs.amnezia-vpn}/bin/AmneziaVPN-service";
  };
};
virtualisation.vmware.host.enable = true; #

}

