NixOS, сборка пакетов из исходного кода

Я думаю, что NixOS великолепен, но не может понять, как собрать пакет из исходного кода. Понимание языка nix не проблема, но как узнать, что добавить в default.nix для сборки пакета. Возьмем, к примеру, выражение nix для gedit:

    { stdenv, intltool, fetchurl, enchant, isocodes
, pkgconfig, gtk3, glib
, bash, wrapGAppsHook, itstool, libsoup, libxml2
, gnome3, librsvg, gdk_pixbuf, file, gspell }:

stdenv.mkDerivation rec {
  inherit (import ./src.nix fetchurl) name src;

  propagatedUserEnvPkgs = [ gnome3.gnome_themes_standard ];

  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];

  buildInputs = [ gtk3 glib intltool itstool enchant isocodes
                  gdk_pixbuf gnome3.defaultIconTheme librsvg libsoup
                  gnome3.libpeas gnome3.gtksourceview libxml2
                  gnome3.gsettings_desktop_schemas gnome3.dconf file gspell ];

  enableParallelBuilding = true;

  preFixup = ''
    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ gnome3.libpeas gnome3.gtksourceview ]}")
  '';

  meta = with stdenv.lib; {
    homepage = https://wiki.gnome.org/Apps/Gedit;
    description = "Official text editor of the GNOME desktop environment";
    maintainers = gnome3.maintainers;
    license = licenses.gpl2;
    platforms = platforms.linux;
  };
}

Someone Как кто-то может прийти к этому решению? Я должен что-то упустить.

1 ответ

Неудивительно, что такое определение пакета немного ошеломляет кого-либо. Когда вы понимаете, на что влияют различные атрибуты, ваш пример пакета становится довольно простым.

По моему опыту, вы получите такое определение пакета следующим образом. Я предполагаю, что вы не упаковываете что-то из языкового репозитория на данный момент. То, что вы могли бы построить с make, например.

  1. Начните с mkDerivation
  2. Смотреть сбой сборки
  3. Исправьте ошибку, добавив зависимости, дополнительные команды, настройте флаги, патчи и т. Д.
  4. Повторение

Так что у вас есть, это проб и ошибок. Опыт работы с необходимыми инструментами сборки очень помогает.

Некоторые намеки:

  • Посмотрите на похожие пакеты, как они определены
  • Прочитайте документацию Nixpkgs
  • Сканирование кода поддержки языковых экосистемных пакетов
  • https://nixos.wiki/wiki/Generic_Algorithm_on_Doing_Packaging
Другие вопросы по тегам