{ pkgs, ... }: {

  # https://nixos.wiki/wiki/Fonts
  fonts.packages = with pkgs; [
    noto-fonts # Шрифт от гугла, цель которого поддержка всех языков мира
    noto-fonts-cjk-serif # Отображение иероглифов. Версия с засечками
    noto-fonts-cjk-sans # Отображение иероглифов. Версия без засечек
    noto-fonts-color-emoji
    noto-fonts-monochrome-emoji
    (nerdfonts.override {fonts = ["JetBrainsMono" "Noto" "CascadiaCode"];})
    carlito # Совместим с Calibri, разработан как его свободная альтернатива. Без засечек
    terminus_font
    inconsolata
    font-awesome
    liberation_ttf
    dejavu_fonts
    cantarell-fonts
    unifont
    unifont_upper
  ];

  systemd = { # Запуск гномовского полкита. Окно ввода пароля для рут доступа
    user.services.polkit-gnome-authentication-agent-1 = {
      description = "polkit-gnome-authentication-agent-1";
      wantedBy = [ "graphical-session.target" ];
      wants = [ "graphical-session.target" ];
      after = [ "graphical-session.target" ];
      serviceConfig = {
          Type = "simple";
          ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
          Restart = "on-failure";
          RestartSec = 1;
          TimeoutStopSec = 10;
        };
    };
  };

  services = {
    gvfs.enable = true; # Mount, trash, and other functionalities for Thunar file manager
    tumbler.enable = true; # Thumbnail support for Thunar file manager
    # flatpak.enable = true;
    # unclutter.enable = true; # Hide your mouse cursor when inactive
    # fwupd.enable = true; # DBus service that allows applications to update firmware
    # greenclip.enable = true; # https://github.com/erebe/greenclip (использую clipmenu вместо этого)
    # fstrim.enable = true; # Чистит ssd для норм производительности. Пока не пользуюсь
    # archisteamfarm = {}; # Фарм карточек стима афк. Простро раскомментить мало, надо настроить
  };

  programs = {
    zsh.enable = true;
    mtr.enable = true; # Объединяет функции утилит traceroute и ping
    gnupg.agent = {
      enable = true;
      enableSSHSupport = true;
      pinentryPackage = pkgs.pinentry-qt; # Окно ввода пароля
    };

    appimage = { # Чтоб .appimage работал
      enable = true;
      binfmt = true;
      package = pkgs.appimage-run.override { # Зависимости для нужных мне приложений
        extraPkgs = pkgs: with pkgs; [ libpng libpng12 libepoxy pcre2 double-conversion ];
      };
    };

    thunar = { # Can't I use it with home-manager? WTF
      enable = true;
      plugins = with pkgs.xfce; [
        thunar-media-tags-plugin # Tagging and renaming features for media files
        thunar-archive-plugin # File context menus for archives
        thunar-volman # Automatic management of removable drives and media
      ];
    };
    xfconf.enable = true; # For Thunar configs

    steam = {
      enable = true;
      extraCompatPackages = with pkgs; [ # Доп версии протона. Должны иметь `steamcompattool` output
        proton-ge-bin 
      ];
      # fontPackages = with pkgs; []; # Font packages to use in Steam
      # extraPackages = with pkgs; []; # Additional
      # protontricks.enable = true; # Running Winetricks commands for Proton-enabled games.
      remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
      dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
      localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
    };

    # Оптимизация для игр. https://github.com/FeralInteractive/gamemode
    gamemode.enable = true;

    # Я хз надо ли оно мне. https://github.com/ValveSoftware/gamescope
    # Подробносни тут https://ventureo.codeberg.page/source/linux-gaming.html#gamescope
    gamescope.enable = true;
    nix-ld = { # Позволяет нормально юзать либы для венва и тп
      enable = true;
      libraries = with pkgs; [
        gcc
        libGL
	glib
	libGLU.out
      ];
    };
  };

  environment.systemPackages = with pkgs; [

    ######################
    ## Программирование ##
    ######################

    # Это рекомендуют ставить не на всю систему,
    # а только на nix shell внутри проекта, где нужны эти пакеты

    go # Go programming language
    rustup # Управление версиями языка Rust
    nil # Nix language server
    hugo # Для моего блога
    python3 # Питухон ласт версии

    #libstdcxx5
    #cmake
    gcc
    #gnumake
    #glibc
    #stdenv.cc.cc.lib



    ############
    ## Архивы ##
    ############

    zip # Архивировать
    unzip # Разархивировать
    unrar # Разархивировать
    gnutar # Для .tar?
    _7zz # Это пакет для 7z? 
    bzip2 # .bz2 архивы

    ##############
    ## Terminal ##
    ##############
	
    mdadm
    cryptsetup
    openssl
    wget
    curl
    git
    xclip # Для работы буфера обмена
    ffmpeg_7 # Обработка видео. Нужен всегда и везде
    imagemagick # Обработка изображений. Мб тоже нужен всегда
    tree # Структура файлов в терминале
    gnugrep # Поиск в терминале
    gawk # Обработка и анализ текста в терминале
    rsync # Синхронизация файлов
    bat # A cat(1) clone with syntax highlighting and Git integration. 
    xorg.xwininfo # Для команды xprop? Статы окна, по типу класса
    xorg.xrandr # Для команды xrandr. Управление мониторами
    xorg.xev # Для команды xev, чтоб узнать бинды
    xdg-utils # Set of command line tools that assist applications with a variety of desktop integration tasks
    playerctl # Command-line utility and library for controlling media players that implement MPRIS
    xdotool # Fake keyboard/mouse input, window management, and more. Автоматизация
    zscroll # A text scroller for use with panels and shells https://github.com/noctuid/zscroll
    tokei # Показывает количество строк кода на разных языках внутри каталога
    pass # Менеджер паролей в терминале
    btop # Монитор ресурсов в терминале
    # rocmPackages.rocm-smi # Чтоб в btop было gpu (не работает)
    # rocmPackages_5.rocm-smi # Старая версия пакета выше. Хз какой надо
    yt-dlp # Скачивать и смотреть медиа с разных сайтов
    tasktimer # TUI task timer. Можно несколько таймеров с описанием запустить. В терминал tt
    timer # A "sleep" with progress. Таймер на пельмени "timer 5m"
    libqalculate # Advanced calculator library
    fastfetch # Пишешь в теримнал и кидаешь всем со словами I use nixos btw
    zoxide # Замена cd для частых каталогов
    fzf # Нечёткий поиск
    killall # Убить процессы. Мем, что в стоке не стоит
    libnotify # Вызов оповещений через "notify-send"
    gallery-dl # download images from several image hosting sites

    alacritty # Минималистичный терминал. Основной у меня
    # kitty # Самый быстрый протокол отображения медиа, но ssh через жопу работает

    #########
    ## GUI ##
    #########

    nekoray # VPN
    ksnip # Скрины. Аналоги - Flameshot
    kdePackages.ark # Архиватор от kde. Имеет в зависимостях blowjob
    #file-roller # Архиватор от gnome
    qbittorrent # Торренты качать
    thunderbird # Почтовый клиент для своей почты
    screenkey # A screencast tool to display your keys
    pavucontrol # PulseAudio Volume Control
    # pwvucontrol # Pipewire Volume Control (Не знаю может ли полностью заменить pavucontrol)
    networkmanagerapplet # Tray for network manager
    brightnessctl # Brightness control for laptop
    gucharmap # Проверка шрифтов. Какой шрифт какие символы отображает

    ##############
    ## Browsers ##
    ##############

    librewolf
    firefox
    chromium
    # ff2mpv # Открывать видео из браузера в mpv плеере
    lynx # Текстовый браузер в терминале. Без картинок

    ##########
    ## Docs ##
    ##########

    evince # Смотреть документы (так же превью PDF файлов для Thunar) (не читает FB2)
    # papers # Я так понимаю это современная замена для evince под GTK4. Оба от gnome
    libreoffice # Редактировать документы
    hunspell # Проверка орфографии для libreoffice
    hunspellDicts.ru_RU # Словарь для проверки орфографии
    hunspellDicts.en_US # Словарь для проверки орфографии
    calibre # Работа с ebook. Иногда даёт thumbnail в файловом менеджере
    drawio # Desktop application for creating diagrams. Вроде даёт thumbnail в ranger
    xournalpp # Xournal++ is a handwriting Notetaking software with PDF annotation support

    ###################
    ## File managers ##
    ###################

    ranger # Terminal file manager
    xfce.thunar # GUI file manager (допы выше в `programs` и `services`)
    xfce.catfish # File searching (for Thunar)
    xfce.exo # Мб надо, чтоб терминал открывать в каталоге
    ffmpegthumbnailer # A lightweight video thumbnailer
    gnome-epub-thumbnailer # Thumbnailer for EPub and MOBI books
    nufraw-thumbnailer # Thumbnailer for .raw images from digital cameras
    # mcomix # Comic book reader and image viewer. Thumbnailer for .crb comicbook archives (требует mupdf, который крашит систему)
    f3d # Fast and minimalist 3D viewer using VTK. Thumbnailer for 3D files, including glTF, stl, step, ply, obj, fbx.
    openscad # 3D model previews (stl, off, dxf, scad, csg). Этот именно для ranger, но мб пригодится и в других местах

    kdePackages.dolphin # Долфин и софт для него
    kdePackages.ffmpegthumbs
    kdePackages.kdegraphics-thumbnailers
    kdePackages.filelight

    ##################
    ## File support ##
    ##################

    kdePackages.kimageformats # Image format plugins for Qt 6
    kdePackages.qtimageformats # Plugins for additional image formats: TIFF, MNG, TGA, WBMP
    kdePackages.qtsvg # SVG support
    kdePackages.karchive # Plugin for Krita and OpenRaster images
    webp-pixbuf-loader # .webp support (what's this?)
    libwebp # .webp support
    libavif # AVIF format support
    libheif # HEIF format support
    libgsf # .odf support
    libjxl # JPEG-XL format support
    libraw # RAW format support
    jxrlib # JPEG XR image support
    poppler # PDF support
    freetype # Font rendering engine
    imath # EXR format support
    openexr # High dynamic-range (HDR) image file format

    ###########
    ## Media ##
    ###########

    strawberry # Музыкальный плеер
    obs-studio # Запись видео                                          # TODO: Настройки надо сделать декларативными
    picard # Массовый редактор метаданных музыки
    mousai # Опенсорс шазам. Со временем просит платный api
    spek # Спектрограмма аудио.
    mpv # Смотреть видео
    # Смотреть картинки
    imv # Не умеет показывать анимированные webp. Через раз может показывать avif
    qview # Умеет в анимированные webp. Не умеет открывать avif
    feh # Вроде нужен в большом количестве софта как зависимость. Может в avif, но криво

    ############
    ## Social ##
    ############

    (discord.override { # Discord
      withOpenASAR = true; # Оптимизатор дискрода
      withVencord = true; # Имба плагины                               # TODO: Настройки надо сделать декларативными
    })
    telegram-desktop

    element-desktop # Matrix клиент десктоп. Без кастом смайликов
    # cinny-desktop # Matrix клиент с кастом смайликами, похож на дс
    # https://github.com/commetchat/commet/pull/295 # Matrix клиент, фул копия дса

    ###########
    ## Games ##
    ###########

    # inputs.nix-gaming.packages.${pkgs.system}.osu-stable # osu!stable from nix-gaming
    # steam # Мб не надо сюда писать, раз через programs.steam редачу
    # heroic # A Native GOG, Epic, and Amazon Games Launcher for Linux, Windows and Mac
    # lutris # Запускать игры не из стима
    bottles # Минималистичная альтернатива lutris

    # Мб зависимости
    steam-run # На всякий случай
    mangohud # Фпс и нагрузку на пк показывает в играх
    gamemode # Оптимизации линуха и игр
    wineWowPackages.stable # support both 32- and 64-bit applications
    wineWowPackages.stableFull
    # wineWowPackages.staging # Можно назвать бета версией вайна
    winetricks # winetricks (all versions)
    # wineWowPackages.waylandFull # native wayland support (unstable)
    # protontricks # Running Winetricks commands for Proton-enabled games

    ############
    ## Design ##
    ############

    krita # Рисовать 1. Часто крашится
    gimp # Рисовать 2. Потом выберу что оставить
    blender-hip # 3д графика и рендер видео
    gcolor3 # GUI color picker
    xcolor # CLI color picker https://github.com/Soft/xcolor

    ##################
    ## Productivity ##
    ##################

    obsidian # Заметки
    planify # Task manager

    #########
    ## IDE ##
    #########

    neovim # Мб не надо писать, он у меня необычный, через nixvim flake
    # vscode # Надо в home.packages писать, чтоб расширения ставились без рута
    jetbrains-toolbox # Надо в home.packages писать. https://nixos.wiki/wiki/Jetbrains_Tools
    helix # A Kakoune / Neovim inspired editor, written in Rust.

    ###########
    ## Icons ##
    ###########

    adwaita-icon-theme
    libsForQt5.breeze-icons # qt5
    kdePackages.breeze-icons # qt6
    papirus-icon-theme
    material-icons

    ############
    ## Vulkan ##
    ############

    gfxreconstruct
    glslang
    spirv-cross
    spirv-headers
    spirv-tools
    vulkan-extension-layer
    vulkan-headers
    vulkan-loader
    vulkan-tools
    vulkan-tools-lunarg
    vulkan-utility-libraries
    vulkan-validation-layers
    vkdisplayinfo
    vk-bootstrap
    dxvk # Чтоб wine игры запускались через vulkan, а не opengl (Direct3D 8/9/10/11)
    vkd3d # Чтоб wine игры запускались через vulkan, а не opengl (Direct3D 12)
    vkd3d-proton
    # vkbasalt # Баф Vulkan для улучшения визуальной графики игр https://github.com/DadSchoorse/vkBasalt

    ###########
    ## Other ##
    ###########

    qmk # Прошивка для моих раздельных клавиатур
    vial # GUI для qmk, если клавиатура поддерживает
    fontconfig
    zlib
    google-fonts
    libva-utils # Проверяет работоспособность VAAPI?
    clinfo # Проверяет работоспособность OpenCL?
    libcap # Мб надо для nekoray
    libsecret # Хранить и получать аккаунты у приложений. Например для jetbrains toolbox
    alsa-utils # Мне для команды amixer надо
    pamixer # PulseAudio cli (громкость редачу)
    weston # Для запуска wayland only apps на x11 (ещё есть cage, на тесты ставлю оба)
    nix-index # Проверить как отображаются некоторые пакеты(например libz.so.1). Запускается nix-index, а потом nix-locate --top-level <Название пакета>
    docker
    docker-compose
    # lxqt.lxqt-policykit # Меню для воода пароля при запуске с правами админа. Пока юзаю от гнома
  ];
}
