Reputation: 105
I think NixOS is great, but can't figure out how to build a package from source. Understanding the Nix expression language is not the problem, but to know what to put in a default.nix
in order to build a package.
Take for example the Nix expression for 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;
};
}
How can someone arrive to this solution? I must be missing something.
Upvotes: 6
Views: 5746
Reputation: 7389
It is no surprise that such a package definition is a bit overwhelming to anyone. When you understand what the effect of various attributes, your example package becomes quite straight-forward.
In my experience, you arrive at such a package definition as follows. I'll assume you're not packaging something from a language-specific repository for now. Something you might build with make
, for example.
So there you have it, it's trial and error. Experience with the required build tools helps a lot.
Some hints:
Upvotes: 5