[Nix-dev] how to overwrite a derivation in nix
phreedom at yandex.ru
phreedom at yandex.ru
Sat Jan 11 02:09:10 CET 2014
On Saturday, January 11, 2014 01:04:48 AM Sergey wrote:
> On 10.01.2014 15:57, Marc Weber wrote:
> > option 1: use ~/.nixpkgs/config.nix, see wiki "how to keep multiple
> > packages up to date" or such.
> >
> > option 2: use applyGlobalOverrides
> > problem: its not exposed by pkgs AFAIK
> >
> > option 3: when importing nipkgs pass config.nix (like option 1)
> >
> > option 4: use deepOverride (see lib.misc.nix)
> >
> > Then it would look like
> > something_having_thunar_as_dep.deepOverride {
> >
> > thunar = patch-thunar-here
> >
> > }
> >
> > Now it looks like you don't want to "override", instead you want to
> > reuse a build and add a patch only giving it a new name, this is done by
> > overrideDerivation found in lib/customization.nix
> >
> > thunar is in xfce/core/thunar, and no top-level in all-packages.nix
> > and eg ./pkgs/desktops/xfce/core/xfdesktop.nix|2| depends on it.
> >
> > Thus you might need any of the deep overriding methods listed above if
> > you want packages to change depending on it.
> >
> > Eventually the most simple thing is to create a git topic branch and
> > just apply your change.
>
> Yep, I do the job in my local branch, which I don't plan to merge into
> upstream. But I also want to minimize the changes in the nixpkgs folder,
> in particular, I'd like to avoid copying an existing derivation if I
> don't need a specific version of the application it defines. Of cause,
> ideally, I'd like to avoid touching the tree at all.
>
> > Marc Weber
> > _______________________________________________
> > nix-dev mailing list
> > nix-dev at lists.science.uu.nl
> > http://lists.science.uu.nl/mailman/listinfo/nix-dev
>
> overrideDerivation does what I expected, thanks! Looks like I don't need
> deepOverride right now. There is a problem, however, which prevents me
> from keeping my changes completely separate from the nixpkgs tree. It
> is on a nixos level. Basically, I've ended up with the following setup:
>
> # nixos/services/x11/desktopManagers/xfce.nix
>
> environment.systemPackages = [
> ...
> pkgs.xfce.thunar
> ...
> ];
>
> # my_config.nix
>
> let
> thunar_uca = pkgs.lib.hiPrio (pkgs.lib.overrideDerivation
> pkgs.xfce.thunar (a:{
> name = a.name + "-uca";
> prePatch = ''
> ./tweak-sources.sh
> '';
> }));
> in
>
> environment.systemPackages = [
> ...
> thunar_uca
> ...
> ];
>
> Here I have two different conflicting packages sitting in the
> environment.systemPackages after merging. hiPrio doesn't help me here
> probably because it affects nix-env only. If there had been a method of
> filtering out original pkgs.xfce.thunar from systemPackages list, I
> would have done my hack without touching nixpkgs/. Is it possible? For
> now I have a patch which does some minimal changes [1] there.
you simply need to override thunar instead of adding another package.
xfce =pkgs.xfce // {thunar = overrideDerivation pkgs.xfce.thunar ... }
More information about the nix-dev
mailing list