title: How to build Nix packages from source?
body: <p>I think NixOS is great, but can't figure out how to build a package from source. Understanding the <a href="https://nixos.wiki/wiki/Nix_Expression_Language" rel="nofollow noreferrer">Nix expression language</a> is not the problem, but to know what to put in a <code>default.nix</code> in order to build a package.</p>
  <p>Take for example the Nix expression for <code>gedit</code>:</p>
  <pre><code>{ 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 : &quot;${stdenv.lib.makeLibraryPath [ gnome3.libpeas gnome3.gtksourceview ]}&quot;)
    '';
  
    meta = with stdenv.lib; {
      homepage = https://wiki.gnome.org/Apps/Gedit;
      description = &quot;Official text editor of the GNOME desktop environment&quot;;
      maintainers = gnome3.maintainers;
      license = licenses.gpl2;
      platforms = platforms.linux;
    };
  }
  </code></pre>
  <p>How can someone arrive to this solution? I must be missing something.</p>