NixOS - Полный Разбор: Nixpkgs, Flakes, home-manager

NixOS - Полный Разбор: Nixpkgs, Flakes, home-manager

Обзор Nix и его функционального пакетного менеджера

  • Приветствие и анонс обзора дистрибутива Nix, включая функциональный пакетный менеджер NX.
  • Объяснение декларативного подхода в программировании, который фокусируется на том, что нужно сделать.
  • Сравнение императивного и декларативного программирования через аналогию с естественными языками.

Проблемы развёртывания программного обеспечения

  • Описание проблемы различий между системами разработчика и конечного пользователя.
  • Упоминание о библиотеках, необходимых для работы программ, и их отсутствии у пользователей.
  • Интерференция обновлений пакетов может привести к несовместимости.

Решения Nix для проблем с пакетами

  • Пакетный менеджер изолирует пакеты в директориях с криптографическими хэшами.
  • Файлы пакетов аккуратно организованы, что предотвращает разброс по файловой системе.
  • Детерминизм: одинаковые входные данные дают одинаковый результат независимо от окружения.

Функциональные особенности Nix

  • Возможность иметь две версии одного пакета на одной системе без конфликтов.
  • Декларативный подход позволяет создавать функции установки пакетов как деривации.
  • Обновления на Nix являются атомными и не создают временных окон для ошибок.

Конвертация и установка пакетов

  • Перед установкой создаётся экземпляр файла default.NX для упрощения процесса.
  • Язык NX меняется, поэтому используется более примитивный язык для конвертации инструкций.

Как работает пакетный менеджер NX?

Основные концепции

  • Пакетный менеджер NX использует хэширование, обрезая его до 160 бит для получения длины в 32 символа.
  • NX управляет пакетами аналогично языкам программирования, используя диск вместо оперативной памяти и деривации вместо адресов.
  • Доступ к деривациям осуществляется через их путь, что упрощает работу с зависимостями.

Проблемы традиционных подходов

  • Традиционные пакетные менеджеры основываются на предположениях о путях к файлам и адресам в памяти.
  • Если предположение верно, система работает гладко; иначе возникают проблемы с репродукцией.
  • Высокоуровневые языки и системы управления пакетов стремятся уменьшить зависимость от предположений.

Разработка Nyx OS

  • После появления NX началась работа над Nyx OS для упорядочивания конфигураций операционных систем.
  • Конфигурация описана как чистые функции, что обеспечивает детерминированность системы.
  • Изоляция пакетов позволяет легко откатываться к предыдущим конфигурациям.

Установка дистрибутива Nyx OS

Процесс установки

  • Установка системы похожа на Arch, но проще благодаря графическому интерфейсу или утилите командной строки.
  • Для генерации конфигурации используется команда N generate config Root Mount.

Основы языка NX

  • Язык NX поддерживает строки, числа, логические значения и массивы (списки).
  • Создание переменных происходит с помощью синтаксиса let in, а доступ к свойствам объектов — через оператор точка.

Конфигурация системы

  • Файл configuration.nix принимает аргументы и выдает изменённую конфигурацию системы.

Создание конфигурации диска

  • Находим репозитории на GitHub, создаём файл и копируем код из репозитория. Создаём таблицу разделов с Бут разделом 500 Мб и Root разделом.
  • Заменяем файловую систему на bfs для виртуальной машины. Конфигурация дисков готова, ссылки на документацию будут в описании.
  • Сохраняем файл и вводим команду для указания пути к конфигурации. После завершения все разделы автоматически примонтируются.

Редактирование конфигурационного файла

  • Устанавливаем текстовый редактор Vim через конфигурационный файл, открываем config и раскомментируем нужные строки.
  • Для установки дополнительных программ добавляем их в массив без точек с запятой. Можно искать пакеты через сайт или консоль.
  • После добавления пакетов сохраняем файл и обновляем конфигурацию командой nixos-rebuild switch.

Обновление системы и управление версиями

  • Перезагружаемся, чтобы увидеть новые опции в загрузчике после установки Vim. Старые пакеты не удаляются при обновлении.
  • Команда nixos-rebuild switch выполняет несколько этапов: пересмотр конфигурации, установка необходимых пакетов и перезапуск сервисов systemd.
  • Новый системный профиль хранится в определённой директории, что позволяет создавать новую систему без перезагрузки.

Создание учётной записи пользователя

  • Создаём учётную запись пользователя, задаём пароль и выходим из Рута для входа под обычным пользователем.
  • Устанавливаем графическое окружение Xfce, меняем свойства в конфиге X сервера на True и обновляем конфигурацию.

Обновление каналов и управление пакетами

  • Команда nixos-channel --list показывает доступные каналы. Можно заменить стабильный канал на unstable для новых версий пакетов.
  • Обновляем каналы с помощью nixos-channel --update и nixos-rebuild switch --upgrade. Старые версии пакетов остаются доступны.

Очистка системы от старых поколений

  • Удаляем старые поколения nixos для освобождения места с помощью команды nix-env --delete-generations.

Создание конфигурации Home Manager

  • Для начала необходимо указать имя пользователя, путь к домашней директории и версию.
  • Настройка Neo Vim с плагинами через Home Manager; добавление необходимых строк в конфигурацию.
  • Обновление каналов на NixOS императивное, что может вызвать проблемы с TCI.

Использование флейков

  • Флейки позволяют писать код на языке НИКС с зависимостями, разделенными на inputs и outputs.
  • После выполнения кода создается файл flake.log с версиями использованных зависимостей.
  • Написание собственного флейка для конфигурации системы.

Настройка инпутов и аутпутов

  • Указание канала N packages как инпута и создание функции для вывода конфигурации.
  • Задание архитектуры системы и модулей в функции outputs.
  • Сохранение изменений и обновление флейка командой nixos-rebuild switch.

Добавление Home Manager в флейк

  • Добавление атрибута Home Manager в инпуты флейка для синхронизации версий.
  • Создание конфигурации Home Manager с указанием имени пользователя и пакетов.
  • Использование синтаксиса inherit для упрощения кода.

Разделение конфигурации на модули

  • Разделение конфигурации на модули для удобства управления настройками.

Конфигурация NixOS

  • Выход из виртуальной машины и демонстрация конфигурации NixOS с использованием unstable ветки.
  • Конфигурационные файлы разбиты на две папки: nxs и Home Manager, каждая программа имеет свой модуль.
  • Плюсы NixOS: идентичная система, контроль версий пакетов, откаты к предыдущим конфигурациям.

Плюсы и минусы NixOS

  • Декларативные файлы пакетов упрощают управление по сравнению с другими дистрибутивами.
  • Установка пакетов занимает больше времени из-за необходимости расчета дериваций.
  • Сложность в изучении системы на начальном этапе, но со временем становится проще.

Ресурсы для изучения NixOS

  • Рекомендуется использовать N Man для инструкций по установке и настройке пакетов.
  • Полезен ресурс Zero To NX для глубокого изучения языка NX и пакетного менеджера.
  • Кандидатская диссертация разработчика NixOS содержит подробное объяснение всех аспектов системы.

Заключение

Video description

Видео, которое я обещал ещё полгода назад наконец вышло. Здесь я подробно разберу дистрибутив NixOS, его пакетный менеджер и язык Nix: Флейки, home-manager, установка, настройка, работа языка Nix на более низком уровне и многое другое. Мой конфиг: https://github.com/Andrey0189/nixos-config Скачать NixOS: https://nixos.org/download/ Nixpkgs search: https://search.nixos.org/packages Disko примеры: https://github.com/nix-community/disko/tree/master/example NixOS Manual: https://nixos.org/manual/nixos/stable/ Nix Reference Manual: https://nixos.org/manual/nix/stable/introduction Nix pills: https://nixos.org/guides/nix-pills/06-our-first-derivation Home manager option search: https://home-manager-options.extranix.com/ Zero to Nix: https://zero-to-nix.com/ Диссертация: https://edolstra.github.io/pubs/phd-thesis.pdf Команды для установки home-manager: $ nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager $ nix-channel --add https://github.com/nix-community/home-manager/archive/release-23.11.tar.gz home-manager Музыка из видео: https://www.youtube.com/watch?v=MM87r7GjzW8 https://www.youtube.com/watch?v=wAukvwLCVbM https://www.youtube.com/watch?v=5cmlgvekbYY https://www.youtube.com/watch?v=7tTVYfgDf6g https://www.youtube.com/watch?v=w4TNGhSj2tc https://www.youtube.com/watch?v=b0q5PR1xpA0